mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
rtnetlink: make sure to refresh master_dev/m_ops in __rtnl_newlink()
commitc6f6f2444bupstream. While looking at one unrelated syzbot bug, I found the replay logic in __rtnl_newlink() to potentially trigger use-after-free. It is better to clear master_dev and m_ops inside the loop, in case we have to replay it. Fixes:ba7d49b1f0("rtnetlink: provide api for getting and setting slave info") Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Jiri Pirko <jiri@nvidia.com> Link: https://lore.kernel.org/r/20220201012106.216495-1-eric.dumazet@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
34aeb4da20
commit
a01e60a1ec
@@ -2942,9 +2942,9 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
{
|
||||
struct net *net = sock_net(skb->sk);
|
||||
const struct rtnl_link_ops *ops;
|
||||
const struct rtnl_link_ops *m_ops = NULL;
|
||||
const struct rtnl_link_ops *m_ops;
|
||||
struct net_device *dev;
|
||||
struct net_device *master_dev = NULL;
|
||||
struct net_device *master_dev;
|
||||
struct ifinfomsg *ifm;
|
||||
char kind[MODULE_NAME_LEN];
|
||||
char ifname[IFNAMSIZ];
|
||||
@@ -2979,6 +2979,8 @@ replay:
|
||||
dev = NULL;
|
||||
}
|
||||
|
||||
master_dev = NULL;
|
||||
m_ops = NULL;
|
||||
if (dev) {
|
||||
master_dev = netdev_master_upper_dev_get(dev);
|
||||
if (master_dev)
|
||||
|
||||
Reference in New Issue
Block a user