Thread (33 messages) flat view 33 messages, 5 authors, 2024-03-06

Re: [PATCH 06/13] afs: fix __afs_break_callback() / afs_drop_open_mmap() race

From: Christian Brauner <brauner@kernel.org>
Date: 2024-02-05 12:28:51
Also in: linux-cifs, linux-fsdevel, linux-nfs

On Sun, Feb 04, 2024 at 02:17:32AM +0000, Al Viro wrote:
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).

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
Acked-by: Christian Brauner <brauner@kernel.org>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help