Module Name: src Committed By: elad Date: Tue Dec 29 04:23:43 UTC 2009
Modified Files: src/sys/kern: uipc_socket.c uipc_syscalls.c src/sys/sys: socketvar.h Log Message: Add credentials to to sockets. We don't need any deferred free etc. because we no longer free the credentials in interrupt context. Tons of help from matt@, thanks! To generate a diff of this commit: cvs rdiff -u -r1.197 -r1.198 src/sys/kern/uipc_socket.c cvs rdiff -u -r1.138 -r1.139 src/sys/kern/uipc_syscalls.c cvs rdiff -u -r1.123 -r1.124 src/sys/sys/socketvar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/uipc_socket.c diff -u src/sys/kern/uipc_socket.c:1.197 src/sys/kern/uipc_socket.c:1.198 --- src/sys/kern/uipc_socket.c:1.197 Tue Dec 29 03:48:18 2009 +++ src/sys/kern/uipc_socket.c Tue Dec 29 04:23:43 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: uipc_socket.c,v 1.197 2009/12/29 03:48:18 elad Exp $ */ +/* $NetBSD: uipc_socket.c,v 1.198 2009/12/29 04:23:43 elad Exp $ */ /*- * Copyright (c) 2002, 2007, 2008, 2009 The NetBSD Foundation, Inc. @@ -63,7 +63,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.197 2009/12/29 03:48:18 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.198 2009/12/29 04:23:43 elad Exp $"); #include "opt_compat_netbsd.h" #include "opt_sock_counters.h" @@ -582,6 +582,7 @@ sofree(so); return error; } + so->so_cred = kauth_cred_dup(l->l_cred); sounlock(so); *aso = so; return 0; @@ -771,6 +772,7 @@ discard: if (so->so_state & SS_NOFDREF) panic("soclose: NOFDREF"); + kauth_cred_free(so->so_cred); so->so_state |= SS_NOFDREF; sofree(so); return (error); Index: src/sys/kern/uipc_syscalls.c diff -u src/sys/kern/uipc_syscalls.c:1.138 src/sys/kern/uipc_syscalls.c:1.139 --- src/sys/kern/uipc_syscalls.c:1.138 Sun Dec 20 09:36:06 2009 +++ src/sys/kern/uipc_syscalls.c Tue Dec 29 04:23:43 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: uipc_syscalls.c,v 1.138 2009/12/20 09:36:06 dsl Exp $ */ +/* $NetBSD: uipc_syscalls.c,v 1.139 2009/12/29 04:23:43 elad Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls.c,v 1.138 2009/12/20 09:36:06 dsl Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls.c,v 1.139 2009/12/29 04:23:43 elad Exp $"); #include "opt_pipe.h" @@ -80,6 +80,7 @@ #include <sys/un.h> #include <sys/ktrace.h> #include <sys/event.h> +#include <sys/kauth.h> #include <sys/mount.h> #include <sys/syscallargs.h> @@ -228,9 +229,11 @@ fp2->f_ops = &socketops; fp2->f_data = so2; error = soaccept(so2, nam); + so2->so_cred = kauth_cred_dup(so->so_cred); sounlock(so); if (error) { /* an error occurred, free the file descriptor and mbuf */ + kauth_cred_free(so2->so_cred); m_freem(nam); mutex_enter(&fp2->f_lock); fp2->f_count++; Index: src/sys/sys/socketvar.h diff -u src/sys/sys/socketvar.h:1.123 src/sys/sys/socketvar.h:1.124 --- src/sys/sys/socketvar.h:1.123 Sun Dec 20 09:36:06 2009 +++ src/sys/sys/socketvar.h Tue Dec 29 04:23:43 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: socketvar.h,v 1.123 2009/12/20 09:36:06 dsl Exp $ */ +/* $NetBSD: socketvar.h,v 1.124 2009/12/29 04:23:43 elad Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -177,6 +177,7 @@ void *so_accept_filter_arg; /* saved filter args */ char *so_accept_filter_str; /* saved user args */ } *so_accf; + kauth_cred_t so_cred; /* socket credentials */ }; #define SB_EMPTY_FIXUP(sb) \