]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 14 Feb 2016 21:12:49 +0000 (13:12 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 14 Feb 2016 21:12:49 +0000 (13:12 -0800)
added patches:
ext4-crypto-add-missing-locking-for-keyring_key-access.patch
iommu-io-pgtable-arm-ensure-we-free-the-final-level-on-teardown.patch
sched-fix-crash-in-sched_init_numa.patch

queue-4.4/ext4-crypto-add-missing-locking-for-keyring_key-access.patch [new file with mode: 0644]
queue-4.4/iommu-io-pgtable-arm-ensure-we-free-the-final-level-on-teardown.patch [new file with mode: 0644]
queue-4.4/sched-fix-crash-in-sched_init_numa.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/ext4-crypto-add-missing-locking-for-keyring_key-access.patch b/queue-4.4/ext4-crypto-add-missing-locking-for-keyring_key-access.patch
new file mode 100644 (file)
index 0000000..fe52a05
--- /dev/null
@@ -0,0 +1,43 @@
+From db7730e3091a52c2fcd8fcc952b964d88998e675 Mon Sep 17 00:00:00 2001
+From: Theodore Ts'o <tytso@mit.edu>
+Date: Thu, 10 Dec 2015 00:57:58 -0500
+Subject: ext4 crypto: add missing locking for keyring_key access
+
+From: Theodore Ts'o <tytso@mit.edu>
+
+commit db7730e3091a52c2fcd8fcc952b964d88998e675 upstream.
+
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/ext4/crypto_key.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/fs/ext4/crypto_key.c
++++ b/fs/ext4/crypto_key.c
+@@ -213,9 +213,11 @@ retry:
+               res = -ENOKEY;
+               goto out;
+       }
++      down_read(&keyring_key->sem);
+       ukp = user_key_payload(keyring_key);
+       if (ukp->datalen != sizeof(struct ext4_encryption_key)) {
+               res = -EINVAL;
++              up_read(&keyring_key->sem);
+               goto out;
+       }
+       master_key = (struct ext4_encryption_key *)ukp->data;
+@@ -226,10 +228,12 @@ retry:
+                           "ext4: key size incorrect: %d\n",
+                           master_key->size);
+               res = -ENOKEY;
++              up_read(&keyring_key->sem);
+               goto out;
+       }
+       res = ext4_derive_key_aes(ctx.nonce, master_key->raw,
+                                 raw_key);
++      up_read(&keyring_key->sem);
+       if (res)
+               goto out;
+ got_key:
diff --git a/queue-4.4/iommu-io-pgtable-arm-ensure-we-free-the-final-level-on-teardown.patch b/queue-4.4/iommu-io-pgtable-arm-ensure-we-free-the-final-level-on-teardown.patch
new file mode 100644 (file)
index 0000000..ff59e4c
--- /dev/null
@@ -0,0 +1,51 @@
+From 12c2ab09571e8aae3a87da2a4a452632a5fac1e5 Mon Sep 17 00:00:00 2001
+From: Will Deacon <will.deacon@arm.com>
+Date: Tue, 15 Dec 2015 16:08:12 +0000
+Subject: iommu/io-pgtable-arm: Ensure we free the final level on teardown
+
+From: Will Deacon <will.deacon@arm.com>
+
+commit 12c2ab09571e8aae3a87da2a4a452632a5fac1e5 upstream.
+
+When tearing down page tables, we return early for the final level
+since we know that we won't have any table pointers to follow.
+Unfortunately, this also means that we forget to free the final level,
+so we end up leaking memory.
+
+Fix the issue by always freeing the current level, but just don't bother
+to iterate over the ptes if we're at the final level.
+
+Reported-by: Zhang Bo <zhangbo_a@xiaomi.com>
+Signed-off-by: Will Deacon <will.deacon@arm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/iommu/io-pgtable-arm.c |   11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+--- a/drivers/iommu/io-pgtable-arm.c
++++ b/drivers/iommu/io-pgtable-arm.c
+@@ -405,17 +405,18 @@ static void __arm_lpae_free_pgtable(stru
+       arm_lpae_iopte *start, *end;
+       unsigned long table_size;
+-      /* Only leaf entries at the last level */
+-      if (lvl == ARM_LPAE_MAX_LEVELS - 1)
+-              return;
+-
+       if (lvl == ARM_LPAE_START_LVL(data))
+               table_size = data->pgd_size;
+       else
+               table_size = 1UL << data->pg_shift;
+       start = ptep;
+-      end = (void *)ptep + table_size;
++
++      /* Only leaf entries at the last level */
++      if (lvl == ARM_LPAE_MAX_LEVELS - 1)
++              end = ptep;
++      else
++              end = (void *)ptep + table_size;
+       while (ptep != end) {
+               arm_lpae_iopte pte = *ptep++;
diff --git a/queue-4.4/sched-fix-crash-in-sched_init_numa.patch b/queue-4.4/sched-fix-crash-in-sched_init_numa.patch
new file mode 100644 (file)
index 0000000..1aa8b4f
--- /dev/null
@@ -0,0 +1,56 @@
+From 9c03ee147193645be4c186d3688232fa438c57c7 Mon Sep 17 00:00:00 2001
+From: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
+Date: Sat, 16 Jan 2016 00:31:23 +0530
+Subject: sched: Fix crash in sched_init_numa()
+
+From: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
+
+commit 9c03ee147193645be4c186d3688232fa438c57c7 upstream.
+
+The following PowerPC commit:
+
+  c118baf80256 ("arch/powerpc/mm/numa.c: do not allocate bootmem memory for non existing nodes")
+
+avoids allocating bootmem memory for non existent nodes.
+
+But when DEBUG_PER_CPU_MAPS=y is enabled, my powerNV system failed to boot
+because in sched_init_numa(), cpumask_or() operation was done on
+unallocated nodes.
+
+Fix that by making cpumask_or() operation only on existing nodes.
+
+[ Tested with and w/o DEBUG_PER_CPU_MAPS=y on x86 and PowerPC. ]
+
+Reported-by: Jan Stancek <jstancek@redhat.com>
+Tested-by: Jan Stancek <jstancek@redhat.com>
+Signed-off-by: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
+Cc: <gkurz@linux.vnet.ibm.com>
+Cc: <grant.likely@linaro.org>
+Cc: <nikunj@linux.vnet.ibm.com>
+Cc: <vdavydov@parallels.com>
+Cc: <linuxppc-dev@lists.ozlabs.org>
+Cc: <linux-mm@kvack.org>
+Cc: <peterz@infradead.org>
+Cc: <benh@kernel.crashing.org>
+Cc: <paulus@samba.org>
+Cc: <mpe@ellerman.id.au>
+Cc: <anton@samba.org>
+Link: http://lkml.kernel.org/r/1452884483-11676-1-git-send-email-raghavendra.kt@linux.vnet.ibm.com
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/sched/core.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -6738,7 +6738,7 @@ static void sched_init_numa(void)
+                       sched_domains_numa_masks[i][j] = mask;
+-                      for (k = 0; k < nr_node_ids; k++) {
++                      for_each_node(k) {
+                               if (node_distance(j, k) > sched_domains_numa_distance[i])
+                                       continue;
index 329b8d1e4f1be20cca47cc0fdae32e6d27cf3e65..824b59efb0a867c308f23462c45b5db68bfe5e24 100644 (file)
@@ -74,3 +74,6 @@ n_tty-fix-unsafe-reference-to-other-ldisc.patch
 tty-wait-interruptibly-for-tty-lock-on-reopen.patch
 tty-retry-failed-reopen-if-tty-teardown-in-progress.patch
 tty-fix-unsafe-ldisc-reference-via-ioctl-tiocgetd.patch
+iommu-io-pgtable-arm-ensure-we-free-the-final-level-on-teardown.patch
+ext4-crypto-add-missing-locking-for-keyring_key-access.patch
+sched-fix-crash-in-sched_init_numa.patch