]> git.hungrycats.org Git - linux/commitdiff
[PATCH] sparse: simplify and tighten sparse typechecking
authorAlexander Viro <viro@parcelfarce.linux.theplanet.co.uk>
Sun, 25 Jul 2004 04:12:16 +0000 (21:12 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sun, 25 Jul 2004 04:12:16 +0000 (21:12 -0700)
This takes advantage of the simplified typeof semantics of sparse
address spaces, (should be enough for alpha, i386, ppc, ppc64, sparc,
sparc64, x86_64 - most of them didn't actually need anything to be done)
and couple of missing annotations that got caught by that.

arch/i386/kernel/sys_i386.c
arch/ppc/kernel/syscalls.c
include/asm-alpha/uaccess.h
include/asm-i386/uaccess.h
include/asm-ppc/uaccess.h
include/asm-ppc64/uaccess.h
include/asm-x86_64/uaccess.h
include/linux/atmdev.h

index 0c36130afb047c1d8879f94f63dd98a7ab92b4e3..a4a61976ecb922fea01df1a5ea4d07dbc3f155bf 100644 (file)
@@ -149,7 +149,7 @@ asmlinkage int sys_ipc (uint call, int first, int second,
                union semun fourth;
                if (!ptr)
                        return -EINVAL;
-               if (get_user(fourth.__pad, (void * __user *) ptr))
+               if (get_user(fourth.__pad, (void __user * __user *) ptr))
                        return -EFAULT;
                return sys_semctl (first, second, third, fourth);
        }
index 7f2531d12569569847c1a3ce3570002596be3efb..994426833fbe7a66514a0ae5f9603c76ac138471 100644 (file)
@@ -78,7 +78,7 @@ sys_ipc (uint call, int first, int second, int third, void __user *ptr, long fif
                if (!ptr)
                        break;
                if ((ret = verify_area (VERIFY_READ, ptr, sizeof(long)))
-                   || (ret = get_user(fourth.__pad, (void *__user *)ptr)))
+                   || (ret = get_user(fourth.__pad, (void __user *__user *)ptr)))
                        break;
                ret = sys_semctl (first, second, third, fourth);
                break;
index afdb02a94aa6b2aaa1c9f89e19a2b08bf6ee9cf3..c9bb9f103ca69df4792682acf3adac2f9ab9ee65 100644 (file)
@@ -107,7 +107,7 @@ extern void __get_user_unknown(void);
 #define __get_user_check(x,ptr,size,segment)                           \
 ({                                                                     \
        long __gu_err = -EFAULT, __gu_val = 0;                          \
-       const __typeof__(*(ptr)) *__gu_addr = (ptr);                    \
+       const __typeof__(*(ptr)) __user *__gu_addr = (ptr);             \
        __chk_user_ptr(ptr);                                            \
        if (__access_ok((unsigned long)__gu_addr,size,segment)) {       \
                __gu_err = 0;                                           \
@@ -222,7 +222,7 @@ extern void __put_user_unknown(void);
 #define __put_user_check(x,ptr,size,segment)                           \
 ({                                                                     \
        long __pu_err = -EFAULT;                                        \
-       __typeof__(*(ptr)) *__pu_addr = (ptr);                          \
+       __typeof__(*(ptr)) __user *__pu_addr = (ptr);                   \
        __chk_user_ptr(ptr);                                            \
        if (__access_ok((unsigned long)__pu_addr,size,segment)) {       \
                __pu_err = 0;                                           \
index 656be13d0abd30171ccbaf39fd08ddeabfa56aff..bb202d21268fddae14fd52bf5ae57e67ccaea5d5 100644 (file)
@@ -261,7 +261,7 @@ extern void __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);                   \
        might_sleep();                                          \
        if (access_ok(VERIFY_WRITE,__pu_addr,size))                     \
                __put_user_size((x),__pu_addr,(size),__pu_err,-EFAULT); \
index 0a1a1a86a1de8a25fcdc7f751e4e06cb78322a72..b9d763e0d886eb355057004805234439e8eb51dd 100644 (file)
@@ -34,7 +34,8 @@
        ((addr) <= current->thread.fs.seg                                   \
         && ((size) == 0 || (size) - 1 <= current->thread.fs.seg - (addr)))
 
-#define access_ok(type, addr, size) __access_ok((unsigned long)(addr),(size))
+#define access_ok(type, addr, size) \
+       (__chk_user_ptr(addr),__access_ok((unsigned long)(addr),(size)))
 
 extern inline int verify_area(int type, const void __user * addr, unsigned long size)
 {
@@ -105,6 +106,7 @@ extern long __put_user_bad(void);
 #define __put_user_nocheck(x,ptr,size)                 \
 ({                                                     \
        long __pu_err;                                  \
+       __chk_user_ptr(ptr);                            \
        __put_user_size((x),(ptr),(size),__pu_err);     \
        __pu_err;                                       \
 })
@@ -112,7 +114,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(VERIFY_WRITE,__pu_addr,size))             \
                __put_user_size((x),__pu_addr,(size),__pu_err); \
        __pu_err;                                               \
@@ -179,6 +181,7 @@ do {                                                        \
 #define __get_user_nocheck(x, ptr, size)                       \
 ({                                                             \
        long __gu_err, __gu_val;                                \
+       __chk_user_ptr(ptr);                                    \
        __get_user_size(__gu_val, (ptr), (size), __gu_err);     \
        (x) = (__typeof__(*(ptr)))__gu_val;                     \
        __gu_err;                                               \
@@ -188,6 +191,7 @@ do {                                                        \
 ({                                                             \
        long __gu_err;                                          \
        long long __gu_val;                                     \
+       __chk_user_ptr(ptr);                                    \
        __get_user_size64(__gu_val, (ptr), (size), __gu_err);   \
        (x) = (__typeof__(*(ptr)))__gu_val;                     \
        __gu_err;                                               \
@@ -196,7 +200,7 @@ do {                                                        \
 #define __get_user_check(x, ptr, size)                                 \
 ({                                                                     \
        long __gu_err = -EFAULT, __gu_val = 0;                          \
-       const __typeof__(*(ptr)) *__gu_addr = (ptr);                    \
+       const __typeof__(*(ptr)) __user *__gu_addr = (ptr);             \
        if (access_ok(VERIFY_READ, __gu_addr, (size)))                  \
                __get_user_size(__gu_val, __gu_addr, (size), __gu_err); \
        (x) = (__typeof__(*(ptr)))__gu_val;                             \
@@ -207,7 +211,7 @@ do {                                                        \
 ({                                                                       \
        long __gu_err = -EFAULT;                                          \
        long long __gu_val = 0;                                           \
-       const __typeof__(*(ptr)) *__gu_addr = (ptr);                      \
+       const __typeof__(*(ptr)) __user *__gu_addr = (ptr);               \
        if (access_ok(VERIFY_READ, __gu_addr, (size)))                    \
                __get_user_size64(__gu_val, __gu_addr, (size), __gu_err); \
        (x) = (__typeof__(*(ptr)))__gu_val;                               \
index 4d2d6097802b9a1c4264b991763f9306bef405bd..77906c9354dd77d48c2d0c9e2fce12e2e4fd6bc8 100644 (file)
@@ -175,7 +175,7 @@ do {                                                                        \
 #define __get_user_check(x,ptr,size)                                   \
 ({                                                                     \
        long __gu_err = -EFAULT, __gu_val = 0;                          \
-       const __typeof__(*(ptr)) *__gu_addr = (ptr);                    \
+       const __typeof__(*(ptr)) __user *__gu_addr = (ptr);             \
        if (access_ok(VERIFY_READ,__gu_addr,size))                      \
                __get_user_size(__gu_val,__gu_addr,(size),__gu_err,-EFAULT);\
        (x) = (__typeof__(*(ptr)))__gu_val;                             \
index ed4dc1cca10ac51c651bbabde43bd7d81e1a17c4..ba3d49d8a888a73cdf5e4d2a187a0c75b4623dc3 100644 (file)
@@ -148,7 +148,7 @@ extern void __put_user_bad(void);
 #define __put_user_check(x,ptr,size)                   \
 ({                                                     \
        int __pu_err = -EFAULT;                         \
-       __typeof__(*(ptr)) *__pu_addr = (ptr);          \
+       __typeof__(*(ptr)) __user *__pu_addr = (ptr);   \
        if (likely(access_ok(VERIFY_WRITE,__pu_addr,size)))     \
                __put_user_size((x),__pu_addr,(size),__pu_err); \
        __pu_err;                                       \
index b19303d3fa6b2e098e7e5a5c4859410629c37a75..ad454dadd221c2886dabeee924bacde8a57d672e 100644 (file)
@@ -147,7 +147,7 @@ struct atm_dev_stats {
 
 struct atm_iobuf {
        int length;
-       void *buffer;
+       void __user *buffer;
 };
 
 /* for ATM_GETCIRANGE / ATM_SETCIRANGE */