diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2012-12-25 19:09:45 -0500 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-02-03 15:09:23 -0500 |
| commit | 495dfbf767553980dbd40a19a96a8ca5fa1be616 (patch) | |
| tree | 5c6d499f130f17abad2ee9407272d92e9192879a /include | |
| parent | 08d32fe504a7670cab3190c624448695adcf70e4 (diff) | |
generic sys_sigaction() and compat_sys_sigaction()
conditional on OLD_SIGACTION/COMPAT_OLD_SIGACTION
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/compat.h | 14 | ||||
| -rw-r--r-- | include/linux/signal.h | 9 | ||||
| -rw-r--r-- | include/linux/syscalls.h | 5 |
3 files changed, 28 insertions, 0 deletions
diff --git a/include/linux/compat.h b/include/linux/compat.h index 0d53ab4f79c5..e20b8b404ae9 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
| @@ -299,6 +299,15 @@ struct compat_robust_list_head { | |||
| 299 | compat_uptr_t list_op_pending; | 299 | compat_uptr_t list_op_pending; |
| 300 | }; | 300 | }; |
| 301 | 301 | ||
| 302 | #ifdef CONFIG_COMPAT_OLD_SIGACTION | ||
| 303 | struct compat_old_sigaction { | ||
| 304 | compat_uptr_t sa_handler; | ||
| 305 | compat_old_sigset_t sa_mask; | ||
| 306 | compat_ulong_t sa_flags; | ||
| 307 | compat_uptr_t sa_restorer; | ||
| 308 | }; | ||
| 309 | #endif | ||
| 310 | |||
| 302 | struct compat_statfs; | 311 | struct compat_statfs; |
| 303 | struct compat_statfs64; | 312 | struct compat_statfs64; |
| 304 | struct compat_old_linux_dirent; | 313 | struct compat_old_linux_dirent; |
| @@ -383,6 +392,11 @@ int get_compat_sigevent(struct sigevent *event, | |||
| 383 | const struct compat_sigevent __user *u_event); | 392 | const struct compat_sigevent __user *u_event); |
| 384 | long compat_sys_rt_tgsigqueueinfo(compat_pid_t tgid, compat_pid_t pid, int sig, | 393 | long compat_sys_rt_tgsigqueueinfo(compat_pid_t tgid, compat_pid_t pid, int sig, |
| 385 | struct compat_siginfo __user *uinfo); | 394 | struct compat_siginfo __user *uinfo); |
| 395 | #ifdef CONFIG_COMPAT_OLD_SIGACTION | ||
| 396 | asmlinkage long compat_sys_sigaction(int sig, | ||
| 397 | const struct compat_old_sigaction __user *act, | ||
| 398 | struct compat_old_sigaction __user *oact); | ||
| 399 | #endif | ||
| 386 | 400 | ||
| 387 | static inline int compat_timeval_compare(struct compat_timeval *lhs, | 401 | static inline int compat_timeval_compare(struct compat_timeval *lhs, |
| 388 | struct compat_timeval *rhs) | 402 | struct compat_timeval *rhs) |
diff --git a/include/linux/signal.h b/include/linux/signal.h index 0b6878e882da..e28e8d455d6e 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h | |||
| @@ -269,6 +269,15 @@ struct k_sigaction { | |||
| 269 | __sigrestore_t ka_restorer; | 269 | __sigrestore_t ka_restorer; |
| 270 | #endif | 270 | #endif |
| 271 | }; | 271 | }; |
| 272 | |||
| 273 | #ifdef CONFIG_OLD_SIGACTION | ||
| 274 | struct old_sigaction { | ||
| 275 | __sighandler_t sa_handler; | ||
| 276 | old_sigset_t sa_mask; | ||
| 277 | unsigned long sa_flags; | ||
| 278 | __sigrestore_t sa_restorer; | ||
| 279 | }; | ||
| 280 | #endif | ||
| 272 | 281 | ||
| 273 | extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie); | 282 | extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie); |
| 274 | extern void signal_delivered(int sig, siginfo_t *info, struct k_sigaction *ka, struct pt_regs *regs, int stepping); | 283 | extern void signal_delivered(int sig, siginfo_t *info, struct k_sigaction *ka, struct pt_regs *regs, int stepping); |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 1c4938bf901e..02b045012785 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -385,6 +385,11 @@ asmlinkage long sys_sigsuspend(old_sigset_t mask); | |||
| 385 | asmlinkage long sys_sigsuspend(int unused1, int unused2, old_sigset_t mask); | 385 | asmlinkage long sys_sigsuspend(int unused1, int unused2, old_sigset_t mask); |
| 386 | #endif | 386 | #endif |
| 387 | 387 | ||
| 388 | #ifdef CONFIG_OLD_SIGACTION | ||
| 389 | asmlinkage long sys_sigaction(int, const struct old_sigaction __user *, | ||
| 390 | struct old_sigaction __user *); | ||
| 391 | #endif | ||
| 392 | |||
| 388 | #ifndef CONFIG_ODD_RT_SIGACTION | 393 | #ifndef CONFIG_ODD_RT_SIGACTION |
| 389 | asmlinkage long sys_rt_sigaction(int, | 394 | asmlinkage long sys_rt_sigaction(int, |
| 390 | const struct sigaction __user *, | 395 | const struct sigaction __user *, |
