提交 1fc19aff 编写于 作者: E Eric Dumazet 提交者: David S. Miller

net: fix two lockdep splats

Commit e67f88dd (net: dont hold rtnl mutex during netlink dump
callbacks) switched rtnl protection to RCU, but we forgot to adjust two
rcu_dereference() lockdep annotations :

inet_get_link_af_size() or inet_fill_link_af() might be called with
rcu_read_lock or rtnl held, so use rcu_dereference_rtnl()
instead of rtnl_dereference()
Reported-by: NValdis Kletnieks <Valdis.Kletnieks@vt.edu>
Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 8f01cb08
...@@ -1369,7 +1369,7 @@ static void rtmsg_ifa(int event, struct in_ifaddr *ifa, struct nlmsghdr *nlh, ...@@ -1369,7 +1369,7 @@ static void rtmsg_ifa(int event, struct in_ifaddr *ifa, struct nlmsghdr *nlh,
static size_t inet_get_link_af_size(const struct net_device *dev) static size_t inet_get_link_af_size(const struct net_device *dev)
{ {
struct in_device *in_dev = __in_dev_get_rtnl(dev); struct in_device *in_dev = rcu_dereference_rtnl(dev->ip_ptr);
if (!in_dev) if (!in_dev)
return 0; return 0;
...@@ -1379,7 +1379,7 @@ static size_t inet_get_link_af_size(const struct net_device *dev) ...@@ -1379,7 +1379,7 @@ static size_t inet_get_link_af_size(const struct net_device *dev)
static int inet_fill_link_af(struct sk_buff *skb, const struct net_device *dev) static int inet_fill_link_af(struct sk_buff *skb, const struct net_device *dev)
{ {
struct in_device *in_dev = __in_dev_get_rtnl(dev); struct in_device *in_dev = rcu_dereference_rtnl(dev->ip_ptr);
struct nlattr *nla; struct nlattr *nla;
int i; int i;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册