* [PATCH] net: sysctl: fix a kmemleak warning
@ 2015-10-22 3:27 roy.qing.li
2015-10-23 10:04 ` David Miller
0 siblings, 1 reply; 3+ messages in thread
From: roy.qing.li @ 2015-10-22 3:27 UTC (permalink / raw)
To: netdev
From: Li RongQing <roy.qing.li@gmail.com>
the returned buffer of register_sysctl() is stored into net_header
variable, but net_header is not used after, and compiler maybe
optimise the variable out, and lead kmemleak reported the below warning
comm "swapper/0", pid 1, jiffies 4294937448 (age 267.270s)
hex dump (first 32 bytes):
90 38 8b 01 c0 ff ff ff 00 00 00 00 01 00 00 00 .8..............
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<ffffffc00020f134>] create_object+0x10c/0x2a0
[<ffffffc00070ff44>] kmemleak_alloc+0x54/0xa0
[<ffffffc0001fe378>] __kmalloc+0x1f8/0x4f8
[<ffffffc00028e984>] __register_sysctl_table+0x64/0x5a0
[<ffffffc00028eef0>] register_sysctl+0x30/0x40
[<ffffffc00099c304>] net_sysctl_init+0x20/0x58
[<ffffffc000994dd8>] sock_init+0x10/0xb0
[<ffffffc0000842e0>] do_one_initcall+0x90/0x1b8
[<ffffffc000966bac>] kernel_init_freeable+0x218/0x2f0
[<ffffffc00070ed6c>] kernel_init+0x1c/0xe8
[<ffffffc000083bfc>] ret_from_fork+0xc/0x50
[<ffffffffffffffff>] 0xffffffffffffffff <<end check kmemleak>>
Before fix, the objdump result on ARM64:
0000000000000000 <net_sysctl_init>:
0: a9be7bfd stp x29, x30, [sp,#-32]!
4: 90000001 adrp x1, 0 <net_sysctl_init>
8: 90000000 adrp x0, 0 <net_sysctl_init>
c: 910003fd mov x29, sp
10: 91000021 add x1, x1, #0x0
14: 91000000 add x0, x0, #0x0
18: a90153f3 stp x19, x20, [sp,#16]
1c: 12800174 mov w20, #0xfffffff4 // #-12
20: 94000000 bl 0 <register_sysctl>
24: b4000120 cbz x0, 48 <net_sysctl_init+0x48>
28: 90000013 adrp x19, 0 <net_sysctl_init>
2c: 91000273 add x19, x19, #0x0
30: 9101a260 add x0, x19, #0x68
34: 94000000 bl 0 <register_pernet_subsys>
38: 2a0003f4 mov w20, w0
3c: 35000060 cbnz w0, 48 <net_sysctl_init+0x48>
40: aa1303e0 mov x0, x19
44: 94000000 bl 0 <register_sysctl_root>
48: 2a1403e0 mov w0, w20
4c: a94153f3 ldp x19, x20, [sp,#16]
50: a8c27bfd ldp x29, x30, [sp],#32
54: d65f03c0 ret
After:
0000000000000000 <net_sysctl_init>:
0: a9bd7bfd stp x29, x30, [sp,#-48]!
4: 90000000 adrp x0, 0 <net_sysctl_init>
8: 910003fd mov x29, sp
c: a90153f3 stp x19, x20, [sp,#16]
10: 90000013 adrp x19, 0 <net_sysctl_init>
14: 91000000 add x0, x0, #0x0
18: 91000273 add x19, x19, #0x0
1c: f90013f5 str x21, [sp,#32]
20: aa1303e1 mov x1, x19
24: 12800175 mov w21, #0xfffffff4 // #-12
28: 94000000 bl 0 <register_sysctl>
2c: f9002260 str x0, [x19,#64]
30: b40001c0 cbz x0, 68 <net_sysctl_init+0x68>
34: 90000014 adrp x20, 0 <net_sysctl_init>
38: 91000294 add x20, x20, #0x0
3c: 9101a280 add x0, x20, #0x68
40: 94000000 bl 0 <register_pernet_subsys>
44: 2a0003f5 mov w21, w0
48: 35000080 cbnz w0, 58 <net_sysctl_init+0x58>
4c: aa1403e0 mov x0, x20
50: 94000000 bl 0 <register_sysctl_root>
54: 14000005 b 68 <net_sysctl_init+0x68>
58: f9402260 ldr x0, [x19,#64]
5c: 94000000 bl 0 <unregister_sysctl_table>
60: f9402260 ldr x0, [x19,#64]
64: 94000000 bl 0 <kfree>
68: 2a1503e0 mov w0, w21
6c: f94013f5 ldr x21, [sp,#32]
70: a94153f3 ldp x19, x20, [sp,#16]
74: a8c37bfd ldp x29, x30, [sp],#48
78: d65f03c0 ret
Add the possible error handle to free the net_header to remove the
kmemleak warning
Signed-off-by: Li RongQing <roy.qing.li@gmail.com>
---
net/sysctl_net.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/net/sysctl_net.c b/net/sysctl_net.c
index e7000be..a5372d2 100644
--- a/net/sysctl_net.c
+++ b/net/sysctl_net.c
@@ -94,10 +94,14 @@ __init int net_sysctl_init(void)
goto out;
ret = register_pernet_subsys(&sysctl_pernet_ops);
if (ret)
- goto out;
+ goto out1;
register_sysctl_root(&net_sysctl_root);
out:
return ret;
+out1:
+ unregister_sysctl_table(net_header);
+ kfree(net_header);
+ goto out;
}
struct ctl_table_header *register_net_sysctl(struct net *net,
--
2.1.4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] net: sysctl: fix a kmemleak warning
2015-10-23 10:04 ` David Miller
@ 2015-10-23 9:54 ` Li RongQing
0 siblings, 0 replies; 3+ messages in thread
From: Li RongQing @ 2015-10-23 9:54 UTC (permalink / raw)
To: David Miller; +Cc: netdev
On Fri, Oct 23, 2015 at 6:04 PM, David Miller <davem@davemloft.net> wrote:
>> +out1:
>> + unregister_sysctl_table(net_header);
>> + kfree(net_header);
>
> I read over unregister_sysctl_table() and it appears to do the kfree()
> for us, doesn't it?
you are right, thanks
-Roy
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] net: sysctl: fix a kmemleak warning
2015-10-22 3:27 [PATCH] net: sysctl: fix a kmemleak warning roy.qing.li
@ 2015-10-23 10:04 ` David Miller
2015-10-23 9:54 ` Li RongQing
0 siblings, 1 reply; 3+ messages in thread
From: David Miller @ 2015-10-23 10:04 UTC (permalink / raw)
To: roy.qing.li; +Cc: netdev
From: roy.qing.li@gmail.com
Date: Thu, 22 Oct 2015 11:27:12 +0800
> +out1:
> + unregister_sysctl_table(net_header);
> + kfree(net_header);
I read over unregister_sysctl_table() and it appears to do the kfree()
for us, doesn't it?
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2015-10-23 9:54 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-22 3:27 [PATCH] net: sysctl: fix a kmemleak warning roy.qing.li
2015-10-23 10:04 ` David Miller
2015-10-23 9:54 ` Li RongQing
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.