From: Oleg Drokin Date: Thu, 19 Jun 2014 20:20:43 +0000 (-0400) Subject: LU-5179 libcfs: do not leak mm_struct X-Git-Tag: 2.6.0-RC1~61 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=d70671a610f4e52a4add68d30788133a6ffec638;ds=sidebyside 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 --- 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;