In an attempt to clean up sparse warnings, I offer this small patch. The two warnings it fixes are:
fs/exec.c:424:39: warning: incorrect type in return expression (different address spaces) fs/exec.c:424:39: expected char const [noderef] <asn:1>* fs/exec.c:424:39: got void * fs/exec.c:431:31: warning: incorrect type in return expression (different address spaces) fs/exec.c:431:31: expected char const [noderef] <asn:1>* fs/exec.c:431:31: got void * It seems cleaner to me to have a new ERR_USER_PTR macro than to add casts in get_user_ptr_arg(). Signed-off-by: Matthew Wilcox <mawil...@microsoft.com> diff --git a/fs/exec.c b/fs/exec.c index b148ad241792..0d1678a3e284 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -421,14 +421,14 @@ static const char __user *get_user_arg_ptr(struct user_arg_ptr argv, int nr) compat_uptr_t compat; if (get_user(compat, argv.ptr.compat + nr)) - return ERR_PTR(-EFAULT); + return ERR_USER_PTR(-EFAULT); return compat_ptr(compat); } #endif if (get_user(native, argv.ptr.native + nr)) - return ERR_PTR(-EFAULT); + return ERR_USER_PTR(-EFAULT); return native; } diff --git a/include/linux/err.h b/include/linux/err.h index 1e3558845e4c..14bd9864acbd 100644 --- a/include/linux/err.h +++ b/include/linux/err.h @@ -25,6 +25,11 @@ static inline void * __must_check ERR_PTR(long error) return (void *) error; } +static inline void __user * __must_check ERR_USER_PTR(long error) +{ + return (void __user *) error; +} + static inline long __must_check PTR_ERR(__force const void *ptr) { return (long) ptr;