Skip to content

Commit 6ad8615

Browse files
wdebruijkuba-moo
authored andcommitted
net: initialize mark in sockcm_init
Avoid open coding initialization of sockcm fields. Avoid reading the sk_priority field twice. This ensures all callers, existing and future, will correctly try a cmsg passed mark before sk_mark. This patch extends support for cmsg mark to: packet_spkt and packet_tpacket and net/can/raw.c. This patch extends support for cmsg priority to: packet_spkt and packet_tpacket. Signed-off-by: Willem de Bruijn <[email protected]> Reviewed-by: David Ahern <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent aaf6532 commit 6ad8615

File tree

3 files changed

+6
-6
lines changed

3 files changed

+6
-6
lines changed

include/net/sock.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1829,6 +1829,7 @@ static inline void sockcm_init(struct sockcm_cookie *sockc,
18291829
const struct sock *sk)
18301830
{
18311831
*sockc = (struct sockcm_cookie) {
1832+
.mark = READ_ONCE(sk->sk_mark),
18321833
.tsflags = READ_ONCE(sk->sk_tsflags),
18331834
.priority = READ_ONCE(sk->sk_priority),
18341835
};

net/can/raw.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -963,7 +963,7 @@ static int raw_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
963963

964964
skb->dev = dev;
965965
skb->priority = sockc.priority;
966-
skb->mark = READ_ONCE(sk->sk_mark);
966+
skb->mark = sockc.mark;
967967
skb->tstamp = sockc.transmit_time;
968968

969969
skb_setup_tx_timestamp(skb, &sockc);

net/packet/af_packet.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2102,8 +2102,8 @@ static int packet_sendmsg_spkt(struct socket *sock, struct msghdr *msg,
21022102

21032103
skb->protocol = proto;
21042104
skb->dev = dev;
2105-
skb->priority = READ_ONCE(sk->sk_priority);
2106-
skb->mark = READ_ONCE(sk->sk_mark);
2105+
skb->priority = sockc.priority;
2106+
skb->mark = sockc.mark;
21072107
skb_set_delivery_type_by_clockid(skb, sockc.transmit_time, sk->sk_clockid);
21082108
skb_setup_tx_timestamp(skb, &sockc);
21092109

@@ -2634,8 +2634,8 @@ static int tpacket_fill_skb(struct packet_sock *po, struct sk_buff *skb,
26342634

26352635
skb->protocol = proto;
26362636
skb->dev = dev;
2637-
skb->priority = READ_ONCE(po->sk.sk_priority);
2638-
skb->mark = READ_ONCE(po->sk.sk_mark);
2637+
skb->priority = sockc->priority;
2638+
skb->mark = sockc->mark;
26392639
skb_set_delivery_type_by_clockid(skb, sockc->transmit_time, po->sk.sk_clockid);
26402640
skb_setup_tx_timestamp(skb, sockc);
26412641
skb_zcopy_set_nouarg(skb, ph.raw);
@@ -3039,7 +3039,6 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)
30393039
goto out_unlock;
30403040

30413041
sockcm_init(&sockc, sk);
3042-
sockc.mark = READ_ONCE(sk->sk_mark);
30433042
if (msg->msg_controllen) {
30443043
err = sock_cmsg_send(sk, msg, &sockc);
30453044
if (unlikely(err))

0 commit comments

Comments
 (0)