lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <201801302359.31hhB84S%fengguang.wu@intel.com>
Date:   Tue, 30 Jan 2018 23:49:16 +0800
From:   kbuild test robot <lkp@...el.com>
To:     Christian Brauner <christian.brauner@...ntu.com>
Cc:     kbuild-all@...org, netdev@...r.kernel.org, ebiederm@...ssion.com,
        dsahern@...il.com, fw@...len.de, daniel@...earbox.net,
        lucien.xin@...il.com, mschiffer@...verse-factory.net,
        jakub.kicinski@...ronome.com, vyasevich@...il.com,
        linux-kernel@...r.kernel.org, jbenc@...hat.com,
        w.bumiller@...xmox.com, nicolas.dichtel@...nd.com,
        Christian Brauner <christian.brauner@...ntu.com>
Subject: Re: [PATCH net-next 1/1] rtnetlink: enable IFLA_IF_NETNSID for
 RTM_NEWLINK

Hi Christian,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on net-next/master]

url:    https://github.com/0day-ci/linux/commits/Christian-Brauner/rtnetlink-enable-IFLA_IF_NETNSID-for-RTM_NEWLINK/20180130-230918
config: ia64-allmodconfig (attached as .config)
compiler: ia64-linux-gcc (GCC) 7.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=ia64 

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

   net//core/rtnetlink.c: In function 'rtnl_newlink':
>> net//core/rtnetlink.c:2903:14: error: implicit declaration of function 'rtnl_link_get_net_capable'; did you mean 'rtnl_link_get_net'? [-Werror=implicit-function-declaration]
      dest_net = rtnl_link_get_net_capable(skb, net, tb, CAP_NET_ADMIN);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~
                 rtnl_link_get_net
>> net//core/rtnetlink.c:2903:12: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
      dest_net = rtnl_link_get_net_capable(skb, net, tb, CAP_NET_ADMIN);
               ^
   cc1: some warnings being treated as errors

vim +2903 net//core/rtnetlink.c

  2729	
  2730	static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh,
  2731				struct netlink_ext_ack *extack)
  2732	{
  2733		struct net *net = sock_net(skb->sk);
  2734		const struct rtnl_link_ops *ops;
  2735		const struct rtnl_link_ops *m_ops = NULL;
  2736		struct net_device *dev;
  2737		struct net_device *master_dev = NULL;
  2738		struct ifinfomsg *ifm;
  2739		char kind[MODULE_NAME_LEN];
  2740		char ifname[IFNAMSIZ];
  2741		struct nlattr *tb[IFLA_MAX+1];
  2742		struct nlattr *linkinfo[IFLA_INFO_MAX+1];
  2743		unsigned char name_assign_type = NET_NAME_USER;
  2744		int err;
  2745	
  2746	#ifdef CONFIG_MODULES
  2747	replay:
  2748	#endif
  2749		err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, extack);
  2750		if (err < 0)
  2751			return err;
  2752	
  2753		if (tb[IFLA_IF_NETNSID])
  2754			return -EOPNOTSUPP;
  2755	
  2756		if (tb[IFLA_IFNAME])
  2757			nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
  2758		else
  2759			ifname[0] = '\0';
  2760	
  2761		ifm = nlmsg_data(nlh);
  2762		if (ifm->ifi_index > 0)
  2763			dev = __dev_get_by_index(net, ifm->ifi_index);
  2764		else {
  2765			if (ifname[0])
  2766				dev = __dev_get_by_name(net, ifname);
  2767			else
  2768				dev = NULL;
  2769		}
  2770	
  2771		if (dev) {
  2772			master_dev = netdev_master_upper_dev_get(dev);
  2773			if (master_dev)
  2774				m_ops = master_dev->rtnl_link_ops;
  2775		}
  2776	
  2777		err = validate_linkmsg(dev, tb);
  2778		if (err < 0)
  2779			return err;
  2780	
  2781		if (tb[IFLA_LINKINFO]) {
  2782			err = nla_parse_nested(linkinfo, IFLA_INFO_MAX,
  2783					       tb[IFLA_LINKINFO], ifla_info_policy,
  2784					       NULL);
  2785			if (err < 0)
  2786				return err;
  2787		} else
  2788			memset(linkinfo, 0, sizeof(linkinfo));
  2789	
  2790		if (linkinfo[IFLA_INFO_KIND]) {
  2791			nla_strlcpy(kind, linkinfo[IFLA_INFO_KIND], sizeof(kind));
  2792			ops = rtnl_link_ops_get(kind);
  2793		} else {
  2794			kind[0] = '\0';
  2795			ops = NULL;
  2796		}
  2797	
  2798		if (1) {
  2799			struct nlattr *attr[ops ? ops->maxtype + 1 : 1];
  2800			struct nlattr *slave_attr[m_ops ? m_ops->slave_maxtype + 1 : 1];
  2801			struct nlattr **data = NULL;
  2802			struct nlattr **slave_data = NULL;
  2803			struct net *dest_net, *link_net = NULL;
  2804	
  2805			if (ops) {
  2806				if (ops->maxtype && linkinfo[IFLA_INFO_DATA]) {
  2807					err = nla_parse_nested(attr, ops->maxtype,
  2808							       linkinfo[IFLA_INFO_DATA],
  2809							       ops->policy, NULL);
  2810					if (err < 0)
  2811						return err;
  2812					data = attr;
  2813				}
  2814				if (ops->validate) {
  2815					err = ops->validate(tb, data, extack);
  2816					if (err < 0)
  2817						return err;
  2818				}
  2819			}
  2820	
  2821			if (m_ops) {
  2822				if (m_ops->slave_maxtype &&
  2823				    linkinfo[IFLA_INFO_SLAVE_DATA]) {
  2824					err = nla_parse_nested(slave_attr,
  2825							       m_ops->slave_maxtype,
  2826							       linkinfo[IFLA_INFO_SLAVE_DATA],
  2827							       m_ops->slave_policy,
  2828							       NULL);
  2829					if (err < 0)
  2830						return err;
  2831					slave_data = slave_attr;
  2832				}
  2833			}
  2834	
  2835			if (dev) {
  2836				int status = 0;
  2837	
  2838				if (nlh->nlmsg_flags & NLM_F_EXCL)
  2839					return -EEXIST;
  2840				if (nlh->nlmsg_flags & NLM_F_REPLACE)
  2841					return -EOPNOTSUPP;
  2842	
  2843				if (linkinfo[IFLA_INFO_DATA]) {
  2844					if (!ops || ops != dev->rtnl_link_ops ||
  2845					    !ops->changelink)
  2846						return -EOPNOTSUPP;
  2847	
  2848					err = ops->changelink(dev, tb, data, extack);
  2849					if (err < 0)
  2850						return err;
  2851					status |= DO_SETLINK_NOTIFY;
  2852				}
  2853	
  2854				if (linkinfo[IFLA_INFO_SLAVE_DATA]) {
  2855					if (!m_ops || !m_ops->slave_changelink)
  2856						return -EOPNOTSUPP;
  2857	
  2858					err = m_ops->slave_changelink(master_dev, dev,
  2859								      tb, slave_data,
  2860								      extack);
  2861					if (err < 0)
  2862						return err;
  2863					status |= DO_SETLINK_NOTIFY;
  2864				}
  2865	
  2866				return do_setlink(skb, dev, ifm, extack, tb, ifname,
  2867						  status);
  2868			}
  2869	
  2870			if (!(nlh->nlmsg_flags & NLM_F_CREATE)) {
  2871				if (ifm->ifi_index == 0 && tb[IFLA_GROUP])
  2872					return rtnl_group_changelink(skb, net,
  2873							nla_get_u32(tb[IFLA_GROUP]),
  2874							ifm, extack, tb);
  2875				return -ENODEV;
  2876			}
  2877	
  2878			if (tb[IFLA_MAP] || tb[IFLA_PROTINFO])
  2879				return -EOPNOTSUPP;
  2880	
  2881			if (!ops) {
  2882	#ifdef CONFIG_MODULES
  2883				if (kind[0]) {
  2884					__rtnl_unlock();
  2885					request_module("rtnl-link-%s", kind);
  2886					rtnl_lock();
  2887					ops = rtnl_link_ops_get(kind);
  2888					if (ops)
  2889						goto replay;
  2890				}
  2891	#endif
  2892				return -EOPNOTSUPP;
  2893			}
  2894	
  2895			if (!ops->setup)
  2896				return -EOPNOTSUPP;
  2897	
  2898			if (!ifname[0]) {
  2899				snprintf(ifname, IFNAMSIZ, "%s%%d", ops->kind);
  2900				name_assign_type = NET_NAME_ENUM;
  2901			}
  2902	
> 2903			dest_net = rtnl_link_get_net_capable(skb, net, tb, CAP_NET_ADMIN);
  2904			if (IS_ERR(dest_net))
  2905				return PTR_ERR(dest_net);
  2906	
  2907			if (tb[IFLA_LINK_NETNSID]) {
  2908				int id = nla_get_s32(tb[IFLA_LINK_NETNSID]);
  2909	
  2910				link_net = get_net_ns_by_id(dest_net, id);
  2911				if (!link_net) {
  2912					err =  -EINVAL;
  2913					goto out;
  2914				}
  2915				err = -EPERM;
  2916				if (!netlink_ns_capable(skb, link_net->user_ns, CAP_NET_ADMIN))
  2917					goto out;
  2918			}
  2919	
  2920			dev = rtnl_create_link(link_net ? : dest_net, ifname,
  2921					       name_assign_type, ops, tb);
  2922			if (IS_ERR(dev)) {
  2923				err = PTR_ERR(dev);
  2924				goto out;
  2925			}
  2926	
  2927			dev->ifindex = ifm->ifi_index;
  2928	
  2929			if (ops->newlink) {
  2930				err = ops->newlink(link_net ? : net, dev, tb, data,
  2931						   extack);
  2932				/* Drivers should call free_netdev() in ->destructor
  2933				 * and unregister it on failure after registration
  2934				 * so that device could be finally freed in rtnl_unlock.
  2935				 */
  2936				if (err < 0) {
  2937					/* If device is not registered at all, free it now */
  2938					if (dev->reg_state == NETREG_UNINITIALIZED)
  2939						free_netdev(dev);
  2940					goto out;
  2941				}
  2942			} else {
  2943				err = register_netdevice(dev);
  2944				if (err < 0) {
  2945					free_netdev(dev);
  2946					goto out;
  2947				}
  2948			}
  2949			err = rtnl_configure_link(dev, ifm);
  2950			if (err < 0)
  2951				goto out_unregister;
  2952			if (link_net) {
  2953				err = dev_change_net_namespace(dev, dest_net, ifname);
  2954				if (err < 0)
  2955					goto out_unregister;
  2956			}
  2957			if (tb[IFLA_MASTER]) {
  2958				err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]),
  2959						    extack);
  2960				if (err)
  2961					goto out_unregister;
  2962			}
  2963	out:
  2964			if (link_net)
  2965				put_net(link_net);
  2966			put_net(dest_net);
  2967			return err;
  2968	out_unregister:
  2969			if (ops->newlink) {
  2970				LIST_HEAD(list_kill);
  2971	
  2972				ops->dellink(dev, &list_kill);
  2973				unregister_netdevice_many(&list_kill);
  2974			} else {
  2975				unregister_netdevice(dev);
  2976			}
  2977			goto out;
  2978		}
  2979	}
  2980	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Download attachment ".config.gz" of type "application/gzip" (49818 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ