All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] NFS: Pin the 'struct nfs_server' during a FREE_STATEID call
@ 2026-07-10 20:47 Anna Schumaker
  2026-07-10 20:47 ` [PATCH 2/2] NFS: Decrement refcounts if allocating nfs_free_stateid_data fails Anna Schumaker
  2026-07-13 13:36 ` [PATCH 1/2] NFS: Pin the 'struct nfs_server' during a FREE_STATEID call Jia Zhu
  0 siblings, 2 replies; 3+ messages in thread
From: Anna Schumaker @ 2026-07-10 20:47 UTC (permalink / raw)
  To: linux-nfs, trond.myklebust; +Cc: anna

From: Anna Schumaker <anna.schumaker@hammerspace.com>

Dan Aloni reports that he was able to hit a use-after-free bug if a
FREE_STATEID operation gets delayed for whatever reason. Fix this by
bumping the refcount of the 'struct nfs_server' object for the duration
of the FREE_STATEID so it doesn't get cleaned up from underneath us
while operations are still in flight.

Reported-by: Dan Aloni <dan.aloni@vastdata.com>
Fixes: 7c1d5fae4a87 ("NFSv4: Convert nfs41_free_stateid to use an asynchronous RPC call")
Tested-by: Dan Aloni <dan.aloni@vastdata.com>
Signed-off-by: Anna Schumaker <anna.schumaker@hammerspace.com>
---
 fs/nfs/nfs4proc.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index a3415082d610..3ad5ef52a2e8 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -10364,6 +10364,7 @@ static void nfs41_free_stateid_release(void *calldata)
 	struct nfs_free_stateid_data *data = calldata;
 	struct nfs_client *clp = data->server->nfs_client;
 
+	nfs_sb_deactive(data->server->super);
 	nfs_put_client(clp);
 	kfree(calldata);
 }
@@ -10405,6 +10406,10 @@ static int nfs41_free_stateid(struct nfs_server *server,
 
 	if (!refcount_inc_not_zero(&clp->cl_count))
 		return -EIO;
+	if (!nfs_sb_active(server->super)) {
+		nfs_put_client(clp);
+		return -EIO;
+	}
 
 	nfs4_state_protect(clp, NFS_SP4_MACH_CRED_STATEID,
 		&task_setup.rpc_client, &msg);
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-07-13 13:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-10 20:47 [PATCH 1/2] NFS: Pin the 'struct nfs_server' during a FREE_STATEID call Anna Schumaker
2026-07-10 20:47 ` [PATCH 2/2] NFS: Decrement refcounts if allocating nfs_free_stateid_data fails Anna Schumaker
2026-07-13 13:36 ` [PATCH 1/2] NFS: Pin the 'struct nfs_server' during a FREE_STATEID call Jia Zhu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.