Skip to content

Commit 3ab1b46

Browse files
Andreas Schultzdavem330
authored andcommitted
gtp: fix cross netns recv on gtp socket
The use of the passed through netlink src_net to check for a cross netns operation was wrong. Using the GTP socket and the GTP netdevice is always correct (even if the netdev has been moved to new netns after link creation). Remove the now obsolete net field from gtp_dev. Signed-off-by: Andreas Schultz <aschultz@tpip.net> Acked-by: Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent c6ce1d0 commit 3ab1b46

File tree

1 file changed

+4
-6
lines changed

1 file changed

+4
-6
lines changed

drivers/net/gtp.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ struct gtp_dev {
6969
struct socket *sock0;
7070
struct socket *sock1u;
7171

72-
struct net *net;
7372
struct net_device *dev;
7473

7574
unsigned int hash_size;
@@ -316,7 +315,7 @@ static int gtp_encap_recv(struct sock *sk, struct sk_buff *skb)
316315

317316
netdev_dbg(gtp->dev, "encap_recv sk=%p\n", sk);
318317

319-
xnet = !net_eq(gtp->net, dev_net(gtp->dev));
318+
xnet = !net_eq(sock_net(sk), dev_net(gtp->dev));
320319

321320
switch (udp_sk(sk)->encap_type) {
322321
case UDP_ENCAP_GTP0:
@@ -658,7 +657,7 @@ static void gtp_link_setup(struct net_device *dev)
658657
static int gtp_hashtable_new(struct gtp_dev *gtp, int hsize);
659658
static void gtp_hashtable_free(struct gtp_dev *gtp);
660659
static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
661-
int fd_gtp0, int fd_gtp1, struct net *src_net);
660+
int fd_gtp0, int fd_gtp1);
662661

663662
static int gtp_newlink(struct net *src_net, struct net_device *dev,
664663
struct nlattr *tb[], struct nlattr *data[])
@@ -675,7 +674,7 @@ static int gtp_newlink(struct net *src_net, struct net_device *dev,
675674
fd0 = nla_get_u32(data[IFLA_GTP_FD0]);
676675
fd1 = nla_get_u32(data[IFLA_GTP_FD1]);
677676

678-
err = gtp_encap_enable(dev, gtp, fd0, fd1, src_net);
677+
err = gtp_encap_enable(dev, gtp, fd0, fd1);
679678
if (err < 0)
680679
goto out_err;
681680

@@ -821,7 +820,7 @@ static void gtp_hashtable_free(struct gtp_dev *gtp)
821820
}
822821

823822
static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
824-
int fd_gtp0, int fd_gtp1, struct net *src_net)
823+
int fd_gtp0, int fd_gtp1)
825824
{
826825
struct udp_tunnel_sock_cfg tuncfg = {NULL};
827826
struct socket *sock0, *sock1u;
@@ -858,7 +857,6 @@ static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
858857

859858
gtp->sock0 = sock0;
860859
gtp->sock1u = sock1u;
861-
gtp->net = src_net;
862860

863861
tuncfg.sk_user_data = gtp;
864862
tuncfg.encap_rcv = gtp_encap_recv;

0 commit comments

Comments
 (0)