From: Greg Kroah-Hartman Date: Mon, 17 Feb 2025 14:34:10 +0000 (+0100) Subject: 6.6-stable patches X-Git-Tag: v6.12.15~14 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=26e28340a97f1ef6ced3104ad4cbfad421b51b43;p=thirdparty%2Fkernel%2Fstable-queue.git 6.6-stable patches added patches: nfsd-clear-acl_access-acl_default-after-releasing-them.patch nfsd-fix-hang-in-nfsd4_shutdown_callback.patch series --- diff --git a/queue-6.6/nfsd-clear-acl_access-acl_default-after-releasing-them.patch b/queue-6.6/nfsd-clear-acl_access-acl_default-after-releasing-them.patch new file mode 100644 index 0000000000..1aaedcdc54 --- /dev/null +++ b/queue-6.6/nfsd-clear-acl_access-acl_default-after-releasing-them.patch @@ -0,0 +1,110 @@ +From 7faf14a7b0366f153284db0ad3347c457ea70136 Mon Sep 17 00:00:00 2001 +From: Li Lingfeng +Date: Sun, 26 Jan 2025 17:47:22 +0800 +Subject: nfsd: clear acl_access/acl_default after releasing them + +From: Li Lingfeng + +commit 7faf14a7b0366f153284db0ad3347c457ea70136 upstream. + +If getting acl_default fails, acl_access and acl_default will be released +simultaneously. However, acl_access will still retain a pointer pointing +to the released posix_acl, which will trigger a WARNING in +nfs3svc_release_getacl like this: + +------------[ cut here ]------------ +refcount_t: underflow; use-after-free. +WARNING: CPU: 26 PID: 3199 at lib/refcount.c:28 +refcount_warn_saturate+0xb5/0x170 +Modules linked in: +CPU: 26 UID: 0 PID: 3199 Comm: nfsd Not tainted +6.12.0-rc6-00079-g04ae226af01f-dirty #8 +Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS +1.16.1-2.fc37 04/01/2014 +RIP: 0010:refcount_warn_saturate+0xb5/0x170 +Code: cc cc 0f b6 1d b3 20 a5 03 80 fb 01 0f 87 65 48 d8 00 83 e3 01 75 +e4 48 c7 c7 c0 3b 9b 85 c6 05 97 20 a5 03 01 e8 fb 3e 30 ff <0f> 0b eb +cd 0f b6 1d 8a3 +RSP: 0018:ffffc90008637cd8 EFLAGS: 00010282 +RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffffffff83904fde +RDX: dffffc0000000000 RSI: 0000000000000008 RDI: ffff88871ed36380 +RBP: ffff888158beeb40 R08: 0000000000000001 R09: fffff520010c6f56 +R10: ffffc90008637ab7 R11: 0000000000000001 R12: 0000000000000001 +R13: ffff888140e77400 R14: ffff888140e77408 R15: ffffffff858b42c0 +FS: 0000000000000000(0000) GS:ffff88871ed00000(0000) +knlGS:0000000000000000 +CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 +CR2: 0000562384d32158 CR3: 000000055cc6a000 CR4: 00000000000006f0 +DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 +DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 +Call Trace: + + ? refcount_warn_saturate+0xb5/0x170 + ? __warn+0xa5/0x140 + ? refcount_warn_saturate+0xb5/0x170 + ? report_bug+0x1b1/0x1e0 + ? handle_bug+0x53/0xa0 + ? exc_invalid_op+0x17/0x40 + ? asm_exc_invalid_op+0x1a/0x20 + ? tick_nohz_tick_stopped+0x1e/0x40 + ? refcount_warn_saturate+0xb5/0x170 + ? refcount_warn_saturate+0xb5/0x170 + nfs3svc_release_getacl+0xc9/0xe0 + svc_process_common+0x5db/0xb60 + ? __pfx_svc_process_common+0x10/0x10 + ? __rcu_read_unlock+0x69/0xa0 + ? __pfx_nfsd_dispatch+0x10/0x10 + ? svc_xprt_received+0xa1/0x120 + ? xdr_init_decode+0x11d/0x190 + svc_process+0x2a7/0x330 + svc_handle_xprt+0x69d/0x940 + svc_recv+0x180/0x2d0 + nfsd+0x168/0x200 + ? __pfx_nfsd+0x10/0x10 + kthread+0x1a2/0x1e0 + ? kthread+0xf4/0x1e0 + ? __pfx_kthread+0x10/0x10 + ret_from_fork+0x34/0x60 + ? __pfx_kthread+0x10/0x10 + ret_from_fork_asm+0x1a/0x30 + +Kernel panic - not syncing: kernel: panic_on_warn set ... + +Clear acl_access/acl_default after posix_acl_release is called to prevent +UAF from being triggered. + +Fixes: a257cdd0e217 ("[PATCH] NFSD: Add server support for NFSv3 ACLs.") +Cc: stable@vger.kernel.org +Link: https://lore.kernel.org/all/20241107014705.2509463-1-lilingfeng@huaweicloud.com/ +Signed-off-by: Li Lingfeng +Reviewed-by: Rick Macklem +Reviewed-by: Jeff Layton +Signed-off-by: Chuck Lever +Signed-off-by: Greg Kroah-Hartman +--- + fs/nfsd/nfs2acl.c | 2 ++ + fs/nfsd/nfs3acl.c | 2 ++ + 2 files changed, 4 insertions(+) + +--- a/fs/nfsd/nfs2acl.c ++++ b/fs/nfsd/nfs2acl.c +@@ -84,6 +84,8 @@ out: + fail: + posix_acl_release(resp->acl_access); + posix_acl_release(resp->acl_default); ++ resp->acl_access = NULL; ++ resp->acl_default = NULL; + goto out; + } + +--- a/fs/nfsd/nfs3acl.c ++++ b/fs/nfsd/nfs3acl.c +@@ -76,6 +76,8 @@ out: + fail: + posix_acl_release(resp->acl_access); + posix_acl_release(resp->acl_default); ++ resp->acl_access = NULL; ++ resp->acl_default = NULL; + goto out; + } + diff --git a/queue-6.6/nfsd-fix-hang-in-nfsd4_shutdown_callback.patch b/queue-6.6/nfsd-fix-hang-in-nfsd4_shutdown_callback.patch new file mode 100644 index 0000000000..8e4759dafb --- /dev/null +++ b/queue-6.6/nfsd-fix-hang-in-nfsd4_shutdown_callback.patch @@ -0,0 +1,43 @@ +From 036ac2778f7b28885814c6fbc07e156ad1624d03 Mon Sep 17 00:00:00 2001 +From: Dai Ngo +Date: Thu, 30 Jan 2025 11:01:27 -0800 +Subject: NFSD: fix hang in nfsd4_shutdown_callback + +From: Dai Ngo + +commit 036ac2778f7b28885814c6fbc07e156ad1624d03 upstream. + +If nfs4_client is in courtesy state then there is no point to send +the callback. This causes nfsd4_shutdown_callback to hang since +cl_cb_inflight is not 0. This hang lasts about 15 minutes until TCP +notifies NFSD that the connection was dropped. + +This patch modifies nfsd4_run_cb_work to skip the RPC call if +nfs4_client is in courtesy state. + +Signed-off-by: Dai Ngo +Fixes: 66af25799940 ("NFSD: add courteous server support for thread with only delegation") +Cc: stable@vger.kernel.org +Reviewed-by: Jeff Layton +Signed-off-by: Chuck Lever +Signed-off-by: Greg Kroah-Hartman +--- + fs/nfsd/nfs4callback.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +--- a/fs/nfsd/nfs4callback.c ++++ b/fs/nfsd/nfs4callback.c +@@ -1410,8 +1410,11 @@ nfsd4_run_cb_work(struct work_struct *wo + nfsd4_process_cb_update(cb); + + clnt = clp->cl_cb_client; +- if (!clnt) { +- /* Callback channel broken, or client killed; give up: */ ++ if (!clnt || clp->cl_state == NFSD4_COURTESY) { ++ /* ++ * Callback channel broken, client killed or ++ * nfs4_client in courtesy state; give up. ++ */ + nfsd41_destroy_cb(cb); + return; + } diff --git a/queue-6.6/series b/queue-6.6/series new file mode 100644 index 0000000000..949cbf2b3f --- /dev/null +++ b/queue-6.6/series @@ -0,0 +1,2 @@ +nfsd-clear-acl_access-acl_default-after-releasing-them.patch +nfsd-fix-hang-in-nfsd4_shutdown_callback.patch