Messages in this thread | | | Date | Sun, 2 Mar 2008 23:23:14 +0000 | From | Al Viro <> | Subject | [RFC] breakage in 4223cc34365e4 (h8300: uaccess.h update) |
| |
After that commit in asm-h8300/uaccess.h we have
#define get_user(x, ptr) \ ({ \ int __gu_err = 0; \ uint32_t __gu_val = 0; \ ^^^^^^^^^^^^^^^^^ switch (sizeof(*(ptr))) { \ case 1: \ case 2: \ case 4: \ __gu_val = *(ptr); \ break; \ case 8: \ memcpy(&__gu_val, ptr, sizeof (*(ptr))); \ ^^^^^^^^^^^^^^^^
which, of course, is FUBAR whenever we actually hit that case - memcpy of 8 bytes into uint32_t is obviously wrong. Why don't we simply do
#define get_user(x, ptr) \ ({ \ int __gu_err = 0; \ typeof(*(ptr)) __gu_val = *ptr; \ switch (sizeof(*(ptr))) { \ case 1: \ case 2: \ case 4: \ case 8: \ break; \ default: \ __gu_err = __get_user_bad(); \ break; \ } \ (x) = __gu_val; \ __gu_err; \ })
and be done with that, anyway?
| |