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]
Date:   Thu, 1 Jun 2017 00:30:37 +0800
From:   kbuild test robot <lkp@...el.com>
To:     Sowmini Varadhan <sowmini.varadhan@...cle.com>
Cc:     kbuild-all@...org, netdev@...r.kernel.org,
        sowmini.varadhan@...cle.com, davem@...emloft.net,
        stephen@...workplumber.org
Subject: Re: [PATCH net-next] neigh: Really delete an arp/neigh entry on "ip
 neigh delete" or "arp -d"

Hi Sowmini,

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

url:    https://github.com/0day-ci/linux/commits/Sowmini-Varadhan/neigh-Really-delete-an-arp-neigh-entry-on-ip-neigh-delete-or-arp-d/20170531-235737
config: i386-randconfig-a0-05311518 (attached as .config)
compiler: gcc-5 (Debian 5.4.1-2) 5.4.1 20160904
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

   In file included from include/linux/srcu.h:33:0,
                    from include/linux/notifier.h:15,
                    from include/linux/memory_hotplug.h:6,
                    from include/linux/mmzone.h:757,
                    from include/linux/gfp.h:5,
                    from include/linux/slab.h:14,
                    from net/core/neighbour.c:20:
   net/core/neighbour.c: In function 'neigh_del':
>> net/core/neighbour.c:130:25: error: 'tbl' undeclared (first use in this function)
           lockdep_is_held(&tbl->lock)));
                            ^
   include/linux/rcupdate.h:637:36: note: in definition of macro 'rcu_assign_pointer'
     uintptr_t _r_a_p__v = (uintptr_t)(v);          \
                                       ^
   include/linux/rcupdate.h:587:2: note: in expansion of macro 'RCU_LOCKDEP_WARN'
     RCU_LOCKDEP_WARN(!(c), "suspicious rcu_dereference_protected() usage"); \
     ^
   include/linux/rcupdate.h:751:2: note: in expansion of macro '__rcu_dereference_protected'
     __rcu_dereference_protected((p), (c), __rcu)
     ^
   net/core/neighbour.c:129:8: note: in expansion of macro 'rcu_dereference_protected'
           rcu_dereference_protected(n->next,
           ^
   net/core/neighbour.c:130:8: note: in expansion of macro 'lockdep_is_held'
           lockdep_is_held(&tbl->lock)));
           ^
   net/core/neighbour.c:130:25: note: each undeclared identifier is reported only once for each function it appears in
           lockdep_is_held(&tbl->lock)));
                            ^
   include/linux/rcupdate.h:637:36: note: in definition of macro 'rcu_assign_pointer'
     uintptr_t _r_a_p__v = (uintptr_t)(v);          \
                                       ^
   include/linux/rcupdate.h:587:2: note: in expansion of macro 'RCU_LOCKDEP_WARN'
     RCU_LOCKDEP_WARN(!(c), "suspicious rcu_dereference_protected() usage"); \
     ^
   include/linux/rcupdate.h:751:2: note: in expansion of macro '__rcu_dereference_protected'
     __rcu_dereference_protected((p), (c), __rcu)
     ^
   net/core/neighbour.c:129:8: note: in expansion of macro 'rcu_dereference_protected'
           rcu_dereference_protected(n->next,
           ^
   net/core/neighbour.c:130:8: note: in expansion of macro 'lockdep_is_held'
           lockdep_is_held(&tbl->lock)));
           ^

vim +/tbl +130 net/core/neighbour.c

    14	 *	Vitaly E. Lavrov	releasing NULL neighbor in neigh_add.
    15	 *	Harald Welte		Add neighbour cache statistics like rtstat
    16	 */
    17	
    18	#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
    19	
  > 20	#include <linux/slab.h>
    21	#include <linux/types.h>
    22	#include <linux/kernel.h>
    23	#include <linux/module.h>
    24	#include <linux/socket.h>
    25	#include <linux/netdevice.h>
    26	#include <linux/proc_fs.h>
    27	#ifdef CONFIG_SYSCTL
    28	#include <linux/sysctl.h>
    29	#endif
    30	#include <linux/times.h>
    31	#include <net/net_namespace.h>
    32	#include <net/neighbour.h>
    33	#include <net/dst.h>
    34	#include <net/sock.h>
    35	#include <net/netevent.h>
    36	#include <net/netlink.h>
    37	#include <linux/rtnetlink.h>
    38	#include <linux/random.h>
    39	#include <linux/string.h>
    40	#include <linux/log2.h>
    41	#include <linux/inetdevice.h>
    42	#include <net/addrconf.h>
    43	
    44	#define DEBUG
    45	#define NEIGH_DEBUG 1
    46	#define neigh_dbg(level, fmt, ...)		\
    47	do {						\
    48		if (level <= NEIGH_DEBUG)		\
    49			pr_debug(fmt, ##__VA_ARGS__);	\
    50	} while (0)
    51	
    52	#define PNEIGH_HASHMASK		0xF
    53	
    54	static void neigh_timer_handler(unsigned long arg);
    55	static void __neigh_notify(struct neighbour *n, int type, int flags,
    56				   u32 pid);
    57	static void neigh_update_notify(struct neighbour *neigh, u32 nlmsg_pid);
    58	static int pneigh_ifdown(struct neigh_table *tbl, struct net_device *dev);
    59	
    60	#ifdef CONFIG_PROC_FS
    61	static const struct file_operations neigh_stat_seq_fops;
    62	#endif
    63	
    64	/*
    65	   Neighbour hash table buckets are protected with rwlock tbl->lock.
    66	
    67	   - All the scans/updates to hash buckets MUST be made under this lock.
    68	   - NOTHING clever should be made under this lock: no callbacks
    69	     to protocol backends, no attempts to send something to network.
    70	     It will result in deadlocks, if backend/driver wants to use neighbour
    71	     cache.
    72	   - If the entry requires some non-trivial actions, increase
    73	     its reference count and release table lock.
    74	
    75	   Neighbour entries are protected:
    76	   - with reference count.
    77	   - with rwlock neigh->lock
    78	
    79	   Reference count prevents destruction.
    80	
    81	   neigh->lock mainly serializes ll address data and its validity state.
    82	   However, the same lock is used to protect another entry fields:
    83	    - timer
    84	    - resolution queue
    85	
    86	   Again, nothing clever shall be made under neigh->lock,
    87	   the most complicated procedure, which we allow is dev->hard_header.
    88	   It is supposed, that dev->hard_header is simplistic and does
    89	   not make callbacks to neighbour tables.
    90	 */
    91	
    92	static int neigh_blackhole(struct neighbour *neigh, struct sk_buff *skb)
    93	{
    94		kfree_skb(skb);
    95		return -ENETDOWN;
    96	}
    97	
    98	static void neigh_cleanup_and_release(struct neighbour *neigh)
    99	{
   100		if (neigh->parms->neigh_cleanup)
   101			neigh->parms->neigh_cleanup(neigh);
   102	
   103		__neigh_notify(neigh, RTM_DELNEIGH, 0, 0);
   104		call_netevent_notifiers(NETEVENT_NEIGH_UPDATE, neigh);
   105		neigh_release(neigh);
   106	}
   107	
   108	/*
   109	 * It is random distribution in the interval (1/2)*base...(3/2)*base.
   110	 * It corresponds to default IPv6 settings and is not overridable,
   111	 * because it is really reasonable choice.
   112	 */
   113	
   114	unsigned long neigh_rand_reach_time(unsigned long base)
   115	{
   116		return base ? (prandom_u32() % base) + (base >> 1) : 0;
   117	}
   118	EXPORT_SYMBOL(neigh_rand_reach_time);
   119	
   120	
   121	static bool neigh_del(struct neighbour *n, __u8 state,
   122			      struct neighbour __rcu **np)
   123	{
   124		bool retval = false;
   125	
   126		write_lock(&n->lock);
   127		if (atomic_read(&n->refcnt) == 1 && !(n->nud_state & state)) {
   128			rcu_assign_pointer(*np,
   129					   rcu_dereference_protected(n->next,
 > 130					   lockdep_is_held(&tbl->lock)));
   131			n->dead = 1;
   132			retval = true;
   133		}

---
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" (22558 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ