• Lokesh Dhoundiyal's avatar
    ipv4: drop dst in multicast routing path · 9e6c6d17
    Lokesh Dhoundiyal authored
    kmemleak reports the following when routing multicast traffic over an
    ipsec tunnel.
    
    Kmemleak output:
    unreferenced object 0x8000000044bebb00 (size 256):
      comm "softirq", pid 0, jiffies 4294985356 (age 126.810s)
      hex dump (first 32 bytes):
        00 00 00 00 00 00 00 00 80 00 00 00 05 13 74 80  ..............t.
        80 00 00 00 04 9b bf f9 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<00000000f83947e0>] __kmalloc+0x1e8/0x300
        [<00000000b7ed8dca>] metadata_dst_alloc+0x24/0x58
        [<0000000081d32c20>] __ipgre_rcv+0x100/0x2b8
        [<00000000824f6cf1>] gre_rcv+0x178/0x540
        [<00000000ccd4e162>] gre_rcv+0x7c/0xd8
        [<00000000c024b148>] ip_protocol_deliver_rcu+0x124/0x350
        [<000000006a483377>] ip_local_deliver_finish+0x54/0x68
        [<00000000d9271b3a>] ip_local_deliver+0x128/0x168
        [<00000000bd4968ae>] xfrm_trans_reinject+0xb8/0xf8
        [<0000000071672a19>] tasklet_action_common.isra.16+0xc4/0x1b0
        [<0000000062e9c336>] __do_softirq+0x1fc/0x3e0
        [<00000000013d7914>] irq_exit+0xc4/0xe0
        [<00000000a4d73e90>] plat_irq_dispatch+0x7c/0x108
        [<000000000751eb8e>] handle_int+0x16c/0x178
        [<000000001668023b>] _raw_spin_unlock_irqrestore+0x1c/0x28
    
    The metadata dst is leaked when ip_route_input_mc() updates the dst for
    the skb. Commit f38a9eb1 ("dst: Metadata destinations") correctly
    handled dropping the dst in ip_route_input_slow() but missed the
    multicast case which is handled by ip_route_input_mc(). Drop the dst in
    ip_route_input_mc() avoiding the leak.
    
    Fixes: f38a9eb1 ("dst: Metadata destinations")
    Signed-off-by: default avatarLokesh Dhoundiyal <lokesh.dhoundiyal@alliedtelesis.co.nz>
    Signed-off-by: default avatarChris Packham <chris.packham@alliedtelesis.co.nz>
    Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/20220505020017.3111846-1-chris.packham@alliedtelesis.co.nzSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    9e6c6d17
route.c 94.6 KB