Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 6 Apr 2011 16:59:55 +0000 (UTC)
From:      Edward Tomasz Napierala <trasz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r220388 - in head/sys: kern sys
Message-ID:  <201104061659.p36GxtjJ099011@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201104061659.p36GxtjJ099011>