All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aleksa Sarai <cyphar@cyphar.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>,
	Jeff Layton <jlayton@kernel.org>,
	"J. Bruce Fields" <bfields@fieldses.org>,
	Arnd Bergmann <arnd@arndb.de>,
	David Howells <dhowells@redhat.com>,
	Shuah Khan <shuah@kernel.org>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Christian Brauner <christian@brauner.io>,
	Jann Horn <jannh@google.com>, Kees Cook <keescook@chromium.org>,
	Eric Biederman <ebiederm@xmission.com>,
	Andy Lutomirski <luto@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Alexei Starovoitov <ast@kernel.org>,
	Tycho Andersen <tycho@tycho.ws>,
	David Drysdale <drysdale@google.com>,
	Chanho Min <chanho.min@lge.com>, Oleg Nesterov <oleg@redhat.com>,
	Rasmus
Subject: Re: [PATCH v12 10/12] namei: aggressively check for nd->root escape on ".." resolution
Date: Wed, 04 Sep 2019 21:48:56 +0000	[thread overview]
Message-ID: <20190904214856.vnvom7h5xontvngq@yavin.dot.cyphar.com> (raw)
In-Reply-To: <CAHk-=wiod1rQMU+6Zew=cLE8uX4tUdf42bM5eKngMnNVS2My7g@mail.gmail.com>

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

On 2019-09-04, Linus Torvalds <torvalds@linux-foundation.org> wrote:
> On Wed, Sep 4, 2019 at 1:23 PM Aleksa Sarai <cyphar@cyphar.com> wrote:
> > This patch allows for LOOKUP_BENEATH and LOOKUP_IN_ROOT to safely permit
> > ".." resolution (in the case of LOOKUP_BENEATH the resolution will still
> > fail if ".." resolution would resolve a path outside of the root --
> > while LOOKUP_IN_ROOT will chroot(2)-style scope it). Magic-link jumps
> > are still disallowed entirely because now they could result in
> > inconsistent behaviour if resolution encounters a subsequent ".."[*].
> 
> This is the only patch in the series that makes me go "umm".
> 
> Why is it ok to re-initialize m_seq, which is used by other things
> too? I think it's because we're out of RCU lookup, but there's no
> comment about it, and it looks iffy to me. I'd rather have a separate
> sequence count that doesn't have two users with different lifetime
> rules.

Yeah, the reasoning was that it's because we're out of RCU lookup and if
we didn't re-grab ->m_seq we'd hit path_is_under() on every subsequent
".." (even though we've checked that it's safe). But yes, I should've
used a different field to avoid confusion (and stop it looking
unnecessarily dodgy). I will fix that.

> But even apart from that, I think from a "patch continuity" standpoint
> it would be better to introduce the sequence counts as just an error
> condition first - iow, not have the "path_is_under()" check, but just
> return -EXDEV if the sequence number doesn't match.

Ack, will do.

> So you'd have three stages:
> 
>  1) ".." always returns -EXDEV
> 
>  2) ".." returns -EXDEV if there was a concurrent rename/mount
> 
>  3) ".." returns -EXDEV if there was a concurrent rename/mount and we
> reset the sequence numbers and check if you escaped.
> 
> becasue the sequence number reset really does make me go "hmm", plus I
> get this nagging little feeling in the back of my head that you can
> cause nasty O(n^2) lookup cost behavior with deep paths, lots of "..",
> and repeated path_is_under() calls.

The reason for doing the concurrent-{rename,mount} checks was to try to
avoid the O(n^2) in most cases, but you're right that if you have an
attacker that is spamming renames (or you're on a box with a lot of
renames and/or mounts going on *anywhere*) you will hit an O(n^2) here
(more pedantically, O(m*n) but who's counting?).

Unfortunately, I'm not sure what the best solution would be for this
one. If -EAGAIN retries are on the table, we could limit how many times
we're willing to do path_is_under() and then just return -EAGAIN.

> So (1) sounds safe. (2) sounds simple. And (3) is where I think subtle
> things start happening.
> 
> Also, I'm not 100% convinced that (3) is needed at all. I think the
> retry could be done in user space instead, which needs to have a
> fallback anyway. Yes? No?

Hinting to userspace to do a retry (with -EAGAIN as you mention in your
other mail) wouldn't be a bad thing at all, though you'd almost
certainly get quite a few spurious -EAGAINs -- &{mount,rename}_lock are
global for the entire machine, after all.

But if the only significant roadblock is that (3) seems a bit too hairy,
I would be quite happy with landing (2) as a first step (with -EAGAIN).

-- 
Aleksa Sarai
Senior Software Engineer (Containers)
SUSE Linux GmbH
<https://www.cyphar.com/>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: Aleksa Sarai <cyphar@cyphar.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>,
	Jeff Layton <jlayton@kernel.org>,
	"J. Bruce Fields" <bfields@fieldses.org>,
	Arnd Bergmann <arnd@arndb.de>,
	David Howells <dhowells@redhat.com>,
	Shuah Khan <shuah@kernel.org>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Christian Brauner <christian@brauner.io>,
	Jann Horn <jannh@google.com>, Kees Cook <keescook@chromium.org>,
	Eric Biederman <ebiederm@xmission.com>,
	Andy Lutomirski <luto@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Alexei Starovoitov <ast@kernel.org>,
	Tycho Andersen <tycho@tycho.ws>,
	David Drysdale <drysdale@google.com>,
	Chanho Min <chanho.min@lge.com>, Oleg Nesterov <oleg@redhat.com>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	Aleksa Sarai <asarai@suse.de>,
	Linux Containers <containers@lists.linux-foundation.org>,
	alpha <linux-alpha@vger.kernel.org>,
	Linux API <linux-api@vger.kernel.org>,
	linux-arch <linux-arch@vger.kernel.org>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	linux-ia64@vger.kernel.org,
	Linux List Kernel Mailing <linux-kernel@vger.kernel.org>,
	"open list:KERNEL SELFTEST FRAMEWORK" 
	<linux-kselftest@vger.kernel.org>,
	linux-m68k <linux-m68k@lists.linux-m68k.org>,
	linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390 <linux-s390@vger.kernel.org>,
	Linux-sh list <linux-sh@vger.kernel.org>,
	linux-xtensa@linux-xtensa.org, sparclinux@vger.kernel.org
Subject: Re: [PATCH v12 10/12] namei: aggressively check for nd->root escape on ".." resolution
Date: Thu, 5 Sep 2019 07:48:56 +1000	[thread overview]
Message-ID: <20190904214856.vnvom7h5xontvngq@yavin.dot.cyphar.com> (raw)
In-Reply-To: <CAHk-=wiod1rQMU+6Zew=cLE8uX4tUdf42bM5eKngMnNVS2My7g@mail.gmail.com>

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

On 2019-09-04, Linus Torvalds <torvalds@linux-foundation.org> wrote:
> On Wed, Sep 4, 2019 at 1:23 PM Aleksa Sarai <cyphar@cyphar.com> wrote:
> > This patch allows for LOOKUP_BENEATH and LOOKUP_IN_ROOT to safely permit
> > ".." resolution (in the case of LOOKUP_BENEATH the resolution will still
> > fail if ".." resolution would resolve a path outside of the root --
> > while LOOKUP_IN_ROOT will chroot(2)-style scope it). Magic-link jumps
> > are still disallowed entirely because now they could result in
> > inconsistent behaviour if resolution encounters a subsequent ".."[*].
> 
> This is the only patch in the series that makes me go "umm".
> 
> Why is it ok to re-initialize m_seq, which is used by other things
> too? I think it's because we're out of RCU lookup, but there's no
> comment about it, and it looks iffy to me. I'd rather have a separate
> sequence count that doesn't have two users with different lifetime
> rules.

Yeah, the reasoning was that it's because we're out of RCU lookup and if
we didn't re-grab ->m_seq we'd hit path_is_under() on every subsequent
".." (even though we've checked that it's safe). But yes, I should've
used a different field to avoid confusion (and stop it looking
unnecessarily dodgy). I will fix that.

> But even apart from that, I think from a "patch continuity" standpoint
> it would be better to introduce the sequence counts as just an error
> condition first - iow, not have the "path_is_under()" check, but just
> return -EXDEV if the sequence number doesn't match.

Ack, will do.

> So you'd have three stages:
> 
>  1) ".." always returns -EXDEV
> 
>  2) ".." returns -EXDEV if there was a concurrent rename/mount
> 
>  3) ".." returns -EXDEV if there was a concurrent rename/mount and we
> reset the sequence numbers and check if you escaped.
> 
> becasue the sequence number reset really does make me go "hmm", plus I
> get this nagging little feeling in the back of my head that you can
> cause nasty O(n^2) lookup cost behavior with deep paths, lots of "..",
> and repeated path_is_under() calls.

The reason for doing the concurrent-{rename,mount} checks was to try to
avoid the O(n^2) in most cases, but you're right that if you have an
attacker that is spamming renames (or you're on a box with a lot of
renames and/or mounts going on *anywhere*) you will hit an O(n^2) here
(more pedantically, O(m*n) but who's counting?).

Unfortunately, I'm not sure what the best solution would be for this
one. If -EAGAIN retries are on the table, we could limit how many times
we're willing to do path_is_under() and then just return -EAGAIN.

> So (1) sounds safe. (2) sounds simple. And (3) is where I think subtle
> things start happening.
> 
> Also, I'm not 100% convinced that (3) is needed at all. I think the
> retry could be done in user space instead, which needs to have a
> fallback anyway. Yes? No?

Hinting to userspace to do a retry (with -EAGAIN as you mention in your
other mail) wouldn't be a bad thing at all, though you'd almost
certainly get quite a few spurious -EAGAINs -- &{mount,rename}_lock are
global for the entire machine, after all.

But if the only significant roadblock is that (3) seems a bit too hairy,
I would be quite happy with landing (2) as a first step (with -EAGAIN).

-- 
Aleksa Sarai
Senior Software Engineer (Containers)
SUSE Linux GmbH
<https://www.cyphar.com/>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: Aleksa Sarai <cyphar@cyphar.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>,
	Jeff Layton <jlayton@kernel.org>,
	"J. Bruce Fields" <bfields@fieldses.org>,
	Arnd Bergmann <arnd@arndb.de>,
	David Howells <dhowells@redhat.com>,
	Shuah Khan <shuah@kernel.org>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Christian Brauner <christian@brauner.io>,
	Jann Horn <jannh@google.com>, Kees Cook <keescook@chromium.org>,
	Eric Biederman <ebiederm@xmission.com>,
	Andy Lutomirski <luto@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Alexei Starovoitov <ast@kernel.org>,
	Tycho Andersen <tycho@tycho.ws>,
	David Drysdale <drysdale@google.com>,
	Chanho Min <chanho.min@lge.com>, Oleg Nesterov <oleg@redhat.com>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	Aleksa Sarai <asarai@suse.de>,
	Linux Containers <containers@lists.linux-foundation.org>,
	alpha <linux-alpha@vger.kernel.org>,
	Linux API <linux-api@vger.kernel.org>,
	linux-arch <linux-arch@vger.kernel.org>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	linux-ia64@vger.kernel.org,
	Linux List Kernel Mailing <linux-kernel@vger.kernel.org>,
	"open list:KERNEL SELFTEST FRAMEWORK"
	<linux-kselftest@vger.kernel.org>,
	linux-m68k <linux-m68k@lists.linux-m68k.org>,
	linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390 <linux-s390@vger.kernel.org>,
	Linux-sh list <linux-sh@vger.kernel.org>,
	linux-xtensa@linux-xtensa.org, sparclinux@vger.kernel.org
Subject: Re: [PATCH v12 10/12] namei: aggressively check for nd->root escape on ".." resolution
Date: Thu, 5 Sep 2019 07:48:56 +1000	[thread overview]
Message-ID: <20190904214856.vnvom7h5xontvngq@yavin.dot.cyphar.com> (raw)
In-Reply-To: <CAHk-=wiod1rQMU+6Zew=cLE8uX4tUdf42bM5eKngMnNVS2My7g@mail.gmail.com>

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

On 2019-09-04, Linus Torvalds <torvalds@linux-foundation.org> wrote:
> On Wed, Sep 4, 2019 at 1:23 PM Aleksa Sarai <cyphar@cyphar.com> wrote:
> > This patch allows for LOOKUP_BENEATH and LOOKUP_IN_ROOT to safely permit
> > ".." resolution (in the case of LOOKUP_BENEATH the resolution will still
> > fail if ".." resolution would resolve a path outside of the root --
> > while LOOKUP_IN_ROOT will chroot(2)-style scope it). Magic-link jumps
> > are still disallowed entirely because now they could result in
> > inconsistent behaviour if resolution encounters a subsequent ".."[*].
> 
> This is the only patch in the series that makes me go "umm".
> 
> Why is it ok to re-initialize m_seq, which is used by other things
> too? I think it's because we're out of RCU lookup, but there's no
> comment about it, and it looks iffy to me. I'd rather have a separate
> sequence count that doesn't have two users with different lifetime
> rules.

Yeah, the reasoning was that it's because we're out of RCU lookup and if
we didn't re-grab ->m_seq we'd hit path_is_under() on every subsequent
".." (even though we've checked that it's safe). But yes, I should've
used a different field to avoid confusion (and stop it looking
unnecessarily dodgy). I will fix that.

> But even apart from that, I think from a "patch continuity" standpoint
> it would be better to introduce the sequence counts as just an error
> condition first - iow, not have the "path_is_under()" check, but just
> return -EXDEV if the sequence number doesn't match.

Ack, will do.

> So you'd have three stages:
> 
>  1) ".." always returns -EXDEV
> 
>  2) ".." returns -EXDEV if there was a concurrent rename/mount
> 
>  3) ".." returns -EXDEV if there was a concurrent rename/mount and we
> reset the sequence numbers and check if you escaped.
> 
> becasue the sequence number reset really does make me go "hmm", plus I
> get this nagging little feeling in the back of my head that you can
> cause nasty O(n^2) lookup cost behavior with deep paths, lots of "..",
> and repeated path_is_under() calls.

The reason for doing the concurrent-{rename,mount} checks was to try to
avoid the O(n^2) in most cases, but you're right that if you have an
attacker that is spamming renames (or you're on a box with a lot of
renames and/or mounts going on *anywhere*) you will hit an O(n^2) here
(more pedantically, O(m*n) but who's counting?).

Unfortunately, I'm not sure what the best solution would be for this
one. If -EAGAIN retries are on the table, we could limit how many times
we're willing to do path_is_under() and then just return -EAGAIN.

> So (1) sounds safe. (2) sounds simple. And (3) is where I think subtle
> things start happening.
> 
> Also, I'm not 100% convinced that (3) is needed at all. I think the
> retry could be done in user space instead, which needs to have a
> fallback anyway. Yes? No?

Hinting to userspace to do a retry (with -EAGAIN as you mention in your
other mail) wouldn't be a bad thing at all, though you'd almost
certainly get quite a few spurious -EAGAINs -- &{mount,rename}_lock are
global for the entire machine, after all.

But if the only significant roadblock is that (3) seems a bit too hairy,
I would be quite happy with landing (2) as a first step (with -EAGAIN).

-- 
Aleksa Sarai
Senior Software Engineer (Containers)
SUSE Linux GmbH
<https://www.cyphar.com/>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: Aleksa Sarai <cyphar@cyphar.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>,
	Jeff Layton <jlayton@kernel.org>,
	"J. Bruce Fields" <bfields@fieldses.org>,
	Arnd Bergmann <arnd@arndb.de>,
	David Howells <dhowells@redhat.com>,
	Shuah Khan <shuah@kernel.org>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Christian Brauner <christian@brauner.io>,
	Jann Horn <jannh@google.com>, Kees Cook <keescook@chromium.org>,
	Eric Biederman <ebiederm@xmission.com>,
	Andy Lutomirski <luto@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Alexei Starovoitov <ast@kernel.org>,
	Tycho Andersen <tycho@tycho.ws>,
	David Drysdale <drysdale@google.com>,
	Chanho Min <chanho.min@lge.com>, Oleg Nesterov <oleg@redhat.com>,
	Rasmus
Subject: Re: [PATCH v12 10/12] namei: aggressively check for nd->root escape on ".." resolution
Date: Thu, 5 Sep 2019 07:48:56 +1000	[thread overview]
Message-ID: <20190904214856.vnvom7h5xontvngq@yavin.dot.cyphar.com> (raw)
In-Reply-To: <CAHk-=wiod1rQMU+6Zew=cLE8uX4tUdf42bM5eKngMnNVS2My7g@mail.gmail.com>

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

On 2019-09-04, Linus Torvalds <torvalds@linux-foundation.org> wrote:
> On Wed, Sep 4, 2019 at 1:23 PM Aleksa Sarai <cyphar@cyphar.com> wrote:
> > This patch allows for LOOKUP_BENEATH and LOOKUP_IN_ROOT to safely permit
> > ".." resolution (in the case of LOOKUP_BENEATH the resolution will still
> > fail if ".." resolution would resolve a path outside of the root --
> > while LOOKUP_IN_ROOT will chroot(2)-style scope it). Magic-link jumps
> > are still disallowed entirely because now they could result in
> > inconsistent behaviour if resolution encounters a subsequent ".."[*].
> 
> This is the only patch in the series that makes me go "umm".
> 
> Why is it ok to re-initialize m_seq, which is used by other things
> too? I think it's because we're out of RCU lookup, but there's no
> comment about it, and it looks iffy to me. I'd rather have a separate
> sequence count that doesn't have two users with different lifetime
> rules.

Yeah, the reasoning was that it's because we're out of RCU lookup and if
we didn't re-grab ->m_seq we'd hit path_is_under() on every subsequent
".." (even though we've checked that it's safe). But yes, I should've
used a different field to avoid confusion (and stop it looking
unnecessarily dodgy). I will fix that.

> But even apart from that, I think from a "patch continuity" standpoint
> it would be better to introduce the sequence counts as just an error
> condition first - iow, not have the "path_is_under()" check, but just
> return -EXDEV if the sequence number doesn't match.

Ack, will do.

> So you'd have three stages:
> 
>  1) ".." always returns -EXDEV
> 
>  2) ".." returns -EXDEV if there was a concurrent rename/mount
> 
>  3) ".." returns -EXDEV if there was a concurrent rename/mount and we
> reset the sequence numbers and check if you escaped.
> 
> becasue the sequence number reset really does make me go "hmm", plus I
> get this nagging little feeling in the back of my head that you can
> cause nasty O(n^2) lookup cost behavior with deep paths, lots of "..",
> and repeated path_is_under() calls.

The reason for doing the concurrent-{rename,mount} checks was to try to
avoid the O(n^2) in most cases, but you're right that if you have an
attacker that is spamming renames (or you're on a box with a lot of
renames and/or mounts going on *anywhere*) you will hit an O(n^2) here
(more pedantically, O(m*n) but who's counting?).

Unfortunately, I'm not sure what the best solution would be for this
one. If -EAGAIN retries are on the table, we could limit how many times
we're willing to do path_is_under() and then just return -EAGAIN.

> So (1) sounds safe. (2) sounds simple. And (3) is where I think subtle
> things start happening.
> 
> Also, I'm not 100% convinced that (3) is needed at all. I think the
> retry could be done in user space instead, which needs to have a
> fallback anyway. Yes? No?

Hinting to userspace to do a retry (with -EAGAIN as you mention in your
other mail) wouldn't be a bad thing at all, though you'd almost
certainly get quite a few spurious -EAGAINs -- &{mount,rename}_lock are
global for the entire machine, after all.

But if the only significant roadblock is that (3) seems a bit too hairy,
I would be quite happy with landing (2) as a first step (with -EAGAIN).

-- 
Aleksa Sarai
Senior Software Engineer (Containers)
SUSE Linux GmbH
<https://www.cyphar.com/>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: Aleksa Sarai <cyphar@cyphar.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-ia64@vger.kernel.org,
	Linux-sh list <linux-sh@vger.kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Alexei Starovoitov <ast@kernel.org>,
	Linux List Kernel Mailing <linux-kernel@vger.kernel.org>,
	David Howells <dhowells@redhat.com>,
	"open list:KERNEL SELFTEST FRAMEWORK"
	<linux-kselftest@vger.kernel.org>,
	sparclinux@vger.kernel.org, Shuah Khan <shuah@kernel.org>,
	linux-arch <linux-arch@vger.kernel.org>,
	linux-s390 <linux-s390@vger.kernel.org>,
	Tycho Andersen <tycho@tycho.ws>, Aleksa Sarai <asarai@suse.de>,
	Jiri Olsa <jolsa@redhat.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Ingo Molnar <mingo@redhat.com>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	linux-mips@vger.kernel.org, linux-xtensa@linux-xtensa.org,
	Kees Cook <keescook@chromium.org>, Arnd Bergmann <arnd@arndb.de>,
	Jann Horn <jannh@google.com>,
	linux-m68k <linux-m68k@lists.linux-m68k.org>,
	Al Viro <viro@zeniv.linux.org.uk>,
	Andy Lutomirski <luto@kernel.org>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Namhyung Kim <namhyung@kernel.org>,
	David Drysdale <drysdale@google.com>,
	Christian Brauner <christian@brauner.io>,
	"J. Bruce Fields" <bfields@fieldses.org>,
	linux-parisc@vger.kernel.org,
	Linux API <linux-api@vger.kernel.org>,
	Chanho Min <chanho.min@lge.com>, Jeff Layton <jlayton@kernel.org>,
	Oleg Nesterov <oleg@redhat.com>,
	Eric Biederman <ebiederm@xmission.com>,
	alpha <linux-alpha@vger.kernel.org>,
	linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	linuxppc-dev@lists.ozlabs.org,
	Linux Containers <containers@lists.linux-foundation.org>
Subject: Re: [PATCH v12 10/12] namei: aggressively check for nd->root escape on ".." resolution
Date: Thu, 5 Sep 2019 07:48:56 +1000	[thread overview]
Message-ID: <20190904214856.vnvom7h5xontvngq@yavin.dot.cyphar.com> (raw)
In-Reply-To: <CAHk-=wiod1rQMU+6Zew=cLE8uX4tUdf42bM5eKngMnNVS2My7g@mail.gmail.com>

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

On 2019-09-04, Linus Torvalds <torvalds@linux-foundation.org> wrote:
> On Wed, Sep 4, 2019 at 1:23 PM Aleksa Sarai <cyphar@cyphar.com> wrote:
> > This patch allows for LOOKUP_BENEATH and LOOKUP_IN_ROOT to safely permit
> > ".." resolution (in the case of LOOKUP_BENEATH the resolution will still
> > fail if ".." resolution would resolve a path outside of the root --
> > while LOOKUP_IN_ROOT will chroot(2)-style scope it). Magic-link jumps
> > are still disallowed entirely because now they could result in
> > inconsistent behaviour if resolution encounters a subsequent ".."[*].
> 
> This is the only patch in the series that makes me go "umm".
> 
> Why is it ok to re-initialize m_seq, which is used by other things
> too? I think it's because we're out of RCU lookup, but there's no
> comment about it, and it looks iffy to me. I'd rather have a separate
> sequence count that doesn't have two users with different lifetime
> rules.

Yeah, the reasoning was that it's because we're out of RCU lookup and if
we didn't re-grab ->m_seq we'd hit path_is_under() on every subsequent
".." (even though we've checked that it's safe). But yes, I should've
used a different field to avoid confusion (and stop it looking
unnecessarily dodgy). I will fix that.

> But even apart from that, I think from a "patch continuity" standpoint
> it would be better to introduce the sequence counts as just an error
> condition first - iow, not have the "path_is_under()" check, but just
> return -EXDEV if the sequence number doesn't match.

Ack, will do.

> So you'd have three stages:
> 
>  1) ".." always returns -EXDEV
> 
>  2) ".." returns -EXDEV if there was a concurrent rename/mount
> 
>  3) ".." returns -EXDEV if there was a concurrent rename/mount and we
> reset the sequence numbers and check if you escaped.
> 
> becasue the sequence number reset really does make me go "hmm", plus I
> get this nagging little feeling in the back of my head that you can
> cause nasty O(n^2) lookup cost behavior with deep paths, lots of "..",
> and repeated path_is_under() calls.

The reason for doing the concurrent-{rename,mount} checks was to try to
avoid the O(n^2) in most cases, but you're right that if you have an
attacker that is spamming renames (or you're on a box with a lot of
renames and/or mounts going on *anywhere*) you will hit an O(n^2) here
(more pedantically, O(m*n) but who's counting?).

Unfortunately, I'm not sure what the best solution would be for this
one. If -EAGAIN retries are on the table, we could limit how many times
we're willing to do path_is_under() and then just return -EAGAIN.

> So (1) sounds safe. (2) sounds simple. And (3) is where I think subtle
> things start happening.
> 
> Also, I'm not 100% convinced that (3) is needed at all. I think the
> retry could be done in user space instead, which needs to have a
> fallback anyway. Yes? No?

Hinting to userspace to do a retry (with -EAGAIN as you mention in your
other mail) wouldn't be a bad thing at all, though you'd almost
certainly get quite a few spurious -EAGAINs -- &{mount,rename}_lock are
global for the entire machine, after all.

But if the only significant roadblock is that (3) seems a bit too hairy,
I would be quite happy with landing (2) as a first step (with -EAGAIN).

-- 
Aleksa Sarai
Senior Software Engineer (Containers)
SUSE Linux GmbH
<https://www.cyphar.com/>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: Aleksa Sarai <cyphar@cyphar.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-ia64@vger.kernel.org,
	Linux-sh list <linux-sh@vger.kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Alexei Starovoitov <ast@kernel.org>,
	Linux List Kernel Mailing <linux-kernel@vger.kernel.org>,
	David Howells <dhowells@redhat.com>,
	"open list:KERNEL SELFTEST FRAMEWORK"
	<linux-kselftest@vger.kernel.org>,
	sparclinux@vger.kernel.org, Shuah Khan <shuah@kernel.org>,
	linux-arch <linux-arch@vger.kernel.org>,
	linux-s390 <linux-s390@vger.kernel.org>,
	Tycho Andersen <tycho@tycho.ws>, Aleksa Sarai <asarai@suse.de>,
	Jiri Olsa <jolsa@redhat.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Ingo Molnar <mingo@redhat.com>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	linux-mips@vger.kernel.org, linux-xtensa@linux-xtensa.org,
	Kees Cook <keescook@chromium.org>, Arnd Bergmann <arnd@arndb.de>,
	Jann Horn <jannh@google.com>,
	linux-m68k <linux-m68k@lists.linux-m68k.org>,
	Al Viro <viro@zeniv.linux.org.uk>,
	Andy Lutomirski <luto@kernel.org>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Namhyung Kim <namhyung@kernel.org>,
	David Drysdale <drysdale@google.com>,
	Christian Brauner <christian@brauner.io>,
	"J. Bruce Fields" <bfields@fieldses.org>,
	linux-parisc@vger.kernel.org,
	Linux API <linux-api@vger.kernel.org>,
	Chanho Min <chanho.min@lge.com>, Jeff Layton <jlayton@kernel.org>,
	Oleg Nesterov <oleg@redhat.com>,
	Eric Biederman <ebiederm@xmission.com>,
	alpha <linux-alpha@vger.kernel.org>,
	linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	linuxppc-dev@lists.ozlabs.org,
	Linux Containers <containers@lists.linux-foundation.org>
Subject: Re: [PATCH v12 10/12] namei: aggressively check for nd->root escape on ".." resolution
Date: Thu, 5 Sep 2019 07:48:56 +1000	[thread overview]
Message-ID: <20190904214856.vnvom7h5xontvngq@yavin.dot.cyphar.com> (raw)
In-Reply-To: <CAHk-=wiod1rQMU+6Zew=cLE8uX4tUdf42bM5eKngMnNVS2My7g@mail.gmail.com>


[-- Attachment #1.1: Type: text/plain, Size: 3439 bytes --]

On 2019-09-04, Linus Torvalds <torvalds@linux-foundation.org> wrote:
> On Wed, Sep 4, 2019 at 1:23 PM Aleksa Sarai <cyphar@cyphar.com> wrote:
> > This patch allows for LOOKUP_BENEATH and LOOKUP_IN_ROOT to safely permit
> > ".." resolution (in the case of LOOKUP_BENEATH the resolution will still
> > fail if ".." resolution would resolve a path outside of the root --
> > while LOOKUP_IN_ROOT will chroot(2)-style scope it). Magic-link jumps
> > are still disallowed entirely because now they could result in
> > inconsistent behaviour if resolution encounters a subsequent ".."[*].
> 
> This is the only patch in the series that makes me go "umm".
> 
> Why is it ok to re-initialize m_seq, which is used by other things
> too? I think it's because we're out of RCU lookup, but there's no
> comment about it, and it looks iffy to me. I'd rather have a separate
> sequence count that doesn't have two users with different lifetime
> rules.

Yeah, the reasoning was that it's because we're out of RCU lookup and if
we didn't re-grab ->m_seq we'd hit path_is_under() on every subsequent
".." (even though we've checked that it's safe). But yes, I should've
used a different field to avoid confusion (and stop it looking
unnecessarily dodgy). I will fix that.

> But even apart from that, I think from a "patch continuity" standpoint
> it would be better to introduce the sequence counts as just an error
> condition first - iow, not have the "path_is_under()" check, but just
> return -EXDEV if the sequence number doesn't match.

Ack, will do.

> So you'd have three stages:
> 
>  1) ".." always returns -EXDEV
> 
>  2) ".." returns -EXDEV if there was a concurrent rename/mount
> 
>  3) ".." returns -EXDEV if there was a concurrent rename/mount and we
> reset the sequence numbers and check if you escaped.
> 
> becasue the sequence number reset really does make me go "hmm", plus I
> get this nagging little feeling in the back of my head that you can
> cause nasty O(n^2) lookup cost behavior with deep paths, lots of "..",
> and repeated path_is_under() calls.

The reason for doing the concurrent-{rename,mount} checks was to try to
avoid the O(n^2) in most cases, but you're right that if you have an
attacker that is spamming renames (or you're on a box with a lot of
renames and/or mounts going on *anywhere*) you will hit an O(n^2) here
(more pedantically, O(m*n) but who's counting?).

Unfortunately, I'm not sure what the best solution would be for this
one. If -EAGAIN retries are on the table, we could limit how many times
we're willing to do path_is_under() and then just return -EAGAIN.

> So (1) sounds safe. (2) sounds simple. And (3) is where I think subtle
> things start happening.
> 
> Also, I'm not 100% convinced that (3) is needed at all. I think the
> retry could be done in user space instead, which needs to have a
> fallback anyway. Yes? No?

Hinting to userspace to do a retry (with -EAGAIN as you mention in your
other mail) wouldn't be a bad thing at all, though you'd almost
certainly get quite a few spurious -EAGAINs -- &{mount,rename}_lock are
global for the entire machine, after all.

But if the only significant roadblock is that (3) seems a bit too hairy,
I would be quite happy with landing (2) as a first step (with -EAGAIN).

-- 
Aleksa Sarai
Senior Software Engineer (Containers)
SUSE Linux GmbH
<https://www.cyphar.com/>

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

[-- Attachment #2: Type: text/plain, Size: 176 bytes --]

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2019-09-04 21:48 UTC|newest]

Thread overview: 351+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-04 20:19 [PATCH v12 00/12] namei: openat2(2) path resolution restrictions Aleksa Sarai
2019-09-04 20:19 ` Aleksa Sarai
2019-09-04 20:19 ` Aleksa Sarai
2019-09-04 20:19 ` Aleksa Sarai
2019-09-04 20:19 ` Aleksa Sarai
2019-09-04 20:19 ` [PATCH v12 01/12] lib: introduce copy_struct_{to,from}_user helpers Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:48   ` Linus Torvalds
2019-09-04 20:48     ` [PATCH v12 01/12] lib: introduce copy_struct_{to, from}_user helpers Linus Torvalds
2019-09-04 20:48     ` Linus Torvalds
2019-09-04 20:48     ` Linus Torvalds
2019-09-04 20:48     ` [PATCH v12 01/12] lib: introduce copy_struct_{to,from}_user helpers Linus Torvalds
2019-09-04 20:48     ` Linus Torvalds
2019-09-04 21:00   ` Randy Dunlap
2019-09-04 21:00     ` Randy Dunlap
2019-09-04 21:00     ` Randy Dunlap
2019-09-04 21:00     ` Randy Dunlap
2019-09-04 21:00     ` Randy Dunlap
2019-09-05  7:32   ` Peter Zijlstra
2019-09-05  7:32     ` Peter Zijlstra
2019-09-05  7:32     ` Peter Zijlstra
2019-09-05  7:32     ` Peter Zijlstra
2019-09-05  7:32     ` Peter Zijlstra
2019-09-05  9:26     ` Aleksa Sarai
2019-09-05  9:26       ` Aleksa Sarai
2019-09-05  9:26       ` Aleksa Sarai
2019-09-05  9:26       ` Aleksa Sarai
2019-09-05  9:26       ` Aleksa Sarai
2019-09-05  9:43       ` Peter Zijlstra
2019-09-05  9:43         ` Peter Zijlstra
2019-09-05  9:43         ` Peter Zijlstra
2019-09-05  9:43         ` Peter Zijlstra
2019-09-05  9:43         ` Peter Zijlstra
2019-09-05 10:57         ` Peter Zijlstra
2019-09-05 10:57           ` Peter Zijlstra
2019-09-05 10:57           ` Peter Zijlstra
2019-09-05 10:57           ` Peter Zijlstra
2019-09-05 10:57           ` Peter Zijlstra
2019-09-11 10:37           ` Aleksa Sarai
2019-09-11 10:37             ` Aleksa Sarai
2019-09-11 10:37             ` Aleksa Sarai
2019-09-11 10:37             ` Aleksa Sarai
2019-09-11 10:37             ` Aleksa Sarai
2019-09-05 13:35         ` Aleksa Sarai
2019-09-05 13:35           ` Aleksa Sarai
2019-09-05 13:35           ` Aleksa Sarai
2019-09-05 13:35           ` Aleksa Sarai
2019-09-05 13:35           ` Aleksa Sarai
2019-09-05 17:01         ` Aleksa Sarai
2019-09-05 17:01           ` Aleksa Sarai
2019-09-05 17:01           ` Aleksa Sarai
2019-09-05 17:01           ` Aleksa Sarai
2019-09-05 17:01           ` Aleksa Sarai
2019-09-05  8:43   ` Rasmus Villemoes
2019-09-05  8:43     ` Rasmus Villemoes
2019-09-05  8:43     ` Rasmus Villemoes
2019-09-05  8:43     ` Rasmus Villemoes
2019-09-05  8:43     ` Rasmus Villemoes
2019-09-05  9:50     ` Aleksa Sarai
2019-09-05  9:50       ` Aleksa Sarai
2019-09-05  9:50       ` Aleksa Sarai
2019-09-05  9:50       ` Aleksa Sarai
2019-09-05  9:50       ` Aleksa Sarai
2019-09-05 10:45       ` Christian Brauner
2019-09-05 10:45         ` Christian Brauner
2019-09-05 10:45         ` Christian Brauner
2019-09-05 10:45         ` Christian Brauner
2019-09-05 10:45         ` Christian Brauner
2019-09-05  9:09   ` Andreas Schwab
2019-09-05  9:09     ` [PATCH v12 01/12] lib: introduce copy_struct_{to, from}_user helpers Andreas Schwab
2019-09-05  9:09     ` Andreas Schwab
2019-09-05  9:09     ` [PATCH v12 01/12] lib: introduce copy_struct_{to,from}_user helpers Andreas Schwab
2019-09-05  9:09     ` Andreas Schwab
2019-09-05 10:13     ` [PATCH v12 01/12] lib: introduce copy_struct_{to, from}_user helpers Gabriel Paubert
2019-09-05 10:13       ` Gabriel Paubert
2019-09-05 10:13       ` Gabriel Paubert
2019-09-05 10:13       ` Gabriel Paubert
2019-09-05 10:13       ` Gabriel Paubert
2019-09-05 10:13       ` Gabriel Paubert
2019-09-05 10:13       ` Gabriel Paubert
2019-09-05 11:05   ` [PATCH v12 01/12] lib: introduce copy_struct_{to,from}_user helpers Christian Brauner
2019-09-05 11:05     ` Christian Brauner
2019-09-05 11:05     ` Christian Brauner
2019-09-05 11:05     ` Christian Brauner
2019-09-05 11:05     ` Christian Brauner
2019-09-05 11:17     ` Rasmus Villemoes
2019-09-05 11:17       ` Rasmus Villemoes
2019-09-05 11:17       ` Rasmus Villemoes
2019-09-05 11:17       ` Rasmus Villemoes
2019-09-05 11:17       ` Rasmus Villemoes
2019-09-05 11:29       ` Christian Brauner
2019-09-05 11:29         ` Christian Brauner
2019-09-05 11:29         ` Christian Brauner
2019-09-05 11:29         ` Christian Brauner
2019-09-05 11:29         ` Christian Brauner
2019-09-05 13:40     ` Aleksa Sarai
2019-09-05 13:40       ` Aleksa Sarai
2019-09-05 13:40       ` Aleksa Sarai
2019-09-05 13:40       ` Aleksa Sarai
2019-09-05 13:40       ` Aleksa Sarai
2019-09-05 11:09   ` Christian Brauner
2019-09-05 11:09     ` Christian Brauner
2019-09-05 11:09     ` Christian Brauner
2019-09-05 11:09     ` Christian Brauner
2019-09-05 11:09     ` Christian Brauner
2019-09-05 11:27     ` Aleksa Sarai
2019-09-05 11:27       ` Aleksa Sarai
2019-09-05 11:27       ` Aleksa Sarai
2019-09-05 11:27       ` Aleksa Sarai
2019-09-05 11:27       ` Aleksa Sarai
2019-09-05 11:40       ` Christian Brauner
2019-09-05 11:40         ` Christian Brauner
2019-09-05 11:40         ` Christian Brauner
2019-09-05 11:40         ` Christian Brauner
2019-09-05 11:40         ` Christian Brauner
2019-09-05 18:07   ` Al Viro
2019-09-05 18:07     ` Al Viro
2019-09-05 18:07     ` Al Viro
2019-09-05 18:07     ` Al Viro
2019-09-05 18:07     ` Al Viro
2019-09-05 18:23     ` Christian Brauner
2019-09-05 18:23       ` Christian Brauner
2019-09-05 18:23       ` Christian Brauner
2019-09-05 18:23       ` Christian Brauner
2019-09-05 18:23       ` Christian Brauner
2019-09-05 18:28       ` Al Viro
2019-09-05 18:28         ` Al Viro
2019-09-05 18:28         ` Al Viro
2019-09-05 18:28         ` Al Viro
2019-09-05 18:28         ` Al Viro
2019-09-05 18:35         ` Christian Brauner
2019-09-05 18:35           ` Christian Brauner
2019-09-05 18:35           ` Christian Brauner
2019-09-05 18:35           ` Christian Brauner
2019-09-05 18:35           ` Christian Brauner
2019-09-05 19:56         ` Aleksa Sarai
2019-09-05 19:56           ` Aleksa Sarai
2019-09-05 19:56           ` Aleksa Sarai
2019-09-05 19:56           ` Aleksa Sarai
2019-09-05 19:56           ` Aleksa Sarai
2019-09-05 22:31           ` Al Viro
2019-09-05 22:31             ` Al Viro
2019-09-05 22:31             ` Al Viro
2019-09-05 22:31             ` Al Viro
2019-09-05 22:31             ` Al Viro
2019-09-06  7:00           ` Christian Brauner
2019-09-06  7:00             ` Christian Brauner
2019-09-06  7:00             ` Christian Brauner
2019-09-06  7:00             ` Christian Brauner
2019-09-06  7:00             ` Christian Brauner
2019-09-05 23:00     ` Aleksa Sarai
2019-09-05 23:00       ` Aleksa Sarai
2019-09-05 23:00       ` Aleksa Sarai
2019-09-05 23:00       ` Aleksa Sarai
2019-09-05 23:00       ` Aleksa Sarai
2019-09-05 23:49       ` Al Viro
2019-09-05 23:49         ` Al Viro
2019-09-05 23:49         ` Al Viro
2019-09-05 23:49         ` Al Viro
2019-09-05 23:49         ` Al Viro
2019-09-06  0:09         ` Aleksa Sarai
2019-09-06  0:09           ` Aleksa Sarai
2019-09-06  0:09           ` Aleksa Sarai
2019-09-06  0:09           ` Aleksa Sarai
2019-09-06  0:09           ` Aleksa Sarai
2019-09-06  0:14         ` Al Viro
2019-09-06  0:14           ` Al Viro
2019-09-06  0:14           ` Al Viro
2019-09-06  0:14           ` Al Viro
2019-09-06  0:14           ` Al Viro
2019-09-04 20:19 ` [PATCH v12 02/12] clone3: switch to copy_struct_from_user() Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19 ` [PATCH v12 03/12] sched_setattr: switch to copy_struct_{to,from}_user() Aleksa Sarai
2019-09-04 20:19   ` [PATCH v12 03/12] sched_setattr: switch to copy_struct_{to, from}_user() Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` [PATCH v12 03/12] sched_setattr: switch to copy_struct_{to,from}_user() Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19 ` [PATCH v12 04/12] perf_event_open: switch to copy_struct_from_user() Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19 ` [PATCH v12 05/12] namei: obey trailing magic-link DAC permissions Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-17 21:30   ` Jann Horn
2019-09-17 21:30     ` Jann Horn
2019-09-17 21:30     ` Jann Horn
2019-09-17 21:30     ` Jann Horn
2019-09-17 21:30     ` Jann Horn
2019-09-17 21:30     ` Jann Horn
2019-09-17 21:30     ` Jann Horn
2019-09-18 13:51     ` Aleksa Sarai
2019-09-18 13:51       ` Aleksa Sarai
2019-09-18 13:51       ` Aleksa Sarai
2019-09-18 13:51       ` Aleksa Sarai
2019-09-18 13:51       ` Aleksa Sarai
2019-09-18 13:51       ` Aleksa Sarai
2019-09-18 13:51       ` Aleksa Sarai
2019-09-18 13:51       ` Aleksa Sarai
2019-09-18 15:46       ` Aleksa Sarai
2019-09-18 15:46         ` Aleksa Sarai
2019-09-18 15:46         ` Aleksa Sarai
2019-09-18 15:46         ` Aleksa Sarai
2019-09-18 15:46         ` Aleksa Sarai
2019-09-18 15:46         ` Aleksa Sarai
2019-09-18 15:46         ` Aleksa Sarai
2019-09-18 15:46         ` Aleksa Sarai
2019-09-04 20:19 ` [PATCH v12 06/12] procfs: switch magic-link modes to be more sane Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19 ` [PATCH v12 07/12] open: O_EMPTYPATH: procfs-less file descriptor re-opening Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19 ` [PATCH v12 08/12] namei: O_BENEATH-style path resolution flags Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19 ` [PATCH v12 09/12] namei: LOOKUP_IN_ROOT: chroot-like path resolution Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19 ` [PATCH v12 10/12] namei: aggressively check for nd->root escape on ".." resolution Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 21:09   ` Linus Torvalds
2019-09-04 21:09     ` Linus Torvalds
2019-09-04 21:09     ` Linus Torvalds
2019-09-04 21:09     ` Linus Torvalds
2019-09-04 21:09     ` Linus Torvalds
2019-09-04 21:09     ` Linus Torvalds
2019-09-04 21:35     ` Linus Torvalds
2019-09-04 21:35       ` Linus Torvalds
2019-09-04 21:35       ` Linus Torvalds
2019-09-04 21:35       ` Linus Torvalds
2019-09-04 21:35       ` Linus Torvalds
2019-09-04 21:35       ` Linus Torvalds
2019-09-04 21:36       ` Linus Torvalds
2019-09-04 21:36         ` Linus Torvalds
2019-09-04 21:36         ` Linus Torvalds
2019-09-04 21:36         ` Linus Torvalds
2019-09-04 21:36         ` Linus Torvalds
2019-09-04 21:36         ` Linus Torvalds
2019-09-04 21:48     ` Aleksa Sarai [this message]
2019-09-04 21:48       ` Aleksa Sarai
2019-09-04 21:48       ` Aleksa Sarai
2019-09-04 21:48       ` Aleksa Sarai
2019-09-04 21:48       ` Aleksa Sarai
2019-09-04 21:48       ` Aleksa Sarai
2019-09-04 22:16       ` Linus Torvalds
2019-09-04 22:16         ` Linus Torvalds
2019-09-04 22:16         ` Linus Torvalds
2019-09-04 22:16         ` Linus Torvalds
2019-09-04 22:16         ` Linus Torvalds
2019-09-04 22:16         ` Linus Torvalds
2019-09-04 22:31       ` David Howells
2019-09-04 22:31         ` David Howells
2019-09-04 22:31         ` David Howells
2019-09-04 22:31         ` David Howells
2019-09-04 22:31         ` David Howells
2019-09-04 22:31         ` David Howells
2019-09-04 22:38         ` Linus Torvalds
2019-09-04 22:38           ` Linus Torvalds
2019-09-04 22:38           ` Linus Torvalds
2019-09-04 22:38           ` Linus Torvalds
2019-09-04 22:38           ` Linus Torvalds
2019-09-04 22:38           ` Linus Torvalds
2019-09-04 23:29           ` Al Viro
2019-09-04 23:29             ` Al Viro
2019-09-04 23:29             ` Al Viro
2019-09-04 23:29             ` Al Viro
2019-09-04 23:29             ` Al Viro
2019-09-04 23:29             ` Al Viro
2019-09-04 23:44             ` Linus Torvalds
2019-09-04 23:44               ` Linus Torvalds
2019-09-04 23:44               ` Linus Torvalds
2019-09-04 23:44               ` Linus Torvalds
2019-09-04 23:44               ` Linus Torvalds
2019-09-04 23:44               ` Linus Torvalds
2019-09-04 20:19 ` [PATCH v12 11/12] open: openat2(2) syscall Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 21:00   ` Randy Dunlap
2019-09-04 21:00     ` Randy Dunlap
2019-09-04 21:00     ` Randy Dunlap
2019-09-04 21:00     ` Randy Dunlap
2019-09-04 21:00     ` Randy Dunlap
2019-09-07 12:40   ` Jeff Layton
2019-09-07 12:40     ` Jeff Layton
2019-09-07 12:40     ` Jeff Layton
2019-09-07 12:40     ` Jeff Layton
2019-09-07 12:40     ` Jeff Layton
2019-09-07 16:58     ` Linus Torvalds
2019-09-07 16:58       ` Linus Torvalds
2019-09-07 16:58       ` Linus Torvalds
2019-09-07 16:58       ` Linus Torvalds
2019-09-07 16:58       ` Linus Torvalds
2019-09-07 16:58       ` Linus Torvalds
2019-09-07 16:58       ` Linus Torvalds
2019-09-07 17:42       ` Andy Lutomirski
2019-09-07 17:42         ` Andy Lutomirski
2019-09-07 17:42         ` Andy Lutomirski
2019-09-07 17:42         ` Andy Lutomirski
2019-09-07 17:42         ` Andy Lutomirski
2019-09-07 17:42         ` Andy Lutomirski
2019-09-07 17:45         ` Linus Torvalds
2019-09-07 17:45           ` Linus Torvalds
2019-09-07 17:45           ` Linus Torvalds
2019-09-07 17:45           ` Linus Torvalds
2019-09-07 17:45           ` Linus Torvalds
2019-09-07 17:45           ` Linus Torvalds
2019-09-07 18:15           ` Andy Lutomirski
2019-09-07 18:15             ` Andy Lutomirski
2019-09-07 18:15             ` Andy Lutomirski
2019-09-07 18:15             ` Andy Lutomirski
2019-09-07 18:15             ` Andy Lutomirski
2019-09-07 18:15             ` Andy Lutomirski
2019-09-10  6:35           ` Ingo Molnar
2019-09-10  6:35             ` Ingo Molnar
2019-09-10  6:35             ` Ingo Molnar
2019-09-10  6:35             ` Ingo Molnar
2019-09-10  6:35             ` Ingo Molnar
2019-09-10  6:35             ` Ingo Molnar
2019-09-08 16:24     ` Aleksa Sarai
2019-09-08 16:24       ` Aleksa Sarai
2019-09-08 16:24       ` Aleksa Sarai
2019-09-08 16:24       ` Aleksa Sarai
2019-09-08 16:24       ` Aleksa Sarai
2019-09-04 20:19 ` [PATCH v12 12/12] selftests: add openat2(2) selftests Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai
2019-09-04 20:19   ` Aleksa Sarai

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190904214856.vnvom7h5xontvngq@yavin.dot.cyphar.com \
    --to=cyphar@cyphar.com \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=ast@kernel.org \
    --cc=bfields@fieldses.org \
    --cc=chanho.min@lge.com \
    --cc=christian@brauner.io \
    --cc=dhowells@redhat.com \
    --cc=drysdale@google.com \
    --cc=ebiederm@xmission.com \
    --cc=jannh@google.com \
    --cc=jlayton@kernel.org \
    --cc=keescook@chromium.org \
    --cc=luto@kernel.org \
    --cc=mingo@redhat.com \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    --cc=shuah@kernel.org \
    --cc=skhan@linuxfoundation.org \
    --cc=torvalds@linux-foundation.org \
    --cc=tycho@tycho.ws \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.