#include <linux/time.h>
#include <linux/smp_lock.h>
#include <linux/security.h>
+#include <linux/vs_base.h>
+
#include <asm/uaccess.h>
#include "util.h"
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
}
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);
switch (cmd) {
case GETALL:
{
- ushort *array = arg.array;
+ ushort __user *array = arg.array;
int i;
if(nsems > SEMMSL_FAST) {
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),