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>
This commit is contained in:
parent
d61d6de074
commit
b965b51c55
@ -168,11 +168,16 @@ int i40iw_inetaddr_event(struct notifier_block *notifier,
|
|||||||
if (netdev != event_netdev)
|
if (netdev != event_netdev)
|
||||||
return NOTIFY_DONE;
|
return NOTIFY_DONE;
|
||||||
|
|
||||||
if (upper_dev)
|
if (upper_dev) {
|
||||||
local_ipaddr = ntohl(
|
struct in_device *in;
|
||||||
((struct in_device *)upper_dev->ip_ptr)->ifa_list->ifa_address);
|
|
||||||
else
|
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);
|
local_ipaddr = ntohl(ifa->ifa_address);
|
||||||
|
}
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case NETDEV_DOWN:
|
case NETDEV_DOWN:
|
||||||
action = I40IW_ARP_DELETE;
|
action = I40IW_ARP_DELETE;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user