ipv4: fix memory leaks in udp_sendmsg, ping_v4_sendmsg
[ Upstream commit1b97013bfb
] Fix more memory leaks in ip_cmsg_send() callers. Part of them were fixed earlier in919483096b
. * udp_sendmsg one was there since the beginning when linux sources were first added to git; * ping_v4_sendmsg one was copy/pasted inc319b4d76b
. Whenever return happens in udp_sendmsg() or ping_v4_sendmsg() IP options have to be freed if they were allocated previously. Add label so that future callers (if any) can use it instead of kfree() before return that is easy to forget. Fixes:c319b4d76b
(net: ipv4: add IPPROTO_ICMP socket kind) Signed-off-by: Andrey Ignatov <rdna@fb.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
7233fad00f
commit
87bd2aca94
@ -777,8 +777,10 @@ static int ping_v4_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
|
||||
ipc.addr = faddr = daddr;
|
||||
|
||||
if (ipc.opt && ipc.opt->opt.srr) {
|
||||
if (!daddr)
|
||||
return -EINVAL;
|
||||
if (!daddr) {
|
||||
err = -EINVAL;
|
||||
goto out_free;
|
||||
}
|
||||
faddr = ipc.opt->opt.faddr;
|
||||
}
|
||||
tos = get_rttos(&ipc, inet);
|
||||
@ -843,6 +845,7 @@ back_from_confirm:
|
||||
|
||||
out:
|
||||
ip_rt_put(rt);
|
||||
out_free:
|
||||
if (free)
|
||||
kfree(ipc.opt);
|
||||
if (!err) {
|
||||
|
@ -991,8 +991,10 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
|
||||
ipc.addr = faddr = daddr;
|
||||
|
||||
if (ipc.opt && ipc.opt->opt.srr) {
|
||||
if (!daddr)
|
||||
return -EINVAL;
|
||||
if (!daddr) {
|
||||
err = -EINVAL;
|
||||
goto out_free;
|
||||
}
|
||||
faddr = ipc.opt->opt.faddr;
|
||||
connected = 0;
|
||||
}
|
||||
@ -1105,6 +1107,7 @@ do_append_data:
|
||||
|
||||
out:
|
||||
ip_rt_put(rt);
|
||||
out_free:
|
||||
if (free)
|
||||
kfree(ipc.opt);
|
||||
if (!err)
|
||||
|
Reference in New Issue
Block a user