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  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <F8A4F5BF-C490-4099-9360-0C771451FF1D@intel.com>
Date:	Tue, 2 Sep 2014 18:01:31 +0000
From:	"Rustad, Mark D" <mark.d.rustad@...el.com>
To:	Rusty Russell <rusty@...tcorp.com.au>
CC:	"Kirsher, Jeffrey T" <jeffrey.t.kirsher@...el.com>,
	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] moduleparam: Resolve missing-field-initializer warning

On Aug 31, 2014, at 5:52 PM, Rusty Russell <rusty@...tcorp.com.au> wrote:

> Jeff Kirsher <jeffrey.t.kirsher@...el.com> writes:
>> From: Mark Rustad <mark.d.rustad@...el.com>
>> 
>> Resolve a missing-field-initializer warning, that is produced
>> by every reference to module_param_call, by using designated
>> initialization for the first field. That is enough to silence
>> the complaint.
>> 
>> Signed-off-by: Mark Rustad <mark.d.rustad@...el.com>
>> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@...el.com>
>> ---
>> include/linux/moduleparam.h | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> Strange, I haven't seen this warning.  Compiler version?  And it's good
> to quote the error message, so people can google it.

The message is only seen when doing a W=2 build. I happened to be using gcc 4.8.3, but I think most versions would produce the warning when it is enabled. It can either be silenced by using even a single designated initializer as I did here, or providing values for all of the fields. Because of the number of references to the macro, this change silences many warnings in W=2 builds.

One instance of the full warning message looks like this:

/home/share/git/nn-mdr/include/linux/moduleparam.h:198:16: warning: missing initializer for field ‘free’ of ‘struct kernel_param_ops’ [-Wmissing-field-initializers]
  static struct kernel_param_ops __param_ops_##name =  \
                ^
/home/share/git/nn-mdr/fs/fuse/inode.c:35:1: note: in expansion of macro ‘module_param_call’
 module_param_call(max_user_bgreq, set_global_limit, param_get_uint,
 ^
/home/share/git/nn-mdr/include/linux/moduleparam.h:56:9: note: ‘free’ declared here
  void (*free)(void *arg);


> Cheers,
> Rusty.
> 
>> diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h
>> index 494f99e..d99a9e9 100644
>> --- a/include/linux/moduleparam.h
>> +++ b/include/linux/moduleparam.h
>> @@ -196,7 +196,7 @@ struct kparam_array
>> /* Obsolete - use module_param_cb() */
>> #define module_param_call(name, set, get, arg, perm)			\
>> 	static struct kernel_param_ops __param_ops_##name =		\
>> -		{ 0, (void *)set, (void *)get };			\
>> +		{ .flags = 0, (void *)set, (void *)get };		\

This could also be resolved by adding a ", NULL" to the initializer above instead of the designated initializer. The designated initializer means that if additional "optional" fields were to be added in the future, this would not have to be touched to avoid generating the warning. However you prefer it. If instead you would prefer to designate all fields, the formal parameter names would have to change, since get and set would get substituted for the field designators .get and .set.

>> 	__module_param_call(MODULE_PARAM_PREFIX,			\
>> 			    name, &__param_ops_##name, arg,		\
>> 			    (perm) + sizeof(__check_old_set_param(set))*0, -1)
>> -- 
>> 1.9.3

-- 
Mark Rustad, Networking Division, Intel Corporation


Download attachment "signature.asc" of type "application/pgp-signature" (842 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ