• Ziyang Xuan's avatar
    macsec: fix UAF bug for real_dev · 196a888c
    Ziyang Xuan authored
    Create a new macsec device but not get reference to real_dev. That can
    not ensure that real_dev is freed after macsec. That will trigger the
    UAF bug for real_dev as following:
    
    ==================================================================
    BUG: KASAN: use-after-free in macsec_get_iflink+0x5f/0x70 drivers/net/macsec.c:3662
    Call Trace:
     ...
     macsec_get_iflink+0x5f/0x70 drivers/net/macsec.c:3662
     dev_get_iflink+0x73/0xe0 net/core/dev.c:637
     default_operstate net/core/link_watch.c:42 [inline]
     rfc2863_policy+0x233/0x2d0 net/core/link_watch.c:54
     linkwatch_do_dev+0x2a/0x150 net/core/link_watch.c:161
    
    Allocated by task 22209:
     ...
     alloc_netdev_mqs+0x98/0x1100 net/core/dev.c:10549
     rtnl_create_link+0x9d7/0xc00 net/core/rtnetlink.c:3235
     veth_newlink+0x20e/0xa90 drivers/net/veth.c:1748
    
    Freed by task 8:
     ...
     kfree+0xd6/0x4d0 mm/slub.c:4552
     kvfree+0x42/0x50 mm/util.c:615
     device_release+0x9f/0x240 drivers/base/core.c:2229
     kobject_cleanup lib/kobject.c:673 [inline]
     kobject_release lib/kobject.c:704 [inline]
     kref_put include/linux/kref.h:65 [inline]
     kobject_put+0x1c8/0x540 lib/kobject.c:721
     netdev_run_todo+0x72e/0x10b0 net/core/dev.c:10327
    
    After commit faab39f6 ("net: allow out-of-order netdev unregistration")
    and commit e5f80fcf ("ipv6: give an IPv6 dev to blackhole_netdev"), we
    can add dev_hold_track() in macsec_dev_init() and dev_put_track() in
    macsec_free_netdev() to fix the problem.
    
    Fixes: 2bce1ebe ("macsec: fix refcnt leak in module exit routine")
    Reported-by: syzbot+d0e94b65ac259c29ce7a@syzkaller.appspotmail.com
    Signed-off-by: default avatarZiyang Xuan <william.xuanziyang@huawei.com>
    Link: https://lore.kernel.org/r/20220531074500.1272846-1-william.xuanziyang@huawei.comSigned-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    196a888c
macsec.c 106 KB