2015-12-30 06:24:42

by Sergey Senozhatsky

[permalink] [raw]
Subject: [RFC] is_global_init() called on global init sub-thread

Hello,

re-upping https://www.redhat.com/archives/linux-audit/2013-December/msg00086.html

Oleg Nesterov wrote:

:Because is_global_init() is only true for the main thread of /sbin/init.
:
:Just look at oom_unkillable_task(). It tries to not kill init. But, say,
:select_bad_process() can happily find a sub-thread of is_global_init()
:and still kill it.

this is still the case, isn't it? at least in some -stable kernels.
is there (or was there) any reason this change has never been committed?
(I'm particularly interested in is_global_init()).

static inline int is_global_init(struct task_struct *tsk)
{
- return tsk->pid == 1;
+ return task_tgid_nr(tsk) == 1;
}

-ss


2016-01-01 01:08:27

by Serge Hallyn

[permalink] [raw]
Subject: Re: [RFC] is_global_init() called on global init sub-thread

On Wed, Dec 30, 2015 at 03:25:42PM +0900, Sergey Senozhatsky wrote:
> Hello,
>
> re-upping https://www.redhat.com/archives/linux-audit/2013-December/msg00086.html
>
> Oleg Nesterov wrote:
>
> :Because is_global_init() is only true for the main thread of /sbin/init.
> :
> :Just look at oom_unkillable_task(). It tries to not kill init. But, say,
> :select_bad_process() can happily find a sub-thread of is_global_init()
> :and still kill it.
>
> this is still the case, isn't it? at least in some -stable kernels.
> is there (or was there) any reason this change has never been committed?
> (I'm particularly interested in is_global_init()).

... seems like it makes sense. Can you remind us which init you're having
to deal with?

> static inline int is_global_init(struct task_struct *tsk)
> {
> - return tsk->pid == 1;
> + return task_tgid_nr(tsk) == 1;
> }
>
> -ss

2016-01-01 01:12:19

by Sergey Senozhatsky

[permalink] [raw]
Subject: Re: [RFC] is_global_init() called on global init sub-thread

On (12/31/15 19:08), Serge E. Hallyn wrote:
> > re-upping https://www.redhat.com/archives/linux-audit/2013-December/msg00086.html
> >
> > Oleg Nesterov wrote:
> >
> > :Because is_global_init() is only true for the main thread of /sbin/init.
> > :
> > :Just look at oom_unkillable_task(). It tries to not kill init. But, say,
> > :select_bad_process() can happily find a sub-thread of is_global_init()
> > :and still kill it.
> >
> > this is still the case, isn't it? at least in some -stable kernels.
> > is there (or was there) any reason this change has never been committed?
> > (I'm particularly interested in is_global_init()).
>
> ... seems like it makes sense. Can you remind us which init you're having
> to deal with?
>

systemd

-ss

> > static inline int is_global_init(struct task_struct *tsk)
> > {
> > - return tsk->pid == 1;
> > + return task_tgid_nr(tsk) == 1;
> > }

2016-01-01 01:18:36

by Serge Hallyn

[permalink] [raw]
Subject: Re: [RFC] is_global_init() called on global init sub-thread

On Fri, Jan 01, 2016 at 10:10:35AM +0900, Sergey Senozhatsky wrote:
> On (12/31/15 19:08), Serge E. Hallyn wrote:
> > > re-upping https://www.redhat.com/archives/linux-audit/2013-December/msg00086.html
> > >
> > > Oleg Nesterov wrote:
> > >
> > > :Because is_global_init() is only true for the main thread of /sbin/init.
> > > :
> > > :Just look at oom_unkillable_task(). It tries to not kill init. But, say,
> > > :select_bad_process() can happily find a sub-thread of is_global_init()
> > > :and still kill it.
> > >
> > > this is still the case, isn't it? at least in some -stable kernels.
> > > is there (or was there) any reason this change has never been committed?
> > > (I'm particularly interested in is_global_init()).
> >
> > ... seems like it makes sense. Can you remind us which init you're having
> > to deal with?
> >
>
> systemd
>
> -ss

Well it makes sense to me. The question is whether we are protecting the
thing running as init, or the 'physical' thread with pid 1. I think it's
the former, so let's push on this. Please resend the patch with a proper
signed-off-by, and feel free to add

Acked-by: Serge Hallyn <[email protected]>

2016-01-01 01:35:32

by Sergey Senozhatsky

[permalink] [raw]
Subject: Re: [RFC] is_global_init() called on global init sub-thread

On (12/31/15 19:18), Serge E. Hallyn wrote:
> On Fri, Jan 01, 2016 at 10:10:35AM +0900, Sergey Senozhatsky wrote:
> > On (12/31/15 19:08), Serge E. Hallyn wrote:
> > > > re-upping https://www.redhat.com/archives/linux-audit/2013-December/msg00086.html
> > > >
> > > > Oleg Nesterov wrote:
> > > >
> > > > :Because is_global_init() is only true for the main thread of /sbin/init.
> > > > :
> > > > :Just look at oom_unkillable_task(). It tries to not kill init. But, say,
> > > > :select_bad_process() can happily find a sub-thread of is_global_init()
> > > > :and still kill it.
> > > >
> > > > this is still the case, isn't it? at least in some -stable kernels.
> > > > is there (or was there) any reason this change has never been committed?
> > > > (I'm particularly interested in is_global_init()).
> > >
> > > ... seems like it makes sense. Can you remind us which init you're having
> > > to deal with?
> > >
> >
> > systemd
> >
> > -ss
>
> Well it makes sense to me. The question is whether we are protecting the
> thing running as init, or the 'physical' thread with pid 1. I think it's
> the former, so let's push on this. Please resend the patch with a proper
> signed-off-by, and feel free to add

thanks. a bit puzzled, would reported-by Oleg and suggested-by Richard
be appropriate? (no objections if Oleg or Richard will submit it).

> Acked-by: Serge Hallyn <[email protected]>

-ss

2016-01-01 02:28:22

by Serge Hallyn

[permalink] [raw]
Subject: Re: [RFC] is_global_init() called on global init sub-thread

On Fri, Jan 01, 2016 at 10:33:53AM +0900, Sergey Senozhatsky wrote:
> On (12/31/15 19:18), Serge E. Hallyn wrote:
> > On Fri, Jan 01, 2016 at 10:10:35AM +0900, Sergey Senozhatsky wrote:
> > > On (12/31/15 19:08), Serge E. Hallyn wrote:
> > > > > re-upping https://www.redhat.com/archives/linux-audit/2013-December/msg00086.html
> > > > >
> > > > > Oleg Nesterov wrote:
> > > > >
> > > > > :Because is_global_init() is only true for the main thread of /sbin/init.
> > > > > :
> > > > > :Just look at oom_unkillable_task(). It tries to not kill init. But, say,
> > > > > :select_bad_process() can happily find a sub-thread of is_global_init()
> > > > > :and still kill it.
> > > > >
> > > > > this is still the case, isn't it? at least in some -stable kernels.
> > > > > is there (or was there) any reason this change has never been committed?
> > > > > (I'm particularly interested in is_global_init()).
> > > >
> > > > ... seems like it makes sense. Can you remind us which init you're having
> > > > to deal with?
> > > >
> > >
> > > systemd
> > >
> > > -ss
> >
> > Well it makes sense to me. The question is whether we are protecting the
> > thing running as init, or the 'physical' thread with pid 1. I think it's
> > the former, so let's push on this. Please resend the patch with a proper
> > signed-off-by, and feel free to add
>
> thanks. a bit puzzled, would reported-by Oleg and suggested-by Richard
> be appropriate?

Sounds good.

> (no objections if Oleg or Richard will submit it).

> > Acked-by: Serge Hallyn <[email protected]>
>
> -ss