mac_socket.c (165469) | mac_socket.c (168955) |
---|---|
1/*- 2 * Copyright (c) 1999-2002 Robert N. M. Watson 3 * Copyright (c) 2001 Ilmar S. Habibulin 4 * Copyright (c) 2001-2005 Networks Associates Technology, Inc. 5 * Copyright (c) 2005 SPARTA, Inc. 6 * All rights reserved. 7 * 8 * This software was developed by Robert Watson and Ilmar Habibulin for the --- 25 unchanged lines hidden (view full) --- 34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 37 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 38 * SUCH DAMAGE. 39 */ 40 41#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1999-2002 Robert N. M. Watson 3 * Copyright (c) 2001 Ilmar S. Habibulin 4 * Copyright (c) 2001-2005 Networks Associates Technology, Inc. 5 * Copyright (c) 2005 SPARTA, Inc. 6 * All rights reserved. 7 * 8 * This software was developed by Robert Watson and Ilmar Habibulin for the --- 25 unchanged lines hidden (view full) --- 34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 37 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 38 * SUCH DAMAGE. 39 */ 40 41#include <sys/cdefs.h> |
42__FBSDID("$FreeBSD: head/sys/security/mac/mac_socket.c 165469 2006-12-22 23:34:47Z rwatson $"); | 42__FBSDID("$FreeBSD: head/sys/security/mac/mac_socket.c 168955 2007-04-22 19:55:56Z rwatson $"); |
43 44#include "opt_mac.h" 45 46#include <sys/param.h> 47#include <sys/kernel.h> 48#include <sys/lock.h> 49#include <sys/malloc.h> 50#include <sys/mutex.h> --- 99 unchanged lines hidden (view full) --- 150mac_socket_peer_label_free(struct label *label) 151{ 152 153 MAC_PERFORM(destroy_socket_peer_label, label); 154 mac_labelzone_free(label); 155} 156 157void | 43 44#include "opt_mac.h" 45 46#include <sys/param.h> 47#include <sys/kernel.h> 48#include <sys/lock.h> 49#include <sys/malloc.h> 50#include <sys/mutex.h> --- 99 unchanged lines hidden (view full) --- 150mac_socket_peer_label_free(struct label *label) 151{ 152 153 MAC_PERFORM(destroy_socket_peer_label, label); 154 mac_labelzone_free(label); 155} 156 157void |
158mac_destroy_socket(struct socket *socket) | 158mac_destroy_socket(struct socket *so) |
159{ 160 | 159{ 160 |
161 mac_socket_label_free(socket->so_label); 162 socket->so_label = NULL; 163 mac_socket_peer_label_free(socket->so_peerlabel); 164 socket->so_peerlabel = NULL; | 161 mac_socket_label_free(so->so_label); 162 so->so_label = NULL; 163 mac_socket_peer_label_free(so->so_peerlabel); 164 so->so_peerlabel = NULL; |
165} 166 167void 168mac_copy_socket_label(struct label *src, struct label *dest) 169{ 170 171 MAC_PERFORM(copy_socket_label, src, dest); 172} --- 26 unchanged lines hidden (view full) --- 199 int error; 200 201 MAC_INTERNALIZE(socket, label, string); 202 203 return (error); 204} 205 206void | 165} 166 167void 168mac_copy_socket_label(struct label *src, struct label *dest) 169{ 170 171 MAC_PERFORM(copy_socket_label, src, dest); 172} --- 26 unchanged lines hidden (view full) --- 199 int error; 200 201 MAC_INTERNALIZE(socket, label, string); 202 203 return (error); 204} 205 206void |
207mac_create_socket(struct ucred *cred, struct socket *socket) | 207mac_create_socket(struct ucred *cred, struct socket *so) |
208{ 209 | 208{ 209 |
210 MAC_PERFORM(create_socket, cred, socket, socket->so_label); | 210 MAC_PERFORM(create_socket, cred, so, so->so_label); |
211} 212 213void | 211} 212 213void |
214mac_create_socket_from_socket(struct socket *oldsocket, 215 struct socket *newsocket) | 214mac_create_socket_from_socket(struct socket *oldso, struct socket *newso) |
216{ 217 | 215{ 216 |
218 SOCK_LOCK_ASSERT(oldsocket); 219 MAC_PERFORM(create_socket_from_socket, oldsocket, oldsocket->so_label, 220 newsocket, newsocket->so_label); | 217 SOCK_LOCK_ASSERT(oldso); 218 219 MAC_PERFORM(create_socket_from_socket, oldso, oldso->so_label, newso, 220 newso->so_label); |
221} 222 223static void | 221} 222 223static void |
224mac_relabel_socket(struct ucred *cred, struct socket *socket, | 224mac_relabel_socket(struct ucred *cred, struct socket *so, |
225 struct label *newlabel) 226{ 227 | 225 struct label *newlabel) 226{ 227 |
228 SOCK_LOCK_ASSERT(socket); 229 MAC_PERFORM(relabel_socket, cred, socket, socket->so_label, newlabel); | 228 SOCK_LOCK_ASSERT(so); 229 230 MAC_PERFORM(relabel_socket, cred, so, so->so_label, newlabel); |
230} 231 232void | 231} 232 233void |
233mac_set_socket_peer_from_mbuf(struct mbuf *mbuf, struct socket *socket) | 234mac_set_socket_peer_from_mbuf(struct mbuf *m, struct socket *so) |
234{ 235 struct label *label; 236 | 235{ 236 struct label *label; 237 |
237 SOCK_LOCK_ASSERT(socket); | 238 SOCK_LOCK_ASSERT(so); |
238 | 239 |
239 label = mac_mbuf_to_label(mbuf); | 240 label = mac_mbuf_to_label(m); |
240 | 241 |
241 MAC_PERFORM(set_socket_peer_from_mbuf, mbuf, label, socket, 242 socket->so_peerlabel); | 242 MAC_PERFORM(set_socket_peer_from_mbuf, m, label, so, 243 so->so_peerlabel); |
243} 244 245void | 244} 245 246void |
246mac_set_socket_peer_from_socket(struct socket *oldsocket, 247 struct socket *newsocket) | 247mac_set_socket_peer_from_socket(struct socket *oldso, struct socket *newso) |
248{ 249 250 /* 251 * XXXRW: only hold the socket lock on one at a time, as one socket 252 * is the original, and one is the new. However, it's called in both 253 * directions, so we can't assert the lock here currently. 254 */ | 248{ 249 250 /* 251 * XXXRW: only hold the socket lock on one at a time, as one socket 252 * is the original, and one is the new. However, it's called in both 253 * directions, so we can't assert the lock here currently. 254 */ |
255 MAC_PERFORM(set_socket_peer_from_socket, oldsocket, 256 oldsocket->so_label, newsocket, newsocket->so_peerlabel); | 255 MAC_PERFORM(set_socket_peer_from_socket, oldso, oldso->so_label, 256 newso, newso->so_peerlabel); |
257} 258 259void | 257} 258 259void |
260mac_create_mbuf_from_socket(struct socket *socket, struct mbuf *mbuf) | 260mac_create_mbuf_from_socket(struct socket *so, struct mbuf *m) |
261{ 262 struct label *label; 263 | 261{ 262 struct label *label; 263 |
264 label = mac_mbuf_to_label(mbuf); | 264 SOCK_LOCK_ASSERT(so); |
265 | 265 |
266 SOCK_LOCK_ASSERT(socket); 267 MAC_PERFORM(create_mbuf_from_socket, socket, socket->so_label, mbuf, 268 label); | 266 label = mac_mbuf_to_label(m); 267 268 MAC_PERFORM(create_mbuf_from_socket, so, so->so_label, m, label); |
269} 270 271int | 269} 270 271int |
272mac_check_socket_accept(struct ucred *cred, struct socket *socket) | 272mac_check_socket_accept(struct ucred *cred, struct socket *so) |
273{ 274 int error; 275 | 273{ 274 int error; 275 |
276 SOCK_LOCK_ASSERT(socket); | 276 SOCK_LOCK_ASSERT(so); |
277 | 277 |
278 MAC_CHECK(check_socket_accept, cred, socket, socket->so_label); | 278 MAC_CHECK(check_socket_accept, cred, so, so->so_label); |
279 280 return (error); 281} 282 283int | 279 280 return (error); 281} 282 283int |
284mac_check_socket_bind(struct ucred *ucred, struct socket *socket, 285 struct sockaddr *sockaddr) | 284mac_check_socket_bind(struct ucred *ucred, struct socket *so, 285 struct sockaddr *sa) |
286{ 287 int error; 288 | 286{ 287 int error; 288 |
289 SOCK_LOCK_ASSERT(socket); | 289 SOCK_LOCK_ASSERT(so); |
290 | 290 |
291 MAC_CHECK(check_socket_bind, ucred, socket, socket->so_label, 292 sockaddr); | 291 MAC_CHECK(check_socket_bind, ucred, so, so->so_label, sa); |
293 294 return (error); 295} 296 297int | 292 293 return (error); 294} 295 296int |
298mac_check_socket_connect(struct ucred *cred, struct socket *socket, 299 struct sockaddr *sockaddr) | 297mac_check_socket_connect(struct ucred *cred, struct socket *so, 298 struct sockaddr *sa) |
300{ 301 int error; 302 | 299{ 300 int error; 301 |
303 SOCK_LOCK_ASSERT(socket); | 302 SOCK_LOCK_ASSERT(so); |
304 | 303 |
305 MAC_CHECK(check_socket_connect, cred, socket, socket->so_label, 306 sockaddr); | 304 MAC_CHECK(check_socket_connect, cred, so, so->so_label, sa); |
307 308 return (error); 309} 310 311int | 305 306 return (error); 307} 308 309int |
312mac_check_socket_create(struct ucred *cred, int domain, int type, 313 int protocol) | 310mac_check_socket_create(struct ucred *cred, int domain, int type, int proto) |
314{ 315 int error; 316 | 311{ 312 int error; 313 |
317 MAC_CHECK(check_socket_create, cred, domain, type, protocol); | 314 MAC_CHECK(check_socket_create, cred, domain, type, proto); |
318 319 return (error); 320} 321 322int | 315 316 return (error); 317} 318 319int |
323mac_check_socket_deliver(struct socket *socket, struct mbuf *mbuf) | 320mac_check_socket_deliver(struct socket *so, struct mbuf *m) |
324{ 325 struct label *label; 326 int error; 327 | 321{ 322 struct label *label; 323 int error; 324 |
328 SOCK_LOCK_ASSERT(socket); | 325 SOCK_LOCK_ASSERT(so); |
329 | 326 |
330 label = mac_mbuf_to_label(mbuf); | 327 label = mac_mbuf_to_label(m); |
331 | 328 |
332 MAC_CHECK(check_socket_deliver, socket, socket->so_label, mbuf, 333 label); | 329 MAC_CHECK(check_socket_deliver, so, so->so_label, m, label); |
334 335 return (error); 336} 337 338int | 330 331 return (error); 332} 333 334int |
339mac_check_socket_listen(struct ucred *cred, struct socket *socket) | 335mac_check_socket_listen(struct ucred *cred, struct socket *so) |
340{ 341 int error; 342 | 336{ 337 int error; 338 |
343 SOCK_LOCK_ASSERT(socket); | 339 SOCK_LOCK_ASSERT(so); |
344 | 340 |
345 MAC_CHECK(check_socket_listen, cred, socket, socket->so_label); | 341 MAC_CHECK(check_socket_listen, cred, so, so->so_label); 342 |
346 return (error); 347} 348 349int 350mac_check_socket_poll(struct ucred *cred, struct socket *so) 351{ 352 int error; 353 354 SOCK_LOCK_ASSERT(so); 355 356 MAC_CHECK(check_socket_poll, cred, so, so->so_label); | 343 return (error); 344} 345 346int 347mac_check_socket_poll(struct ucred *cred, struct socket *so) 348{ 349 int error; 350 351 SOCK_LOCK_ASSERT(so); 352 353 MAC_CHECK(check_socket_poll, cred, so, so->so_label); |
354 |
|
357 return (error); 358} 359 360int 361mac_check_socket_receive(struct ucred *cred, struct socket *so) 362{ 363 int error; 364 365 SOCK_LOCK_ASSERT(so); 366 367 MAC_CHECK(check_socket_receive, cred, so, so->so_label); 368 369 return (error); 370} 371 372static int | 355 return (error); 356} 357 358int 359mac_check_socket_receive(struct ucred *cred, struct socket *so) 360{ 361 int error; 362 363 SOCK_LOCK_ASSERT(so); 364 365 MAC_CHECK(check_socket_receive, cred, so, so->so_label); 366 367 return (error); 368} 369 370static int |
373mac_check_socket_relabel(struct ucred *cred, struct socket *socket, | 371mac_check_socket_relabel(struct ucred *cred, struct socket *so, |
374 struct label *newlabel) 375{ 376 int error; 377 | 372 struct label *newlabel) 373{ 374 int error; 375 |
378 SOCK_LOCK_ASSERT(socket); | 376 SOCK_LOCK_ASSERT(so); |
379 | 377 |
380 MAC_CHECK(check_socket_relabel, cred, socket, socket->so_label, 381 newlabel); | 378 MAC_CHECK(check_socket_relabel, cred, so, so->so_label, newlabel); |
382 383 return (error); 384} 385 386int 387mac_check_socket_send(struct ucred *cred, struct socket *so) 388{ 389 int error; --- 13 unchanged lines hidden (view full) --- 403 SOCK_LOCK_ASSERT(so); 404 405 MAC_CHECK(check_socket_stat, cred, so, so->so_label); 406 407 return (error); 408} 409 410int | 379 380 return (error); 381} 382 383int 384mac_check_socket_send(struct ucred *cred, struct socket *so) 385{ 386 int error; --- 13 unchanged lines hidden (view full) --- 400 SOCK_LOCK_ASSERT(so); 401 402 MAC_CHECK(check_socket_stat, cred, so, so->so_label); 403 404 return (error); 405} 406 407int |
411mac_check_socket_visible(struct ucred *cred, struct socket *socket) | 408mac_check_socket_visible(struct ucred *cred, struct socket *so) |
412{ 413 int error; 414 | 409{ 410 int error; 411 |
415 SOCK_LOCK_ASSERT(socket); | 412 SOCK_LOCK_ASSERT(so); |
416 | 413 |
417 MAC_CHECK(check_socket_visible, cred, socket, socket->so_label); | 414 MAC_CHECK(check_socket_visible, cred, so, so->so_label); |
418 419 return (error); 420} 421 422int 423mac_socket_label_set(struct ucred *cred, struct socket *so, 424 struct label *label) 425{ --- 132 unchanged lines hidden --- | 415 416 return (error); 417} 418 419int 420mac_socket_label_set(struct ucred *cred, struct socket *so, 421 struct label *label) 422{ --- 132 unchanged lines hidden --- |