]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
openat2: explicitly return -E2BIG for (usize > PAGE_SIZE)
authorAleksa Sarai <cyphar@cyphar.com>
Wed, 9 Oct 2024 20:40:36 +0000 (07:40 +1100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 1 Nov 2024 01:02:41 +0000 (02:02 +0100)
commit f92f0a1b05698340836229d791b3ffecc71b265a upstream.

While we do currently return -EFAULT in this case, it seems prudent to
follow the behaviour of other syscalls like clone3. It seems quite
unlikely that anyone depends on this error code being EFAULT, but we can
always revert this if it turns out to be an issue.

Cc: stable@vger.kernel.org # v5.6+
Fixes: fddb5d430ad9 ("open: introduce openat2(2) syscall")
Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
Link: https://lore.kernel.org/r/20241010-extensible-structs-check_fields-v3-3-d2833dfe6edd@cyphar.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/open.c

index 22adbef7ecc2a6af5e28aa75de7df30385843408..30bfcddd505de4b14c6fced71230ce8a0ade6ca5 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -1458,6 +1458,8 @@ SYSCALL_DEFINE4(openat2, int, dfd, const char __user *, filename,
 
        if (unlikely(usize < OPEN_HOW_SIZE_VER0))
                return -EINVAL;
+       if (unlikely(usize > PAGE_SIZE))
+               return -E2BIG;
 
        err = copy_struct_from_user(&tmp, sizeof(tmp), how, usize);
        if (err)