2020-03-10 12:34:56

by Sven Schnelle

[permalink] [raw]
Subject: [PATCH] seccomp: add compat_ioctl for seccomp notify

Hi,

executing the seccomp_bpf testsuite with 32 bit userland (both s390 and x86)
doesn't work because there's no compat_ioctl handler defined. Is that something
that is supposed to work? Disclaimer: I don't know enough about seccomp to judge
whether there would be some adjustments required in the compat ioctl handler.
Just setting it to seccomp_notify_ioctl() makes the testsuite pass, but i'm not
sure whether that's correct.

Signed-off-by: Sven Schnelle <[email protected]>
---
kernel/seccomp.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/kernel/seccomp.c b/kernel/seccomp.c
index b6ea3dcb57bf..683c81e4861e 100644
--- a/kernel/seccomp.c
+++ b/kernel/seccomp.c
@@ -1221,6 +1221,7 @@ static const struct file_operations seccomp_notify_ops = {
.poll = seccomp_notify_poll,
.release = seccomp_notify_release,
.unlocked_ioctl = seccomp_notify_ioctl,
+ .compat_ioctl = seccomp_notify_ioctl,
};

static struct file *init_listener(struct seccomp_filter *filter)
--
2.17.1


2020-03-11 20:08:40

by Kees Cook

[permalink] [raw]
Subject: Re: [PATCH] seccomp: add compat_ioctl for seccomp notify

On Tue, Mar 10, 2020 at 01:33:32PM +0100, Sven Schnelle wrote:
> Hi,
>
> executing the seccomp_bpf testsuite with 32 bit userland (both s390 and x86)
> doesn't work because there's no compat_ioctl handler defined. Is that something
> that is supposed to work? Disclaimer: I don't know enough about seccomp to judge
> whether there would be some adjustments required in the compat ioctl handler.
> Just setting it to seccomp_notify_ioctl() makes the testsuite pass, but i'm not
> sure whether that's correct.
>
> Signed-off-by: Sven Schnelle <[email protected]>

Whoops! Yes, running a mixed environment (64-bit kernel and 32-bit
userspace) shows this as broken. I'll tweak the commit log a bit and
apply it. Thanks!

-Kees

> ---
> kernel/seccomp.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/kernel/seccomp.c b/kernel/seccomp.c
> index b6ea3dcb57bf..683c81e4861e 100644
> --- a/kernel/seccomp.c
> +++ b/kernel/seccomp.c
> @@ -1221,6 +1221,7 @@ static const struct file_operations seccomp_notify_ops = {
> .poll = seccomp_notify_poll,
> .release = seccomp_notify_release,
> .unlocked_ioctl = seccomp_notify_ioctl,
> + .compat_ioctl = seccomp_notify_ioctl,
> };
>
> static struct file *init_listener(struct seccomp_filter *filter)
> --
> 2.17.1
>

--
Kees Cook