Module Name: src Committed By: christos Date: Sun Sep 15 20:51:03 UTC 2019
Modified Files: src/sys/kern: sys_mqueue.c vfs_syscalls.c Log Message: Prevent O_EXEC for mq_open(2), and O_EXEC with a writable fd for open(2). To generate a diff of this commit: cvs rdiff -u -r1.44 -r1.45 src/sys/kern/sys_mqueue.c cvs rdiff -u -r1.533 -r1.534 src/sys/kern/vfs_syscalls.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/sys_mqueue.c diff -u src/sys/kern/sys_mqueue.c:1.44 src/sys/kern/sys_mqueue.c:1.45 --- src/sys/kern/sys_mqueue.c:1.44 Mon Apr 15 21:02:41 2019 +++ src/sys/kern/sys_mqueue.c Sun Sep 15 16:51:03 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_mqueue.c,v 1.44 2019/04/16 01:02:41 martin Exp $ */ +/* $NetBSD: sys_mqueue.c,v 1.45 2019/09/15 20:51:03 christos Exp $ */ /* * Copyright (c) 2007-2011 Mindaugas Rasiukevicius <rmind at NetBSD org> @@ -43,7 +43,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sys_mqueue.c,v 1.44 2019/04/16 01:02:41 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_mqueue.c,v 1.45 2019/09/15 20:51:03 christos Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -614,6 +614,9 @@ sys_mq_open(struct lwp *l, const struct struct mq_attr *attr = NULL, a; int error; + if ((SCARG(uap, oflag) & O_EXEC) != 0) + return EINVAL; + if ((SCARG(uap, oflag) & O_CREAT) != 0 && SCARG(uap, attr) != NULL) { error = copyin(SCARG(uap, attr), &a, sizeof(a)); if (error) Index: src/sys/kern/vfs_syscalls.c diff -u src/sys/kern/vfs_syscalls.c:1.533 src/sys/kern/vfs_syscalls.c:1.534 --- src/sys/kern/vfs_syscalls.c:1.533 Sat Jul 6 10:37:24 2019 +++ src/sys/kern/vfs_syscalls.c Sun Sep 15 16:51:03 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_syscalls.c,v 1.533 2019/07/06 14:37:24 maxv Exp $ */ +/* $NetBSD: vfs_syscalls.c,v 1.534 2019/09/15 20:51:03 christos Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -70,7 +70,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.533 2019/07/06 14:37:24 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.534 2019/09/15 20:51:03 christos Exp $"); #ifdef _KERNEL_OPT #include "opt_fileassoc.h" @@ -1572,6 +1572,13 @@ do_open(lwp_t *l, struct vnode *dvp, str open_flags &= ~(int)O_SEARCH; } + /* + * Only one of the O_EXEC, O_RDONLY, O_WRONLY and O_RDWR flags + * may be specified. + */ + if ((open_flags & O_EXEC) && (open_flags & O_ACCMODE)) + return EINVAL; + flags = FFLAGS(open_flags); if ((flags & (FREAD | FWRITE)) == 0) return EINVAL;