From 5dd8328ad4b9280e11320ccd302164b66d4ecfc4 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Thu, 12 Sep 2013 11:57:01 -0700 Subject: [PATCH] vfs: don't copy things to user space holding the rcu readlock Oops. That wasn't very smart. We don't actually need the RCU lock any more by the time we copy the cwd string to user space, but I had stupidly surrounded the whole thing with it. Introduced by commit 7725926401c9 ("vfs: make getcwd() get the root and pwd path under rcu") Is-a-big-hairy-idiot: Linus Torvalds --- fs/dcache.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/dcache.c b/fs/dcache.c index 99d4d72262035..29d58212aaf02 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -3067,6 +3067,7 @@ SYSCALL_DEFINE2(getcwd, char __user *, buf, unsigned long, size) prepend(&cwd, &buflen, "\0", 1); error = prepend_path(&pwd, &root, &cwd, &buflen); br_read_unlock(&vfsmount_lock); + rcu_read_unlock(); if (error < 0) goto out; @@ -3087,10 +3088,10 @@ SYSCALL_DEFINE2(getcwd, char __user *, buf, unsigned long, size) } } else { br_read_unlock(&vfsmount_lock); + rcu_read_unlock(); } out: - rcu_read_unlock(); free_page((unsigned long) page); return error; } -- 2.39.5