|
@@ -1116,10 +1116,10 @@ int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
|
|
|
struct dst_entry *dst;
|
|
|
struct ipcm6_cookie ipc6;
|
|
|
int addr_len = msg->msg_namelen;
|
|
|
+ bool connected = false;
|
|
|
int ulen = len;
|
|
|
int corkreq = up->corkflag || msg->msg_flags&MSG_MORE;
|
|
|
int err;
|
|
|
- int connected = 0;
|
|
|
int is_udplite = IS_UDPLITE(sk);
|
|
|
int (*getfrag)(void *, char *, int, int, int, struct sk_buff *);
|
|
|
struct sockcm_cookie sockc;
|
|
@@ -1241,7 +1241,7 @@ do_udp_sendmsg:
|
|
|
fl6.fl6_dport = inet->inet_dport;
|
|
|
daddr = &sk->sk_v6_daddr;
|
|
|
fl6.flowlabel = np->flow_label;
|
|
|
- connected = 1;
|
|
|
+ connected = true;
|
|
|
}
|
|
|
|
|
|
if (!fl6.flowi6_oif)
|
|
@@ -1271,7 +1271,7 @@ do_udp_sendmsg:
|
|
|
}
|
|
|
if (!(opt->opt_nflen|opt->opt_flen))
|
|
|
opt = NULL;
|
|
|
- connected = 0;
|
|
|
+ connected = false;
|
|
|
}
|
|
|
if (!opt) {
|
|
|
opt = txopt_get(np);
|
|
@@ -1293,11 +1293,11 @@ do_udp_sendmsg:
|
|
|
|
|
|
final_p = fl6_update_dst(&fl6, opt, &final);
|
|
|
if (final_p)
|
|
|
- connected = 0;
|
|
|
+ connected = false;
|
|
|
|
|
|
if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr)) {
|
|
|
fl6.flowi6_oif = np->mcast_oif;
|
|
|
- connected = 0;
|
|
|
+ connected = false;
|
|
|
} else if (!fl6.flowi6_oif)
|
|
|
fl6.flowi6_oif = np->ucast_oif;
|
|
|
|
|
@@ -1308,7 +1308,7 @@ do_udp_sendmsg:
|
|
|
|
|
|
fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel);
|
|
|
|
|
|
- dst = ip6_sk_dst_lookup_flow(sk, &fl6, final_p);
|
|
|
+ dst = ip6_sk_dst_lookup_flow(sk, &fl6, final_p, connected);
|
|
|
if (IS_ERR(dst)) {
|
|
|
err = PTR_ERR(dst);
|
|
|
dst = NULL;
|
|
@@ -1333,7 +1333,7 @@ back_from_confirm:
|
|
|
err = PTR_ERR(skb);
|
|
|
if (!IS_ERR_OR_NULL(skb))
|
|
|
err = udp_v6_send_skb(skb, &fl6);
|
|
|
- goto release_dst;
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
lock_sock(sk);
|
|
@@ -1367,23 +1367,6 @@ do_append_data:
|
|
|
err = np->recverr ? net_xmit_errno(err) : 0;
|
|
|
release_sock(sk);
|
|
|
|
|
|
-release_dst:
|
|
|
- if (dst) {
|
|
|
- if (connected) {
|
|
|
- ip6_dst_store(sk, dst,
|
|
|
- ipv6_addr_equal(&fl6.daddr, &sk->sk_v6_daddr) ?
|
|
|
- &sk->sk_v6_daddr : NULL,
|
|
|
-#ifdef CONFIG_IPV6_SUBTREES
|
|
|
- ipv6_addr_equal(&fl6.saddr, &np->saddr) ?
|
|
|
- &np->saddr :
|
|
|
-#endif
|
|
|
- NULL);
|
|
|
- } else {
|
|
|
- dst_release(dst);
|
|
|
- }
|
|
|
- dst = NULL;
|
|
|
- }
|
|
|
-
|
|
|
out:
|
|
|
dst_release(dst);
|
|
|
fl6_sock_release(flowlabel);
|