summaryrefslogtreecommitdiff
path: root/drivers/net
diff options
context:
space:
mode:
authorTaehee Yoo <ap420073@gmail.com>2019-07-02 18:24:04 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-07-26 10:12:50 +0300
commit83e8d4c87dd3c215f501cce43a39c35f4fc4f9f5 (patch)
tree542cec3c8cccd6e8b54b6ec0a03efa8ffea5304f /drivers/net
parent11f91596e0c385ae61ff2d1e2707e0d1a48c9d37 (diff)
downloadlinux-83e8d4c87dd3c215f501cce43a39c35f4fc4f9f5.tar.xz
gtp: add missing gtp_encap_disable_sock() in gtp_encap_enable()
[ Upstream commit e30155fd23c9c141cbe7d99b786e10a83a328837 ] If an invalid role is sent from user space, gtp_encap_enable() will fail. Then, it should call gtp_encap_disable_sock() but current code doesn't. It makes memory leak. Fixes: 91ed81f9abc7 ("gtp: support SGSN-side tunnels") Signed-off-by: Taehee Yoo <ap420073@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/gtp.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
index 7a145172d503..83488f2bf7a0 100644
--- a/drivers/net/gtp.c
+++ b/drivers/net/gtp.c
@@ -847,8 +847,13 @@ static int gtp_encap_enable(struct gtp_dev *gtp, struct nlattr *data[])
if (data[IFLA_GTP_ROLE]) {
role = nla_get_u32(data[IFLA_GTP_ROLE]);
- if (role > GTP_ROLE_SGSN)
+ if (role > GTP_ROLE_SGSN) {
+ if (sk0)
+ gtp_encap_disable_sock(sk0);
+ if (sk1u)
+ gtp_encap_disable_sock(sk1u);
return -EINVAL;
+ }
}
gtp->sk0 = sk0;