This is a note to let you know that I've just added the patch titled ipc,shm: shorten critical region for shmat to the 3.10-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: ipc-shm-shorten-critical-region-for-shmat.patch and it can be found in the queue-3.10 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From c2c737a0461e61a34676bd0bd1bc1a70a1b4e396 Mon Sep 17 00:00:00 2001 From: Davidlohr Bueso <davidlohr.bueso@xxxxxx> Date: Wed, 11 Sep 2013 14:26:23 -0700 Subject: ipc,shm: shorten critical region for shmat From: Davidlohr Bueso <davidlohr.bueso@xxxxxx> commit c2c737a0461e61a34676bd0bd1bc1a70a1b4e396 upstream. Similar to other system calls, acquire the kern_ipc_perm lock after doing the initial permission and security checks. [sasha.levin@xxxxxxxxxx: dont leave do_shmat with rcu lock held] Signed-off-by: Davidlohr Bueso <davidlohr.bueso@xxxxxx> Tested-by: Sedat Dilek <sedat.dilek@xxxxxxxxx> Cc: Rik van Riel <riel@xxxxxxxxxx> Cc: Manfred Spraul <manfred@xxxxxxxxxxxxxxxx> Signed-off-by: Sasha Levin <sasha.levin@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> Cc: Mike Galbraith <efault@xxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- ipc/shm.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) --- a/ipc/shm.c +++ b/ipc/shm.c @@ -19,6 +19,9 @@ * namespaces support * OpenVZ, SWsoft Inc. * Pavel Emelianov <xemul@xxxxxxxxxx> + * + * Better ipc lock (kern_ipc_perm.lock) handling + * Davidlohr Bueso <davidlohr.bueso@xxxxxx>, June 2013. */ #include <linux/slab.h> @@ -1086,10 +1089,11 @@ long do_shmat(int shmid, char __user *sh * additional creator id... */ ns = current->nsproxy->ipc_ns; - shp = shm_lock_check(ns, shmid); + rcu_read_lock(); + shp = shm_obtain_object_check(ns, shmid); if (IS_ERR(shp)) { err = PTR_ERR(shp); - goto out; + goto out_unlock; } err = -EACCES; @@ -1100,11 +1104,13 @@ long do_shmat(int shmid, char __user *sh if (err) goto out_unlock; + ipc_lock_object(&shp->shm_perm); path = shp->shm_file->f_path; path_get(&path); shp->shm_nattch++; size = i_size_read(path.dentry->d_inode); - shm_unlock(shp); + ipc_unlock_object(&shp->shm_perm); + rcu_read_unlock(); err = -ENOMEM; sfd = kzalloc(sizeof(*sfd), GFP_KERNEL); @@ -1175,7 +1181,7 @@ out_nattch: return err; out_unlock: - shm_unlock(shp); + rcu_read_unlock(); out: return err; } Patches currently in stable-queue which might be from davidlohr.bueso@xxxxxx are queue-3.10/ipc-shm-shorten-critical-region-in-shmctl_down.patch queue-3.10/ipc-msg-introduce-lockless-functions-to-obtain-the-ipc-object.patch queue-3.10/ipc-msg-shorten-critical-region-in-msgctl_down.patch queue-3.10/ipc-shm-introduce-lockless-functions-to-obtain-the-ipc-object.patch queue-3.10/ipc-remove-unused-functions.patch queue-3.10/ipc-shm-shorten-critical-region-for-shmat.patch queue-3.10/ipc-msg-introduce-msgctl_nolock.patch queue-3.10/ipc-move-rcu-lock-out-of-ipc_addid.patch queue-3.10/ipc-sem-separate-wait-for-zero-and-alter-tasks-into-seperate-queues.patch queue-3.10/ipc-shm-shorten-critical-region-for-shmctl.patch queue-3.10/ipc-msg-shorten-critical-region-in-msgsnd.patch queue-3.10/ipc-shm-introduce-shmctl_nolock.patch queue-3.10/ipc-drop-ipcctl_pre_down.patch queue-3.10/ipc-util.c-ipc_rcu_alloc-cacheline-align-allocation.patch queue-3.10/ipc-introduce-ipc-object-locking-helpers.patch queue-3.10/ipc-sem.c-cacheline-align-the-semaphore-structures.patch queue-3.10/ipc-msg-shorten-critical-region-in-msgrcv.patch queue-3.10/ipc-msg-make-msgctl_nolock-lockless.patch queue-3.10/ipc-sem.c-always-use-only-one-queue-for-alter-operations.patch queue-3.10/ipc-shm-cleanup-do_shmat-pasta.patch queue-3.10/ipc-move-locking-out-of-ipcctl_pre_down_nolock.patch queue-3.10/ipc-close-open-coded-spin-lock-calls.patch queue-3.10/ipc-sem.c-rename-try_atomic_semop-to-perform_atomic_semop-docu-update.patch queue-3.10/ipc-shm-make-shmctl_nolock-lockless.patch queue-3.10/ipc-sem.c-replace-shared-sem_otime-with-per-semaphore-value.patch -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html