Skip to content

Commit b9f4554

Browse files
Paolo Abenidavem330
authored andcommitted
mptcp: annotate lockless access for token
The token field is manipulated under the msk socket lock and accessed lockless in a few spots, add proper ONCE annotation Signed-off-by: Paolo Abeni <[email protected]> Reviewed-by: Mat Martineau <[email protected]> Signed-off-by: Matthieu Baerts (NGI0) <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 9426ce4 commit b9f4554

File tree

3 files changed

+7
-7
lines changed

3 files changed

+7
-7
lines changed

net/mptcp/pm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ void mptcp_pm_new_connection(struct mptcp_sock *msk, const struct sock *ssk, int
7777
{
7878
struct mptcp_pm_data *pm = &msk->pm;
7979

80-
pr_debug("msk=%p, token=%u side=%d", msk, msk->token, server_side);
80+
pr_debug("msk=%p, token=%u side=%d", msk, READ_ONCE(msk->token), server_side);
8181

8282
WRITE_ONCE(pm->server_side, server_side);
8383
mptcp_event(MPTCP_EVENT_CREATED, msk, ssk, GFP_ATOMIC);

net/mptcp/pm_netlink.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1997,7 +1997,7 @@ static int mptcp_event_put_token_and_ssk(struct sk_buff *skb,
19971997
const struct mptcp_subflow_context *sf;
19981998
u8 sk_err;
19991999

2000-
if (nla_put_u32(skb, MPTCP_ATTR_TOKEN, msk->token))
2000+
if (nla_put_u32(skb, MPTCP_ATTR_TOKEN, READ_ONCE(msk->token)))
20012001
return -EMSGSIZE;
20022002

20032003
if (mptcp_event_add_subflow(skb, ssk))
@@ -2055,7 +2055,7 @@ static int mptcp_event_created(struct sk_buff *skb,
20552055
const struct mptcp_sock *msk,
20562056
const struct sock *ssk)
20572057
{
2058-
int err = nla_put_u32(skb, MPTCP_ATTR_TOKEN, msk->token);
2058+
int err = nla_put_u32(skb, MPTCP_ATTR_TOKEN, READ_ONCE(msk->token));
20592059

20602060
if (err)
20612061
return err;
@@ -2083,7 +2083,7 @@ void mptcp_event_addr_removed(const struct mptcp_sock *msk, uint8_t id)
20832083
if (!nlh)
20842084
goto nla_put_failure;
20852085

2086-
if (nla_put_u32(skb, MPTCP_ATTR_TOKEN, msk->token))
2086+
if (nla_put_u32(skb, MPTCP_ATTR_TOKEN, READ_ONCE(msk->token)))
20872087
goto nla_put_failure;
20882088

20892089
if (nla_put_u8(skb, MPTCP_ATTR_REM_ID, id))
@@ -2118,7 +2118,7 @@ void mptcp_event_addr_announced(const struct sock *ssk,
21182118
if (!nlh)
21192119
goto nla_put_failure;
21202120

2121-
if (nla_put_u32(skb, MPTCP_ATTR_TOKEN, msk->token))
2121+
if (nla_put_u32(skb, MPTCP_ATTR_TOKEN, READ_ONCE(msk->token)))
21222122
goto nla_put_failure;
21232123

21242124
if (nla_put_u8(skb, MPTCP_ATTR_REM_ID, info->id))
@@ -2234,7 +2234,7 @@ void mptcp_event(enum mptcp_event_type type, const struct mptcp_sock *msk,
22342234
goto nla_put_failure;
22352235
break;
22362236
case MPTCP_EVENT_CLOSED:
2237-
if (nla_put_u32(skb, MPTCP_ATTR_TOKEN, msk->token) < 0)
2237+
if (nla_put_u32(skb, MPTCP_ATTR_TOKEN, READ_ONCE(msk->token)) < 0)
22382238
goto nla_put_failure;
22392239
break;
22402240
case MPTCP_EVENT_ANNOUNCED:

net/mptcp/protocol.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3199,7 +3199,7 @@ struct sock *mptcp_sk_clone_init(const struct sock *sk,
31993199

32003200
msk = mptcp_sk(nsk);
32013201
WRITE_ONCE(msk->local_key, subflow_req->local_key);
3202-
msk->token = subflow_req->token;
3202+
WRITE_ONCE(msk->token, subflow_req->token);
32033203
msk->in_accept_queue = 1;
32043204
WRITE_ONCE(msk->fully_established, false);
32053205
if (mp_opt->suboptions & OPTION_MPTCP_CSUMREQD)

0 commit comments

Comments
 (0)