57 lines
1.8 KiB
Diff
57 lines
1.8 KiB
Diff
From 053ed640e99b096f155a404b3d919b3475bd4275 Mon Sep 17 00:00:00 2001
|
|
From: Ziyan Xu <ziyan@securitygossip.com>
|
|
Date: Sat, 16 Aug 2025 10:20:05 +0900
|
|
Subject: ksmbd: fix refcount leak causing resource not released
|
|
|
|
When ksmbd_conn_releasing(opinfo->conn) returns true,the refcount was not
|
|
decremented properly, causing a refcount leak that prevents the count from
|
|
reaching zero and the memory from being released.
|
|
|
|
Cc: stable@vger.kernel.org
|
|
Signed-off-by: Ziyan Xu <ziyan@securitygossip.com>
|
|
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
|
|
Signed-off-by: Steve French <stfrench@microsoft.com>
|
|
---
|
|
fs/smb/server/oplock.c | 13 ++++++++++---
|
|
1 file changed, 10 insertions(+), 3 deletions(-)
|
|
|
|
--- a/fs/smb/server/oplock.c
|
|
+++ b/fs/smb/server/oplock.c
|
|
@@ -1102,8 +1102,10 @@ void smb_send_parent_lease_break_noti(st
|
|
if (!atomic_inc_not_zero(&opinfo->refcount))
|
|
continue;
|
|
|
|
- if (ksmbd_conn_releasing(opinfo->conn))
|
|
+ if (ksmbd_conn_releasing(opinfo->conn)) {
|
|
+ opinfo_put(opinfo);
|
|
continue;
|
|
+ }
|
|
|
|
oplock_break(opinfo, SMB2_OPLOCK_LEVEL_NONE, NULL);
|
|
opinfo_put(opinfo);
|
|
@@ -1139,8 +1141,11 @@ void smb_lazy_parent_lease_break_close(s
|
|
if (!atomic_inc_not_zero(&opinfo->refcount))
|
|
continue;
|
|
|
|
- if (ksmbd_conn_releasing(opinfo->conn))
|
|
+ if (ksmbd_conn_releasing(opinfo->conn)) {
|
|
+ opinfo_put(opinfo);
|
|
continue;
|
|
+ }
|
|
+
|
|
oplock_break(opinfo, SMB2_OPLOCK_LEVEL_NONE, NULL);
|
|
opinfo_put(opinfo);
|
|
}
|
|
@@ -1343,8 +1348,10 @@ void smb_break_all_levII_oplock(struct k
|
|
if (!atomic_inc_not_zero(&brk_op->refcount))
|
|
continue;
|
|
|
|
- if (ksmbd_conn_releasing(brk_op->conn))
|
|
+ if (ksmbd_conn_releasing(brk_op->conn)) {
|
|
+ opinfo_put(brk_op);
|
|
continue;
|
|
+ }
|
|
|
|
if (brk_op->is_lease && (brk_op->o_lease->state &
|
|
(~(SMB2_LEASE_READ_CACHING_LE |
|