From: Ben Hutchings Date: Mon, 16 Feb 2015 03:21:17 +0000 (+0000) Subject: vfs: Fix vfsmount_lock imbalance in path_init() X-Git-Tag: v3.2.67~6 X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-kernel.git;a=commitdiff_plain;h=d8c8133eb0460a183e69cf8a5d722688916960de vfs: Fix vfsmount_lock imbalance in path_init() When backporting commit 4023bfc9f351 ("be careful with nd->inode in path_init() and follow_dotdot_rcu()"), I failed to account for the vfsmount_lock that is used in 3.2 but not upstream. path_init() takes the lock if performing RCU lookup, but must drop it if (and only if) it subsequently fails. Reported-by: nuxi@vault24.org References: https://bugzilla.kernel.org/show_bug.cgi?id=92531 Signed-off-by: Ben Hutchings Tested-by: nuxi@vault24.org --- diff --git a/fs/namei.c b/fs/namei.c index dea2dabc62c1..c8b13a92bf69 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -1567,6 +1567,7 @@ static int path_init(int dfd, const char *name, unsigned int flags, if (!(nd->flags & LOOKUP_ROOT)) nd->root.mnt = NULL; rcu_read_unlock(); + br_read_unlock(vfsmount_lock); return -ECHILD; fput_fail: