WSL2-Linux-Kernel/fs/afs
Al Viro 187d844f2e afs: fix __afs_break_callback() / afs_drop_open_mmap() race
[ Upstream commit 275655d3207b9e65d1561bf21c06a622d9ec1d43 ]

In __afs_break_callback() we might check ->cb_nr_mmap and if it's non-zero
do queue_work(&vnode->cb_work).  In afs_drop_open_mmap() we decrement
->cb_nr_mmap and do flush_work(&vnode->cb_work) if it reaches zero.

The trouble is, there's nothing to prevent __afs_break_callback() from
seeing ->cb_nr_mmap before the decrement and do queue_work() after both
the decrement and flush_work().  If that happens, we might be in trouble -
vnode might get freed before the queued work runs.

__afs_break_callback() is always done under ->cb_lock, so let's make
sure that ->cb_nr_mmap can change from non-zero to zero while holding
->cb_lock (the spinlock component of it - it's a seqlock and we don't
need to mess with the counter).

Acked-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-09-04 13:23:23 +02:00
..
Kconfig
Makefile
addr_list.c
afs.h
afs_cm.h
afs_fs.h
afs_vl.h
cache.c
callback.c afs: fix the usage of read_seqbegin_or_lock() in afs_lookup_volume_rcu() 2024-02-23 08:54:39 +01:00
cell.c afs: Use refcount_t rather than atomic_t 2024-01-05 15:13:30 +01:00
cmservice.c afs: Use refcount_t rather than atomic_t 2024-01-05 15:13:30 +01:00
dir.c afs: Revert "afs: Hide silly-rename files from userspace" 2024-03-26 18:21:34 -04:00
dir_edit.c
dir_silly.c
dynroot.c afs: Fix dynamic root lookup DNS check 2024-01-05 15:13:30 +01:00
file.c afs: fix __afs_break_callback() / afs_drop_open_mmap() race 2024-09-04 13:23:23 +02:00
flock.c afs: Use the operation issue time instead of the reply time for callbacks 2022-09-15 11:30:05 +02:00
fs_operation.c
fs_probe.c afs: Fix lost servers_outstanding count 2022-12-31 13:14:45 +01:00
fsclient.c afs: Use the operation issue time instead of the reply time for callbacks 2022-09-15 11:30:05 +02:00
inode.c afs: Fix updating of i_size with dv jump from server 2023-05-11 23:00:38 +09:00
internal.h afs: Fix use-after-free due to get/remove race in volume tree 2024-01-05 15:13:30 +01:00
main.c
misc.c afs: Return -EAGAIN, not -EREMOTEIO, when a file already locked 2022-09-23 14:15:51 +02:00
mntpt.c afs: Don't cross .backup mountpoint from backup volume 2024-06-16 13:39:53 +02:00
proc.c afs: Use refcount_t rather than atomic_t 2024-01-05 15:13:30 +01:00
protocol_afs.h
protocol_uae.h
protocol_yfs.h
rotate.c afs: Adjust ACK interpretation to try and cope with NAT 2022-06-09 10:22:40 +02:00
rxrpc.c afs: Use refcount_t rather than atomic_t 2024-01-05 15:13:30 +01:00
security.c
server.c afs: fix the usage of read_seqbegin_or_lock() in afs_find_server*() 2024-02-23 08:54:39 +01:00
server_list.c afs: Fix afs_server_list to be cleaned up with RCU 2023-12-03 07:31:21 +01:00
super.c afs: Fix file locking on R/O volumes to operate in local mode 2023-12-03 07:31:22 +01:00
vl_alias.c
vl_list.c afs: Use refcount_t rather than atomic_t 2024-01-05 15:13:30 +01:00
vl_probe.c afs: Fix vlserver probe RTT handling 2023-06-21 15:59:18 +02:00
vl_rotate.c afs: Return ENOENT if no cell DNS record can be found 2023-12-03 07:31:22 +01:00
vlclient.c
volume.c afs: Increase buffer size in afs_update_volume_status() 2024-03-01 13:21:59 +01:00
write.c afs: Adjust ACK interpretation to try and cope with NAT 2022-06-09 10:22:40 +02:00
xattr.c
xdr_fs.h
yfsclient.c afs: Use the operation issue time instead of the reply time for callbacks 2022-09-15 11:30:05 +02:00