Commit 119cae5e authored by Jason Xing's avatar Jason Xing Committed by Paolo Abeni

netrom: Fix data-races around sysctl_netrom_network_ttl_initialiser

We need to protect the reader reading the sysctl value because the
value can be changed concurrently.

Fixes: 1da177e4 ("Linux-2.6.12-rc2")
Signed-off-by: default avatarJason Xing <kernelxing@tencent.com>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent cfd9f4a7
...@@ -81,7 +81,7 @@ static int nr_header(struct sk_buff *skb, struct net_device *dev, ...@@ -81,7 +81,7 @@ static int nr_header(struct sk_buff *skb, struct net_device *dev,
buff[6] |= AX25_SSSID_SPARE; buff[6] |= AX25_SSSID_SPARE;
buff += AX25_ADDR_LEN; buff += AX25_ADDR_LEN;
*buff++ = sysctl_netrom_network_ttl_initialiser; *buff++ = READ_ONCE(sysctl_netrom_network_ttl_initialiser);
*buff++ = NR_PROTO_IP; *buff++ = NR_PROTO_IP;
*buff++ = NR_PROTO_IP; *buff++ = NR_PROTO_IP;
......
...@@ -204,7 +204,7 @@ void nr_transmit_buffer(struct sock *sk, struct sk_buff *skb) ...@@ -204,7 +204,7 @@ void nr_transmit_buffer(struct sock *sk, struct sk_buff *skb)
dptr[6] |= AX25_SSSID_SPARE; dptr[6] |= AX25_SSSID_SPARE;
dptr += AX25_ADDR_LEN; dptr += AX25_ADDR_LEN;
*dptr++ = sysctl_netrom_network_ttl_initialiser; *dptr++ = READ_ONCE(sysctl_netrom_network_ttl_initialiser);
if (!nr_route_frame(skb, NULL)) { if (!nr_route_frame(skb, NULL)) {
kfree_skb(skb); kfree_skb(skb);
......
...@@ -182,7 +182,8 @@ void nr_write_internal(struct sock *sk, int frametype) ...@@ -182,7 +182,8 @@ void nr_write_internal(struct sock *sk, int frametype)
*dptr++ = nr->my_id; *dptr++ = nr->my_id;
*dptr++ = frametype; *dptr++ = frametype;
*dptr++ = nr->window; *dptr++ = nr->window;
if (nr->bpqext) *dptr++ = sysctl_netrom_network_ttl_initialiser; if (nr->bpqext)
*dptr++ = READ_ONCE(sysctl_netrom_network_ttl_initialiser);
break; break;
case NR_DISCREQ: case NR_DISCREQ:
...@@ -236,7 +237,7 @@ void __nr_transmit_reply(struct sk_buff *skb, int mine, unsigned char cmdflags) ...@@ -236,7 +237,7 @@ void __nr_transmit_reply(struct sk_buff *skb, int mine, unsigned char cmdflags)
dptr[6] |= AX25_SSSID_SPARE; dptr[6] |= AX25_SSSID_SPARE;
dptr += AX25_ADDR_LEN; dptr += AX25_ADDR_LEN;
*dptr++ = sysctl_netrom_network_ttl_initialiser; *dptr++ = READ_ONCE(sysctl_netrom_network_ttl_initialiser);
if (mine) { if (mine) {
*dptr++ = 0; *dptr++ = 0;
......
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