]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
um: remove broken double fault detection
authorBenjamin Berg <benjamin.berg@intel.com>
Sun, 3 Nov 2024 15:05:06 +0000 (16:05 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 7 Nov 2024 16:36:31 +0000 (17:36 +0100)
The show_stack function had some code to detect double faults. However,
the logic is wrong and it would e.g. trigger if a WARNING happened
inside an IRQ.

Remove it without trying to add a new logic. The current behaviour,
which will just fault repeatedly until the IRQ stack is used up and the
host kills UML, seems to be good enough.

Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
Link: https://patch.msgid.link/20241103150506.1367695-5-benjamin@sipsolutions.net
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
arch/um/include/shared/os.h
arch/um/kernel/sysrq.c
arch/um/os-Linux/signal.c

index 6c656ef096c99e07e817412f835425d9db54af99..5babad8c5f75ed826269bbc853c7d5fb7acba631 100644 (file)
@@ -241,7 +241,6 @@ extern void block_signals(void);
 extern void unblock_signals(void);
 extern int um_set_signals(int enable);
 extern int um_set_signals_trace(int enable);
-extern int os_is_signal_stack(void);
 extern void deliver_alarm(void);
 extern void register_pm_wake_signal(void);
 extern void block_signals_hard(void);
index 4bb8622dc51226755e18d846361912b37e97e06b..a3bdab0486173dcb7a7728713d7f8113f34513e8 100644 (file)
@@ -32,12 +32,6 @@ void show_stack(struct task_struct *task, unsigned long *stack,
        struct pt_regs *segv_regs = current->thread.segv_regs;
        int i;
 
-       if (!segv_regs && os_is_signal_stack()) {
-               pr_err("Received SIGSEGV in SIGSEGV handler,"
-                               " aborting stack trace!\n");
-               return;
-       }
-
        if (!stack)
                stack = get_stack_pointer(task, segv_regs);
 
index 1c6caa9dbd6c59c84740b5202bcd3f6cf8aacf02..52852018a3ad59dcb8ddbe77b08b871083ca76a6 100644 (file)
@@ -487,11 +487,3 @@ void unblock_signals_hard(void)
        unblocking = false;
 }
 #endif
-
-int os_is_signal_stack(void)
-{
-       stack_t ss;
-       sigaltstack(NULL, &ss);
-
-       return ss.ss_flags & SS_ONSTACK;
-}