forked from Minki/linux
dccp: use READ_ONCE() to read sk->sk_bound_dev_if
When reading listener sk->sk_bound_dev_if locklessly, we must use READ_ONCE(). Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e5fccaa1eb
commit
36f7cec4f3
@ -628,7 +628,7 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
|
||||
sk_daddr_set(req_to_sk(req), ip_hdr(skb)->saddr);
|
||||
ireq->ir_mark = inet_request_mark(sk, skb);
|
||||
ireq->ireq_family = AF_INET;
|
||||
ireq->ir_iif = sk->sk_bound_dev_if;
|
||||
ireq->ir_iif = READ_ONCE(sk->sk_bound_dev_if);
|
||||
|
||||
/*
|
||||
* Step 3: Process LISTEN state
|
||||
|
@ -374,10 +374,10 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
|
||||
refcount_inc(&skb->users);
|
||||
ireq->pktopts = skb;
|
||||
}
|
||||
ireq->ir_iif = sk->sk_bound_dev_if;
|
||||
ireq->ir_iif = READ_ONCE(sk->sk_bound_dev_if);
|
||||
|
||||
/* So that link locals have meaning */
|
||||
if (!sk->sk_bound_dev_if &&
|
||||
if (!ireq->ir_iif &&
|
||||
ipv6_addr_type(&ireq->ir_v6_rmt_addr) & IPV6_ADDR_LINKLOCAL)
|
||||
ireq->ir_iif = inet6_iif(skb);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user