Hi Dave,
Drivers which are calling dst_neigh_lookup() are also using
rcu_read_lock() before accessing the neigh pointer (and asking it's ll
address data and its validity state).
You can find the same behavior in:
drivers/infiniband/core/addr.c, drivers/infiniband/hw/i40iw/i40iw_cm.c,
drivers/infiniband/hw/nes/nes_cm.c, etc.
(the above locations are just an example).
While the documentation in neighbour.c says:
"Neighbour entries are protected:
- with reference count.
- with rwlock neigh->lock
Reference count prevents destruction.
neigh->lock mainly serializes ll address data and its validity state."
So what is the right way to protect the neigh entry parameters? I
couldn't find why rcu_read_lock() is helping here (dst_neigh_lookup
already takes a reference on the neigh).
Thank you,
Hadar