summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorderaadt <deraadt@openbsd.org>2012-04-11 14:08:27 +0000
committerderaadt <deraadt@openbsd.org>2012-04-11 14:08:27 +0000
commita91ddabe038a89f14dcd50f59b53824bae31adc2 (patch)
tree3c4cc3a016dcb88d98cdcfc166b13eed1e6da5ea /sys/kern
parentguenther and kettenis say THREAD_PID_OFFSET shouldn't be subtracted (diff)
downloadwireguard-openbsd-a91ddabe038a89f14dcd50f59b53824bae31adc2.tar.xz
wireguard-openbsd-a91ddabe038a89f14dcd50f59b53824bae31adc2.zip
In sendmsg() permit at most 10% of maxfiles to be in-flight
during CMSG_DATA SCM_RIGHTS fd transfers. If this is exceeded, return EMFILE. ok claudio guenther gilles
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/uipc_usrreq.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/kern/uipc_usrreq.c b/sys/kern/uipc_usrreq.c
index b7b26095106..4714a386c8e 100644
--- a/sys/kern/uipc_usrreq.c
+++ b/sys/kern/uipc_usrreq.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uipc_usrreq.c,v 1.55 2011/07/06 06:31:38 matthew Exp $ */
+/* $OpenBSD: uipc_usrreq.c,v 1.56 2012/04/11 14:08:27 deraadt Exp $ */
/* $NetBSD: uipc_usrreq.c,v 1.18 1996/02/09 19:00:50 christos Exp $ */
/*
@@ -775,6 +775,9 @@ unp_internalize(struct mbuf *control, struct proc *p)
return (EINVAL);
nfds = (cm->cmsg_len - CMSG_ALIGN(sizeof(*cm))) / sizeof (int);
+ if (unp_rights + nfds > maxfiles / 10)
+ return (EMFILE);
+
/* Make sure we have room for the struct file pointers */
morespace:
neededspace = CMSG_SPACE(nfds * sizeof(struct file *)) -