Skip to content

Commit

Permalink
netpoll: fix smatch warnings in netpoll core code
Browse files Browse the repository at this point in the history
Dan Carpenter contacted me with some notes regarding some smatch warnings in the
netpoll code, some of which I introduced with my recent netpoll locking fixes,
some which were there prior.   Specifically they were:

net-next/net/core/netpoll.c:243 netpoll_poll_dev() warn: inconsistent
  returns mutex:&ni->dev_lock: locked (213,217) unlocked (210,243)
net-next/net/core/netpoll.c:706 netpoll_neigh_reply() warn: potential
  pointer math issue ('skb_transport_header(send_skb)' is a 128 bit pointer)

This patch corrects the locking imbalance (the first error), and adds some
parenthesis to correct the second error.  Tested by myself. Applies to net-next

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
CC: Dan Carpenter <dan.carpenter@oracle.com>
CC: "David S. Miller" <davem@davemloft.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Neil Horman authored and David S. Miller committed Feb 13, 2013
1 parent 99d5851 commit 959d5fd
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions net/core/netpoll.c
Original file line number Diff line number Diff line change
Expand Up @@ -209,12 +209,16 @@ static void netpoll_poll_dev(struct net_device *dev)
if (!mutex_trylock(&ni->dev_lock))
return;

if (!dev || !netif_running(dev))
if (!netif_running(dev)) {
mutex_unlock(&ni->dev_lock);
return;
}

ops = dev->netdev_ops;
if (!ops->ndo_poll_controller)
if (!ops->ndo_poll_controller) {
mutex_unlock(&ni->dev_lock);
return;
}

/* Process pending work on NIC */
ops->ndo_poll_controller(dev);
Expand Down Expand Up @@ -703,7 +707,7 @@ static void netpoll_neigh_reply(struct sk_buff *skb, struct netpoll_info *npinfo
icmp6h->icmp6_type = NDISC_NEIGHBOUR_ADVERTISEMENT;
icmp6h->icmp6_router = 0;
icmp6h->icmp6_solicited = 1;
target = (struct in6_addr *)skb_transport_header(send_skb) + sizeof(struct icmp6hdr);
target = (struct in6_addr *)(skb_transport_header(send_skb) + sizeof(struct icmp6hdr));
*target = msg->target;
icmp6h->icmp6_cksum = csum_ipv6_magic(saddr, daddr, size,
IPPROTO_ICMPV6,
Expand Down

0 comments on commit 959d5fd

Please sign in to comment.