]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 25 Jan 2015 17:29:13 +0000 (09:29 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 25 Jan 2015 17:29:13 +0000 (09:29 -0800)
added patches:
lockd-fix-a-race-when-initialising-nlmsvc_timeout.patch

queue-3.10/lockd-fix-a-race-when-initialising-nlmsvc_timeout.patch [new file with mode: 0644]
queue-3.10/series

diff --git a/queue-3.10/lockd-fix-a-race-when-initialising-nlmsvc_timeout.patch b/queue-3.10/lockd-fix-a-race-when-initialising-nlmsvc_timeout.patch
new file mode 100644 (file)
index 0000000..7e5649e
--- /dev/null
@@ -0,0 +1,51 @@
+From 06bed7d18c2c07b3e3eeadf4bd357f6e806618cc Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <trond.myklebust@primarydata.com>
+Date: Fri, 2 Jan 2015 15:05:25 -0500
+Subject: LOCKD: Fix a race when initialising nlmsvc_timeout
+
+From: Trond Myklebust <trond.myklebust@primarydata.com>
+
+commit 06bed7d18c2c07b3e3eeadf4bd357f6e806618cc upstream.
+
+This commit fixes a race whereby nlmclnt_init() first starts the lockd
+daemon, and then calls nlm_bind_host() with the expectation that
+nlmsvc_timeout has already been initialised. Unfortunately, there is no
+no synchronisation between lockd() and lockd_up() to guarantee that this
+is the case.
+
+Fix is to move the initialisation of nlmsvc_timeout into lockd_create_svc
+
+Fixes: 9a1b6bf818e74 ("LOCKD: Don't call utsname()->nodename...")
+Cc: Bruce Fields <bfields@fieldses.org>
+Cc: stable@vger.kernel.org # 3.10.x
+Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/lockd/svc.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/fs/lockd/svc.c
++++ b/fs/lockd/svc.c
+@@ -137,10 +137,6 @@ lockd(void *vrqstp)
+       dprintk("NFS locking service started (ver " LOCKD_VERSION ").\n");
+-      if (!nlm_timeout)
+-              nlm_timeout = LOCKD_DFLT_TIMEO;
+-      nlmsvc_timeout = nlm_timeout * HZ;
+-
+       /*
+        * The main request loop. We don't terminate until the last
+        * NFS mount or NFS daemon has gone away.
+@@ -346,6 +342,10 @@ static struct svc_serv *lockd_create_svc
+               printk(KERN_WARNING
+                       "lockd_up: no pid, %d users??\n", nlmsvc_users);
++      if (!nlm_timeout)
++              nlm_timeout = LOCKD_DFLT_TIMEO;
++      nlmsvc_timeout = nlm_timeout * HZ;
++
+       serv = svc_create(&nlmsvc_program, LOCKD_BUFSIZE, NULL);
+       if (!serv) {
+               printk(KERN_WARNING "lockd_up: create service failed\n");
index 4904c17a3d0bfd3f041bf30495aad4ca1e4fca19..fe51b8eb65fadd217ed9420a31b0fc27addc9bdd 100644 (file)
@@ -42,3 +42,4 @@ arm-shmobile-sh73a0-legacy-set-.control_parent-for-all-irqpin-instances.patch
 decompress_bunzip2-off-by-one-in-get_next_block.patch
 um-skip-futex_atomic_cmpxchg_inatomic-test.patch
 x86-um-actually-mark-system-call-tables-readonly.patch
+lockd-fix-a-race-when-initialising-nlmsvc_timeout.patch