diff options
author | rwatson <rwatson@FreeBSD.org> | 2004-06-13 02:50:07 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2004-06-13 02:50:07 +0000 |
commit | f1bc833e9552e6874a5343bfd4a0b2999a185b42 (patch) | |
tree | b82bb2c8445f7117f831d6287d086e05ebd1953e /sys/kern/kern_prot.c | |
parent | b173c880aa20391adf396c098a510e93c583ec02 (diff) | |
download | FreeBSD-src-f1bc833e9552e6874a5343bfd4a0b2999a185b42.zip FreeBSD-src-f1bc833e9552e6874a5343bfd4a0b2999a185b42.tar.gz |
Socket MAC labels so_label and so_peerlabel are now protected by
SOCK_LOCK(so):
- Hold socket lock over calls to MAC entry points reading or
manipulating socket labels.
- Assert socket lock in MAC entry point implementations.
- When externalizing the socket label, first make a thread-local
copy while holding the socket lock, then release the socket lock
to externalize to userspace.
Diffstat (limited to 'sys/kern/kern_prot.c')
-rw-r--r-- | sys/kern/kern_prot.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/kern/kern_prot.c b/sys/kern/kern_prot.c index ab2ae0a..a964592 100644 --- a/sys/kern/kern_prot.c +++ b/sys/kern/kern_prot.c @@ -1685,7 +1685,9 @@ cr_canseesocket(struct ucred *cred, struct socket *so) if (error) return (ENOENT); #ifdef MAC + SOCK_LOCK(so); error = mac_check_socket_visible(cred, so); + SOCK_UNLOCK(so); if (error) return (error); #endif |