linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V10] fixup: audit: implement audit by executable
@ 2015-08-08 14:20 Richard Guy Briggs
  2015-08-10 16:22 ` Paul Moore
  0 siblings, 1 reply; 9+ messages in thread
From: Richard Guy Briggs @ 2015-08-08 14:20 UTC (permalink / raw)
  To: linux-audit, linux-kernel
  Cc: Richard Guy Briggs, sgrubb, pmoore, eparis, peter

The Intel build-bot detected a sparse warning with with a patch I posted a
couple of days ago that was accepted in the audit/next tree:

Subject: [linux-next:master 6689/6751] kernel/audit_watch.c:543:36: sparse: dereference of noderef expression
Date: Friday, August 07, 2015, 06:57:55 PM
From: kbuild test robot <fengguang.wu@intel.com>
tree:   git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   e6455bc5b91f41f842f30465c9193320f0568707
commit: 2e3a8aeb63e5335d4f837d453787c71bcb479796 [6689/6751] Merge remote- tracking branch 'audit/next'
sparse warnings: (new ones prefixed by >>)
>> kernel/audit_watch.c:543:36: sparse: dereference of noderef expression
   kernel/audit_watch.c:544:28: sparse: dereference of noderef expression

34d99af5 Richard Guy Briggs 2015-08-05  541  int audit_exe_compare(struct task_struct *tsk, struct audit_fsnotify_mark *mark)
34d99af5 Richard Guy Briggs 2015-08-05  542  {
34d99af5 Richard Guy Briggs 2015-08-05 @543     unsigned long ino = tsk->mm- >exe_file->f_inode->i_ino;
34d99af5 Richard Guy Briggs 2015-08-05  544     dev_t dev = tsk->mm->exe_file- >f_inode->i_sb->s_dev;

:::::: The code at line 543 was first introduced by commit
:::::: 34d99af52ad40bd498ba66970579a5bc1fb1a3bc audit: implement audit by executable

tsk->mm->exe_file requires RCU access.  The warning was reproduceable by adding
"C=1 CF=-D__CHECK_ENDIAN__" to the build command, and verified eliminated with
this patch.

Signed-off-by: Richard Guy Briggs <rgb@redhat.com>
---
 kernel/audit_watch.c |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/kernel/audit_watch.c b/kernel/audit_watch.c
index 1255dbf..656c7e9 100644
--- a/kernel/audit_watch.c
+++ b/kernel/audit_watch.c
@@ -540,8 +540,14 @@ int audit_dupe_exe(struct audit_krule *new, struct audit_krule *old)
 
 int audit_exe_compare(struct task_struct *tsk, struct audit_fsnotify_mark *mark)
 {
-	unsigned long ino = tsk->mm->exe_file->f_inode->i_ino;
-	dev_t dev = tsk->mm->exe_file->f_inode->i_sb->s_dev;
-
+	struct file *exe_file;
+	unsigned long ino;
+	dev_t dev;
+
+	rcu_read_lock();
+	exe_file = rcu_dereference(tsk->mm->exe_file);
+	ino = exe_file->f_inode->i_ino;
+	dev = exe_file->f_inode->i_sb->s_dev;
+	rcu_read_unlock();
 	return audit_mark_compare(mark, ino, dev);
 }
-- 
1.7.1


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

* Re: [PATCH V10] fixup: audit: implement audit by executable
  2015-08-08 14:20 [PATCH V10] fixup: audit: implement audit by executable Richard Guy Briggs
@ 2015-08-10 16:22 ` Paul Moore
  2015-08-10 17:29   ` Richard Guy Briggs
  0 siblings, 1 reply; 9+ messages in thread
From: Paul Moore @ 2015-08-10 16:22 UTC (permalink / raw)
  To: Richard Guy Briggs; +Cc: linux-audit, linux-kernel, sgrubb, eparis, peter

On Saturday, August 08, 2015 10:20:25 AM Richard Guy Briggs wrote:
> diff --git a/kernel/audit_watch.c b/kernel/audit_watch.c
> index 1255dbf..656c7e9 100644
> --- a/kernel/audit_watch.c
> +++ b/kernel/audit_watch.c
> @@ -540,8 +540,14 @@ int audit_dupe_exe(struct audit_krule *new, struct
> audit_krule *old)
> 
>  int audit_exe_compare(struct task_struct *tsk, struct audit_fsnotify_mark
> *mark) {
> -	unsigned long ino = tsk->mm->exe_file->f_inode->i_ino;
> -	dev_t dev = tsk->mm->exe_file->f_inode->i_sb->s_dev;
> -
> +	struct file *exe_file;
> +	unsigned long ino;
> +	dev_t dev;
> +
> +	rcu_read_lock();
> +	exe_file = rcu_dereference(tsk->mm->exe_file);

This line is triggering a sparse error on my system:

 # make C=1 M=kernel
 ...
   CHECK   kernel/audit_watch.c
 kernel/audit_watch.c:548:20: error: incompatible types in comparison  
 expression (different address spaces)

For the record I'm using gcc v4.9.3 and sparse v0.5.0.

> +	ino = exe_file->f_inode->i_ino;
> +	dev = exe_file->f_inode->i_sb->s_dev;
> +	rcu_read_unlock();
>  	return audit_mark_compare(mark, ino, dev);
>  }

-- 
paul moore
security @ redhat


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

* Re: [PATCH V10] fixup: audit: implement audit by executable
  2015-08-10 16:22 ` Paul Moore
@ 2015-08-10 17:29   ` Richard Guy Briggs
  2015-08-10 18:43     ` Paul Moore
  0 siblings, 1 reply; 9+ messages in thread
From: Richard Guy Briggs @ 2015-08-10 17:29 UTC (permalink / raw)
  To: Paul Moore; +Cc: linux-audit, linux-kernel, sgrubb, eparis, peter

On 15/08/10, Paul Moore wrote:
> On Saturday, August 08, 2015 10:20:25 AM Richard Guy Briggs wrote:
> > diff --git a/kernel/audit_watch.c b/kernel/audit_watch.c
> > index 1255dbf..656c7e9 100644
> > --- a/kernel/audit_watch.c
> > +++ b/kernel/audit_watch.c
> > @@ -540,8 +540,14 @@ int audit_dupe_exe(struct audit_krule *new, struct
> > audit_krule *old)
> > 
> >  int audit_exe_compare(struct task_struct *tsk, struct audit_fsnotify_mark
> > *mark) {
> > -	unsigned long ino = tsk->mm->exe_file->f_inode->i_ino;
> > -	dev_t dev = tsk->mm->exe_file->f_inode->i_sb->s_dev;
> > -
> > +	struct file *exe_file;
> > +	unsigned long ino;
> > +	dev_t dev;
> > +
> > +	rcu_read_lock();
> > +	exe_file = rcu_dereference(tsk->mm->exe_file);
> 
> This line is triggering a sparse error on my system:
> 
>  # make C=1 M=kernel
>  ...
>    CHECK   kernel/audit_watch.c
>  kernel/audit_watch.c:548:20: error: incompatible types in comparison  
>  expression (different address spaces)

That's odd.  I got this complaint when I had forgotten to add the
rcu_dereference() call, but not in its current state.  Mind you, I get
swamped with errors and warnings from all over the system (starting with
ptrace.c, signal.c, exit.c, fork.c, audit.c, ftrace.c,
selinux/netnode.c, ...) when I add
"M=kernel" to my build command, so I start to wonder how valid that
result is or that flag.  Where is M=kernel documented?

> For the record I'm using gcc v4.9.3 and sparse v0.5.0.

gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
sparse 0.4.4-7.el6

> > +	ino = exe_file->f_inode->i_ino;
> > +	dev = exe_file->f_inode->i_sb->s_dev;
> > +	rcu_read_unlock();
> >  	return audit_mark_compare(mark, ino, dev);
> >  }
> 
> -- 
> paul moore
> security @ redhat
> 

- RGB

--
Richard Guy Briggs <rbriggs@redhat.com>
Senior Software Engineer, Kernel Security, AMER ENG Base Operating Systems, Red Hat
Remote, Ottawa, Canada
Voice: +1.647.777.2635, Internal: (81) 32635, Alt: +1.613.693.0684x3545

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

* Re: [PATCH V10] fixup: audit: implement audit by executable
  2015-08-10 17:29   ` Richard Guy Briggs
@ 2015-08-10 18:43     ` Paul Moore
  2015-08-11  4:15       ` Richard Guy Briggs
  0 siblings, 1 reply; 9+ messages in thread
From: Paul Moore @ 2015-08-10 18:43 UTC (permalink / raw)
  To: Richard Guy Briggs; +Cc: linux-audit, linux-kernel, sgrubb, eparis, peter

On Monday, August 10, 2015 01:29:43 PM Richard Guy Briggs wrote:
> On 15/08/10, Paul Moore wrote:
> > On Saturday, August 08, 2015 10:20:25 AM Richard Guy Briggs wrote:
> > > diff --git a/kernel/audit_watch.c b/kernel/audit_watch.c
> > > index 1255dbf..656c7e9 100644
> > > --- a/kernel/audit_watch.c
> > > +++ b/kernel/audit_watch.c
> > > @@ -540,8 +540,14 @@ int audit_dupe_exe(struct audit_krule *new, struct
> > > audit_krule *old)
> > > 
> > >  int audit_exe_compare(struct task_struct *tsk, struct
> > >  audit_fsnotify_mark
> > > 
> > > *mark) {
> > > -	unsigned long ino = tsk->mm->exe_file->f_inode->i_ino;
> > > -	dev_t dev = tsk->mm->exe_file->f_inode->i_sb->s_dev;
> > > -
> > > +	struct file *exe_file;
> > > +	unsigned long ino;
> > > +	dev_t dev;
> > > +
> > > +	rcu_read_lock();
> > > +	exe_file = rcu_dereference(tsk->mm->exe_file);
> > 
> > This line is triggering a sparse error on my system:
> >  # make C=1 M=kernel
> >  ...
> >  
> >    CHECK   kernel/audit_watch.c
> >  
> >  kernel/audit_watch.c:548:20: error: incompatible types in comparison
> >  expression (different address spaces)
> 
> That's odd.  I got this complaint when I had forgotten to add the
> rcu_dereference() call, but not in its current state.  Mind you, I get
> swamped with errors and warnings from all over the system (starting with
> ptrace.c, signal.c, exit.c, fork.c, audit.c, ftrace.c,
> selinux/netnode.c, ...) when I add
> "M=kernel" to my build command, so I start to wonder how valid that
> result is or that flag.  Where is M=kernel documented?

I don't remember anymore, it's something I've been using so long that I've 
forgotten where I first learned of it.  The "M=<X>" flag signals that you only 
want to build a specific module/directory, e.g. M=kernel builds everything 
under kernel/ whereas M=security/selinux builds everything under 
security/selinux.

So you don't see this error?

-- 
paul moore
security @ redhat


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

* Re: [PATCH V10] fixup: audit: implement audit by executable
  2015-08-10 18:43     ` Paul Moore
@ 2015-08-11  4:15       ` Richard Guy Briggs
  2015-08-12  9:48         ` Richard Guy Briggs
  0 siblings, 1 reply; 9+ messages in thread
From: Richard Guy Briggs @ 2015-08-11  4:15 UTC (permalink / raw)
  To: Paul Moore; +Cc: linux-audit, linux-kernel, sgrubb, eparis, peter

On 15/08/10, Paul Moore wrote:
> On Monday, August 10, 2015 01:29:43 PM Richard Guy Briggs wrote:
> > On 15/08/10, Paul Moore wrote:
> > > On Saturday, August 08, 2015 10:20:25 AM Richard Guy Briggs wrote:
> > > > diff --git a/kernel/audit_watch.c b/kernel/audit_watch.c
> > > > index 1255dbf..656c7e9 100644
> > > > --- a/kernel/audit_watch.c
> > > > +++ b/kernel/audit_watch.c
> > > > @@ -540,8 +540,14 @@ int audit_dupe_exe(struct audit_krule *new, struct
> > > > audit_krule *old)
> > > > 
> > > >  int audit_exe_compare(struct task_struct *tsk, struct
> > > >  audit_fsnotify_mark
> > > > 
> > > > *mark) {
> > > > -	unsigned long ino = tsk->mm->exe_file->f_inode->i_ino;
> > > > -	dev_t dev = tsk->mm->exe_file->f_inode->i_sb->s_dev;
> > > > -
> > > > +	struct file *exe_file;
> > > > +	unsigned long ino;
> > > > +	dev_t dev;
> > > > +
> > > > +	rcu_read_lock();
> > > > +	exe_file = rcu_dereference(tsk->mm->exe_file);
> > > 
> > > This line is triggering a sparse error on my system:
> > >  # make C=1 M=kernel
> > >  ...
> > >  
> > >    CHECK   kernel/audit_watch.c
> > >  
> > >  kernel/audit_watch.c:548:20: error: incompatible types in comparison
> > >  expression (different address spaces)
> > 
> > That's odd.  I got this complaint when I had forgotten to add the
> > rcu_dereference() call, but not in its current state.  Mind you, I get
> > swamped with errors and warnings from all over the system (starting with
> > ptrace.c, signal.c, exit.c, fork.c, audit.c, ftrace.c,
> > selinux/netnode.c, ...) when I add
> > "M=kernel" to my build command, so I start to wonder how valid that
> > result is or that flag.  Where is M=kernel documented?
> 
> I don't remember anymore, it's something I've been using so long that I've 
> forgotten where I first learned of it.  The "M=<X>" flag signals that you only 
> want to build a specific module/directory, e.g. M=kernel builds everything 
> under kernel/ whereas M=security/selinux builds everything under 
> security/selinux.
> 
> So you don't see this error?

No, I don't, but I see a number of unrelated ones that I will address in time...

> paul moore

- RGB

--
Richard Guy Briggs <rbriggs@redhat.com>
Senior Software Engineer, Kernel Security, AMER ENG Base Operating Systems, Red Hat
Remote, Ottawa, Canada
Voice: +1.647.777.2635, Internal: (81) 32635, Alt: +1.613.693.0684x3545

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

* Re: [PATCH V10] fixup: audit: implement audit by executable
  2015-08-11  4:15       ` Richard Guy Briggs
@ 2015-08-12  9:48         ` Richard Guy Briggs
  2015-08-12 14:21           ` Paul Moore
  0 siblings, 1 reply; 9+ messages in thread
From: Richard Guy Briggs @ 2015-08-12  9:48 UTC (permalink / raw)
  To: Paul Moore; +Cc: linux-audit, linux-kernel, sgrubb, eparis, peter

On 15/08/11, Richard Guy Briggs wrote:
> On 15/08/10, Paul Moore wrote:
> > On Monday, August 10, 2015 01:29:43 PM Richard Guy Briggs wrote:
> > > On 15/08/10, Paul Moore wrote:
> > > > On Saturday, August 08, 2015 10:20:25 AM Richard Guy Briggs wrote:
> > > > > diff --git a/kernel/audit_watch.c b/kernel/audit_watch.c
> > > > > index 1255dbf..656c7e9 100644
> > > > > --- a/kernel/audit_watch.c
> > > > > +++ b/kernel/audit_watch.c
> > > > > @@ -540,8 +540,14 @@ int audit_dupe_exe(struct audit_krule *new, struct
> > > > > audit_krule *old)
> > > > > 
> > > > >  int audit_exe_compare(struct task_struct *tsk, struct
> > > > >  audit_fsnotify_mark
> > > > > 
> > > > > *mark) {
> > > > > -	unsigned long ino = tsk->mm->exe_file->f_inode->i_ino;
> > > > > -	dev_t dev = tsk->mm->exe_file->f_inode->i_sb->s_dev;
> > > > > -
> > > > > +	struct file *exe_file;
> > > > > +	unsigned long ino;
> > > > > +	dev_t dev;
> > > > > +
> > > > > +	rcu_read_lock();
> > > > > +	exe_file = rcu_dereference(tsk->mm->exe_file);
> > > > 
> > > > This line is triggering a sparse error on my system:
> > > >  # make C=1 M=kernel
> > > >  ...
> > > >  
> > > >    CHECK   kernel/audit_watch.c
> > > >  
> > > >  kernel/audit_watch.c:548:20: error: incompatible types in comparison
> > > >  expression (different address spaces)
> > > 
> > > That's odd.  I got this complaint when I had forgotten to add the
> > > rcu_dereference() call, but not in its current state.  Mind you, I get
> > > swamped with errors and warnings from all over the system (starting with
> > > ptrace.c, signal.c, exit.c, fork.c, audit.c, ftrace.c,
> > > selinux/netnode.c, ...) when I add
> > > "M=kernel" to my build command, so I start to wonder how valid that
> > > result is or that flag.  Where is M=kernel documented?
> > 
> > I don't remember anymore, it's something I've been using so long that I've 
> > forgotten where I first learned of it.  The "M=<X>" flag signals that you only 
> > want to build a specific module/directory, e.g. M=kernel builds everything 
> > under kernel/ whereas M=security/selinux builds everything under 
> > security/selinux.
> > 
> > So you don't see this error?
> 
> No, I don't, but I see a number of unrelated ones that I will address in time...

Do you plan to push this fix to next?

> > paul moore
> 
> - RGB

- RGB

--
Richard Guy Briggs <rbriggs@redhat.com>
Senior Software Engineer, Kernel Security, AMER ENG Base Operating Systems, Red Hat
Remote, Ottawa, Canada
Voice: +1.647.777.2635, Internal: (81) 32635, Alt: +1.613.693.0684x3545

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

* Re: [PATCH V10] fixup: audit: implement audit by executable
  2015-08-12  9:48         ` Richard Guy Briggs
@ 2015-08-12 14:21           ` Paul Moore
  2015-08-12 15:19             ` Richard Guy Briggs
  0 siblings, 1 reply; 9+ messages in thread
From: Paul Moore @ 2015-08-12 14:21 UTC (permalink / raw)
  To: Richard Guy Briggs; +Cc: linux-audit, linux-kernel, sgrubb, eparis, peter

On Wednesday, August 12, 2015 05:48:48 AM Richard Guy Briggs wrote:
>
> Do you plan to push this fix to next?

Patience.  Yes, I'll be pushing this to next sometime this week; as usual I'll 
send mail when I do.

-- 
paul moore
security @ redhat


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

* Re: [PATCH V10] fixup: audit: implement audit by executable
  2015-08-12 14:21           ` Paul Moore
@ 2015-08-12 15:19             ` Richard Guy Briggs
  2015-08-13  2:30               ` Paul Moore
  0 siblings, 1 reply; 9+ messages in thread
From: Richard Guy Briggs @ 2015-08-12 15:19 UTC (permalink / raw)
  To: Paul Moore; +Cc: linux-audit, linux-kernel, sgrubb, eparis, peter

On 15/08/12, Paul Moore wrote:
> On Wednesday, August 12, 2015 05:48:48 AM Richard Guy Briggs wrote:
> >
> > Do you plan to push this fix to next?
> 
> Patience.  Yes, I'll be pushing this to next sometime this week; as usual I'll 
> send mail when I do.

Ok, no problem, I'm not rushing.  I was unsure what your intentions were
or whether there was more to do to help it happen.

> paul moore

- RGB

--
Richard Guy Briggs <rbriggs@redhat.com>
Senior Software Engineer, Kernel Security, AMER ENG Base Operating Systems, Red Hat
Remote, Ottawa, Canada
Voice: +1.647.777.2635, Internal: (81) 32635, Alt: +1.613.693.0684x3545

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

* Re: [PATCH V10] fixup: audit: implement audit by executable
  2015-08-12 15:19             ` Richard Guy Briggs
@ 2015-08-13  2:30               ` Paul Moore
  0 siblings, 0 replies; 9+ messages in thread
From: Paul Moore @ 2015-08-13  2:30 UTC (permalink / raw)
  To: Richard Guy Briggs; +Cc: linux-audit, linux-kernel, sgrubb, eparis, peter

On Wednesday, August 12, 2015 11:19:44 AM Richard Guy Briggs wrote:
> On 15/08/12, Paul Moore wrote:
> > On Wednesday, August 12, 2015 05:48:48 AM Richard Guy Briggs wrote:
> > > Do you plan to push this fix to next?
> > 
> > Patience.  Yes, I'll be pushing this to next sometime this week; as usual
> > I'll send mail when I do.
> 
> Ok, no problem, I'm not rushing.  I was unsure what your intentions were
> or whether there was more to do to help it happen.

It's merged.  I still don't know why I'm seeing that error, but the patch is 
obviously correct so I'm just going to merge it anyway and chalk it up to some 
compiler/sparse oddity.

As far as patch follow-ups, if you haven't heard back from me after four days 
or so (yes, that is as arbitrary as it sounds), it isn't a bad idea to send a 
follow-up, especially if it is a critical patch, to make sure I've seen the 
patch (things do occasionally fall through the cracks).  However, if it is 
only been a day or two and I haven't responded, rest assured I've likely seen 
your patch I'm just dealing with something else at the moment and haven't had 
the time to review/comment/merge your patch.

-- 
paul moore
security @ redhat


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

end of thread, other threads:[~2015-08-13  2:30 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-08 14:20 [PATCH V10] fixup: audit: implement audit by executable Richard Guy Briggs
2015-08-10 16:22 ` Paul Moore
2015-08-10 17:29   ` Richard Guy Briggs
2015-08-10 18:43     ` Paul Moore
2015-08-11  4:15       ` Richard Guy Briggs
2015-08-12  9:48         ` Richard Guy Briggs
2015-08-12 14:21           ` Paul Moore
2015-08-12 15:19             ` Richard Guy Briggs
2015-08-13  2:30               ` Paul Moore

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).