diff options
| author | Henrique Carvalho <henrique.carvalho@suse.com> | 2026-01-27 13:01:28 -0300 |
|---|---|---|
| committer | Steve French <stfrench@microsoft.com> | 2026-02-08 17:07:43 -0600 |
| commit | ec306600d5ba7148c9dbf8f5a8f1f5c1a044a241 (patch) | |
| tree | 25e80d14dcd3104539534d6b890bbeb259073de1 /tools/perf/scripts/python/export-to-sqlite.py | |
| parent | 96c4af418586ee9a6aab61738644366426e05316 (diff) | |
| download | linux-ec306600d5ba7148c9dbf8f5a8f1f5c1a044a241.tar.gz linux-ec306600d5ba7148c9dbf8f5a8f1f5c1a044a241.zip | |
smb: client: split cached_fid bitfields to avoid shared-byte RMW races
is_open, has_lease and on_list are stored in the same bitfield byte in
struct cached_fid but are updated in different code paths that may run
concurrently. Bitfield assignments generate byte read–modify–write
operations (e.g. `orb $mask, addr` on x86_64), so updating one flag can
restore stale values of the others.
A possible interleaving is:
CPU1: load old byte (has_lease=1, on_list=1)
CPU2: clear both flags (store 0)
CPU1: RMW store (old | IS_OPEN) -> reintroduces cleared bits
To avoid this class of races, convert these flags to separate bool
fields.
Cc: stable@vger.kernel.org
Fixes: ebe98f1447bbc ("cifs: enable caching of directories for which a lease is held")
Signed-off-by: Henrique Carvalho <henrique.carvalho@suse.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'tools/perf/scripts/python/export-to-sqlite.py')
0 files changed, 0 insertions, 0 deletions
