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