644 lines
26 KiB
Diff
644 lines
26 KiB
Diff
From e124742d1d9d4faaa6fb69423dcf0467bf76888a Mon Sep 17 00:00:00 2001
|
|
From: David Hildenbrand <dahi@linux.vnet.ibm.com>
|
|
Date: Mon, 11 May 2015 17:52:08 +0200
|
|
Subject: [PATCH 03/14] uaccess: clarify that uaccess may only sleep if
|
|
pagefaults are enabled
|
|
Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.0/patches-4.0.5-rt3.tar.xz
|
|
|
|
In general, non-atomic variants of user access functions must not sleep
|
|
if pagefaults are disabled.
|
|
|
|
Let's update all relevant comments in uaccess code. This also reflects
|
|
the might_sleep() checks in might_fault().
|
|
|
|
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
|
|
---
|
|
arch/avr32/include/asm/uaccess.h | 12 ++++++---
|
|
arch/hexagon/include/asm/uaccess.h | 3 +-
|
|
arch/m32r/include/asm/uaccess.h | 30 +++++++++++++++-------
|
|
arch/microblaze/include/asm/uaccess.h | 6 +++-
|
|
arch/mips/include/asm/uaccess.h | 45 ++++++++++++++++++++++------------
|
|
arch/s390/include/asm/uaccess.h | 15 +++++++----
|
|
arch/score/include/asm/uaccess.h | 15 +++++++----
|
|
arch/tile/include/asm/uaccess.h | 18 +++++++++----
|
|
arch/x86/include/asm/uaccess.h | 15 +++++++----
|
|
arch/x86/include/asm/uaccess_32.h | 6 +++-
|
|
arch/x86/lib/usercopy_32.c | 6 +++-
|
|
lib/strnlen_user.c | 6 +++-
|
|
12 files changed, 118 insertions(+), 59 deletions(-)
|
|
|
|
--- a/arch/avr32/include/asm/uaccess.h
|
|
+++ b/arch/avr32/include/asm/uaccess.h
|
|
@@ -97,7 +97,8 @@ static inline __kernel_size_t __copy_fro
|
|
* @x: Value to copy to user space.
|
|
* @ptr: Destination address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple value from kernel space to user
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -116,7 +117,8 @@ static inline __kernel_size_t __copy_fro
|
|
* @x: Variable to store result.
|
|
* @ptr: Source address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple variable from user space to kernel
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -136,7 +138,8 @@ static inline __kernel_size_t __copy_fro
|
|
* @x: Value to copy to user space.
|
|
* @ptr: Destination address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple value from kernel space to user
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -158,7 +161,8 @@ static inline __kernel_size_t __copy_fro
|
|
* @x: Variable to store result.
|
|
* @ptr: Source address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple variable from user space to kernel
|
|
* space. It supports simple types like char and int, but not larger
|
|
--- a/arch/hexagon/include/asm/uaccess.h
|
|
+++ b/arch/hexagon/include/asm/uaccess.h
|
|
@@ -36,7 +36,8 @@
|
|
* @addr: User space pointer to start of block to check
|
|
* @size: Size of block to check
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Checks if a pointer to a block of memory in user space is valid.
|
|
*
|
|
--- a/arch/m32r/include/asm/uaccess.h
|
|
+++ b/arch/m32r/include/asm/uaccess.h
|
|
@@ -91,7 +91,8 @@ static inline void set_fs(mm_segment_t s
|
|
* @addr: User space pointer to start of block to check
|
|
* @size: Size of block to check
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Checks if a pointer to a block of memory in user space is valid.
|
|
*
|
|
@@ -155,7 +156,8 @@ extern int fixup_exception(struct pt_reg
|
|
* @x: Variable to store result.
|
|
* @ptr: Source address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple variable from user space to kernel
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -175,7 +177,8 @@ extern int fixup_exception(struct pt_reg
|
|
* @x: Value to copy to user space.
|
|
* @ptr: Destination address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple value from kernel space to user
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -194,7 +197,8 @@ extern int fixup_exception(struct pt_reg
|
|
* @x: Variable to store result.
|
|
* @ptr: Source address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple variable from user space to kernel
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -274,7 +278,8 @@ do { \
|
|
* @x: Value to copy to user space.
|
|
* @ptr: Destination address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple value from kernel space to user
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -568,7 +573,8 @@ unsigned long __generic_copy_from_user(v
|
|
* @from: Source address, in kernel space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from kernel space to user space. Caller must check
|
|
* the specified block with access_ok() before calling this function.
|
|
@@ -588,7 +594,8 @@ unsigned long __generic_copy_from_user(v
|
|
* @from: Source address, in kernel space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from kernel space to user space.
|
|
*
|
|
@@ -606,7 +613,8 @@ unsigned long __generic_copy_from_user(v
|
|
* @from: Source address, in user space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from user space to kernel space. Caller must check
|
|
* the specified block with access_ok() before calling this function.
|
|
@@ -626,7 +634,8 @@ unsigned long __generic_copy_from_user(v
|
|
* @from: Source address, in user space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from user space to kernel space.
|
|
*
|
|
@@ -677,7 +686,8 @@ unsigned long clear_user(void __user *me
|
|
* strlen_user: - Get the size of a string in user space.
|
|
* @str: The string to measure.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Get the size of a NUL-terminated string in user space.
|
|
*
|
|
--- a/arch/microblaze/include/asm/uaccess.h
|
|
+++ b/arch/microblaze/include/asm/uaccess.h
|
|
@@ -178,7 +178,8 @@ extern long __user_bad(void);
|
|
* @x: Variable to store result.
|
|
* @ptr: Source address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple variable from user space to kernel
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -290,7 +291,8 @@ extern long __user_bad(void);
|
|
* @x: Value to copy to user space.
|
|
* @ptr: Destination address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple value from kernel space to user
|
|
* space. It supports simple types like char and int, but not larger
|
|
--- a/arch/mips/include/asm/uaccess.h
|
|
+++ b/arch/mips/include/asm/uaccess.h
|
|
@@ -103,7 +103,8 @@ extern u64 __ua_limit;
|
|
* @addr: User space pointer to start of block to check
|
|
* @size: Size of block to check
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Checks if a pointer to a block of memory in user space is valid.
|
|
*
|
|
@@ -138,7 +139,8 @@ extern u64 __ua_limit;
|
|
* @x: Value to copy to user space.
|
|
* @ptr: Destination address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple value from kernel space to user
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -157,7 +159,8 @@ extern u64 __ua_limit;
|
|
* @x: Variable to store result.
|
|
* @ptr: Source address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple variable from user space to kernel
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -177,7 +180,8 @@ extern u64 __ua_limit;
|
|
* @x: Value to copy to user space.
|
|
* @ptr: Destination address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple value from kernel space to user
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -199,7 +203,8 @@ extern u64 __ua_limit;
|
|
* @x: Variable to store result.
|
|
* @ptr: Source address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple variable from user space to kernel
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -498,7 +503,8 @@ extern void __put_user_unknown(void);
|
|
* @x: Value to copy to user space.
|
|
* @ptr: Destination address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple value from kernel space to user
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -517,7 +523,8 @@ extern void __put_user_unknown(void);
|
|
* @x: Variable to store result.
|
|
* @ptr: Source address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple variable from user space to kernel
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -537,7 +544,8 @@ extern void __put_user_unknown(void);
|
|
* @x: Value to copy to user space.
|
|
* @ptr: Destination address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple value from kernel space to user
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -559,7 +567,8 @@ extern void __put_user_unknown(void);
|
|
* @x: Variable to store result.
|
|
* @ptr: Source address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple variable from user space to kernel
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -815,7 +824,8 @@ extern size_t __copy_user(void *__to, co
|
|
* @from: Source address, in kernel space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from kernel space to user space. Caller must check
|
|
* the specified block with access_ok() before calling this function.
|
|
@@ -888,7 +898,8 @@ extern size_t __copy_user_inatomic(void
|
|
* @from: Source address, in kernel space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from kernel space to user space.
|
|
*
|
|
@@ -1075,7 +1086,8 @@ extern size_t __copy_in_user_eva(void *_
|
|
* @from: Source address, in user space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from user space to kernel space. Caller must check
|
|
* the specified block with access_ok() before calling this function.
|
|
@@ -1107,7 +1119,8 @@ extern size_t __copy_in_user_eva(void *_
|
|
* @from: Source address, in user space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from user space to kernel space.
|
|
*
|
|
@@ -1329,7 +1342,8 @@ strncpy_from_user(char *__to, const char
|
|
* strlen_user: - Get the size of a string in user space.
|
|
* @str: The string to measure.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Get the size of a NUL-terminated string in user space.
|
|
*
|
|
@@ -1398,7 +1412,8 @@ static inline long __strnlen_user(const
|
|
* strnlen_user: - Get the size of a string in user space.
|
|
* @str: The string to measure.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Get the size of a NUL-terminated string in user space.
|
|
*
|
|
--- a/arch/s390/include/asm/uaccess.h
|
|
+++ b/arch/s390/include/asm/uaccess.h
|
|
@@ -98,7 +98,8 @@ static inline unsigned long extable_fixu
|
|
* @from: Source address, in user space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from user space to kernel space. Caller must check
|
|
* the specified block with access_ok() before calling this function.
|
|
@@ -118,7 +119,8 @@ unsigned long __must_check __copy_from_u
|
|
* @from: Source address, in kernel space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from kernel space to user space. Caller must check
|
|
* the specified block with access_ok() before calling this function.
|
|
@@ -264,7 +266,8 @@ int __get_user_bad(void) __attribute__((
|
|
* @from: Source address, in kernel space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from kernel space to user space.
|
|
*
|
|
@@ -290,7 +293,8 @@ void copy_from_user_overflow(void)
|
|
* @from: Source address, in user space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from user space to kernel space.
|
|
*
|
|
@@ -348,7 +352,8 @@ static inline unsigned long strnlen_user
|
|
* strlen_user: - Get the size of a string in user space.
|
|
* @str: The string to measure.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Get the size of a NUL-terminated string in user space.
|
|
*
|
|
--- a/arch/score/include/asm/uaccess.h
|
|
+++ b/arch/score/include/asm/uaccess.h
|
|
@@ -36,7 +36,8 @@
|
|
* @addr: User space pointer to start of block to check
|
|
* @size: Size of block to check
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Checks if a pointer to a block of memory in user space is valid.
|
|
*
|
|
@@ -61,7 +62,8 @@
|
|
* @x: Value to copy to user space.
|
|
* @ptr: Destination address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple value from kernel space to user
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -79,7 +81,8 @@
|
|
* @x: Variable to store result.
|
|
* @ptr: Source address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple variable from user space to kernel
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -98,7 +101,8 @@
|
|
* @x: Value to copy to user space.
|
|
* @ptr: Destination address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple value from kernel space to user
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -119,7 +123,8 @@
|
|
* @x: Variable to store result.
|
|
* @ptr: Source address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple variable from user space to kernel
|
|
* space. It supports simple types like char and int, but not larger
|
|
--- a/arch/tile/include/asm/uaccess.h
|
|
+++ b/arch/tile/include/asm/uaccess.h
|
|
@@ -78,7 +78,8 @@ int __range_ok(unsigned long addr, unsig
|
|
* @addr: User space pointer to start of block to check
|
|
* @size: Size of block to check
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Checks if a pointer to a block of memory in user space is valid.
|
|
*
|
|
@@ -192,7 +193,8 @@ extern int __get_user_bad(void)
|
|
* @x: Variable to store result.
|
|
* @ptr: Source address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple variable from user space to kernel
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -274,7 +276,8 @@ extern int __put_user_bad(void)
|
|
* @x: Value to copy to user space.
|
|
* @ptr: Destination address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple value from kernel space to user
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -330,7 +333,8 @@ extern int __put_user_bad(void)
|
|
* @from: Source address, in kernel space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from kernel space to user space. Caller must check
|
|
* the specified block with access_ok() before calling this function.
|
|
@@ -366,7 +370,8 @@ copy_to_user(void __user *to, const void
|
|
* @from: Source address, in user space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from user space to kernel space. Caller must check
|
|
* the specified block with access_ok() before calling this function.
|
|
@@ -437,7 +442,8 @@ static inline unsigned long __must_check
|
|
* @from: Source address, in user space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from user space to user space. Caller must check
|
|
* the specified blocks with access_ok() before calling this function.
|
|
--- a/arch/x86/include/asm/uaccess.h
|
|
+++ b/arch/x86/include/asm/uaccess.h
|
|
@@ -74,7 +74,8 @@ static inline bool __chk_range_not_ok(un
|
|
* @addr: User space pointer to start of block to check
|
|
* @size: Size of block to check
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Checks if a pointer to a block of memory in user space is valid.
|
|
*
|
|
@@ -145,7 +146,8 @@ extern int __get_user_bad(void);
|
|
* @x: Variable to store result.
|
|
* @ptr: Source address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple variable from user space to kernel
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -240,7 +242,8 @@ extern void __put_user_8(void);
|
|
* @x: Value to copy to user space.
|
|
* @ptr: Destination address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple value from kernel space to user
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -455,7 +458,8 @@ struct __large_struct { unsigned long bu
|
|
* @x: Variable to store result.
|
|
* @ptr: Source address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple variable from user space to kernel
|
|
* space. It supports simple types like char and int, but not larger
|
|
@@ -479,7 +483,8 @@ struct __large_struct { unsigned long bu
|
|
* @x: Value to copy to user space.
|
|
* @ptr: Destination address, in user space.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* This macro copies a single simple value from kernel space to user
|
|
* space. It supports simple types like char and int, but not larger
|
|
--- a/arch/x86/include/asm/uaccess_32.h
|
|
+++ b/arch/x86/include/asm/uaccess_32.h
|
|
@@ -70,7 +70,8 @@ static __always_inline unsigned long __m
|
|
* @from: Source address, in kernel space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from kernel space to user space. Caller must check
|
|
* the specified block with access_ok() before calling this function.
|
|
@@ -117,7 +118,8 @@ static __always_inline unsigned long
|
|
* @from: Source address, in user space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from user space to kernel space. Caller must check
|
|
* the specified block with access_ok() before calling this function.
|
|
--- a/arch/x86/lib/usercopy_32.c
|
|
+++ b/arch/x86/lib/usercopy_32.c
|
|
@@ -647,7 +647,8 @@ EXPORT_SYMBOL(__copy_from_user_ll_nocach
|
|
* @from: Source address, in kernel space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from kernel space to user space.
|
|
*
|
|
@@ -668,7 +669,8 @@ EXPORT_SYMBOL(_copy_to_user);
|
|
* @from: Source address, in user space.
|
|
* @n: Number of bytes to copy.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Copy data from user space to kernel space.
|
|
*
|
|
--- a/lib/strnlen_user.c
|
|
+++ b/lib/strnlen_user.c
|
|
@@ -85,7 +85,8 @@ static inline long do_strnlen_user(const
|
|
* @str: The string to measure.
|
|
* @count: Maximum count (including NUL character)
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Get the size of a NUL-terminated string in user space.
|
|
*
|
|
@@ -114,7 +115,8 @@ EXPORT_SYMBOL(strnlen_user);
|
|
* strlen_user: - Get the size of a user string INCLUDING final NUL.
|
|
* @str: The string to measure.
|
|
*
|
|
- * Context: User context only. This function may sleep.
|
|
+ * Context: User context only. This function may sleep if pagefaults are
|
|
+ * enabled.
|
|
*
|
|
* Get the size of a NUL-terminated string in user space.
|
|
*
|