[PATCH 3/5] gtp: fix cross netns recv on gtp socket

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

kbuild test robot lkp at intel.com
Tue Jan 24 23:48:09 UTC 2017


Hi Andreas,

[auto build test ERROR on net-next/master]
[also build test ERROR on v4.10-rc5 next-20170124]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Andreas-Schultz/simple-gtp-improvements/20170125-051754
config: i386-allmodconfig (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All error/warnings (new ones prefixed by >>):

   drivers/net/gtp.c: In function 'gtp_newlink':
>> drivers/net/gtp.c:677:8: error: too many arguments to function 'gtp_encap_enable'
     err = gtp_encap_enable(dev, gtp, fd0, fd1, src_net);
           ^~~~~~~~~~~~~~~~
   drivers/net/gtp.c:659:12: note: declared here
    static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
               ^~~~~~~~~~~~~~~~
   drivers/net/gtp.c: At top level:
>> drivers/net/gtp.c:822:12: error: conflicting types for 'gtp_encap_enable'
    static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
               ^~~~~~~~~~~~~~~~
   drivers/net/gtp.c:659:12: note: previous declaration of 'gtp_encap_enable' was here
    static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
               ^~~~~~~~~~~~~~~~
>> drivers/net/gtp.c:659:12: warning: 'gtp_encap_enable' used but never defined
   drivers/net/gtp.c:822:12: warning: 'gtp_encap_enable' defined but not used [-Wunused-function]
    static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
               ^~~~~~~~~~~~~~~~

vim +/gtp_encap_enable +677 drivers/net/gtp.c

459aa660 Pablo Neira     2016-05-09  653  				  sizeof(struct udphdr) +
459aa660 Pablo Neira     2016-05-09  654  				  sizeof(struct gtp0_header);
459aa660 Pablo Neira     2016-05-09  655  }
459aa660 Pablo Neira     2016-05-09  656  
459aa660 Pablo Neira     2016-05-09  657  static int gtp_hashtable_new(struct gtp_dev *gtp, int hsize);
459aa660 Pablo Neira     2016-05-09  658  static void gtp_hashtable_free(struct gtp_dev *gtp);
459aa660 Pablo Neira     2016-05-09 @659  static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
0e9ed139 Andreas Schultz 2017-01-24  660  			    int fd_gtp0, int fd_gtp1);
459aa660 Pablo Neira     2016-05-09  661  
459aa660 Pablo Neira     2016-05-09  662  static int gtp_newlink(struct net *src_net, struct net_device *dev,
459aa660 Pablo Neira     2016-05-09  663  			struct nlattr *tb[], struct nlattr *data[])
459aa660 Pablo Neira     2016-05-09  664  {
459aa660 Pablo Neira     2016-05-09  665  	int hashsize, err, fd0, fd1;
459aa660 Pablo Neira     2016-05-09  666  	struct gtp_dev *gtp;
459aa660 Pablo Neira     2016-05-09  667  	struct gtp_net *gn;
459aa660 Pablo Neira     2016-05-09  668  
459aa660 Pablo Neira     2016-05-09  669  	if (!data[IFLA_GTP_FD0] || !data[IFLA_GTP_FD1])
459aa660 Pablo Neira     2016-05-09  670  		return -EINVAL;
459aa660 Pablo Neira     2016-05-09  671  
459aa660 Pablo Neira     2016-05-09  672  	gtp = netdev_priv(dev);
459aa660 Pablo Neira     2016-05-09  673  
459aa660 Pablo Neira     2016-05-09  674  	fd0 = nla_get_u32(data[IFLA_GTP_FD0]);
459aa660 Pablo Neira     2016-05-09  675  	fd1 = nla_get_u32(data[IFLA_GTP_FD1]);
459aa660 Pablo Neira     2016-05-09  676  
459aa660 Pablo Neira     2016-05-09 @677  	err = gtp_encap_enable(dev, gtp, fd0, fd1, src_net);
459aa660 Pablo Neira     2016-05-09  678  	if (err < 0)
459aa660 Pablo Neira     2016-05-09  679  		goto out_err;
459aa660 Pablo Neira     2016-05-09  680  
459aa660 Pablo Neira     2016-05-09  681  	if (!data[IFLA_GTP_PDP_HASHSIZE])
459aa660 Pablo Neira     2016-05-09  682  		hashsize = 1024;
459aa660 Pablo Neira     2016-05-09  683  	else
459aa660 Pablo Neira     2016-05-09  684  		hashsize = nla_get_u32(data[IFLA_GTP_PDP_HASHSIZE]);
459aa660 Pablo Neira     2016-05-09  685  
459aa660 Pablo Neira     2016-05-09  686  	err = gtp_hashtable_new(gtp, hashsize);
459aa660 Pablo Neira     2016-05-09  687  	if (err < 0)
459aa660 Pablo Neira     2016-05-09  688  		goto out_encap;
459aa660 Pablo Neira     2016-05-09  689  
459aa660 Pablo Neira     2016-05-09  690  	err = register_netdevice(dev);
459aa660 Pablo Neira     2016-05-09  691  	if (err < 0) {
459aa660 Pablo Neira     2016-05-09  692  		netdev_dbg(dev, "failed to register new netdev %d\n", err);
459aa660 Pablo Neira     2016-05-09  693  		goto out_hashtable;
459aa660 Pablo Neira     2016-05-09  694  	}
459aa660 Pablo Neira     2016-05-09  695  
459aa660 Pablo Neira     2016-05-09  696  	gn = net_generic(dev_net(dev), gtp_net_id);
459aa660 Pablo Neira     2016-05-09  697  	list_add_rcu(&gtp->list, &gn->gtp_dev_list);
459aa660 Pablo Neira     2016-05-09  698  
459aa660 Pablo Neira     2016-05-09  699  	netdev_dbg(dev, "registered new GTP interface\n");
459aa660 Pablo Neira     2016-05-09  700  
459aa660 Pablo Neira     2016-05-09  701  	return 0;
459aa660 Pablo Neira     2016-05-09  702  
459aa660 Pablo Neira     2016-05-09  703  out_hashtable:
459aa660 Pablo Neira     2016-05-09  704  	gtp_hashtable_free(gtp);
459aa660 Pablo Neira     2016-05-09  705  out_encap:
459aa660 Pablo Neira     2016-05-09  706  	gtp_encap_disable(gtp);
459aa660 Pablo Neira     2016-05-09  707  out_err:
459aa660 Pablo Neira     2016-05-09  708  	return err;
459aa660 Pablo Neira     2016-05-09  709  }
459aa660 Pablo Neira     2016-05-09  710  
459aa660 Pablo Neira     2016-05-09  711  static void gtp_dellink(struct net_device *dev, struct list_head *head)
459aa660 Pablo Neira     2016-05-09  712  {
459aa660 Pablo Neira     2016-05-09  713  	struct gtp_dev *gtp = netdev_priv(dev);
459aa660 Pablo Neira     2016-05-09  714  
459aa660 Pablo Neira     2016-05-09  715  	gtp_encap_disable(gtp);
459aa660 Pablo Neira     2016-05-09  716  	gtp_hashtable_free(gtp);
459aa660 Pablo Neira     2016-05-09  717  	list_del_rcu(&gtp->list);
459aa660 Pablo Neira     2016-05-09  718  	unregister_netdevice_queue(dev, head);
459aa660 Pablo Neira     2016-05-09  719  }
459aa660 Pablo Neira     2016-05-09  720  
459aa660 Pablo Neira     2016-05-09  721  static const struct nla_policy gtp_policy[IFLA_GTP_MAX + 1] = {
459aa660 Pablo Neira     2016-05-09  722  	[IFLA_GTP_FD0]			= { .type = NLA_U32 },
459aa660 Pablo Neira     2016-05-09  723  	[IFLA_GTP_FD1]			= { .type = NLA_U32 },
459aa660 Pablo Neira     2016-05-09  724  	[IFLA_GTP_PDP_HASHSIZE]		= { .type = NLA_U32 },
459aa660 Pablo Neira     2016-05-09  725  };
459aa660 Pablo Neira     2016-05-09  726  
459aa660 Pablo Neira     2016-05-09  727  static int gtp_validate(struct nlattr *tb[], struct nlattr *data[])
459aa660 Pablo Neira     2016-05-09  728  {
459aa660 Pablo Neira     2016-05-09  729  	if (!data)
459aa660 Pablo Neira     2016-05-09  730  		return -EINVAL;
459aa660 Pablo Neira     2016-05-09  731  
459aa660 Pablo Neira     2016-05-09  732  	return 0;
459aa660 Pablo Neira     2016-05-09  733  }
459aa660 Pablo Neira     2016-05-09  734  
459aa660 Pablo Neira     2016-05-09  735  static size_t gtp_get_size(const struct net_device *dev)
459aa660 Pablo Neira     2016-05-09  736  {
459aa660 Pablo Neira     2016-05-09  737  	return nla_total_size(sizeof(__u32));	/* IFLA_GTP_PDP_HASHSIZE */
459aa660 Pablo Neira     2016-05-09  738  }
459aa660 Pablo Neira     2016-05-09  739  
459aa660 Pablo Neira     2016-05-09  740  static int gtp_fill_info(struct sk_buff *skb, const struct net_device *dev)
459aa660 Pablo Neira     2016-05-09  741  {
459aa660 Pablo Neira     2016-05-09  742  	struct gtp_dev *gtp = netdev_priv(dev);
459aa660 Pablo Neira     2016-05-09  743  
459aa660 Pablo Neira     2016-05-09  744  	if (nla_put_u32(skb, IFLA_GTP_PDP_HASHSIZE, gtp->hash_size))
459aa660 Pablo Neira     2016-05-09  745  		goto nla_put_failure;
459aa660 Pablo Neira     2016-05-09  746  
459aa660 Pablo Neira     2016-05-09  747  	return 0;
459aa660 Pablo Neira     2016-05-09  748  
459aa660 Pablo Neira     2016-05-09  749  nla_put_failure:
459aa660 Pablo Neira     2016-05-09  750  	return -EMSGSIZE;
459aa660 Pablo Neira     2016-05-09  751  }
459aa660 Pablo Neira     2016-05-09  752  
459aa660 Pablo Neira     2016-05-09  753  static struct rtnl_link_ops gtp_link_ops __read_mostly = {
459aa660 Pablo Neira     2016-05-09  754  	.kind		= "gtp",
459aa660 Pablo Neira     2016-05-09  755  	.maxtype	= IFLA_GTP_MAX,
459aa660 Pablo Neira     2016-05-09  756  	.policy		= gtp_policy,
459aa660 Pablo Neira     2016-05-09  757  	.priv_size	= sizeof(struct gtp_dev),
459aa660 Pablo Neira     2016-05-09  758  	.setup		= gtp_link_setup,
459aa660 Pablo Neira     2016-05-09  759  	.validate	= gtp_validate,
459aa660 Pablo Neira     2016-05-09  760  	.newlink	= gtp_newlink,
459aa660 Pablo Neira     2016-05-09  761  	.dellink	= gtp_dellink,
459aa660 Pablo Neira     2016-05-09  762  	.get_size	= gtp_get_size,
459aa660 Pablo Neira     2016-05-09  763  	.fill_info	= gtp_fill_info,
459aa660 Pablo Neira     2016-05-09  764  };
459aa660 Pablo Neira     2016-05-09  765  
459aa660 Pablo Neira     2016-05-09  766  static struct net *gtp_genl_get_net(struct net *src_net, struct nlattr *tb[])
459aa660 Pablo Neira     2016-05-09  767  {
459aa660 Pablo Neira     2016-05-09  768  	struct net *net;
459aa660 Pablo Neira     2016-05-09  769  
459aa660 Pablo Neira     2016-05-09  770  	/* Examine the link attributes and figure out which network namespace
459aa660 Pablo Neira     2016-05-09  771  	 * we are talking about.
459aa660 Pablo Neira     2016-05-09  772  	 */
459aa660 Pablo Neira     2016-05-09  773  	if (tb[GTPA_NET_NS_FD])
459aa660 Pablo Neira     2016-05-09  774  		net = get_net_ns_by_fd(nla_get_u32(tb[GTPA_NET_NS_FD]));
459aa660 Pablo Neira     2016-05-09  775  	else
459aa660 Pablo Neira     2016-05-09  776  		net = get_net(src_net);
459aa660 Pablo Neira     2016-05-09  777  
459aa660 Pablo Neira     2016-05-09  778  	return net;
459aa660 Pablo Neira     2016-05-09  779  }
459aa660 Pablo Neira     2016-05-09  780  
459aa660 Pablo Neira     2016-05-09  781  static int gtp_hashtable_new(struct gtp_dev *gtp, int hsize)
459aa660 Pablo Neira     2016-05-09  782  {
459aa660 Pablo Neira     2016-05-09  783  	int i;
459aa660 Pablo Neira     2016-05-09  784  
459aa660 Pablo Neira     2016-05-09  785  	gtp->addr_hash = kmalloc(sizeof(struct hlist_head) * hsize, GFP_KERNEL);
459aa660 Pablo Neira     2016-05-09  786  	if (gtp->addr_hash == NULL)
459aa660 Pablo Neira     2016-05-09  787  		return -ENOMEM;
459aa660 Pablo Neira     2016-05-09  788  
459aa660 Pablo Neira     2016-05-09  789  	gtp->tid_hash = kmalloc(sizeof(struct hlist_head) * hsize, GFP_KERNEL);
459aa660 Pablo Neira     2016-05-09  790  	if (gtp->tid_hash == NULL)
459aa660 Pablo Neira     2016-05-09  791  		goto err1;
459aa660 Pablo Neira     2016-05-09  792  
459aa660 Pablo Neira     2016-05-09  793  	gtp->hash_size = hsize;
459aa660 Pablo Neira     2016-05-09  794  
459aa660 Pablo Neira     2016-05-09  795  	for (i = 0; i < hsize; i++) {
459aa660 Pablo Neira     2016-05-09  796  		INIT_HLIST_HEAD(&gtp->addr_hash[i]);
459aa660 Pablo Neira     2016-05-09  797  		INIT_HLIST_HEAD(&gtp->tid_hash[i]);
459aa660 Pablo Neira     2016-05-09  798  	}
459aa660 Pablo Neira     2016-05-09  799  	return 0;
459aa660 Pablo Neira     2016-05-09  800  err1:
459aa660 Pablo Neira     2016-05-09  801  	kfree(gtp->addr_hash);
459aa660 Pablo Neira     2016-05-09  802  	return -ENOMEM;
459aa660 Pablo Neira     2016-05-09  803  }
459aa660 Pablo Neira     2016-05-09  804  
459aa660 Pablo Neira     2016-05-09  805  static void gtp_hashtable_free(struct gtp_dev *gtp)
459aa660 Pablo Neira     2016-05-09  806  {
459aa660 Pablo Neira     2016-05-09  807  	struct pdp_ctx *pctx;
459aa660 Pablo Neira     2016-05-09  808  	int i;
459aa660 Pablo Neira     2016-05-09  809  
459aa660 Pablo Neira     2016-05-09  810  	for (i = 0; i < gtp->hash_size; i++) {
459aa660 Pablo Neira     2016-05-09  811  		hlist_for_each_entry_rcu(pctx, &gtp->tid_hash[i], hlist_tid) {
459aa660 Pablo Neira     2016-05-09  812  			hlist_del_rcu(&pctx->hlist_tid);
459aa660 Pablo Neira     2016-05-09  813  			hlist_del_rcu(&pctx->hlist_addr);
459aa660 Pablo Neira     2016-05-09  814  			kfree_rcu(pctx, rcu_head);
459aa660 Pablo Neira     2016-05-09  815  		}
459aa660 Pablo Neira     2016-05-09  816  	}
459aa660 Pablo Neira     2016-05-09  817  	synchronize_rcu();
459aa660 Pablo Neira     2016-05-09  818  	kfree(gtp->addr_hash);
459aa660 Pablo Neira     2016-05-09  819  	kfree(gtp->tid_hash);
459aa660 Pablo Neira     2016-05-09  820  }
459aa660 Pablo Neira     2016-05-09  821  
459aa660 Pablo Neira     2016-05-09 @822  static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
459aa660 Pablo Neira     2016-05-09  823  			    int fd_gtp0, int fd_gtp1, struct net *src_net)
459aa660 Pablo Neira     2016-05-09  824  {
459aa660 Pablo Neira     2016-05-09  825  	struct udp_tunnel_sock_cfg tuncfg = {NULL};

:::::: The code at line 677 was first introduced by commit
:::::: 459aa660eb1d8ce67080da1983bb81d716aa5a69 gtp: add initial driver for datapath of GPRS Tunneling Protocol (GTP-U)

:::::: TO: Pablo Neira <pablo at netfilter.org>
:::::: CC: David S. Miller <davem at davemloft.net>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 57922 bytes
Desc: not available
URL: <http://lists.osmocom.org/pipermail/openbsc/attachments/20170125/280a51d3/attachment.bin>


More information about the OpenBSC mailing list