Commit 1051ce4a authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller

net/packet: annotate accesses to po->tp_tstamp

tp_tstamp is read locklessly.
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent fd53c297
...@@ -474,7 +474,7 @@ static __u32 __packet_set_timestamp(struct packet_sock *po, void *frame, ...@@ -474,7 +474,7 @@ static __u32 __packet_set_timestamp(struct packet_sock *po, void *frame,
struct timespec64 ts; struct timespec64 ts;
__u32 ts_status; __u32 ts_status;
if (!(ts_status = tpacket_get_timestamp(skb, &ts, po->tp_tstamp))) if (!(ts_status = tpacket_get_timestamp(skb, &ts, READ_ONCE(po->tp_tstamp))))
return 0; return 0;
h.raw = frame; h.raw = frame;
...@@ -2403,7 +2403,8 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, ...@@ -2403,7 +2403,8 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
* closer to the time of capture. * closer to the time of capture.
*/ */
ts_status = tpacket_get_timestamp(skb, &ts, ts_status = tpacket_get_timestamp(skb, &ts,
po->tp_tstamp | SOF_TIMESTAMPING_SOFTWARE); READ_ONCE(po->tp_tstamp) |
SOF_TIMESTAMPING_SOFTWARE);
if (!ts_status) if (!ts_status)
ktime_get_real_ts64(&ts); ktime_get_real_ts64(&ts);
...@@ -3945,7 +3946,7 @@ packet_setsockopt(struct socket *sock, int level, int optname, sockptr_t optval, ...@@ -3945,7 +3946,7 @@ packet_setsockopt(struct socket *sock, int level, int optname, sockptr_t optval,
if (copy_from_sockptr(&val, optval, sizeof(val))) if (copy_from_sockptr(&val, optval, sizeof(val)))
return -EFAULT; return -EFAULT;
po->tp_tstamp = val; WRITE_ONCE(po->tp_tstamp, val);
return 0; return 0;
} }
case PACKET_FANOUT: case PACKET_FANOUT:
...@@ -4097,7 +4098,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname, ...@@ -4097,7 +4098,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
val = po->tp_loss; val = po->tp_loss;
break; break;
case PACKET_TIMESTAMP: case PACKET_TIMESTAMP:
val = po->tp_tstamp; val = READ_ONCE(po->tp_tstamp);
break; break;
case PACKET_FANOUT: case PACKET_FANOUT:
val = (po->fanout ? val = (po->fanout ?
......
...@@ -18,7 +18,7 @@ static int pdiag_put_info(const struct packet_sock *po, struct sk_buff *nlskb) ...@@ -18,7 +18,7 @@ static int pdiag_put_info(const struct packet_sock *po, struct sk_buff *nlskb)
pinfo.pdi_version = po->tp_version; pinfo.pdi_version = po->tp_version;
pinfo.pdi_reserve = po->tp_reserve; pinfo.pdi_reserve = po->tp_reserve;
pinfo.pdi_copy_thresh = po->copy_thresh; pinfo.pdi_copy_thresh = po->copy_thresh;
pinfo.pdi_tstamp = po->tp_tstamp; pinfo.pdi_tstamp = READ_ONCE(po->tp_tstamp);
pinfo.pdi_flags = 0; pinfo.pdi_flags = 0;
if (po->running) if (po->running)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment