diff options
author | Bart Van Assche <bart.vanassche@wdc.com> | 2017-10-11 10:49:02 -0700 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2017-10-14 20:47:06 -0400 |
commit | b965b51c55c5a21d65ca36592c6048ea60c3ace9 (patch) | |
tree | cf809d38461907347cce99f54a03b0df0d1e53d4 | |
parent | d61d6de0744ffc294cb50a3c1952ef383676d440 (diff) | |
download | talos-obmc-linux-b965b51c55c5a21d65ca36592c6048ea60c3ace9.tar.gz talos-obmc-linux-b965b51c55c5a21d65ca36592c6048ea60c3ace9.zip |
RDMA/i40iw: Fix a race condition
Use the proper primitives to dereference the RCU pointer
upper_dev->ip_ptr. Compile-tested only.
Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
Reviewed-by: Shiraz Saleem <shiraz.saleem@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
-rw-r--r-- | drivers/infiniband/hw/i40iw/i40iw_utils.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/infiniband/hw/i40iw/i40iw_utils.c b/drivers/infiniband/hw/i40iw/i40iw_utils.c index e52dbbb4165e..7304189b62ef 100644 --- a/drivers/infiniband/hw/i40iw/i40iw_utils.c +++ b/drivers/infiniband/hw/i40iw/i40iw_utils.c @@ -168,11 +168,16 @@ int i40iw_inetaddr_event(struct notifier_block *notifier, if (netdev != event_netdev) return NOTIFY_DONE; - if (upper_dev) - local_ipaddr = ntohl( - ((struct in_device *)upper_dev->ip_ptr)->ifa_list->ifa_address); - else + if (upper_dev) { + struct in_device *in; + + rcu_read_lock(); + in = __in_dev_get_rcu(upper_dev); + local_ipaddr = ntohl(in->ifa_list->ifa_address); + rcu_read_unlock(); + } else { local_ipaddr = ntohl(ifa->ifa_address); + } switch (event) { case NETDEV_DOWN: action = I40IW_ARP_DELETE; |