Skip to contentSkip to conversation

6lowpan: introduce 6lowpan-nd

DISCUSSION Dan Carpenter 1 participant 1 message Jun 21, 2016 IEEE 802.15.4

lore
Share & tools
lore
#0 lore raw

Hello Alexander Aring,

The patch bbe5f5cefe28: "6lowpan: introduce 6lowpan-nd" from Jun 15, 2016, leads to the following static checker warning:

	net/6lowpan/ndisc.c:139 lowpan_ndisc_opt_addr_space()
	error: double unlock 'read_lock:&neigh->lock'

net/6lowpan/ndisc.c
116 static int lowpan_ndisc_opt_addr_space(const struct net_device *dev,
117 u8 icmp6_type, struct neighbour *neigh,
118 u8 *ha_buf, u8 **ha)
119 {

   120          struct lowpan_802154_neigh *n;
   121          struct wpan_dev *wpan_dev;
   122          int addr_space = 0;
   123  
   124          if (!lowpan_is_ll(dev, LOWPAN_LLTYPE_IEEE802154))
   125                  return 0;
   126  
   127          switch (icmp6_type) {
   128          case NDISC_REDIRECT:
   129                  n = lowpan_802154_neigh(neighbour_priv(neigh));
   130  
   131                  read_lock_bh(&neigh->lock);
   132                  if (lowpan_802154_is_valid_src_short_addr(n->short_addr)) {
   133                          memcpy(ha_buf, &n->short_addr,
   134                                 IEEE802154_SHORT_ADDR_LEN);
   135                          read_unlock_bh(&neigh->lock);
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Unlock.

136 addr_space += __ndisc_opt_addr_space(IEEE802154_SHORT_ADDR_LEN, 0);
137 *ha = ha_buf;
138 }

   139                  read_unlock_bh(&neigh->lock);
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Second unlock.

140 break;

   141          case NDISC_NEIGHBOUR_ADVERTISEMENT:
   142          case NDISC_NEIGHBOUR_SOLICITATION:
   143          case NDISC_ROUTER_SOLICITATION:

regards,
dan carpenter