diff options
| author | Bjoern A. Zeeb <bz@FreeBSD.org> | 2008-10-17 16:26:16 +0000 |
|---|---|---|
| committer | Bjoern A. Zeeb <bz@FreeBSD.org> | 2008-10-17 16:26:16 +0000 |
| commit | f08ef6c5955243df89b3f536540d971cc1c5e53f (patch) | |
| tree | 5281cd8b122823b07a0da3d73d1b7dd5592afe3d /sys/kern/kern_prot.c | |
| parent | dd8c8a8e43a6406a15c995356806b3d5783086bf (diff) | |
Notes
Diffstat (limited to 'sys/kern/kern_prot.c')
| -rw-r--r-- | sys/kern/kern_prot.c | 35 |
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 |
