regulator: event: Ensure atomicity for sequence number

Previously, the sequence number in the regulator event subsystem was
updated without atomic operations, potentially leading to race
conditions. This commit addresses the issue by making the sequence
number atomic.

Signed-off-by: Naresh Solanki <naresh.solanki@9elements.com>
Link: https://msgid.link/r/20240104141314.3337037-1-naresh.solanki@9elements.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Naresh Solanki 2024-01-04 19:43:13 +05:30 committed by Mark Brown
parent 51088e5cc2
commit 1cadc04c1a
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0

View File

@ -8,10 +8,11 @@
#include <regulator/regulator.h>
#include <net/netlink.h>
#include <net/genetlink.h>
#include <linux/atomic.h>
#include "regnl.h"
static unsigned int reg_event_seqnum;
static atomic_t reg_event_seqnum = ATOMIC_INIT(0);
static const struct genl_multicast_group reg_event_mcgrps[] = {
{ .name = REG_GENL_MCAST_GROUP_NAME, },
@ -43,9 +44,8 @@ int reg_generate_netlink_event(const char *reg_name, u64 event)
return -ENOMEM;
/* add the genetlink message header */
msg_header = genlmsg_put(skb, 0, reg_event_seqnum++,
&reg_event_genl_family, 0,
REG_GENL_CMD_EVENT);
msg_header = genlmsg_put(skb, 0, atomic_inc_return(&reg_event_seqnum),
&reg_event_genl_family, 0, REG_GENL_CMD_EVENT);
if (!msg_header) {
nlmsg_free(skb);
return -ENOMEM;