#define EFAULT 14 static int unsafe_put_user(int *value, int *ptr) { asm goto ("1: movl %[value], %[mem]\n\t" ".pushsection __ex_table\n\t" ".long 1b - .\n\t" ".long err - .\n\t" ".popsection" :: [value] "rmi" (*value), [mem] "m" (*ptr) :: err ); return 0; err: return -EFAULT; } int test(int *user_a, int *user_b, int *user_c, int *user_d) { int a = 1, b = 2, c = 3, d = 4; if (unsafe_put_user(&a, user_a)) goto error; if (unsafe_put_user(&b, user_b)) goto error; if (unsafe_put_user(&c, user_c)) goto error; if (unsafe_put_user(&d, user_d)) goto error; return 0; error: return -EFAULT; }