]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.18-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 15 Feb 2018 08:31:02 +0000 (09:31 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 15 Feb 2018 08:31:02 +0000 (09:31 +0100)
added patches:
alpha-fix-crash-if-pthread_create-races-with-signal-delivery.patch
alpha-fix-reboot-on-avanti-platform.patch
arm-kvm-fix-smccc-handling-of-unimplemented-smc-hvc-calls.patch
bluetooth-btsdio-do-not-bind-to-non-removable-bcm43341.patch
crypto-caam-fix-endless-loop-when-deco-acquire-fails.patch
edac-octeon-fix-an-uninitialized-variable-warning.patch
kernel-async.c-revert-async-simplify-lowest_in_progress.patch
media-cxusb-dib0700-ignore-xc2028_i2c_flush.patch
pktcdvd-fix-pkt_setup_dev-error-path.patch
signal-openrisc-fix-do_unaligned_access-to-send-the-proper-signal.patch
signal-sh-ensure-si_signo-is-initialized-in-do_divide_error.patch
xtensa-fix-futex_atomic_cmpxchg_inatomic.patch

13 files changed:
queue-3.18/alpha-fix-crash-if-pthread_create-races-with-signal-delivery.patch [new file with mode: 0644]
queue-3.18/alpha-fix-reboot-on-avanti-platform.patch [new file with mode: 0644]
queue-3.18/arm-kvm-fix-smccc-handling-of-unimplemented-smc-hvc-calls.patch [new file with mode: 0644]
queue-3.18/bluetooth-btsdio-do-not-bind-to-non-removable-bcm43341.patch [new file with mode: 0644]
queue-3.18/crypto-caam-fix-endless-loop-when-deco-acquire-fails.patch [new file with mode: 0644]
queue-3.18/edac-octeon-fix-an-uninitialized-variable-warning.patch [new file with mode: 0644]
queue-3.18/kernel-async.c-revert-async-simplify-lowest_in_progress.patch [new file with mode: 0644]
queue-3.18/media-cxusb-dib0700-ignore-xc2028_i2c_flush.patch [new file with mode: 0644]
queue-3.18/pktcdvd-fix-pkt_setup_dev-error-path.patch [new file with mode: 0644]
queue-3.18/series
queue-3.18/signal-openrisc-fix-do_unaligned_access-to-send-the-proper-signal.patch [new file with mode: 0644]
queue-3.18/signal-sh-ensure-si_signo-is-initialized-in-do_divide_error.patch [new file with mode: 0644]
queue-3.18/xtensa-fix-futex_atomic_cmpxchg_inatomic.patch [new file with mode: 0644]

diff --git a/queue-3.18/alpha-fix-crash-if-pthread_create-races-with-signal-delivery.patch b/queue-3.18/alpha-fix-crash-if-pthread_create-races-with-signal-delivery.patch
new file mode 100644 (file)
index 0000000..6904e17
--- /dev/null
@@ -0,0 +1,56 @@
+From 21ffceda1c8b3807615c40d440d7815e0c85d366 Mon Sep 17 00:00:00 2001
+From: Mikulas Patocka <mpatocka@redhat.com>
+Date: Tue, 2 Jan 2018 14:01:34 -0500
+Subject: alpha: fix crash if pthread_create races with signal delivery
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+commit 21ffceda1c8b3807615c40d440d7815e0c85d366 upstream.
+
+On alpha, a process will crash if it attempts to start a thread and a
+signal is delivered at the same time. The crash can be reproduced with
+this program: https://cygwin.com/ml/cygwin/2014-11/msg00473.html
+
+The reason for the crash is this:
+* we call the clone syscall
+* we go to the function copy_process
+* copy process calls copy_thread_tls, it is a wrapper around copy_thread
+* copy_thread sets the tls pointer: childti->pcb.unique = regs->r20
+* copy_thread sets regs->r20 to zero
+* we go back to copy_process
+* copy process checks "if (signal_pending(current))" and returns
+  -ERESTARTNOINTR
+* the clone syscall is restarted, but this time, regs->r20 is zero, so
+  the new thread is created with zero tls pointer
+* the new thread crashes in start_thread when attempting to access tls
+
+The comment in the code says that setting the register r20 is some
+compatibility with OSF/1. But OSF/1 doesn't use the CLONE_SETTLS flag, so
+we don't have to zero r20 if CLONE_SETTLS is set. This patch fixes the bug
+by zeroing regs->r20 only if CLONE_SETTLS is not set.
+
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Matt Turner <mattst88@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/alpha/kernel/process.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/arch/alpha/kernel/process.c
++++ b/arch/alpha/kernel/process.c
+@@ -274,12 +274,13 @@ copy_thread(unsigned long clone_flags, u
+          application calling fork.  */
+       if (clone_flags & CLONE_SETTLS)
+               childti->pcb.unique = regs->r20;
++      else
++              regs->r20 = 0;  /* OSF/1 has some strange fork() semantics.  */
+       childti->pcb.usp = usp ?: rdusp();
+       *childregs = *regs;
+       childregs->r0 = 0;
+       childregs->r19 = 0;
+       childregs->r20 = 1;     /* OSF/1 has some strange fork() semantics.  */
+-      regs->r20 = 0;
+       stack = ((struct switch_stack *) regs) - 1;
+       *childstack = *stack;
+       childstack->r26 = (unsigned long) ret_from_fork;
diff --git a/queue-3.18/alpha-fix-reboot-on-avanti-platform.patch b/queue-3.18/alpha-fix-reboot-on-avanti-platform.patch
new file mode 100644 (file)
index 0000000..100748e
--- /dev/null
@@ -0,0 +1,32 @@
+From 55fc633c41a08ce9244ff5f528f420b16b1e04d6 Mon Sep 17 00:00:00 2001
+From: Mikulas Patocka <mpatocka@redhat.com>
+Date: Tue, 2 Jan 2018 13:59:54 -0500
+Subject: alpha: fix reboot on Avanti platform
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+commit 55fc633c41a08ce9244ff5f528f420b16b1e04d6 upstream.
+
+We need to define NEED_SRM_SAVE_RESTORE on the Avanti, otherwise we get
+machine check exception when attempting to reboot the machine.
+
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Matt Turner <mattst88@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/alpha/kernel/pci_impl.h |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/arch/alpha/kernel/pci_impl.h
++++ b/arch/alpha/kernel/pci_impl.h
+@@ -143,7 +143,8 @@ struct pci_iommu_arena
+ };
+ #if defined(CONFIG_ALPHA_SRM) && \
+-    (defined(CONFIG_ALPHA_CIA) || defined(CONFIG_ALPHA_LCA))
++    (defined(CONFIG_ALPHA_CIA) || defined(CONFIG_ALPHA_LCA) || \
++     defined(CONFIG_ALPHA_AVANTI))
+ # define NEED_SRM_SAVE_RESTORE
+ #else
+ # undef NEED_SRM_SAVE_RESTORE
diff --git a/queue-3.18/arm-kvm-fix-smccc-handling-of-unimplemented-smc-hvc-calls.patch b/queue-3.18/arm-kvm-fix-smccc-handling-of-unimplemented-smc-hvc-calls.patch
new file mode 100644 (file)
index 0000000..8340351
--- /dev/null
@@ -0,0 +1,55 @@
+From 20e8175d246e9f9deb377f2784b3e7dfb2ad3e86 Mon Sep 17 00:00:00 2001
+From: Marc Zyngier <marc.zyngier@arm.com>
+Date: Tue, 6 Feb 2018 17:56:06 +0000
+Subject: arm: KVM: Fix SMCCC handling of unimplemented SMC/HVC calls
+
+From: Marc Zyngier <marc.zyngier@arm.com>
+
+commit 20e8175d246e9f9deb377f2784b3e7dfb2ad3e86 upstream.
+
+KVM doesn't follow the SMCCC when it comes to unimplemented calls,
+and inject an UNDEF instead of returning an error. Since firmware
+calls are now used for security mitigation, they are becoming more
+common, and the undef is counter productive.
+
+Instead, let's follow the SMCCC which states that -1 must be returned
+to the caller when getting an unknown function number.
+
+Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
+Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/kvm/handle_exit.c |   13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
+
+--- a/arch/arm/kvm/handle_exit.c
++++ b/arch/arm/kvm/handle_exit.c
+@@ -45,7 +45,7 @@ static int handle_hvc(struct kvm_vcpu *v
+       ret = kvm_psci_call(vcpu);
+       if (ret < 0) {
+-              kvm_inject_undefined(vcpu);
++              vcpu_set_reg(vcpu, 0, ~0UL);
+               return 1;
+       }
+@@ -54,7 +54,16 @@ static int handle_hvc(struct kvm_vcpu *v
+ static int handle_smc(struct kvm_vcpu *vcpu, struct kvm_run *run)
+ {
+-      kvm_inject_undefined(vcpu);
++      /*
++       * "If an SMC instruction executed at Non-secure EL1 is
++       * trapped to EL2 because HCR_EL2.TSC is 1, the exception is a
++       * Trap exception, not a Secure Monitor Call exception [...]"
++       *
++       * We need to advance the PC after the trap, as it would
++       * otherwise return to the same address...
++       */
++      vcpu_set_reg(vcpu, 0, ~0UL);
++      kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));
+       return 1;
+ }
diff --git a/queue-3.18/bluetooth-btsdio-do-not-bind-to-non-removable-bcm43341.patch b/queue-3.18/bluetooth-btsdio-do-not-bind-to-non-removable-bcm43341.patch
new file mode 100644 (file)
index 0000000..9f3c8b9
--- /dev/null
@@ -0,0 +1,57 @@
+From b4cdaba274247c9c841c6a682c08fa91fb3aa549 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Wed, 29 Nov 2017 20:29:07 +0100
+Subject: Bluetooth: btsdio: Do not bind to non-removable BCM43341
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+commit b4cdaba274247c9c841c6a682c08fa91fb3aa549 upstream.
+
+BCM43341 devices soldered onto the PCB (non-removable) always (AFAICT)
+use an UART connection for bluetooth. But they also advertise btsdio
+support on their 3th sdio function, this causes 2 problems:
+
+1) A non functioning BT HCI getting registered
+
+2) Since the btsdio driver does not have suspend/resume callbacks,
+mmc_sdio_pre_suspend will return -ENOSYS, causing mmc_pm_notify()
+to react as if the SDIO-card is removed and since the slot is
+marked as non-removable it will never get detected as inserted again.
+Which results in wifi no longer working after a suspend/resume.
+
+This commit fixes both by making btsdio ignore BCM43341 devices
+when connected to a slot which is marked non-removable.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/bluetooth/btsdio.c |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/drivers/bluetooth/btsdio.c
++++ b/drivers/bluetooth/btsdio.c
+@@ -31,6 +31,7 @@
+ #include <linux/errno.h>
+ #include <linux/skbuff.h>
++#include <linux/mmc/host.h>
+ #include <linux/mmc/sdio_ids.h>
+ #include <linux/mmc/sdio_func.h>
+@@ -303,6 +304,14 @@ static int btsdio_probe(struct sdio_func
+               tuple = tuple->next;
+       }
++      /* BCM43341 devices soldered onto the PCB (non-removable) use an
++       * uart connection for bluetooth, ignore the BT SDIO interface.
++       */
++      if (func->vendor == SDIO_VENDOR_ID_BROADCOM &&
++          func->device == SDIO_DEVICE_ID_BROADCOM_43341 &&
++          !mmc_card_is_removable(func->card->host))
++              return -ENODEV;
++
+       data = devm_kzalloc(&func->dev, sizeof(*data), GFP_KERNEL);
+       if (!data)
+               return -ENOMEM;
diff --git a/queue-3.18/crypto-caam-fix-endless-loop-when-deco-acquire-fails.patch b/queue-3.18/crypto-caam-fix-endless-loop-when-deco-acquire-fails.patch
new file mode 100644 (file)
index 0000000..4e4ecfe
--- /dev/null
@@ -0,0 +1,58 @@
+From 225ece3e7dad4cfc44cca38ce7a3a80f255ea8f1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Horia=20Geant=C4=83?= <horia.geanta@nxp.com>
+Date: Mon, 5 Feb 2018 11:15:52 +0200
+Subject: crypto: caam - fix endless loop when DECO acquire fails
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Horia Geantă <horia.geanta@nxp.com>
+
+commit 225ece3e7dad4cfc44cca38ce7a3a80f255ea8f1 upstream.
+
+In case DECO0 cannot be acquired - i.e. run_descriptor_deco0() fails
+with -ENODEV, caam_probe() enters an endless loop:
+
+run_descriptor_deco0
+       ret -ENODEV
+       -> instantiate_rng
+               -ENODEV, overwritten by -EAGAIN
+               ret -EAGAIN
+               -> caam_probe
+                       -EAGAIN results in endless loop
+
+It turns out the error path in instantiate_rng() is incorrect,
+the checks are done in the wrong order.
+
+Fixes: 1005bccd7a4a6 ("crypto: caam - enable instantiation of all RNG4 state handles")
+Reported-by: Bryan O'Donoghue <pure.logic@nexus-software.ie>
+Suggested-by: Auer Lukas <lukas.auer@aisec.fraunhofer.de>
+Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/crypto/caam/ctrl.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+--- a/drivers/crypto/caam/ctrl.c
++++ b/drivers/crypto/caam/ctrl.c
+@@ -209,12 +209,16 @@ static int instantiate_rng(struct device
+                * without any error (HW optimizations for later
+                * CAAM eras), then try again.
+                */
++              if (ret)
++                      break;
++
+               rdsta_val =
+                       rd_reg32(&ctrl->r4tst[0].rdsta) & RDSTA_IFMASK;
+-              if (status || !(rdsta_val & (1 << sh_idx)))
++              if (status || !(rdsta_val & (1 << sh_idx))) {
+                       ret = -EAGAIN;
+-              if (ret)
+                       break;
++              }
++
+               dev_info(ctrldev, "Instantiated RNG4 SH%d\n", sh_idx);
+               /* Clear the contents before recreating the descriptor */
+               memset(desc, 0x00, CAAM_CMD_SZ * 7);
diff --git a/queue-3.18/edac-octeon-fix-an-uninitialized-variable-warning.patch b/queue-3.18/edac-octeon-fix-an-uninitialized-variable-warning.patch
new file mode 100644 (file)
index 0000000..1511b18
--- /dev/null
@@ -0,0 +1,47 @@
+From 544e92581a2ac44607d7cc602c6b54d18656f56d Mon Sep 17 00:00:00 2001
+From: James Hogan <jhogan@kernel.org>
+Date: Mon, 13 Nov 2017 16:12:06 +0000
+Subject: EDAC, octeon: Fix an uninitialized variable warning
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: James Hogan <jhogan@kernel.org>
+
+commit 544e92581a2ac44607d7cc602c6b54d18656f56d upstream.
+
+Fix an uninitialized variable warning in the Octeon EDAC driver, as seen
+in MIPS cavium_octeon_defconfig builds since v4.14 with Codescape GNU
+Tools 2016.05-03:
+
+  drivers/edac/octeon_edac-lmc.c In function ‘octeon_lmc_edac_poll_o2’:
+  drivers/edac/octeon_edac-lmc.c:87:24: warning: ‘((long unsigned int*)&int_reg)[1]’ may \
+    be used uninitialized in this function [-Wmaybe-uninitialized]
+    if (int_reg.s.sec_err || int_reg.s.ded_err) {
+                        ^
+Iinitialise the whole int_reg variable to zero before the conditional
+assignments in the error injection case.
+
+Signed-off-by: James Hogan <jhogan@kernel.org>
+Acked-by: David Daney <david.daney@cavium.com>
+Cc: linux-edac <linux-edac@vger.kernel.org>
+Cc: linux-mips@linux-mips.org
+Fixes: 1bc021e81565 ("EDAC: Octeon: Add error injection support")
+Link: http://lkml.kernel.org/r/20171113161206.20990-1-james.hogan@mips.com
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/edac/octeon_edac-lmc.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/edac/octeon_edac-lmc.c
++++ b/drivers/edac/octeon_edac-lmc.c
+@@ -79,6 +79,7 @@ static void octeon_lmc_edac_poll_o2(stru
+       if (!pvt->inject)
+               int_reg.u64 = cvmx_read_csr(CVMX_LMCX_INT(mci->mc_idx));
+       else {
++              int_reg.u64 = 0;
+               if (pvt->error_type == 1)
+                       int_reg.s.sec_err = 1;
+               if (pvt->error_type == 2)
diff --git a/queue-3.18/kernel-async.c-revert-async-simplify-lowest_in_progress.patch b/queue-3.18/kernel-async.c-revert-async-simplify-lowest_in_progress.patch
new file mode 100644 (file)
index 0000000..0f8c255
--- /dev/null
@@ -0,0 +1,87 @@
+From 4f7e988e63e336827f4150de48163bed05d653bd Mon Sep 17 00:00:00 2001
+From: Rasmus Villemoes <linux@rasmusvillemoes.dk>
+Date: Tue, 6 Feb 2018 15:37:55 -0800
+Subject: kernel/async.c: revert "async: simplify lowest_in_progress()"
+
+From: Rasmus Villemoes <linux@rasmusvillemoes.dk>
+
+commit 4f7e988e63e336827f4150de48163bed05d653bd upstream.
+
+This reverts commit 92266d6ef60c ("async: simplify lowest_in_progress()")
+which was simply wrong: In the case where domain is NULL, we now use the
+wrong offsetof() in the list_first_entry macro, so we don't actually
+fetch the ->cookie value, but rather the eight bytes located
+sizeof(struct list_head) further into the struct async_entry.
+
+On 64 bit, that's the data member, while on 32 bit, that's a u64 built
+from func and data in some order.
+
+I think the bug happens to be harmless in practice: It obviously only
+affects callers which pass a NULL domain, and AFAICT the only such
+caller is
+
+  async_synchronize_full() ->
+  async_synchronize_full_domain(NULL) ->
+  async_synchronize_cookie_domain(ASYNC_COOKIE_MAX, NULL)
+
+and the ASYNC_COOKIE_MAX means that in practice we end up waiting for
+the async_global_pending list to be empty - but it would break if
+somebody happened to pass (void*)-1 as the data element to
+async_schedule, and of course also if somebody ever does a
+async_synchronize_cookie_domain(, NULL) with a "finite" cookie value.
+
+Maybe the "harmless in practice" means this isn't -stable material.  But
+I'm not completely confident my quick git grep'ing is enough, and there
+might be affected code in one of the earlier kernels that has since been
+removed, so I'll leave the decision to the stable guys.
+
+Link: http://lkml.kernel.org/r/20171128104938.3921-1-linux@rasmusvillemoes.dk
+Fixes: 92266d6ef60c "async: simplify lowest_in_progress()"
+Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
+Acked-by: Tejun Heo <tj@kernel.org>
+Cc: Arjan van de Ven <arjan@linux.intel.com>
+Cc: Adam Wallis <awallis@codeaurora.org>
+Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/async.c |   20 ++++++++++++--------
+ 1 file changed, 12 insertions(+), 8 deletions(-)
+
+--- a/kernel/async.c
++++ b/kernel/async.c
+@@ -84,20 +84,24 @@ static atomic_t entry_count;
+ static async_cookie_t lowest_in_progress(struct async_domain *domain)
+ {
+-      struct list_head *pending;
++      struct async_entry *first = NULL;
+       async_cookie_t ret = ASYNC_COOKIE_MAX;
+       unsigned long flags;
+       spin_lock_irqsave(&async_lock, flags);
+-      if (domain)
+-              pending = &domain->pending;
+-      else
+-              pending = &async_global_pending;
++      if (domain) {
++              if (!list_empty(&domain->pending))
++                      first = list_first_entry(&domain->pending,
++                                      struct async_entry, domain_list);
++      } else {
++              if (!list_empty(&async_global_pending))
++                      first = list_first_entry(&async_global_pending,
++                                      struct async_entry, global_list);
++      }
+-      if (!list_empty(pending))
+-              ret = list_first_entry(pending, struct async_entry,
+-                                     domain_list)->cookie;
++      if (first)
++              ret = first->cookie;
+       spin_unlock_irqrestore(&async_lock, flags);
+       return ret;
diff --git a/queue-3.18/media-cxusb-dib0700-ignore-xc2028_i2c_flush.patch b/queue-3.18/media-cxusb-dib0700-ignore-xc2028_i2c_flush.patch
new file mode 100644 (file)
index 0000000..c2ab4ba
--- /dev/null
@@ -0,0 +1,47 @@
+From 9893b905e743ded332575ca04486bd586c0772f7 Mon Sep 17 00:00:00 2001
+From: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
+Date: Wed, 24 Jan 2018 06:01:57 -0500
+Subject: media: cxusb, dib0700: ignore XC2028_I2C_FLUSH
+
+From: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
+
+commit 9893b905e743ded332575ca04486bd586c0772f7 upstream.
+
+The XC2028_I2C_FLUSH only needs to be implemented on a few
+devices. Others can safely ignore it.
+
+That prevents filling the dmesg with lots of messages like:
+
+       dib0700: stk7700ph_xc3028_callback: unknown command 2, arg 0
+
+Fixes: 4d37ece757a8 ("[media] tuner/xc2028: Add I2C flush callback")
+Reported-by: Enrico Mioso <mrkiko.rs@gmail.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/media/usb/dvb-usb/cxusb.c           |    2 ++
+ drivers/media/usb/dvb-usb/dib0700_devices.c |    1 +
+ 2 files changed, 3 insertions(+)
+
+--- a/drivers/media/usb/dvb-usb/cxusb.c
++++ b/drivers/media/usb/dvb-usb/cxusb.c
+@@ -923,6 +923,8 @@ static int dvico_bluebird_xc2028_callbac
+       case XC2028_RESET_CLK:
+               deb_info("%s: XC2028_RESET_CLK %d\n", __func__, arg);
+               break;
++      case XC2028_I2C_FLUSH:
++              break;
+       default:
+               deb_info("%s: unknown command %d, arg %d\n", __func__,
+                        command, arg);
+--- a/drivers/media/usb/dvb-usb/dib0700_devices.c
++++ b/drivers/media/usb/dvb-usb/dib0700_devices.c
+@@ -431,6 +431,7 @@ static int stk7700ph_xc3028_callback(voi
+               state->dib7000p_ops.set_gpio(adap->fe_adap[0].fe, 8, 0, 1);
+               break;
+       case XC2028_RESET_CLK:
++      case XC2028_I2C_FLUSH:
+               break;
+       default:
+               err("%s: unknown command %d, arg %d\n", __func__,
diff --git a/queue-3.18/pktcdvd-fix-pkt_setup_dev-error-path.patch b/queue-3.18/pktcdvd-fix-pkt_setup_dev-error-path.patch
new file mode 100644 (file)
index 0000000..851a9e0
--- /dev/null
@@ -0,0 +1,52 @@
+From 5a0ec388ef0f6e33841aeb810d7fa23f049ec4cd Mon Sep 17 00:00:00 2001
+From: Bart Van Assche <bart.vanassche@wdc.com>
+Date: Tue, 2 Jan 2018 11:39:47 -0800
+Subject: pktcdvd: Fix pkt_setup_dev() error path
+
+From: Bart Van Assche <bart.vanassche@wdc.com>
+
+commit 5a0ec388ef0f6e33841aeb810d7fa23f049ec4cd upstream.
+
+Commit 523e1d399ce0 ("block: make gendisk hold a reference to its queue")
+modified add_disk() and disk_release() but did not update any of the
+error paths that trigger a put_disk() call after disk->queue has been
+assigned. That introduced the following behavior in the pktcdvd driver
+if pkt_new_dev() fails:
+
+Kernel BUG at 00000000e98fd882 [verbose debug info unavailable]
+
+Since disk_release() calls blk_put_queue() anyway if disk->queue != NULL,
+fix this by removing the blk_cleanup_queue() call from the pkt_setup_dev()
+error path.
+
+Fixes: commit 523e1d399ce0 ("block: make gendisk hold a reference to its queue")
+Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
+Cc: Tejun Heo <tj@kernel.org>
+Cc: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/block/pktcdvd.c |    4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+--- a/drivers/block/pktcdvd.c
++++ b/drivers/block/pktcdvd.c
+@@ -2798,7 +2798,7 @@ static int pkt_setup_dev(dev_t dev, dev_
+       pd->pkt_dev = MKDEV(pktdev_major, idx);
+       ret = pkt_new_dev(pd, dev);
+       if (ret)
+-              goto out_new_dev;
++              goto out_mem2;
+       /* inherit events of the host device */
+       disk->events = pd->bdev->bd_disk->events;
+@@ -2816,8 +2816,6 @@ static int pkt_setup_dev(dev_t dev, dev_
+       mutex_unlock(&ctl_mutex);
+       return 0;
+-out_new_dev:
+-      blk_cleanup_queue(disk->queue);
+ out_mem2:
+       put_disk(disk);
+ out_mem:
index 121bc50daf8846127309c0026997eba952afd6e4..ba5f54d7b420a883c1dbb0576e9344e9195f85de 100644 (file)
@@ -30,3 +30,15 @@ nfs-commit-direct-writes-even-if-they-fail-partially.patch
 kernfs-fix-regression-in-kernfs_fop_write-caused-by-wrong-type.patch
 crypto-hash-introduce-crypto_hash_alg_has_setkey.patch
 crypto-cryptd-pass-through-absence-of-setkey.patch
+crypto-caam-fix-endless-loop-when-deco-acquire-fails.patch
+arm-kvm-fix-smccc-handling-of-unimplemented-smc-hvc-calls.patch
+media-cxusb-dib0700-ignore-xc2028_i2c_flush.patch
+kernel-async.c-revert-async-simplify-lowest_in_progress.patch
+bluetooth-btsdio-do-not-bind-to-non-removable-bcm43341.patch
+signal-openrisc-fix-do_unaligned_access-to-send-the-proper-signal.patch
+signal-sh-ensure-si_signo-is-initialized-in-do_divide_error.patch
+alpha-fix-crash-if-pthread_create-races-with-signal-delivery.patch
+alpha-fix-reboot-on-avanti-platform.patch
+xtensa-fix-futex_atomic_cmpxchg_inatomic.patch
+edac-octeon-fix-an-uninitialized-variable-warning.patch
+pktcdvd-fix-pkt_setup_dev-error-path.patch
diff --git a/queue-3.18/signal-openrisc-fix-do_unaligned_access-to-send-the-proper-signal.patch b/queue-3.18/signal-openrisc-fix-do_unaligned_access-to-send-the-proper-signal.patch
new file mode 100644 (file)
index 0000000..7099117
--- /dev/null
@@ -0,0 +1,56 @@
+From 500d58300571b6602341b041f97c082a461ef994 Mon Sep 17 00:00:00 2001
+From: "Eric W. Biederman" <ebiederm@xmission.com>
+Date: Tue, 1 Aug 2017 04:16:47 -0500
+Subject: signal/openrisc: Fix do_unaligned_access to send the proper signal
+
+From: Eric W. Biederman <ebiederm@xmission.com>
+
+commit 500d58300571b6602341b041f97c082a461ef994 upstream.
+
+While reviewing the signal sending on openrisc the do_unaligned_access
+function stood out because it is obviously wrong.  A comment about an
+si_code set above when actually si_code is never set.  Leading to a
+random si_code being sent to userspace in the event of an unaligned
+access.
+
+Looking further SIGBUS BUS_ADRALN is the proper pair of signal and
+si_code to send for an unaligned access. That is what other
+architectures do and what is required by posix.
+
+Given that do_unaligned_access is broken in a way that no one can be
+relying on it on openrisc fix the code to just do the right thing.
+
+Fixes: 769a8a96229e ("OpenRISC: Traps")
+Cc: Jonas Bonn <jonas@southpole.se>
+Cc: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
+Cc: Stafford Horne <shorne@gmail.com>
+Cc: Arnd Bergmann <arnd@arndb.de>
+Cc: openrisc@lists.librecores.org
+Acked-by: Stafford Horne <shorne@gmail.com>
+Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/openrisc/kernel/traps.c |   10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/arch/openrisc/kernel/traps.c
++++ b/arch/openrisc/kernel/traps.c
+@@ -302,12 +302,12 @@ asmlinkage void do_unaligned_access(stru
+       siginfo_t info;
+       if (user_mode(regs)) {
+-              /* Send a SIGSEGV */
+-              info.si_signo = SIGSEGV;
++              /* Send a SIGBUS */
++              info.si_signo = SIGBUS;
+               info.si_errno = 0;
+-              /* info.si_code has been set above */
+-              info.si_addr = (void *)address;
+-              force_sig_info(SIGSEGV, &info, current);
++              info.si_code = BUS_ADRALN;
++              info.si_addr = (void __user *)address;
++              force_sig_info(SIGBUS, &info, current);
+       } else {
+               printk("KERNEL: Unaligned Access 0x%.8lx\n", address);
+               show_registers(regs);
diff --git a/queue-3.18/signal-sh-ensure-si_signo-is-initialized-in-do_divide_error.patch b/queue-3.18/signal-sh-ensure-si_signo-is-initialized-in-do_divide_error.patch
new file mode 100644 (file)
index 0000000..580dcfc
--- /dev/null
@@ -0,0 +1,35 @@
+From 0e88bb002a9b2ee8cc3cc9478ce2dc126f849696 Mon Sep 17 00:00:00 2001
+From: "Eric W. Biederman" <ebiederm@xmission.com>
+Date: Mon, 24 Jul 2017 17:30:30 -0500
+Subject: signal/sh: Ensure si_signo is initialized in do_divide_error
+
+From: Eric W. Biederman <ebiederm@xmission.com>
+
+commit 0e88bb002a9b2ee8cc3cc9478ce2dc126f849696 upstream.
+
+Set si_signo.
+
+Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
+Cc: Rich Felker <dalias@libc.org>
+Cc: Paul Mundt <lethal@linux-sh.org>
+Cc: linux-sh@vger.kernel.org
+Fixes: 0983b31849bb ("sh: Wire up division and address error exceptions on SH-2A.")
+Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/sh/kernel/traps_32.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/arch/sh/kernel/traps_32.c
++++ b/arch/sh/kernel/traps_32.c
+@@ -607,7 +607,8 @@ asmlinkage void do_divide_error(unsigned
+               break;
+       }
+-      force_sig_info(SIGFPE, &info, current);
++      info.si_signo = SIGFPE;
++      force_sig_info(info.si_signo, &info, current);
+ }
+ #endif
diff --git a/queue-3.18/xtensa-fix-futex_atomic_cmpxchg_inatomic.patch b/queue-3.18/xtensa-fix-futex_atomic_cmpxchg_inatomic.patch
new file mode 100644 (file)
index 0000000..d7ad819
--- /dev/null
@@ -0,0 +1,70 @@
+From ca47480921587ae30417dd234a9f79af188e3666 Mon Sep 17 00:00:00 2001
+From: Max Filippov <jcmvbkbc@gmail.com>
+Date: Fri, 5 Jan 2018 14:27:58 -0800
+Subject: xtensa: fix futex_atomic_cmpxchg_inatomic
+
+From: Max Filippov <jcmvbkbc@gmail.com>
+
+commit ca47480921587ae30417dd234a9f79af188e3666 upstream.
+
+Return 0 if the operation was successful, not the userspace memory
+value. Check that userspace value equals passed oldval, not itself.
+Don't update *uval if the value wasn't read from userspace memory.
+
+This fixes process hang due to infinite loop in futex_lock_pi.
+It also fixes a bunch of glibc tests nptl/tst-mutexpi*.
+
+Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/xtensa/include/asm/futex.h |   23 ++++++++++-------------
+ 1 file changed, 10 insertions(+), 13 deletions(-)
+
+--- a/arch/xtensa/include/asm/futex.h
++++ b/arch/xtensa/include/asm/futex.h
+@@ -109,7 +109,6 @@ futex_atomic_cmpxchg_inatomic(u32 *uval,
+                             u32 oldval, u32 newval)
+ {
+       int ret = 0;
+-      u32 prev;
+       if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32)))
+               return -EFAULT;
+@@ -120,26 +119,24 @@ futex_atomic_cmpxchg_inatomic(u32 *uval,
+       __asm__ __volatile__ (
+       "       # futex_atomic_cmpxchg_inatomic\n"
+-      "1:     l32i    %1, %3, 0\n"
+-      "       mov     %0, %5\n"
+-      "       wsr     %1, scompare1\n"
+-      "2:     s32c1i  %0, %3, 0\n"
+-      "3:\n"
++      "       wsr     %5, scompare1\n"
++      "1:     s32c1i  %1, %4, 0\n"
++      "       s32i    %1, %6, 0\n"
++      "2:\n"
+       "       .section .fixup,\"ax\"\n"
+       "       .align 4\n"
+-      "4:     .long   3b\n"
+-      "5:     l32r    %1, 4b\n"
+-      "       movi    %0, %6\n"
++      "3:     .long   2b\n"
++      "4:     l32r    %1, 3b\n"
++      "       movi    %0, %7\n"
+       "       jx      %1\n"
+       "       .previous\n"
+       "       .section __ex_table,\"a\"\n"
+-      "       .long 1b,5b,2b,5b\n"
++      "       .long 1b,4b\n"
+       "       .previous\n"
+-      : "+r" (ret), "=&r" (prev), "+m" (*uaddr)
+-      : "r" (uaddr), "r" (oldval), "r" (newval), "I" (-EFAULT)
++      : "+r" (ret), "+r" (newval), "+m" (*uaddr), "+m" (*uval)
++      : "r" (uaddr), "r" (oldval), "r" (uval), "I" (-EFAULT)
+       : "memory");
+-      *uval = prev;
+       return ret;
+ }