From d70671a610f4e52a4add68d30788133a6ffec638 Mon Sep 17 00:00:00 2001 From: Oleg Drokin Date: Thu, 19 Jun 2014 16:20:43 -0400 Subject: [PATCH 1/1] LU-5179 libcfs: do not leak mm_struct cfs_get_environ might leak an mm_struct if LU-1735 race condition hits. Make sure to mmput in such a case. Change-Id: I49499c14027358961743d8928ab2edbe54bf72f7 Signed-off-by: Oleg Drokin Reviewed-on: http://review.whamcloud.com/10759 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Jinshan Xiong Reviewed-by: Andreas Dilger --- libcfs/libcfs/linux/linux-curproc.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libcfs/libcfs/linux/linux-curproc.c b/libcfs/libcfs/linux/linux-curproc.c index 1452f14..525cebc 100644 --- a/libcfs/libcfs/linux/linux-curproc.c +++ b/libcfs/libcfs/linux/linux-curproc.c @@ -206,10 +206,9 @@ int cfs_get_environ(const char *key, char *value, int *val_len) * which is already holding mmap_sem for writes. If some other * thread gets the write lock in the meantime, this thread will * block, but at least it won't deadlock on itself. LU-1735 */ - if (down_read_trylock(&mm->mmap_sem) == 0) { - kfree(buffer); - return -EDEADLK; - } + if (down_read_trylock(&mm->mmap_sem) == 0) + GOTO(out, rc = -EDEADLK); + up_read(&mm->mmap_sem); addr = mm->env_start; -- 1.8.3.1