aboutsummaryrefslogtreecommitdiffstats
path: root/main/linux-grsec/ovl-fix-getcwd-failure-after-unsuccessful-rmdir.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/linux-grsec/ovl-fix-getcwd-failure-after-unsuccessful-rmdir.patch')
-rw-r--r--main/linux-grsec/ovl-fix-getcwd-failure-after-unsuccessful-rmdir.patch33
1 files changed, 33 insertions, 0 deletions
diff --git a/main/linux-grsec/ovl-fix-getcwd-failure-after-unsuccessful-rmdir.patch b/main/linux-grsec/ovl-fix-getcwd-failure-after-unsuccessful-rmdir.patch
new file mode 100644
index 0000000000..b3efdfd46d
--- /dev/null
+++ b/main/linux-grsec/ovl-fix-getcwd-failure-after-unsuccessful-rmdir.patch
@@ -0,0 +1,33 @@
+From 8f54c162a20cf70ab9ef4b2ef44270fceea2e67b Mon Sep 17 00:00:00 2001
+From: Rui Wang <rui.y.wang@intel.com>
+Date: Fri, 8 Jan 2016 22:44:14 +0800
+Subject: [PATCH] ovl: fix getcwd() failure after unsuccessful rmdir
+
+ovl_remove_upper() should do d_drop() only after it successfully
+removes the dir, otherwise a subsequent getcwd() system call will
+fail, breaking userspace programs.
+
+This is to fix: https://bugzilla.kernel.org/show_bug.cgi?id=110491
+
+Signed-off-by: Rui Wang <rui.y.wang@intel.com>
+---
+ fs/overlayfs/dir.c | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
+index 692ceda..36d6a5b 100644
+--- a/fs/overlayfs/dir.c
++++ b/fs/overlayfs/dir.c
+@@ -618,7 +618,8 @@ static int ovl_remove_upper(struct dentry *dentry, bool is_dir)
+ * sole user of this dentry. Too tricky... Just unhash for
+ * now.
+ */
+- d_drop(dentry);
++ if (!err)
++ d_drop(dentry);
+ mutex_unlock(&dir->i_mutex);
+
+ return err;
+--
+1.7.5.4
+