mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 10:04:04 +02:00
rtnetlink: make rtnl_fill_link_ifmap() RCU ready
Use READ_ONCE() to read the following device fields: dev->mem_start dev->mem_end dev->base_addr dev->irq dev->dma dev->if_port Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Donald Hunter <donald.hunter@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4ce5dc9316
commit
74808e72e0
|
|
@ -1455,17 +1455,18 @@ static noinline_for_stack int rtnl_fill_vf(struct sk_buff *skb,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int rtnl_fill_link_ifmap(struct sk_buff *skb, struct net_device *dev)
|
||||
static int rtnl_fill_link_ifmap(struct sk_buff *skb,
|
||||
const struct net_device *dev)
|
||||
{
|
||||
struct rtnl_link_ifmap map;
|
||||
|
||||
memset(&map, 0, sizeof(map));
|
||||
map.mem_start = dev->mem_start;
|
||||
map.mem_end = dev->mem_end;
|
||||
map.base_addr = dev->base_addr;
|
||||
map.irq = dev->irq;
|
||||
map.dma = dev->dma;
|
||||
map.port = dev->if_port;
|
||||
map.mem_start = READ_ONCE(dev->mem_start);
|
||||
map.mem_end = READ_ONCE(dev->mem_end);
|
||||
map.base_addr = READ_ONCE(dev->base_addr);
|
||||
map.irq = READ_ONCE(dev->irq);
|
||||
map.dma = READ_ONCE(dev->dma);
|
||||
map.port = READ_ONCE(dev->if_port);
|
||||
|
||||
if (nla_put_64bit(skb, IFLA_MAP, sizeof(map), &map, IFLA_PAD))
|
||||
return -EMSGSIZE;
|
||||
|
|
@ -1875,9 +1876,6 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb,
|
|||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
if (rtnl_fill_link_ifmap(skb, dev))
|
||||
goto nla_put_failure;
|
||||
|
||||
if (dev->addr_len) {
|
||||
if (nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr) ||
|
||||
nla_put(skb, IFLA_BROADCAST, dev->addr_len, dev->broadcast))
|
||||
|
|
@ -1927,6 +1925,9 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb,
|
|||
rcu_read_lock();
|
||||
if (rtnl_fill_link_af(skb, dev, ext_filter_mask))
|
||||
goto nla_put_failure_rcu;
|
||||
if (rtnl_fill_link_ifmap(skb, dev))
|
||||
goto nla_put_failure_rcu;
|
||||
|
||||
rcu_read_unlock();
|
||||
|
||||
if (rtnl_fill_prop_list(skb, dev))
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user