linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] staging: lustre: ldlm: use designated initializers
@ 2016-12-17  1:00 Kees Cook
  2016-12-19 16:22 ` James Simmons
  2016-12-20 17:29 ` Designated initializers, struct randomization and addressing? Joe Perches
  0 siblings, 2 replies; 21+ messages in thread
From: Kees Cook @ 2016-12-17  1:00 UTC (permalink / raw)
  To: linux-kernel
  Cc: Oleg Drokin, Andreas Dilger, James Simmons, Greg Kroah-Hartman,
	John L. Hammond, Emoly Liu, Vitaly Fertman, Bruno Faccini,
	Bruce Korb, lustre-devel, devel

Prepare to mark sensitive kernel structures for randomization by making
sure they're using designated initializers. These were identified during
allyesconfig builds of x86, arm, and arm64, with most initializer fixes
extracted from grsecurity.

Signed-off-by: Kees Cook <keescook@chromium.org>
---
 drivers/staging/lustre/lustre/ldlm/ldlm_flock.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
index 722160784f83..f815827532dc 100644
--- a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
+++ b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
@@ -143,7 +143,7 @@ static int ldlm_process_flock_lock(struct ldlm_lock *req, __u64 *flags,
 	int added = (mode == LCK_NL);
 	int overlaps = 0;
 	int splitted = 0;
-	const struct ldlm_callback_suite null_cbs = { NULL };
+	const struct ldlm_callback_suite null_cbs = { };
 
 	CDEBUG(D_DLMTRACE,
 	       "flags %#llx owner %llu pid %u mode %u start %llu end %llu\n",
-- 
2.7.4


-- 
Kees Cook
Nexus Security

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH] staging: lustre: ldlm: use designated initializers
  2016-12-17  1:00 [PATCH] staging: lustre: ldlm: use designated initializers Kees Cook
@ 2016-12-19 16:22 ` James Simmons
  2016-12-19 16:47   ` Bruce Korb
                     ` (2 more replies)
  2016-12-20 17:29 ` Designated initializers, struct randomization and addressing? Joe Perches
  1 sibling, 3 replies; 21+ messages in thread
From: James Simmons @ 2016-12-19 16:22 UTC (permalink / raw)
  To: Kees Cook
  Cc: linux-kernel, Oleg Drokin, Andreas Dilger, Greg Kroah-Hartman,
	John L. Hammond, Emoly Liu, Vitaly Fertman, Bruno Faccini,
	Bruce Korb, lustre-devel, devel


> Prepare to mark sensitive kernel structures for randomization by making
> sure they're using designated initializers. These were identified during
> allyesconfig builds of x86, arm, and arm64, with most initializer fixes
> extracted from grsecurity.
> 
> Signed-off-by: Kees Cook <keescook@chromium.org>
> ---
>  drivers/staging/lustre/lustre/ldlm/ldlm_flock.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> index 722160784f83..f815827532dc 100644
> --- a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> @@ -143,7 +143,7 @@ static int ldlm_process_flock_lock(struct ldlm_lock *req, __u64 *flags,
>  	int added = (mode == LCK_NL);
>  	int overlaps = 0;
>  	int splitted = 0;
> -	const struct ldlm_callback_suite null_cbs = { NULL };
> +	const struct ldlm_callback_suite null_cbs = { };
>  
>  	CDEBUG(D_DLMTRACE,
>  	       "flags %#llx owner %llu pid %u mode %u start %llu end %llu\n",

Nak. Filling null_cbs with random data is a bad idea. If you look at 
ldlm_lock_create() where this is used you have

if (cbs) {
	lock->l_blocking_ast = cbs->lcs_blocking;
	lock->l_completion_ast = cbs->lcs_completion;
	lock->l_glimpse_ast = cbs->lcs_glimpse;
}

Having lock->l_* point to random addresses is a bad idea.
What really needs to be done is proper initialization of that
structure. A bunch of patches will be coming to address this.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] staging: lustre: ldlm: use designated initializers
  2016-12-19 16:22 ` James Simmons
@ 2016-12-19 16:47   ` Bruce Korb
  2016-12-19 17:12     ` James Simmons
  2016-12-20  7:10     ` Dan Carpenter
       [not found]   ` <CY4PR11MB175166F4D71AC6994081356BCB910@CY4PR11MB1751.namprd11.prod.outlook.com>
  2016-12-20 10:40   ` Dan Carpenter
  2 siblings, 2 replies; 21+ messages in thread
From: Bruce Korb @ 2016-12-19 16:47 UTC (permalink / raw)
  To: James Simmons
  Cc: Kees Cook, Linux Kernel Mailing List, Oleg Drokin,
	Andreas Dilger, Greg Kroah-Hartman, John L. Hammond, Emoly Liu,
	Vitaly Fertman, Bruno Faccini, Lustre Development List, devel

On Mon, Dec 19, 2016 at 8:22 AM, James Simmons
>> --- a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
>> +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
>> @@ -143,7 +143,7 @@ static int ldlm_process_flock_lock(struct ldlm_lock *req, __u64 *flags,
>>       int added = (mode == LCK_NL);
>>       int overlaps = 0;
>>       int splitted = 0;
>> -     const struct ldlm_callback_suite null_cbs = { NULL };
>> +     const struct ldlm_callback_suite null_cbs = { };
>>
>>       CDEBUG(D_DLMTRACE,
>>              "flags %#llx owner %llu pid %u mode %u start %llu end %llu\n",
>
> Nak. Filling null_cbs with random data is a bad idea. If you look at
> ldlm_lock_create() where this is used you have
>
> if (cbs) {
>         lock->l_blocking_ast = cbs->lcs_blocking;
>         lock->l_completion_ast = cbs->lcs_completion;
>         lock->l_glimpse_ast = cbs->lcs_glimpse;
> }
>
> Having lock->l_* point to random addresses is a bad idea.
> What really needs to be done is proper initialization of that
> structure. A bunch of patches will be coming to address this.

I'm not understanding the effect of the original difference.  If you
specify any initializer, then all fields not specified are filled with
zero bits. Any pointers are, perforce, NULL.  That should make both "{
NULL }" and "{}" equivalent.  Maybe a worthwhile change would be to:

    static const struct ldlm_callback_suite null_cbs;

then it is not even necessary to specify an initializer.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [lustre-devel] [PATCH] staging: lustre: ldlm: use designated initializers
       [not found]   ` <CY4PR11MB175166F4D71AC6994081356BCB910@CY4PR11MB1751.namprd11.prod.outlook.com>
@ 2016-12-19 17:11     ` James Simmons
  0 siblings, 0 replies; 21+ messages in thread
From: James Simmons @ 2016-12-19 17:11 UTC (permalink / raw)
  To: Patrick Farrell
  Cc: Kees Cook, devel, Greg Kroah-Hartman, linux-kernel, Oleg Drokin,
	Vitaly Fertman, Bruce Korb, Emoly Liu, lustre-devel

[-- Attachment #1: Type: text/plain, Size: 2961 bytes --]


> James,
> 
> 
> This should be a purely syntactical change, to help out tools - for GCC, I'm pretty sure the meaning of {
> } and { NULL } are the same.  Also, I don't think struct randomization does what you're thinking.

Yep. I misread his commit message. That is why it didn't make sense to 
me.

> Is there anything written up on kernel struct randomization?  I was trying to find a talk/post from you or
> something from LWN, but I couldn't find something about this specifically.  (Probably because I can't find
> it among the other stuff that's been written up)
> 
> 
> - Patrick
> 
> __________________________________________________________________________________________________________
> From: lustre-devel <lustre-devel-bounces@lists.lustre.org> on behalf of James Simmons
> <jsimmons@infradead.org>
> Sent: Monday, December 19, 2016 10:22:58 AM
> To: Kees Cook
> Cc: devel@driverdev.osuosl.org; Greg Kroah-Hartman; linux-kernel@vger.kernel.org; Oleg Drokin; Vitaly
> Fertman; Bruce Korb; Emoly Liu; lustre-devel@lists.lustre.org
> Subject: Re: [lustre-devel] [PATCH] staging: lustre: ldlm: use designated initializers  
> 
> > Prepare to mark sensitive kernel structures for randomization by making
> > sure they're using designated initializers. These were identified during
> > allyesconfig builds of x86, arm, and arm64, with most initializer fixes
> > extracted from grsecurity.
> >
> > Signed-off-by: Kees Cook <keescook@chromium.org>
> > ---
> >  drivers/staging/lustre/lustre/ldlm/ldlm_flock.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> > index 722160784f83..f815827532dc 100644
> > --- a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> > +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> > @@ -143,7 +143,7 @@ static int ldlm_process_flock_lock(struct ldlm_lock *req, __u64 *flags,
> >        int added = (mode == LCK_NL);
> >        int overlaps = 0;
> >        int splitted = 0;
> > -     const struct ldlm_callback_suite null_cbs = { NULL };
> > +     const struct ldlm_callback_suite null_cbs = { };
> > 
> >        CDEBUG(D_DLMTRACE,
> >               "flags %#llx owner %llu pid %u mode %u start %llu end %llu\n",
> 
> Nak. Filling null_cbs with random data is a bad idea. If you look at
> ldlm_lock_create() where this is used you have
> 
> if (cbs) {
>         lock->l_blocking_ast = cbs->lcs_blocking;
>         lock->l_completion_ast = cbs->lcs_completion;
>         lock->l_glimpse_ast = cbs->lcs_glimpse;
> }
> 
> Having lock->l_* point to random addresses is a bad idea.
> What really needs to be done is proper initialization of that
> structure. A bunch of patches will be coming to address this.
> _______________________________________________
> lustre-devel mailing list
> lustre-devel@lists.lustre.org
> http://lists.lustre.org/listinfo.cgi/lustre-devel-lustre.org
> 
> 

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] staging: lustre: ldlm: use designated initializers
  2016-12-19 16:47   ` Bruce Korb
@ 2016-12-19 17:12     ` James Simmons
  2016-12-20  7:10     ` Dan Carpenter
  1 sibling, 0 replies; 21+ messages in thread
From: James Simmons @ 2016-12-19 17:12 UTC (permalink / raw)
  To: Bruce Korb
  Cc: Kees Cook, Linux Kernel Mailing List, Oleg Drokin,
	Andreas Dilger, Greg Kroah-Hartman, John L. Hammond, Emoly Liu,
	Vitaly Fertman, Bruno Faccini, Lustre Development List, devel


> On Mon, Dec 19, 2016 at 8:22 AM, James Simmons
> >> --- a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> >> +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> >> @@ -143,7 +143,7 @@ static int ldlm_process_flock_lock(struct ldlm_lock *req, __u64 *flags,
> >>       int added = (mode == LCK_NL);
> >>       int overlaps = 0;
> >>       int splitted = 0;
> >> -     const struct ldlm_callback_suite null_cbs = { NULL };
> >> +     const struct ldlm_callback_suite null_cbs = { };
> >>
> >>       CDEBUG(D_DLMTRACE,
> >>              "flags %#llx owner %llu pid %u mode %u start %llu end %llu\n",
> >
> > Nak. Filling null_cbs with random data is a bad idea. If you look at
> > ldlm_lock_create() where this is used you have
> >
> > if (cbs) {
> >         lock->l_blocking_ast = cbs->lcs_blocking;
> >         lock->l_completion_ast = cbs->lcs_completion;
> >         lock->l_glimpse_ast = cbs->lcs_glimpse;
> > }
> >
> > Having lock->l_* point to random addresses is a bad idea.
> > What really needs to be done is proper initialization of that
> > structure. A bunch of patches will be coming to address this.
> 
> I'm not understanding the effect of the original difference.  If you
> specify any initializer, then all fields not specified are filled with
> zero bits. Any pointers are, perforce, NULL.  That should make both "{
> NULL }" and "{}" equivalent.  Maybe a worthwhile change would be to:
> 
>     static const struct ldlm_callback_suite null_cbs;

I perfer this as well.
 
> then it is not even necessary to specify an initializer.
 

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] staging: lustre: ldlm: use designated initializers
  2016-12-19 16:47   ` Bruce Korb
  2016-12-19 17:12     ` James Simmons
@ 2016-12-20  7:10     ` Dan Carpenter
  2016-12-20 14:57       ` Hammond, John
  1 sibling, 1 reply; 21+ messages in thread
From: Dan Carpenter @ 2016-12-20  7:10 UTC (permalink / raw)
  To: Bruce Korb
  Cc: James Simmons, devel, Andreas Dilger, Kees Cook,
	Greg Kroah-Hartman, Linux Kernel Mailing List, Bruno Faccini,
	Oleg Drokin, Vitaly Fertman, John L. Hammond, Emoly Liu,
	Lustre Development List

On Mon, Dec 19, 2016 at 08:47:50AM -0800, Bruce Korb wrote:
> On Mon, Dec 19, 2016 at 8:22 AM, James Simmons
> >> --- a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> >> +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> >> @@ -143,7 +143,7 @@ static int ldlm_process_flock_lock(struct ldlm_lock *req, __u64 *flags,
> >>       int added = (mode == LCK_NL);
> >>       int overlaps = 0;
> >>       int splitted = 0;
> >> -     const struct ldlm_callback_suite null_cbs = { NULL };
> >> +     const struct ldlm_callback_suite null_cbs = { };
> >>
> >>       CDEBUG(D_DLMTRACE,
> >>              "flags %#llx owner %llu pid %u mode %u start %llu end %llu\n",
> >
> > Nak. Filling null_cbs with random data is a bad idea. If you look at
> > ldlm_lock_create() where this is used you have
> >
> > if (cbs) {
> >         lock->l_blocking_ast = cbs->lcs_blocking;
> >         lock->l_completion_ast = cbs->lcs_completion;
> >         lock->l_glimpse_ast = cbs->lcs_glimpse;
> > }
> >
> > Having lock->l_* point to random addresses is a bad idea.
> > What really needs to be done is proper initialization of that
> > structure. A bunch of patches will be coming to address this.
> 
> I'm not understanding the effect of the original difference.  If you
> specify any initializer, then all fields not specified are filled with
> zero bits. Any pointers are, perforce, NULL.  That should make both "{
> NULL }" and "{}" equivalent.

They are equivalent, yes, but people want to use a GCC plugin that
randomizes struct layouts for internal structures and the plugin doesn't
work when you use struct ordering to initialize the struct.  The plugin
requires that you use designated intializers.

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] staging: lustre: ldlm: use designated initializers
  2016-12-19 16:22 ` James Simmons
  2016-12-19 16:47   ` Bruce Korb
       [not found]   ` <CY4PR11MB175166F4D71AC6994081356BCB910@CY4PR11MB1751.namprd11.prod.outlook.com>
@ 2016-12-20 10:40   ` Dan Carpenter
  2 siblings, 0 replies; 21+ messages in thread
From: Dan Carpenter @ 2016-12-20 10:40 UTC (permalink / raw)
  To: James Simmons
  Cc: Kees Cook, devel, Andreas Dilger, Greg Kroah-Hartman,
	linux-kernel, Bruno Faccini, Oleg Drokin, Vitaly Fertman,
	John L. Hammond, Bruce Korb, Emoly Liu, lustre-devel

On Mon, Dec 19, 2016 at 04:22:58PM +0000, James Simmons wrote:
> 
> > Prepare to mark sensitive kernel structures for randomization by making
> > sure they're using designated initializers. These were identified during
> > allyesconfig builds of x86, arm, and arm64, with most initializer fixes
> > extracted from grsecurity.
> > 
> > Signed-off-by: Kees Cook <keescook@chromium.org>
> > ---
> >  drivers/staging/lustre/lustre/ldlm/ldlm_flock.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> > index 722160784f83..f815827532dc 100644
> > --- a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> > +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> > @@ -143,7 +143,7 @@ static int ldlm_process_flock_lock(struct ldlm_lock *req, __u64 *flags,
> >  	int added = (mode == LCK_NL);
> >  	int overlaps = 0;
> >  	int splitted = 0;
> > -	const struct ldlm_callback_suite null_cbs = { NULL };
> > +	const struct ldlm_callback_suite null_cbs = { };
> >  
> >  	CDEBUG(D_DLMTRACE,
> >  	       "flags %#llx owner %llu pid %u mode %u start %llu end %llu\n",
> 
> Nak. Filling null_cbs with random data is a bad idea.

You've misunderstood.  The plugin just changes how the struct is laid
out, it doesn't put data into the struct.  So this is fine.

The places where it's not fine are when the layout is required because
it's shared with userspace or set by the hardware.

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 21+ messages in thread

* RE: [PATCH] staging: lustre: ldlm: use designated initializers
  2016-12-20  7:10     ` Dan Carpenter
@ 2016-12-20 14:57       ` Hammond, John
  2016-12-20 16:47         ` Bruce Korb
  2016-12-20 19:07         ` Dan Carpenter
  0 siblings, 2 replies; 21+ messages in thread
From: Hammond, John @ 2016-12-20 14:57 UTC (permalink / raw)
  To: Dan Carpenter, Bruce Korb
  Cc: James Simmons, devel, Dilger, Andreas, Kees Cook,
	Greg Kroah-Hartman, Linux Kernel Mailing List, Faccini, Bruno,
	Drokin, Oleg, Vitaly Fertman, Liu, Emoly,
	Lustre Development List

> On Mon, Dec 19, 2016 at 08:47:50AM -0800, Bruce Korb wrote:
> > On Mon, Dec 19, 2016 at 8:22 AM, James Simmons
> > >> --- a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> > >> +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
> > >> @@ -143,7 +143,7 @@ static int ldlm_process_flock_lock(struct ldlm_lock
> *req, __u64 *flags,
> > >>       int added = (mode == LCK_NL);
> > >>       int overlaps = 0;
> > >>       int splitted = 0;
> > >> -     const struct ldlm_callback_suite null_cbs = { NULL };
> > >> +     const struct ldlm_callback_suite null_cbs = { };
> > >>
> > >>       CDEBUG(D_DLMTRACE,
> > >>              "flags %#llx owner %llu pid %u mode %u start %llu end
> > >> %llu\n",
> > >
> > > Nak. Filling null_cbs with random data is a bad idea. If you look at
> > > ldlm_lock_create() where this is used you have
> > >
> > > if (cbs) {
> > >         lock->l_blocking_ast = cbs->lcs_blocking;
> > >         lock->l_completion_ast = cbs->lcs_completion;
> > >         lock->l_glimpse_ast = cbs->lcs_glimpse; }
> > >
> > > Having lock->l_* point to random addresses is a bad idea.
> > > What really needs to be done is proper initialization of that
> > > structure. A bunch of patches will be coming to address this.
> >
> > I'm not understanding the effect of the original difference.  If you
> > specify any initializer, then all fields not specified are filled with
> > zero bits. Any pointers are, perforce, NULL.  That should make both "{
> > NULL }" and "{}" equivalent.
> 
> They are equivalent, yes, but people want to use a GCC plugin that randomizes
> struct layouts for internal structures and the plugin doesn't work when you use
> struct ordering to initialize the struct.  The plugin requires that you use
> designated intializers.

"{ NULL }" is valid ISO C, but unfortunately "{}" is not.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] staging: lustre: ldlm: use designated initializers
  2016-12-20 14:57       ` Hammond, John
@ 2016-12-20 16:47         ` Bruce Korb
  2016-12-20 18:52           ` Dan Carpenter
  2016-12-20 19:07         ` Dan Carpenter
  1 sibling, 1 reply; 21+ messages in thread
From: Bruce Korb @ 2016-12-20 16:47 UTC (permalink / raw)
  To: Hammond, John
  Cc: Dan Carpenter, James Simmons, devel, Dilger, Andreas, Kees Cook,
	Greg Kroah-Hartman, Linux Kernel Mailing List, Faccini, Bruno,
	Drokin, Oleg, Vitaly Fertman, Liu, Emoly,
	Lustre Development List

>
> "{ NULL }" is valid ISO C, but unfortunately "{}" is not.

Just make the thing "static const" and don't use an initializer.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Designated initializers, struct randomization and addressing?
  2016-12-17  1:00 [PATCH] staging: lustre: ldlm: use designated initializers Kees Cook
  2016-12-19 16:22 ` James Simmons
@ 2016-12-20 17:29 ` Joe Perches
  2017-01-03 23:47   ` Kees Cook
  1 sibling, 1 reply; 21+ messages in thread
From: Joe Perches @ 2016-12-20 17:29 UTC (permalink / raw)
  To: Kees Cook, linux-kernel, Julia Lawall, Dan Carpenter
  Cc: Oleg Drokin, Andreas Dilger, James Simmons, Greg Kroah-Hartman,
	John L. Hammond, Emoly Liu, Vitaly Fertman, Bruno Faccini,
	Bruce Korb, lustre-devel, devel

On Fri, 2016-12-16 at 17:00 -0800, Kees Cook wrote:
> Prepare to mark sensitive kernel structures for randomization by making
sure they're using designated initializers.

About the designated initializer patches,
which by themselves are fine of course,
and the fundamental randomization plugin,
c guarantees that struct member ordering
is as specified.

how is the code to be verified so that
any use of things like offsetof and any
address/indexing is not impacted?

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] staging: lustre: ldlm: use designated initializers
  2016-12-20 16:47         ` Bruce Korb
@ 2016-12-20 18:52           ` Dan Carpenter
  0 siblings, 0 replies; 21+ messages in thread
From: Dan Carpenter @ 2016-12-20 18:52 UTC (permalink / raw)
  To: Bruce Korb
  Cc: Hammond, John, James Simmons, devel, Dilger, Andreas, Kees Cook,
	Greg Kroah-Hartman, Linux Kernel Mailing List, Faccini, Bruno,
	Drokin, Oleg, Vitaly Fertman, Liu, Emoly,
	Lustre Development List

On Tue, Dec 20, 2016 at 08:47:51AM -0800, Bruce Korb wrote:
> >
> > "{ NULL }" is valid ISO C, but unfortunately "{}" is not.
> 
> Just make the thing "static const" and don't use an initializer.

That also works, of course.

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] staging: lustre: ldlm: use designated initializers
  2016-12-20 14:57       ` Hammond, John
  2016-12-20 16:47         ` Bruce Korb
@ 2016-12-20 19:07         ` Dan Carpenter
  2016-12-20 19:46           ` Kees Cook
  1 sibling, 1 reply; 21+ messages in thread
From: Dan Carpenter @ 2016-12-20 19:07 UTC (permalink / raw)
  To: Hammond, John
  Cc: Bruce Korb, devel, Dilger, Andreas, Kees Cook,
	Greg Kroah-Hartman, Linux Kernel Mailing List, Drokin, Oleg,
	Vitaly Fertman, Liu, Emoly, Faccini, Bruno,
	Lustre Development List

On Tue, Dec 20, 2016 at 02:57:17PM +0000, Hammond, John wrote:
> "{ NULL }" is valid ISO C, but unfortunately "{}" is not.

In the kernel we don't care.  We use lots of GCC extensions.

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] staging: lustre: ldlm: use designated initializers
  2016-12-20 19:07         ` Dan Carpenter
@ 2016-12-20 19:46           ` Kees Cook
  0 siblings, 0 replies; 21+ messages in thread
From: Kees Cook @ 2016-12-20 19:46 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: Hammond, John, Bruce Korb, devel, Dilger, Andreas,
	Greg Kroah-Hartman, Linux Kernel Mailing List, Drokin, Oleg,
	Vitaly Fertman, Liu, Emoly, Faccini, Bruno,
	Lustre Development List

On Tue, Dec 20, 2016 at 11:07 AM, Dan Carpenter
<dan.carpenter@oracle.com> wrote:
> On Tue, Dec 20, 2016 at 02:57:17PM +0000, Hammond, John wrote:
>> "{ NULL }" is valid ISO C, but unfortunately "{}" is not.
>
> In the kernel we don't care.  We use lots of GCC extensions.

We depend on the compiler to do "incomplete zero-initialization" of
structures that are not mentioned in an initializer. The reason { NULL
} works is because the first field in the structure can take a NULL
value, and then the rest are zero-initialized by the compiler. { } is
the same thing, but doesn't use ordered initialization. If this style
is truly unacceptable to you, then { .somefield = NULL } can work, or
as you point out, if it's being initialized later, the static
initializer can be dropped entirely.

-Kees

-- 
Kees Cook
Nexus Security

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Designated initializers, struct randomization and addressing?
  2016-12-20 17:29 ` Designated initializers, struct randomization and addressing? Joe Perches
@ 2017-01-03 23:47   ` Kees Cook
  2017-01-03 23:55     ` Bruce Korb
  2017-01-04  6:27     ` Julia Lawall
  0 siblings, 2 replies; 21+ messages in thread
From: Kees Cook @ 2017-01-03 23:47 UTC (permalink / raw)
  To: Joe Perches
  Cc: LKML, Julia Lawall, Dan Carpenter, Oleg Drokin, Andreas Dilger,
	James Simmons, Greg Kroah-Hartman, John L. Hammond, Emoly Liu,
	Vitaly Fertman, Bruno Faccini, Bruce Korb, devel

On Tue, Dec 20, 2016 at 9:29 AM, Joe Perches <joe@perches.com> wrote:
> On Fri, 2016-12-16 at 17:00 -0800, Kees Cook wrote:
>> Prepare to mark sensitive kernel structures for randomization by making
> sure they're using designated initializers.
>
> About the designated initializer patches,
> which by themselves are fine of course,
> and the fundamental randomization plugin,
> c guarantees that struct member ordering
> is as specified.
>
> how is the code to be verified so that
> any use of things like offsetof and any
> address/indexing is not impacted?

AIUI, offsetof() works correctly in the face of this plugin, since the
ordering happens before the pass that handles offsetof(). Anything
that _does not_ use offsetof(), however, needs fixing. Based on the
work done in grsecurity, I don't see any added offsetof() uses that
are specific to the randomization plugin.

(Note that the randomization plugin is only on function pointer
structures, where using an offsetof() should be rare to none, and on
hand-selected structures, where missing offsetof() should be easy to
audit.)

-Kees

-- 
Kees Cook
Nexus Security

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Designated initializers, struct randomization and addressing?
  2017-01-03 23:47   ` Kees Cook
@ 2017-01-03 23:55     ` Bruce Korb
  2017-01-04  0:13       ` Kees Cook
  2017-01-04  6:27     ` Julia Lawall
  1 sibling, 1 reply; 21+ messages in thread
From: Bruce Korb @ 2017-01-03 23:55 UTC (permalink / raw)
  To: Kees Cook
  Cc: Joe Perches, LKML, Julia Lawall, Dan Carpenter, Oleg Drokin,
	Andreas Dilger, James Simmons, Greg Kroah-Hartman,
	John L. Hammond, Emoly Liu, Vitaly Fertman, Bruno Faccini, devel

As a tangential party, I am a bit curious: does the randomization
plugin result in a compact structure?  I ask because I know many/most
programmers don't bother with it and so doing so ought to make the
data more compact.

On Tue, Jan 3, 2017 at 3:47 PM, Kees Cook <keescook@chromium.org> wrote:
>> how is the code to be verified so that
>> any use of things like offsetof and any
>> address/indexing is not impacted?

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Designated initializers, struct randomization and addressing?
  2017-01-03 23:55     ` Bruce Korb
@ 2017-01-04  0:13       ` Kees Cook
  0 siblings, 0 replies; 21+ messages in thread
From: Kees Cook @ 2017-01-04  0:13 UTC (permalink / raw)
  To: Bruce Korb
  Cc: Joe Perches, LKML, Julia Lawall, Dan Carpenter, Oleg Drokin,
	Andreas Dilger, James Simmons, Greg Kroah-Hartman,
	John L. Hammond, Emoly Liu, Vitaly Fertman, Bruno Faccini, devel

On Tue, Jan 3, 2017 at 3:55 PM, Bruce Korb <bruce.korb@gmail.com> wrote:
> On Tue, Jan 3, 2017 at 3:47 PM, Kees Cook <keescook@chromium.org> wrote:
>>> how is the code to be verified so that
>>> any use of things like offsetof and any
>>> address/indexing is not impacted?
>
> As a tangential party, I am a bit curious: does the randomization
> plugin result in a compact structure?  I ask because I know many/most
> programmers don't bother with it and so doing so ought to make the
> data more compact.

http://git.kernel.org/cgit/linux/kernel/git/kees/linux.git/tree/scripts/gcc-plugins/randomize_layout_plugin.c?h=kspp/gcc-plugin/randstruct

See full_shuffle() and performance_shuffle(). The latter keeps
variables in the same cacheline. Neither attempt any kind of
compaction.

-Kees

-- 
Kees Cook
Nexus Security

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Designated initializers, struct randomization and addressing?
  2017-01-03 23:47   ` Kees Cook
  2017-01-03 23:55     ` Bruce Korb
@ 2017-01-04  6:27     ` Julia Lawall
  2017-01-04  6:35       ` Kees Cook
  1 sibling, 1 reply; 21+ messages in thread
From: Julia Lawall @ 2017-01-04  6:27 UTC (permalink / raw)
  To: Kees Cook
  Cc: Joe Perches, LKML, Dan Carpenter, Oleg Drokin, Andreas Dilger,
	James Simmons, Greg Kroah-Hartman, John L. Hammond, Emoly Liu,
	Vitaly Fertman, Bruno Faccini, Bruce Korb, devel



On Tue, 3 Jan 2017, Kees Cook wrote:

> On Tue, Dec 20, 2016 at 9:29 AM, Joe Perches <joe@perches.com> wrote:
> > On Fri, 2016-12-16 at 17:00 -0800, Kees Cook wrote:
> >> Prepare to mark sensitive kernel structures for randomization by making
> > sure they're using designated initializers.
> >
> > About the designated initializer patches,
> > which by themselves are fine of course,
> > and the fundamental randomization plugin,
> > c guarantees that struct member ordering
> > is as specified.
> >
> > how is the code to be verified so that
> > any use of things like offsetof and any
> > address/indexing is not impacted?
>
> AIUI, offsetof() works correctly in the face of this plugin, since the
> ordering happens before the pass that handles offsetof(). Anything
> that _does not_ use offsetof(), however, needs fixing. Based on the
> work done in grsecurity, I don't see any added offsetof() uses that
> are specific to the randomization plugin.
>
> (Note that the randomization plugin is only on function pointer
> structures, where using an offsetof() should be rare to none, and on
> hand-selected structures, where missing offsetof() should be easy to
> audit.)

What is the precise definition of "function pointer structures"?  Only
function pointers?  At least one function pointer?

thanks,
julia

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Designated initializers, struct randomization and addressing?
  2017-01-04  6:27     ` Julia Lawall
@ 2017-01-04  6:35       ` Kees Cook
  2017-01-04 16:55         ` Stephen Hemminger
  0 siblings, 1 reply; 21+ messages in thread
From: Kees Cook @ 2017-01-04  6:35 UTC (permalink / raw)
  To: Julia Lawall
  Cc: Joe Perches, LKML, Dan Carpenter, Oleg Drokin, Andreas Dilger,
	James Simmons, Greg Kroah-Hartman, John L. Hammond, Emoly Liu,
	Vitaly Fertman, Bruno Faccini, Bruce Korb, devel

On Tue, Jan 3, 2017 at 10:27 PM, Julia Lawall <julia.lawall@lip6.fr> wrote:
>
>
> On Tue, 3 Jan 2017, Kees Cook wrote:
>
>> On Tue, Dec 20, 2016 at 9:29 AM, Joe Perches <joe@perches.com> wrote:
>> > On Fri, 2016-12-16 at 17:00 -0800, Kees Cook wrote:
>> >> Prepare to mark sensitive kernel structures for randomization by making
>> > sure they're using designated initializers.
>> >
>> > About the designated initializer patches,
>> > which by themselves are fine of course,
>> > and the fundamental randomization plugin,
>> > c guarantees that struct member ordering
>> > is as specified.
>> >
>> > how is the code to be verified so that
>> > any use of things like offsetof and any
>> > address/indexing is not impacted?
>>
>> AIUI, offsetof() works correctly in the face of this plugin, since the
>> ordering happens before the pass that handles offsetof(). Anything
>> that _does not_ use offsetof(), however, needs fixing. Based on the
>> work done in grsecurity, I don't see any added offsetof() uses that
>> are specific to the randomization plugin.
>>
>> (Note that the randomization plugin is only on function pointer
>> structures, where using an offsetof() should be rare to none, and on
>> hand-selected structures, where missing offsetof() should be easy to
>> audit.)
>
> What is the precise definition of "function pointer structures"?  Only
> function pointers?  At least one function pointer?

For randstruct and constify, the automatic selection is done on
structures with only function pointers. (Additional structures can be
added via a compiler attribute marking.)

See is_pure_ops_struct():

http://git.kernel.org/cgit/linux/kernel/git/kees/linux.git/tree/scripts/gcc-plugins/randomize_layout_plugin.c?h=kspp/gcc-plugin/randstruct

-Kees

-- 
Kees Cook
Nexus Security

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Designated initializers, struct randomization and addressing?
  2017-01-04  6:35       ` Kees Cook
@ 2017-01-04 16:55         ` Stephen Hemminger
  2017-01-04 17:37           ` Julia Lawall
  2017-01-04 22:30           ` Kees Cook
  0 siblings, 2 replies; 21+ messages in thread
From: Stephen Hemminger @ 2017-01-04 16:55 UTC (permalink / raw)
  To: Kees Cook
  Cc: Julia Lawall, devel, Greg Kroah-Hartman, LKML, Bruno Faccini,
	Oleg Drokin, Vitaly Fertman, Joe Perches, Andreas Dilger,
	John L. Hammond, Bruce Korb, Emoly Liu

On Tue, 3 Jan 2017 22:35:26 -0800
Kees Cook <keescook@chromium.org> wrote:

> For randstruct and constify, the automatic selection is done on
> structures with only function pointers. (Additional structures can be
> added via a compiler attribute marking.)
> 
> See is_pure_ops_struct():

Is there anyway to use this plugin to identify pure_ops structures not already marked as const?

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Designated initializers, struct randomization and addressing?
  2017-01-04 16:55         ` Stephen Hemminger
@ 2017-01-04 17:37           ` Julia Lawall
  2017-01-04 22:30           ` Kees Cook
  1 sibling, 0 replies; 21+ messages in thread
From: Julia Lawall @ 2017-01-04 17:37 UTC (permalink / raw)
  To: Stephen Hemminger
  Cc: Kees Cook, devel, Greg Kroah-Hartman, LKML, Bruno Faccini,
	Oleg Drokin, Vitaly Fertman, Joe Perches, Andreas Dilger,
	John L. Hammond, Bruce Korb, Emoly Liu



On Wed, 4 Jan 2017, Stephen Hemminger wrote:

> On Tue, 3 Jan 2017 22:35:26 -0800
> Kees Cook <keescook@chromium.org> wrote:
>
> > For randstruct and constify, the automatic selection is done on
> > structures with only function pointers. (Additional structures can be
> > added via a compiler attribute marking.)
> >
> > See is_pure_ops_struct():
>
> Is there anyway to use this plugin to identify pure_ops structures not already marked as const?

Here is a list collected with Coccinelle.  The file names and the line
numbers are the instances of non-const structures.

julia

vpbe_device_ops:
   drivers/media/platform/davinci/vpbe.c:797
mbus_hw_ops:
   drivers/misc/mic/host/mic_boot.c:374
   drivers/misc/mic/card/mic_x100.c:237
fcoe_sysfs_function_template:
   drivers/scsi/fcoe/fcoe.c:160
   drivers/scsi/bnx2fc/bnx2fc_fcoe.c:2812
nfc_phy_ops:
   drivers/nfc/st-nci/spi.c:220
   drivers/nfc/st-nci/i2c.c:205
drm_bridge_funcs:
   drivers/gpu/drm/bridge/adv7511/adv7511_drv.c:831
prm_ll_data:
   arch/arm/mach-omap2/prm2xxx.c:214
   arch/arm/mach-omap2/prm33xx.c:374
ptlrpc_sec_cops:
   drivers/staging/lustre/lustre/ptlrpc/sec_plain.c:969
   drivers/staging/lustre/lustre/ptlrpc/sec_null.c:379
cfg80211_ops:
   drivers/net/wireless/intel/ipw2x00/libipw_module.c:66
fc_rport_operations:
   drivers/scsi/fcoe/fcoe_ctlr.c:2165
thermal_zone_of_device_ops:
   drivers/hwmon/scpi-hwmon.c:93
ui_helpline:
   tools/perf/ui/tui/helpline.c:51
skl_dsp_fw_ops:
   sound/soc/intel/skylake/bxt-sst.c:552
iomap_ops:
   fs/ext4/inode.c:3423
   fs/xfs/xfs_iomap.c:1193
   fs/xfs/xfs_iomap.c:1147
   fs/ext2/inode.c:845
fpga_bridge_ops:
   drivers/fpga/altera-freeze-bridge.c:206
qlcnic_nic_template:
   drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c:82
emitter:
   scripts/dtc/flattree.c:107
   scripts/dtc/flattree.c:233
hist_entry_ops:
   tools/perf/builtin-c2c.c:149
pccard_resource_ops:
   drivers/pcmcia/rsrc_mgr.c:61
mcfqspi_cs_control:
   arch/m68k/coldfire/device.c:308
z8530_irqhandler:
   drivers/net/wan/z85230.c:613
   drivers/net/wan/z85230.c:486
   drivers/net/wan/z85230.c:681
   drivers/net/wan/z85230.c:607
snd_soc_dai_ops:
   sound/soc/pxa/mmp-sspa.c:384
   sound/soc/codecs/max9867.c:354
   sound/soc/codecs/msm8916-wcd-digital.c:791
   sound/soc/codecs/rt5663.c:2861
   drivers/staging/greybus/audio_codec.c:672
amba_pl010_data:
   arch/arm/mach-ep93xx/core.c:172
snd_pcm_ops:
   sound/sh/aica.c:439
   sound/ppc/snd_ps3.c:775
   sound/pci/au88x0/au88x0_pcm.c:442
   sound/pci/sis7019.c:875
   sound/pci/sis7019.c:886
   sound/soc/au1x/dbdma2.c:307
   sound/soc/blackfin/bf5xx-ac97-pcm.c:301
   sound/soc/fsl/mpc5200_dma.c:290
   sound/soc/pxa/pxa2xx-pcm.c:48
   sound/arm/aaci.c:638
   sound/arm/aaci.c:741
   sound/arm/pxa2xx-pcm.c:71
   sound/usb/caiaq/audio.c:341
   sound/usb/line6/playback.c:396
   sound/usb/hiface/pcm.c:516
   sound/atmel/ac97c.c:628
   sound/atmel/ac97c.c:639
   sound/isa/sb/sb8_main.c:575
   sound/isa/sb/sb8_main.c:586
   sound/sparc/cs4231.c:1206
   sound/sparc/cs4231.c:1217
   sound/drivers/vx/vx_pcm.c:876
   sound/drivers/vx/vx_pcm.c:1096
nfc_llc_ops:
   net/nfc/hci/llc_nop.c:85
xpc_interface:
   drivers/misc/sgi-xp/xp_main.c:80
intel_gvt_mpt:
   drivers/gpu/drm/i915/gvt/kvmgt.c:1455
i40iw_device_uk_ops:
   drivers/infiniband/hw/i40iw/i40iw_uk.c:936
radeon_audio_basic_funcs:
   drivers/gpu/drm/radeon/radeon_audio.c:128
   drivers/gpu/drm/radeon/radeon_audio.c:146
   drivers/gpu/drm/radeon/radeon_audio.c:140
   drivers/gpu/drm/radeon/radeon_audio.c:134
vop_hw_ops:
   drivers/misc/mic/card/mic_device.c:312
imx_pwm_data:
   drivers/pwm/pwm-imx.c:261
   drivers/pwm/pwm-imx.c:256
pv_time_ops:
   arch/x86/kernel/paravirt.c:310
smp_ops_t:
   arch/powerpc/platforms/pasemi/setup.c:108
   arch/powerpc/platforms/chrp/smp.c:46
drm_framebuffer_funcs:
   drivers/gpu/drm/drm_fb_cma_helper.c:123
snd_compr_ops:
   sound/soc/soc-compress.c:683
   sound/soc/soc-compress.c:698
   sound/soc/codecs/wm5110.c:2367
drm_plane_funcs:
   drivers/gpu/drm/exynos/exynos_drm_plane.c:172
qed_selftest_ops:
   drivers/net/ethernet/qlogic/qed/qed_main.c:1568
mipi_dsi_host_ops:
   drivers/gpu/drm/msm/dsi/dsi_host.c:1527
i40iw_pd_ops:
   drivers/infiniband/hw/i40iw/i40iw_ctrl.c:4892
m48t86_ops:
   arch/arm/mach-orion5x/ts78xx-setup.c:98
sdhci_ops:
   drivers/mmc/host/sdhci-s3c.c:384
cpu_pm_ops:
   arch/arm/mach-omap2/omap-mpuss-lowpower.c:110
abx500_ops:
   drivers/mfd/ab3100-core.c:392
nfnl_ct_hook:
   net/netfilter/nf_conntrack_netlink.c:2392
md_cluster_operations:
   drivers/md/md-cluster.c:1265
intel_gvt_irq_ops:
   drivers/gpu/drm/i915/gvt/interrupt.c:629
isp_operations:
   drivers/scsi/qla2xxx/qla_os.c:2262
   drivers/scsi/qla2xxx/qla_os.c:2223
   drivers/scsi/qla2xxx/qla_os.c:2145
   drivers/scsi/qla2xxx/qla_os.c:2106
   drivers/scsi/qla2xxx/qla_os.c:2184
   drivers/scsi/qla2xxx/qla_os.c:2301
   drivers/scsi/qla2xxx/qla_os.c:2067
   drivers/scsi/qla2xxx/qla_os.c:2028
   drivers/scsi/qla2xxx/qla_os.c:1989
   drivers/scsi/qla2xxx/qla_os.c:1950
mmp_overlay_ops:
   drivers/video/fbdev/mmp/hw/mmp_ctrl.c:320
iommu_table_group_ops:
   arch/powerpc/platforms/powernv/pci-ioda.c:2439
   arch/powerpc/platforms/powernv/pci-ioda.c:2523
aes_ops:
   arch/sparc/crypto/aes_glue.c:151
   arch/sparc/crypto/aes_glue.c:139
   arch/sparc/crypto/aes_glue.c:127
sparc32_cachetlb_ops:
   arch/sparc/mm/srmmu.c:1478
   arch/sparc/mm/srmmu.c:1447
   arch/sparc/mm/srmmu.c:1762
mcp_ops:
   drivers/mfd/mcp-sa11x0.c:147
reset_control_ops:
   drivers/soc/dove/pmu.c:90
ib_dma_mapping_ops:
   drivers/infiniband/hw/hfi1/dma.c:171
   drivers/infiniband/sw/rxe/rxe_dma.c:169
otg_fsm_ops:
   drivers/usb/chipidea/otg_fsm.c:574
ftrace_probe_ops:
   kernel/trace/trace_functions.c:512
   kernel/trace/trace_functions.c:487
   kernel/trace/trace_functions.c:517
   kernel/trace/trace_functions.c:492
   kernel/trace/trace_functions.c:522
   kernel/trace/trace_functions.c:497
   kernel/trace/trace_functions.c:502
   kernel/trace/trace_functions.c:507
wl1271_if_operations:
   drivers/net/wireless/ti/wlcore/spi.c:422
   drivers/net/wireless/ti/wlcore/sdio.c:211
vm_operations_struct:
   drivers/usb/core/devio.c:219
mvumi_instance_template:
   drivers/scsi/mvumi.c:2029
   drivers/scsi/mvumi.c:2018
lpc32xx_mlc_platform_data:
   arch/arm/mach-lpc32xx/phy3250.c:157
stacktrace_ops:
   arch/sh/oprofile/backtrace.c:40
pci_error_handlers:
   drivers/scsi/bfa/bfad.c:1686
of_pdt_ops:
   arch/sparc/kernel/prom_common.c:147
v4l2_subdev_video_ops:
   drivers/media/i2c/soc_camera/tw9910.c:904
   drivers/media/i2c/soc_camera/mt9v022.c:861
   drivers/media/i2c/mt9t001.c:829
   drivers/media/platform/soc_camera/soc_camera_platform.c:113
hnae_buf_ops:
   drivers/net/ethernet/hisilicon/hns/hnae.c:88
fd_dma_ops:
   arch/powerpc/include/asm/floppy.h:173
   arch/powerpc/include/asm/floppy.h:165
mmu_rb_ops:
   drivers/infiniband/hw/hfi1/user_sdma.c:320
libfc_function_template:
   drivers/scsi/fcoe/fcoe.c:174
   drivers/scsi/bnx2fc/bnx2fc_fcoe.c:2966
s5p_mfc_hw_ops:
   drivers/media/platform/s5p-mfc/s5p_mfc_opr_v5.c:1597
lpc32xx_slc_platform_data:
   arch/arm/mach-lpc32xx/phy3250.c:153
mem_access:
   arch/sh/kernel/traps_32.c:74
rtl_hal_ops:
   drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c:257
ttm_backend_func:
   drivers/gpu/drm/ast/ast_ttm.c:196
   drivers/gpu/drm/qxl/qxl_ttm.c:292
   drivers/gpu/drm/ttm/ttm_agp_backend.c:106
i40iw_cqp_misc_ops:
   drivers/infiniband/hw/i40iw/i40iw_ctrl.c:4927
raw3270_fn:
   drivers/s390/char/fs3270.c:417
   drivers/s390/char/con3270.c:429
bcache_ops:
   arch/mips/mm/sc-ip22.c:177
usb_gadget_ops:
   drivers/usb/gadget/udc/fotg210-udc.c:1061
scif_hw_ops:
   drivers/misc/mic/card/mic_device.c:241
rfkill_ops:
   drivers/platform/x86/dell-rbtn.c:113
qlcnic_hardware_ops:
   drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c:47
header_ops:
   net/bluetooth/6lowpan.c:642
cpuidle_exynos_data:
   arch/arm/mach-exynos/pm.c:343
microcode_ops:
   arch/x86/kernel/cpu/microcode/intel.c:978
megasas_instance_template:
   drivers/scsi/megaraid/megaraid_sas_fusion.c:3679
perf_guest_info_callbacks:
   arch/x86/xen/pmu.c:450
dma_fence_ops:
   drivers/gpu/drm/vmwgfx/vmwgfx_fence.c:228
pci_bios_ops:
   drivers/parisc/dino.c:645
drm_encoder_funcs:
   drivers/gpu/drm/rockchip/inno_hdmi.c:541
clkops:
   arch/arm/mach-mmp/clock-mmp2.c:66
matrox_switch:
   drivers/video/fbdev/matrox/matroxfb_DAC1064.c:1090
   drivers/video/fbdev/matrox/matroxfb_DAC1064.c:1097
ptlrpc_sec_sops:
   drivers/staging/lustre/lustre/ptlrpc/sec_plain.c:983
   drivers/staging/lustre/lustre/ptlrpc/sec_null.c:391
omap_mcbsp_ops:
   arch/arm/mach-omap1/mcbsp.c:80
i40iw_mr_ops:
   drivers/infiniband/hw/i40iw/i40iw_ctrl.c:4918
pcie_soc_ops:
   drivers/pci/host/pcie-hisi.c:301
   drivers/pci/host/pcie-hisi.c:297
actions:
   tools/testing/selftests/powerpc/benchmarks/context_switch.c:234
   tools/testing/selftests/powerpc/benchmarks/context_switch.c:195
   tools/testing/selftests/powerpc/benchmarks/context_switch.c:349
od_ops:
   drivers/cpufreq/cpufreq_ondemand.c:410
sas_domain_function_template:
   drivers/scsi/pm8001/pm8001_init.c:99
concap_proto_ops:
   drivers/isdn/i4l/isdn_x25iface.c:55
cfs_hash_ops:
   drivers/staging/lustre/lustre/lov/lov_pool.c:141
   drivers/staging/lustre/lustre/obdclass/obd_config.c:1510
   drivers/staging/lustre/lustre/ldlm/ldlm_resource.c:539
   drivers/staging/lustre/lustre/ldlm/ldlm_resource.c:550
clk_ops:
   drivers/gpu/drm/imx/imx-tve.c:449
   drivers/clk/spear/clk-aux-synth.c:131
   drivers/clk/spear/clk-frac-synth.c:119
   drivers/clk/mmp/clk-apbc.c:117
v4l2_subdev_core_ops:
   drivers/media/i2c/soc_camera/tw9910.c:840
   drivers/media/i2c/soc_camera/mt9v022.c:773
   drivers/media/i2c/mt9t001.c:825
   drivers/media/platform/soc_camera/soc_camera_platform.c:62
mal_commac_ops:
   drivers/net/ethernet/ibm/emac/core.c:1986
   drivers/net/ethernet/ibm/emac/core.c:1979
qed_ll2_cb_ops:
   drivers/scsi/qedi/qedi_main.c:1577
llog_operations:
   drivers/staging/lustre/lustre/ptlrpc/llog_client.c:332
xpc_arch_operations:
   drivers/misc/sgi-xp/xpc_sn2.c:2354
ieee80211_ops:
   drivers/net/wireless/ath/ath9k/main.c:2659
   drivers/net/wireless/rsi/rsi_91x_mac80211.c:1180
perf_error_ops:
   tools/perf/ui/tui/util.c:253
usb_phy_io_ops:
   drivers/usb/phy/phy-ulpi-viewport.c:78
lane2_ops:
   net/atm/lec.c:113
videobuf_queue_ops:
   drivers/media/usb/cx231xx/cx231xx-vbi.c:288
dac_ops:
   drivers/video/fbdev/arkfb.c:432
drm_connector_helper_funcs:
   drivers/gpu/drm/zte/zx_hdmi.c:293
md_ops:
   drivers/staging/lustre/lustre/mdc/mdc_request.c:2709
ethtool_ops:
   drivers/net/ethernet/broadcom/bcm63xx_enet.c:2673
exynos_drm_ipp_ops:
   drivers/gpu/drm/exynos/exynos_drm_rotator.c:458
   drivers/gpu/drm/exynos/exynos_drm_rotator.c:464
vexpress_config_bridge_ops:
   drivers/misc/vexpress-syscfg.c:243
plat_sci_port_ops:
   arch/sh/kernel/cpu/sh3/serial-sh770x.c:31
   arch/sh/kernel/cpu/sh3/serial-sh7710.c:18
trace_sched_handler:
   tools/perf/builtin-sched.c:3267
   tools/perf/builtin-sched.c:3264
   tools/perf/builtin-sched.c:3258
x86_cpuinit_ops:
   arch/x86/kernel/x86_init.c:86
uart_ops:
   drivers/tty/serial/omap-serial.c:1398
   drivers/tty/serial/sunhv.c:373
   drivers/tty/serial/ioc4_serial.c:2599
   drivers/tty/serial/pxa.c:765
   drivers/tty/serial/ip22zilog.c:933
   drivers/tty/serial/sunzilog.c:1049
wkup_m3_ipc_ops:
   drivers/soc/ti/wkup_m3_ipc.c:332
ui_progress_ops:
   tools/perf/ui/progress.c:8
k_clock:
   kernel/time/posix-clock.c:437
spu_context_ops:
   arch/powerpc/platforms/cell/spufs/hw_ops.c:322
mca_msr_regs:
   arch/x86/kernel/cpu/mcheck/mce.c:276
i40iw_qp_uk_ops:
   drivers/infiniband/hw/i40iw/i40iw_uk.c:915
cm_ll_data:
   arch/arm/mach-omap2/cm2xxx.c:391
cl_lock_operations:
   drivers/staging/lustre/lustre/obdecho/echo_client.c:322
net_device_ops:
   drivers/net/ethernet/xilinx/xilinx_emaclite.c:1222
event_trigger_ops:
   kernel/trace/trace_events_hist.c:1654
   kernel/trace/trace_events_hist.c:1661
   kernel/trace/trace_events_hist.c:1668
   kernel/trace/trace_events_hist.c:1675
   kernel/trace/trace_events_hist.c:1261
   kernel/trace/trace_events_hist.c:1295
iommu_gather_ops:
   drivers/iommu/io-pgtable-arm-v7s.c:744
smb_version_operations:
   fs/cifs/smb1ops.c:1018
   fs/cifs/smb2ops.c:1797
   fs/cifs/smb2ops.c:1709
   fs/cifs/smb2ops.c:1628
   fs/cifs/smb2ops.c:1548
v4l2_ioctl_ops:
   drivers/media/usb/usbtv/usbtv-video.c:610
snd_soc_ops:
   sound/soc/mediatek/mt8173/mt8173-rt5650-rt5676.c:82
   sound/soc/fsl/phycore-ac97.c:26
   sound/soc/samsung/smartq_wm8987.c:80
   sound/soc/samsung/arndale_rt5631.c:56
   sound/soc/omap/omap-abe-twl6040.c:73
   sound/soc/omap/omap-abe-twl6040.c:99
   sound/soc/omap/n810.c:127
   sound/soc/omap/omap3pandora.c:187
drm_simple_display_pipe_funcs:
   drivers/gpu/drm/mxsfb/mxsfb_drv.c:129
sst_ops:
   sound/soc/intel/skylake/bxt-sst.c:562
fb_tile_ops:
   drivers/video/fbdev/arkfb.c:154
conf_printer:
   scripts/kconfig/confdata.c:623
   scripts/kconfig/confdata.c:530
   scripts/kconfig/confdata.c:604
olpc_ec_driver:
   arch/x86/platform/olpc/olpc.c:363
   arch/x86/platform/olpc/olpc.c:370
ath_ps_ops:
   drivers/net/wireless/ath/ath9k/init.c:107
irq_domain_ops:
   kernel/irq/generic-chip.c:437
   arch/mips/ath25/ar5312.c:124
   drivers/edac/altera_edac.c:1828
   drivers/iommu/amd_iommu.c:4256
   drivers/iommu/intel_irq_remapping.c:1402
   drivers/mfd/fsl-imx25-tsadc.c:62
   drivers/irqchip/irq-imx-gpcv2.c:203
   drivers/irqchip/irq-mbigen.c:233
   drivers/irqchip/irq-stm32-exti.c:125
alpha_agp_ops:
   arch/alpha/kernel/core_titan.c:716
ptlrpc_ctx_ops:
   drivers/staging/lustre/lustre/ptlrpc/sec_plain.c:960
   drivers/staging/lustre/lustre/ptlrpc/sec_null.c:373
rxe_ifc_ops:
   drivers/infiniband/sw/rxe/rxe_net.c:525
dev_power_governor:
   drivers/base/power/domain_governor.c:229
   drivers/base/power/domain_governor.c:237
nfcmrvl_if_ops:
   drivers/nfc/nfcmrvl/uart.c:63
nfc_digital_ops:
   drivers/nfc/port100.c:1466
   drivers/nfc/trf7970a.c:1858
snd_vx_ops:
   sound/pcmcia/vx/vxp_ops.c:597
   sound/pci/vx222/vx222_ops.c:1000
   sound/pci/vx222/vx222_ops.c:1020
kernfs_syscall_ops:
   kernel/cgroup/cgroup.c:4415
hid_ll_driver:
   drivers/hid/i2c-hid/i2c-hid.c:851
lcd_ops:
   drivers/hid/hid-picolcd_lcd.c:59
super_operations:
   drivers/staging/lustre/lustre/llite/super25.c:73
platform_suspend_ops:
   arch/arm/mach-mxs/pm.c:33
nf_exp_event_notifier:
   net/netfilter/nf_conntrack_netlink.c:3263
kvm_mips_callbacks:
   arch/mips/kvm/trap_emul.c:648
snd_rawmidi_ops:
   sound/usb/6fire/midi.c:142
   sound/usb/6fire/midi.c:149
   sound/drivers/mts64.c:752
   sound/drivers/mts64.c:758
   sound/firewire/bebob/bebob_midi.c:115
   sound/firewire/bebob/bebob_midi.c:109
   drivers/hid/hid-prodikeys.c:596
dev_pm_ops:
   drivers/i2c/busses/i2c-omap.c:1507
omap_dss_driver:
   drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c:357
   drivers/gpu/drm/omapdrm/displays/panel-dpi.c:153
radeon_audio_funcs:
   drivers/gpu/drm/radeon/radeon_audio.c:152
   drivers/gpu/drm/radeon/radeon_audio.c:215
   drivers/gpu/drm/radeon/radeon_audio.c:232
   drivers/gpu/drm/radeon/radeon_audio.c:187
   drivers/gpu/drm/radeon/radeon_audio.c:203
   drivers/gpu/drm/radeon/radeon_audio.c:164
   drivers/gpu/drm/radeon/radeon_audio.c:178
hwicap_driver_config:
   drivers/char/xilinx_hwicap/xilinx_hwicap.c:714
   drivers/char/xilinx_hwicap/xilinx_hwicap.c:707
mxc_extra_irq:
   arch/arm/mach-imx/avic.c:79
kvm_io_device_ops:
   virt/kvm/arm/vgic/vgic-mmio.c:550
sh_mobile_lcdc_sys_bus_ops:
   drivers/video/fbdev/sh_mobile_lcdcfb.c:441
drm_mode_config_funcs:
   drivers/gpu/drm/arc/arcpgu_drv.c:34
ufs_qcom_phy_specific_ops:
   drivers/phy/phy-qcom-ufs-qmp-20nm.c:166
pci_controller_ops:
   arch/powerpc/platforms/powermac/pci.c:1257
pwrdm_ops:
   arch/arm/mach-omap2/prm2xxx.c:198
   arch/arm/mach-omap2/prm33xx.c:356
ace_reg_ops:
   drivers/block/xsysace.c:337
   drivers/block/xsysace.c:330
   drivers/block/xsysace.c:265
e1000_nvm_operations:
   drivers/net/ethernet/intel/igb/e1000_82575.c:2931
amd_irte_ops:
   drivers/iommu/amd_iommu.c:4101
   drivers/iommu/amd_iommu.c:4111
sa1100_port_fns:
   arch/arm/mach-sa1100/badge4.c:317
hwbus_ops:
   drivers/net/wireless/st/cw1200/cw1200_sdio.c:268
   drivers/net/wireless/st/cw1200/cw1200_spi.c:355
i40iw_aeq_ops:
   drivers/infiniband/hw/i40iw/i40iw_ctrl.c:4881
e1000_mac_operations:
   drivers/net/ethernet/intel/igb/e1000_82575.c:2911
nfc_ops:
   net/nfc/digital_core.c:742
   net/nfc/nci/core.c:1104
snd_ac97_bus_ops:
   sound/pci/sis7019.c:1020
   sound/soc/cirrus/ep93xx-ac97.c:245
   sound/soc/pxa/pxa2xx-ac97.c:46
   sound/arm/aaci.c:830
   sound/atmel/ac97c.c:948
hnae_ae_ops:
   drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c:830
v4l2_m2m_ops:
   drivers/media/platform/exynos-gsc/gsc-m2m.c:750
   drivers/media/platform/vim2m.c:984
   drivers/media/platform/m2m-deinterlace.c:991
menelaus_platform_data:
   arch/arm/mach-omap2/board-n8x0.c:571
fsnotify_ops:
   fs/notify/dnotify/dnotify.c:139
io_pgtable_init_fns:
   drivers/iommu/io-pgtable-arm.c:883
   drivers/iommu/io-pgtable-arm.c:878
   drivers/iommu/io-pgtable-arm.c:893
   drivers/iommu/io-pgtable-arm.c:888
pci_ops:
   arch/mips/pci/pci-sb1250.c:184
   arch/mips/pci/pci-ar71xx.c:224
   arch/mips/pci/ops-sni.c:161
   arch/mips/pci/ops-sni.c:86
   arch/mips/pci/pci-alchemy.c:295
   arch/mips/pci/ops-msc.c:144
   arch/frv/mb93090-mb00/pci-vdk.c:170
   arch/powerpc/kernel/pci-common.c:1604
   arch/powerpc/platforms/powermac/pci.c:427
   arch/powerpc/platforms/powermac/pci.c:380
   arch/powerpc/platforms/powermac/pci.c:165
   arch/powerpc/platforms/powermac/pci.c:200
   arch/powerpc/platforms/52xx/efika.c:64
   arch/arm/mach-footbridge/dc21285.c:131
   arch/sparc/kernel/pci_common.c:312
   arch/sparc/kernel/pci_common.c:251
   arch/x86/pci/intel_mid_pci.c:274
   drivers/pci/host/pci-hyperv.c:688
configfs_item_operations:
   drivers/nvme/target/configfs.c:637
   drivers/nvme/target/configfs.c:735
   drivers/nvme/target/configfs.c:507
   drivers/nvme/target/configfs.c:788
   drivers/nvme/target/configfs.c:393
   drivers/nvme/target/configfs.c:848
   drivers/nvme/target/configfs.c:580
   drivers/usb/gadget/function/f_serial.c:268
   drivers/usb/gadget/function/f_uac1.c:780
   drivers/usb/gadget/function/f_acm.c:771
sh_clk_ops:
   drivers/sh/clk/cpg.c:88
   drivers/sh/clk/cpg.c:201
   drivers/sh/clk/cpg.c:195
   drivers/sh/clk/cpg.c:327
   drivers/sh/clk/cpg.c:380
   drivers/sh/clk/cpg.c:459
smp_ops:
   arch/x86/kernel/smp.c:341
sbc_ops:
   drivers/target/target_core_iblock.c:820
vdec_common_if:
   drivers/media/platform/mtk-vcodec/vdec/vdec_vp9_if.c:955
hdmi_phy_ops:
   drivers/gpu/drm/sti/sti_hdmi_tx3g4c28phy.c:208
kset_uevent_ops:
   fs/dlm/lockspace.c:238
clkdm_ops:
   arch/arm/mach-omap2/cm2xxx.c:317
item_operations:
   fs/reiserfs/item_ops.c:106
   fs/reiserfs/item_ops.c:341
   fs/reiserfs/item_ops.c:726
   fs/reiserfs/item_ops.c:628
   fs/reiserfs/item_ops.c:197
smp_operations:
   arch/arm/mach-shmobile/platsmp-apmu.c:219
intel_gvt_gtt_gma_ops:
   drivers/gpu/drm/i915/gvt/gtt.c:420
mii_phy_ops:
   drivers/net/ethernet/ibm/emac/phy.c:458
   drivers/net/ethernet/ibm/emac/phy.c:442
   drivers/net/ethernet/ibm/emac/phy.c:279
   drivers/net/ethernet/ibm/emac/phy.c:423
   drivers/net/ethernet/ibm/emac/phy.c:343
   drivers/net/ethernet/ibm/emac/phy.c:483
drm_fb_helper_funcs:
   drivers/gpu/drm/virtio/virtgpu_fb.c:369
tegra_cpu_car_ops:
   drivers/clk/tegra/clk-tegra114.c:1146
knav_range_ops:
   drivers/soc/ti/knav_qmss_acc.c:470
i40iw_cq_ops:
   drivers/infiniband/hw/i40iw/i40iw_uk.c:929
i40iw_cqp_ops:
   drivers/infiniband/hw/i40iw/i40iw_ctrl.c:4853
pccard_operations:
   drivers/pcmcia/at91_cf.c:205
   drivers/pcmcia/soc_common.c:729
   drivers/pcmcia/xxs1500_ss.c:199
intel_uncore_ops:
   arch/x86/events/intel/uncore_snbep.c:1078
   arch/x86/events/intel/uncore_snbep.c:994
   arch/x86/events/intel/uncore_snbep.c:653
   arch/x86/events/intel/uncore_snbep.c:642
   arch/x86/events/intel/uncore_snbep.c:884
   arch/x86/events/intel/uncore_snbep.c:3590
   arch/x86/events/intel/uncore_snbep.c:3495
   arch/x86/events/intel/uncore_snbep.c:3442
   arch/x86/events/intel/uncore_snbep.c:3380
   arch/x86/events/intel/uncore_snbep.c:3621
   arch/x86/events/intel/uncore_snbep.c:2094
   arch/x86/events/intel/uncore_snbep.c:2000
   arch/x86/events/intel/uncore_snbep.c:1715
   arch/x86/events/intel/uncore_snbep.c:1607
   arch/x86/events/intel/uncore_snbep.c:1343
   arch/x86/events/intel/uncore_snbep.c:1339
   arch/x86/events/intel/uncore_snbep.c:1695
   arch/x86/events/intel/uncore_snbep.c:1579
   arch/x86/events/intel/uncore_snbep.c:2403
   arch/x86/events/intel/uncore_snbep.c:2610
   arch/x86/events/intel/uncore_snbep.c:2658
   arch/x86/events/intel/uncore_snbep.c:2752
   arch/x86/events/intel/uncore_snbep.c:2563
drm_encoder_helper_funcs:
   drivers/gpu/drm/rockchip/inno_hdmi.c:533
nf_ct_event_notifier:
   net/netfilter/nf_conntrack_netlink.c:3259
kvm_pmu_ops:
   arch/x86/kvm/pmu_intel.c:345
w100_tg_info:
   arch/arm/mach-pxa/eseries.c:857
nfc_hci_ops:
   drivers/nfc/st21nfca/core.c:926
configfs_group_operations:
   drivers/nvme/target/configfs.c:675
   drivers/nvme/target/configfs.c:760
   drivers/nvme/target/configfs.c:829
   drivers/nvme/target/configfs.c:432
   drivers/nvme/target/configfs.c:871
   drivers/iio/industrialio-sw-device.c:154
access_method:
   drivers/scsi/hpsa.h:608
   drivers/scsi/hpsa.h:601
   drivers/scsi/hpsa.h:594
   drivers/scsi/hpsa.h:587
   drivers/scsi/hpsa.h:580
   drivers/block/cciss.h:420
   drivers/block/cciss.h:404
   drivers/block/cciss.h:412
dma_buf_ops:
   drivers/gpu/drm/udl/udl_dmabuf.c:189
arm_pmu_platdata:
   arch/arm/mach-ux500/cpu-db8500.c:138
dcon_platform_data:
   drivers/staging/olpc_dcon/olpc_dcon_xo_1_5.c:156
   drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:200
qla_tgt_func_tmpl:
   drivers/scsi/qla2xxx/tcm_qla2xxx.c:1557
cfs_hash_lock_ops:
   drivers/staging/lustre/lnet/libcfs/hash.c:191
   drivers/staging/lustre/lnet/libcfs/hash.c:199
   drivers/staging/lustre/lnet/libcfs/hash.c:159
   drivers/staging/lustre/lnet/libcfs/hash.c:167
   drivers/staging/lustre/lnet/libcfs/hash.c:175
   drivers/staging/lustre/lnet/libcfs/hash.c:183
mdesc_mem_ops:
   arch/sparc/kernel/mdesc.c:125
   arch/sparc/kernel/mdesc.c:163
pinctrl_ops:
   drivers/pinctrl/vt8500/pinctrl-wmt.c:412
   drivers/pinctrl/pinctrl-st.c:864
i2c_algorithm:
   drivers/media/pci/dm1105/dm1105.c:578
   drivers/media/pci/ngene/ngene-i2c.c:157
   drivers/media/pci/mantis/mantis_i2c.c:215
   drivers/media/common/b2c2/flexcop-i2c.c:220
   drivers/media/usb/pvrusb2/pvrusb2-i2c-core.c:521
   drivers/media/usb/dvb-usb-v2/az6007.c:839
   drivers/media/usb/usbvision/usbvision-i2c.c:170
   drivers/media/usb/dvb-usb/pctv452e.c:903
   drivers/media/usb/dvb-usb/friio.c:453
   drivers/i2c/busses/i2c-xgene-slimpro.c:375
   drivers/i2c/busses/i2c-designware-core.c:825
   drivers/i2c/busses/i2c-davinci.c:736
   drivers/i2c/busses/i2c-robotfuzz-osif.c:120
fsi_stream_handler:
   sound/soc/sh/fsi.c:1225
   sound/soc/sh/fsi.c:1231
   sound/soc/sh/fsi.c:1426
portals_handle_ops:
   drivers/staging/lustre/lustre/ldlm/ldlm_lock.c:383
max197_platform_data:
   arch/x86/platform/ts5500/ts5500.c:277
intel_sst_ops:
   sound/soc/intel/atom/sst/sst.c:168
pic32_sdhci_platform_data:
   arch/mips/pic32/pic32mzda/init.c:114
snd_info_entry_ops:
   sound/pci/mixart/mixart.c:1178
   sound/pci/mixart/mixart.c:1174
   sound/drivers/opl4/opl4_proc.c:92
rchan_callbacks:
   kernel/relay.c:321
   drivers/net/wireless/ath/ath9k/common-spectral.c:1067
pci_port_ops:
   drivers/parisc/dino.c:289
mwifiex_if_ops:
   drivers/net/wireless/marvell/mwifiex/usb.c:1188
i40iw_ceq_ops:
   drivers/infiniband/hw/i40iw/i40iw_ctrl.c:4871
b53_io_ops:
   drivers/net/dsa/bcm_sf2.c:967
thermal_zone_device_ops:
   drivers/platform/x86/acerhdf.c:486
vio_driver_ops:
   drivers/net/ethernet/sun/ldmvsw.c:256
enclosure_component_callbacks:
   drivers/scsi/ses.c:365
drm_plane_helper_funcs:
   drivers/gpu/drm/sun4i/sun4i_layer.c:58
cpu_user_fns:
   arch/arm/mm/copypage-v4wb.c:92
   arch/arm/mm/copypage-v4mc.c:112
   arch/arm/mm/copypage-fa.c:83
   arch/arm/mm/copypage-v4wt.c:85
cfs_hash_hlist_ops:
   drivers/staging/lustre/lnet/libcfs/hash.c:435
   drivers/staging/lustre/lnet/libcfs/hash.c:442
   drivers/staging/lustre/lnet/libcfs/hash.c:449
   drivers/staging/lustre/lnet/libcfs/hash.c:456
ocfs2_stack_operations:
   fs/ocfs2/stack_user.c:1090
   fs/ocfs2/stack_o2cb.c:417
vb2_ops:
   drivers/media/platform/pxa_camera.c:1533
   drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c:624
ti_clk_ll_ops:
   arch/arm/mach-omap2/clock.c:57
i40iw_hmc_ops:
   drivers/infiniband/hw/i40iw/i40iw_ctrl.c:4950
bau_operations:
   arch/x86/platform/uv/tlb_uv.c:38
   arch/x86/platform/uv/tlb_uv.c:28
machine_ops:
   arch/sh/kernel/reboot.c:67
snd_midi_op:
   sound/drivers/opl3/opl3_seq.c:145
pv_init_ops:
   arch/x86/kernel/paravirt.c:306
drm_connector_funcs:
   drivers/gpu/drm/rockchip/inno_hdmi.c:595
plat_smp_ops:
   arch/mips/paravirt/paravirt-smp.c:135
   arch/arc/kernel/mcip.c:111
rtl_btc_ops:
   drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c:32
unwind_libunwind_ops:
   tools/perf/util/unwind-libunwind-local.c:688
ldlm_valblock_ops:
   drivers/staging/lustre/lustre/mdc/mdc_request.c:2560
ttm_bo_driver:
   drivers/gpu/drm/ast/ast_ttm.c:228
   drivers/gpu/drm/qxl/qxl_ttm.c:384
intel_gvt_gtt_pte_ops:
   drivers/gpu/drm/i915/gvt/gtt.c:410
exynos_drm_crtc_ops:
   drivers/gpu/drm/exynos/exynos5433_drm_decon.c:473
dma_ops:
   arch/arm/mach-rpc/dma.c:323
   arch/arm/mach-rpc/dma.c:243
   arch/arm/mach-rpc/dma.c:309
superhyway_ops:
   arch/sh/drivers/superhyway/ops-sh4-202.c:156
regulator_ops:
   drivers/regulator/ad5398.c:184
   drivers/regulator/88pm8607.c:223
   drivers/regulator/88pm8607.c:232
pcie_host_ops:
   drivers/pci/host/pcie-qcom.c:636
   drivers/pci/host/pcie-armada8k.c:162
irda_platform_data:
   arch/arm/mach-sa1100/collie.c:125
ep93xx_spi_chip_ops:
   arch/arm/mach-ep93xx/vision_ep9307.c:283
   arch/arm/mach-ep93xx/vision_ep9307.c:243
   arch/arm/mach-ep93xx/vision_ep9307.c:194
au1200fb_platdata:
   arch/mips/alchemy/devboards/db1200.c:635
wlcore_ops:
   drivers/net/wireless/ti/wl12xx/main.c:1693
snd_device_ops:
   sound/i2c/other/ak4114.c:89
   sound/pci/sis7019.c:1318
   sound/core/compress_offload.c:1074
   sound/sparc/cs4231.c:1792
   sound/sparc/cs4231.c:1958
   sound/drivers/pcsp/pcsp.c:45
   drivers/hid/hid-prodikeys.c:609
svc_xprt_ops:
   net/sunrpc/svcsock.c:679
   net/sunrpc/svcsock.c:1255
   net/sunrpc/svcsock.c:1221
bfin_sport_transfer_ops:
   drivers/spi/spi-bfin-sport.c:201
   drivers/spi/spi-bfin-sport.c:241
fmc_operations:
   drivers/fmc/fmc-fakedev.c:234
virtio_config_ops:
   drivers/misc/mic/vop/vop_main.c:425
intel_gvt_sched_policy_ops:
   drivers/gpu/drm/i915/gvt/sched_policy.c:237
plat_lcd_data:
   arch/arm/mach-s3c64xx/mach-smartq.c:232
trace_lock_handler:
   tools/perf/builtin-lock.c:646
snd_i2c_bit_ops:
   sound/pci/ice1712/ews.c:131
   sound/isa/gus/interwave.c:204
sas_function_template:
   drivers/message/fusion/mptsas.c:2350
rpc_xprt_ops:
   net/sunrpc/xprtsock.c:2689
   net/sunrpc/xprtsock.c:2711
   net/sunrpc/xprtsock.c:2671
   net/sunrpc/xprtsock.c:2741
   net/sunrpc/xprtrdma/svc_rdma_backchannel.c:280
scpi_ops:
   drivers/firmware/arm_scpi.c:754
mic_smpt_ops:
   drivers/misc/mic/host/mic_x100.c:549
esp_driver_ops:
   drivers/scsi/mac_esp.c:468
mic_hw_intr_ops:
   drivers/misc/mic/host/mic_x100.c:578
ipmi_user_hndl:
   drivers/char/ipmi/ipmi_watchdog.c:988
mmc_host_ops:
   drivers/mmc/host/omap_hsmmc.c:1829
i40iw_ccq_ops:
   drivers/infiniband/hw/i40iw/i40iw_ctrl.c:4862
iommu_table_ops:
   arch/powerpc/sysdev/dart_iommu.c:335
   arch/powerpc/platforms/pseries/iommu.c:568
   arch/powerpc/platforms/pseries/iommu.c:654
au1k_irda_platform_data:
   arch/mips/alchemy/devboards/db1000.c:409
ins_ops:
   tools/perf/util/annotate.c:459
   tools/perf/util/annotate.c:455
   tools/perf/util/annotate.c:403
   tools/perf/util/annotate.c:339
   tools/perf/util/annotate.c:252
   tools/perf/util/annotate.c:444
   tools/perf/util/annotate.c:213
thermal_cooling_device_ops:
   drivers/platform/x86/intel_menlow.c:145
   drivers/platform/x86/acerhdf.c:560
intel_mid_ops:
   arch/x86/platform/intel-mid/mfld.c:22
   arch/x86/platform/intel-mid/mrfld.c:97
board_ops:
   drivers/tty/serial/jsm/jsm_neo.c:1396
at91_pinctrl_mux_ops:
   drivers/pinctrl/pinctrl-at91.c:636
   drivers/pinctrl/pinctrl-at91.c:617
   drivers/pinctrl/pinctrl-at91.c:608
arm_dma_allocator:
   arch/arm/mm/dma-mapping.c:690
   arch/arm/mm/dma-mapping.c:746
   arch/arm/mm/dma-mapping.c:725
   arch/arm/mm/dma-mapping.c:709
concap_device_ops:
   drivers/isdn/i4l/isdn_concap.c:82
pn533_phy_ops:
   drivers/nfc/pn533/usb.c:437
ion_heap_ops:
   drivers/staging/android/ion/ion_chunk_heap.c:120
pv_cpu_ops:
   arch/x86/kernel/paravirt.c:327
wl1251_if_operations:
   drivers/net/wireless/ti/wl1251/sdio.c:216
csio_hw_chip_ops:
   drivers/scsi/csiostor/csio_hw_t5.c:390
rio_ops:
   drivers/rapidio/devices/tsi721.c:2629
lirc_rx51_platform_data:
   arch/arm/mach-omap2/pdata-quirks.c:487
tc6387xb_platform_data:
   arch/arm/mach-pxa/eseries.c:137
rtc_class_ops:
   drivers/rtc/rtc-imxdi.c:671
bnx2x_func_sp_drv_ops:
   drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c:13565
i40e_ops:
   drivers/net/ethernet/intel/i40e/i40e_client.c:62
sn_pcibus_provider:
   arch/ia64/sn/pci/tioca_provider.c:660
v4l2_subdev_pad_ops:
   drivers/media/i2c/m5mols/m5mols_core.c:654
   drivers/media/i2c/mt9t001.c:833
   drivers/media/platform/exynos4-is/fimc-capture.c:1698
bfin_cpu_pm_fns:
   arch/blackfin/mach-bf609/pm.c:285
mbox_chan_ops:
   drivers/mailbox/mailbox-xgene-slimpro.c:177
msi_domain_ops:
   kernel/irq/msi.c:220
   drivers/pci/host/pci-hyperv.c:961
i40iw_priv_cq_ops:
   drivers/infiniband/hw/i40iw/i40iw_ctrl.c:4911
i40iw_priv_qp_ops:
   drivers/infiniband/hw/i40iw/i40iw_ctrl.c:4896
rproc_fw_ops:
   drivers/remoteproc/st_slim_rproc.c:226
s3c_ide_platdata:
   arch/arm/mach-s3c64xx/mach-smdk6410.c:243
gpmc_nand_ops:
   drivers/memory/omap-gpmc.c:1124
drm_mode_config_helper_funcs:
   drivers/gpu/drm/arm/malidp_drv.c:104
samsung_gpio_pm:
   arch/arm/plat-samsung/pm-gpio.c:303
   arch/arm/plat-samsung/pm-gpio.c:192
   arch/arm/plat-samsung/pm-gpio.c:65
cosm_hw_ops:
   drivers/misc/mic/host/mic_boot.c:589
usb_ep_ops:
   drivers/usb/gadget/udc/mv_u3d_core.c:998
   drivers/usb/gadget/udc/pxa27x_udc.c:1476
   drivers/usb/gadget/udc/fsl_udc_core.c:1121
   drivers/usb/dwc2/gadget.c:4089
pwm_omap_dmtimer_pdata:
   arch/arm/mach-omap2/pdata-quirks.c:462
xen_pci_frontend_ops:
   drivers/pci/xen-pcifront.c:374
saa7146_use_ops:
   drivers/media/common/saa7146/saa7146_vbi.c:492
s5p_mfc_hw_cmds:
   drivers/media/platform/s5p-mfc/s5p_mfc_cmd_v6.c:152
hdmi_codec_ops:
   drivers/gpu/drm/bridge/dw-hdmi-i2s-audio.c:85
dm_space_map:
   drivers/md/persistent-data/dm-space-map-disk.c:224
   drivers/md/persistent-data/dm-space-map-metadata.c:547
   drivers/md/persistent-data/dm-space-map-metadata.c:674
gpio_methods:
   sound/aoa/core/gpio-feature.c:406
   sound/aoa/core/gpio-pmf.c:236
stmp3xxx_wdt_pdata:
   drivers/rtc/rtc-stmp3xxx.c:104
mpt_pci_driver:
   drivers/message/fusion/mptctl.c:2993

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Designated initializers, struct randomization and addressing?
  2017-01-04 16:55         ` Stephen Hemminger
  2017-01-04 17:37           ` Julia Lawall
@ 2017-01-04 22:30           ` Kees Cook
  1 sibling, 0 replies; 21+ messages in thread
From: Kees Cook @ 2017-01-04 22:30 UTC (permalink / raw)
  To: Stephen Hemminger
  Cc: Julia Lawall, devel, Greg Kroah-Hartman, LKML, Bruno Faccini,
	Oleg Drokin, Vitaly Fertman, Joe Perches, Andreas Dilger,
	John L. Hammond, Bruce Korb, Emoly Liu

On Wed, Jan 4, 2017 at 8:55 AM, Stephen Hemminger
<stephen@networkplumber.org> wrote:
> On Tue, 3 Jan 2017 22:35:26 -0800
> Kees Cook <keescook@chromium.org> wrote:
>
>> For randstruct and constify, the automatic selection is done on
>> structures with only function pointers. (Additional structures can be
>> added via a compiler attribute marking.)
>>
>> See is_pure_ops_struct():
>
> Is there anyway to use this plugin to identify pure_ops structures not already marked as const?

That's what the constify plugin does, yes. Though to deal with cases
where something rarely written to, the
pax_open_kernel/pax_close_kernel annotations are needed, which is why
I don't have a sane port of the constify plugin yet. We need to build
upstream-acceptable infrastructure for the write-rarely case. But, as
Julia replied, yes, there's a huge list. :)

-Kees

-- 
Kees Cook
Nexus Security

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2017-01-04 22:31 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-12-17  1:00 [PATCH] staging: lustre: ldlm: use designated initializers Kees Cook
2016-12-19 16:22 ` James Simmons
2016-12-19 16:47   ` Bruce Korb
2016-12-19 17:12     ` James Simmons
2016-12-20  7:10     ` Dan Carpenter
2016-12-20 14:57       ` Hammond, John
2016-12-20 16:47         ` Bruce Korb
2016-12-20 18:52           ` Dan Carpenter
2016-12-20 19:07         ` Dan Carpenter
2016-12-20 19:46           ` Kees Cook
     [not found]   ` <CY4PR11MB175166F4D71AC6994081356BCB910@CY4PR11MB1751.namprd11.prod.outlook.com>
2016-12-19 17:11     ` [lustre-devel] " James Simmons
2016-12-20 10:40   ` Dan Carpenter
2016-12-20 17:29 ` Designated initializers, struct randomization and addressing? Joe Perches
2017-01-03 23:47   ` Kees Cook
2017-01-03 23:55     ` Bruce Korb
2017-01-04  0:13       ` Kees Cook
2017-01-04  6:27     ` Julia Lawall
2017-01-04  6:35       ` Kees Cook
2017-01-04 16:55         ` Stephen Hemminger
2017-01-04 17:37           ` Julia Lawall
2017-01-04 22:30           ` Kees Cook

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).