X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=ipc%2Fsem.c;h=71936c91305704737093f1fa38859078da3b3bab;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=3725673556848f91900c9778c6fce4896fec7013;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/ipc/sem.c b/ipc/sem.c index 372567355..71936c913 100644 --- a/ipc/sem.c +++ b/ipc/sem.c @@ -71,6 +71,8 @@ #include #include #include +#include + #include #include "util.h" @@ -116,7 +118,7 @@ void __init sem_init (void) ipc_init_ids(&sem_ids,sc_semmni); #ifdef CONFIG_PROC_FS - create_proc_read_entry("sysvipc/sem", 0, 0, sysvipc_sem_read_proc, NULL); + create_proc_read_entry("sysvipc/sem", 0, NULL, sysvipc_sem_read_proc, NULL); #endif } @@ -175,6 +177,7 @@ static int newary (key_t key, int nsems, int semflg) sma->sem_perm.mode = (semflg & S_IRWXUGO); sma->sem_perm.key = key; + sma->sem_perm.xid = current->xid; sma->sem_perm.security = NULL; retval = security_sem_alloc(sma); @@ -610,7 +613,7 @@ static int semctl_main(int semid, int semnum, int cmd, int version, union semun switch (cmd) { case GETALL: { - ushort *array = arg.array; + ushort __user *array = arg.array; int i; if(nsems > SEMMSL_FAST) { @@ -1296,7 +1299,11 @@ static int sysvipc_sem_read_proc(char *buffer, char **start, off_t offset, int l for(i = 0; i <= sem_ids.max_id; i++) { struct sem_array *sma; sma = sem_lock(i); - if(sma) { + if (sma) { + if (!vx_check(sma->sem_perm.xid, VX_IDENT)) { + sem_unlock(sma); + continue; + } len += sprintf(buffer + len, "%10d %10d %4o %10lu %5u %5u %5u %5u %10lu %10lu\n", sma->sem_perm.key, sem_buildid(i,sma->sem_perm.seq),