summaryrefslogtreecommitdiffstats
path: root/sys/kern/sys_generic.c
diff options
context:
space:
mode:
authorsemarie <semarie@openbsd.org>2015-10-18 05:26:55 +0000
committersemarie <semarie@openbsd.org>2015-10-18 05:26:55 +0000
commit66b07ceddaa45f42a07fb355c68ff4387431f514 (patch)
tree1b0845dbc30d128d2212fbbea0704f74d82f2c29 /sys/kern/sys_generic.c
parentUse offsetof() instead of adding the sizes of the preceeding struct members (diff)
downloadwireguard-openbsd-66b07ceddaa45f42a07fb355c68ff4387431f514.tar.xz
wireguard-openbsd-66b07ceddaa45f42a07fb355c68ff4387431f514.zip
move SS_DNS socket check from kern_plegde.c to sys_generic.c
this check has nothing to do with pledge(2). make it lives in sys_ioctl() call. while here, move the (fp == NULL) check early and remove duplicate check from pledge_ioctl_check(). ok guenther@ deraadt@
Diffstat (limited to 'sys/kern/sys_generic.c')
-rw-r--r--sys/kern/sys_generic.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c
index e837cc5431e..baaedd4efb5 100644
--- a/sys/kern/sys_generic.c
+++ b/sys/kern/sys_generic.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sys_generic.c,v 1.107 2015/10/11 23:13:02 deraadt Exp $ */
+/* $OpenBSD: sys_generic.c,v 1.108 2015/10/18 05:26:55 semarie Exp $ */
/* $NetBSD: sys_generic.c,v 1.24 1996/03/29 00:25:32 cgd Exp $ */
/*
@@ -404,13 +404,20 @@ sys_ioctl(struct proc *p, void *v, register_t *retval)
fdp = p->p_fd;
fp = fd_getfile_mode(fdp, SCARG(uap, fd), FREAD|FWRITE);
+ if (fp == NULL)
+ return (EBADF);
+
+ if (fp->f_type == DTYPE_SOCKET) {
+ struct socket *so = fp->f_data;
+
+ if (so->so_state & SS_DNS)
+ return (EINVAL);
+ }
+
error = pledge_ioctl_check(p, com, fp);
if (error)
return (error);
- if (fp == NULL)
- return (EBADF);
-
switch (com) {
case FIONCLEX:
case FIOCLEX: