Commit c02afdc
committed
NFSD: fix use-after-free on source server when doing inter-server copy
Bugzilla: https://bugzilla.redhat.com/2138605
commit 019805f
Author: Dai Ngo <dai.ngo@oracle.com>
Date: Mon Sep 26 10:59:16 2022 -0700
NFSD: fix use-after-free on source server when doing inter-server copy
Use-after-free occurred when the laundromat tried to free expired
cpntf_state entry on the s2s_cp_stateids list after inter-server
copy completed. The sc_cp_list that the expired copy state was
inserted on was already freed.
When COPY completes, the Linux client normally sends LOCKU(lock_state x),
FREE_STATEID(lock_state x) and CLOSE(open_state y) to the source server.
The nfs4_put_stid call from nfsd4_free_stateid cleans up the copy state
from the s2s_cp_stateids list before freeing the lock state's stid.
However, sometimes the CLOSE was sent before the FREE_STATEID request.
When this happens, the nfsd4_close_open_stateid call from nfsd4_close
frees all lock states on its st_locks list without cleaning up the copy
state on the sc_cp_list list. When the time the FREE_STATEID arrives the
server returns BAD_STATEID since the lock state was freed. This causes
the use-after-free error to occur when the laundromat tries to free
the expired cpntf_state.
This patch adds a call to nfs4_free_cpntf_statelist in
nfsd4_close_open_stateid to clean up the copy state before calling
free_ol_stateid_reaplist to free the lock state's stid on the reaplist.
Signed-off-by: Dai Ngo <dai.ngo@oracle.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Jeffrey Layton <jlayton@redhat.com>1 parent db298d6 commit c02afdc
1 file changed
+5
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1008 | 1008 | | |
1009 | 1009 | | |
1010 | 1010 | | |
| 1011 | + | |
1011 | 1012 | | |
1012 | 1013 | | |
1013 | 1014 | | |
| |||
1422 | 1423 | | |
1423 | 1424 | | |
1424 | 1425 | | |
| 1426 | + | |
1425 | 1427 | | |
1426 | 1428 | | |
1427 | 1429 | | |
| |||
6520 | 6522 | | |
6521 | 6523 | | |
6522 | 6524 | | |
| 6525 | + | |
6523 | 6526 | | |
6524 | 6527 | | |
6525 | 6528 | | |
| |||
6528 | 6531 | | |
6529 | 6532 | | |
6530 | 6533 | | |
| 6534 | + | |
| 6535 | + | |
6531 | 6536 | | |
6532 | 6537 | | |
6533 | 6538 | | |
| |||
0 commit comments