aboutsummaryrefslogtreecommitdiff
path: root/arch/mips/kernel/signal.c
AgeCommit message (Collapse)AuthorFilesLines
2012-06-01new helper: sigmask_to_save()Al Viro1-8/+3
replace boilerplate "should we use ->saved_sigmask or ->blocked?" with calls of obvious inlined helper... Signed-off-by: Al Viro <[email protected]>
2012-06-01new helper: restore_saved_sigmask()Al Viro1-4/+1
first fruits of ..._restore_sigmask() helpers: now we can take boilerplate "signal didn't have a handler, clear RESTORE_SIGMASK and restore the blocked mask from ->saved_mask" into a common helper. Open-coded instances switched... Signed-off-by: Al Viro <[email protected]>
2012-05-23move key_repace_session_keyring() into tracehook_notify_resume()Al Viro1-2/+0
Signed-off-by: Al Viro <[email protected]>
2012-05-21new helper: sigsuspend()Al Viro1-18/+2
guts of saved_sigmask-based sigsuspend/rt_sigsuspend. Takes kernel sigset_t *. Open-coded instances replaced with calling it. Signed-off-by: Al Viro <[email protected]>
2012-04-27MIPS: Use set_current_blocked() and block_sigmask()Matt Fleming1-22/+5
As described in e6fa16ab ("signal: sigprocmask() should do retarget_shared_pending()") the modification of current->blocked is incorrect as we need to check whether the signal we're about to block is pending in the shared queue. Also, use the new helper function introduced in commit 5e6292c0f28f ("signal: add block_sigmask() for adding sigmask to current->blocked") which centralises the code for updating current->blocked after successfully delivering a signal and reduces the amount of duplicate code across architectures. In the past some architectures got this code wrong, so using this helper function should stop that from happening again. Cc: Oleg Nesterov <[email protected]> Cc: Andrew Morton <[email protected]> Cc: [email protected] Cc: Al Viro <[email protected]> Cc: David Daney <[email protected]> Cc: [email protected] Signed-off-by: Matt Fleming <[email protected]> Patchwork: https://patchwork.linux-mips.org/patch/3363/ Signed-off-by: Ralf Baechle <[email protected]>
2012-03-28Disintegrate asm/system.h for MIPSDavid Howells1-0/+1
Disintegrate asm/system.h for MIPS. Signed-off-by: David Howells <[email protected]> Acked-by: Ralf Baechle <[email protected]> cc: [email protected]
2011-09-21MIPS: Handle __put_user() sleeping.Ralf Baechle1-0/+3
do_signal() does __put_user() which can fault, resulting in a might_sleep() warning in down_read(&mm->mmap_sem) and a "scheduling while atomic" warning when mmap_sem is contented. On Swarm this also results in: WARNING: at kernel/smp.c:459 smp_call_function_many+0x148/0x398() Modules linked in: Call Trace: [<ffffffff804b48a4>] dump_stack+0x1c/0x50 [<ffffffff8013dc94>] warn_slowpath_common+0x8c/0xc8 [<ffffffff8013dcfc>] warn_slowpath_null+0x2c/0x40 [<ffffffff801864a0>] smp_call_function_many+0x148/0x398 [<ffffffff80186748>] smp_call_function+0x58/0xa8 [<ffffffff80119b5c>] r4k_flush_data_cache_page+0x54/0xd8 [<ffffffff801f39bc>] handle_pte_fault+0xa9c/0xad0 [<ffffffff801f40d0>] handle_mm_fault+0x158/0x200 [<ffffffff80115548>] do_page_fault+0x218/0x3b0 [<ffffffff80102744>] ret_from_exception+0x0/0x10 [<ffffffff8010eb18>] copy_siginfo_to_user32+0x50/0x298 [<ffffffff8010edf0>] setup_rt_frame_32+0x90/0x250 [<ffffffff80106414>] do_notify_resume+0x154/0x358 [<ffffffff80102930>] work_notifysig+0xc/0x14 Fixed by enabling interrupts in do_notify_resume before delivering signals. [[email protected]: Reported and original fix by tglx but I wanted to minimize the amount of code being run with interrupts disabled so I moved the local_irq_disable() call right into do_notify_resume. Which is saner than doing it in entry.S.] Reported-by: Thomas Gleixner <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2011-03-14MIPS: Fix GCC-4.6 'set but not used' warning in signal*.cDavid Daney1-1/+1
GCC-4.6 can find more unused code than previous versions could. In the case of protected_restore_fp_context{,32}, the variable tmp is really used. Its use is tricky in that we really care about the side effects of the __put_user() calls. So we must mark tmp with __maybe_unused to quiet the warning. Signed-off-by: David Daney <[email protected]> To: [email protected] Patchwork: https://patchwork.linux-mips.org/patch/2035/ Signed-off-by: Ralf Baechle <[email protected]>
2010-10-18MIPS: do_sigaltstack() expects userland pointersAl Viro1-4/+1
o32 compat does the right thing, native and n32 compat do not... Signed-off-by: Al Viro <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Patchwork: http://patchwork.linux-mips.org/patch/1700/ Signed-off-by: Ralf Baechle <[email protected]>
2010-10-18MIPS: Sanitize restart logicsAl Viro1-19/+18
Put the original syscall number into ->regs[0] when we leave syscall with error. Use it in restart logics. Everything else will have it 0 since we pass through SAVE_SOME on all the ways in. Note that in places like bad_stack and inllegal_syscall we leave it 0 - it's not restartable. Signed-off-by: Al Viro <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Patchwork: https://patchwork.linux-mips.org/patch/1698/ Signed-off-by: Ralf Baechle <[email protected]>
2010-10-18MIPS: Don't block signals if we'd failed to setup a sigframeAl Viro1-0/+3
Signed-off-by: Al Viro <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Patchwork: https://patchwork.linux-mips.org/patch/1696/ Signed-off-by: Ralf Baechle <[email protected]>
2010-04-12MIPS: Move signal trampolines off of the stack.David Daney1-67/+19
This is a follow on to the vdso patch. Since all processes now have signal trampolines permanently mapped, we can use those instead of putting the trampoline on the stack and invalidating the corresponding icache across all CPUs. We also get rid of a bunch of ICACHE_REFILLS_WORKAROUND_WAR code. [Ralf: GDB 7.1 which has the necessary modifications to allow backtracing over signal frames will supposedly be released tomorrow. The old signal frame format obsoleted by this patch exists in two variations, for sane processors and for those requiring ICACHE_REFILLS_WORKAROUND_WAR. So there was never a GDB which did support backtracing over signal frames on all MIPS systems. This convinved me this series should be applied and pushed upstream as soon as possible.] Signed-off-by: David Daney <[email protected]> To: [email protected] Patchwork: http://patchwork.linux-mips.org/patch/974/ Signed-off-by: Ralf Baechle <[email protected]>
2009-12-17MIPS: Cleanup signal code initializationRalf Baechle1-0/+46
Signed-off-by: Ralf Baechle <[email protected]> Cc: [email protected] Patchwork: http://patchwork.linux-mips.org/patch/709/
2009-09-09KEYS: Add missing linux/tracehook.h #inclusionsDavid Howells1-0/+1
Add #inclusions of linux/tracehook.h to those arch files that had the tracehook call for TIF_NOTIFY_RESUME added when support for that flag was added to that arch. Signed-off-by: David Howells <[email protected]> Signed-off-by: James Morris <[email protected]>
2009-09-02KEYS: Add a keyctl to install a process's session keyring on its parent [try #6]David Howells1-0/+2
Add a keyctl to install a process's session keyring onto its parent. This replaces the parent's session keyring. Because the COW credential code does not permit one process to change another process's credentials directly, the change is deferred until userspace next starts executing again. Normally this will be after a wait*() syscall. To support this, three new security hooks have been provided: cred_alloc_blank() to allocate unset security creds, cred_transfer() to fill in the blank security creds and key_session_to_parent() - which asks the LSM if the process may replace its parent's session keyring. The replacement may only happen if the process has the same ownership details as its parent, and the process has LINK permission on the session keyring, and the session keyring is owned by the process, and the LSM permits it. Note that this requires alteration to each architecture's notify_resume path. This has been done for all arches barring blackfin, m68k* and xtensa, all of which need assembly alteration to support TIF_NOTIFY_RESUME. This allows the replacement to be performed at the point the parent process resumes userspace execution. This allows the userspace AFS pioctl emulation to fully emulate newpag() and the VIOCSETTOK and VIOCSETTOK2 pioctls, all of which require the ability to alter the parent process's PAG membership. However, since kAFS doesn't use PAGs per se, but rather dumps the keys into the session keyring, the session keyring of the parent must be replaced if, for example, VIOCSETTOK is passed the newpag flag. This can be tested with the following program: #include <stdio.h> #include <stdlib.h> #include <keyutils.h> #define KEYCTL_SESSION_TO_PARENT 18 #define OSERROR(X, S) do { if ((long)(X) == -1) { perror(S); exit(1); } } while(0) int main(int argc, char **argv) { key_serial_t keyring, key; long ret; keyring = keyctl_join_session_keyring(argv[1]); OSERROR(keyring, "keyctl_join_session_keyring"); key = add_key("user", "a", "b", 1, keyring); OSERROR(key, "add_key"); ret = keyctl(KEYCTL_SESSION_TO_PARENT); OSERROR(ret, "KEYCTL_SESSION_TO_PARENT"); return 0; } Compiled and linked with -lkeyutils, you should see something like: [dhowells@andromeda ~]$ keyctl show Session Keyring -3 --alswrv 4043 4043 keyring: _ses 355907932 --alswrv 4043 -1 \_ keyring: _uid.4043 [dhowells@andromeda ~]$ /tmp/newpag [dhowells@andromeda ~]$ keyctl show Session Keyring -3 --alswrv 4043 4043 keyring: _ses 1055658746 --alswrv 4043 4043 \_ user: a [dhowells@andromeda ~]$ /tmp/newpag hello [dhowells@andromeda ~]$ keyctl show Session Keyring -3 --alswrv 4043 4043 keyring: hello 340417692 --alswrv 4043 4043 \_ user: a Where the test program creates a new session keyring, sticks a user key named 'a' into it and then installs it on its parent. Signed-off-by: David Howells <[email protected]> Signed-off-by: James Morris <[email protected]>
2009-09-02KEYS: Extend TIF_NOTIFY_RESUME to (almost) all architectures [try #6]David Howells1-0/+5
Implement TIF_NOTIFY_RESUME for most of those architectures in which isn't yet available, and, whilst we're at it, have it call the appropriate tracehook. After this patch, blackfin, m68k* and xtensa still lack support and need alteration of assembly code to make it work. Resume notification can then be used (by a later patch) to install a new session keyring on the parent of a process. Signed-off-by: David Howells <[email protected]> Acked-by: Russell King <[email protected]> cc: [email protected] Signed-off-by: James Morris <[email protected]>
2009-02-27MIPS: CVE-2009-0029: Enable syscall wrappers.Ralf Baechle1-2/+3
Thanks to David Daney helping with debugging and testing. Signed-off-by: Ralf Baechle <[email protected]> Signed-off-by: David Daney <[email protected]>
2007-10-11[MIPS] checkfiles: Fix "need space after that ','" errors.Ralf Baechle1-2/+2
Signed-off-by: Ralf Baechle <[email protected]>
2007-05-08header cleaning: don't include smp_lock.h when not usedRandy Dunlap1-1/+0
Remove includes of <linux/smp_lock.h> where it is not used/needed. Suggested by Al Viro. Builds cleanly on x86_64, i386, alpha, ia64, powerpc, sparc, sparc64, and arm (all 59 defconfigs). Signed-off-by: Randy Dunlap <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
2007-04-20[MIPS] Retry {save,restore}_fp_context if failed in atomic context.Atsushi Nemoto1-9/+43
The save_fp_context()/restore_fp_context() might sleep on accessing user stack and therefore might lose FPU ownership in middle of them. If these function failed due to "in_atomic" test in do_page_fault, touch the sigcontext area in non-atomic context and retry these save/restore operation. This is a replacement of a (broken) fix which was titled "Allow CpU exception in kernel partially". Signed-off-by: Atsushi Nemoto <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2007-04-20[MIPS] Disallow CpU exception in kernel again.Atsushi Nemoto1-5/+5
The commit 4d40bff7110e9e1a97ff8c01bdd6350e9867cc10 ("Allow CpU exception in kernel partially") was broken. The commit was to fix theoretical problem but broke usual case. Revert it for now. Signed-off-by: Atsushi Nemoto <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2007-03-17[MIPS] FPU ownership management & preemption fixesAtsushi Nemoto1-17/+12
Signed-off-by: Atsushi Nemoto <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2007-03-17[MIPS] Check FCSR for pending interrupts, alternative versionAtsushi Nemoto1-3/+43
Commit 6d6671066a311703bca1b91645bb1e04cc983387 is incomplete and misses non-r4k CPUs. This patch reverts the commit and fixes in other way. o Do FCSR checking in caller of restore_fp_context. o Send SIGFPE if the signal handler set any FPU exception bits. Signed-off-by: Atsushi Nemoto <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2007-02-22[MIPS] Add basic SMARTMIPS ASE supportFranck Bui-Huu1-0/+7
This patch adds trivial support for SMARTMIPS extension. This extension is currently implemented by 4KS[CD] CPUs. Basically it saves/restores ACX register, which is part of the SMARTMIPS ASE, when needed. This patch does *not* add any support for Smartmips MMU features. Futhermore this patch does not add explicit support for 4KS[CD] CPUs since they are respectively mips32 and mips32r2 compliant. So with the current processor configuration, a platform that has such CPUs needs to select both configs: CPU_HAS_SMARTMIPS SYS_HAS_CPU_MIPS32_R[12] This is due to the processor configuration which is mixing up all the architecture variants and the processor types. The drawback of this, is that we currently pass '-march=mips32' option to gcc when building a kernel instead of '-march=4ksc' for 4KSC case. This can lead to a kernel image a little bit bigger than required. Signed-off-by: Franck Bui-Huu <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2007-02-18[MIPS] signals: Share even more code.Ralf Baechle1-5/+13
native and compat do_signal and handle_signal are identical and can easily be unified. Signed-off-by: Ralf Baechle <[email protected]>
2007-02-13[MIPS] signals: make common _BLOCKABLE macroFranck Bui-Huu1-2/+0
Signed-off-by: Franck Bui-Huu <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2007-02-13[MIPS] signal: Move sigframe definition for native O32/N64 into signal.cRalf Baechle1-0/+20
Signed-off-by: Ralf Baechle <[email protected]>
2007-02-10[MIPS] signal: do not inline handle_signal()Franck Bui-Huu1-1/+1
Signed-off-by: Franck Bui-Huu <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2007-02-10[MIPS] signal: do not use save_static_function() anymoreFranck Bui-Huu1-12/+4
This macro was used to save static registers before calling sys_sigsuspend() and sys_sigreturn(). For the sys_sigreturn() case, there's no point to save them since they have been already saved by setup_sigcontext() before calling the signal handler. For the sys_sigsuspend() case, I don't see any reasons... Signed-off-by: Franck Bui-Huu <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2007-02-10[MIPS] signal: factorize debug codeFranck Bui-Huu1-9/+4
Signed-off-by: Franck Bui-Huu <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2007-02-10[MIPS] signal: test return value of install_sigtramp()Franck Bui-Huu1-3/+3
Signed-off-by: Franck Bui-Huu <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2007-02-10[MIPS] signal: clean up sigframe structureFranck Bui-Huu1-35/+21
This patch makes 'struct sigframe' declaration avalaible for all signals code. It allows signal32 to not have its own declaration. This patch also removes all ICACHE_REFILLS_WORKAROUND_WAR tests in structure declaration and hopefully make them more readable. Signed-off-by: Franck Bui-Huu <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2007-02-10[MIPS] signal: do not inline functions in signal-common.hFranck Bui-Huu1-0/+139
These functions are quite big and there are no points to make them inlined. So this patch moves the functions implementation in signal.c and make them available for others source files which need them. Signed-off-by: Franck Bui-Huu <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2007-02-06[MIPS] Whitespace cleanups.Ralf Baechle1-3/+3
Signed-off-by: Ralf Baechle <[email protected]>
2006-09-27[MIPS] Avoid double signal restarting.Ralf Baechle1-1/+1
In entry.S resume_userspace ... jal do_notify_resume form a loop through which the kernel will iterate as long as work is pending. If we iterate through this loop more than once with no signal pending for at least one but the last iteration we will take do the syscall restarting multiple times resulting in a syscall return prior to the the syscall instruction in userspace. This may happen when debugging a multithreaded program. Debugging and original fix by Maciej; extended to other ABIs by me. Signed-off-by: Maciej W. Rozycki <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2006-09-27[MIPS] Add missing returns in signal code.Ralf Baechle1-0/+2
Signed-off-by: Ralf Baechle <[email protected]>
2006-09-27[MIPS] Don't call try_to_freeze in do_signal & co.Ralf Baechle1-4/+0
Signed-off-by: Ralf Baechle <[email protected]>
2006-06-30Remove obsolete #include <linux/config.h>Jörn Engel1-1/+0
Signed-off-by: Jörn Engel <[email protected]> Signed-off-by: Adrian Bunk <[email protected]>
2006-03-21[MIPS] Signal cleanupAtsushi Nemoto1-3/+3
Move function prototypes to asm/signal.h to detect trivial errors and add some __user tags to get rid of sparse warnings. Generated code should not be changed. Signed-off-by: Atsushi Nemoto <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2006-02-08[MIPS] Make do_signal return void.Ralf Baechle1-4/+2
It's return value is ignored everywhere. Signed-off-by: Ralf Baechle <[email protected]> ---
2006-02-08[MIPS] Add support for TIF_RESTORE_SIGMASK.Ralf Baechle1-36/+50
Signed-off-by: Ralf Baechle <[email protected]> ---
2006-02-07[MIPS] Fix minor sparse warningsAtsushi Nemoto1-1/+1
Signed-off-by: Atsushi Nemoto <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2006-02-07[MIPS] Sparse: Add some __user tags to signal functions.Atsushi Nemoto1-7/+7
Signed-off-by: Atsushi Nemoto <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2005-12-01[MIPS] Avoid duplicate do_syscall_trace calls on return from sigreturn.Ralf Baechle1-2/+0
Signed-off-by: Ralf Baechle <[email protected]>
2005-11-07Fix return type of setup_frame variantsAtsushi Nemoto1-3/+0
Since 2.6.13-rc1 setup_frame and its variants return int. But some bits were missed in the conversion. Signed-off-by: Atsushi Nemoto <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
2005-10-29Setup_frame is now returning a success value.Ralf Baechle1-11/+15
Signed-off-by: Ralf Baechle <[email protected]>
2005-10-29Redo RM9000 workaround which along with other DSP ASE changes wasRalf Baechle1-32/+27
causing some headache for debuggers knowing about signal frames. Signed-off-by: Ralf Baechle <[email protected]>
2005-10-29Support the MIPS32 / MIPS64 DSP ASE.Ralf Baechle1-42/+10
Signed-off-by: Ralf Baechle <[email protected]>
2005-10-29Sparseify MIPS.Ralf Baechle1-6/+8
Signed-off-by: Ralf Baechle <[email protected]>
2005-08-29[PATCH] convert signal handling of NODEFER to act like other Unix boxes.Steven Rostedt1-6/+5
It has been reported that the way Linux handles NODEFER for signals is not consistent with the way other Unix boxes handle it. I've written a program to test the behavior of how this flag affects signals and had several reports from people who ran this on various Unix boxes, confirming that Linux seems to be unique on the way this is handled. The way NODEFER affects signals on other Unix boxes is as follows: 1) If NODEFER is set, other signals in sa_mask are still blocked. 2) If NODEFER is set and the signal is in sa_mask, then the signal is still blocked. (Note: this is the behavior of all tested but Linux _and_ NetBSD 2.0 *). The way NODEFER affects signals on Linux: 1) If NODEFER is set, other signals are _not_ blocked regardless of sa_mask (Even NetBSD doesn't do this). 2) If NODEFER is set and the signal is in sa_mask, then the signal being handled is not blocked. The patch converts signal handling in all current Linux architectures to the way most Unix boxes work. Unix boxes that were tested: DU4, AIX 5.2, Irix 6.5, NetBSD 2.0, SFU 3.5 on WinXP, AIX 5.3, Mac OSX, and of course Linux 2.6.13-rcX. * NetBSD was the only other Unix to behave like Linux on point #2. The main concern was brought up by point #1 which even NetBSD isn't like Linux. So with this patch, we leave NetBSD as the lonely one that behaves differently here with #2. Signed-off-by: Linus Torvalds <[email protected]>