summaryrefslogtreecommitdiff
path: root/sys/kern/kern_prot.c
diff options
context:
space:
mode:
authorBjoern A. Zeeb <bz@FreeBSD.org>2008-10-17 16:26:16 +0000
committerBjoern A. Zeeb <bz@FreeBSD.org>2008-10-17 16:26:16 +0000
commitf08ef6c5955243df89b3f536540d971cc1c5e53f (patch)
tree5281cd8b122823b07a0da3d73d1b7dd5592afe3d /sys/kern/kern_prot.c
parentdd8c8a8e43a6406a15c995356806b3d5783086bf (diff)
Notes
Diffstat (limited to 'sys/kern/kern_prot.c')
-rw-r--r--sys/kern/kern_prot.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/sys/kern/kern_prot.c b/sys/kern/kern_prot.c
index cd0fb170a20f..bbd4fd5bf243 100644
--- a/sys/kern/kern_prot.c
+++ b/sys/kern/kern_prot.c
@@ -45,6 +45,8 @@
__FBSDID("$FreeBSD$");
#include "opt_compat.h"
+#include "opt_inet.h"
+#include "opt_inet6.h"
#include "opt_mac.h"
#include <sys/param.h>
@@ -68,6 +70,11 @@ __FBSDID("$FreeBSD$");
#include <sys/syscallsubr.h>
#include <sys/sysctl.h>
+#if defined(INET) || defined(INET6)
+#include <netinet/in.h>
+#include <netinet/in_pcb.h>
+#endif
+
#include <security/audit/audit.h>
#include <security/mac/mac_framework.h>
@@ -1704,6 +1711,34 @@ cr_canseesocket(struct ucred *cred, struct socket *so)
return (0);
}
+#if defined(INET) || defined(INET6)
+/*-
+ * Determine whether the subject represented by cred can "see" a socket.
+ * Returns: 0 for permitted, ENOENT otherwise.
+ */
+int
+cr_canseeinpcb(struct ucred *cred, struct inpcb *inp)
+{
+ int error;
+
+ error = prison_check(cred, inp->inp_cred);
+ if (error)
+ return (ENOENT);
+#ifdef MAC
+ INP_LOCK_ASSERT(inp);
+ error = mac_inpcb_check_visible(cred, inp);
+ if (error)
+ return (error);
+#endif
+ if (cr_seeotheruids(cred, inp->inp_cred))
+ return (ENOENT);
+ if (cr_seeothergids(cred, inp->inp_cred))
+ return (ENOENT);
+
+ return (0);
+}
+#endif
+
/*-
* Determine whether td can wait for the exit of p.
* Returns: 0 for permitted, an errno value otherwise