Commit 38696e33 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'xtensa-20200603' of git://github.com/jcmvbkbc/linux-xtensa

Pull Xtensa updates from Max Filippov:

 - fix __user annotations in asm/uaccess.h

 - fix comments in entry.S

* tag 'xtensa-20200603' of git://github.com/jcmvbkbc/linux-xtensa:
  xtensa: Fix spelling/grammar in comment
  xtensa: add missing __user annotations to asm/uaccess.h
  xtensa: fix error paths in __get_user_{check,size}
  xtensa: fix type conversion in __get_user_size
  xtensa: add missing __user annotations to __{get,put}_user_check
parents 44e40e96 3ead2f97
Loading
Loading
Loading
Loading
+16 −16
Original line number Diff line number Diff line
@@ -84,7 +84,7 @@ extern long __put_user_bad(void);
#define __put_user_check(x, ptr, size)					\
({									\
	long __pu_err = -EFAULT;					\
	__typeof__(*(ptr)) *__pu_addr = (ptr);				\
	__typeof__(*(ptr)) __user *__pu_addr = (ptr);			\
	if (access_ok(__pu_addr, size))			\
		__put_user_size((x), __pu_addr, (size), __pu_err);	\
	__pu_err;							\
@@ -180,11 +180,11 @@ __asm__ __volatile__( \
#define __get_user_check(x, ptr, size)					\
({									\
	long __gu_err = -EFAULT;					\
	const __typeof__(*(ptr)) *__gu_addr = (ptr);			\
	const __typeof__(*(ptr)) __user *__gu_addr = (ptr);		\
	if (access_ok(__gu_addr, size))					\
		__get_user_size((x), __gu_addr, (size), __gu_err);	\
	else								\
		(x) = 0;						\
		(x) = (__typeof__(*(ptr)))0;				\
	__gu_err;							\
})

@@ -202,13 +202,15 @@ do { \
		u64 __x;						\
		if (unlikely(__copy_from_user(&__x, ptr, 8))) {		\
			retval = -EFAULT;				\
			(x) = 0;					\
			(x) = (__typeof__(*(ptr)))0;			\
		} else {						\
			(x) = *(__force __typeof__((ptr)))&__x;		\
			(x) = *(__force __typeof__(*(ptr)) *)&__x;	\
		}							\
		break;							\
	}								\
	default: (x) = 0; __get_user_bad();				\
	default:							\
		(x) = (__typeof__(*(ptr)))0;				\
		__get_user_bad();					\
	}								\
} while (0)

@@ -270,15 +272,15 @@ raw_copy_to_user(void __user *to, const void *from, unsigned long n)
 */

static inline unsigned long
__xtensa_clear_user(void *addr, unsigned long size)
__xtensa_clear_user(void __user *addr, unsigned long size)
{
	if (!__memset(addr, 0, size))
	if (!__memset((void __force *)addr, 0, size))
		return size;
	return 0;
}

static inline unsigned long
clear_user(void *addr, unsigned long size)
clear_user(void __user *addr, unsigned long size)
{
	if (access_ok(addr, size))
		return __xtensa_clear_user(addr, size);
@@ -290,10 +292,10 @@ clear_user(void *addr, unsigned long size)

#ifndef CONFIG_GENERIC_STRNCPY_FROM_USER

extern long __strncpy_user(char *, const char *, long);
extern long __strncpy_user(char *dst, const char __user *src, long count);

static inline long
strncpy_from_user(char *dst, const char *src, long count)
strncpy_from_user(char *dst, const char __user *src, long count)
{
	if (access_ok(src, 1))
		return __strncpy_user(dst, src, count);
@@ -306,13 +308,11 @@ long strncpy_from_user(char *dst, const char *src, long count);
/*
 * Return the size of a string (including the ending 0!)
 */
extern long __strnlen_user(const char *, long);
extern long __strnlen_user(const char __user *str, long len);

static inline long strnlen_user(const char *str, long len)
static inline long strnlen_user(const char __user *str, long len)
{
	unsigned long top = __kernel_ok ? ~0UL : TASK_SIZE - 1;

	if ((unsigned long)str > top)
	if (!access_ok(str, 1))
		return 0;
	return __strnlen_user(str, len);
}
+2 −2
Original line number Diff line number Diff line
@@ -959,14 +959,14 @@ ENDPROC(unrecoverable_exception)
 * of the proper size instead.
 *
 * This algorithm simply backs out the register changes started by the user
 * excpetion handler, makes it appear that we have started a window underflow
 * exception handler, makes it appear that we have started a window underflow
 * by rotating the window back and then setting the old window base (OWB) in
 * the 'ps' register with the rolled back window base. The 'movsp' instruction
 * will be re-executed and this time since the next window frames is in the
 * active AR registers it won't cause an exception.
 *
 * If the WindowUnderflow code gets a TLB miss the page will get mapped
 * the the partial windeowUnderflow will be handeled in the double exception
 * the partial WindowUnderflow will be handled in the double exception
 * handler.
 *
 * Entry condition: