From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757369Ab2EVJt0 (ORCPT ); Tue, 22 May 2012 05:49:26 -0400 Received: from cam-admin0.cambridge.arm.com ([217.140.96.50]:47729 "EHLO cam-admin0.cambridge.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750793Ab2EVJtY (ORCPT ); Tue, 22 May 2012 05:49:24 -0400 Date: Tue, 22 May 2012 10:47:57 +0100 From: Catalin Marinas To: Steven Rostedt Cc: LKML , Linus Torvalds , Andrew Morton Subject: Re: [PATCH] sysctl: Suppress kmemleak messages Message-ID: <20120522094757.GA28761@arm.com> References: <1337648657.13348.26.camel@gandalf.stny.rr.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1337648657.13348.26.camel@gandalf.stny.rr.com> User-Agent: Mutt/1.5.20 (2009-06-14) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, May 22, 2012 at 02:04:17AM +0100, Steven Rostedt wrote: > Not sure who the owner is of kernel/sysctl.c, so I'm just sending this > patch to you :-) > > The register_sysctl_table() is a strange function, as it makes internal > allocations (a header) to register a sysctl_table. This header is a > handle to the table that is created, and can be used to unregister the > table. But if the table is permanent and never unregistered, the header > acts the same as a static variable. > > Unfortunately, this allocation of memory that is never expected to be > freed, fools kmemleak in thinking that we have leaked memory. For those > sysctl tables that are never unregistered, and have no pointer > referencing them, kmemleak will think that these are memory leaks: > > unreferenced object 0xffff880079fb9d40 (size 192): > comm "swapper/0", pid 0, jiffies 4294667316 (age 12614.152s) > hex dump (first 32 bytes): > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > backtrace: > [] kmemleak_alloc+0x73/0x98 > [] kmemleak_alloc_recursive.constprop.42+0x16/0x18 > [] __kmalloc+0x107/0x153 > [] kzalloc.constprop.8+0xe/0x10 > [] __register_sysctl_paths+0xe1/0x160 > [] register_sysctl_paths+0x1b/0x1d > [] register_sysctl_table+0x18/0x1a > [] sysctl_init+0x10/0x14 > [] proc_sys_init+0x2f/0x31 > [] proc_root_init+0xa5/0xa7 > [] start_kernel+0x3d0/0x40a > [] x86_64_start_reservations+0xae/0xb2 > [] x86_64_start_kernel+0x102/0x111 > [] 0xffffffffffffffff > > > The sysctl_base_table used by sysctl itself is one such instance that > registers the table to never be unregistered. > > Use kmemleak_not_leak() to suppress the kmemleak false positive. > > [ applied against 3.4 ] > > Signed-off-by: Steven Rostedt FWIW, Acked-by: Catalin Marinas (for the use of the kmemleak API :)) -- Catalin