Skip to content

Commit 63d8172

Browse files
ummakynesgregkh
authored andcommitted
gtp: allow -1 to be specified as file description from userspace
[ Upstream commit 7515e37 ] Existing user space applications maintained by the Osmocom project are breaking since a recent fix that addresses incorrect error checking. Restore operation for user space programs that specify -1 as file descriptor to skip GTPv0 or GTPv1 only sockets. Fixes: defd8b3 ("gtp: fix a potential NULL pointer dereference") Reported-by: Pau Espin Pedrol <pespin@sysmocom.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Tested-by: Oliver Smith <osmith@sysmocom.de> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/20241022144825.66740-1-pablo@netfilter.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 66f635f commit 63d8172

1 file changed

Lines changed: 13 additions & 9 deletions

File tree

drivers/net/gtp.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -853,20 +853,24 @@ static int gtp_encap_enable(struct gtp_dev *gtp, struct nlattr *data[])
853853
unsigned int role = GTP_ROLE_GGSN;
854854

855855
if (data[IFLA_GTP_FD0]) {
856-
u32 fd0 = nla_get_u32(data[IFLA_GTP_FD0]);
856+
int fd0 = nla_get_u32(data[IFLA_GTP_FD0]);
857857

858-
sk0 = gtp_encap_enable_socket(fd0, UDP_ENCAP_GTP0, gtp);
859-
if (IS_ERR(sk0))
860-
return PTR_ERR(sk0);
858+
if (fd0 >= 0) {
859+
sk0 = gtp_encap_enable_socket(fd0, UDP_ENCAP_GTP0, gtp);
860+
if (IS_ERR(sk0))
861+
return PTR_ERR(sk0);
862+
}
861863
}
862864

863865
if (data[IFLA_GTP_FD1]) {
864-
u32 fd1 = nla_get_u32(data[IFLA_GTP_FD1]);
866+
int fd1 = nla_get_u32(data[IFLA_GTP_FD1]);
865867

866-
sk1u = gtp_encap_enable_socket(fd1, UDP_ENCAP_GTP1U, gtp);
867-
if (IS_ERR(sk1u)) {
868-
gtp_encap_disable_sock(sk0);
869-
return PTR_ERR(sk1u);
868+
if (fd1 >= 0) {
869+
sk1u = gtp_encap_enable_socket(fd1, UDP_ENCAP_GTP1U, gtp);
870+
if (IS_ERR(sk1u)) {
871+
gtp_encap_disable_sock(sk0);
872+
return PTR_ERR(sk1u);
873+
}
870874
}
871875
}
872876

0 commit comments

Comments
 (0)