]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 28 Dec 2020 09:35:52 +0000 (10:35 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 28 Dec 2020 09:35:52 +0000 (10:35 +0100)
added patches:
btrfs-fix-return-value-mixup-in-btrfs_get_extent.patch
btrfs-fix-selftests-failure-due-to-uninitialized-i_mode-in-test-inodes.patch
btrfs-quota-set-rescan-progress-to-u64-1-if-we-hit-last-leaf.patch
btrfs-scrub-don-t-use-inode-page-cache-in-scrub_handle_errored_block.patch
ceph-fix-race-in-concurrent-__ceph_remove_cap-invocations.patch
ext4-fix-a-memory-leak-of-ext4_free_data.patch
jffs2-fix-gc-exit-abnormally.patch
kvm-arm64-introduce-handling-of-aarch32-ttbcr2-traps.patch
powerpc-xmon-change-printk-to-pr_cont.patch

queue-4.9/btrfs-fix-return-value-mixup-in-btrfs_get_extent.patch [new file with mode: 0644]
queue-4.9/btrfs-fix-selftests-failure-due-to-uninitialized-i_mode-in-test-inodes.patch [new file with mode: 0644]
queue-4.9/btrfs-quota-set-rescan-progress-to-u64-1-if-we-hit-last-leaf.patch [new file with mode: 0644]
queue-4.9/btrfs-scrub-don-t-use-inode-page-cache-in-scrub_handle_errored_block.patch [new file with mode: 0644]
queue-4.9/ceph-fix-race-in-concurrent-__ceph_remove_cap-invocations.patch [new file with mode: 0644]
queue-4.9/ext4-fix-a-memory-leak-of-ext4_free_data.patch [new file with mode: 0644]
queue-4.9/jffs2-fix-gc-exit-abnormally.patch [new file with mode: 0644]
queue-4.9/kvm-arm64-introduce-handling-of-aarch32-ttbcr2-traps.patch [new file with mode: 0644]
queue-4.9/powerpc-xmon-change-printk-to-pr_cont.patch [new file with mode: 0644]
queue-4.9/series

diff --git a/queue-4.9/btrfs-fix-return-value-mixup-in-btrfs_get_extent.patch b/queue-4.9/btrfs-fix-return-value-mixup-in-btrfs_get_extent.patch
new file mode 100644 (file)
index 0000000..1541375
--- /dev/null
@@ -0,0 +1,36 @@
+From foo@baz Mon Dec 28 10:12:24 AM CET 2020
+From: Pavel Machek <pavel@denx.de>
+Date: Mon, 3 Aug 2020 11:35:06 +0200
+Subject: btrfs: fix return value mixup in btrfs_get_extent
+
+From: Pavel Machek <pavel@denx.de>
+
+commit 881a3a11c2b858fe9b69ef79ac5ee9978a266dc9 upstream
+
+btrfs_get_extent() sets variable ret, but out: error path expect error
+to be in variable err so the error code is lost.
+
+Fixes: 6bf9e4bd6a27 ("btrfs: inode: Verify inode mode to avoid NULL pointer dereference")
+CC: stable@vger.kernel.org # 5.4+
+Reviewed-by: Nikolay Borisov <nborisov@suse.com>
+Signed-off-by: Pavel Machek (CIP) <pavel@denx.de>
+Reviewed-by: David Sterba <dsterba@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+[sudip: adjust context]
+Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/btrfs/inode.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/btrfs/inode.c
++++ b/fs/btrfs/inode.c
+@@ -7000,7 +7000,7 @@ again:
+           found_type == BTRFS_FILE_EXTENT_PREALLOC) {
+               /* Only regular file could have regular/prealloc extent */
+               if (!S_ISREG(inode->i_mode)) {
+-                      ret = -EUCLEAN;
++                      err = -EUCLEAN;
+                       btrfs_crit(root->fs_info,
+               "regular/prealloc extent found for non-regular inode %llu",
+                                  btrfs_ino(inode));
diff --git a/queue-4.9/btrfs-fix-selftests-failure-due-to-uninitialized-i_mode-in-test-inodes.patch b/queue-4.9/btrfs-fix-selftests-failure-due-to-uninitialized-i_mode-in-test-inodes.patch
new file mode 100644 (file)
index 0000000..89eec9d
--- /dev/null
@@ -0,0 +1,83 @@
+From foo@baz Mon Dec 28 10:12:24 AM CET 2020
+From: Filipe Manana <fdmanana@suse.com>
+Date: Wed, 18 Sep 2019 13:08:52 +0100
+Subject: Btrfs: fix selftests failure due to uninitialized i_mode in test inodes
+
+From: Filipe Manana <fdmanana@suse.com>
+
+commit 9f7fec0ba89108b9385f1b9fb167861224912a4a upstream
+
+Some of the self tests create a test inode, setup some extents and then do
+calls to btrfs_get_extent() to test that the corresponding extent maps
+exist and are correct. However btrfs_get_extent(), since the 5.2 merge
+window, now errors out when it finds a regular or prealloc extent for an
+inode that does not correspond to a regular file (its ->i_mode is not
+S_IFREG). This causes the self tests to fail sometimes, specially when
+KASAN, slub_debug and page poisoning are enabled:
+
+  $ modprobe btrfs
+  modprobe: ERROR: could not insert 'btrfs': Invalid argument
+
+  $ dmesg
+  [ 9414.691648] Btrfs loaded, crc32c=crc32c-intel, debug=on, assert=on, integrity-checker=on, ref-verify=on
+  [ 9414.692655] BTRFS: selftest: sectorsize: 4096  nodesize: 4096
+  [ 9414.692658] BTRFS: selftest: running btrfs free space cache tests
+  [ 9414.692918] BTRFS: selftest: running extent only tests
+  [ 9414.693061] BTRFS: selftest: running bitmap only tests
+  [ 9414.693366] BTRFS: selftest: running bitmap and extent tests
+  [ 9414.696455] BTRFS: selftest: running space stealing from bitmap to extent tests
+  [ 9414.697131] BTRFS: selftest: running extent buffer operation tests
+  [ 9414.697133] BTRFS: selftest: running btrfs_split_item tests
+  [ 9414.697564] BTRFS: selftest: running extent I/O tests
+  [ 9414.697583] BTRFS: selftest: running find delalloc tests
+  [ 9415.081125] BTRFS: selftest: running find_first_clear_extent_bit test
+  [ 9415.081278] BTRFS: selftest: running extent buffer bitmap tests
+  [ 9415.124192] BTRFS: selftest: running inode tests
+  [ 9415.124195] BTRFS: selftest: running btrfs_get_extent tests
+  [ 9415.127909] BTRFS: selftest: running hole first btrfs_get_extent test
+  [ 9415.128343] BTRFS critical (device (efault)): regular/prealloc extent found for non-regular inode 256
+  [ 9415.131428] BTRFS: selftest: fs/btrfs/tests/inode-tests.c:904 expected a real extent, got 0
+
+This happens because the test inodes are created without ever initializing
+the i_mode field of the inode, and neither VFS's new_inode() nor the btrfs
+callback btrfs_alloc_inode() initialize the i_mode. Initialization of the
+i_mode is done through the various callbacks used by the VFS to create
+new inodes (regular files, directories, symlinks, tmpfiles, etc), which
+all call btrfs_new_inode() which in turn calls inode_init_owner(), which
+sets the inode's i_mode. Since the tests only uses new_inode() to create
+the test inodes, the i_mode was never initialized.
+
+This always happens on a VM I used with kasan, slub_debug and many other
+debug facilities enabled. It also happened to someone who reported this
+on bugzilla (on a 5.3-rc).
+
+Fix this by setting i_mode to S_IFREG at btrfs_new_test_inode().
+
+Fixes: 6bf9e4bd6a2778 ("btrfs: inode: Verify inode mode to avoid NULL pointer dereference")
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=204397
+Signed-off-by: Filipe Manana <fdmanana@suse.com>
+Reviewed-by: Qu Wenruo <wqu@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/btrfs/tests/btrfs-tests.c |    8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+--- a/fs/btrfs/tests/btrfs-tests.c
++++ b/fs/btrfs/tests/btrfs-tests.c
+@@ -51,7 +51,13 @@ static struct file_system_type test_type
+ struct inode *btrfs_new_test_inode(void)
+ {
+-      return new_inode(test_mnt->mnt_sb);
++      struct inode *inode;
++
++      inode = new_inode(test_mnt->mnt_sb);
++      if (inode)
++              inode_init_owner(inode, NULL, S_IFREG);
++
++      return inode;
+ }
+ static int btrfs_init_test_fs(void)
diff --git a/queue-4.9/btrfs-quota-set-rescan-progress-to-u64-1-if-we-hit-last-leaf.patch b/queue-4.9/btrfs-quota-set-rescan-progress-to-u64-1-if-we-hit-last-leaf.patch
new file mode 100644 (file)
index 0000000..111118f
--- /dev/null
@@ -0,0 +1,47 @@
+From foo@baz Mon Dec 28 10:12:24 AM CET 2020
+From: Qu Wenruo <wqu@suse.com>
+Date: Wed, 27 Jun 2018 18:19:55 +0800
+Subject: btrfs: quota: Set rescan progress to (u64)-1 if we hit last leaf
+
+From: Qu Wenruo <wqu@suse.com>
+
+commoit 6f7de19ed3d4d3526ca5eca428009f97cf969c2f upstream
+
+Commit ff3d27a048d9 ("btrfs: qgroup: Finish rescan when hit the last leaf
+of extent tree") added a new exit for rescan finish.
+
+However after finishing quota rescan, we set
+fs_info->qgroup_rescan_progress to (u64)-1 before we exit through the
+original exit path.
+While we missed that assignment of (u64)-1 in the new exit path.
+
+The end result is, the quota status item doesn't have the same value.
+(-1 vs the last bytenr + 1)
+Although it doesn't affect quota accounting, it's still better to keep
+the original behavior.
+
+Reported-by: Misono Tomohiro <misono.tomohiro@jp.fujitsu.com>
+Fixes: ff3d27a048d9 ("btrfs: qgroup: Finish rescan when hit the last leaf of extent tree")
+Signed-off-by: Qu Wenruo <wqu@suse.com>
+Reviewed-by: Misono Tomohiro <misono.tomohiro@jp.fujitsu.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/btrfs/qgroup.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/fs/btrfs/qgroup.c
++++ b/fs/btrfs/qgroup.c
+@@ -2340,8 +2340,10 @@ out:
+       }
+       btrfs_put_tree_mod_seq(fs_info, &tree_mod_seq_elem);
+-      if (done && !ret)
++      if (done && !ret) {
+               ret = 1;
++              fs_info->qgroup_rescan_progress.objectid = (u64)-1;
++      }
+       return ret;
+ }
diff --git a/queue-4.9/btrfs-scrub-don-t-use-inode-page-cache-in-scrub_handle_errored_block.patch b/queue-4.9/btrfs-scrub-don-t-use-inode-page-cache-in-scrub_handle_errored_block.patch
new file mode 100644 (file)
index 0000000..8e5e10b
--- /dev/null
@@ -0,0 +1,89 @@
+From foo@baz Mon Dec 28 10:12:24 AM CET 2020
+From: Qu Wenruo <wqu@suse.com>
+Date: Wed, 11 Jul 2018 13:41:21 +0800
+Subject: btrfs: scrub: Don't use inode page cache in scrub_handle_errored_block()
+
+From: Qu Wenruo <wqu@suse.com>
+
+commit 665d4953cde6d9e75c62a07ec8f4f8fd7d396ade upstream
+
+In commit ac0b4145d662 ("btrfs: scrub: Don't use inode pages for device
+replace") we removed the branch of copy_nocow_pages() to avoid
+corruption for compressed nodatasum extents.
+
+However above commit only solves the problem in scrub_extent(), if
+during scrub_pages() we failed to read some pages,
+sctx->no_io_error_seen will be non-zero and we go to fixup function
+scrub_handle_errored_block().
+
+In scrub_handle_errored_block(), for sctx without csum (no matter if
+we're doing replace or scrub) we go to scrub_fixup_nodatasum() routine,
+which does the similar thing with copy_nocow_pages(), but does it
+without the extra check in copy_nocow_pages() routine.
+
+So for test cases like btrfs/100, where we emulate read errors during
+replace/scrub, we could corrupt compressed extent data again.
+
+This patch will fix it just by avoiding any "optimization" for
+nodatasum, just falls back to the normal fixup routine by try read from
+any good copy.
+
+This also solves WARN_ON() or dead lock caused by lame backref iteration
+in scrub_fixup_nodatasum() routine.
+
+The deadlock or WARN_ON() won't be triggered before commit ac0b4145d662
+("btrfs: scrub: Don't use inode pages for device replace") since
+copy_nocow_pages() have better locking and extra check for data extent,
+and it's already doing the fixup work by try to read data from any good
+copy, so it won't go scrub_fixup_nodatasum() anyway.
+
+This patch disables the faulty code and will be removed completely in a
+followup patch.
+
+Fixes: ac0b4145d662 ("btrfs: scrub: Don't use inode pages for device replace")
+Signed-off-by: Qu Wenruo <wqu@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+[sudip: adjust context]
+Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/btrfs/scrub.c |   17 +++++++++--------
+ 1 file changed, 9 insertions(+), 8 deletions(-)
+
+--- a/fs/btrfs/scrub.c
++++ b/fs/btrfs/scrub.c
+@@ -919,11 +919,6 @@ static int scrub_handle_errored_block(st
+       have_csum = sblock_to_check->pagev[0]->have_csum;
+       dev = sblock_to_check->pagev[0]->dev;
+-      if (sctx->is_dev_replace && !is_metadata && !have_csum) {
+-              sblocks_for_recheck = NULL;
+-              goto nodatasum_case;
+-      }
+-
+       /*
+        * read all mirrors one after the other. This includes to
+        * re-read the extent or metadata block that failed (that was
+@@ -1036,13 +1031,19 @@ static int scrub_handle_errored_block(st
+               goto out;
+       }
+-      if (!is_metadata && !have_csum) {
++      /*
++       * NOTE: Even for nodatasum case, it's still possible that it's a
++       * compressed data extent, thus scrub_fixup_nodatasum(), which write
++       * inode page cache onto disk, could cause serious data corruption.
++       *
++       * So here we could only read from disk, and hope our recovery could
++       * reach disk before the newer write.
++       */
++      if (0 && !is_metadata && !have_csum) {
+               struct scrub_fixup_nodatasum *fixup_nodatasum;
+               WARN_ON(sctx->is_dev_replace);
+-nodatasum_case:
+-
+               /*
+                * !is_metadata and !have_csum, this means that the data
+                * might not be COWed, that it might be modified
diff --git a/queue-4.9/ceph-fix-race-in-concurrent-__ceph_remove_cap-invocations.patch b/queue-4.9/ceph-fix-race-in-concurrent-__ceph_remove_cap-invocations.patch
new file mode 100644 (file)
index 0000000..1cffa06
--- /dev/null
@@ -0,0 +1,53 @@
+From e5cafce3ad0f8652d6849314d951459c2bff7233 Mon Sep 17 00:00:00 2001
+From: Luis Henriques <lhenriques@suse.de>
+Date: Thu, 12 Nov 2020 10:45:12 +0000
+Subject: ceph: fix race in concurrent __ceph_remove_cap invocations
+
+From: Luis Henriques <lhenriques@suse.de>
+
+commit e5cafce3ad0f8652d6849314d951459c2bff7233 upstream.
+
+A NULL pointer dereference may occur in __ceph_remove_cap with some of the
+callbacks used in ceph_iterate_session_caps, namely trim_caps_cb and
+remove_session_caps_cb. Those callers hold the session->s_mutex, so they
+are prevented from concurrent execution, but ceph_evict_inode does not.
+
+Since the callers of this function hold the i_ceph_lock, the fix is simply
+a matter of returning immediately if caps->ci is NULL.
+
+Cc: stable@vger.kernel.org
+URL: https://tracker.ceph.com/issues/43272
+Suggested-by: Jeff Layton <jlayton@kernel.org>
+Signed-off-by: Luis Henriques <lhenriques@suse.de>
+Reviewed-by: Jeff Layton <jlayton@kernel.org>
+Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/ceph/caps.c |   11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+--- a/fs/ceph/caps.c
++++ b/fs/ceph/caps.c
+@@ -927,12 +927,19 @@ void __ceph_remove_cap(struct ceph_cap *
+ {
+       struct ceph_mds_session *session = cap->session;
+       struct ceph_inode_info *ci = cap->ci;
+-      struct ceph_mds_client *mdsc =
+-              ceph_sb_to_client(ci->vfs_inode.i_sb)->mdsc;
++      struct ceph_mds_client *mdsc;
+       int removed = 0;
++      /* 'ci' being NULL means the remove have already occurred */
++      if (!ci) {
++              dout("%s: cap inode is NULL\n", __func__);
++              return;
++      }
++
+       dout("__ceph_remove_cap %p from %p\n", cap, &ci->vfs_inode);
++      mdsc = ceph_inode_to_client(&ci->vfs_inode)->mdsc;
++
+       /* remove from inode's cap rbtree, and clear auth cap */
+       rb_erase(&cap->ci_node, &ci->i_caps);
+       if (ci->i_auth_cap == cap)
diff --git a/queue-4.9/ext4-fix-a-memory-leak-of-ext4_free_data.patch b/queue-4.9/ext4-fix-a-memory-leak-of-ext4_free_data.patch
new file mode 100644 (file)
index 0000000..e931481
--- /dev/null
@@ -0,0 +1,40 @@
+From cca415537244f6102cbb09b5b90db6ae2c953bdd Mon Sep 17 00:00:00 2001
+From: Chunguang Xu <brookxu@tencent.com>
+Date: Sat, 7 Nov 2020 23:58:18 +0800
+Subject: ext4: fix a memory leak of ext4_free_data
+
+From: Chunguang Xu <brookxu@tencent.com>
+
+commit cca415537244f6102cbb09b5b90db6ae2c953bdd upstream.
+
+When freeing metadata, we will create an ext4_free_data and
+insert it into the pending free list.  After the current
+transaction is committed, the object will be freed.
+
+ext4_mb_free_metadata() will check whether the area to be freed
+overlaps with the pending free list. If true, return directly. At this
+time, ext4_free_data is leaked.  Fortunately, the probability of this
+problem is small, since it only occurs if the file system is corrupted
+such that a block is claimed by more one inode and those inodes are
+deleted within a single jbd2 transaction.
+
+Signed-off-by: Chunguang Xu <brookxu@tencent.com>
+Link: https://lore.kernel.org/r/1604764698-4269-8-git-send-email-brookxu@tencent.com
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Cc: stable@kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/ext4/mballoc.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/fs/ext4/mballoc.c
++++ b/fs/ext4/mballoc.c
+@@ -4650,6 +4650,7 @@ ext4_mb_free_metadata(handle_t *handle,
+                               ext4_group_first_block_no(sb, group) +
+                               EXT4_C2B(sbi, cluster),
+                               "Block already on to-be-freed list");
++                      kmem_cache_free(ext4_free_data_cachep, new_entry);
+                       return 0;
+               }
+       }
diff --git a/queue-4.9/jffs2-fix-gc-exit-abnormally.patch b/queue-4.9/jffs2-fix-gc-exit-abnormally.patch
new file mode 100644 (file)
index 0000000..db239da
--- /dev/null
@@ -0,0 +1,76 @@
+From 9afc9a8a4909fece0e911e72b1060614ba2f7969 Mon Sep 17 00:00:00 2001
+From: Zhe Li <lizhe67@huawei.com>
+Date: Fri, 29 May 2020 11:37:11 +0800
+Subject: jffs2: Fix GC exit abnormally
+
+From: Zhe Li <lizhe67@huawei.com>
+
+commit 9afc9a8a4909fece0e911e72b1060614ba2f7969 upstream.
+
+The log of this problem is:
+jffs2: Error garbage collecting node at 0x***!
+jffs2: No space for garbage collection. Aborting GC thread
+
+This is because GC believe that it do nothing, so it abort.
+
+After going over the image of jffs2, I find a scene that
+can trigger this problem stably.
+The scene is: there is a normal dirent node at summary-area,
+but abnormal at corresponding not-summary-area with error
+name_crc.
+
+The reason that GC exit abnormally is because it find that
+abnormal dirent node to GC, but when it goes to function
+jffs2_add_fd_to_list, it cannot meet the condition listed
+below:
+
+if ((*prev)->nhash == new->nhash && !strcmp((*prev)->name, new->name))
+
+So no node is marked obsolete, statistical information of
+erase_block do not change, which cause GC exit abnormally.
+
+The root cause of this problem is: we do not check the
+name_crc of the abnormal dirent node with summary is enabled.
+
+Noticed that in function jffs2_scan_dirent_node, we use
+function jffs2_scan_dirty_space to deal with the dirent
+node with error name_crc. So this patch add a checking
+code in function read_direntry to ensure the correctness
+of dirent node. If checked failed, the dirent node will
+be marked obsolete so GC will pass this node and this
+problem will be fixed.
+
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Zhe Li <lizhe67@huawei.com>
+Signed-off-by: Richard Weinberger <richard@nod.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/jffs2/readinode.c |   16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+--- a/fs/jffs2/readinode.c
++++ b/fs/jffs2/readinode.c
+@@ -672,6 +672,22 @@ static inline int read_direntry(struct j
+                       jffs2_free_full_dirent(fd);
+                       return -EIO;
+               }
++
++#ifdef CONFIG_JFFS2_SUMMARY
++              /*
++               * we use CONFIG_JFFS2_SUMMARY because without it, we
++               * have checked it while mounting
++               */
++              crc = crc32(0, fd->name, rd->nsize);
++              if (unlikely(crc != je32_to_cpu(rd->name_crc))) {
++                      JFFS2_NOTICE("name CRC failed on dirent node at"
++                         "%#08x: read %#08x,calculated %#08x\n",
++                         ref_offset(ref), je32_to_cpu(rd->node_crc), crc);
++                      jffs2_mark_node_obsolete(c, ref);
++                      jffs2_free_full_dirent(fd);
++                      return 0;
++              }
++#endif
+       }
+       fd->nhash = full_name_hash(NULL, fd->name, rd->nsize);
diff --git a/queue-4.9/kvm-arm64-introduce-handling-of-aarch32-ttbcr2-traps.patch b/queue-4.9/kvm-arm64-introduce-handling-of-aarch32-ttbcr2-traps.patch
new file mode 100644 (file)
index 0000000..d0d74bf
--- /dev/null
@@ -0,0 +1,42 @@
+From ca4e514774930f30b66375a974b5edcbebaf0e7e Mon Sep 17 00:00:00 2001
+From: Marc Zyngier <maz@kernel.org>
+Date: Tue, 10 Nov 2020 11:10:15 +0000
+Subject: KVM: arm64: Introduce handling of AArch32 TTBCR2 traps
+
+From: Marc Zyngier <maz@kernel.org>
+
+commit ca4e514774930f30b66375a974b5edcbebaf0e7e upstream.
+
+ARMv8.2 introduced TTBCR2, which shares TCR_EL1 with TTBCR.
+Gracefully handle traps to this register when HCR_EL2.TVM is set.
+
+Cc: stable@vger.kernel.org
+Reported-by: James Morse <james.morse@arm.com>
+Signed-off-by: Marc Zyngier <maz@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm64/include/asm/kvm_host.h |    1 +
+ arch/arm64/kvm/sys_regs.c         |    1 +
+ 2 files changed, 2 insertions(+)
+
+--- a/arch/arm64/include/asm/kvm_host.h
++++ b/arch/arm64/include/asm/kvm_host.h
+@@ -161,6 +161,7 @@ enum vcpu_sysreg {
+ #define c2_TTBR1      (TTBR1_EL1 * 2) /* Translation Table Base Register 1 */
+ #define c2_TTBR1_high (c2_TTBR1 + 1)  /* TTBR1 top 32 bits */
+ #define c2_TTBCR      (TCR_EL1 * 2)   /* Translation Table Base Control R. */
++#define c2_TTBCR2     (c2_TTBCR + 1)  /* Translation Table Base Control R. 2 */
+ #define c3_DACR               (DACR32_EL2 * 2)/* Domain Access Control Register */
+ #define c5_DFSR               (ESR_EL1 * 2)   /* Data Fault Status Register */
+ #define c5_IFSR               (IFSR32_EL2 * 2)/* Instruction Fault Status Register */
+--- a/arch/arm64/kvm/sys_regs.c
++++ b/arch/arm64/kvm/sys_regs.c
+@@ -1315,6 +1315,7 @@ static const struct sys_reg_desc cp15_re
+       { Op1( 0), CRn( 2), CRm( 0), Op2( 0), access_vm_reg, NULL, c2_TTBR0 },
+       { Op1( 0), CRn( 2), CRm( 0), Op2( 1), access_vm_reg, NULL, c2_TTBR1 },
+       { Op1( 0), CRn( 2), CRm( 0), Op2( 2), access_vm_reg, NULL, c2_TTBCR },
++      { Op1( 0), CRn( 2), CRm( 0), Op2( 3), access_vm_reg, NULL, c2_TTBCR2 },
+       { Op1( 0), CRn( 3), CRm( 0), Op2( 0), access_vm_reg, NULL, c3_DACR },
+       { Op1( 0), CRn( 5), CRm( 0), Op2( 0), access_vm_reg, NULL, c5_DFSR },
+       { Op1( 0), CRn( 5), CRm( 0), Op2( 1), access_vm_reg, NULL, c5_IFSR },
diff --git a/queue-4.9/powerpc-xmon-change-printk-to-pr_cont.patch b/queue-4.9/powerpc-xmon-change-printk-to-pr_cont.patch
new file mode 100644 (file)
index 0000000..7ef7c65
--- /dev/null
@@ -0,0 +1,66 @@
+From 7c6c86b36a36dd4a13d30bba07718e767aa2e7a1 Mon Sep 17 00:00:00 2001
+From: Christophe Leroy <christophe.leroy@csgroup.eu>
+Date: Fri, 4 Dec 2020 10:35:38 +0000
+Subject: powerpc/xmon: Change printk() to pr_cont()
+
+From: Christophe Leroy <christophe.leroy@csgroup.eu>
+
+commit 7c6c86b36a36dd4a13d30bba07718e767aa2e7a1 upstream.
+
+Since some time now, printk() adds carriage return, leading to
+unusable xmon output if there is no udbg backend available:
+
+  [   54.288722] sysrq: Entering xmon
+  [   54.292209] Vector: 0  at [cace3d2c]
+  [   54.292274]     pc:
+  [   54.292331] c0023650
+  [   54.292468] : xmon+0x28/0x58
+  [   54.292519]
+  [   54.292574]     lr:
+  [   54.292630] c0023724
+  [   54.292749] : sysrq_handle_xmon+0xa4/0xfc
+  [   54.292801]
+  [   54.292867]     sp: cace3de8
+  [   54.292931]    msr: 9032
+  [   54.292999]   current = 0xc28d0000
+  [   54.293072]     pid   = 377, comm = sh
+  [   54.293157] Linux version 5.10.0-rc6-s3k-dev-01364-gedf13f0ccd76-dirty (root@po17688vm.idsi0.si.c-s.fr) (powerpc64-linux-gcc (GCC) 10.1.0, GNU ld (GNU Binutils) 2.34) #4211 PREEMPT Fri Dec 4 09:32:11 UTC 2020
+  [   54.293287] enter ? for help
+  [   54.293470] [cace3de8]
+  [   54.293532] c0023724
+  [   54.293654]  sysrq_handle_xmon+0xa4/0xfc
+  [   54.293711]  (unreliable)
+  ...
+  [   54.296002]
+  [   54.296159] --- Exception: c01 (System Call) at
+  [   54.296217] 0fd4e784
+  [   54.296303]
+  [   54.296375] SP (7fca6ff0) is in userspace
+  [   54.296431] mon>
+  [   54.296484]  <no input ...>
+
+Use pr_cont() instead.
+
+Fixes: 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing continuation lines")
+Cc: stable@vger.kernel.org # v4.9+
+Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
+[mpe: Mention that it only happens when udbg is not available]
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/c8a6ec704416ecd5ff2bd26213c9bc026bdd19de.1607077340.git.christophe.leroy@csgroup.eu
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/powerpc/xmon/nonstdio.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/powerpc/xmon/nonstdio.c
++++ b/arch/powerpc/xmon/nonstdio.c
+@@ -182,7 +182,7 @@ void xmon_printf(const char *format, ...
+       if (n && rc == 0) {
+               /* No udbg hooks, fallback to printk() - dangerous */
+-              printk("%s", xmon_outbuf);
++              pr_cont("%s", xmon_outbuf);
+       }
+ }
index c7ca12d490ccb90272a0878242825fa7c06fe4ae..f5043824825fc7061c111b588471f8915a130548 100644 (file)
@@ -149,3 +149,12 @@ usb-serial-keyspan_pda-fix-stalled-writes.patch
 usb-serial-keyspan_pda-fix-write-wakeup-use-after-free.patch
 usb-serial-keyspan_pda-fix-tx-unthrottle-use-after-free.patch
 usb-serial-keyspan_pda-fix-write-unthrottling.patch
+btrfs-quota-set-rescan-progress-to-u64-1-if-we-hit-last-leaf.patch
+btrfs-scrub-don-t-use-inode-page-cache-in-scrub_handle_errored_block.patch
+btrfs-fix-selftests-failure-due-to-uninitialized-i_mode-in-test-inodes.patch
+btrfs-fix-return-value-mixup-in-btrfs_get_extent.patch
+ext4-fix-a-memory-leak-of-ext4_free_data.patch
+kvm-arm64-introduce-handling-of-aarch32-ttbcr2-traps.patch
+powerpc-xmon-change-printk-to-pr_cont.patch
+ceph-fix-race-in-concurrent-__ceph_remove_cap-invocations.patch
+jffs2-fix-gc-exit-abnormally.patch