From: Greg Kroah-Hartman Date: Sun, 3 Apr 2022 11:45:32 +0000 (+0200) Subject: 4.9-stable patches X-Git-Tag: v5.17.2~146 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7e984c775457104e6d2bebce4613dbdb7ffb1b5b;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: ubifs-add-missing-iput-if-do_tmpfile-failed-in-rename-whiteout.patch ubifs-setflags-make-dirtied_ino_d-8-bytes-aligned.patch --- diff --git a/queue-4.9/series b/queue-4.9/series index 6206e9b25ab..63d2fe9c654 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -148,3 +148,5 @@ media-hdpvr-initialize-dev-worker-at-hdpvr_register_.patch mmc-host-return-an-error-when-enable_sdio_irq-ops-is.patch scsi-qla2xxx-fix-incorrect-reporting-of-task-management-failure.patch kvm-prevent-module-exit-until-all-vms-are-freed.patch +ubifs-add-missing-iput-if-do_tmpfile-failed-in-rename-whiteout.patch +ubifs-setflags-make-dirtied_ino_d-8-bytes-aligned.patch diff --git a/queue-4.9/ubifs-add-missing-iput-if-do_tmpfile-failed-in-rename-whiteout.patch b/queue-4.9/ubifs-add-missing-iput-if-do_tmpfile-failed-in-rename-whiteout.patch new file mode 100644 index 00000000000..622ca5c7a4a --- /dev/null +++ b/queue-4.9/ubifs-add-missing-iput-if-do_tmpfile-failed-in-rename-whiteout.patch @@ -0,0 +1,35 @@ +From 716b4573026bcbfa7b58ed19fe15554bac66b082 Mon Sep 17 00:00:00 2001 +From: Zhihao Cheng +Date: Mon, 27 Dec 2021 11:22:35 +0800 +Subject: ubifs: Add missing iput if do_tmpfile() failed in rename whiteout + +From: Zhihao Cheng + +commit 716b4573026bcbfa7b58ed19fe15554bac66b082 upstream. + +whiteout inode should be put when do_tmpfile() failed if inode has been +initialized. Otherwise we will get following warning during umount: + UBIFS error (ubi0:0 pid 1494): ubifs_assert_failed [ubifs]: UBIFS + assert failed: c->bi.dd_growth == 0, in fs/ubifs/super.c:1930 + VFS: Busy inodes after unmount of ubifs. Self-destruct in 5 seconds. + +Fixes: 9e0a1fff8db56ea ("ubifs: Implement RENAME_WHITEOUT") +Signed-off-by: Zhihao Cheng +Suggested-by: Sascha Hauer +Signed-off-by: Richard Weinberger +Signed-off-by: Greg Kroah-Hartman +--- + fs/ubifs/dir.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/fs/ubifs/dir.c ++++ b/fs/ubifs/dir.c +@@ -376,6 +376,8 @@ out_inode: + make_bad_inode(inode); + if (!instantiated) + iput(inode); ++ else if (whiteout) ++ iput(*whiteout); + out_budg: + ubifs_release_budget(c, &req); + if (!instantiated) diff --git a/queue-4.9/ubifs-setflags-make-dirtied_ino_d-8-bytes-aligned.patch b/queue-4.9/ubifs-setflags-make-dirtied_ino_d-8-bytes-aligned.patch new file mode 100644 index 00000000000..7af6d53a1c0 --- /dev/null +++ b/queue-4.9/ubifs-setflags-make-dirtied_ino_d-8-bytes-aligned.patch @@ -0,0 +1,38 @@ +From 1b83ec057db16b4d0697dc21ef7a9743b6041f72 Mon Sep 17 00:00:00 2001 +From: Zhihao Cheng +Date: Mon, 27 Dec 2021 11:22:39 +0800 +Subject: ubifs: setflags: Make dirtied_ino_d 8 bytes aligned + +From: Zhihao Cheng + +commit 1b83ec057db16b4d0697dc21ef7a9743b6041f72 upstream. + +Make 'ui->data_len' aligned with 8 bytes before it is assigned to +dirtied_ino_d. Since 8871d84c8f8b0c6b("ubifs: convert to fileattr") +applied, 'setflags()' only affects regular files and directories, only +xattr inode, symlink inode and special inode(pipe/char_dev/block_dev) +have none- zero 'ui->data_len' field, so assertion +'!(req->dirtied_ino_d & 7)' cannot fail in ubifs_budget_space(). +To avoid assertion fails in future evolution(eg. setflags can operate +special inodes), it's better to make dirtied_ino_d 8 bytes aligned, +after all aligned size is still zero for regular files. + +Fixes: 1e51764a3c2ac05a ("UBIFS: add new flash file system") +Signed-off-by: Zhihao Cheng +Signed-off-by: Richard Weinberger +Signed-off-by: Greg Kroah-Hartman +--- + fs/ubifs/ioctl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/fs/ubifs/ioctl.c ++++ b/fs/ubifs/ioctl.c +@@ -105,7 +105,7 @@ static int setflags(struct inode *inode, + struct ubifs_inode *ui = ubifs_inode(inode); + struct ubifs_info *c = inode->i_sb->s_fs_info; + struct ubifs_budget_req req = { .dirtied_ino = 1, +- .dirtied_ino_d = ui->data_len }; ++ .dirtied_ino_d = ALIGN(ui->data_len, 8) }; + + err = ubifs_budget_space(c, &req); + if (err)