Pastebin launched a little side project called HostCabi.net, check it out ;-)Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jan 29th, 2011  |  syntax: None  |  size: 3.61 KB  |  hits: 20  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. diff --git a/include/asm-generic/uaccess.h b/include/asm-generic/uaccess.h
  2. index b218b85..fb9887a 100644
  3. --- a/include/asm-generic/uaccess.h
  4. +++ b/include/asm-generic/uaccess.h
  5. @@ -142,16 +142,17 @@ static inline __must_check long __copy_to_user(void __user *to,
  6.   */
  7.  #define __put_user(x, ptr) \
  8.  ({                                                             \
  9. -       __typeof__(*(ptr)) __x = (x);                           \
  10. +       __typeof__(*(ptr)) __user *__pu_addr = (ptr);           \
  11. +       __typeof__(*(ptr)) __pu_val = (x);                      \
  12.         int __pu_err = -EFAULT;                                 \
  13. -        __chk_user_ptr(ptr);                                    \
  14. -       switch (sizeof (*(ptr))) {                              \
  15. +        __chk_user_ptr(__pu_addr);                             \
  16. +       switch (sizeof (*(__pu_addr))) {                        \
  17.         case 1:                                                 \
  18.         case 2:                                                 \
  19.         case 4:                                                 \
  20.         case 8:                                                 \
  21. -               __pu_err = __put_user_fn(sizeof (*(ptr)),       \
  22. -                                        ptr, &__x);            \
  23. +               __pu_err = __put_user_fn(sizeof (*(__pu_addr)), \
  24. +                                        __pu_addr, &__pu_val); \
  25.                 break;                                          \
  26.         default:                                                \
  27.                 __put_user_bad();                               \
  28. @@ -162,9 +163,10 @@ static inline __must_check long __copy_to_user(void __user *to,
  29.  
  30.  #define put_user(x, ptr)                                       \
  31.  ({                                                             \
  32. +       __typeof__(*(ptr)) __user *__Pu_addr = (ptr);           \
  33.         might_sleep();                                          \
  34. -       access_ok(VERIFY_WRITE, ptr, sizeof(*ptr)) ?            \
  35. -               __put_user(x, ptr) :                            \
  36. +       access_ok(VERIFY_WRITE, __Pu_addr, sizeof(*__Pu_addr)) ?\
  37. +               __put_user(x, __Pu_addr) :                      \
  38.                 -EFAULT;                                        \
  39.  })
  40.  
  41. @@ -178,35 +180,36 @@ extern int __put_user_bad(void) __attribute__((noreturn));
  42.  
  43.  #define __get_user(x, ptr)                                     \
  44.  ({                                                             \
  45. +       const __typeof__(*(ptr)) __user *__gu_addr = (ptr);     \
  46.         int __gu_err = -EFAULT;                                 \
  47. -       __chk_user_ptr(ptr);                                    \
  48. -       switch (sizeof(*(ptr))) {                               \
  49. +       __chk_user_ptr(__gu_addr);                              \
  50. +       switch (sizeof(*__gu_addr)) {                           \
  51.         case 1: {                                               \
  52. -               unsigned char __x;                              \
  53. -               __gu_err = __get_user_fn(sizeof (*(ptr)),       \
  54. -                                        ptr, &__x);            \
  55. -               (x) = *(__force __typeof__(*(ptr)) *) &__x;     \
  56. +               unsigned char __gu_val;                         \
  57. +               __gu_err = __get_user_fn(sizeof (*__gu_addr),   \
  58. +                                        __gu_addr, &__gu_val); \
  59. +               (x) = *(__force __typeof__(*__gu_addr) *) &__gu_val;    \
  60.                 break;                                          \
  61.         };                                                      \
  62.         case 2: {                                               \
  63. -               unsigned short __x;                             \
  64. -               __gu_err = __get_user_fn(sizeof (*(ptr)),       \
  65. -                                        ptr, &__x);            \
  66. -               (x) = *(__force __typeof__(*(ptr)) *) &__x;     \
  67. +               unsigned short __gu_val;                        \
  68. +               __gu_err = __get_user_fn(sizeof (*__gu_addr),   \
  69. +                                        __gu_addr, &__gu_val); \
  70. +               (x) = *(__force __typeof__(*__gu_addr) *) &__gu_val;    \
  71.                 break;                                          \
  72.         };                                                      \
  73.         case 4: {                                               \
  74. -               unsigned int __x;                               \
  75. -               __gu_err = __get_user_fn(sizeof (*(ptr)),       \
  76. -                                        ptr, &__x);            \
  77. -               (x) = *(__force __typeof__(*(ptr)) *) &__x;     \
  78. +               unsigned int __gu_val;                          \
  79. +               __gu_err = __get_user_fn(sizeof (*__gu_addr),   \
  80. +                                        __gu_addr, &__gu_val); \
  81. +               (x) = *(__force __typeof__(*__gu_addr) *) &__gu_val;    \
  82.                 break;                                          \
  83.         };                                                      \
  84.         case 8: {                                               \
  85. -               unsigned long long __x;                         \
  86. -               __gu_err = __get_user_fn(sizeof (*(ptr)),       \
  87. -                                        ptr, &__x);            \
  88. -               (x) = *(__force __typeof__(*(ptr)) *) &__x;     \
  89. +               unsigned long long __gu_val;                    \
  90. +               __gu_err = __get_user_fn(sizeof (*__gu_addr),   \
  91. +                                        __gu_addr, &__gu_val); \
  92. +               (x) = *(__force __typeof__(*__gu_addr) *) &__gu_val;    \
  93.                 break;                                          \
  94.         };                                                      \
  95.         default:                                                \
  96. @@ -218,9 +221,10 @@ extern int __put_user_bad(void) __attribute__((noreturn));
  97.  
  98.  #define get_user(x, ptr)                                       \
  99.  ({                                                             \
  100. +       const __typeof__(*(ptr)) __user *__Gu_addr = (ptr);     \
  101.         might_sleep();                                          \
  102. -       access_ok(VERIFY_READ, ptr, sizeof(*ptr)) ?             \
  103. -               __get_user(x, ptr) :                            \
  104. +       access_ok(VERIFY_READ, __Gu_addr, sizeof(*__Gu_addr)) ? \
  105. +               __get_user(x, __Gu_addr) :                      \
  106.                 -EFAULT;                                        \
  107.  })