diff options
| author | Eric Dumazet <edumazet@google.com> | 2026-07-22 14:17:43 +0000 |
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2026-07-23 11:00:01 -0700 |
| commit | fd098a23bf8fda7eae48db9b06e7c34fc4d228fa (patch) | |
| tree | fbb9ba05adfee82280aafd2d27c891dcc6e3ce81 /include/uapi/linux/hsi/cs-protocol.h | |
| parent | 7089f7ab99c89f443c92d8fcc585e63f2727f0b3 (diff) | |
| download | linux-fd098a23bf8fda7eae48db9b06e7c34fc4d228fa.tar.gz linux-fd098a23bf8fda7eae48db9b06e7c34fc4d228fa.zip | |
drop_monitor: perform u64_stats updates under IRQ-disabled section
In net_dm_packet_trace_kfree_skb_hit() and net_dm_hw_trap_packet_probe(),
u64_stats_update_begin() / u64_stats_inc() / u64_stats_update_end() were
called after spin_unlock_irqrestore(&...drop_queue.lock, flags), when local
IRQs had already been re-enabled.
Tracepoint probes can execute in IRQ or softirq context. On 32-bit
architectures, u64_stats_update_begin() disables preemption but not interrupts,
relying on seqcount writes. If a nested interrupt occurs on the same CPU during
the 64-bit stats update, the reentrant seqcount update can corrupt the
seqcount state or stats value.
Fix this by performing the 64-bit per-CPU stats update before releasing
drop_queue.lock via spin_unlock_irqrestore(), ensuring local interrupts remain
disabled during the u64_stats update.
Fixes: e9feb58020f9 ("drop_monitor: Expose tail drop counter")
Fixes: 5e58109b1ea4 ("drop_monitor: Add support for packet alert mode for hardware drops")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20260722141743.3266924-3-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'include/uapi/linux/hsi/cs-protocol.h')
0 files changed, 0 insertions, 0 deletions
