aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/pending-4.14/192-Revert-ubifs-xattr-Don-t-operate-on-deleted-inodes.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic/pending-4.14/192-Revert-ubifs-xattr-Don-t-operate-on-deleted-inodes.patch')
-rw-r--r--target/linux/generic/pending-4.14/192-Revert-ubifs-xattr-Don-t-operate-on-deleted-inodes.patch96
1 files changed, 96 insertions, 0 deletions
diff --git a/target/linux/generic/pending-4.14/192-Revert-ubifs-xattr-Don-t-operate-on-deleted-inodes.patch b/target/linux/generic/pending-4.14/192-Revert-ubifs-xattr-Don-t-operate-on-deleted-inodes.patch
new file mode 100644
index 0000000000..cd9a758e37
--- /dev/null
+++ b/target/linux/generic/pending-4.14/192-Revert-ubifs-xattr-Don-t-operate-on-deleted-inodes.patch
@@ -0,0 +1,96 @@
+From a99708737f566c70651015332e89d0d3b1eb5529 Mon Sep 17 00:00:00 2001
+From: Koen Vandeputte <koen.vandeputte@ncentric.com>
+Date: Mon, 17 Sep 2018 10:13:09 +0200
+Subject: [PATCH] Revert "ubifs: xattr: Don't operate on deleted inodes"
+
+This reverts commit 8a23348d76a1e7716da6e76383281ac82fc071cf.
+
+UBIFS wants to assert that xattr operations are only issued on files
+with positive link count. The said patch made this operations return
+-ENOENT for unlinked files such that the asserts will no longer trigger.
+This was wrong since xattr operations are perfectly fine on unlinked
+files.
+Instead the assertions need to be fixed/removed.
+
+Fixes: 11a6fc3dc743 ("ubifs: xattr: Don't operate on deleted inodes")
+Reported-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
+Signed-off-by: Richard Weinberger <richard@nod.at>
+---
+ fs/ubifs/xattr.c | 24 ------------------------
+ 1 file changed, 24 deletions(-)
+
+--- a/fs/ubifs/xattr.c
++++ b/fs/ubifs/xattr.c
+@@ -152,12 +152,6 @@ static int create_xattr(struct ubifs_inf
+ ui->data_len = size;
+
+ mutex_lock(&host_ui->ui_mutex);
+-
+- if (!host->i_nlink) {
+- err = -ENOENT;
+- goto out_noent;
+- }
+-
+ host->i_ctime = current_time(host);
+ host_ui->xattr_cnt += 1;
+ host_ui->xattr_size += CALC_DENT_SIZE(fname_len(nm));
+@@ -189,7 +183,6 @@ out_cancel:
+ host_ui->xattr_size -= CALC_XATTR_BYTES(size);
+ host_ui->xattr_names -= fname_len(nm);
+ host_ui->flags &= ~UBIFS_CRYPT_FL;
+-out_noent:
+ mutex_unlock(&host_ui->ui_mutex);
+ out_free:
+ make_bad_inode(inode);
+@@ -241,12 +234,6 @@ static int change_xattr(struct ubifs_inf
+ mutex_unlock(&ui->ui_mutex);
+
+ mutex_lock(&host_ui->ui_mutex);
+-
+- if (!host->i_nlink) {
+- err = -ENOENT;
+- goto out_noent;
+- }
+-
+ host->i_ctime = current_time(host);
+ host_ui->xattr_size -= CALC_XATTR_BYTES(old_size);
+ host_ui->xattr_size += CALC_XATTR_BYTES(size);
+@@ -268,7 +255,6 @@ static int change_xattr(struct ubifs_inf
+ out_cancel:
+ host_ui->xattr_size -= CALC_XATTR_BYTES(size);
+ host_ui->xattr_size += CALC_XATTR_BYTES(old_size);
+-out_noent:
+ mutex_unlock(&host_ui->ui_mutex);
+ make_bad_inode(inode);
+ out_free:
+@@ -497,12 +483,6 @@ static int remove_xattr(struct ubifs_inf
+ return err;
+
+ mutex_lock(&host_ui->ui_mutex);
+-
+- if (!host->i_nlink) {
+- err = -ENOENT;
+- goto out_noent;
+- }
+-
+ host->i_ctime = current_time(host);
+ host_ui->xattr_cnt -= 1;
+ host_ui->xattr_size -= CALC_DENT_SIZE(fname_len(nm));
+@@ -522,7 +502,6 @@ out_cancel:
+ host_ui->xattr_size += CALC_DENT_SIZE(fname_len(nm));
+ host_ui->xattr_size += CALC_XATTR_BYTES(ui->data_len);
+ host_ui->xattr_names += fname_len(nm);
+-out_noent:
+ mutex_unlock(&host_ui->ui_mutex);
+ ubifs_release_budget(c, &req);
+ make_bad_inode(inode);
+@@ -562,9 +541,6 @@ static int ubifs_xattr_remove(struct ino
+
+ ubifs_assert(inode_is_locked(host));
+
+- if (!host->i_nlink)
+- return -ENOENT;
+-
+ if (fname_len(&nm) > UBIFS_MAX_NLEN)
+ return -ENAMETOOLONG;
+