|
@@ -126,8 +126,10 @@ static int ping_v6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
|
|
rt = (struct rt6_info *) dst;
|
|
rt = (struct rt6_info *) dst;
|
|
|
|
|
|
np = inet6_sk(sk);
|
|
np = inet6_sk(sk);
|
|
- if (!np)
|
|
|
|
- return -EBADF;
|
|
|
|
|
|
+ if (!np) {
|
|
|
|
+ err = -EBADF;
|
|
|
|
+ goto dst_err_out;
|
|
|
|
+ }
|
|
|
|
|
|
if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr))
|
|
if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr))
|
|
fl6.flowi6_oif = np->mcast_oif;
|
|
fl6.flowi6_oif = np->mcast_oif;
|
|
@@ -163,6 +165,9 @@ static int ping_v6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
|
|
}
|
|
}
|
|
release_sock(sk);
|
|
release_sock(sk);
|
|
|
|
|
|
|
|
+dst_err_out:
|
|
|
|
+ dst_release(dst);
|
|
|
|
+
|
|
if (err)
|
|
if (err)
|
|
return err;
|
|
return err;
|
|
|
|
|