On 2019-12-28, Sargun Dhillon <sargun@xxxxxxxxx> wrote: > This patch is a small change in enforcement of the uapi for > SECCOMP_IOCTL_NOTIF_RECV ioctl. Specifically, the datastructure which > is passed (seccomp_notif) must be zeroed out. Previously any of its > members could be set to nonsense values, and we would ignore it. > > This ensures all fields are set to their zero value. > > This relies on the seccomp_notif datastructure to not have > any unnamed padding, as it is valid to initialize the datastructure > as: > > struct seccomp_notif notif = {}; > > This only initializes named members to their 0-value [1]. > > [1]: https://lore.kernel.org/lkml/20191227023131.klnobtlfgeqcmvbb@xxxxxxxxxxxxxxxxxxxx/ > > Signed-off-by: Sargun Dhillon <sargun@xxxxxxxxx> > Cc: Kees Cook <keescook@xxxxxxxxxxxx> Looks good. Reviewed-by: Aleksa Sarai <cyphar@xxxxxxxxxx> > --- > kernel/seccomp.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/kernel/seccomp.c b/kernel/seccomp.c > index 12d2227e5786..4fd73cbdd01e 100644 > --- a/kernel/seccomp.c > +++ b/kernel/seccomp.c > @@ -1026,6 +1026,12 @@ static long seccomp_notify_recv(struct seccomp_filter *filter, > struct seccomp_notif unotif; > ssize_t ret; > > + ret = check_zeroed_user(buf, sizeof(unotif)); > + if (ret < 0) > + return ret; > + if (!ret) > + return -EINVAL; > + > memset(&unotif, 0, sizeof(unotif)); > > ret = down_interruptible(&filter->notif->request); > -- > 2.20.1 > -- Aleksa Sarai Senior Software Engineer (Containers) SUSE Linux GmbH <https://www.cyphar.com/>
Attachment:
signature.asc
Description: PGP signature