From owner-svn-src-head@FreeBSD.ORG Wed Apr 6 16:59:55 2011 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D2705106566C; Wed, 6 Apr 2011 16:59:55 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C24FA8FC24; Wed, 6 Apr 2011 16:59:55 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p36GxtvM099017; Wed, 6 Apr 2011 16:59:55 GMT (envelope-from trasz@svn.freebsd.org) Received: (from trasz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p36GxtjJ099011; Wed, 6 Apr 2011 16:59:55 GMT (envelope-from trasz@svn.freebsd.org) Message-Id: <201104061659.p36GxtjJ099011@svn.freebsd.org> From: Edward Tomasz Napierala Date: Wed, 6 Apr 2011 16:59:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220388 - in head/sys: kern sys X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Apr 2011 16:59:55 -0000 Author: trasz Date: Wed Apr 6 16:59:54 2011 New Revision: 220388 URL: http://svn.freebsd.org/changeset/base/220388 Log: Add ucred pointer to the SysV-related memory structures. This is required for racct. Note that after this commit, ipcs(1) needs to be rebuilt. Otherwise, it will fail with "ipcs: sysctlbyname: kern.ipc.msqids: Cannot allocate memory". Sponsored by: The FreeBSD Foundation Reviewed by: kib (earlier version) Modified: head/sys/kern/sysv_msg.c head/sys/kern/sysv_sem.c head/sys/kern/sysv_shm.c head/sys/sys/msg.h head/sys/sys/sem.h head/sys/sys/shm.h Modified: head/sys/kern/sysv_msg.c ============================================================================== --- head/sys/kern/sysv_msg.c Wed Apr 6 16:27:04 2011 (r220387) +++ head/sys/kern/sysv_msg.c Wed Apr 6 16:59:54 2011 (r220388) @@ -466,6 +466,9 @@ kern_msgctl(td, msqid, cmd, msqbuf) } #endif + crfree(msqkptr->cred); + msqkptr->cred = NULL; + /* Free the message headers */ msghdr = msqkptr->u.msg_first; while (msghdr != NULL) { @@ -620,6 +623,8 @@ msgget(td, uap) msqkptr->u.msg_perm.cgid = cred->cr_gid; msqkptr->u.msg_perm.gid = cred->cr_gid; msqkptr->u.msg_perm.mode = (msgflg & 0777); + crhold(cred); + msqkptr->cred = cred; /* Make sure that the returned msqid is unique */ msqkptr->u.msg_perm.seq = (msqkptr->u.msg_perm.seq + 1) & 0x7fff; msqkptr->u.msg_first = NULL; Modified: head/sys/kern/sysv_sem.c ============================================================================== --- head/sys/kern/sysv_sem.c Wed Apr 6 16:27:04 2011 (r220387) +++ head/sys/kern/sysv_sem.c Wed Apr 6 16:59:54 2011 (r220388) @@ -656,6 +656,8 @@ kern_semctl(struct thread *td, int semid semakptr->u.sem_perm.cuid = cred->cr_uid; semakptr->u.sem_perm.uid = cred->cr_uid; semakptr->u.sem_perm.mode = 0; + crfree(semakptr->cred); + semakptr->cred = NULL; SEMUNDO_LOCK(); semundo_clear(semidx, -1); SEMUNDO_UNLOCK(); @@ -937,6 +939,8 @@ semget(struct thread *td, struct semget_ sema[semid].u.sem_perm.cgid = cred->cr_gid; sema[semid].u.sem_perm.gid = cred->cr_gid; sema[semid].u.sem_perm.mode = (semflg & 0777) | SEM_ALLOC; + crhold(cred); + sema[semid].cred = cred; sema[semid].u.sem_perm.seq = (sema[semid].u.sem_perm.seq + 1) & 0x7fff; sema[semid].u.sem_nsems = nsems; Modified: head/sys/kern/sysv_shm.c ============================================================================== --- head/sys/kern/sysv_shm.c Wed Apr 6 16:27:04 2011 (r220387) +++ head/sys/kern/sysv_shm.c Wed Apr 6 16:59:54 2011 (r220388) @@ -246,6 +246,8 @@ shm_deallocate_segment(shmseg) #ifdef MAC mac_sysvshm_cleanup(shmseg); #endif + crfree(shmseg->cred); + shmseg->cred = NULL; } static int @@ -694,6 +696,8 @@ shmget_allocate_segment(td, uap, mode) shmseg->u.shm_perm.cgid = shmseg->u.shm_perm.gid = cred->cr_gid; shmseg->u.shm_perm.mode = (shmseg->u.shm_perm.mode & SHMSEG_WANTED) | (mode & ACCESSPERMS) | SHMSEG_ALLOCATED; + crhold(cred); + shmseg->cred = cred; shmseg->u.shm_segsz = uap->size; shmseg->u.shm_cpid = td->td_proc->p_pid; shmseg->u.shm_lpid = shmseg->u.shm_nattch = 0; Modified: head/sys/sys/msg.h ============================================================================== --- head/sys/sys/msg.h Wed Apr 6 16:27:04 2011 (r220387) +++ head/sys/sys/msg.h Wed Apr 6 16:59:54 2011 (r220388) @@ -160,6 +160,7 @@ struct msqid_kernel { * Kernel-private components of the message queue. */ struct label *label; /* MAC label */ + struct ucred *cred; /* creator's credentials */ }; #else /* !_KERNEL */ Modified: head/sys/sys/sem.h ============================================================================== --- head/sys/sys/sem.h Wed Apr 6 16:27:04 2011 (r220387) +++ head/sys/sys/sem.h Wed Apr 6 16:59:54 2011 (r220388) @@ -126,6 +126,7 @@ extern struct seminfo seminfo; struct semid_kernel { struct semid_ds u; struct label *label; /* MAC framework label */ + struct ucred *cred; /* creator's credentials */ }; /* internal "mode" bits */ Modified: head/sys/sys/shm.h ============================================================================== --- head/sys/sys/shm.h Wed Apr 6 16:27:04 2011 (r220387) +++ head/sys/sys/shm.h Wed Apr 6 16:59:54 2011 (r220388) @@ -124,6 +124,7 @@ struct shmid_kernel { struct shmid_ds u; vm_object_t object; struct label *label; /* MAC label */ + struct ucred *cred; /* creator's credendials */ }; extern struct shminfo shminfo;