Skip to content

Commit 119cae5

Browse files
JasonXingPaolo Abeni
authored andcommitted
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: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Jason Xing <kernelxing@tencent.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
1 parent cfd9f4a commit 119cae5

3 files changed

Lines changed: 5 additions & 4 deletions

File tree

net/netrom/nr_dev.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ static int nr_header(struct sk_buff *skb, struct net_device *dev,
8181
buff[6] |= AX25_SSSID_SPARE;
8282
buff += AX25_ADDR_LEN;
8383

84-
*buff++ = sysctl_netrom_network_ttl_initialiser;
84+
*buff++ = READ_ONCE(sysctl_netrom_network_ttl_initialiser);
8585

8686
*buff++ = NR_PROTO_IP;
8787
*buff++ = NR_PROTO_IP;

net/netrom/nr_out.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ void nr_transmit_buffer(struct sock *sk, struct sk_buff *skb)
204204
dptr[6] |= AX25_SSSID_SPARE;
205205
dptr += AX25_ADDR_LEN;
206206

207-
*dptr++ = sysctl_netrom_network_ttl_initialiser;
207+
*dptr++ = READ_ONCE(sysctl_netrom_network_ttl_initialiser);
208208

209209
if (!nr_route_frame(skb, NULL)) {
210210
kfree_skb(skb);

net/netrom/nr_subr.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,8 @@ void nr_write_internal(struct sock *sk, int frametype)
182182
*dptr++ = nr->my_id;
183183
*dptr++ = frametype;
184184
*dptr++ = nr->window;
185-
if (nr->bpqext) *dptr++ = sysctl_netrom_network_ttl_initialiser;
185+
if (nr->bpqext)
186+
*dptr++ = READ_ONCE(sysctl_netrom_network_ttl_initialiser);
186187
break;
187188

188189
case NR_DISCREQ:
@@ -236,7 +237,7 @@ void __nr_transmit_reply(struct sk_buff *skb, int mine, unsigned char cmdflags)
236237
dptr[6] |= AX25_SSSID_SPARE;
237238
dptr += AX25_ADDR_LEN;
238239

239-
*dptr++ = sysctl_netrom_network_ttl_initialiser;
240+
*dptr++ = READ_ONCE(sysctl_netrom_network_ttl_initialiser);
240241

241242
if (mine) {
242243
*dptr++ = 0;

0 commit comments

Comments
 (0)