On Tue, Nov 1, 2016 at 10:28 AM, Jakub Kicinski <kubak...@wp.pl> wrote:
> unreferenced object 0xffff8807389cba28 (size 128):
>   comm "swapper/0", pid 1, jiffies 4294898463 (age 781.332s)
>   hex dump (first 32 bytes):
>     6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
>     6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
>   backtrace:
>     [<ffffffff85decad8>] kmemleak_alloc+0x28/0x50
>     [<ffffffff84771246>] __kmalloc+0x206/0x5a0
>     [<ffffffff859e1261>] genl_register_family+0x711/0x11d0
>     [<ffffffff888d9524>] netlbl_mgmt_genl_init+0x10/0x12
>     [<ffffffff888d91e8>] netlbl_netlink_init+0x9/0x26
>     [<ffffffff888d9254>] netlbl_init+0x4f/0x85
>     [<ffffffff840022b7>] do_one_initcall+0xb7/0x2a0
>     [<ffffffff887f9102>] kernel_init_freeable+0x597/0x636
>     [<ffffffff85de7793>] kernel_init+0x13/0x140
>     [<ffffffff85e0246a>] ret_from_fork+0x2a/0x40

Looks like we are missing a kfree(family->attrbuf); on error path,
but it is not related to Johannes' recent patches.

Could the attached patch help?

Thanks.
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c
index bbd3bff..f0b65fe 100644
--- a/net/netlink/genetlink.c
+++ b/net/netlink/genetlink.c
@@ -364,7 +364,7 @@ int genl_register_family(struct genl_family *family)
                               start, end + 1, GFP_KERNEL);
        if (family->id < 0) {
                err = family->id;
-               goto errout_locked;
+               goto errout_free;
        }
 
        err = genl_validate_assign_mc_groups(family);
@@ -383,6 +383,8 @@ int genl_register_family(struct genl_family *family)
 
 errout_remove:
        idr_remove(&genl_fam_idr, family->id);
+errout_free:
+       kfree(family->attrbuf);
 errout_locked:
        genl_unlock_all();
        return err;

Reply via email to