• Vlad Buslov's avatar
    net: sched: fix police ext initialization · 396d7f23
    Vlad Buslov authored
    When police action is created by cls API tcf_exts_validate() first
    conditional that calls tcf_action_init_1() directly, the action idr is not
    updated according to latest changes in action API that require caller to
    commit newly created action to idr with tcf_idr_insert_many(). This results
    such action not being accessible through act API and causes crash reported
    by syzbot:
    
    ==================================================================
    BUG: KASAN: null-ptr-deref in instrument_atomic_read include/linux/instrumented.h:71 [inline]
    BUG: KASAN: null-ptr-deref in atomic_read include/asm-generic/atomic-instrumented.h:27 [inline]
    BUG: KASAN: null-ptr-deref in __tcf_idr_release net/sched/act_api.c:178 [inline]
    BUG: KASAN: null-ptr-deref in tcf_idrinfo_destroy+0x129/0x1d0 net/sched/act_api.c:598
    Read of size 4 at addr 0000000000000010 by task kworker/u4:5/204
    
    CPU: 0 PID: 204 Comm: kworker/u4:5 Not tainted 5.11.0-rc7-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    Workqueue: netns cleanup_net
    Call Trace:
     __dump_stack lib/dump_stack.c:79 [inline]
     dump_stack+0x107/0x163 lib/dump_stack.c:120
     __kasan_report mm/kasan/report.c:400 [inline]
     kasan_report.cold+0x5f/0xd5 mm/kasan/report.c:413
     check_memory_region_inline mm/kasan/generic.c:179 [inline]
     check_memory_region+0x13d/0x180 mm/kasan/generic.c:185
     instrument_atomic_read include/linux/instrumented.h:71 [inline]
     atomic_read include/asm-generic/atomic-instrumented.h:27 [inline]
     __tcf_idr_release net/sched/act_api.c:178 [inline]
     tcf_idrinfo_destroy+0x129/0x1d0 net/sched/act_api.c:598
     tc_action_net_exit include/net/act_api.h:151 [inline]
     police_exit_net+0x168/0x360 net/sched/act_police.c:390
     ops_exit_list+0x10d/0x160 net/core/net_namespace.c:190
     cleanup_net+0x4ea/0xb10 net/core/net_namespace.c:604
     process_one_work+0x98d/0x15f0 kernel/workqueue.c:2275
     worker_thread+0x64c/0x1120 kernel/workqueue.c:2421
     kthread+0x3b1/0x4a0 kernel/kthread.c:292
     ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:296
    ==================================================================
    Kernel panic - not syncing: panic_on_warn set ...
    CPU: 0 PID: 204 Comm: kworker/u4:5 Tainted: G    B             5.11.0-rc7-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    Workqueue: netns cleanup_net
    Call Trace:
     __dump_stack lib/dump_stack.c:79 [inline]
     dump_stack+0x107/0x163 lib/dump_stack.c:120
     panic+0x306/0x73d kernel/panic.c:231
     end_report+0x58/0x5e mm/kasan/report.c:100
     __kasan_report mm/kasan/report.c:403 [inline]
     kasan_report.cold+0x67/0xd5 mm/kasan/report.c:413
     check_memory_region_inline mm/kasan/generic.c:179 [inline]
     check_memory_region+0x13d/0x180 mm/kasan/generic.c:185
     instrument_atomic_read include/linux/instrumented.h:71 [inline]
     atomic_read include/asm-generic/atomic-instrumented.h:27 [inline]
     __tcf_idr_release net/sched/act_api.c:178 [inline]
     tcf_idrinfo_destroy+0x129/0x1d0 net/sched/act_api.c:598
     tc_action_net_exit include/net/act_api.h:151 [inline]
     police_exit_net+0x168/0x360 net/sched/act_police.c:390
     ops_exit_list+0x10d/0x160 net/core/net_namespace.c:190
     cleanup_net+0x4ea/0xb10 net/core/net_namespace.c:604
     process_one_work+0x98d/0x15f0 kernel/workqueue.c:2275
     worker_thread+0x64c/0x1120 kernel/workqueue.c:2421
     kthread+0x3b1/0x4a0 kernel/kthread.c:292
     ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:296
    Kernel Offset: disabled
    
    Fix the issue by calling tcf_idr_insert_many() after successful action
    initialization.
    
    Fixes: 0fedc63f ("net_sched: commit action insertions together")
    Reported-by: syzbot+151e3e714d34ae4ce7e8@syzkaller.appspotmail.com
    Signed-off-by: default avatarVlad Buslov <vladbu@nvidia.com>
    Reviewed-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    396d7f23
act_api.c 39.6 KB