diff options
| author | Eric Dumazet <edumazet@google.com> | 2023-03-16 01:10:09 +0000 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2023-03-17 08:52:05 +0000 | 
| commit | 1051ce4ab64db91f7b62369ddc321ba8747f8c84 (patch) | |
| tree | f2a6bf0ebfc9e1c06f12fe4879deb5547baf7128 /net/packet | |
| parent | fd53c297aa7b077ae98a3d3d2d3aa278a1686ba6 (diff) | |
net/packet: annotate accesses to po->tp_tstamp
tp_tstamp is read locklessly.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/packet')
| -rw-r--r-- | net/packet/af_packet.c | 9 | ||||
| -rw-r--r-- | net/packet/diag.c | 2 | 
2 files changed, 6 insertions, 5 deletions
| diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index ecd9fc27e360..a27a811fa2b0 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -474,7 +474,7 @@ static __u32 __packet_set_timestamp(struct packet_sock *po, void *frame,  	struct timespec64 ts;  	__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;  	h.raw = frame; @@ -2403,7 +2403,8 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,  	 * closer to the time of capture.  	 */  	ts_status = tpacket_get_timestamp(skb, &ts, -					  po->tp_tstamp | SOF_TIMESTAMPING_SOFTWARE); +					  READ_ONCE(po->tp_tstamp) | +					  SOF_TIMESTAMPING_SOFTWARE);  	if (!ts_status)  		ktime_get_real_ts64(&ts); @@ -3945,7 +3946,7 @@ packet_setsockopt(struct socket *sock, int level, int optname, sockptr_t optval,  		if (copy_from_sockptr(&val, optval, sizeof(val)))  			return -EFAULT; -		po->tp_tstamp = val; +		WRITE_ONCE(po->tp_tstamp, val);  		return 0;  	}  	case PACKET_FANOUT: @@ -4097,7 +4098,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,  		val = po->tp_loss;  		break;  	case PACKET_TIMESTAMP: -		val = po->tp_tstamp; +		val = READ_ONCE(po->tp_tstamp);  		break;  	case PACKET_FANOUT:  		val = (po->fanout ? diff --git a/net/packet/diag.c b/net/packet/diag.c index d704c7bf51b2..0abca32e2f87 100644 --- a/net/packet/diag.c +++ b/net/packet/diag.c @@ -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_reserve = po->tp_reserve;  	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;  	if (po->running) | 
