The patch titled Subject: ipc/shm: do not use ipc_rcu_free() has been added to the -mm tree. Its filename is ipc-shm-do-not-use-ipc_rcu_free.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/ipc-shm-do-not-use-ipc_rcu_free.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/ipc-shm-do-not-use-ipc_rcu_free.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Kees Cook <keescook@xxxxxxxxxxxx> Subject: ipc/shm: do not use ipc_rcu_free() Avoid using ipc_rcu_free, since it just re-finds the original structure pointer. For the pre-list-init failure path, there is no RCU needed, since it was just allocated. It can be directly freed. Link: http://lkml.kernel.org/r/20170525185107.12869-7-manfred@xxxxxxxxxxxxxxxx Signed-off-by: Kees Cook <keescook@xxxxxxxxxxxx> Signed-off-by: Manfred Spraul <manfred@xxxxxxxxxxxxxxxx> Cc: Davidlohr Bueso <dave@xxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- ipc/shm.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff -puN ipc/shm.c~ipc-shm-do-not-use-ipc_rcu_free ipc/shm.c --- a/ipc/shm.c~ipc-shm-do-not-use-ipc_rcu_free +++ a/ipc/shm.c @@ -172,6 +172,11 @@ static inline void shm_lock_by_ptr(struc ipc_lock_object(&ipcp->shm_perm); } +static void __shm_free(struct shmid_kernel *shp) +{ + kvfree(shp); +} + static void shm_rcu_free(struct rcu_head *head) { struct kern_ipc_perm *ptr = container_of(head, struct kern_ipc_perm, @@ -179,7 +184,7 @@ static void shm_rcu_free(struct rcu_head struct shmid_kernel *shp = container_of(ptr, struct shmid_kernel, shm_perm); security_shm_free(shp); - ipc_rcu_free(head); + __shm_free(shp); } static inline void shm_rmid(struct ipc_namespace *ns, struct shmid_kernel *s) @@ -557,7 +562,7 @@ static int newseg(struct ipc_namespace * shp->shm_perm.security = NULL; error = security_shm_alloc(shp); if (error) { - ipc_rcu_putref(&shp->shm_perm, ipc_rcu_free); + __shm_free(shp); return error; } _ Patches currently in -mm which might be from keescook@xxxxxxxxxxxx are ipc-drop-non-rcu-allocation.patch ipc-sem-do-not-use-ipc_rcu_free.patch ipc-shm-do-not-use-ipc_rcu_free.patch ipc-msg-do-not-use-ipc_rcu_free.patch ipc-util-drop-ipc_rcu_free.patch ipc-sem-avoid-ipc_rcu_alloc.patch ipc-shm-avoid-ipc_rcu_alloc.patch ipc-msg-avoid-ipc_rcu_alloc.patch ipc-util-drop-ipc_rcu_alloc.patch ipc-move-atomic_set-to-where-it-is-needed.patch ipc-shm-remove-special-shm_alloc-free.patch ipc-msg-remove-special-msg_alloc-free.patch ipc-sem-drop-__sem_free.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html