X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=ipc%2Futil.c;h=67b6d178db6e17d95b54e84b75361aec9a0544cc;hb=db1a19b38f3a85f475b4ad716c71be133d8ca48e;hp=5e785a29e1e63349ff35f8a1b3282f468fd24277;hpb=12df7556705aae97f24a397377e17898700d7192;p=powerpc.git diff --git a/ipc/util.c b/ipc/util.c index 5e785a29e1..67b6d178db 100644 --- a/ipc/util.c +++ b/ipc/util.c @@ -10,9 +10,10 @@ * Manfred Spraul * Oct 2002 - One lock per IPC id. RCU ipc_free for lock-free grow_ary(). * Mingming Cao + * Mar 2006 - support for audit of ipc object properties + * Dustin Kirkland */ -#include #include #include #include @@ -27,6 +28,7 @@ #include #include #include +#include #include @@ -183,8 +185,7 @@ static int grow_ary(struct ipc_ids* ids, int newsize) if(new == NULL) return size; new->size = newsize; - memcpy(new->p, ids->entries->p, sizeof(struct kern_ipc_perm *)*size + - sizeof(struct ipc_id_ary)); + memcpy(new->p, ids->entries->p, sizeof(struct kern_ipc_perm *)*size); for(i=size;ip[i] = NULL; } @@ -465,8 +466,10 @@ void ipc_rcu_putref(void *ptr) int ipcperms (struct kern_ipc_perm *ipcp, short flag) { /* flag will most probably be 0 or S_...UGO from */ - int requested_mode, granted_mode; + int requested_mode, granted_mode, err; + if (unlikely((err = audit_ipc_obj(ipcp)))) + return err; requested_mode = (flag >> 6) | (flag >> 3) | flag; granted_mode = ipcp->mode; if (current->euid == ipcp->cuid || current->euid == ipcp->uid)