Advertisement
Guest User

Untitled

a guest
Jan 29th, 2011
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.61 KB | None | 0 0
  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. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement