mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-20 21:51:05 +00:00
net: use dst_confirm_neigh for UDP, RAW, ICMP, L2TP
When same struct dst_entry can be used for many different neighbours we can not use it for pending confirmations. The datagram protocols can use MSG_CONFIRM to confirm the neighbour. When used with MSG_PROBE we do not reach the code where neighbour is confirmed, so we have to do the same slow lookup by using the dst_confirm_neigh() helper. When MSG_PROBE is not used, ip_append_data/ip6_append_data will set the skb flag dst_pending_confirm. Reported-by: YueHaibing <yuehaibing@huawei.com> Fixes:5110effee8
("net: Do delayed neigh confirmation.") Fixes:f2bb4bedf3
("ipv4: Cache output routes in fib_info nexthops.") Signed-off-by: Julian Anastasov <ja@ssi.bg> Acked-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
63fca65d08
commit
0dec879f63
9 changed files with 44 additions and 19 deletions
|
@ -383,6 +383,9 @@ static int raw_send_hdrinc(struct sock *sk, struct flowi4 *fl4,
|
|||
|
||||
sock_tx_timestamp(sk, sockc->tsflags, &skb_shinfo(skb)->tx_flags);
|
||||
|
||||
if (flags & MSG_CONFIRM)
|
||||
skb_set_dst_pending_confirm(skb, 1);
|
||||
|
||||
skb->transport_header = skb->network_header;
|
||||
err = -EFAULT;
|
||||
if (memcpy_from_msg(iph, msg, length))
|
||||
|
@ -666,7 +669,8 @@ out:
|
|||
return len;
|
||||
|
||||
do_confirm:
|
||||
dst_confirm(&rt->dst);
|
||||
if (msg->msg_flags & MSG_PROBE)
|
||||
dst_confirm_neigh(&rt->dst, &fl4.daddr);
|
||||
if (!(msg->msg_flags & MSG_PROBE) || len)
|
||||
goto back_from_confirm;
|
||||
err = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue