]> Pileus Git - ~andy/linux/blobdiff - ipc/sem.c
Merge tag 'firewire-fix' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394...
[~andy/linux] / ipc / sem.c
index 5215a81420df9b1802dd9f6c40c465f1b63a2bbd..58d31f1c1eb59920a558705b677c8db3ff80b6d9 100644 (file)
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -1104,7 +1104,9 @@ static int semctl_down(struct ipc_namespace *ns, int semid,
                freeary(ns, ipcp);
                goto out_up;
        case IPC_SET:
-               ipc_update_perm(&semid64.sem_perm, ipcp);
+               err = ipc_update_perm(&semid64.sem_perm, ipcp);
+               if (err)
+                       goto out_unlock;
                sma->sem_ctime = get_seconds();
                break;
        default:
@@ -1677,6 +1679,7 @@ void exit_sem(struct task_struct *tsk)
 #ifdef CONFIG_PROC_FS
 static int sysvipc_sem_proc_show(struct seq_file *s, void *it)
 {
+       struct user_namespace *user_ns = seq_user_ns(s);
        struct sem_array *sma = it;
 
        return seq_printf(s,
@@ -1685,10 +1688,10 @@ static int sysvipc_sem_proc_show(struct seq_file *s, void *it)
                          sma->sem_perm.id,
                          sma->sem_perm.mode,
                          sma->sem_nsems,
-                         sma->sem_perm.uid,
-                         sma->sem_perm.gid,
-                         sma->sem_perm.cuid,
-                         sma->sem_perm.cgid,
+                         from_kuid_munged(user_ns, sma->sem_perm.uid),
+                         from_kgid_munged(user_ns, sma->sem_perm.gid),
+                         from_kuid_munged(user_ns, sma->sem_perm.cuid),
+                         from_kgid_munged(user_ns, sma->sem_perm.cgid),
                          sma->sem_otime,
                          sma->sem_ctime);
 }