Skip to content

Commit

Permalink
i40iw: Receive netdev events post INET_NOTIFIER state
Browse files Browse the repository at this point in the history
Netdev notification events are de-registered only when all
client iwdev instances are removed. If a single client is closed
and re-opened, netdev events could arrive even before the Control
Queue-Pair (CQP) is created, causing a NULL pointer dereference crash
in i40iw_get_cqp_request. Fix this by allowing netdev event
notification only after we have reached the INET_NOTIFIER state with
respect to device initialization.

Reported-by: Stefan Assmann <[email protected]>
Signed-off-by: Shiraz Saleem <[email protected]>
Reviewed-by: Yuval Shaia <[email protected]>
Signed-off-by: Doug Ledford <[email protected]>
  • Loading branch information
shirazsaleem authored and dledford committed Mar 24, 2017
1 parent 97da385 commit 871a862
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions drivers/infiniband/hw/i40iw/i40iw_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,9 @@ int i40iw_inetaddr_event(struct notifier_block *notifier,
return NOTIFY_DONE;

iwdev = &hdl->device;
if (iwdev->init_state < INET_NOTIFIER)
return NOTIFY_DONE;

netdev = iwdev->ldev->netdev;
upper_dev = netdev_master_upper_dev_get(netdev);
if (netdev != event_netdev)
Expand Down Expand Up @@ -214,6 +217,9 @@ int i40iw_inet6addr_event(struct notifier_block *notifier,
return NOTIFY_DONE;

iwdev = &hdl->device;
if (iwdev->init_state < INET_NOTIFIER)
return NOTIFY_DONE;

netdev = iwdev->ldev->netdev;
if (netdev != event_netdev)
return NOTIFY_DONE;
Expand Down Expand Up @@ -260,6 +266,8 @@ int i40iw_net_event(struct notifier_block *notifier, unsigned long event, void *
if (!iwhdl)
return NOTIFY_DONE;
iwdev = &iwhdl->device;
if (iwdev->init_state < INET_NOTIFIER)
return NOTIFY_DONE;
p = (__be32 *)neigh->primary_key;
i40iw_copy_ip_ntohl(local_ipaddr, p);
if (neigh->nud_state & NUD_VALID) {
Expand Down

0 comments on commit 871a862

Please sign in to comment.