All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] openat2: reject RESOLVE_BENEATH|RESOLVE_IN_ROOT
@ 2020-10-27 23:50 Aleksa Sarai
  2020-10-27 23:50 ` [PATCH v2 1/2] " Aleksa Sarai
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Aleksa Sarai @ 2020-10-27 23:50 UTC (permalink / raw)
  To: Alexander Viro, Shuah Khan
  Cc: containers, linux-kernel, linux-kselftest, linux-fsdevel

This was an oversight in the original implementation, as it makes no
sense to specify both scoping flags to the same openat2(2) invocation
(before this patch, the result of such an invocation was equivalent to
RESOLVE_IN_ROOT being ignored).

This is a userspace-visible ABI change, but the only user of openat2(2)
at the moment is LXC which doesn't specify both flags and so no
userspace programs will break as a result.

Changelog:
  v2: Split patch so as to separate selftest changes. [Shuah Khan]
  v1: <https://lore.kernel.org/lkml/20201007103608.17349-1-cyphar@cyphar.com/>

Aleksa Sarai (2):
  openat2: reject RESOLVE_BENEATH|RESOLVE_IN_ROOT
  selftests: openat2: add RESOLVE_ conflict test

 fs/open.c                                      | 4 ++++
 tools/testing/selftests/openat2/openat2_test.c | 8 +++++++-
 2 files changed, 11 insertions(+), 1 deletion(-)

-- 
2.29.0

_______________________________________________
Containers mailing list
Containers@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/containers

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

* [PATCH v2 1/2] openat2: reject RESOLVE_BENEATH|RESOLVE_IN_ROOT
  2020-10-27 23:50 [PATCH v2 0/2] openat2: reject RESOLVE_BENEATH|RESOLVE_IN_ROOT Aleksa Sarai
@ 2020-10-27 23:50 ` Aleksa Sarai
  2020-10-27 23:50 ` [PATCH v2 2/2] selftests: openat2: add RESOLVE_ conflict test Aleksa Sarai
  2020-12-02 14:43   ` Christian Brauner
  2 siblings, 0 replies; 5+ messages in thread
From: Aleksa Sarai @ 2020-10-27 23:50 UTC (permalink / raw)
  To: Alexander Viro, Shuah Khan
  Cc: containers, linux-kernel, stable, linux-kselftest, linux-fsdevel

This was an oversight in the original implementation, as it makes no
sense to specify both scoping flags to the same openat2(2) invocation
(before this patch, the result of such an invocation was equivalent to
RESOLVE_IN_ROOT being ignored).

This is a userspace-visible ABI change, but the only user of openat2(2)
at the moment is LXC which doesn't specify both flags and so no
userspace programs will break as a result.

Cc: <stable@vger.kernel.org> # v5.6+
Fixes: fddb5d430ad9 ("open: introduce openat2(2) syscall")
Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
---
 fs/open.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/fs/open.c b/fs/open.c
index 9af548fb841b..4d7537ae59df 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -1010,6 +1010,10 @@ inline int build_open_flags(const struct open_how *how, struct open_flags *op)
 	if (how->resolve & ~VALID_RESOLVE_FLAGS)
 		return -EINVAL;
 
+	/* Scoping flags are mutually exclusive. */
+	if ((how->resolve & RESOLVE_BENEATH) && (how->resolve & RESOLVE_IN_ROOT))
+		return -EINVAL;
+
 	/* Deal with the mode. */
 	if (WILL_CREATE(flags)) {
 		if (how->mode & ~S_IALLUGO)
-- 
2.29.0

_______________________________________________
Containers mailing list
Containers@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/containers

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

* [PATCH v2 2/2] selftests: openat2: add RESOLVE_ conflict test
  2020-10-27 23:50 [PATCH v2 0/2] openat2: reject RESOLVE_BENEATH|RESOLVE_IN_ROOT Aleksa Sarai
  2020-10-27 23:50 ` [PATCH v2 1/2] " Aleksa Sarai
@ 2020-10-27 23:50 ` Aleksa Sarai
  2020-12-02 14:43   ` Christian Brauner
  2 siblings, 0 replies; 5+ messages in thread
From: Aleksa Sarai @ 2020-10-27 23:50 UTC (permalink / raw)
  To: Alexander Viro, Shuah Khan
  Cc: containers, linux-kernel, linux-kselftest, linux-fsdevel

Now that we reject conflicting RESOLVE_ flags, add a selftest to avoid
regressions.

Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
---
 tools/testing/selftests/openat2/openat2_test.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/openat2/openat2_test.c b/tools/testing/selftests/openat2/openat2_test.c
index b386367c606b..381d874cce99 100644
--- a/tools/testing/selftests/openat2/openat2_test.c
+++ b/tools/testing/selftests/openat2/openat2_test.c
@@ -155,7 +155,7 @@ struct flag_test {
 	int err;
 };
 
-#define NUM_OPENAT2_FLAG_TESTS 23
+#define NUM_OPENAT2_FLAG_TESTS 24
 
 void test_openat2_flags(void)
 {
@@ -210,6 +210,12 @@ void test_openat2_flags(void)
 		  .how.flags = O_TMPFILE | O_RDWR,
 		  .how.mode = 0x0000A00000000000ULL, .err = -EINVAL },
 
+		/* ->resolve flags must not conflict. */
+		{ .name = "incompatible resolve flags (BENEATH | IN_ROOT)",
+		  .how.flags = O_RDONLY,
+		  .how.resolve = RESOLVE_BENEATH | RESOLVE_IN_ROOT,
+		  .err = -EINVAL },
+
 		/* ->resolve must only contain RESOLVE_* flags. */
 		{ .name = "invalid how.resolve and O_RDONLY",
 		  .how.flags = O_RDONLY,
-- 
2.29.0

_______________________________________________
Containers mailing list
Containers@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/containers

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

* Re: [PATCH v2 0/2] openat2: reject RESOLVE_BENEATH|RESOLVE_IN_ROOT
  2020-10-27 23:50 [PATCH v2 0/2] openat2: reject RESOLVE_BENEATH|RESOLVE_IN_ROOT Aleksa Sarai
@ 2020-12-02 14:43   ` Christian Brauner
  2020-10-27 23:50 ` [PATCH v2 2/2] selftests: openat2: add RESOLVE_ conflict test Aleksa Sarai
  2020-12-02 14:43   ` Christian Brauner
  2 siblings, 0 replies; 5+ messages in thread
From: Christian Brauner @ 2020-12-02 14:43 UTC (permalink / raw)
  To: Aleksa Sarai
  Cc: containers, linux-kernel, Alexander Viro, linux-kselftest,
	linux-fsdevel, Shuah Khan

On Wed, Oct 28, 2020 at 10:50:42AM +1100, Aleksa Sarai wrote:
> This was an oversight in the original implementation, as it makes no
> sense to specify both scoping flags to the same openat2(2) invocation
> (before this patch, the result of such an invocation was equivalent to
> RESOLVE_IN_ROOT being ignored).
> 
> This is a userspace-visible ABI change, but the only user of openat2(2)
> at the moment is LXC which doesn't specify both flags and so no
> userspace programs will break as a result.
> 
> Changelog:
>   v2: Split patch so as to separate selftest changes. [Shuah Khan]
>   v1: <https://lore.kernel.org/lkml/20201007103608.17349-1-cyphar@cyphar.com/>
> 
> Aleksa Sarai (2):
>   openat2: reject RESOLVE_BENEATH|RESOLVE_IN_ROOT
>   selftests: openat2: add RESOLVE_ conflict test
> 
>  fs/open.c                                      | 4 ++++
>  tools/testing/selftests/openat2/openat2_test.c | 8 +++++++-
>  2 files changed, 11 insertions(+), 1 deletion(-)

I've applied this patchset now. There's no need to have this sit around
another merge window. I'm happy to drop it again in case you're picking
it up later, Al.

Thanks!
Christian
_______________________________________________
Containers mailing list
Containers@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/containers

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

* Re: [PATCH v2 0/2] openat2: reject RESOLVE_BENEATH|RESOLVE_IN_ROOT
@ 2020-12-02 14:43   ` Christian Brauner
  0 siblings, 0 replies; 5+ messages in thread
From: Christian Brauner @ 2020-12-02 14:43 UTC (permalink / raw)
  To: Aleksa Sarai
  Cc: Alexander Viro, Shuah Khan, containers, linux-fsdevel,
	linux-kselftest, linux-kernel

On Wed, Oct 28, 2020 at 10:50:42AM +1100, Aleksa Sarai wrote:
> This was an oversight in the original implementation, as it makes no
> sense to specify both scoping flags to the same openat2(2) invocation
> (before this patch, the result of such an invocation was equivalent to
> RESOLVE_IN_ROOT being ignored).
> 
> This is a userspace-visible ABI change, but the only user of openat2(2)
> at the moment is LXC which doesn't specify both flags and so no
> userspace programs will break as a result.
> 
> Changelog:
>   v2: Split patch so as to separate selftest changes. [Shuah Khan]
>   v1: <https://lore.kernel.org/lkml/20201007103608.17349-1-cyphar@cyphar.com/>
> 
> Aleksa Sarai (2):
>   openat2: reject RESOLVE_BENEATH|RESOLVE_IN_ROOT
>   selftests: openat2: add RESOLVE_ conflict test
> 
>  fs/open.c                                      | 4 ++++
>  tools/testing/selftests/openat2/openat2_test.c | 8 +++++++-
>  2 files changed, 11 insertions(+), 1 deletion(-)

I've applied this patchset now. There's no need to have this sit around
another merge window. I'm happy to drop it again in case you're picking
it up later, Al.

Thanks!
Christian

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

end of thread, other threads:[~2020-12-02 14:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-27 23:50 [PATCH v2 0/2] openat2: reject RESOLVE_BENEATH|RESOLVE_IN_ROOT Aleksa Sarai
2020-10-27 23:50 ` [PATCH v2 1/2] " Aleksa Sarai
2020-10-27 23:50 ` [PATCH v2 2/2] selftests: openat2: add RESOLVE_ conflict test Aleksa Sarai
2020-12-02 14:43 ` [PATCH v2 0/2] openat2: reject RESOLVE_BENEATH|RESOLVE_IN_ROOT Christian Brauner
2020-12-02 14:43   ` Christian Brauner

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.