From a347e978abd98ee21343f409f4008b779930243a Mon Sep 17 00:00:00 2001 From: Oliver Neukum <oneukum@suse.com> Date: Feb 13 2024 09:52:31 +0000 Subject: audit: fix possible soft lockup in __audit_inode_child() (git-fixes). --- diff --git a/patches.suse/audit-fix-possible-soft-lockup-in-__audit_inode_chil.patch b/patches.suse/audit-fix-possible-soft-lockup-in-__audit_inode_chil.patch new file mode 100644 index 0000000..314b553 --- /dev/null +++ b/patches.suse/audit-fix-possible-soft-lockup-in-__audit_inode_chil.patch @@ -0,0 +1,80 @@ +From b59bc6e37237e37eadf50cd5de369e913f524463 Mon Sep 17 00:00:00 2001 +From: Gaosheng Cui <cuigaosheng1@huawei.com> +Date: Tue, 8 Aug 2023 20:14:35 +0800 +Subject: [PATCH] audit: fix possible soft lockup in __audit_inode_child() +Git-commit: b59bc6e37237e37eadf50cd5de369e913f524463 +References: git-fixes +Patch-mainline: v6.6-rc1 + +Tracefs or debugfs maybe cause hundreds to thousands of PATH records, +too many PATH records maybe cause soft lockup. + +For example: + 1. CONFIG_KASAN=y && CONFIG_PREEMPTION=n + 2. auditctl -a exit,always -S open -k key + 3. sysctl -w kernel.watchdog_thresh=5 + 4. mkdir /sys/kernel/debug/tracing/instances/test + +There may be a soft lockup as follows: + watchdog: BUG: soft lockup - CPU#45 stuck for 7s! [mkdir:15498] + Kernel panic - not syncing: softlockup: hung tasks + Call trace: + dump_backtrace+0x0/0x30c + show_stack+0x20/0x30 + dump_stack+0x11c/0x174 + panic+0x27c/0x494 + watchdog_timer_fn+0x2bc/0x390 + __run_hrtimer+0x148/0x4fc + __hrtimer_run_queues+0x154/0x210 + hrtimer_interrupt+0x2c4/0x760 + arch_timer_handler_phys+0x48/0x60 + handle_percpu_devid_irq+0xe0/0x340 + __handle_domain_irq+0xbc/0x130 + gic_handle_irq+0x78/0x460 + el1_irq+0xb8/0x140 + __audit_inode_child+0x240/0x7bc + tracefs_create_file+0x1b8/0x2a0 + trace_create_file+0x18/0x50 + event_create_dir+0x204/0x30c + __trace_add_new_event+0xac/0x100 + event_trace_add_tracer+0xa0/0x130 + trace_array_create_dir+0x60/0x140 + trace_array_create+0x1e0/0x370 + instance_mkdir+0x90/0xd0 + tracefs_syscall_mkdir+0x68/0xa0 + vfs_mkdir+0x21c/0x34c + do_mkdirat+0x1b4/0x1d4 + __arm64_sys_mkdirat+0x4c/0x60 + el0_svc_common.constprop.0+0xa8/0x240 + do_el0_svc+0x8c/0xc0 + el0_svc+0x20/0x30 + el0_sync_handler+0xb0/0xb4 + el0_sync+0x160/0x180 + +Therefore, we add cond_resched() to __audit_inode_child() to fix it. + +Fixes: 5195d8e217a7 ("audit: dynamically allocate audit_names when not enough space is in the names array") +Signed-off-by: Gaosheng Cui <cuigaosheng1@huawei.com> +Signed-off-by: Paul Moore <paul@paul-moore.com> +Signed-off-by: Oliver Neukum <oneukum@suse.com> + +--- + kernel/auditsc.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/kernel/auditsc.c b/kernel/auditsc.c +index addeed3df15d..8dfd581cd554 100644 +--- a/kernel/auditsc.c ++++ b/kernel/auditsc.c +@@ -2456,6 +2456,8 @@ void __audit_inode_child(struct inode *parent, + } + } + ++ cond_resched(); ++ + /* is there a matching child entry? */ + list_for_each_entry(n, &context->names_list, list) { + /* can only match entries that have a name */ +-- +2.43.0 + diff --git a/series.conf b/series.conf index a503005..cad3af7 100644 --- a/series.conf +++ b/series.conf @@ -64673,6 +64673,7 @@ patches.suse/md-raid1-fix-potential-OOB-in-raid1_remove_disk-8b04.patch patches.suse/md-raid1-free-the-r1bio-before-waiting-for-blocked-r-992d.patch patches.suse/md-raid1-hold-the-barrier-until-handle_read_error-fi-c069.patch + patches.suse/audit-fix-possible-soft-lockup-in-__audit_inode_chil.patch patches.suse/0001-drm-ast-Fix-DRAM-init-on-AST2200.patch patches.suse/powerpc-pseries-Initialise-CPU-hotplug-callbacks-ear.patch patches.suse/powerpc-Add-HOTPLUG_SMT-support.patch