diff options
| author | rtr <rtr@NetBSD.org> | 2015-04-05 02:26:39 +0000 |
|---|---|---|
| committer | rtr <rtr@NetBSD.org> | 2015-04-05 02:26:39 +0000 |
| commit | 2d2ac9883fa9cc0e4a12e6d08622a4e5c896ee5d (patch) | |
| tree | 25cf3d64843e9a4aa05c8a4ad4bf36e27d9d80b0 /sys | |
| parent | 46160e3c72baa58851ef4f16aa526e35cb82f09d (diff) | |
make bind() fail with EINVAL if the address family of the provided
socket does not match the address family of the sockaddr received.
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/kern/uipc_socket.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index 3003e3ace12..722a2999b76 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -1,4 +1,4 @@ -/* $NetBSD: uipc_socket.c,v 1.236 2015/04/03 20:01:07 rtr Exp $ */ +/* $NetBSD: uipc_socket.c,v 1.237 2015/04/05 02:26:39 rtr Exp $ */ /*- * Copyright (c) 2002, 2007, 2008, 2009 The NetBSD Foundation, Inc. @@ -71,7 +71,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.236 2015/04/03 20:01:07 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.237 2015/04/05 02:26:39 rtr Exp $"); #include "opt_compat_netbsd.h" #include "opt_sock_counters.h" @@ -629,6 +629,10 @@ sobind(struct socket *so, struct sockaddr *nam, struct lwp *l) int error; solock(so); + if (nam->sa_family != so->so_proto->pr_domain->dom_family) { + sounlock(so); + return EINVAL; + } error = (*so->so_proto->pr_usrreqs->pr_bind)(so, nam, l); sounlock(so); return error; |
