diff options
| author | Eric Biggers <ebiggers@kernel.org> | 2026-10-01 10:13:49 -0700 |
|---|---|---|
| committer | Eric Biggers <ebiggers@kernel.org> | 2026-10-05 10:50:37 +0200 |
| commit | e58c3805ed325fe2d4ae2dd467c0486cc860b733 (patch) | |
| tree | 77da458819d5e39af33bd69bee1f29ffc9a9df1f /scripts/git.orderFile | |
| parent | 72d3fcf802c45d00b300f25b848a93c3a2bd7c7e (diff) | |
fsverity: RCU-delay the freeing of struct fsverity_info
__fsverity_get_info() calls rhashtable_lookup_fast(), which just uses
rcu_read_lock() and doesn't directly synchronize with
fsverity_remove_info().
For the same inode this isn't a problem: its fsverity_info is removed
only at inode eviction time or upon failure to enable verity, when the
inode no longer needs its fsverity_info and it will no longer be
accessed via that inode.
However, this is broken and can cause a use-after-free for concurrent
__fsverity_get_info() for *different* inodes. Those rely on following
fsverity_info::rhash_head in the rhashtable under rcu_read_lock() only.
They also use fsverity_info::inode to do the key comparison.
Fix this by RCU-delaying the freeing of 'struct fsverity_info' after
it's been removed from the rhashtable.
Fixes: f77f281b6118 ("fsverity: use a hashtable to find the fsverity_info")
Cc: stable@vger.kernel.org
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Sandeep Dhavale <dhavale@google.com>
Link: https://patch.msgid.link/20261001171349.81454-1-ebiggers@kernel.org
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
Diffstat (limited to 'scripts/git.orderFile')
0 files changed, 0 insertions, 0 deletions
