|
@@ -775,8 +775,10 @@ static int ping_v4_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
|
|
ipc.addr = faddr = daddr;
|
|
ipc.addr = faddr = daddr;
|
|
|
|
|
|
if (ipc.opt && ipc.opt->opt.srr) {
|
|
if (ipc.opt && ipc.opt->opt.srr) {
|
|
- if (!daddr)
|
|
|
|
- return -EINVAL;
|
|
|
|
|
|
+ if (!daddr) {
|
|
|
|
+ err = -EINVAL;
|
|
|
|
+ goto out_free;
|
|
|
|
+ }
|
|
faddr = ipc.opt->opt.faddr;
|
|
faddr = ipc.opt->opt.faddr;
|
|
}
|
|
}
|
|
tos = get_rttos(&ipc, inet);
|
|
tos = get_rttos(&ipc, inet);
|
|
@@ -842,6 +844,7 @@ back_from_confirm:
|
|
|
|
|
|
out:
|
|
out:
|
|
ip_rt_put(rt);
|
|
ip_rt_put(rt);
|
|
|
|
+out_free:
|
|
if (free)
|
|
if (free)
|
|
kfree(ipc.opt);
|
|
kfree(ipc.opt);
|
|
if (!err) {
|
|
if (!err) {
|