* [PATCH] exec: don't force_sigsegv processes with a pending fatal signal
@ 2018-07-19 20:53 Ivan Delalande
0 siblings, 0 replies; only message in thread
From: Ivan Delalande @ 2018-07-19 20:53 UTC (permalink / raw)
To: Al Viro; +Cc: linux-fsdevel, linux-kernel
We were seeing unexplained segfaults in coreutils processes and other
basic utilities that we tracked down to binfmt_elf failing to load
segments for ld.so. Digging further, the actual problem seems to occur
when a process gets sigkilled while it is still being loaded by the
kernel. In our case when _do_page_fault goes for a retry it will return
early as it first checks for fatal_signal_pending(), so load_elf_interp
also returns with error and as a result search_binary_handler will
force_sigsegv() which is pretty confusing as nothing actually failed
here.
Fixes: 19d860a140be ("handle suicide on late failure exits in execve() in search_binary_handler()")
Reference: https://lkml.org/lkml/2013/2/14/5
Signed-off-by: Ivan Delalande <colona@arista.com>
---
fs/exec.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/fs/exec.c b/fs/exec.c
index 2d4e0075bd24..620d6489b61c 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1657,7 +1657,8 @@ int search_binary_handler(struct linux_binprm *bprm)
if (retval < 0 && !bprm->mm) {
/* we got to flush_old_exec() and failed after it */
read_unlock(&binfmt_lock);
- force_sigsegv(SIGSEGV, current);
+ if (!fatal_signal_pending(current))
+ force_sigsegv(SIGSEGV, current);
return retval;
}
if (retval != -ENOEXEC || !bprm->file) {
--
2.18.0
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2018-07-19 21:46 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-07-19 20:53 [PATCH] exec: don't force_sigsegv processes with a pending fatal signal Ivan Delalande
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.