lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:	Thu, 14 Jan 2010 20:34:34 -0500
From:	"H Hartley Sweeten" <hartleys@...ionengravers.com>
To:	"Li Zefan" <lizf@...fujitsu.com>
Cc:	"Linux Kernel" <linux-kernel@...r.kernel.org>
Subject: RE: [PATCH] prio_tree.c: quiet sparse noise

On Thursday, January 14, 2010 5:52 PM, Li Zefan wrote:
> H Hartley Sweeten wrote:
>> prio_tree.c: quiet sparse noise
>> 
>> The function prio_tree_init is called during start_kernel. Since it
>> is an __init function it is not exposed as an exported symbol.
>> A sparse build produces the following warning because of this:
>> 
>> warning: symbol 'prio_tree_init' was not declared. Should it be static?
>> 
>> Quiet the warning by declaring the function as an extern before
>> it's definition.
>> 
>
> Why don't you add a declaration of prio_tree_init() to prio_tree.h,
> and let kernel/main.c include it?

I don't think that's a good idea.

Since the function is __init it will be reaped by free_initmem in
init_post.  If the function is exposed in the header someone might
try to call it after than happens.  My guess is that's a bad thing...

Maybe a new <linux/init_funcs.h> could be created that has a big
fat warning about free_initmem?  Then all the various init's could
be declared to remove all the sparse warnings.  These are the main
ones I see in init/main.c but there are probably others:

extern void init_IRQ(void);			<- arch specific
extern void fork_init(unsigned long);	<- kernel/fork.c
extern void prio_tree_init(void);		<- lib/prio_tree.c
extern void radix_tree_init(void);		<- lib/radix-tree.c
extern void free_initmem(void);		<- arch specific
extern void time_init(void);			<- arch specific
extern void softirq_init(void);		<- kernel/softirq.c


Regards,
Hartley

>> Signed-off-by: H Hartley Sweeten <hsweeten@...ionengravers.com>
>> 
>> ---
>> 
>> diff --git a/lib/prio_tree.c b/lib/prio_tree.c
>> index ccfd850..a677200 100644
>> --- a/lib/prio_tree.c
>> +++ b/lib/prio_tree.c
>> @@ -68,6 +68,9 @@ static void get_index(const struct prio_tree_root *root,
>>  
>>  static unsigned long index_bits_to_maxindex[BITS_PER_LONG];
>>  
>> +/* Keep sparse happy since this is not an EXPORT_SYMBOL */
>> +extern void prio_tree_init(void);
>> +
>>  void __init prio_tree_init(void)
>>  {
>>  	unsigned int i;
>> --

Powered by blists - more mailing lists