mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
ipv6: sr: Use nested-BH locking for hmac_storage
hmac_storage is a per-CPU variable and relies on disabled BH for its locking. Without per-CPU locking in local_bh_disable() on PREEMPT_RT this data structure requires explicit locking. Add a local_lock_t to the data structure and use local_lock_nested_bh() for locking. This change adds only lockdep coverage and does not alter the functional behaviour for !PREEMPT_RT. Cc: David Ahern <dsahern@kernel.org> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Link: https://patch.msgid.link/20250512092736.229935-5-bigeasy@linutronix.de Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
1c0829788a
commit
bc57eda646
|
|
@ -40,7 +40,14 @@
|
|||
#include <net/seg6_hmac.h>
|
||||
#include <linux/random.h>
|
||||
|
||||
static DEFINE_PER_CPU(char [SEG6_HMAC_RING_SIZE], hmac_ring);
|
||||
struct hmac_storage {
|
||||
local_lock_t bh_lock;
|
||||
char hmac_ring[SEG6_HMAC_RING_SIZE];
|
||||
};
|
||||
|
||||
static DEFINE_PER_CPU(struct hmac_storage, hmac_storage) = {
|
||||
.bh_lock = INIT_LOCAL_LOCK(bh_lock),
|
||||
};
|
||||
|
||||
static int seg6_hmac_cmpfn(struct rhashtable_compare_arg *arg, const void *obj)
|
||||
{
|
||||
|
|
@ -187,7 +194,8 @@ int seg6_hmac_compute(struct seg6_hmac_info *hinfo, struct ipv6_sr_hdr *hdr,
|
|||
*/
|
||||
|
||||
local_bh_disable();
|
||||
ring = this_cpu_ptr(hmac_ring);
|
||||
local_lock_nested_bh(&hmac_storage.bh_lock);
|
||||
ring = this_cpu_ptr(hmac_storage.hmac_ring);
|
||||
off = ring;
|
||||
|
||||
/* source address */
|
||||
|
|
@ -212,6 +220,7 @@ int seg6_hmac_compute(struct seg6_hmac_info *hinfo, struct ipv6_sr_hdr *hdr,
|
|||
|
||||
dgsize = __do_hmac(hinfo, ring, plen, tmp_out,
|
||||
SEG6_HMAC_MAX_DIGESTSIZE);
|
||||
local_unlock_nested_bh(&hmac_storage.bh_lock);
|
||||
local_bh_enable();
|
||||
|
||||
if (dgsize < 0)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user