summaryrefslogtreecommitdiffstats
path: root/kernel/sched/autogroup.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2022-08-11 08:54:52 +0200
committerIngo Molnar <mingo@kernel.org>2022-08-12 11:25:10 +0200
commit09348d75a6ce60eec85c86dd0ab7babc4db3caf6 (patch)
tree6620daab9bd9ccba94eb8dcb1021cb9ae6a2d4ff /kernel/sched/autogroup.c
parentffcf9c5700e49c0aee42dcba9a12ba21338e8136 (diff)
downloadlinux-stable-09348d75a6ce60eec85c86dd0ab7babc4db3caf6.tar.gz
linux-stable-09348d75a6ce60eec85c86dd0ab7babc4db3caf6.tar.bz2
linux-stable-09348d75a6ce60eec85c86dd0ab7babc4db3caf6.zip
sched/all: Change all BUG_ON() instances in the scheduler to WARN_ON_ONCE()
There's no good reason to crash a user's system with a BUG_ON(), chances are high that they'll never even see the crash message on Xorg, and it won't make it into the syslog either. By using a WARN_ON_ONCE() we at least give the user a chance to report any bugs triggered here - instead of getting silent hangs. None of these WARN_ON_ONCE()s are supposed to trigger, ever - so we ignore cases where a NULL check is done via a BUG_ON() and we let a NULL pointer through after a WARN_ON_ONCE(). There's one exception: WARN_ON_ONCE() arguments with side-effects, such as locking - in this case we use the return value of the WARN_ON_ONCE(), such as in: - BUG_ON(!lock_task_sighand(p, &flags)); + if (WARN_ON_ONCE(!lock_task_sighand(p, &flags))) + return; Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Ingo Molnar <mingo@kernel.org> Link: https://lore.kernel.org/r/YvSsKcAXISmshtHo@gmail.com
Diffstat (limited to 'kernel/sched/autogroup.c')
-rw-r--r--kernel/sched/autogroup.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/sched/autogroup.c b/kernel/sched/autogroup.c
index 4ebaf97f7bd8..991fc9002535 100644
--- a/kernel/sched/autogroup.c
+++ b/kernel/sched/autogroup.c
@@ -161,7 +161,8 @@ autogroup_move_group(struct task_struct *p, struct autogroup *ag)
struct task_struct *t;
unsigned long flags;
- BUG_ON(!lock_task_sighand(p, &flags));
+ if (WARN_ON_ONCE(!lock_task_sighand(p, &flags)))
+ return;
prev = p->signal->autogroup;
if (prev == ag) {