aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet/in_pcb.c
diff options
context:
space:
mode:
authorGuido van Rooij <guido@FreeBSD.org>1998-03-01 19:39:29 +0000
committerGuido van Rooij <guido@FreeBSD.org>1998-03-01 19:39:29 +0000
commit4049a042532f6ed2ac22101bce0cb84f34e23f06 (patch)
tree1d94130fcc519ebfe2b9190cf2f22ed5c8bfa2af /sys/netinet/in_pcb.c
parent0ad8c69ad49ab22a2e0763a2b971bc44a45ac7aa (diff)
downloadsrc-4049a042532f6ed2ac22101bce0cb84f34e23f06.tar.gz
src-4049a042532f6ed2ac22101bce0cb84f34e23f06.zip
Make sure that you can only bind a more specific address when it is
done by the same uid. Obtained from: OpenBSD
Notes
Notes: svn path=/head/; revision=33955
Diffstat (limited to 'sys/netinet/in_pcb.c')
-rw-r--r--sys/netinet/in_pcb.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c
index afa6fbd0095f..ede159dc6b92 100644
--- a/sys/netinet/in_pcb.c
+++ b/sys/netinet/in_pcb.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)in_pcb.c 8.4 (Berkeley) 5/24/95
- * $Id: in_pcb.c,v 1.37 1997/12/25 06:57:36 davidg Exp $
+ * $Id: in_pcb.c,v 1.38 1998/01/27 09:15:03 davidg Exp $
*/
#include <sys/param.h>
@@ -192,6 +192,12 @@ in_pcbbind(inp, nam, p)
if (ntohs(lport) < IPPORT_RESERVED && p &&
suser(p->p_ucred, &p->p_acflag))
return (EACCES);
+ if (so->so_uid) {
+ t = in_pcblookup_local(inp->inp_pcbinfo,
+ sin->sin_addr, lport, INPLOOKUP_WILDCARD);
+ if (t && (so->so_uid != t->inp_socket->so_uid))
+ return (EADDRINUSE);
+ }
t = in_pcblookup_local(pcbinfo, sin->sin_addr,
lport, wild);
if (t && (reuseport & t->inp_socket->so_options) == 0)