lkml.org 
[lkml]   [2020]   [Jan]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 156/222] net: sched: act_ctinfo: fix memory leak
    Date
    From: Eric Dumazet <edumazet@google.com>

    [ Upstream commit 09d4f10a5e78d76a53e3e584f1e6a701b6d24108 ]

    Implement a cleanup method to properly free ci->params

    BUG: memory leak
    unreferenced object 0xffff88811746e2c0 (size 64):
    comm "syz-executor617", pid 7106, jiffies 4294943055 (age 14.250s)
    hex dump (first 32 bytes):
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    c0 34 60 84 ff ff ff ff 00 00 00 00 00 00 00 00 .4`.............
    backtrace:
    [<0000000015aa236f>] kmemleak_alloc_recursive include/linux/kmemleak.h:43 [inline]
    [<0000000015aa236f>] slab_post_alloc_hook mm/slab.h:586 [inline]
    [<0000000015aa236f>] slab_alloc mm/slab.c:3320 [inline]
    [<0000000015aa236f>] kmem_cache_alloc_trace+0x145/0x2c0 mm/slab.c:3549
    [<000000002c946bd1>] kmalloc include/linux/slab.h:556 [inline]
    [<000000002c946bd1>] kzalloc include/linux/slab.h:670 [inline]
    [<000000002c946bd1>] tcf_ctinfo_init+0x21a/0x530 net/sched/act_ctinfo.c:236
    [<0000000086952cca>] tcf_action_init_1+0x400/0x5b0 net/sched/act_api.c:944
    [<000000005ab29bf8>] tcf_action_init+0x135/0x1c0 net/sched/act_api.c:1000
    [<00000000392f56f9>] tcf_action_add+0x9a/0x200 net/sched/act_api.c:1410
    [<0000000088f3c5dd>] tc_ctl_action+0x14d/0x1bb net/sched/act_api.c:1465
    [<000000006b39d986>] rtnetlink_rcv_msg+0x178/0x4b0 net/core/rtnetlink.c:5424
    [<00000000fd6ecace>] netlink_rcv_skb+0x61/0x170 net/netlink/af_netlink.c:2477
    [<0000000047493d02>] rtnetlink_rcv+0x1d/0x30 net/core/rtnetlink.c:5442
    [<00000000bdcf8286>] netlink_unicast_kernel net/netlink/af_netlink.c:1302 [inline]
    [<00000000bdcf8286>] netlink_unicast+0x223/0x310 net/netlink/af_netlink.c:1328
    [<00000000fc5b92d9>] netlink_sendmsg+0x2c0/0x570 net/netlink/af_netlink.c:1917
    [<00000000da84d076>] sock_sendmsg_nosec net/socket.c:639 [inline]
    [<00000000da84d076>] sock_sendmsg+0x54/0x70 net/socket.c:659
    [<0000000042fb2eee>] ____sys_sendmsg+0x2d0/0x300 net/socket.c:2330
    [<000000008f23f67e>] ___sys_sendmsg+0x8a/0xd0 net/socket.c:2384
    [<00000000d838e4f6>] __sys_sendmsg+0x80/0xf0 net/socket.c:2417
    [<00000000289a9cb1>] __do_sys_sendmsg net/socket.c:2426 [inline]
    [<00000000289a9cb1>] __se_sys_sendmsg net/socket.c:2424 [inline]
    [<00000000289a9cb1>] __x64_sys_sendmsg+0x23/0x30 net/socket.c:2424

    Fixes: 24ec483cec98 ("net: sched: Introduce act_ctinfo action")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Cc: Kevin 'ldir' Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
    Cc: Cong Wang <xiyou.wangcong@gmail.com>
    Cc: Toke Høiland-Jørgensen <toke@redhat.com>
    Acked-by: Kevin 'ldir' Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/sched/act_ctinfo.c | 11 +++++++++++
    1 file changed, 11 insertions(+)

    --- a/net/sched/act_ctinfo.c
    +++ b/net/sched/act_ctinfo.c
    @@ -360,6 +360,16 @@ static int tcf_ctinfo_search(struct net
    return tcf_idr_search(tn, a, index);
    }

    +static void tcf_ctinfo_cleanup(struct tc_action *a)
    +{
    + struct tcf_ctinfo *ci = to_ctinfo(a);
    + struct tcf_ctinfo_params *cp;
    +
    + cp = rcu_dereference_protected(ci->params, 1);
    + if (cp)
    + kfree_rcu(cp, rcu);
    +}
    +
    static struct tc_action_ops act_ctinfo_ops = {
    .kind = "ctinfo",
    .id = TCA_ID_CTINFO,
    @@ -367,6 +377,7 @@ static struct tc_action_ops act_ctinfo_o
    .act = tcf_ctinfo_act,
    .dump = tcf_ctinfo_dump,
    .init = tcf_ctinfo_init,
    + .cleanup= tcf_ctinfo_cleanup,
    .walk = tcf_ctinfo_walker,
    .lookup = tcf_ctinfo_search,
    .size = sizeof(struct tcf_ctinfo),

    \
     
     \ /
      Last update: 2020-01-22 14:30    [W:3.900 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site