mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
phonet: Pass ifindex to fill_addr().
[ Upstream commit08a9572be3] We will convert addr_doit() and getaddr_dumpit() to RCU, both of which call fill_addr(). The former will call phonet_address_notify() outside of RCU due to GFP_KERNEL, so dev will not be available in fill_addr(). Let's pass ifindex directly to fill_addr(). Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com> Stable-dep-of:71de0177b2("net: phonet: free phonet_device after RCU grace period") Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
6707d7e0b7
commit
cf30797ea8
@@ -19,7 +19,7 @@
|
||||
|
||||
/* Device address handling */
|
||||
|
||||
static int fill_addr(struct sk_buff *skb, struct net_device *dev, u8 addr,
|
||||
static int fill_addr(struct sk_buff *skb, u32 ifindex, u8 addr,
|
||||
u32 portid, u32 seq, int event);
|
||||
|
||||
void phonet_address_notify(int event, struct net_device *dev, u8 addr)
|
||||
@@ -31,7 +31,8 @@ void phonet_address_notify(int event, struct net_device *dev, u8 addr)
|
||||
nla_total_size(1), GFP_KERNEL);
|
||||
if (skb == NULL)
|
||||
goto errout;
|
||||
err = fill_addr(skb, dev, addr, 0, 0, event);
|
||||
|
||||
err = fill_addr(skb, dev->ifindex, addr, 0, 0, event);
|
||||
if (err < 0) {
|
||||
WARN_ON(err == -EMSGSIZE);
|
||||
kfree_skb(skb);
|
||||
@@ -92,8 +93,8 @@ static int addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
return err;
|
||||
}
|
||||
|
||||
static int fill_addr(struct sk_buff *skb, struct net_device *dev, u8 addr,
|
||||
u32 portid, u32 seq, int event)
|
||||
static int fill_addr(struct sk_buff *skb, u32 ifindex, u8 addr,
|
||||
u32 portid, u32 seq, int event)
|
||||
{
|
||||
struct ifaddrmsg *ifm;
|
||||
struct nlmsghdr *nlh;
|
||||
@@ -107,7 +108,7 @@ static int fill_addr(struct sk_buff *skb, struct net_device *dev, u8 addr,
|
||||
ifm->ifa_prefixlen = 0;
|
||||
ifm->ifa_flags = IFA_F_PERMANENT;
|
||||
ifm->ifa_scope = RT_SCOPE_LINK;
|
||||
ifm->ifa_index = dev->ifindex;
|
||||
ifm->ifa_index = ifindex;
|
||||
if (nla_put_u8(skb, IFA_LOCAL, addr))
|
||||
goto nla_put_failure;
|
||||
nlmsg_end(skb, nlh);
|
||||
@@ -140,7 +141,7 @@ static int getaddr_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
|
||||
if (addr_idx++ < addr_start_idx)
|
||||
continue;
|
||||
|
||||
if (fill_addr(skb, pnd->netdev, addr << 2,
|
||||
if (fill_addr(skb, pnd->netdev->ifindex, addr << 2,
|
||||
NETLINK_CB(cb->skb).portid,
|
||||
cb->nlh->nlmsg_seq, RTM_NEWADDR) < 0)
|
||||
goto out;
|
||||
|
||||
Reference in New Issue
Block a user