* [PATCH net] ipv4: fix memory leaks in udp_sendmsg, ping_v4_sendmsg
@ 2018-05-10 17:59 Andrey Ignatov
2018-05-11 16:01 ` David Miller
0 siblings, 1 reply; 2+ messages in thread
From: Andrey Ignatov @ 2018-05-10 17:59 UTC (permalink / raw)
To: netdev, davem; +Cc: Andrey Ignatov, ast, eric.dumazet, kernel-team
Fix more memory leaks in ip_cmsg_send() callers. Part of them were fixed
earlier in 919483096bfe.
* udp_sendmsg one was there since the beginning when linux sources were
first added to git;
* ping_v4_sendmsg one was copy/pasted in c319b4d76b9e.
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: c319b4d76b9e (net: ipv4: add IPPROTO_ICMP socket kind)
Signed-off-by: Andrey Ignatov <rdna@fb.com>
---
net/ipv4/ping.c | 7 +++++--
net/ipv4/udp.c | 7 +++++--
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
index 05e47d7..56a0106 100644
--- a/net/ipv4/ping.c
+++ b/net/ipv4/ping.c
@@ -775,8 +775,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);
@@ -842,6 +844,7 @@ static int ping_v4_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
out:
ip_rt_put(rt);
+out_free:
if (free)
kfree(ipc.opt);
if (!err) {
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 24b5c59..dc4fc46 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -952,8 +952,10 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
sock_tx_timestamp(sk, ipc.sockc.tsflags, &ipc.tx_flags);
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;
}
@@ -1074,6 +1076,7 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
out:
ip_rt_put(rt);
+out_free:
if (free)
kfree(ipc.opt);
if (!err)
--
2.9.5
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH net] ipv4: fix memory leaks in udp_sendmsg, ping_v4_sendmsg
2018-05-10 17:59 [PATCH net] ipv4: fix memory leaks in udp_sendmsg, ping_v4_sendmsg Andrey Ignatov
@ 2018-05-11 16:01 ` David Miller
0 siblings, 0 replies; 2+ messages in thread
From: David Miller @ 2018-05-11 16:01 UTC (permalink / raw)
To: rdna; +Cc: netdev, ast, eric.dumazet, kernel-team
From: Andrey Ignatov <rdna@fb.com>
Date: Thu, 10 May 2018 10:59:34 -0700
> Fix more memory leaks in ip_cmsg_send() callers. Part of them were fixed
> earlier in 919483096bfe.
>
> * udp_sendmsg one was there since the beginning when linux sources were
> first added to git;
> * ping_v4_sendmsg one was copy/pasted in c319b4d76b9e.
>
> 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: c319b4d76b9e (net: ipv4: add IPPROTO_ICMP socket kind)
> Signed-off-by: Andrey Ignatov <rdna@fb.com>
Applied and queued up for -stable, thank you.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-05-11 16:01 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-05-10 17:59 [PATCH net] ipv4: fix memory leaks in udp_sendmsg, ping_v4_sendmsg Andrey Ignatov
2018-05-11 16:01 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).