summaryrefslogtreecommitdiffstats
path: root/net/ipv4/udp.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/udp.c')
-rw-r--r--net/ipv4/udp.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 24b5c59b1c53..b61a770884fa 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -401,9 +401,9 @@ static int compute_score(struct sock *sk, struct net *net,
401 bool dev_match = (sk->sk_bound_dev_if == dif || 401 bool dev_match = (sk->sk_bound_dev_if == dif ||
402 sk->sk_bound_dev_if == sdif); 402 sk->sk_bound_dev_if == sdif);
403 403
404 if (exact_dif && !dev_match) 404 if (!dev_match)
405 return -1; 405 return -1;
406 if (sk->sk_bound_dev_if && dev_match) 406 if (sk->sk_bound_dev_if)
407 score += 4; 407 score += 4;
408 } 408 }
409 409
@@ -952,8 +952,10 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
952 sock_tx_timestamp(sk, ipc.sockc.tsflags, &ipc.tx_flags); 952 sock_tx_timestamp(sk, ipc.sockc.tsflags, &ipc.tx_flags);
953 953
954 if (ipc.opt && ipc.opt->opt.srr) { 954 if (ipc.opt && ipc.opt->opt.srr) {
955 if (!daddr) 955 if (!daddr) {
956 return -EINVAL; 956 err = -EINVAL;
957 goto out_free;
958 }
957 faddr = ipc.opt->opt.faddr; 959 faddr = ipc.opt->opt.faddr;
958 connected = 0; 960 connected = 0;
959 } 961 }
@@ -1074,6 +1076,7 @@ do_append_data:
1074 1076
1075out: 1077out:
1076 ip_rt_put(rt); 1078 ip_rt_put(rt);
1079out_free:
1077 if (free) 1080 if (free)
1078 kfree(ipc.opt); 1081 kfree(ipc.opt);
1079 if (!err) 1082 if (!err)