]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 3 Dec 2019 12:31:54 +0000 (13:31 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 3 Dec 2019 12:31:54 +0000 (13:31 +0100)
added patches:
crypto-talitos-fix-build-error-by-selecting-lib_des.patch
ext4-add-more-paranoia-checking-in-ext4_expand_extra_isize-handling.patch
revert-jffs2-fix-possible-null-pointer-dereferences-in-jffs2_add_frag_to_fragtree.patch

queue-5.4/crypto-talitos-fix-build-error-by-selecting-lib_des.patch [new file with mode: 0644]
queue-5.4/ext4-add-more-paranoia-checking-in-ext4_expand_extra_isize-handling.patch [new file with mode: 0644]
queue-5.4/revert-jffs2-fix-possible-null-pointer-dereferences-in-jffs2_add_frag_to_fragtree.patch [new file with mode: 0644]
queue-5.4/series

diff --git a/queue-5.4/crypto-talitos-fix-build-error-by-selecting-lib_des.patch b/queue-5.4/crypto-talitos-fix-build-error-by-selecting-lib_des.patch
new file mode 100644 (file)
index 0000000..3affc4d
--- /dev/null
@@ -0,0 +1,33 @@
+From dbc2e87bd8b6d3cc79730b3a49c5163b4c386b49 Mon Sep 17 00:00:00 2001
+From: Herbert Xu <herbert@gondor.apana.org.au>
+Date: Tue, 26 Nov 2019 19:28:36 +0800
+Subject: crypto: talitos - Fix build error by selecting LIB_DES
+
+From: Herbert Xu <herbert@gondor.apana.org.au>
+
+commit dbc2e87bd8b6d3cc79730b3a49c5163b4c386b49 upstream.
+
+The talitos driver needs to select LIB_DES as it needs calls
+des_expand_key.
+
+Fixes: 9d574ae8ebc1 ("crypto: talitos/des - switch to new...")
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Acked-by: Ard Biesheuvel <ardb@kernel.org>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/crypto/Kconfig |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/crypto/Kconfig
++++ b/drivers/crypto/Kconfig
+@@ -287,6 +287,7 @@ config CRYPTO_DEV_TALITOS
+       select CRYPTO_AUTHENC
+       select CRYPTO_BLKCIPHER
+       select CRYPTO_HASH
++      select CRYPTO_LIB_DES
+       select HW_RANDOM
+       depends on FSL_SOC
+       help
diff --git a/queue-5.4/ext4-add-more-paranoia-checking-in-ext4_expand_extra_isize-handling.patch b/queue-5.4/ext4-add-more-paranoia-checking-in-ext4_expand_extra_isize-handling.patch
new file mode 100644 (file)
index 0000000..5ca43bb
--- /dev/null
@@ -0,0 +1,93 @@
+From 4ea99936a1630f51fc3a2d61a58ec4a1c4b7d55a Mon Sep 17 00:00:00 2001
+From: Theodore Ts'o <tytso@mit.edu>
+Date: Thu, 7 Nov 2019 21:43:41 -0500
+Subject: ext4: add more paranoia checking in ext4_expand_extra_isize handling
+
+From: Theodore Ts'o <tytso@mit.edu>
+
+commit 4ea99936a1630f51fc3a2d61a58ec4a1c4b7d55a upstream.
+
+It's possible to specify a non-zero s_want_extra_isize via debugging
+option, and this can cause bad things(tm) to happen when using a file
+system with an inode size of 128 bytes.
+
+Add better checking when the file system is mounted, as well as when
+we are actually doing the trying to do the inode expansion.
+
+Link: https://lore.kernel.org/r/20191110121510.GH23325@mit.edu
+Reported-by: syzbot+f8d6f8386ceacdbfff57@syzkaller.appspotmail.com
+Reported-by: syzbot+33d7ea72e47de3bdf4e1@syzkaller.appspotmail.com
+Reported-by: syzbot+44b6763edfc17144296f@syzkaller.appspotmail.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/inode.c |   15 +++++++++++++++
+ fs/ext4/super.c |   21 ++++++++++++---------
+ 2 files changed, 27 insertions(+), 9 deletions(-)
+
+--- a/fs/ext4/inode.c
++++ b/fs/ext4/inode.c
+@@ -5912,8 +5912,23 @@ static int __ext4_expand_extra_isize(str
+ {
+       struct ext4_inode *raw_inode;
+       struct ext4_xattr_ibody_header *header;
++      unsigned int inode_size = EXT4_INODE_SIZE(inode->i_sb);
++      struct ext4_inode_info *ei = EXT4_I(inode);
+       int error;
++      /* this was checked at iget time, but double check for good measure */
++      if ((EXT4_GOOD_OLD_INODE_SIZE + ei->i_extra_isize > inode_size) ||
++          (ei->i_extra_isize & 3)) {
++              EXT4_ERROR_INODE(inode, "bad extra_isize %u (inode size %u)",
++                               ei->i_extra_isize,
++                               EXT4_INODE_SIZE(inode->i_sb));
++              return -EFSCORRUPTED;
++      }
++      if ((new_extra_isize < ei->i_extra_isize) ||
++          (new_extra_isize < 4) ||
++          (new_extra_isize > inode_size - EXT4_GOOD_OLD_INODE_SIZE))
++              return -EINVAL; /* Should never happen */
++
+       raw_inode = ext4_raw_inode(iloc);
+       header = IHDR(inode, raw_inode);
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -3555,12 +3555,15 @@ static void ext4_clamp_want_extra_isize(
+ {
+       struct ext4_sb_info *sbi = EXT4_SB(sb);
+       struct ext4_super_block *es = sbi->s_es;
++      unsigned def_extra_isize = sizeof(struct ext4_inode) -
++                                              EXT4_GOOD_OLD_INODE_SIZE;
+-      /* determine the minimum size of new large inodes, if present */
+-      if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE &&
+-          sbi->s_want_extra_isize == 0) {
+-              sbi->s_want_extra_isize = sizeof(struct ext4_inode) -
+-                                                   EXT4_GOOD_OLD_INODE_SIZE;
++      if (sbi->s_inode_size == EXT4_GOOD_OLD_INODE_SIZE) {
++              sbi->s_want_extra_isize = 0;
++              return;
++      }
++      if (sbi->s_want_extra_isize < 4) {
++              sbi->s_want_extra_isize = def_extra_isize;
+               if (ext4_has_feature_extra_isize(sb)) {
+                       if (sbi->s_want_extra_isize <
+                           le16_to_cpu(es->s_want_extra_isize))
+@@ -3573,10 +3576,10 @@ static void ext4_clamp_want_extra_isize(
+               }
+       }
+       /* Check if enough inode space is available */
+-      if (EXT4_GOOD_OLD_INODE_SIZE + sbi->s_want_extra_isize >
+-                                                      sbi->s_inode_size) {
+-              sbi->s_want_extra_isize = sizeof(struct ext4_inode) -
+-                                                     EXT4_GOOD_OLD_INODE_SIZE;
++      if ((sbi->s_want_extra_isize > sbi->s_inode_size) ||
++          (EXT4_GOOD_OLD_INODE_SIZE + sbi->s_want_extra_isize >
++                                                      sbi->s_inode_size)) {
++              sbi->s_want_extra_isize = def_extra_isize;
+               ext4_msg(sb, KERN_INFO,
+                        "required extra inode space not available");
+       }
diff --git a/queue-5.4/revert-jffs2-fix-possible-null-pointer-dereferences-in-jffs2_add_frag_to_fragtree.patch b/queue-5.4/revert-jffs2-fix-possible-null-pointer-dereferences-in-jffs2_add_frag_to_fragtree.patch
new file mode 100644 (file)
index 0000000..fff991e
--- /dev/null
@@ -0,0 +1,38 @@
+From 6e78c01fde9023e0701f3af880c1fd9de6e4e8e3 Mon Sep 17 00:00:00 2001
+From: Joel Stanley <joel@jms.id.au>
+Date: Fri, 29 Nov 2019 10:49:30 +1030
+Subject: Revert "jffs2: Fix possible null-pointer dereferences in jffs2_add_frag_to_fragtree()"
+
+From: Joel Stanley <joel@jms.id.au>
+
+commit 6e78c01fde9023e0701f3af880c1fd9de6e4e8e3 upstream.
+
+This reverts commit f2538f999345405f7d2e1194c0c8efa4e11f7b3a. The patch
+stopped JFFS2 from being able to mount an existing filesystem with the
+following errors:
+
+ jffs2: error: (77) jffs2_build_inode_fragtree: Add node to tree failed -22
+ jffs2: error: (77) jffs2_do_read_inode_internal: Failed to build final fragtree for inode #5377: error -22
+
+Fixes: f2538f999345 ("jffs2: Fix possible null-pointer dereferences...")
+Cc: stable@vger.kernel.org
+Suggested-by: Hou Tao <houtao1@huawei.com>
+Signed-off-by: Joel Stanley <joel@jms.id.au>
+Signed-off-by: Richard Weinberger <richard@nod.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/jffs2/nodelist.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/jffs2/nodelist.c
++++ b/fs/jffs2/nodelist.c
+@@ -226,7 +226,7 @@ static int jffs2_add_frag_to_fragtree(st
+               lastend = this->ofs + this->size;
+       } else {
+               dbg_fragtree2("lookup gave no frag\n");
+-              return -EINVAL;
++              lastend = 0;
+       }
+       /* See if we ran off the end of the fragtree */
index 91087085e3b427ca3c026f78e063600f74c1325f..ac895ba4d5e96e705e1becc81e3270a9c60da825 100644 (file)
@@ -38,3 +38,6 @@ tipc-fix-link-name-length-check.patch
 selftests-pmtu-use-oneline-for-ip-route-list-cache.patch
 r8169-fix-jumbo-configuration-for-rtl8168evl.patch
 r8169-fix-resume-on-cable-plug-in.patch
+ext4-add-more-paranoia-checking-in-ext4_expand_extra_isize-handling.patch
+revert-jffs2-fix-possible-null-pointer-dereferences-in-jffs2_add_frag_to_fragtree.patch
+crypto-talitos-fix-build-error-by-selecting-lib_des.patch