|
@@ -261,11 +261,12 @@ asmlinkage int sys32_sigaction(int sig, const struct sigaction32 *act,
|
|
|
|
|
|
if (act) {
|
|
|
old_sigset_t mask;
|
|
|
+ s32 handler;
|
|
|
|
|
|
if (!access_ok(VERIFY_READ, act, sizeof(*act)))
|
|
|
return -EFAULT;
|
|
|
- err |= __get_user((u32)(u64)new_ka.sa.sa_handler,
|
|
|
- &act->sa_handler);
|
|
|
+ err |= __get_user(handler, &act->sa_handler);
|
|
|
+ new_ka.sa.sa_handler = (void*)(s64)handler;
|
|
|
err |= __get_user(new_ka.sa.sa_flags, &act->sa_flags);
|
|
|
err |= __get_user(mask, &act->sa_mask.sig[0]);
|
|
|
if (err)
|
|
@@ -826,12 +827,13 @@ asmlinkage int sys32_rt_sigaction(int sig, const struct sigaction32 *act,
|
|
|
goto out;
|
|
|
|
|
|
if (act) {
|
|
|
+ s32 handler;
|
|
|
int err = 0;
|
|
|
|
|
|
if (!access_ok(VERIFY_READ, act, sizeof(*act)))
|
|
|
return -EFAULT;
|
|
|
- err |= __get_user((u32)(u64)new_sa.sa.sa_handler,
|
|
|
- &act->sa_handler);
|
|
|
+ err |= __get_user(handler, &act->sa_handler);
|
|
|
+ new_sa.sa.sa_handler = (void*)(s64)handler;
|
|
|
err |= __get_user(new_sa.sa.sa_flags, &act->sa_flags);
|
|
|
err |= get_sigset(&new_sa.sa.sa_mask, &act->sa_mask);
|
|
|
if (err)
|