All of lore.kernel.org
 help / color / mirror / Atom feed
* [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume
@ 2018-03-01 15:22 Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] more bio_map_user_iov() leak fixes Sasha Levin
                   ` (516 more replies)
  0 siblings, 517 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Leif Liddy, Marcel Holtmann, Sasha Levin

From: Leif Liddy <leif.linux@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fd865802c66bc451dc515ed89360f84376ce1a56 ]

There's been numerous reported instances where BTUSB_QCA_ROME
bluetooth controllers stop functioning upon resume from suspend. These
devices seem to be losing power during suspend. Patch will detect a status
change on resume and perform a reset.

Signed-off-by: Leif Liddy <leif.linux@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/bluetooth/btusb.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 32f5b87fe93c..b17bd3fc74cb 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -3207,6 +3207,12 @@ static int btusb_probe(struct usb_interface *intf,
 	if (id->driver_info & BTUSB_QCA_ROME) {
 		data->setup_on_usb = btusb_setup_qca;
 		hdev->set_bdaddr = btusb_set_bdaddr_ath3012;
+
+		/* QCA Rome devices lose their updated firmware over suspend,
+		 * but the USB hub doesn't notice any status change.
+		 * Explicitly request a device reset on resume.
+		 */
+		set_bit(BTUSB_RESET_RESUME, &data->flags);
 	}
 
 	if (id->driver_info & BTUSB_REALTEK)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] arm: KVM: Fix VTTBR_BADDR_MASK BUG_ON off-by-one
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] more bio_map_user_iov() leak fixes Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] arm64: Initialise high_memory global variable earlier Sasha Levin
                   ` (514 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Marc Zyngier, Christoffer Dall, Sasha Levin

From: Marc Zyngier <marc.zyngier@arm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5553b142be11e794ebc0805950b2e8313f93d718 ]

VTTBR_BADDR_MASK is used to sanity check the size and alignment of the
VTTBR address. It seems to currently be off by one, thereby only
allowing up to 39-bit addresses (instead of 40-bit) and also
insufficiently checking the alignment. This patch fixes it.

This patch is the 32bit pendent of Kristina's arm64 fix, and
she deserves the actual kudos for pinpointing that one.

Fixes: f7ed45be3ba52 ("KVM: ARM: World-switch implementation")
Cc: <stable@vger.kernel.org> # 3.9
Reported-by: Kristina Martsenko <kristina.martsenko@arm.com>
Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/include/asm/kvm_arm.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/arch/arm/include/asm/kvm_arm.h b/arch/arm/include/asm/kvm_arm.h
index aacd6668d1a0..d43122f0993d 100644
--- a/arch/arm/include/asm/kvm_arm.h
+++ b/arch/arm/include/asm/kvm_arm.h
@@ -161,8 +161,7 @@
 #else
 #define VTTBR_X		(5 - KVM_T0SZ)
 #endif
-#define VTTBR_BADDR_SHIFT (VTTBR_X - 1)
-#define VTTBR_BADDR_MASK  (((1LLU << (40 - VTTBR_X)) - 1) << VTTBR_BADDR_SHIFT)
+#define VTTBR_BADDR_MASK  (((1LLU << (40 - VTTBR_X)) - 1) << VTTBR_X)
 #define VTTBR_VMID_SHIFT  (48LLU)
 #define VTTBR_VMID_MASK	  (0xffLLU << VTTBR_VMID_SHIFT)
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] more bio_map_user_iov() leak fixes
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] arm: KVM: Fix VTTBR_BADDR_MASK BUG_ON off-by-one Sasha Levin
                   ` (515 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Al Viro, Sasha Levin

From: Al Viro <viro@zeniv.linux.org.uk>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 2b04e8f6bbb196cab4b232af0f8d48ff2c7a8058 ]

we need to take care of failure exit as well - pages already
in bio should be dropped by analogue of bio_unmap_pages(),
since their refcounts had been bumped only once per reference
in bio.

Cc: stable@vger.kernel.org
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 block/bio.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/block/bio.c b/block/bio.c
index d9cf77c6a847..f90b2abe2fa7 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -1290,6 +1290,7 @@ struct bio *bio_map_user_iov(struct request_queue *q,
 	int ret, offset;
 	struct iov_iter i;
 	struct iovec iov;
+	struct bio_vec *bvec;
 
 	iov_for_each(iov, i, *iter) {
 		unsigned long uaddr = (unsigned long) iov.iov_base;
@@ -1334,7 +1335,12 @@ struct bio *bio_map_user_iov(struct request_queue *q,
 		ret = get_user_pages_fast(uaddr, local_nr_pages,
 				(iter->type & WRITE) != WRITE,
 				&pages[cur_page]);
-		if (ret < local_nr_pages) {
+		if (unlikely(ret < local_nr_pages)) {
+			for (j = cur_page; j < page_limit; j++) {
+				if (!pages[j])
+					break;
+				put_page(pages[j]);
+			}
 			ret = -EFAULT;
 			goto out_unmap;
 		}
@@ -1396,10 +1402,8 @@ struct bio *bio_map_user_iov(struct request_queue *q,
 	return bio;
 
  out_unmap:
-	for (j = 0; j < nr_pages; j++) {
-		if (!pages[j])
-			break;
-		page_cache_release(pages[j]);
+	bio_for_each_segment_all(bvec, bio, j) {
+		put_page(bvec->bv_page);
 	}
  out:
 	kfree(pages);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] arm64: Initialise high_memory global variable earlier
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] more bio_map_user_iov() leak fixes Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] arm: KVM: Fix VTTBR_BADDR_MASK BUG_ON off-by-one Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/mm: Fix INVPCID asm constraint Sasha Levin
                   ` (513 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Steve Capper, Will Deacon, Sasha Levin

From: Steve Capper <steve.capper@arm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f24e5834a2c3f6c5f814a417f858226f0a010ade ]

The high_memory global variable is used by
cma_declare_contiguous(.) before it is defined.

We don't notice this as we compute __pa(high_memory - 1), and it looks
like we're processing a VA from the direct linear map.

This problem becomes apparent when we flip the kernel virtual address
space and the linear map is moved to the bottom of the kernel VA space.

This patch moves the initialisation of high_memory before it used.

Cc: <stable@vger.kernel.org>
Fixes: f7426b983a6a ("mm: cma: adjust address limit to avoid hitting low/high memory boundary")
Signed-off-by: Steve Capper <steve.capper@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm64/mm/init.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index ae8f940152aa..b8ed781807ef 100644
--- a/arch/arm64/mm/init.c
+++ b/arch/arm64/mm/init.c
@@ -177,6 +177,7 @@ void __init arm64_memblock_init(void)
 		arm64_dma_phys_limit = max_zone_dma_phys();
 	else
 		arm64_dma_phys_limit = PHYS_MASK + 1;
+	high_memory = __va(memblock_end_of_DRAM() - 1) + 1;
 	dma_contiguous_reserve(arm64_dma_phys_limit);
 
 	memblock_allow_resize();
@@ -201,7 +202,6 @@ void __init bootmem_init(void)
 	sparse_init();
 	zone_sizes_init(min, max);
 
-	high_memory = __va((max << PAGE_SHIFT) - 1) + 1;
 	max_pfn = max_low_pfn = max;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/mm: Fix INVPCID asm constraint
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (2 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] arm64: Initialise high_memory global variable earlier Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/mm: Add INVPCID helpers Sasha Levin
                   ` (512 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Borislav Petkov, Ingo Molnar, Sasha Levin

From: Borislav Petkov <bp@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e2c7698cd61f11d4077fdb28148b2d31b82ac848 ]

So we want to specify the dependency on both @pcid and @addr so that the
compiler doesn't reorder accesses to them *before* the TLB flush. But
for that to work, we need to express this properly in the inline asm and
deref the whole desc array, not the pointer to it. See clwb() for an
example.

This fixes the build error on 32-bit:

  arch/x86/include/asm/tlbflush.h: In function ‘__invpcid’:
  arch/x86/include/asm/tlbflush.h:26:18: error: memory input 0 is not directly addressable

which gcc4.7 caught but 5.x didn't. Which is strange. :-\

Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Michael Matz <matz@suse.de>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: linux-mm@kvack.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/tlbflush.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
index 995937999e1f..ed2317f19ec7 100644
--- a/arch/x86/include/asm/tlbflush.h
+++ b/arch/x86/include/asm/tlbflush.h
@@ -10,7 +10,7 @@
 static inline void __invpcid(unsigned long pcid, unsigned long addr,
 			     unsigned long type)
 {
-	u64 desc[2] = { pcid, addr };
+	struct { u64 d[2]; } desc = { { pcid, addr } };
 
 	/*
 	 * The memory clobber is because the whole point is to invalidate
@@ -22,7 +22,7 @@ static inline void __invpcid(unsigned long pcid, unsigned long addr,
 	 * invpcid (%rcx), %rax in long mode.
 	 */
 	asm volatile (".byte 0x66, 0x0f, 0x38, 0x82, 0x01"
-		      : : "m" (desc), "a" (type), "c" (desc) : "memory");
+		      : : "m" (desc), "a" (type), "c" (&desc) : "memory");
 }
 
 #define INVPCID_TYPE_INDIV_ADDR		0
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/mm: Add INVPCID helpers
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (3 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/mm: Fix INVPCID asm constraint Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/mm: Add a 'noinvpcid' boot option to turn off INVPCID Sasha Levin
                   ` (511 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 060a402a1ddb551455ee410de2eadd3349f2801b ]

This adds helpers for each of the four currently-specified INVPCID
modes.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Reviewed-by: Borislav Petkov <bp@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/8a62b23ad686888cee01da134c91409e22064db9.1454096309.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/tlbflush.h | 48 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
index 7e459b7ee708..995937999e1f 100644
--- a/arch/x86/include/asm/tlbflush.h
+++ b/arch/x86/include/asm/tlbflush.h
@@ -7,6 +7,54 @@
 #include <asm/processor.h>
 #include <asm/special_insns.h>
 
+static inline void __invpcid(unsigned long pcid, unsigned long addr,
+			     unsigned long type)
+{
+	u64 desc[2] = { pcid, addr };
+
+	/*
+	 * The memory clobber is because the whole point is to invalidate
+	 * stale TLB entries and, especially if we're flushing global
+	 * mappings, we don't want the compiler to reorder any subsequent
+	 * memory accesses before the TLB flush.
+	 *
+	 * The hex opcode is invpcid (%ecx), %eax in 32-bit mode and
+	 * invpcid (%rcx), %rax in long mode.
+	 */
+	asm volatile (".byte 0x66, 0x0f, 0x38, 0x82, 0x01"
+		      : : "m" (desc), "a" (type), "c" (desc) : "memory");
+}
+
+#define INVPCID_TYPE_INDIV_ADDR		0
+#define INVPCID_TYPE_SINGLE_CTXT	1
+#define INVPCID_TYPE_ALL_INCL_GLOBAL	2
+#define INVPCID_TYPE_ALL_NON_GLOBAL	3
+
+/* Flush all mappings for a given pcid and addr, not including globals. */
+static inline void invpcid_flush_one(unsigned long pcid,
+				     unsigned long addr)
+{
+	__invpcid(pcid, addr, INVPCID_TYPE_INDIV_ADDR);
+}
+
+/* Flush all mappings for a given PCID, not including globals. */
+static inline void invpcid_flush_single_context(unsigned long pcid)
+{
+	__invpcid(pcid, 0, INVPCID_TYPE_SINGLE_CTXT);
+}
+
+/* Flush all mappings, including globals, for all PCIDs. */
+static inline void invpcid_flush_all(void)
+{
+	__invpcid(0, 0, INVPCID_TYPE_ALL_INCL_GLOBAL);
+}
+
+/* Flush all mappings for all PCIDs except globals. */
+static inline void invpcid_flush_all_nonglobals(void)
+{
+	__invpcid(0, 0, INVPCID_TYPE_ALL_NON_GLOBAL);
+}
+
 #ifdef CONFIG_PARAVIRT
 #include <asm/paravirt.h>
 #else
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/mm: If INVPCID is available, use it to flush global mappings
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (5 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/mm: Add a 'noinvpcid' boot option to turn off INVPCID Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] mm/mmu_context, sched/core: Fix mmu_context.h assumption Sasha Levin
                   ` (509 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d8bced79af1db6734f66b42064cc773cada2ce99 ]

On my Skylake laptop, INVPCID function 2 (flush absolutely
everything) takes about 376ns, whereas saving flags, twiddling
CR4.PGE to flush global mappings, and restoring flags takes about
539ns.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Reviewed-by: Borislav Petkov <bp@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/ed0ef62581c0ea9c99b9bf6df726015e96d44743.1454096309.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/tlbflush.h | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
index ed2317f19ec7..433eeaafe498 100644
--- a/arch/x86/include/asm/tlbflush.h
+++ b/arch/x86/include/asm/tlbflush.h
@@ -152,6 +152,15 @@ static inline void __native_flush_tlb_global(void)
 {
 	unsigned long flags;
 
+	if (static_cpu_has(X86_FEATURE_INVPCID)) {
+		/*
+		 * Using INVPCID is considerably faster than a pair of writes
+		 * to CR4 sandwiched inside an IRQ flag save/restore.
+		 */
+		invpcid_flush_all();
+		return;
+	}
+
 	/*
 	 * Read-modify-write to CR4 - protect it from preemption and
 	 * from interrupts. (Use the raw variant because this code can
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/mm: Add a 'noinvpcid' boot option to turn off INVPCID
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (4 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/mm: Add INVPCID helpers Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/mm: If INVPCID is available, use it to flush global mappings Sasha Levin
                   ` (510 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d12a72b844a49d4162f24cefdab30bed3f86730e ]

This adds a chicken bit to turn off INVPCID in case something goes
wrong.  It's an early_param() because we do TLB flushes before we
parse __setup() parameters.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Reviewed-by: Borislav Petkov <bp@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/f586317ed1bc2b87aee652267e515b90051af385.1454096309.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 Documentation/kernel-parameters.txt |  2 ++
 arch/x86/kernel/cpu/common.c        | 16 ++++++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 08dc303d0d47..ceaab09a279e 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -2435,6 +2435,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
 
 	nointroute	[IA-64]
 
+	noinvpcid	[X86] Disable the INVPCID cpu feature.
+
 	nojitter	[IA-64] Disables jitter checking for ITC timers.
 
 	no-kvmclock	[X86,KVM] Disable paravirtualized KVM clock driver
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index 5732326ec126..90ef802d9d90 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -172,6 +172,22 @@ static int __init x86_xsaves_setup(char *s)
 }
 __setup("noxsaves", x86_xsaves_setup);
 
+static int __init x86_noinvpcid_setup(char *s)
+{
+	/* noinvpcid doesn't accept parameters */
+	if (s)
+		return -EINVAL;
+
+	/* do not emit a message if the feature is not present */
+	if (!boot_cpu_has(X86_FEATURE_INVPCID))
+		return 0;
+
+	setup_clear_cpu_cap(X86_FEATURE_INVPCID);
+	pr_info("noinvpcid: INVPCID feature disabled\n");
+	return 0;
+}
+early_param("noinvpcid", x86_noinvpcid_setup);
+
 #ifdef CONFIG_X86_32
 static int cachesize_override = -1;
 static int disable_x86_serial_nr = 1;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] sched/core: Add switch_mm_irqs_off() and use it in the scheduler
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (7 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] mm/mmu_context, sched/core: Fix mmu_context.h assumption Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] ARM: Hide finish_arch_post_lock_switch() from modules Sasha Levin
                   ` (507 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f98db6013c557c216da5038d9c52045be55cd039 ]

By default, this is the same thing as switch_mm().

x86 will override it as an optimization.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Reviewed-by: Borislav Petkov <bp@suse.de>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/df401df47bdd6be3e389c6f1e3f5310d70e81b2c.1461688545.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/linux/mmu_context.h | 7 +++++++
 kernel/sched/core.c         | 6 +++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/include/linux/mmu_context.h b/include/linux/mmu_context.h
index 70fffeba7495..a4441784503b 100644
--- a/include/linux/mmu_context.h
+++ b/include/linux/mmu_context.h
@@ -1,9 +1,16 @@
 #ifndef _LINUX_MMU_CONTEXT_H
 #define _LINUX_MMU_CONTEXT_H
 
+#include <asm/mmu_context.h>
+
 struct mm_struct;
 
 void use_mm(struct mm_struct *mm);
 void unuse_mm(struct mm_struct *mm);
 
+/* Architectures that care about IRQ state in switch_mm can override this. */
+#ifndef switch_mm_irqs_off
+# define switch_mm_irqs_off switch_mm
+#endif
+
 #endif
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 8fbedeb5553f..d253618d09c6 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -32,7 +32,7 @@
 #include <linux/init.h>
 #include <linux/uaccess.h>
 #include <linux/highmem.h>
-#include <asm/mmu_context.h>
+#include <linux/mmu_context.h>
 #include <linux/interrupt.h>
 #include <linux/capability.h>
 #include <linux/completion.h>
@@ -2339,7 +2339,7 @@ context_switch(struct rq *rq, struct task_struct *prev,
 		atomic_inc(&oldmm->mm_count);
 		enter_lazy_tlb(oldmm, next);
 	} else
-		switch_mm(oldmm, mm, next);
+		switch_mm_irqs_off(oldmm, mm, next);
 
 	if (!prev->mm) {
 		prev->active_mm = NULL;
@@ -4979,7 +4979,7 @@ void idle_task_exit(void)
 	BUG_ON(cpu_online(smp_processor_id()));
 
 	if (mm != &init_mm) {
-		switch_mm(mm, &init_mm, current);
+		switch_mm_irqs_off(mm, &init_mm, current);
 		finish_arch_post_lock_switch();
 	}
 	mmdrop(mm);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mm/mmu_context, sched/core: Fix mmu_context.h assumption
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (6 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/mm: If INVPCID is available, use it to flush global mappings Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] sched/core: Add switch_mm_irqs_off() and use it in the scheduler Sasha Levin
                   ` (508 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Ingo Molnar, Sasha Levin

From: Ingo Molnar <mingo@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8efd755ac2fe262d4c8d5c9bbe054bb67dae93da ]

Some architectures (such as Alpha) rely on include/linux/sched.h definitions
in their mmu_context.h files.

So include sched.h before mmu_context.h.

Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 mm/mmu_context.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/mmu_context.c b/mm/mmu_context.c
index f802c2d216a7..6f4d27c5bb32 100644
--- a/mm/mmu_context.c
+++ b/mm/mmu_context.c
@@ -4,9 +4,9 @@
  */
 
 #include <linux/mm.h>
+#include <linux/sched.h>
 #include <linux/mmu_context.h>
 #include <linux/export.h>
-#include <linux/sched.h>
 
 #include <asm/mmu_context.h>
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ARM: Hide finish_arch_post_lock_switch() from modules
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (8 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] sched/core: Add switch_mm_irqs_off() and use it in the scheduler Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/mm: Build arch/x86/mm/tlb.c even on !SMP Sasha Levin
                   ` (506 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Steven Rostedt, Arnd Bergmann, Ingo Molnar, Sasha Levin

From: Steven Rostedt <rostedt@goodmis.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ef0491ea17f8019821c7e9c8e801184ecf17f85a ]

The introduction of switch_mm_irqs_off() brought back an old bug
regarding the use of preempt_enable_no_resched:

As part of:

  62b94a08da1b ("sched/preempt: Take away preempt_enable_no_resched() from modules")

the definition of preempt_enable_no_resched() is only available in
built-in code, not in loadable modules, so we can't generally use
it from header files.

However, the ARM version of finish_arch_post_lock_switch()
calls preempt_enable_no_resched() and is defined as a static
inline function in asm/mmu_context.h. This in turn means we cannot
include asm/mmu_context.h from modules.

With today's tip tree, asm/mmu_context.h gets included from
linux/mmu_context.h, which is normally the exact pattern one would
expect, but unfortunately, linux/mmu_context.h can be included from
the vhost driver that is a loadable module, now causing this compile
time error with modular configs:

  In file included from ../include/linux/mmu_context.h:4:0,
                   from ../drivers/vhost/vhost.c:18:
  ../arch/arm/include/asm/mmu_context.h: In function 'finish_arch_post_lock_switch':
  ../arch/arm/include/asm/mmu_context.h:88:3: error: implicit declaration of function 'preempt_enable_no_resched' [-Werror=implicit-function-declaration]
     preempt_enable_no_resched();

Andy already tried to fix the bug by including linux/preempt.h
from asm/mmu_context.h, but that didn't help. Arnd suggested reordering
the header files, which wasn't popular, so let's use this
workaround instead:

The finish_arch_post_lock_switch() definition is now also hidden
inside of #ifdef MODULE, so we don't see anything referencing
preempt_enable_no_resched() from a header file. I've built a
few hundred randconfig kernels with this, and did not see any
new problems.

Tested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Russell King - ARM Linux <linux@armlinux.org.uk>
Cc: Stephane Eranian <eranian@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Vince Weaver <vincent.weaver@maine.edu>
Cc: linux-arm-kernel@lists.infradead.org
Fixes: f98db6013c55 ("sched/core: Add switch_mm_irqs_off() and use it in the scheduler")
Link: http://lkml.kernel.org/r/1463146234-161304-1-git-send-email-arnd@arndb.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/include/asm/mmu_context.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm/include/asm/mmu_context.h b/arch/arm/include/asm/mmu_context.h
index 9b32f76bb0dd..10f662498eb7 100644
--- a/arch/arm/include/asm/mmu_context.h
+++ b/arch/arm/include/asm/mmu_context.h
@@ -61,6 +61,7 @@ static inline void check_and_switch_context(struct mm_struct *mm,
 		cpu_switch_mm(mm->pgd, mm);
 }
 
+#ifndef MODULE
 #define finish_arch_post_lock_switch \
 	finish_arch_post_lock_switch
 static inline void finish_arch_post_lock_switch(void)
@@ -82,6 +83,7 @@ static inline void finish_arch_post_lock_switch(void)
 		preempt_enable_no_resched();
 	}
 }
+#endif /* !MODULE */
 
 #endif	/* CONFIG_MMU */
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/mm: Build arch/x86/mm/tlb.c even on !SMP
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (9 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] ARM: Hide finish_arch_post_lock_switch() from modules Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] sched/core: Idle_task_exit() shouldn't use switch_mm_irqs_off() Sasha Levin
                   ` (505 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e1074888c326038340a1ada9129d679e661f2ea6 ]

Currently all of the functions that live in tlb.c are inlined on
!SMP builds.  One can debate whether this is a good idea (in many
respects the code in tlb.c is better than the inlined UP code).

Regardless, I want to add code that needs to be built on UP and SMP
kernels and relates to tlb flushing, so arrange for tlb.c to be
compiled unconditionally.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Reviewed-by: Borislav Petkov <bp@suse.de>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/f0d778f0d828fc46e5d1946bca80f0aaf9abf032.1461688545.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/mm/Makefile | 3 +--
 arch/x86/mm/tlb.c    | 4 ++++
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile
index a482d105172b..d893640d5c68 100644
--- a/arch/x86/mm/Makefile
+++ b/arch/x86/mm/Makefile
@@ -1,5 +1,5 @@
 obj-y	:=  init.o init_$(BITS).o fault.o ioremap.o extable.o pageattr.o mmap.o \
-	    pat.o pgtable.o physaddr.o gup.o setup_nx.o
+	    pat.o pgtable.o physaddr.o gup.o setup_nx.o tlb.o
 
 # Make sure __phys_addr has no stackprotector
 nostackp := $(call cc-option, -fno-stack-protector)
@@ -9,7 +9,6 @@ CFLAGS_setup_nx.o		:= $(nostackp)
 CFLAGS_fault.o := -I$(src)/../include/asm/trace
 
 obj-$(CONFIG_X86_PAT)		+= pat_rbtree.o
-obj-$(CONFIG_SMP)		+= tlb.o
 
 obj-$(CONFIG_X86_32)		+= pgtable_32.o iomap_32.o
 
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
index 061e0114005e..a1aa5f59e3ad 100644
--- a/arch/x86/mm/tlb.c
+++ b/arch/x86/mm/tlb.c
@@ -28,6 +28,8 @@
  *	Implement flush IPI by CALL_FUNCTION_VECTOR, Alex Shi
  */
 
+#ifdef CONFIG_SMP
+
 struct flush_tlb_info {
 	struct mm_struct *flush_mm;
 	unsigned long flush_start;
@@ -346,3 +348,5 @@ static int __init create_tlb_single_page_flush_ceiling(void)
 	return 0;
 }
 late_initcall(create_tlb_single_page_flush_ceiling);
+
+#endif /* CONFIG_SMP */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] sched/core: Idle_task_exit() shouldn't use switch_mm_irqs_off()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (10 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/mm: Build arch/x86/mm/tlb.c even on !SMP Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/irq: Do not substract irq_tlb_count from irq_call_count Sasha Levin
                   ` (504 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 252d2a4117bc181b287eeddf848863788da733ae ]

idle_task_exit() can be called with IRQs on x86 on and therefore
should use switch_mm(), not switch_mm_irqs_off().

This doesn't seem to cause any problems right now, but it will
confuse my upcoming TLB flush changes.  Nonetheless, I think it
should be backported because it's trivial.  There won't be any
meaningful performance impact because idle_task_exit() is only
used when offlining a CPU.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: stable@vger.kernel.org
Fixes: f98db6013c55 ("sched/core: Add switch_mm_irqs_off() and use it in the scheduler")
Link: http://lkml.kernel.org/r/ca3d1a9fa93a0b49f5a8ff729eda3640fb6abdf9.1497034141.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/sched/core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index d253618d09c6..9c905bd94ff0 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -4979,7 +4979,7 @@ void idle_task_exit(void)
 	BUG_ON(cpu_online(smp_processor_id()));
 
 	if (mm != &init_mm) {
-		switch_mm_irqs_off(mm, &init_mm, current);
+		switch_mm(mm, &init_mm, current);
 		finish_arch_post_lock_switch();
 	}
 	mmdrop(mm);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/irq: Do not substract irq_tlb_count from irq_call_count
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (11 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] sched/core: Idle_task_exit() shouldn't use switch_mm_irqs_off() Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] ALSA: hda - add support for docking station for HP 820 G2 Sasha Levin
                   ` (503 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Aaron Lu, Ingo Molnar, Sasha Levin

From: Aaron Lu <aaron.lu@intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 82ba4faca1bffad429f15c90c980ffd010366c25 ]

Since commit:

  52aec3308db8 ("x86/tlb: replace INVALIDATE_TLB_VECTOR by CALL_FUNCTION_VECTOR")

the TLB remote shootdown is done through call function vector. That
commit didn't take care of irq_tlb_count, which a later commit:

  fd0f5869724f ("x86: Distinguish TLB shootdown interrupts from other functions call interrupts")

... tried to fix.

The fix assumes every increase of irq_tlb_count has a corresponding
increase of irq_call_count. So the irq_call_count is always bigger than
irq_tlb_count and we could substract irq_tlb_count from irq_call_count.

Unfortunately this is not true for the smp_call_function_single() case.
The IPI is only sent if the target CPU's call_single_queue is empty when
adding a csd into it in generic_exec_single. That means if two threads
are both adding flush tlb csds to the same CPU's call_single_queue, only
one IPI is sent. In other words, the irq_call_count is incremented by 1
but irq_tlb_count is incremented by 2. Over time, irq_tlb_count will be
bigger than irq_call_count and the substract will produce a very large
irq_call_count value due to overflow.

Considering that:

  1) it's not worth to send more IPIs for the sake of accurate counting of
     irq_call_count in generic_exec_single();

  2) it's not easy to tell if the call function interrupt is for TLB
     shootdown in __smp_call_function_single_interrupt().

Not to exclude TLB shootdown from call function count seems to be the
simplest fix and this patch just does that.

This bug was found by LKP's cyclic performance regression tracking recently
with the vm-scalability test suite. I have bisected to commit:

  3dec0ba0be6a ("mm/rmap: share the i_mmap_rwsem")

This commit didn't do anything wrong but revealed the irq_call_count
problem. IIUC, the commit makes rwc->remap_one in rmap_walk_file
concurrent with multiple threads.  When remap_one is try_to_unmap_one(),
then multiple threads could queue flush TLB to the same CPU but only
one IPI will be sent.

Since the commit was added in Linux v3.19, the counting problem only
shows up from v3.19 onwards.

Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Cc: Alex Shi <alex.shi@linaro.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Huang Ying <ying.huang@intel.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tomoki Sekiyama <tomoki.sekiyama.qu@hitachi.com>
Link: http://lkml.kernel.org/r/20160811074430.GA18163@aaronlu.sh.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/hardirq.h | 4 ----
 arch/x86/kernel/irq.c          | 3 +--
 2 files changed, 1 insertion(+), 6 deletions(-)

diff --git a/arch/x86/include/asm/hardirq.h b/arch/x86/include/asm/hardirq.h
index 0f5fb6b6567e..ebaf64d0a785 100644
--- a/arch/x86/include/asm/hardirq.h
+++ b/arch/x86/include/asm/hardirq.h
@@ -21,10 +21,6 @@ typedef struct {
 #ifdef CONFIG_SMP
 	unsigned int irq_resched_count;
 	unsigned int irq_call_count;
-	/*
-	 * irq_tlb_count is double-counted in irq_call_count, so it must be
-	 * subtracted from irq_call_count when displaying irq_call_count
-	 */
 	unsigned int irq_tlb_count;
 #endif
 #ifdef CONFIG_X86_THERMAL_VECTOR
diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c
index e5952c225532..b6460c5a9cab 100644
--- a/arch/x86/kernel/irq.c
+++ b/arch/x86/kernel/irq.c
@@ -96,8 +96,7 @@ int arch_show_interrupts(struct seq_file *p, int prec)
 	seq_puts(p, "  Rescheduling interrupts\n");
 	seq_printf(p, "%*s: ", prec, "CAL");
 	for_each_online_cpu(j)
-		seq_printf(p, "%10u ", irq_stats(j)->irq_call_count -
-					irq_stats(j)->irq_tlb_count);
+		seq_printf(p, "%10u ", irq_stats(j)->irq_call_count);
 	seq_puts(p, "  Function call interrupts\n");
 	seq_printf(p, "%*s: ", prec, "TLB");
 	for_each_online_cpu(j)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: hda - add support for docking station for HP 820 G2
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (12 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/irq: Do not substract irq_tlb_count from irq_call_count Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] arm: kprobes: Align stack to 8-bytes in test code Sasha Levin
                   ` (502 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jaroslav Kysela, Takashi Iwai, Sasha Levin

From: Jaroslav Kysela <perex@perex.cz>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 04d5466a976b096364a39a63ac264c1b3a5f8fa1 ]

This tested patch adds missing initialization for Line-In/Out PINs for
the docking station for HP 820 G2.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/pci/hda/patch_realtek.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 75c4e14f4156..f246bd0426ee 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -4732,6 +4732,7 @@ enum {
 	ALC286_FIXUP_HP_GPIO_LED,
 	ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY,
 	ALC280_FIXUP_HP_DOCK_PINS,
+	ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED,
 	ALC280_FIXUP_HP_9480M,
 	ALC288_FIXUP_DELL_HEADSET_MODE,
 	ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
@@ -5270,6 +5271,16 @@ static const struct hda_fixup alc269_fixups[] = {
 		.chained = true,
 		.chain_id = ALC280_FIXUP_HP_GPIO4
 	},
+	[ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED] = {
+		.type = HDA_FIXUP_PINS,
+		.v.pins = (const struct hda_pintbl[]) {
+			{ 0x1b, 0x21011020 }, /* line-out */
+			{ 0x18, 0x2181103f }, /* line-in */
+			{ },
+		},
+		.chained = true,
+		.chain_id = ALC269_FIXUP_HP_GPIO_MIC1_LED
+	},
 	[ALC280_FIXUP_HP_9480M] = {
 		.type = HDA_FIXUP_FUNC,
 		.v.func = alc280_fixup_hp_9480m,
@@ -5522,7 +5533,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x103c, 0x2256, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
 	SND_PCI_QUIRK(0x103c, 0x2257, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
 	SND_PCI_QUIRK(0x103c, 0x2259, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
-	SND_PCI_QUIRK(0x103c, 0x225a, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
+	SND_PCI_QUIRK(0x103c, 0x225a, "HP", ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED),
 	SND_PCI_QUIRK(0x103c, 0x2260, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
 	SND_PCI_QUIRK(0x103c, 0x2263, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
 	SND_PCI_QUIRK(0x103c, 0x2264, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
@@ -5684,6 +5695,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
 	{.id = ALC269_FIXUP_HEADSET_MIC, .name = "headset-mic"},
 	{.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"},
 	{.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"},
+	{.id = ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED, .name = "hp-dock-gpio-mic1-led"},
 	{.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"},
 	{.id = ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, .name = "dell-headset-dock"},
 	{.id = ALC283_FIXUP_CHROME_BOOK, .name = "alc283-dac-wcaps"},
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] arm: kprobes: Fix the return address of multiple kretprobes
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (14 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] arm: kprobes: Align stack to 8-bytes in test code Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] cpuidle: Validate cpu_dev in cpuidle_add_sysfs() Sasha Levin
                   ` (500 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Masami Hiramatsu, Jon Medhurst, Sasha Levin

From: Masami Hiramatsu <mhiramat@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 06553175f585b52509c7df37d6f4a50aacb7b211 ]

This is arm port of commit 737480a0d525 ("kprobes/x86:
Fix the return address of multiple kretprobes").

Fix the return address of subsequent kretprobes when multiple
kretprobes are set on the same function.

For example:

  # cd /sys/kernel/debug/tracing
  # echo "r:event1 sys_symlink" > kprobe_events
  # echo "r:event2 sys_symlink" >> kprobe_events
  # echo 1 > events/kprobes/enable
  # ln -s /tmp/foo /tmp/bar

 (without this patch)

  # cat trace | grep -v ^#
              ln-82    [000] dn.2    68.446525: event1: (kretprobe_trampoline+0x0/0x18 <- SyS_symlink)
              ln-82    [000] dn.2    68.447831: event2: (ret_fast_syscall+0x0/0x1c <- SyS_symlink)

 (with this patch)

  # cat trace | grep -v ^#
              ln-81    [000] dn.1    39.463469: event1: (ret_fast_syscall+0x0/0x1c <- SyS_symlink)
              ln-81    [000] dn.1    39.464701: event2: (ret_fast_syscall+0x0/0x1c <- SyS_symlink)

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Cc: KUMANO Syuhei <kumano.prog@gmail.com>
Signed-off-by: Jon Medhurst <tixy@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/probes/kprobes/core.c | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/arch/arm/probes/kprobes/core.c b/arch/arm/probes/kprobes/core.c
index a4ec240ee7ba..3eb018fa1a1f 100644
--- a/arch/arm/probes/kprobes/core.c
+++ b/arch/arm/probes/kprobes/core.c
@@ -433,6 +433,7 @@ static __used __kprobes void *trampoline_handler(struct pt_regs *regs)
 	struct hlist_node *tmp;
 	unsigned long flags, orig_ret_address = 0;
 	unsigned long trampoline_address = (unsigned long)&kretprobe_trampoline;
+	kprobe_opcode_t *correct_ret_addr = NULL;
 
 	INIT_HLIST_HEAD(&empty_rp);
 	kretprobe_hash_lock(current, &head, &flags);
@@ -455,14 +456,34 @@ static __used __kprobes void *trampoline_handler(struct pt_regs *regs)
 			/* another task is sharing our hash bucket */
 			continue;
 
+		orig_ret_address = (unsigned long)ri->ret_addr;
+
+		if (orig_ret_address != trampoline_address)
+			/*
+			 * This is the real return address. Any other
+			 * instances associated with this task are for
+			 * other calls deeper on the call stack
+			 */
+			break;
+	}
+
+	kretprobe_assert(ri, orig_ret_address, trampoline_address);
+
+	correct_ret_addr = ri->ret_addr;
+	hlist_for_each_entry_safe(ri, tmp, head, hlist) {
+		if (ri->task != current)
+			/* another task is sharing our hash bucket */
+			continue;
+
+		orig_ret_address = (unsigned long)ri->ret_addr;
 		if (ri->rp && ri->rp->handler) {
 			__this_cpu_write(current_kprobe, &ri->rp->kp);
 			get_kprobe_ctlblk()->kprobe_status = KPROBE_HIT_ACTIVE;
+			ri->ret_addr = correct_ret_addr;
 			ri->rp->handler(ri, regs);
 			__this_cpu_write(current_kprobe, NULL);
 		}
 
-		orig_ret_address = (unsigned long)ri->ret_addr;
 		recycle_rp_inst(ri, &empty_rp);
 
 		if (orig_ret_address != trampoline_address)
@@ -474,7 +495,6 @@ static __used __kprobes void *trampoline_handler(struct pt_regs *regs)
 			break;
 	}
 
-	kretprobe_assert(ri, orig_ret_address, trampoline_address);
 	kretprobe_hash_unlock(current, &flags);
 
 	hlist_for_each_entry_safe(ri, tmp, &empty_rp, hlist) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] arm: kprobes: Align stack to 8-bytes in test code
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (13 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] ALSA: hda - add support for docking station for HP 820 G2 Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] arm: kprobes: Fix the return address of multiple kretprobes Sasha Levin
                   ` (501 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jon Medhurst, Sasha Levin

From: Jon Medhurst <tixy@linaro.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 974310d047f3c7788a51d10c8d255eebdb1fa857 ]

kprobes test cases need to have a stack that is aligned to an 8-byte
boundary because they call other functions (and the ARM ABI mandates
that alignment) and because test cases include 64-bit accesses to the
stack. Unfortunately, GCC doesn't ensure this alignment for inline
assembler and for the code in question seems to always misalign it by
pushing just the LR register onto the stack. We therefore need to
explicitly perform stack alignment at the start of each test case.

Without this fix, some test cases will generate alignment faults on
systems where alignment is enforced. Even if the kernel is configured to
handle these faults in software, triggering them is ugly. It also
exposes limitations in the fault handling code which doesn't cope with
writes to the stack. E.g. when handling this instruction

   strd r6, [sp, #-64]!

the fault handling code will write to a stack location below the SP
value at the point the fault occurred, which coincides with where the
exception handler has pushed the saved register context. This results in
corruption of those registers.

Signed-off-by: Jon Medhurst <tixy@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/probes/kprobes/test-core.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/arch/arm/probes/kprobes/test-core.c b/arch/arm/probes/kprobes/test-core.c
index 9775de22e2ff..a48354de1aa1 100644
--- a/arch/arm/probes/kprobes/test-core.c
+++ b/arch/arm/probes/kprobes/test-core.c
@@ -976,7 +976,10 @@ static void coverage_end(void)
 void __naked __kprobes_test_case_start(void)
 {
 	__asm__ __volatile__ (
-		"stmdb	sp!, {r4-r11}				\n\t"
+		"mov	r2, sp					\n\t"
+		"bic	r3, r2, #7				\n\t"
+		"mov	sp, r3					\n\t"
+		"stmdb	sp!, {r2-r11}				\n\t"
 		"sub	sp, sp, #"__stringify(TEST_MEMORY_SIZE)"\n\t"
 		"bic	r0, lr, #1  @ r0 = inline data		\n\t"
 		"mov	r1, sp					\n\t"
@@ -996,7 +999,8 @@ void __naked __kprobes_test_case_end_32(void)
 		"movne	pc, r0					\n\t"
 		"mov	r0, r4					\n\t"
 		"add	sp, sp, #"__stringify(TEST_MEMORY_SIZE)"\n\t"
-		"ldmia	sp!, {r4-r11}				\n\t"
+		"ldmia	sp!, {r2-r11}				\n\t"
+		"mov	sp, r2					\n\t"
 		"mov	pc, r0					\n\t"
 	);
 }
@@ -1012,7 +1016,8 @@ void __naked __kprobes_test_case_end_16(void)
 		"bxne	r0					\n\t"
 		"mov	r0, r4					\n\t"
 		"add	sp, sp, #"__stringify(TEST_MEMORY_SIZE)"\n\t"
-		"ldmia	sp!, {r4-r11}				\n\t"
+		"ldmia	sp!, {r2-r11}				\n\t"
+		"mov	sp, r2					\n\t"
 		"bx	r0					\n\t"
 	);
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] cpuidle: Validate cpu_dev in cpuidle_add_sysfs()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (15 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] arm: kprobes: Fix the return address of multiple kretprobes Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] r8152: fix the list rx_done may be used without initialization Sasha Levin
                   ` (499 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Vaidyanathan Srinivasan, Rafael J . Wysocki, Sasha Levin

From: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ad0a45fd9c14feebd000b6e84189d0edff265170 ]

If a given cpu is not in cpu_present and cpu hotplug
is disabled, arch can skip setting up the cpu_dev.

Arch cpuidle driver should pass correct cpu mask
for registration, but failing to do so by the driver
causes error to propagate and crash like this:

[   30.076045] Unable to handle kernel paging request for data at address 0x00000048
[   30.076100] Faulting instruction address: 0xc0000000007b2f30
cpu 0x4d: Vector: 300 (Data Access) at [c000003feb18b670]
    pc: c0000000007b2f30: kobject_get+0x20/0x70
    lr: c0000000007b3c94: kobject_add_internal+0x54/0x3f0
    sp: c000003feb18b8f0
   msr: 9000000000009033
   dar: 48
 dsisr: 40000000
  current = 0xc000003fd2ed8300
  paca    = 0xc00000000fbab500   softe: 0        irq_happened: 0x01
    pid   = 1, comm = swapper/0
Linux version 4.11.0-rc2-svaidy+ (sv@sagarika) (gcc version 6.2.0
20161005 (Ubuntu 6.2.0-5ubuntu12) ) #10 SMP Sun Mar 19 00:08:09 IST 2017
enter ? for help
[c000003feb18b960] c0000000007b3c94 kobject_add_internal+0x54/0x3f0
[c000003feb18b9f0] c0000000007b43a4 kobject_init_and_add+0x64/0xa0
[c000003feb18ba70] c000000000e284f4 cpuidle_add_sysfs+0xb4/0x130
[c000003feb18baf0] c000000000e26038 cpuidle_register_device+0x118/0x1c0
[c000003feb18bb30] c000000000e26c48 cpuidle_register+0x78/0x120
[c000003feb18bbc0] c00000000168fd9c powernv_processor_idle_init+0x110/0x1c4
[c000003feb18bc40] c00000000000cff8 do_one_initcall+0x68/0x1d0
[c000003feb18bd00] c0000000016242f4 kernel_init_freeable+0x280/0x360
[c000003feb18bdc0] c00000000000d864 kernel_init+0x24/0x160
[c000003feb18be30] c00000000000b4e8 ret_from_kernel_thread+0x5c/0x74

Validating cpu_dev fixes the crash and reports correct error message like:

[   30.163506] Failed to register cpuidle device for cpu136
[   30.173329] Registration of powernv driver failed.

Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
[ rjw: Comment massage ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/cpuidle/sysfs.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/cpuidle/sysfs.c b/drivers/cpuidle/sysfs.c
index 832a2c3f01ff..9e98a5fbbc1d 100644
--- a/drivers/cpuidle/sysfs.c
+++ b/drivers/cpuidle/sysfs.c
@@ -613,6 +613,18 @@ int cpuidle_add_sysfs(struct cpuidle_device *dev)
 	struct device *cpu_dev = get_cpu_device((unsigned long)dev->cpu);
 	int error;
 
+	/*
+	 * Return if cpu_device is not setup for this CPU.
+	 *
+	 * This could happen if the arch did not set up cpu_device
+	 * since this CPU is not in cpu_present mask and the
+	 * driver did not send a correct CPU mask during registration.
+	 * Without this check we would end up passing bogus
+	 * value for &cpu_dev->kobj in kobject_init_and_add()
+	 */
+	if (!cpu_dev)
+		return -ENODEV;
+
 	kdev = kzalloc(sizeof(*kdev), GFP_KERNEL);
 	if (!kdev)
 		return -ENOMEM;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] r8152: fix the list rx_done may be used without initialization
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (16 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] cpuidle: Validate cpu_dev in cpuidle_add_sysfs() Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] net: qmi_wwan: Add USB IDs for MDM6600 modem on Motorola Droid 4 Sasha Levin
                   ` (498 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: hayeswang, David S . Miller, Sasha Levin

From: hayeswang <hayeswang@realtek.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 98d068ab52b4b11d403995ed14154660797e7136 ]

The list rx_done would be initialized when the linking on occurs.
Therefore, if a napi is scheduled without any linking on before,
the following kernel panic would happen.

	BUG: unable to handle kernel NULL pointer dereference at 000000000000008
	IP: [<ffffffffc085efde>] r8152_poll+0xe1e/0x1210 [r8152]
	PGD 0
	Oops: 0002 [#1] SMP

Signed-off-by: Hayes Wang <hayeswang@realtek.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/usb/r8152.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index e387af61e0d3..c0fb8a051768 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -1263,6 +1263,7 @@ static int alloc_all_mem(struct r8152 *tp)
 	spin_lock_init(&tp->rx_lock);
 	spin_lock_init(&tp->tx_lock);
 	INIT_LIST_HEAD(&tp->tx_free);
+	INIT_LIST_HEAD(&tp->rx_done);
 	skb_queue_head_init(&tp->tx_queue);
 	skb_queue_head_init(&tp->rx_queue);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net: qmi_wwan: Add USB IDs for MDM6600 modem on Motorola Droid 4
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (17 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] r8152: fix the list rx_done may be used without initialization Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] crypto: deadlock between crypto_alg_sem/rtnl_mutex/genl_mutex Sasha Levin
                   ` (497 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Tony Lindgren, David S . Miller, Sasha Levin

From: Tony Lindgren <tony@atomide.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4071898bf0f4d79ff353db327af2a15123272548 ]

This gets qmicli working with the MDM6600 modem.

Cc: Bjørn Mork <bjorn@mork.no>
Reviewed-by: Sebastian Reichel <sre@kernel.org>
Tested-by: Sebastian Reichel <sre@kernel.org>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Acked-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/usb/qmi_wwan.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 6cf881ce4d4e..ca7f16ccbcd3 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -464,6 +464,10 @@ static const struct usb_device_id products[] = {
 		USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, USB_CLASS_VENDOR_SPEC, 0x01, 0x69),
 		.driver_info        = (unsigned long)&qmi_wwan_info,
 	},
+	{	/* Motorola Mapphone devices with MDM6600 */
+		USB_VENDOR_AND_INTERFACE_INFO(0x22b8, USB_CLASS_VENDOR_SPEC, 0xfb, 0xff),
+		.driver_info        = (unsigned long)&qmi_wwan_info,
+	},
 
 	/* 2. Combined interface devices matching on class+protocol */
 	{	/* Huawei E367 and possibly others in "Windows mode" */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] crypto: deadlock between crypto_alg_sem/rtnl_mutex/genl_mutex
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (18 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] net: qmi_wwan: Add USB IDs for MDM6600 modem on Motorola Droid 4 Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] usb: gadget: f_uvc: Sanity check wMaxPacketSize for SuperSpeed Sasha Levin
                   ` (496 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Herbert Xu, David S . Miller, Sasha Levin

From: Herbert Xu <herbert@gondor.apana.org.au>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8a0f5ccfb33b0b8b51de65b7b3bf342ba10b4fb6 ]

On Tue, Mar 14, 2017 at 10:44:10AM +0100, Dmitry Vyukov wrote:
>
> Yes, please.
> Disregarding some reports is not a good way long term.

Please try this patch.

---8<---
Subject: netlink: Annotate nlk cb_mutex by protocol

Currently all occurences of nlk->cb_mutex are annotated by lockdep
as a single class.  This causes a false lcokdep cycle involving
genl and crypto_user.

This patch fixes it by dividing cb_mutex into individual classes
based on the netlink protocol.  As genl and crypto_user do not
use the same netlink protocol this breaks the false dependency
loop.

Reported-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netlink/af_netlink.c | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index a5815be7c81c..8daf2e44595a 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -94,6 +94,44 @@ EXPORT_SYMBOL_GPL(nl_table);
 
 static DECLARE_WAIT_QUEUE_HEAD(nl_table_wait);
 
+static struct lock_class_key nlk_cb_mutex_keys[MAX_LINKS];
+
+static const char *const nlk_cb_mutex_key_strings[MAX_LINKS + 1] = {
+	"nlk_cb_mutex-ROUTE",
+	"nlk_cb_mutex-1",
+	"nlk_cb_mutex-USERSOCK",
+	"nlk_cb_mutex-FIREWALL",
+	"nlk_cb_mutex-SOCK_DIAG",
+	"nlk_cb_mutex-NFLOG",
+	"nlk_cb_mutex-XFRM",
+	"nlk_cb_mutex-SELINUX",
+	"nlk_cb_mutex-ISCSI",
+	"nlk_cb_mutex-AUDIT",
+	"nlk_cb_mutex-FIB_LOOKUP",
+	"nlk_cb_mutex-CONNECTOR",
+	"nlk_cb_mutex-NETFILTER",
+	"nlk_cb_mutex-IP6_FW",
+	"nlk_cb_mutex-DNRTMSG",
+	"nlk_cb_mutex-KOBJECT_UEVENT",
+	"nlk_cb_mutex-GENERIC",
+	"nlk_cb_mutex-17",
+	"nlk_cb_mutex-SCSITRANSPORT",
+	"nlk_cb_mutex-ECRYPTFS",
+	"nlk_cb_mutex-RDMA",
+	"nlk_cb_mutex-CRYPTO",
+	"nlk_cb_mutex-SMC",
+	"nlk_cb_mutex-23",
+	"nlk_cb_mutex-24",
+	"nlk_cb_mutex-25",
+	"nlk_cb_mutex-26",
+	"nlk_cb_mutex-27",
+	"nlk_cb_mutex-28",
+	"nlk_cb_mutex-29",
+	"nlk_cb_mutex-30",
+	"nlk_cb_mutex-31",
+	"nlk_cb_mutex-MAX_LINKS"
+};
+
 static int netlink_dump(struct sock *sk);
 static void netlink_skb_destructor(struct sk_buff *skb);
 
@@ -1177,6 +1215,9 @@ static int __netlink_create(struct net *net, struct socket *sock,
 	} else {
 		nlk->cb_mutex = &nlk->cb_def_mutex;
 		mutex_init(nlk->cb_mutex);
+		lockdep_set_class_and_name(nlk->cb_mutex,
+					   nlk_cb_mutex_keys + protocol,
+					   nlk_cb_mutex_key_strings[protocol]);
 	}
 	init_waitqueue_head(&nlk->wait);
 #ifdef CONFIG_NETLINK_MMAP
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: gadget: f_uvc: Sanity check wMaxPacketSize for SuperSpeed
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (19 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] crypto: deadlock between crypto_alg_sem/rtnl_mutex/genl_mutex Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] usb: gadget: udc: remove pointer dereference after free Sasha Levin
                   ` (495 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Roger Quadros, Felipe Balbi, Sasha Levin

From: Roger Quadros <rogerq@ti.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 16bb05d98c904a4f6c5ce7e2d992299f794acbf2 ]

As per USB3.0 Specification "Table 9-20. Standard Endpoint Descriptor",
for interrupt and isochronous endpoints, wMaxPacketSize must be set to
1024 if the endpoint defines bMaxBurst to be greater than zero.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/gadget/function/f_uvc.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/usb/gadget/function/f_uvc.c b/drivers/usb/gadget/function/f_uvc.c
index 7405ce32a690..0e704a857115 100644
--- a/drivers/usb/gadget/function/f_uvc.c
+++ b/drivers/usb/gadget/function/f_uvc.c
@@ -611,6 +611,14 @@ uvc_function_bind(struct usb_configuration *c, struct usb_function *f)
 	opts->streaming_maxpacket = clamp(opts->streaming_maxpacket, 1U, 3072U);
 	opts->streaming_maxburst = min(opts->streaming_maxburst, 15U);
 
+	/* For SS, wMaxPacketSize has to be 1024 if bMaxBurst is not 0 */
+	if (opts->streaming_maxburst &&
+	    (opts->streaming_maxpacket % 1024) != 0) {
+		opts->streaming_maxpacket = roundup(opts->streaming_maxpacket, 1024);
+		INFO(cdev, "overriding streaming_maxpacket to %d\n",
+		     opts->streaming_maxpacket);
+	}
+
 	/* Fill in the FS/HS/SS Video Streaming specific descriptors from the
 	 * module parameters.
 	 *
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: gadget: udc: remove pointer dereference after free
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (20 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] usb: gadget: f_uvc: Sanity check wMaxPacketSize for SuperSpeed Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] netfilter: nfnl_cthelper: fix runtime expectation policy updates Sasha Levin
                   ` (494 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Gustavo A. R. Silva, Felipe Balbi, Sasha Levin

From: "Gustavo A. R. Silva" <garsilva@embeddedor.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1f459262b0e1649a1e5ad12fa4c66eb76c2220ce ]

Remove pointer dereference after free.

Addresses-Coverity-ID: 1091173
Acked-by: Michal Nazarewicz <mina86@mina86.com>
Signed-off-by: Gustavo A. R. Silva <garsilva@embeddedor.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/gadget/udc/pch_udc.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/usb/gadget/udc/pch_udc.c b/drivers/usb/gadget/udc/pch_udc.c
index 613547f07828..2e04d6596ac6 100644
--- a/drivers/usb/gadget/udc/pch_udc.c
+++ b/drivers/usb/gadget/udc/pch_udc.c
@@ -1534,7 +1534,6 @@ static void pch_udc_free_dma_chain(struct pch_udc_dev *dev,
 		td = phys_to_virt(addr);
 		addr2 = (dma_addr_t)td->next;
 		pci_pool_free(dev->data_requests, td, addr);
-		td->next = 0x00;
 		addr = addr2;
 	}
 	req->chain_len = 1;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: nfnl_cthelper: fix runtime expectation policy updates
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (21 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] usb: gadget: udc: remove pointer dereference after free Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] netfilter: nfnl_cthelper: Fix memory leak Sasha Levin
                   ` (493 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Pablo Neira Ayuso, Sasha Levin

From: Pablo Neira Ayuso <pablo@netfilter.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 2c422257550f123049552b39f7af6e3428a60f43 ]

We only allow runtime updates of expectation policies for timeout and
maximum number of expectations, otherwise reject the update.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Acked-by: Liping Zhang <zlpnobody@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netfilter/nfnetlink_cthelper.c | 86 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 84 insertions(+), 2 deletions(-)

diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c
index 6d10002d23f8..3e697de2d154 100644
--- a/net/netfilter/nfnetlink_cthelper.c
+++ b/net/netfilter/nfnetlink_cthelper.c
@@ -255,6 +255,89 @@ nfnl_cthelper_create(const struct nlattr * const tb[],
 	return ret;
 }
 
+static int
+nfnl_cthelper_update_policy_one(const struct nf_conntrack_expect_policy *policy,
+				struct nf_conntrack_expect_policy *new_policy,
+				const struct nlattr *attr)
+{
+	struct nlattr *tb[NFCTH_POLICY_MAX + 1];
+	int err;
+
+	err = nla_parse_nested(tb, NFCTH_POLICY_MAX, attr,
+			       nfnl_cthelper_expect_pol);
+	if (err < 0)
+		return err;
+
+	if (!tb[NFCTH_POLICY_NAME] ||
+	    !tb[NFCTH_POLICY_EXPECT_MAX] ||
+	    !tb[NFCTH_POLICY_EXPECT_TIMEOUT])
+		return -EINVAL;
+
+	if (nla_strcmp(tb[NFCTH_POLICY_NAME], policy->name))
+		return -EBUSY;
+
+	new_policy->max_expected =
+		ntohl(nla_get_be32(tb[NFCTH_POLICY_EXPECT_MAX]));
+	new_policy->timeout =
+		ntohl(nla_get_be32(tb[NFCTH_POLICY_EXPECT_TIMEOUT]));
+
+	return 0;
+}
+
+static int nfnl_cthelper_update_policy_all(struct nlattr *tb[],
+					   struct nf_conntrack_helper *helper)
+{
+	struct nf_conntrack_expect_policy new_policy[helper->expect_class_max + 1];
+	struct nf_conntrack_expect_policy *policy;
+	int i, err;
+
+	/* Check first that all policy attributes are well-formed, so we don't
+	 * leave things in inconsistent state on errors.
+	 */
+	for (i = 0; i < helper->expect_class_max + 1; i++) {
+
+		if (!tb[NFCTH_POLICY_SET + i])
+			return -EINVAL;
+
+		err = nfnl_cthelper_update_policy_one(&helper->expect_policy[i],
+						      &new_policy[i],
+						      tb[NFCTH_POLICY_SET + i]);
+		if (err < 0)
+			return err;
+	}
+	/* Now we can safely update them. */
+	for (i = 0; i < helper->expect_class_max + 1; i++) {
+		policy = (struct nf_conntrack_expect_policy *)
+				&helper->expect_policy[i];
+		policy->max_expected = new_policy->max_expected;
+		policy->timeout	= new_policy->timeout;
+	}
+
+	return 0;
+}
+
+static int nfnl_cthelper_update_policy(struct nf_conntrack_helper *helper,
+				       const struct nlattr *attr)
+{
+	struct nlattr *tb[NFCTH_POLICY_SET_MAX + 1];
+	unsigned int class_max;
+	int err;
+
+	err = nla_parse_nested(tb, NFCTH_POLICY_SET_MAX, attr,
+			       nfnl_cthelper_expect_policy_set);
+	if (err < 0)
+		return err;
+
+	if (!tb[NFCTH_POLICY_SET_NUM])
+		return -EINVAL;
+
+	class_max = ntohl(nla_get_be32(tb[NFCTH_POLICY_SET_NUM]));
+	if (helper->expect_class_max + 1 != class_max)
+		return -EBUSY;
+
+	return nfnl_cthelper_update_policy_all(tb, helper);
+}
+
 static int
 nfnl_cthelper_update(const struct nlattr * const tb[],
 		     struct nf_conntrack_helper *helper)
@@ -265,8 +348,7 @@ nfnl_cthelper_update(const struct nlattr * const tb[],
 		return -EBUSY;
 
 	if (tb[NFCTH_POLICY]) {
-		ret = nfnl_cthelper_parse_expect_policy(helper,
-							tb[NFCTH_POLICY]);
+		ret = nfnl_cthelper_update_policy(helper, tb[NFCTH_POLICY]);
 		if (ret < 0)
 			return ret;
 	}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: nfnl_cthelper: Fix memory leak
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (22 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] netfilter: nfnl_cthelper: fix runtime expectation policy updates Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] scsi: lpfc: Fix PT2PT PRLI reject Sasha Levin
                   ` (492 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jeffy Chen, Pablo Neira Ayuso, Sasha Levin

From: Jeffy Chen <jeffy.chen@rock-chips.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f83bf8da1135ca635aac8f062cad3f001fcf3a26 ]

We have memory leaks of nf_conntrack_helper & expect_policy.

Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netfilter/nfnetlink_cthelper.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c
index 3e697de2d154..f24d2cec02fb 100644
--- a/net/netfilter/nfnetlink_cthelper.c
+++ b/net/netfilter/nfnetlink_cthelper.c
@@ -216,7 +216,7 @@ nfnl_cthelper_create(const struct nlattr * const tb[],
 
 	ret = nfnl_cthelper_parse_expect_policy(helper, tb[NFCTH_POLICY]);
 	if (ret < 0)
-		goto err;
+		goto err1;
 
 	strncpy(helper->name, nla_data(tb[NFCTH_NAME]), NF_CT_HELPER_NAME_LEN);
 	helper->data_len = ntohl(nla_get_be32(tb[NFCTH_PRIV_DATA_LEN]));
@@ -247,10 +247,12 @@ nfnl_cthelper_create(const struct nlattr * const tb[],
 
 	ret = nf_conntrack_helper_register(helper);
 	if (ret < 0)
-		goto err;
+		goto err2;
 
 	return 0;
-err:
+err2:
+	kfree(helper->expect_policy);
+err1:
 	kfree(helper);
 	return ret;
 }
@@ -696,6 +698,8 @@ nfnl_cthelper_del(struct sock *nfnl, struct sk_buff *skb,
 
 			found = true;
 			nf_conntrack_helper_unregister(cur);
+			kfree(cur->expect_policy);
+			kfree(cur);
 		}
 	}
 	/* Make sure we return success if we flush and there is no helpers */
@@ -759,6 +763,8 @@ static void __exit nfnl_cthelper_exit(void)
 				continue;
 
 			nf_conntrack_helper_unregister(cur);
+			kfree(cur->expect_policy);
+			kfree(cur);
 		}
 	}
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] pinctrl: st: add irq_request/release_resources callbacks
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (24 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] scsi: lpfc: Fix PT2PT PRLI reject Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] ARM: dts: ti: fix PCI bus dtc warnings Sasha Levin
                   ` (490 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Patrice Chotard, Linus Walleij, Sasha Levin

From: Patrice Chotard <patrice.chotard@st.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e855fa9a65c40788b5069abb0d094537daa22e05 ]

When using GPIO as IRQ source, the GPIO must be configured
in INPUT. Callbacks dedicated for this was missing in
pinctrl-st driver.

This fix the following kernel error when trying to lock a gpio
as IRQ:

[    7.521095] gpio gpiochip7: (PIO11): gpiochip_lock_as_irq: tried to flag a GPIO set as output for IRQ
[    7.526018] gpio gpiochip7: (PIO11): unable to lock HW IRQ 6 for IRQ
[    7.529405] genirq: Failed to request resources for 0-0053 (irq 81) on irqchip GPIO

Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/pinctrl/pinctrl-st.c | 30 ++++++++++++++++++++++++------
 1 file changed, 24 insertions(+), 6 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-st.c b/drivers/pinctrl/pinctrl-st.c
index 65bf73b70e34..a02a7caf8d4c 100644
--- a/drivers/pinctrl/pinctrl-st.c
+++ b/drivers/pinctrl/pinctrl-st.c
@@ -1348,6 +1348,22 @@ static void st_gpio_irq_unmask(struct irq_data *d)
 	writel(BIT(d->hwirq), bank->base + REG_PIO_SET_PMASK);
 }
 
+static int st_gpio_irq_request_resources(struct irq_data *d)
+{
+	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
+
+	st_gpio_direction_input(gc, d->hwirq);
+
+	return gpiochip_lock_as_irq(gc, d->hwirq);
+}
+
+static void st_gpio_irq_release_resources(struct irq_data *d)
+{
+	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
+
+	gpiochip_unlock_as_irq(gc, d->hwirq);
+}
+
 static int st_gpio_irq_set_type(struct irq_data *d, unsigned type)
 {
 	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
@@ -1503,12 +1519,14 @@ static struct gpio_chip st_gpio_template = {
 };
 
 static struct irq_chip st_gpio_irqchip = {
-	.name		= "GPIO",
-	.irq_disable	= st_gpio_irq_mask,
-	.irq_mask	= st_gpio_irq_mask,
-	.irq_unmask	= st_gpio_irq_unmask,
-	.irq_set_type	= st_gpio_irq_set_type,
-	.flags		= IRQCHIP_SKIP_SET_WAKE,
+	.name			= "GPIO",
+	.irq_request_resources	= st_gpio_irq_request_resources,
+	.irq_release_resources	= st_gpio_irq_release_resources,
+	.irq_disable		= st_gpio_irq_mask,
+	.irq_mask		= st_gpio_irq_mask,
+	.irq_unmask		= st_gpio_irq_unmask,
+	.irq_set_type		= st_gpio_irq_set_type,
+	.flags			= IRQCHIP_SKIP_SET_WAKE,
 };
 
 static int st_gpiolib_register_bank(struct st_pinctrl *info,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] scsi: lpfc: Fix PT2PT PRLI reject
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (23 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] netfilter: nfnl_cthelper: Fix memory leak Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] pinctrl: st: add irq_request/release_resources callbacks Sasha Levin
                   ` (491 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Dick Kennedy, James Smart, Martin K . Petersen, Sasha Levin

From: Dick Kennedy <dick.kennedy@broadcom.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a71e3cdcfce4880a4578915e110e3eaed1659765 ]

lpfc cannot establish connection with targets that send PRLI in P2P
configurations.

If lpfc rejects a PRLI that is sent from a target the target will not
resend and will reject the PRLI send from the initiator.

[mkp: applied by hand]

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/lpfc/lpfc_els.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index 30f2fe9ba766..9c09ce9b98da 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -6891,7 +6891,8 @@ lpfc_els_unsol_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
 			did, vport->port_state, ndlp->nlp_flag);
 
 		phba->fc_stat.elsRcvPRLI++;
-		if (vport->port_state < LPFC_DISC_AUTH) {
+		if ((vport->port_state < LPFC_DISC_AUTH) &&
+		    (vport->fc_flag & FC_FABRIC)) {
 			rjt_err = LSRJT_UNABLE_TPC;
 			rjt_exp = LSEXP_NOTHING_MORE;
 			break;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] KVM: x86: correct async page present tracepoint
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (26 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] ARM: dts: ti: fix PCI bus dtc warnings Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] hwmon: (asus_atk0110) fix uninitialized data access Sasha Levin
                   ` (488 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Wanpeng Li, Paolo Bonzini, Sasha Levin

From: Wanpeng Li <wanpeng.li@hotmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 24dccf83a121b8a4ad5c2ad383a8184ef6c266ee ]

After async pf setup successfully, there is a broadcast wakeup w/ special
token 0xffffffff which tells vCPU that it should wake up all processes
waiting for APFs though there is no real process waiting at the moment.

The async page present tracepoint print prematurely and fails to catch the
special token setup. This patch fixes it by moving the async page present
tracepoint after the special token setup.

Before patch:

qemu-system-x86-8499  [006] ...1  5973.473292: kvm_async_pf_ready: token 0x0 gva 0x0

After patch:

qemu-system-x86-8499  [006] ...1  5973.473292: kvm_async_pf_ready: token 0xffffffff gva 0x0

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kvm/x86.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index e4e7d45fd551..7840d42734a1 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -7954,11 +7954,11 @@ void kvm_arch_async_page_present(struct kvm_vcpu *vcpu,
 {
 	struct x86_exception fault;
 
-	trace_kvm_async_pf_ready(work->arch.token, work->gva);
 	if (work->wakeup_all)
 		work->arch.token = ~0; /* broadcast wakeup */
 	else
 		kvm_del_async_pf_gfn(vcpu, work->arch.gfn);
+	trace_kvm_async_pf_ready(work->arch.token, work->gva);
 
 	if ((vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED) &&
 	    !apf_put_user(vcpu, KVM_PV_REASON_PAGE_READY)) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ARM: dts: ti: fix PCI bus dtc warnings
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (25 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] pinctrl: st: add irq_request/release_resources callbacks Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] KVM: x86: correct async page present tracepoint Sasha Levin
                   ` (489 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Rob Herring, Tony Lindgren, Sasha Levin

From: Rob Herring <robh@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7d79f6098d82f8c09914d7799bc96891ad9c3baf ]

dtc recently added PCI bus checks. Fix these warnings.

Signed-off-by: Rob Herring <robh@kernel.org>
Cc: "Benoît Cousson" <bcousson@baylibre.com>
Cc: Tony Lindgren <tony@atomide.com>
Cc: linux-omap@vger.kernel.org
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/boot/dts/dra7.dtsi | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi
index bc04b754fe36..a13618266234 100644
--- a/arch/arm/boot/dts/dra7.dtsi
+++ b/arch/arm/boot/dts/dra7.dtsi
@@ -216,6 +216,7 @@
 				device_type = "pci";
 				ranges = <0x81000000 0 0          0x03000 0 0x00010000
 					  0x82000000 0 0x20013000 0x13000 0 0xffed000>;
+				bus-range = <0x00 0xff>;
 				#interrupt-cells = <1>;
 				num-lanes = <1>;
 				ti,hwmods = "pcie1";
@@ -251,6 +252,7 @@
 				device_type = "pci";
 				ranges = <0x81000000 0 0          0x03000 0 0x00010000
 					  0x82000000 0 0x30013000 0x13000 0 0xffed000>;
+				bus-range = <0x00 0xff>;
 				#interrupt-cells = <1>;
 				num-lanes = <1>;
 				ti,hwmods = "pcie2";
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] hwmon: (asus_atk0110) fix uninitialized data access
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (27 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] KVM: x86: correct async page present tracepoint Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] s390/qeth: no ETH header for outbound AF_IUCV Sasha Levin
                   ` (487 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Guenter Roeck, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a2125d02443e9a4e68bcfd9f8004fa23239e8329 ]

The latest gcc-7 snapshot adds a warning to point out that when
atk_read_value_old or atk_read_value_new fails, we copy
uninitialized data into sensor->cached_value:

drivers/hwmon/asus_atk0110.c: In function 'atk_input_show':
drivers/hwmon/asus_atk0110.c:651:26: error: 'value' may be used uninitialized in this function [-Werror=maybe-uninitialized]

Adding an error check avoids this. All versions of the driver
are affected.

Fixes: 2c03d07ad54d ("hwmon: Add Asus ATK0110 support")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Luca Tettamanti <kronos.it@gmail.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/hwmon/asus_atk0110.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/hwmon/asus_atk0110.c b/drivers/hwmon/asus_atk0110.c
index cccef87963e0..975c43d446f8 100644
--- a/drivers/hwmon/asus_atk0110.c
+++ b/drivers/hwmon/asus_atk0110.c
@@ -646,6 +646,9 @@ static int atk_read_value(struct atk_sensor_data *sensor, u64 *value)
 		else
 			err = atk_read_value_new(sensor, value);
 
+		if (err)
+			return err;
+
 		sensor->is_valid = true;
 		sensor->last_updated = jiffies;
 		sensor->cached_value = *value;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] HID: xinmo: fix for out of range for THT 2P arcade controller.
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (29 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] s390/qeth: no ETH header for outbound AF_IUCV Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] bna: avoid writing uninitialized data into hw registers Sasha Levin
                   ` (485 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Peter Stein, Jiri Kosina, Sasha Levin

From: Peter Stein <peter@stuntstein.dk>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9257821c5a1dc57ef3a37f7cbcebaf548395c964 ]

There is a new clone of the XIN MO arcade controller which has same issue with
out of range like the original.  This fix will solve the issue where 2
directions on the joystick are not recognized by the new THT 2P arcade
controller with device ID 0x75e1.  In details the new device ID is added the
hid-id list and the hid-xinmo source code.

Signed-off-by: Peter Stein <peter@stuntstein.dk>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/hid/hid-core.c  | 1 +
 drivers/hid/hid-ids.h   | 1 +
 drivers/hid/hid-xinmo.c | 1 +
 3 files changed, 3 insertions(+)

diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index d786b48f5d7b..bfa7caba6efc 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -2010,6 +2010,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_X_TENSIONS, USB_DEVICE_ID_SPEEDLINK_VAD_CEZANNE) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_THT_2P_ARCADE) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ZYDACRON, USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL) },
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index e995058ad264..fffb1103eb95 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -1011,6 +1011,7 @@
 
 #define USB_VENDOR_ID_XIN_MO			0x16c0
 #define USB_DEVICE_ID_XIN_MO_DUAL_ARCADE	0x05e1
+#define USB_DEVICE_ID_THT_2P_ARCADE		0x75e1
 
 #define USB_VENDOR_ID_XIROKU		0x1477
 #define USB_DEVICE_ID_XIROKU_SPX	0x1006
diff --git a/drivers/hid/hid-xinmo.c b/drivers/hid/hid-xinmo.c
index 7df5227a7e61..9ad7731d2e10 100644
--- a/drivers/hid/hid-xinmo.c
+++ b/drivers/hid/hid-xinmo.c
@@ -46,6 +46,7 @@ static int xinmo_event(struct hid_device *hdev, struct hid_field *field,
 
 static const struct hid_device_id xinmo_devices[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_THT_2P_ARCADE) },
 	{ }
 };
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] s390/qeth: no ETH header for outbound AF_IUCV
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (28 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] hwmon: (asus_atk0110) fix uninitialized data access Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] HID: xinmo: fix for out of range for THT 2P arcade controller Sasha Levin
                   ` (486 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Julian Wiedmann, Ursula Braun, David S . Miller, Sasha Levin

From: Julian Wiedmann <jwi@linux.vnet.ibm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit acd9776b5c45ef02d1a210969a6fcc058afb76e3 ]

With AF_IUCV traffic, the skb passed to hard_start_xmit() has a 14 byte
slot at skb->data, intended for an ETH header. qeth_l3_fill_af_iucv_hdr()
fills this ETH header... and then immediately moves it to the
skb's headroom, where it disappears and is never seen again.

But it's still possible for us to return NETDEV_TX_BUSY after the skb has
been modified. Since we didn't get a private copy of the skb, the next
time the skb is delivered to hard_start_xmit() it no longer has the
expected layout (we moved the ETH header to the headroom, so skb->data
now starts at the IUCV_TRANS header). So when qeth_l3_fill_af_iucv_hdr()
does another round of rebuilding, the resulting qeth header ends up
all wrong. On transmission, the buffer is then rejected by
the HiperSockets device with SBALF15 = x'04'.
When this error is passed back to af_iucv as TX_NOTIFY_UNREACHABLE, it
tears down the offending socket.

As the ETH header for AF_IUCV serves no purpose, just align the code to
what we do for IP traffic on L3 HiperSockets: keep the ETH header at
skb->data, and pass down data_offset = ETH_HLEN to qeth_fill_buffer().
When mapping the payload into the SBAL elements, the ETH header is then
stripped off. This avoids the skb manipulations in
qeth_l3_fill_af_iucv_hdr(), and any buffer re-entering hard_start_xmit()
after NETDEV_TX_BUSY is now processed properly.

Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Signed-off-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/s390/net/qeth_l3_main.c | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
index fefd3c512386..6dbf0d5a2a22 100644
--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -2790,17 +2790,13 @@ static void qeth_l3_fill_af_iucv_hdr(struct qeth_card *card,
 	char daddr[16];
 	struct af_iucv_trans_hdr *iucv_hdr;
 
-	skb_pull(skb, 14);
-	card->dev->header_ops->create(skb, card->dev, 0,
-				      card->dev->dev_addr, card->dev->dev_addr,
-				      card->dev->addr_len);
-	skb_pull(skb, 14);
-	iucv_hdr = (struct af_iucv_trans_hdr *)skb->data;
 	memset(hdr, 0, sizeof(struct qeth_hdr));
 	hdr->hdr.l3.id = QETH_HEADER_TYPE_LAYER3;
 	hdr->hdr.l3.ext_flags = 0;
-	hdr->hdr.l3.length = skb->len;
+	hdr->hdr.l3.length = skb->len - ETH_HLEN;
 	hdr->hdr.l3.flags = QETH_HDR_IPV6 | QETH_CAST_UNICAST;
+
+	iucv_hdr = (struct af_iucv_trans_hdr *) (skb->data + ETH_HLEN);
 	memset(daddr, 0, sizeof(daddr));
 	daddr[0] = 0xfe;
 	daddr[1] = 0x80;
@@ -2983,10 +2979,7 @@ static int qeth_l3_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
 	if ((card->info.type == QETH_CARD_TYPE_IQD) && (!large_send) &&
 	    (skb_shinfo(skb)->nr_frags == 0)) {
 		new_skb = skb;
-		if (new_skb->protocol == ETH_P_AF_IUCV)
-			data_offset = 0;
-		else
-			data_offset = ETH_HLEN;
+		data_offset = ETH_HLEN;
 		hdr = kmem_cache_alloc(qeth_core_header_cache, GFP_ATOMIC);
 		if (!hdr)
 			goto tx_drop;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net: Do not allow negative values for busy_read and busy_poll sysctl interfaces
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (31 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] bna: avoid writing uninitialized data into hw registers Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] i40e: Do not enable NAPI on q_vectors that have no rings Sasha Levin
                   ` (483 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Alexander Duyck, David S . Miller, Sasha Levin

From: Alexander Duyck <alexander.h.duyck@intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 95f255211396958c718aef8c45e3923b5211ea7b ]

This change basically codifies what I think was already the limitations on
the busy_poll and busy_read sysctl interfaces.  We weren't checking the
lower bounds and as such could input negative values. The behavior when
that was used was dependent on the architecture. In order to prevent any
issues with that I am just disabling support for values less than 0 since
this way we don't have to worry about any odd behaviors.

By limiting the sysctl values this way it also makes it consistent with how
we handle the SO_BUSY_POLL socket option since the value appears to be
reported as a signed integer value and negative values are rejected.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/core/sysctl_net_core.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
index a6beb7b6ae55..f5ef2115871f 100644
--- a/net/core/sysctl_net_core.c
+++ b/net/core/sysctl_net_core.c
@@ -360,14 +360,16 @@ static struct ctl_table net_core_table[] = {
 		.data		= &sysctl_net_busy_poll,
 		.maxlen		= sizeof(unsigned int),
 		.mode		= 0644,
-		.proc_handler	= proc_dointvec
+		.proc_handler	= proc_dointvec_minmax,
+		.extra1		= &zero,
 	},
 	{
 		.procname	= "busy_read",
 		.data		= &sysctl_net_busy_read,
 		.maxlen		= sizeof(unsigned int),
 		.mode		= 0644,
-		.proc_handler	= proc_dointvec
+		.proc_handler	= proc_dointvec_minmax,
+		.extra1		= &zero,
 	},
 #endif
 #ifdef CONFIG_NET_SCHED
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] bna: avoid writing uninitialized data into hw registers
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (30 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] HID: xinmo: fix for out of range for THT 2P arcade controller Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] net: Do not allow negative values for busy_read and busy_poll sysctl interfaces Sasha Levin
                   ` (484 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, David S . Miller, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a5af83925363eb85d467933e3d6ec5a87001eb7c ]

The latest gcc-7 snapshot warns about bfa_ioc_send_enable/bfa_ioc_send_disable
writing undefined values into the hardware registers:

drivers/net/ethernet/brocade/bna/bfa_ioc.c: In function 'bfa_iocpf_sm_disabling_entry':
arch/arm/include/asm/io.h:109:22: error: '*((void *)&disable_req+4)' is used uninitialized in this function [-Werror=uninitialized]
arch/arm/include/asm/io.h:109:22: error: '*((void *)&disable_req+8)' is used uninitialized in this function [-Werror=uninitialized]

The two functions look like they should do the same thing, but only one
of them initializes the time stamp and clscode field. The fact that we
only get a warning for one of the two functions seems to be arbitrary,
based on the inlining decisions in the compiler.

To address this, I'm making both functions do the same thing:

- set the clscode from the ioc structure in both
- set the time stamp from ktime_get_real_seconds (which also
  avoids the signed-integer overflow in 2038 and extends the
  well-defined behavior until 2106).
- zero-fill the reserved field

Fixes: 8b230ed8ec96 ("bna: Brocade 10Gb Ethernet device driver")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/brocade/bna/bfa_ioc.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/brocade/bna/bfa_ioc.c b/drivers/net/ethernet/brocade/bna/bfa_ioc.c
index 68f3c13c9ef6..5be892ffdaed 100644
--- a/drivers/net/ethernet/brocade/bna/bfa_ioc.c
+++ b/drivers/net/ethernet/brocade/bna/bfa_ioc.c
@@ -1948,13 +1948,13 @@ static void
 bfa_ioc_send_enable(struct bfa_ioc *ioc)
 {
 	struct bfi_ioc_ctrl_req enable_req;
-	struct timeval tv;
 
 	bfi_h2i_set(enable_req.mh, BFI_MC_IOC, BFI_IOC_H2I_ENABLE_REQ,
 		    bfa_ioc_portid(ioc));
 	enable_req.clscode = htons(ioc->clscode);
-	do_gettimeofday(&tv);
-	enable_req.tv_sec = ntohl(tv.tv_sec);
+	enable_req.rsvd = htons(0);
+	/* overflow in 2106 */
+	enable_req.tv_sec = ntohl(ktime_get_real_seconds());
 	bfa_ioc_mbox_send(ioc, &enable_req, sizeof(struct bfi_ioc_ctrl_req));
 }
 
@@ -1965,6 +1965,10 @@ bfa_ioc_send_disable(struct bfa_ioc *ioc)
 
 	bfi_h2i_set(disable_req.mh, BFI_MC_IOC, BFI_IOC_H2I_DISABLE_REQ,
 		    bfa_ioc_portid(ioc));
+	disable_req.clscode = htons(ioc->clscode);
+	disable_req.rsvd = htons(0);
+	/* overflow in 2106 */
+	disable_req.tv_sec = ntohl(ktime_get_real_seconds());
 	bfa_ioc_mbox_send(ioc, &disable_req, sizeof(struct bfi_ioc_ctrl_req));
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] i40e: Do not enable NAPI on q_vectors that have no rings
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (32 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] net: Do not allow negative values for busy_read and busy_poll sysctl interfaces Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] irda: vlsi_ir: fix check for DMA mapping errors Sasha Levin
                   ` (482 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Alexander Duyck, Jeff Kirsher, David S . Miller, Sasha Levin

From: Alexander Duyck <alexander.h.duyck@intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 13a8cd191a2b470cfd435b3b57dbd21aa65ff78c ]

When testing the epoll w/ busy poll code I found that I could get into a
state where the i40e driver had q_vectors w/ active NAPI that had no rings.
This was resulting in a divide by zero error.  To correct it I am updating
the driver code so that we only support NAPI on q_vectors that have 1 or
more rings allocated to them.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/intel/i40e/i40e_main.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 13e0cf90e567..042f3486f79a 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -3894,8 +3894,12 @@ static void i40e_napi_enable_all(struct i40e_vsi *vsi)
 	if (!vsi->netdev)
 		return;
 
-	for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++)
-		napi_enable(&vsi->q_vectors[q_idx]->napi);
+	for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) {
+		struct i40e_q_vector *q_vector = vsi->q_vectors[q_idx];
+
+		if (q_vector->rx.ring || q_vector->tx.ring)
+			napi_enable(&q_vector->napi);
+	}
 }
 
 /**
@@ -3909,8 +3913,12 @@ static void i40e_napi_disable_all(struct i40e_vsi *vsi)
 	if (!vsi->netdev)
 		return;
 
-	for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++)
-		napi_disable(&vsi->q_vectors[q_idx]->napi);
+	for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) {
+		struct i40e_q_vector *q_vector = vsi->q_vectors[q_idx];
+
+		if (q_vector->rx.ring || q_vector->tx.ring)
+			napi_disable(&q_vector->napi);
+	}
 }
 
 /**
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] irda: vlsi_ir: fix check for DMA mapping errors
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (33 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] i40e: Do not enable NAPI on q_vectors that have no rings Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] netfilter: nfnl_cthelper: fix a race when walk the nf_ct_helper_hash table Sasha Levin
                   ` (481 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Alexey Khoroshilov, David S . Miller, Sasha Levin

From: Alexey Khoroshilov <khoroshilov@ispras.ru>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6ac3b77a6ffff7513ff86b684aa256ea01c0e5b5 ]

vlsi_alloc_ring() checks for DMA mapping errors by comparing
returned address with zero, while pci_dma_mapping_error() should be used.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/irda/vlsi_ir.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/irda/vlsi_ir.c b/drivers/net/irda/vlsi_ir.c
index a0849f49bbec..c0192f97ecc8 100644
--- a/drivers/net/irda/vlsi_ir.c
+++ b/drivers/net/irda/vlsi_ir.c
@@ -418,8 +418,9 @@ static struct vlsi_ring *vlsi_alloc_ring(struct pci_dev *pdev, struct ring_descr
 		memset(rd, 0, sizeof(*rd));
 		rd->hw = hwmap + i;
 		rd->buf = kmalloc(len, GFP_KERNEL|GFP_DMA);
-		if (rd->buf == NULL ||
-		    !(busaddr = pci_map_single(pdev, rd->buf, len, dir))) {
+		if (rd->buf)
+			busaddr = pci_map_single(pdev, rd->buf, len, dir);
+		if (rd->buf == NULL || pci_dma_mapping_error(pdev, busaddr)) {
 			if (rd->buf) {
 				net_err_ratelimited("%s: failed to create PCI-MAP for %p\n",
 						    __func__, rd->buf);
@@ -430,8 +431,7 @@ static struct vlsi_ring *vlsi_alloc_ring(struct pci_dev *pdev, struct ring_descr
 				rd = r->rd + j;
 				busaddr = rd_get_addr(rd);
 				rd_set_addr_status(rd, 0, 0);
-				if (busaddr)
-					pci_unmap_single(pdev, busaddr, len, dir);
+				pci_unmap_single(pdev, busaddr, len, dir);
 				kfree(rd->buf);
 				rd->buf = NULL;
 			}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: nfnl_cthelper: fix a race when walk the nf_ct_helper_hash table
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (34 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] irda: vlsi_ir: fix check for DMA mapping errors Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] ARM: dts: am335x-evmsk: adjust mmc2 param to allow suspend Sasha Levin
                   ` (480 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Liping Zhang, Pablo Neira Ayuso, Sasha Levin

From: Liping Zhang <zlpnobody@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 83d90219a5df8d950855ce73229a97b63605c317 ]

The nf_ct_helper_hash table is protected by nf_ct_helper_mutex, while
nfct_helper operation is protected by nfnl_lock(NFNL_SUBSYS_CTHELPER).
So it's possible that one CPU is walking the nf_ct_helper_hash for
cthelper add/get/del, another cpu is doing nf_conntrack_helpers_unregister
at the same time. This is dangrous, and may cause use after free error.

Note, delete operation will flush all cthelpers added via nfnetlink, so
using rcu to do protect is not easy.

Now introduce a dummy list to record all the cthelpers added via
nfnetlink, then we can walk the dummy list instead of walking the
nf_ct_helper_hash. Also, keep nfnl_cthelper_dump_table unchanged, it
may be invoked without nfnl_lock(NFNL_SUBSYS_CTHELPER) held.

Signed-off-by: Liping Zhang <zlpnobody@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netfilter/nfnetlink_cthelper.c | 177 +++++++++++++++++--------------------
 1 file changed, 81 insertions(+), 96 deletions(-)

diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c
index f24d2cec02fb..8d34a488efc0 100644
--- a/net/netfilter/nfnetlink_cthelper.c
+++ b/net/netfilter/nfnetlink_cthelper.c
@@ -32,6 +32,13 @@ MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Pablo Neira Ayuso <pablo@netfilter.org>");
 MODULE_DESCRIPTION("nfnl_cthelper: User-space connection tracking helpers");
 
+struct nfnl_cthelper {
+	struct list_head		list;
+	struct nf_conntrack_helper	helper;
+};
+
+static LIST_HEAD(nfnl_cthelper_list);
+
 static int
 nfnl_userspace_cthelper(struct sk_buff *skb, unsigned int protoff,
 			struct nf_conn *ct, enum ip_conntrack_info ctinfo)
@@ -205,14 +212,16 @@ nfnl_cthelper_create(const struct nlattr * const tb[],
 		     struct nf_conntrack_tuple *tuple)
 {
 	struct nf_conntrack_helper *helper;
+	struct nfnl_cthelper *nfcth;
 	int ret;
 
 	if (!tb[NFCTH_TUPLE] || !tb[NFCTH_POLICY] || !tb[NFCTH_PRIV_DATA_LEN])
 		return -EINVAL;
 
-	helper = kzalloc(sizeof(struct nf_conntrack_helper), GFP_KERNEL);
-	if (helper == NULL)
+	nfcth = kzalloc(sizeof(*nfcth), GFP_KERNEL);
+	if (nfcth == NULL)
 		return -ENOMEM;
+	helper = &nfcth->helper;
 
 	ret = nfnl_cthelper_parse_expect_policy(helper, tb[NFCTH_POLICY]);
 	if (ret < 0)
@@ -249,11 +258,12 @@ nfnl_cthelper_create(const struct nlattr * const tb[],
 	if (ret < 0)
 		goto err2;
 
+	list_add_tail(&nfcth->list, &nfnl_cthelper_list);
 	return 0;
 err2:
 	kfree(helper->expect_policy);
 err1:
-	kfree(helper);
+	kfree(nfcth);
 	return ret;
 }
 
@@ -379,7 +389,8 @@ nfnl_cthelper_new(struct sock *nfnl, struct sk_buff *skb,
 	const char *helper_name;
 	struct nf_conntrack_helper *cur, *helper = NULL;
 	struct nf_conntrack_tuple tuple;
-	int ret = 0, i;
+	struct nfnl_cthelper *nlcth;
+	int ret = 0;
 
 	if (!tb[NFCTH_NAME] || !tb[NFCTH_TUPLE])
 		return -EINVAL;
@@ -390,31 +401,22 @@ nfnl_cthelper_new(struct sock *nfnl, struct sk_buff *skb,
 	if (ret < 0)
 		return ret;
 
-	rcu_read_lock();
-	for (i = 0; i < nf_ct_helper_hsize && !helper; i++) {
-		hlist_for_each_entry_rcu(cur, &nf_ct_helper_hash[i], hnode) {
+	list_for_each_entry(nlcth, &nfnl_cthelper_list, list) {
+		cur = &nlcth->helper;
 
-			/* skip non-userspace conntrack helpers. */
-			if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))
-				continue;
+		if (strncmp(cur->name, helper_name, NF_CT_HELPER_NAME_LEN))
+			continue;
 
-			if (strncmp(cur->name, helper_name,
-					NF_CT_HELPER_NAME_LEN) != 0)
-				continue;
+		if ((tuple.src.l3num != cur->tuple.src.l3num ||
+		     tuple.dst.protonum != cur->tuple.dst.protonum))
+			continue;
 
-			if ((tuple.src.l3num != cur->tuple.src.l3num ||
-			     tuple.dst.protonum != cur->tuple.dst.protonum))
-				continue;
+		if (nlh->nlmsg_flags & NLM_F_EXCL)
+			return -EEXIST;
 
-			if (nlh->nlmsg_flags & NLM_F_EXCL) {
-				ret = -EEXIST;
-				goto err;
-			}
-			helper = cur;
-			break;
-		}
+		helper = cur;
+		break;
 	}
-	rcu_read_unlock();
 
 	if (helper == NULL)
 		ret = nfnl_cthelper_create(tb, &tuple);
@@ -422,9 +424,6 @@ nfnl_cthelper_new(struct sock *nfnl, struct sk_buff *skb,
 		ret = nfnl_cthelper_update(tb, helper);
 
 	return ret;
-err:
-	rcu_read_unlock();
-	return ret;
 }
 
 static int
@@ -588,11 +587,12 @@ static int
 nfnl_cthelper_get(struct sock *nfnl, struct sk_buff *skb,
 		  const struct nlmsghdr *nlh, const struct nlattr * const tb[])
 {
-	int ret = -ENOENT, i;
+	int ret = -ENOENT;
 	struct nf_conntrack_helper *cur;
 	struct sk_buff *skb2;
 	char *helper_name = NULL;
 	struct nf_conntrack_tuple tuple;
+	struct nfnl_cthelper *nlcth;
 	bool tuple_set = false;
 
 	if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -613,45 +613,39 @@ nfnl_cthelper_get(struct sock *nfnl, struct sk_buff *skb,
 		tuple_set = true;
 	}
 
-	for (i = 0; i < nf_ct_helper_hsize; i++) {
-		hlist_for_each_entry_rcu(cur, &nf_ct_helper_hash[i], hnode) {
+	list_for_each_entry(nlcth, &nfnl_cthelper_list, list) {
+		cur = &nlcth->helper;
+		if (helper_name &&
+		    strncmp(cur->name, helper_name, NF_CT_HELPER_NAME_LEN))
+			continue;
 
-			/* skip non-userspace conntrack helpers. */
-			if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))
-				continue;
+		if (tuple_set &&
+		    (tuple.src.l3num != cur->tuple.src.l3num ||
+		     tuple.dst.protonum != cur->tuple.dst.protonum))
+			continue;
 
-			if (helper_name && strncmp(cur->name, helper_name,
-						NF_CT_HELPER_NAME_LEN) != 0) {
-				continue;
-			}
-			if (tuple_set &&
-			    (tuple.src.l3num != cur->tuple.src.l3num ||
-			     tuple.dst.protonum != cur->tuple.dst.protonum))
-				continue;
-
-			skb2 = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
-			if (skb2 == NULL) {
-				ret = -ENOMEM;
-				break;
-			}
+		skb2 = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
+		if (skb2 == NULL) {
+			ret = -ENOMEM;
+			break;
+		}
 
-			ret = nfnl_cthelper_fill_info(skb2, NETLINK_CB(skb).portid,
-						nlh->nlmsg_seq,
-						NFNL_MSG_TYPE(nlh->nlmsg_type),
-						NFNL_MSG_CTHELPER_NEW, cur);
-			if (ret <= 0) {
-				kfree_skb(skb2);
-				break;
-			}
+		ret = nfnl_cthelper_fill_info(skb2, NETLINK_CB(skb).portid,
+					      nlh->nlmsg_seq,
+					      NFNL_MSG_TYPE(nlh->nlmsg_type),
+					      NFNL_MSG_CTHELPER_NEW, cur);
+		if (ret <= 0) {
+			kfree_skb(skb2);
+			break;
+		}
 
-			ret = netlink_unicast(nfnl, skb2, NETLINK_CB(skb).portid,
-						MSG_DONTWAIT);
-			if (ret > 0)
-				ret = 0;
+		ret = netlink_unicast(nfnl, skb2, NETLINK_CB(skb).portid,
+				      MSG_DONTWAIT);
+		if (ret > 0)
+			ret = 0;
 
-			/* this avoids a loop in nfnetlink. */
-			return ret == -EAGAIN ? -ENOBUFS : ret;
-		}
+		/* this avoids a loop in nfnetlink. */
+		return ret == -EAGAIN ? -ENOBUFS : ret;
 	}
 	return ret;
 }
@@ -662,10 +656,10 @@ nfnl_cthelper_del(struct sock *nfnl, struct sk_buff *skb,
 {
 	char *helper_name = NULL;
 	struct nf_conntrack_helper *cur;
-	struct hlist_node *tmp;
 	struct nf_conntrack_tuple tuple;
 	bool tuple_set = false, found = false;
-	int i, j = 0, ret;
+	struct nfnl_cthelper *nlcth, *n;
+	int j = 0, ret;
 
 	if (tb[NFCTH_NAME])
 		helper_name = nla_data(tb[NFCTH_NAME]);
@@ -678,30 +672,27 @@ nfnl_cthelper_del(struct sock *nfnl, struct sk_buff *skb,
 		tuple_set = true;
 	}
 
-	for (i = 0; i < nf_ct_helper_hsize; i++) {
-		hlist_for_each_entry_safe(cur, tmp, &nf_ct_helper_hash[i],
-								hnode) {
-			/* skip non-userspace conntrack helpers. */
-			if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))
-				continue;
+	list_for_each_entry_safe(nlcth, n, &nfnl_cthelper_list, list) {
+		cur = &nlcth->helper;
+		j++;
 
-			j++;
+		if (helper_name &&
+		    strncmp(cur->name, helper_name, NF_CT_HELPER_NAME_LEN))
+			continue;
 
-			if (helper_name && strncmp(cur->name, helper_name,
-						NF_CT_HELPER_NAME_LEN) != 0) {
-				continue;
-			}
-			if (tuple_set &&
-			    (tuple.src.l3num != cur->tuple.src.l3num ||
-			     tuple.dst.protonum != cur->tuple.dst.protonum))
-				continue;
+		if (tuple_set &&
+		    (tuple.src.l3num != cur->tuple.src.l3num ||
+		     tuple.dst.protonum != cur->tuple.dst.protonum))
+			continue;
 
-			found = true;
-			nf_conntrack_helper_unregister(cur);
-			kfree(cur->expect_policy);
-			kfree(cur);
-		}
+		found = true;
+		nf_conntrack_helper_unregister(cur);
+		kfree(cur->expect_policy);
+
+		list_del(&nlcth->list);
+		kfree(nlcth);
 	}
+
 	/* Make sure we return success if we flush and there is no helpers */
 	return (found || j == 0) ? 0 : -ENOENT;
 }
@@ -750,22 +741,16 @@ static int __init nfnl_cthelper_init(void)
 static void __exit nfnl_cthelper_exit(void)
 {
 	struct nf_conntrack_helper *cur;
-	struct hlist_node *tmp;
-	int i;
+	struct nfnl_cthelper *nlcth, *n;
 
 	nfnetlink_subsys_unregister(&nfnl_cthelper_subsys);
 
-	for (i=0; i<nf_ct_helper_hsize; i++) {
-		hlist_for_each_entry_safe(cur, tmp, &nf_ct_helper_hash[i],
-									hnode) {
-			/* skip non-userspace conntrack helpers. */
-			if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))
-				continue;
+	list_for_each_entry_safe(nlcth, n, &nfnl_cthelper_list, list) {
+		cur = &nlcth->helper;
 
-			nf_conntrack_helper_unregister(cur);
-			kfree(cur->expect_policy);
-			kfree(cur);
-		}
+		nf_conntrack_helper_unregister(cur);
+		kfree(cur->expect_policy);
+		kfree(nlcth);
 	}
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ARM: dts: am335x-evmsk: adjust mmc2 param to allow suspend
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (35 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] netfilter: nfnl_cthelper: fix a race when walk the nf_ct_helper_hash table Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] netfilter: nf_nat_snmp: Fix panic when snmp_trap_helper fails to register Sasha Levin
                   ` (479 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Reizer, Eyal, Tony Lindgren, Sasha Levin

From: "Reizer, Eyal" <eyalr@ti.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9bcf53f34a2c1cebc45cc12e273dcd5f51fbc099 ]

mmc2 used for wl12xx was missing the keep-power-in suspend
parameter. As a result the board couldn't reach suspend state.

Signed-off-by: Eyal Reizer <eyalr@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/boot/dts/am335x-evmsk.dts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/boot/dts/am335x-evmsk.dts b/arch/arm/boot/dts/am335x-evmsk.dts
index 156d05efcb70..01288546bda1 100644
--- a/arch/arm/boot/dts/am335x-evmsk.dts
+++ b/arch/arm/boot/dts/am335x-evmsk.dts
@@ -646,6 +646,7 @@
 	ti,non-removable;
 	bus-width = <4>;
 	cap-power-off-card;
+	keep-power-in-suspend;
 	pinctrl-names = "default";
 	pinctrl-0 = <&mmc2_pins>;
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: nf_nat_snmp: Fix panic when snmp_trap_helper fails to register
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (36 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] ARM: dts: am335x-evmsk: adjust mmc2 param to allow suspend Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] xhci: plat: Register shutdown for xhci_plat Sasha Levin
                   ` (478 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Gao Feng, Pablo Neira Ayuso, Sasha Levin

From: Gao Feng <fgao@ikuai8.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 75c689dca98851d65ef5a27e5ce26b625b68751c ]

In the commit 93557f53e1fb ("netfilter: nf_conntrack: nf_conntrack snmp
helper"), the snmp_helper is replaced by nf_nat_snmp_hook. So the
snmp_helper is never registered. But it still tries to unregister the
snmp_helper, it could cause the panic.

Now remove the useless snmp_helper and the unregister call in the
error handler.

Fixes: 93557f53e1fb ("netfilter: nf_conntrack: nf_conntrack snmp helper")
Signed-off-by: Gao Feng <fgao@ikuai8.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv4/netfilter/nf_nat_snmp_basic.c | 19 +------------------
 1 file changed, 1 insertion(+), 18 deletions(-)

diff --git a/net/ipv4/netfilter/nf_nat_snmp_basic.c b/net/ipv4/netfilter/nf_nat_snmp_basic.c
index cc626e1b06d3..64a8bbc06f23 100644
--- a/net/ipv4/netfilter/nf_nat_snmp_basic.c
+++ b/net/ipv4/netfilter/nf_nat_snmp_basic.c
@@ -1260,16 +1260,6 @@ static const struct nf_conntrack_expect_policy snmp_exp_policy = {
 	.timeout	= 180,
 };
 
-static struct nf_conntrack_helper snmp_helper __read_mostly = {
-	.me			= THIS_MODULE,
-	.help			= help,
-	.expect_policy		= &snmp_exp_policy,
-	.name			= "snmp",
-	.tuple.src.l3num	= AF_INET,
-	.tuple.src.u.udp.port	= cpu_to_be16(SNMP_PORT),
-	.tuple.dst.protonum	= IPPROTO_UDP,
-};
-
 static struct nf_conntrack_helper snmp_trap_helper __read_mostly = {
 	.me			= THIS_MODULE,
 	.help			= help,
@@ -1288,17 +1278,10 @@ static struct nf_conntrack_helper snmp_trap_helper __read_mostly = {
 
 static int __init nf_nat_snmp_basic_init(void)
 {
-	int ret = 0;
-
 	BUG_ON(nf_nat_snmp_hook != NULL);
 	RCU_INIT_POINTER(nf_nat_snmp_hook, help);
 
-	ret = nf_conntrack_helper_register(&snmp_trap_helper);
-	if (ret < 0) {
-		nf_conntrack_helper_unregister(&snmp_helper);
-		return ret;
-	}
-	return ret;
+	return nf_conntrack_helper_register(&snmp_trap_helper);
 }
 
 static void __exit nf_nat_snmp_basic_fini(void)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] xhci: plat: Register shutdown for xhci_plat
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (37 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] netfilter: nf_nat_snmp: Fix panic when snmp_trap_helper fails to register Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] isdn: kcapi: avoid uninitialized data Sasha Levin
                   ` (477 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Adam Wallis, Mathias Nyman, Greg Kroah-Hartman, Sasha Levin

From: Adam Wallis <awallis@codeaurora.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b07c12517f2aed0add8ce18146bb426b14099392 ]

Shutdown should be called for xhci_plat devices especially for
situations where kexec might be used by stopping DMA
transactions.

Signed-off-by: Adam Wallis <awallis@codeaurora.org>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/host/xhci-plat.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
index 23c5bdab988d..e92b9903faa4 100644
--- a/drivers/usb/host/xhci-plat.c
+++ b/drivers/usb/host/xhci-plat.c
@@ -266,6 +266,7 @@ MODULE_DEVICE_TABLE(of, usb_xhci_of_match);
 static struct platform_driver usb_xhci_driver = {
 	.probe	= xhci_plat_probe,
 	.remove	= xhci_plat_remove,
+	.shutdown	= usb_hcd_platform_shutdown,
 	.driver	= {
 		.name = "xhci-hcd",
 		.pm = DEV_PM_OPS,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] isdn: kcapi: avoid uninitialized data
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (38 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] xhci: plat: Register shutdown for xhci_plat Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] cpuidle: powernv: Pass correct drv->cpumask for registration Sasha Levin
                   ` (476 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, David S . Miller, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit af109a2cf6a9a6271fa420ae2d64d72d86c92b7d ]

gcc-7 points out that the AVMB1_ADDCARD ioctl results in an unintialized
value ending up in the cardnr parameter:

drivers/isdn/capi/kcapi.c: In function 'old_capi_manufacturer':
drivers/isdn/capi/kcapi.c:1042:24: error: 'cdef.cardnr' may be used uninitialized in this function [-Werror=maybe-uninitialized]
   cparams.cardnr = cdef.cardnr;

This has been broken since before the start of the git history, so
either the value is not used for anything important, or the ioctl
command doesn't get called in practice.

Setting the cardnr to zero avoids the warning and makes sure
we have consistent behavior.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/isdn/capi/kcapi.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/isdn/capi/kcapi.c b/drivers/isdn/capi/kcapi.c
index 823f6985b260..dd7e38ac29bd 100644
--- a/drivers/isdn/capi/kcapi.c
+++ b/drivers/isdn/capi/kcapi.c
@@ -1032,6 +1032,7 @@ static int old_capi_manufacturer(unsigned int cmd, void __user *data)
 						     sizeof(avmb1_carddef))))
 				return -EFAULT;
 			cdef.cardtype = AVM_CARDTYPE_B1;
+			cdef.cardnr = 0;
 		} else {
 			if ((retval = copy_from_user(&cdef, data,
 						     sizeof(avmb1_extcarddef))))
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ARM: dma-mapping: disallow dma_get_sgtable() for non-kernel managed memory
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (40 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] cpuidle: powernv: Pass correct drv->cpumask for registration Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] backlight: pwm_bl: Fix overflow condition Sasha Levin
                   ` (474 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Russell King, Sasha Levin

From: Russell King <rmk+kernel@armlinux.org.uk>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 916a008b4b8ecc02fbd035cfb133773dba1ff3d7 ]

dma_get_sgtable() tries to create a scatterlist table containing valid
struct page pointers for the coherent memory allocation passed in to it.

However, memory can be declared via dma_declare_coherent_memory(), or
via other reservation schemes which means that coherent memory is not
guaranteed to be backed by struct pages.  In such cases, the resulting
scatterlist table contains pointers to invalid pages, which causes
kernel oops later.

This patch adds detection of such memory, and refuses to create a
scatterlist table for such memory.

Reported-by: Shuah Khan <shuahkhan@gmail.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/mm/dma-mapping.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 64d7486262e5..e37c04facc1d 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -764,13 +764,31 @@ static void arm_coherent_dma_free(struct device *dev, size_t size, void *cpu_add
 	__arm_dma_free(dev, size, cpu_addr, handle, attrs, true);
 }
 
+/*
+ * The whole dma_get_sgtable() idea is fundamentally unsafe - it seems
+ * that the intention is to allow exporting memory allocated via the
+ * coherent DMA APIs through the dma_buf API, which only accepts a
+ * scattertable.  This presents a couple of problems:
+ * 1. Not all memory allocated via the coherent DMA APIs is backed by
+ *    a struct page
+ * 2. Passing coherent DMA memory into the streaming APIs is not allowed
+ *    as we will try to flush the memory through a different alias to that
+ *    actually being used (and the flushes are redundant.)
+ */
 int arm_dma_get_sgtable(struct device *dev, struct sg_table *sgt,
 		 void *cpu_addr, dma_addr_t handle, size_t size,
 		 struct dma_attrs *attrs)
 {
-	struct page *page = pfn_to_page(dma_to_pfn(dev, handle));
+	unsigned long pfn = dma_to_pfn(dev, handle);
+	struct page *page;
 	int ret;
 
+	/* If the PFN is not valid, we do not have a struct page */
+	if (!pfn_valid(pfn))
+		return -ENXIO;
+
+	page = pfn_to_page(pfn);
+
 	ret = sg_alloc_table(sgt, 1, GFP_KERNEL);
 	if (unlikely(ret))
 		return ret;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] cpuidle: powernv: Pass correct drv->cpumask for registration
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (39 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] isdn: kcapi: avoid uninitialized data Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] ARM: dma-mapping: disallow dma_get_sgtable() for non-kernel managed memory Sasha Levin
                   ` (475 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Vaidyanathan Srinivasan, Rafael J . Wysocki, Sasha Levin

From: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 293d264f13cbde328d5477f49e3103edbc1dc191 ]

drv->cpumask defaults to cpu_possible_mask in __cpuidle_driver_init().
On PowerNV platform cpu_present could be less than cpu_possible in cases
where firmware detects the cpu, but it is not available to the OS.  When
CONFIG_HOTPLUG_CPU=n, such cpus are not hotplugable at runtime and hence
we skip creating cpu_device.

This breaks cpuidle on powernv where register_cpu() is not called for
cpus in cpu_possible_mask that cannot be hot-added at runtime.

Trying cpuidle_register_device() on cpu without cpu_device will cause
crash like this:

cpu 0xf: Vector: 380 (Data SLB Access) at [c000000ff1503490]
    pc: c00000000022c8bc: string+0x34/0x60
    lr: c00000000022ed78: vsnprintf+0x284/0x42c
    sp: c000000ff1503710
   msr: 9000000000009033
   dar: 6000000060000000
  current = 0xc000000ff1480000
  paca    = 0xc00000000fe82d00   softe: 0        irq_happened: 0x01
    pid   = 1, comm = swapper/8
Linux version 4.11.0-rc2 (sv@sagarika) (gcc version 4.9.4
(Buildroot 2017.02-00004-gc28573e) ) #15 SMP Fri Mar 17 19:32:02 IST 2017
enter ? for help
[link register   ] c00000000022ed78 vsnprintf+0x284/0x42c
[c000000ff1503710] c00000000022ebb8 vsnprintf+0xc4/0x42c (unreliable)
[c000000ff1503800] c00000000022ef40 vscnprintf+0x20/0x44
[c000000ff1503830] c0000000000ab61c vprintk_emit+0x94/0x2cc
[c000000ff15038a0] c0000000000acc9c vprintk_func+0x60/0x74
[c000000ff15038c0] c000000000619694 printk+0x38/0x4c
[c000000ff15038e0] c000000000224950 kobject_get+0x40/0x60
[c000000ff1503950] c00000000022507c kobject_add_internal+0x60/0x2c4
[c000000ff15039e0] c000000000225350 kobject_init_and_add+0x70/0x78
[c000000ff1503a60] c00000000053c288 cpuidle_add_sysfs+0x9c/0xe0
[c000000ff1503ae0] c00000000053aeac cpuidle_register_device+0xd4/0x12c
[c000000ff1503b30] c00000000053b108 cpuidle_register+0x98/0xcc
[c000000ff1503bc0] c00000000085eaf0 powernv_processor_idle_init+0x140/0x1e0
[c000000ff1503c60] c00000000000cd60 do_one_initcall+0xc0/0x15c
[c000000ff1503d20] c000000000833e84 kernel_init_freeable+0x1a0/0x25c
[c000000ff1503dc0] c00000000000d478 kernel_init+0x24/0x12c
[c000000ff1503e30] c00000000000b564 ret_from_kernel_thread+0x5c/0x78

This patch fixes the bug by passing correct cpumask from
powernv-cpuidle driver.

Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
Reviewed-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com>
Acked-by: Michael Ellerman <mpe@ellerman.id.au>
[ rjw: Comment massage ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/cpuidle/cpuidle-powernv.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/cpuidle/cpuidle-powernv.c b/drivers/cpuidle/cpuidle-powernv.c
index 3442764a5293..544e0e330afd 100644
--- a/drivers/cpuidle/cpuidle-powernv.c
+++ b/drivers/cpuidle/cpuidle-powernv.c
@@ -153,6 +153,24 @@ static int powernv_cpuidle_driver_init(void)
 		drv->state_count += 1;
 	}
 
+	/*
+	 * On the PowerNV platform cpu_present may be less than cpu_possible in
+	 * cases when firmware detects the CPU, but it is not available to the
+	 * OS.  If CONFIG_HOTPLUG_CPU=n, then such CPUs are not hotplugable at
+	 * run time and hence cpu_devices are not created for those CPUs by the
+	 * generic topology_init().
+	 *
+	 * drv->cpumask defaults to cpu_possible_mask in
+	 * __cpuidle_driver_init().  This breaks cpuidle on PowerNV where
+	 * cpu_devices are not created for CPUs in cpu_possible_mask that
+	 * cannot be hot-added later at run time.
+	 *
+	 * Trying cpuidle_register_device() on a CPU without a cpu_device is
+	 * incorrect, so pass a correct CPU mask to the generic cpuidle driver.
+	 */
+
+	drv->cpumask = (struct cpumask *)cpu_present_mask;
+
 	return 0;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] backlight: pwm_bl: Fix overflow condition
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (41 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] ARM: dma-mapping: disallow dma_get_sgtable() for non-kernel managed memory Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] net: phy: at803x: Change error to EINVAL for invalid MAC Sasha Levin
                   ` (473 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Derek Basehore, Lee Jones, Sasha Levin

From: Derek Basehore <dbasehore@chromium.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5d0c49acebc9488e37db95f1d4a55644e545ffe7 ]

This fixes an overflow condition that can happen with high max
brightness and period values in compute_duty_cycle. This fixes it by
using a 64 bit variable for computing the duty cycle.

Signed-off-by: Derek Basehore <dbasehore@chromium.org>
Acked-by: Thierry Reding <thierry.reding@gmail.com>
Reviewed-by: Brian Norris <briannorris@chromium.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/video/backlight/pwm_bl.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
index 6897f1c1bc73..95d01562ffa2 100644
--- a/drivers/video/backlight/pwm_bl.c
+++ b/drivers/video/backlight/pwm_bl.c
@@ -79,14 +79,17 @@ static void pwm_backlight_power_off(struct pwm_bl_data *pb)
 static int compute_duty_cycle(struct pwm_bl_data *pb, int brightness)
 {
 	unsigned int lth = pb->lth_brightness;
-	int duty_cycle;
+	u64 duty_cycle;
 
 	if (pb->levels)
 		duty_cycle = pb->levels[brightness];
 	else
 		duty_cycle = brightness;
 
-	return (duty_cycle * (pb->period - lth) / pb->scale) + lth;
+	duty_cycle *= pb->period - lth;
+	do_div(duty_cycle, pb->scale);
+
+	return duty_cycle + lth;
 }
 
 static int pwm_backlight_update_status(struct backlight_device *bl)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] crypto: crypto4xx - increase context and scatter ring buffer elements
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (43 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] net: phy: at803x: Change error to EINVAL for invalid MAC Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] PCI: Avoid bus reset if bridge itself is broken Sasha Levin
                   ` (471 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Christian Lamparter, Herbert Xu, Sasha Levin

From: Christian Lamparter <chunkeey@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 778f81d6cdb7d25360f082ac0384d5103f04eca5 ]

If crypto4xx is used in conjunction with dm-crypt, the available
ring buffer elements are not enough to handle the load properly.

On an aes-cbc-essiv:sha256 encrypted swap partition the read
performance is abyssal: (tested with hdparm -t)

/dev/mapper/swap_crypt:
 Timing buffered disk reads:  14 MB in  3.68 seconds =   3.81 MB/sec

The patch increases both PPC4XX_NUM_SD and PPC4XX_NUM_PD to 256.
This improves the performance considerably:

/dev/mapper/swap_crypt:
 Timing buffered disk reads: 104 MB in  3.03 seconds =  34.31 MB/sec

Furthermore, PPC4XX_LAST_SD, PPC4XX_LAST_GD and PPC4XX_LAST_PD
can be easily calculated from their respective PPC4XX_NUM_*
constant.

Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/crypto/amcc/crypto4xx_core.h | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/crypto/amcc/crypto4xx_core.h b/drivers/crypto/amcc/crypto4xx_core.h
index bac0bdeb4b5f..b6529b9fcbe2 100644
--- a/drivers/crypto/amcc/crypto4xx_core.h
+++ b/drivers/crypto/amcc/crypto4xx_core.h
@@ -32,12 +32,12 @@
 #define PPC405EX_CE_RESET                       0x00000008
 
 #define CRYPTO4XX_CRYPTO_PRIORITY		300
-#define PPC4XX_LAST_PD				63
-#define PPC4XX_NUM_PD				64
-#define PPC4XX_LAST_GD				1023
+#define PPC4XX_NUM_PD				256
+#define PPC4XX_LAST_PD				(PPC4XX_NUM_PD - 1)
 #define PPC4XX_NUM_GD				1024
-#define PPC4XX_LAST_SD				63
-#define PPC4XX_NUM_SD				64
+#define PPC4XX_LAST_GD				(PPC4XX_NUM_GD - 1)
+#define PPC4XX_NUM_SD				256
+#define PPC4XX_LAST_SD				(PPC4XX_NUM_SD - 1)
 #define PPC4XX_SD_BUFFER_SIZE			2048
 
 #define PD_ENTRY_INUSE				1
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net: phy: at803x: Change error to EINVAL for invalid MAC
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (42 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] backlight: pwm_bl: Fix overflow condition Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] crypto: crypto4xx - increase context and scatter ring buffer elements Sasha Levin
                   ` (472 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Dan Murphy, David S . Miller, Sasha Levin

From: Dan Murphy <dmurphy@ti.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fc7556877d1748ac00958822a0a3bba1d4bd9e0d ]

Change the return error code to EINVAL if the MAC
address is not valid in the set_wol function.

Signed-off-by: Dan Murphy <dmurphy@ti.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/phy/at803x.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c
index fabf11d32d27..d4b8ea30cd9d 100644
--- a/drivers/net/phy/at803x.c
+++ b/drivers/net/phy/at803x.c
@@ -105,7 +105,7 @@ static int at803x_set_wol(struct phy_device *phydev,
 		mac = (const u8 *) ndev->dev_addr;
 
 		if (!is_valid_ether_addr(mac))
-			return -EFAULT;
+			return -EINVAL;
 
 		for (i = 0; i < 3; i++) {
 			phy_write(phydev, AT803X_MMD_ACCESS_CONTROL,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] PCI: Avoid bus reset if bridge itself is broken
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (44 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] crypto: crypto4xx - increase context and scatter ring buffer elements Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] scsi: cxgb4i: fix Tx skb leak Sasha Levin
                   ` (470 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: David Daney, Jan Glauber, Bjorn Helgaas, Sasha Levin

From: David Daney <david.daney@cavium.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 357027786f3523d26f42391aa4c075b8495e5d28 ]

When checking to see if a PCI bus can safely be reset, we previously
checked to see if any of the children had their PCI_DEV_FLAGS_NO_BUS_RESET
flag set.  Children marked with that flag are known not to behave well
after a bus reset.

Some PCIe root port bridges also do not behave well after a bus reset,
sometimes causing the devices behind the bridge to become unusable.

Add a check for PCI_DEV_FLAGS_NO_BUS_RESET being set in the bridge device
to allow these bridges to be flagged, and prevent their secondary buses
from being reset.

Signed-off-by: David Daney <david.daney@cavium.com>
[jglauber@cavium.com: fixed typo]
Signed-off-by: Jan Glauber <jglauber@cavium.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/pci/pci.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 409f895b5a3d..ffd8fe77b8ae 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -3651,6 +3651,10 @@ static bool pci_bus_resetable(struct pci_bus *bus)
 {
 	struct pci_dev *dev;
 
+
+	if (bus->self && (bus->self->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET))
+		return false;
+
 	list_for_each_entry(dev, &bus->devices, bus_list) {
 		if (dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET ||
 		    (dev->subordinate && !pci_bus_resetable(dev->subordinate)))
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] scsi: cxgb4i: fix Tx skb leak
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (45 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] PCI: Avoid bus reset if bridge itself is broken Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] PCI: Create SR-IOV virtfn/physfn links before attaching driver Sasha Levin
                   ` (469 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Varun Prakash, Martin K . Petersen, Sasha Levin

From: Varun Prakash <varun@chelsio.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9b3a081fb62158b50bcc90522ca2423017544367 ]

In case of connection reset Tx skb queue can have some skbs which are
not transmitted so purge Tx skb queue in release_offload_resources() to
avoid skb leak.

Signed-off-by: Varun Prakash <varun@chelsio.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/cxgbi/cxgb4i/cxgb4i.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c b/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c
index dd00e5fe4a5e..18f782bfc874 100644
--- a/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c
+++ b/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c
@@ -1332,6 +1332,7 @@ static void release_offload_resources(struct cxgbi_sock *csk)
 		csk, csk->state, csk->flags, csk->tid);
 
 	cxgbi_sock_free_cpl_skbs(csk);
+	cxgbi_sock_purge_write_queue(csk);
 	if (csk->wr_cred != csk->wr_max_cred) {
 		cxgbi_sock_purge_wr_queue(csk);
 		cxgbi_sock_reset_wr_list(csk);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] PCI: Create SR-IOV virtfn/physfn links before attaching driver
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (46 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] scsi: cxgb4i: fix Tx skb leak Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] igb: check memory allocation failure Sasha Levin
                   ` (468 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Stuart Hayes, Bjorn Helgaas, Sasha Levin

From: Stuart Hayes <stuart.w.hayes@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 27d6162944b9b34c32cd5841acd21786637ee743 ]

When creating virtual functions, create the "virtfn%u" and "physfn" links
in sysfs *before* attaching the driver instead of after.  When we attach
the driver to the new virtual network interface first, there is a race when
the driver attaches to the new sends out an "add" udev event, and the
network interface naming software (biosdevname or systemd, for example)
tries to look at these links.

Signed-off-by: Stuart Hayes <stuart.w.hayes@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/pci/iov.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index 089a1f41e44e..95db37cf5f08 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -156,7 +156,6 @@ static int virtfn_add(struct pci_dev *dev, int id, int reset)
 	pci_device_add(virtfn, virtfn->bus);
 	mutex_unlock(&iov->dev->sriov->lock);
 
-	pci_bus_add_device(virtfn);
 	sprintf(buf, "virtfn%u", id);
 	rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf);
 	if (rc)
@@ -167,6 +166,8 @@ static int virtfn_add(struct pci_dev *dev, int id, int reset)
 
 	kobject_uevent(&virtfn->dev.kobj, KOBJ_CHANGE);
 
+	pci_bus_add_device(virtfn);
+
 	return 0;
 
 failed2:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] igb: check memory allocation failure
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (47 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] PCI: Create SR-IOV virtfn/physfn links before attaching driver Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] ixgbe: fix use of uninitialized padding Sasha Levin
                   ` (467 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Christophe JAILLET, Jeff Kirsher, Sasha Levin

From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 18eb86362a52f0af933cc0fd5e37027317eb2d1c ]

Check memory allocation failures and return -ENOMEM in such cases, as
already done for other memory allocations in this function.

This avoids NULL pointers dereference.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Tested-by: Aaron Brown <aaron.f.brown@intel.com
Acked-by: PJ Waskiewicz <peter.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/intel/igb/igb_main.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index 34f15f56b2a1..2d54a9e40d7c 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -2998,6 +2998,8 @@ static int igb_sw_init(struct igb_adapter *adapter)
 	/* Setup and initialize a copy of the hw vlan table array */
 	adapter->shadow_vfta = kcalloc(E1000_VLAN_FILTER_TBL_SIZE, sizeof(u32),
 				       GFP_ATOMIC);
+	if (!adapter->shadow_vfta)
+		return -ENOMEM;
 
 	/* This call may decrease the number of queues */
 	if (igb_init_interrupt_scheme(adapter, true)) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ixgbe: fix use of uninitialized padding
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (48 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] igb: check memory allocation failure Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:22 ` [added to the 4.1 stable tree] PCI/AER: Report non-fatal errors only to the affected endpoint Sasha Levin
                   ` (466 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Emil Tantilov, Jeff Kirsher, Sasha Levin

From: Emil Tantilov <emil.s.tantilov@intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit dcfd6b839c998bc9838e2a47f44f37afbdf3099c ]

This patch is resolving Coverity hits where padding in a structure could
be used uninitialized.

- Initialize fwd_cmd.pad/2 before ixgbe_calculate_checksum()

- Initialize buffer.pad2/3 before ixgbe_hic_unlocked()

Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 4 ++--
 drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c   | 2 ++
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
index 06d8f3cfa099..14f789e72c29 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
@@ -3609,10 +3609,10 @@ s32 ixgbe_set_fw_drv_ver_generic(struct ixgbe_hw *hw, u8 maj, u8 min,
 	fw_cmd.ver_build = build;
 	fw_cmd.ver_sub = sub;
 	fw_cmd.hdr.checksum = 0;
-	fw_cmd.hdr.checksum = ixgbe_calculate_checksum((u8 *)&fw_cmd,
-				(FW_CEM_HDR_LEN + fw_cmd.hdr.buf_len));
 	fw_cmd.pad = 0;
 	fw_cmd.pad2 = 0;
+	fw_cmd.hdr.checksum = ixgbe_calculate_checksum((u8 *)&fw_cmd,
+				(FW_CEM_HDR_LEN + fw_cmd.hdr.buf_len));
 
 	for (i = 0; i <= FW_CEM_MAX_RETRIES; i++) {
 		ret_val = ixgbe_host_interface_command(hw, (u32 *)&fw_cmd,
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
index cf5cf819a6b8..0e1e63ee6c5e 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
@@ -224,6 +224,8 @@ static s32 ixgbe_read_ee_hostif_buffer_X550(struct ixgbe_hw *hw,
 		/* convert offset from words to bytes */
 		buffer.address = cpu_to_be32((offset + current_word) * 2);
 		buffer.length = cpu_to_be16(words_to_read * 2);
+		buffer.pad2 = 0;
+		buffer.pad3 = 0;
 
 		status = ixgbe_host_interface_command(hw, (u32 *)&buffer,
 						      sizeof(buffer),
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] PCI/AER: Report non-fatal errors only to the affected endpoint
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (49 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] ixgbe: fix use of uninitialized padding Sasha Levin
@ 2018-03-01 15:22 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] scsi: lpfc: PLOGI failures during NPIV testing Sasha Levin
                   ` (465 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:22 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Gabriele Paoloni, Dongdong Liu, Bjorn Helgaas, Sasha Levin

From: Gabriele Paoloni <gabriele.paoloni@huawei.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 86acc790717fb60fb51ea3095084e331d8711c74 ]

Previously, if an non-fatal error was reported by an endpoint, we
called report_error_detected() for the endpoint, every sibling on the
bus, and their descendents.  If any of them did not implement the
.error_detected() method, do_recovery() failed, leaving all these
devices unrecovered.

For example, the system described in the bugzilla below has two devices:

  0000:74:02.0 [19e5:a230] SAS controller, driver has .error_detected()
  0000:74:03.0 [19e5:a235] SATA controller, driver lacks .error_detected()

When a device such as 74:02.0 reported a non-fatal error, do_recovery()
failed because 74:03.0 lacked an .error_detected() method.  But per PCIe
r3.1, sec 6.2.2.2.2, such an error does not compromise the Link and
does not affect 74:03.0:

  Non-fatal errors are uncorrectable errors which cause a particular
  transaction to be unreliable but the Link is otherwise fully functional.
  Isolating Non-fatal from Fatal errors provides Requester/Receiver logic
  in a device or system management software the opportunity to recover from
  the error without resetting the components on the Link and disturbing
  other transactions in progress.  Devices not associated with the
  transaction in error are not impacted by the error.

Report non-fatal errors only to the endpoint that reported them.  We really
want to check for AER_NONFATAL here, but the current code structure doesn't
allow that.  Looking for pci_channel_io_normal is the best we can do now.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=197055
Fixes: 6c2b374d7485 ("PCI-Express AER implemetation: AER core and aerdriver")
Signed-off-by: Gabriele Paoloni <gabriele.paoloni@huawei.com>
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
[bhelgaas: changelog]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/pci/pcie/aer/aerdrv_core.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/pci/pcie/aer/aerdrv_core.c b/drivers/pci/pcie/aer/aerdrv_core.c
index b60a325234c5..cca4b4789ac4 100644
--- a/drivers/pci/pcie/aer/aerdrv_core.c
+++ b/drivers/pci/pcie/aer/aerdrv_core.c
@@ -360,7 +360,14 @@ static pci_ers_result_t broadcast_error_message(struct pci_dev *dev,
 		 * If the error is reported by an end point, we think this
 		 * error is related to the upstream link of the end point.
 		 */
-		pci_walk_bus(dev->bus, cb, &result_data);
+		if (state == pci_channel_io_normal)
+			/*
+			 * the error is non fatal so the bus is ok, just invoke
+			 * the callback for the function that logged the error.
+			 */
+			cb(dev, &result_data);
+		else
+			pci_walk_bus(dev->bus, cb, &result_data);
 	}
 
 	return result_data.result;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] scsi: lpfc: PLOGI failures during NPIV testing
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (50 preceding siblings ...)
  2018-03-01 15:22 ` [added to the 4.1 stable tree] PCI/AER: Report non-fatal errors only to the affected endpoint Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] scsi: lpfc: Fix secure firmware updates Sasha Levin
                   ` (464 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Dick Kennedy, James Smart, Martin K . Petersen, Sasha Levin

From: Dick Kennedy <dick.kennedy@broadcom.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e8bcf0ae4c0346fdc78ebefe0eefcaa6a6622d38 ]

Local Reject/Invalid RPI errors seen during discovery.

Temporary RPI cleanup was occurring regardless of SLI rev. It's only
necessary on SLI-4.

Adjust the test for whether cleanup is necessary.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/lpfc/lpfc_hbadisc.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index 2500f15d437f..574b1a9b2b32 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -4767,7 +4767,8 @@ lpfc_nlp_remove(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
 	lpfc_cancel_retry_delay_tmo(vport, ndlp);
 	if ((ndlp->nlp_flag & NLP_DEFER_RM) &&
 	    !(ndlp->nlp_flag & NLP_REG_LOGIN_SEND) &&
-	    !(ndlp->nlp_flag & NLP_RPI_REGISTERED)) {
+	    !(ndlp->nlp_flag & NLP_RPI_REGISTERED) &&
+	    phba->sli_rev != LPFC_SLI_REV4) {
 		/* For this case we need to cleanup the default rpi
 		 * allocated by the firmware.
 		 */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] scsi: lpfc: Fix secure firmware updates
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (51 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] scsi: lpfc: PLOGI failures during NPIV testing Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] fm10k: ensure we process SM mbx when processing VF mbx Sasha Levin
                   ` (463 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Dick Kennedy, James Smart, Martin K . Petersen, Sasha Levin

From: Dick Kennedy <dick.kennedy@broadcom.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 184fc2b9a8bcbda9c14d0a1e7fbecfc028c7702e ]

Firmware update fails with: status x17 add_status x56 on the final write

If multiple DMA buffers are used for the download, some firmware revs
have difficulty with signatures and crcs split across the dma buffer
boundaries.  Resolve by making all writes be a single 4k page in length.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/lpfc/lpfc_hw4.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h
index 3757a7399983..d7ee72ef99ed 100644
--- a/drivers/scsi/lpfc/lpfc_hw4.h
+++ b/drivers/scsi/lpfc/lpfc_hw4.h
@@ -2953,7 +2953,7 @@ struct lpfc_mbx_get_port_name {
 #define MB_CEQ_STATUS_QUEUE_FLUSHING		0x4
 #define MB_CQE_STATUS_DMA_FAILED		0x5
 
-#define LPFC_MBX_WR_CONFIG_MAX_BDE		8
+#define LPFC_MBX_WR_CONFIG_MAX_BDE		1
 struct lpfc_mbx_wr_object {
 	struct mbox_header header;
 	union {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] fm10k: ensure we process SM mbx when processing VF mbx
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (52 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] scsi: lpfc: Fix secure firmware updates Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] tcp: fix under-evaluated ssthresh in TCP Vegas Sasha Levin
                   ` (462 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jacob Keller, Jeff Kirsher, Sasha Levin

From: Jacob Keller <jacob.e.keller@intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 17a91809942ca32c70026d2d5ba3348a2c4fdf8f ]

When we process VF mailboxes, the driver is likely going to also queue
up messages to the switch manager. This process merely queues up the
FIFO, but doesn't actually begin the transmission process. Because we
hold the mailbox lock during this VF processing, the PF<->SM mailbox is
not getting processed at this time. Ensure that we actually process the
PF<->SM mailbox in between each PF<->VF mailbox.

This should ensure prompt transmission of the messages queued up after
each VF message is received and handled.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Krishneil Singh <krishneil.k.singh@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/intel/fm10k/fm10k_iov.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_iov.c b/drivers/net/ethernet/intel/fm10k/fm10k_iov.c
index 5b08e6284a3c..8d8fd5d49d60 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_iov.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_iov.c
@@ -126,6 +126,9 @@ s32 fm10k_iov_mbx(struct fm10k_intfc *interface)
 		struct fm10k_mbx_info *mbx = &vf_info->mbx;
 		u16 glort = vf_info->glort;
 
+		/* process the SM mailbox first to drain outgoing messages */
+		hw->mbx.ops.process(hw, &hw->mbx);
+
 		/* verify port mapping is valid, if not reset port */
 		if (vf_info->vf_flags && !fm10k_glort_valid_pf(hw, glort))
 			hw->iov.ops.reset_lport(hw, vf_info);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] rtc: set the alarm to the next expiring timer
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (54 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] tcp: fix under-evaluated ssthresh in TCP Vegas Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] alpha: fix build failures Sasha Levin
                   ` (460 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Alexandre Belloni, Sasha Levin

From: Alexandre Belloni <alexandre.belloni@free-electrons.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 74717b28cb32e1ad3c1042cafd76b264c8c0f68d ]

If there is any non expired timer in the queue, the RTC alarm is never set.
This is an issue when adding a timer that expires before the next non
expired timer.

Ensure the RTC alarm is set in that case.

Fixes: 2b2f5ff00f63 ("rtc: interface: ignore expired timers when enqueuing new timers")
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/rtc/interface.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c
index faa81ac2d481..038da40e4038 100644
--- a/drivers/rtc/interface.c
+++ b/drivers/rtc/interface.c
@@ -809,7 +809,7 @@ static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer)
 	}
 
 	timerqueue_add(&rtc->timerqueue, &timer->node);
-	if (!next) {
+	if (!next || ktime_before(timer->node.expires, next->expires)) {
 		struct rtc_wkalrm alarm;
 		int err;
 		alarm.time = rtc_ktime_to_tm(timer->node.expires);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] tcp: fix under-evaluated ssthresh in TCP Vegas
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (53 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] fm10k: ensure we process SM mbx when processing VF mbx Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] rtc: set the alarm to the next expiring timer Sasha Levin
                   ` (461 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Hoang Tran, Hoang Tran, David S . Miller, Sasha Levin

From: Hoang Tran <tranviethoang.vn@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit cf5d74b85ef40c202c76d90959db4d850f301b95 ]

With the commit 76174004a0f19785 (tcp: do not slow start when cwnd equals
ssthresh), the comparison to the reduced cwnd in tcp_vegas_ssthresh() would
under-evaluate the ssthresh.

Signed-off-by: Hoang Tran <hoang.tran@uclouvain.be>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv4/tcp_vegas.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/ipv4/tcp_vegas.c b/net/ipv4/tcp_vegas.c
index a6cea1d5e20d..33c0879612f5 100644
--- a/net/ipv4/tcp_vegas.c
+++ b/net/ipv4/tcp_vegas.c
@@ -158,7 +158,7 @@ EXPORT_SYMBOL_GPL(tcp_vegas_cwnd_event);
 
 static inline u32 tcp_vegas_ssthresh(struct tcp_sock *tp)
 {
-	return  min(tp->snd_ssthresh, tp->snd_cwnd-1);
+	return  min(tp->snd_ssthresh, tp->snd_cwnd);
 }
 
 static void tcp_vegas_cong_avoid(struct sock *sk, u32 ack, u32 acked)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ACPI: APEI / ERST: Fix missing error handling in erst_reader()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (56 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] alpha: fix build failures Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] crypto: mcryptd - protect the per-CPU queue with a lock Sasha Levin
                   ` (458 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Takashi Iwai, Rafael J . Wysocki, Sasha Levin

From: Takashi Iwai <tiwai@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit bb82e0b4a7e96494f0c1004ce50cec3d7b5fb3d1 ]

The commit f6f828513290 ("pstore: pass allocated memory region back to
caller") changed the check of the return value from erst_read() in
erst_reader() in the following way:

        if (len == -ENOENT)
                goto skip;
-       else if (len < 0) {
-               rc = -1;
+       else if (len < sizeof(*rcd)) {
+               rc = -EIO;
                goto out;

This introduced another bug: since the comparison with sizeof() is
cast to unsigned, a negative len value doesn't hit any longer.
As a result, when an error is returned from erst_read(), the code
falls through, and it may eventually lead to some weird thing like
memory corruption.

This patch adds the negative error value check more explicitly for
addressing the issue.

Fixes: f6f828513290 (pstore: pass allocated memory region back to caller)
Cc: All applicable <stable@vger.kernel.org>
Tested-by: Jerry Tang <jtang@suse.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Acked-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/acpi/apei/erst.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c
index ed65e9c4b5b0..ba4930c0e98c 100644
--- a/drivers/acpi/apei/erst.c
+++ b/drivers/acpi/apei/erst.c
@@ -1023,7 +1023,7 @@ static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count,
 	/* The record may be cleared by others, try read next record */
 	if (len == -ENOENT)
 		goto skip;
-	else if (len < sizeof(*rcd)) {
+	else if (len < 0 || len < sizeof(*rcd)) {
 		rc = -EIO;
 		goto out;
 	}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] alpha: fix build failures
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (55 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] rtc: set the alarm to the next expiring timer Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ACPI: APEI / ERST: Fix missing error handling in erst_reader() Sasha Levin
                   ` (459 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Sudip Mukherjee, Andrew Morton, Linus Torvalds, Sasha Levin

From: Sudip Mukherjee <sudipm.mukherjee@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8ee912dab95f1483156b6e994004bfcc3158d798 ]

The build of alpha allmodconfig is giving error:

  arch/alpha/include/asm/mmu_context.h: In function 'ev5_switch_mm':
  arch/alpha/include/asm/mmu_context.h:160:2: error:
	implicit declaration of function 'task_thread_info';
	did you mean 'init_thread_info'? [-Werror=implicit-function-declaration]

The file 'mmu_context.h' needed an extra header file.

Link: http://lkml.kernel.org/r/1505668810-7497-1-git-send-email-sudipm.mukherjee@gmail.com
Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Matt Turner <mattst88@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/alpha/include/asm/mmu_context.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/alpha/include/asm/mmu_context.h b/arch/alpha/include/asm/mmu_context.h
index 4c51c05333c6..4cafffa80e2c 100644
--- a/arch/alpha/include/asm/mmu_context.h
+++ b/arch/alpha/include/asm/mmu_context.h
@@ -7,6 +7,7 @@
  * Copyright (C) 1996, Linus Torvalds
  */
 
+#include <linux/sched.h>
 #include <asm/machvec.h>
 #include <asm/compiler.h>
 #include <asm-generic/mm_hooks.h>
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] crypto: mcryptd - protect the per-CPU queue with a lock
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (57 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ACPI: APEI / ERST: Fix missing error handling in erst_reader() Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] mfd: twl4030-audio: Fix sibling-node lookup Sasha Levin
                   ` (457 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Sebastian Andrzej Siewior, Herbert Xu, Sasha Levin

From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9abffc6f2efe46c3564c04312e52e07622d40e51 ]

mcryptd_enqueue_request() grabs the per-CPU queue struct and protects
access to it with disabled preemption. Then it schedules a worker on the
same CPU. The worker in mcryptd_queue_worker() guards access to the same
per-CPU variable with disabled preemption.

If we take CPU-hotplug into account then it is possible that between
queue_work_on() and the actual invocation of the worker the CPU goes
down and the worker will be scheduled on _another_ CPU. And here the
preempt_disable() protection does not work anymore. The easiest thing is
to add a spin_lock() to guard access to the list.

Another detail: mcryptd_queue_worker() is not processing more than
MCRYPTD_BATCH invocation in a row. If there are still items left, then
it will invoke queue_work() to proceed with more later. *I* would
suggest to simply drop that check because it does not use a system
workqueue and the workqueue is already marked as "CPU_INTENSIVE". And if
preemption is required then the scheduler should do it.
However if queue_work() is used then the work item is marked as CPU
unbound. That means it will try to run on the local CPU but it may run
on another CPU as well. Especially with CONFIG_DEBUG_WQ_FORCE_RR_CPU=y.
Again, the preempt_disable() won't work here but lock which was
introduced will help.
In order to keep work-item on the local CPU (and avoid RR) I changed it
to queue_work_on().

Cc: stable@vger.kernel.org
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 crypto/mcryptd.c         | 23 ++++++++++-------------
 include/crypto/mcryptd.h |  1 +
 2 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/crypto/mcryptd.c b/crypto/mcryptd.c
index cfb68a889ef6..cbe0135839df 100644
--- a/crypto/mcryptd.c
+++ b/crypto/mcryptd.c
@@ -80,6 +80,7 @@ static int mcryptd_init_queue(struct mcryptd_queue *queue,
 		pr_debug("cpu_queue #%d %p\n", cpu, queue->cpu_queue);
 		crypto_init_queue(&cpu_queue->queue, max_cpu_qlen);
 		INIT_WORK(&cpu_queue->work, mcryptd_queue_worker);
+		spin_lock_init(&cpu_queue->q_lock);
 	}
 	return 0;
 }
@@ -103,15 +104,16 @@ static int mcryptd_enqueue_request(struct mcryptd_queue *queue,
 	int cpu, err;
 	struct mcryptd_cpu_queue *cpu_queue;
 
-	cpu = get_cpu();
-	cpu_queue = this_cpu_ptr(queue->cpu_queue);
-	rctx->tag.cpu = cpu;
+	cpu_queue = raw_cpu_ptr(queue->cpu_queue);
+	spin_lock(&cpu_queue->q_lock);
+	cpu = smp_processor_id();
+	rctx->tag.cpu = smp_processor_id();
 
 	err = crypto_enqueue_request(&cpu_queue->queue, request);
 	pr_debug("enqueue request: cpu %d cpu_queue %p request %p\n",
 		 cpu, cpu_queue, request);
+	spin_unlock(&cpu_queue->q_lock);
 	queue_work_on(cpu, kcrypto_wq, &cpu_queue->work);
-	put_cpu();
 
 	return err;
 }
@@ -164,16 +166,11 @@ static void mcryptd_queue_worker(struct work_struct *work)
 	cpu_queue = container_of(work, struct mcryptd_cpu_queue, work);
 	i = 0;
 	while (i < MCRYPTD_BATCH || single_task_running()) {
-		/*
-		 * preempt_disable/enable is used to prevent
-		 * being preempted by mcryptd_enqueue_request()
-		 */
-		local_bh_disable();
-		preempt_disable();
+
+		spin_lock_bh(&cpu_queue->q_lock);
 		backlog = crypto_get_backlog(&cpu_queue->queue);
 		req = crypto_dequeue_request(&cpu_queue->queue);
-		preempt_enable();
-		local_bh_enable();
+		spin_unlock_bh(&cpu_queue->q_lock);
 
 		if (!req) {
 			mcryptd_opportunistic_flush();
@@ -188,7 +185,7 @@ static void mcryptd_queue_worker(struct work_struct *work)
 		++i;
 	}
 	if (cpu_queue->queue.qlen)
-		queue_work(kcrypto_wq, &cpu_queue->work);
+		queue_work_on(smp_processor_id(), kcrypto_wq, &cpu_queue->work);
 }
 
 void mcryptd_flusher(struct work_struct *__work)
diff --git a/include/crypto/mcryptd.h b/include/crypto/mcryptd.h
index c23ee1f7ee80..c2ff077168d3 100644
--- a/include/crypto/mcryptd.h
+++ b/include/crypto/mcryptd.h
@@ -26,6 +26,7 @@ static inline struct mcryptd_ahash *__mcryptd_ahash_cast(
 
 struct mcryptd_cpu_queue {
 	struct crypto_queue queue;
+	spinlock_t q_lock;
 	struct work_struct work;
 };
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mfd: twl4030-audio: Fix sibling-node lookup
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (58 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] crypto: mcryptd - protect the per-CPU queue with a lock Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] mfd: twl6040: Fix child-node lookup Sasha Levin
                   ` (456 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Johan Hovold, Lee Jones, Sasha Levin

From: Johan Hovold <johan@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 0a423772de2f3d7b00899987884f62f63ae00dcb ]

A helper purported to look up a child node based on its name was using
the wrong of-helper and ended up prematurely freeing the parent of-node
while leaking any matching node.

To make things worse, any matching node would not even necessarily be a
child node as the whole device tree was searched depth-first starting at
the parent.

Fixes: 019a7e6b7b31 ("mfd: twl4030-audio: Add DT support")
Cc: stable <stable@vger.kernel.org>     # 3.7
Signed-off-by: Johan Hovold <johan@kernel.org>
Acked-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/mfd/twl4030-audio.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/mfd/twl4030-audio.c b/drivers/mfd/twl4030-audio.c
index 0a1606480023..cc832d309599 100644
--- a/drivers/mfd/twl4030-audio.c
+++ b/drivers/mfd/twl4030-audio.c
@@ -159,13 +159,18 @@ unsigned int twl4030_audio_get_mclk(void)
 EXPORT_SYMBOL_GPL(twl4030_audio_get_mclk);
 
 static bool twl4030_audio_has_codec(struct twl4030_audio_data *pdata,
-			      struct device_node *node)
+			      struct device_node *parent)
 {
+	struct device_node *node;
+
 	if (pdata && pdata->codec)
 		return true;
 
-	if (of_find_node_by_name(node, "codec"))
+	node = of_get_child_by_name(parent, "codec");
+	if (node) {
+		of_node_put(node);
 		return true;
+	}
 
 	return false;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mfd: twl6040: Fix child-node lookup
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (59 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] mfd: twl4030-audio: Fix sibling-node lookup Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: rawmidi: Avoid racy info ioctl via ctl device Sasha Levin
                   ` (455 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Johan Hovold, Lee Jones, Sasha Levin

From: Johan Hovold <johan@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 85e9b13cbb130a3209f21bd7933933399c389ffe ]

Fix child-node lookup during probe, which ended up searching the whole
device tree depth-first starting at the parent rather than just matching
on its children.

To make things worse, the parent node was prematurely freed, while the
child node was leaked.

Note that the CONFIG_OF compile guard can be removed as
of_get_child_by_name() provides a !CONFIG_OF implementation which always
fails.

Cc: stable <stable@vger.kernel.org>     # 3.5
Fixes: 37e13cecaa14 ("mfd: Add support for Device Tree to twl6040")
Fixes: ca2cad6ae38e ("mfd: Fix twl6040 build failure")
Signed-off-by: Johan Hovold <johan@kernel.org>
Acked-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/mfd/twl6040.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/mfd/twl6040.c b/drivers/mfd/twl6040.c
index 6aacd205a774..aec1ab253f7f 100644
--- a/drivers/mfd/twl6040.c
+++ b/drivers/mfd/twl6040.c
@@ -97,12 +97,16 @@ static struct reg_default twl6040_patch[] = {
 };
 
 
-static bool twl6040_has_vibra(struct device_node *node)
+static bool twl6040_has_vibra(struct device_node *parent)
 {
-#ifdef CONFIG_OF
-	if (of_find_node_by_name(node, "vibra"))
+	struct device_node *node;
+
+	node = of_get_child_by_name(parent, "vibra");
+	if (node) {
+		of_node_put(node);
 		return true;
-#endif
+	}
+
 	return false;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: usb-audio: Fix the missing ctl name suffix at parsing SU
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (61 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: rawmidi: Avoid racy info ioctl via ctl device Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] PCI / PM: Force devices to D0 in pci_pm_thaw_noirq() Sasha Levin
                   ` (453 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Takashi Iwai, Sasha Levin

From: Takashi Iwai <tiwai@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5a15f289ee87eaf33f13f08a4909ec99d837ec5f ]

The commit 89b89d121ffc ("ALSA: usb-audio: Add check return value for
usb_string()") added the check of the return value from
snd_usb_copy_string_desc(), which is correct per se, but it introduced
a regression.  In the original code, either the "Clock Source",
"Playback Source" or "Capture Source" suffix is added after the
terminal string, while the commit changed it to add the suffix only
when get_term_name() is failing.  It ended up with an incorrect ctl
name like "PCM" instead of "PCM Capture Source".

Also, even the original code has a similar bug: when the ctl name is
generated from snd_usb_copy_string_desc() for the given iSelector, it
also doesn't put the suffix.

This patch addresses these issues: the suffix is added always when no
static mapping is found.  Also the patch tries to put more comments
and cleans up the if/else block for better readability in order to
avoid the same pitfall again.

Fixes: 89b89d121ffc ("ALSA: usb-audio: Add check return value for usb_string()")
Reported-and-tested-by: Mauro Santos <registo.mailling@gmail.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/usb/mixer.c | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
index 2ee449fbe55f..5455efc8cf63 100644
--- a/sound/usb/mixer.c
+++ b/sound/usb/mixer.c
@@ -2095,20 +2095,25 @@ static int parse_audio_selector_unit(struct mixer_build *state, int unitid,
 	kctl->private_value = (unsigned long)namelist;
 	kctl->private_free = usb_mixer_selector_elem_free;
 
-	nameid = uac_selector_unit_iSelector(desc);
+	/* check the static mapping table at first */
 	len = check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name));
-	if (len)
-		;
-	else if (nameid)
-		len = snd_usb_copy_string_desc(state, nameid, kctl->id.name,
-					 sizeof(kctl->id.name));
-	else
-		len = get_term_name(state, &state->oterm,
-				    kctl->id.name, sizeof(kctl->id.name), 0);
-
 	if (!len) {
-		strlcpy(kctl->id.name, "USB", sizeof(kctl->id.name));
+		/* no mapping ? */
+		/* if iSelector is given, use it */
+		nameid = uac_selector_unit_iSelector(desc);
+		if (nameid)
+			len = snd_usb_copy_string_desc(state, nameid,
+						       kctl->id.name,
+						       sizeof(kctl->id.name));
+		/* ... or pick up the terminal name at next */
+		if (!len)
+			len = get_term_name(state, &state->oterm,
+				    kctl->id.name, sizeof(kctl->id.name), 0);
+		/* ... or use the fixed string "USB" as the last resort */
+		if (!len)
+			strlcpy(kctl->id.name, "USB", sizeof(kctl->id.name));
 
+		/* and add the proper suffix */
 		if (desc->bDescriptorSubtype == UAC2_CLOCK_SELECTOR)
 			append_ctl_name(kctl, " Clock Source");
 		else if ((state->oterm.type & 0xff00) == 0x0100)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: rawmidi: Avoid racy info ioctl via ctl device
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (60 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] mfd: twl6040: Fix child-node lookup Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: usb-audio: Fix the missing ctl name suffix at parsing SU Sasha Levin
                   ` (454 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Takashi Iwai, Sasha Levin

From: Takashi Iwai <tiwai@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c1cfd9025cc394fd137a01159d74335c5ac978ce ]

The rawmidi also allows to obtaining the information via ioctl of ctl
API.  It means that user can issue an ioctl to the rawmidi device even
when it's being removed as long as the control device is present.
Although the code has some protection via the global register_mutex,
its range is limited to the search of the corresponding rawmidi
object, and the mutex is already unlocked at accessing the rawmidi
object.  This may lead to a use-after-free.

For avoiding it, this patch widens the application of register_mutex
to the whole snd_rawmidi_info_select() function.  We have another
mutex per rawmidi object, but this operation isn't very hot path, so
it shouldn't matter from the performance POV.

Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/core/rawmidi.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c
index b450a27588c8..16f8124b1150 100644
--- a/sound/core/rawmidi.c
+++ b/sound/core/rawmidi.c
@@ -579,15 +579,14 @@ static int snd_rawmidi_info_user(struct snd_rawmidi_substream *substream,
 	return 0;
 }
 
-int snd_rawmidi_info_select(struct snd_card *card, struct snd_rawmidi_info *info)
+static int __snd_rawmidi_info_select(struct snd_card *card,
+				     struct snd_rawmidi_info *info)
 {
 	struct snd_rawmidi *rmidi;
 	struct snd_rawmidi_str *pstr;
 	struct snd_rawmidi_substream *substream;
 
-	mutex_lock(&register_mutex);
 	rmidi = snd_rawmidi_search(card, info->device);
-	mutex_unlock(&register_mutex);
 	if (!rmidi)
 		return -ENXIO;
 	if (info->stream < 0 || info->stream > 1)
@@ -603,6 +602,16 @@ int snd_rawmidi_info_select(struct snd_card *card, struct snd_rawmidi_info *info
 	}
 	return -ENXIO;
 }
+
+int snd_rawmidi_info_select(struct snd_card *card, struct snd_rawmidi_info *info)
+{
+	int ret;
+
+	mutex_lock(&register_mutex);
+	ret = __snd_rawmidi_info_select(card, info);
+	mutex_unlock(&register_mutex);
+	return ret;
+}
 EXPORT_SYMBOL(snd_rawmidi_info_select);
 
 static int snd_rawmidi_info_select_user(struct snd_card *card,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] PCI / PM: Force devices to D0 in pci_pm_thaw_noirq()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (62 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: usb-audio: Fix the missing ctl name suffix at parsing SU Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] KVM: X86: Fix load RFLAGS w/o the fixed bit Sasha Levin
                   ` (452 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Rafael J. Wysocki, Sasha Levin

From: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5839ee7389e893a31e4e3c9cf17b50d14103c902 ]

It is incorrect to call pci_restore_state() for devices in low-power
states (D1-D3), as that involves the restoration of MSI setup which
requires MMIO to be operational and that is only the case in D0.

However, pci_pm_thaw_noirq() may do that if the driver's "freeze"
callbacks put the device into a low-power state, so fix it by making
it force devices into D0 via pci_set_power_state() instead of trying
to "update" their power state which is pointless.

Fixes: e60514bd4485 (PCI/PM: Restore the status of PCI devices across hibernation)
Cc: 4.13+ <stable@vger.kernel.org> # 4.13+
Reported-by: Thomas Gleixner <tglx@linutronix.de>
Reported-by: Maarten Lankhorst <dev@mblankhorst.nl>
Tested-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Maarten Lankhorst <dev@mblankhorst.nl>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/pci/pci-driver.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 98101c4118bb..1363fe636281 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -936,7 +936,12 @@ static int pci_pm_thaw_noirq(struct device *dev)
 	if (pci_has_legacy_pm_support(pci_dev))
 		return pci_legacy_resume_early(dev);
 
-	pci_update_current_state(pci_dev, PCI_D0);
+	/*
+	 * pci_restore_state() requires the device to be in D0 (because of MSI
+	 * restoration among other things), so force it into D0 in case the
+	 * driver's "freeze" callbacks put it into a low-power state directly.
+	 */
+	pci_set_power_state(pci_dev, PCI_D0);
 	pci_restore_state(pci_dev);
 
 	if (drv && drv->pm && drv->pm->thaw_noirq)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] KVM: X86: Fix load RFLAGS w/o the fixed bit
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (63 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] PCI / PM: Force devices to D0 in pci_pm_thaw_noirq() Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] parisc: Hide Diva-built-in serial aux and graphics card Sasha Levin
                   ` (451 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Wanpeng Li, Paolo Bonzini, Sasha Levin

From: Wanpeng Li <wanpeng.li@hotmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d73235d17ba63b53dc0e1051dbc10a1f1be91b71 ]

 *** Guest State ***
 CR0: actual=0x0000000000000030, shadow=0x0000000060000010, gh_mask=fffffffffffffff7
 CR4: actual=0x0000000000002050, shadow=0x0000000000000000, gh_mask=ffffffffffffe871
 CR3 = 0x00000000fffbc000
 RSP = 0x0000000000000000  RIP = 0x0000000000000000
 RFLAGS=0x00000000         DR7 = 0x0000000000000400
        ^^^^^^^^^^

The failed vmentry is triggered by the following testcase when ept=Y:

    #include <unistd.h>
    #include <sys/syscall.h>
    #include <string.h>
    #include <stdint.h>
    #include <linux/kvm.h>
    #include <fcntl.h>
    #include <sys/ioctl.h>

    long r[5];
    int main()
    {
    	r[2] = open("/dev/kvm", O_RDONLY);
    	r[3] = ioctl(r[2], KVM_CREATE_VM, 0);
    	r[4] = ioctl(r[3], KVM_CREATE_VCPU, 7);
    	struct kvm_regs regs = {
    		.rflags = 0,
    	};
    	ioctl(r[4], KVM_SET_REGS, &regs);
    	ioctl(r[4], KVM_RUN, 0);
    }

X86 RFLAGS bit 1 is fixed set, userspace can simply clearing bit 1
of RFLAGS with KVM_SET_REGS ioctl which results in vmentry fails.
This patch fixes it by oring X86_EFLAGS_FIXED during ioctl.

Cc: stable@vger.kernel.org
Suggested-by: Jim Mattson <jmattson@google.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Quan Xu <quan.xu0@gmail.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Cc: Jim Mattson <jmattson@google.com>
Cc: stable@vger.kernel.org
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kvm/x86.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 7840d42734a1..bd23b1cad80a 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -6737,7 +6737,7 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
 #endif
 
 	kvm_rip_write(vcpu, regs->rip);
-	kvm_set_rflags(vcpu, regs->rflags);
+	kvm_set_rflags(vcpu, regs->rflags | X86_EFLAGS_FIXED);
 
 	vcpu->arch.exception.pending = false;
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] parisc: Hide Diva-built-in serial aux and graphics card
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (64 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] KVM: X86: Fix load RFLAGS w/o the fixed bit Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] powerpc/perf: Dereference BHRB entries safely Sasha Levin
                   ` (450 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Helge Deller, Sasha Levin

From: Helge Deller <deller@gmx.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit bcf3f1752a622f1372d3252d0fea8855d89812e7 ]

Diva GSP card has built-in serial AUX port and ATI graphic card which simply
don't work and which both don't have external connectors.  User Guides even
mention that those devices shouldn't be used.
So, prevent that Linux drivers try to enable those devices.

Signed-off-by: Helge Deller <deller@gmx.de>
Cc: <stable@vger.kernel.org> # v3.0+
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/parisc/lba_pci.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/drivers/parisc/lba_pci.c b/drivers/parisc/lba_pci.c
index 3901ff66d0ee..2f7978204421 100644
--- a/drivers/parisc/lba_pci.c
+++ b/drivers/parisc/lba_pci.c
@@ -1654,3 +1654,36 @@ void lba_set_iregs(struct parisc_device *lba, u32 ibase, u32 imask)
 	iounmap(base_addr);
 }
 
+
+/*
+ * The design of the Diva management card in rp34x0 machines (rp3410, rp3440)
+ * seems rushed, so that many built-in components simply don't work.
+ * The following quirks disable the serial AUX port and the built-in ATI RV100
+ * Radeon 7000 graphics card which both don't have any external connectors and
+ * thus are useless, and even worse, e.g. the AUX port occupies ttyS0 and as
+ * such makes those machines the only PARISC machines on which we can't use
+ * ttyS0 as boot console.
+ */
+static void quirk_diva_ati_card(struct pci_dev *dev)
+{
+	if (dev->subsystem_vendor != PCI_VENDOR_ID_HP ||
+	    dev->subsystem_device != 0x1292)
+		return;
+
+	dev_info(&dev->dev, "Hiding Diva built-in ATI card");
+	dev->device = 0;
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RADEON_QY,
+	quirk_diva_ati_card);
+
+static void quirk_diva_aux_disable(struct pci_dev *dev)
+{
+	if (dev->subsystem_vendor != PCI_VENDOR_ID_HP ||
+	    dev->subsystem_device != 0x1291)
+		return;
+
+	dev_info(&dev->dev, "Hiding Diva built-in AUX serial device");
+	dev->device = 0;
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_AUX,
+	quirk_diva_aux_disable);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net: mvneta: clear interface link status on port disable
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (66 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] powerpc/perf: Dereference BHRB entries safely Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] tracing: Remove extra zeroing out of the ring buffer page Sasha Levin
                   ` (448 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Yelena Krivosheev, Gregory CLEMENT, David S . Miller, Sasha Levin

From: Yelena Krivosheev <yelena@marvell.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4423c18e466afdfb02a36ee8b9f901d144b3c607 ]

When port connect to PHY in polling mode (with poll interval 1 sec),
port and phy link status must be synchronize in order don't loss link
change event.

[gregory.clement@free-electrons.com: add fixes tag]
Cc: <stable@vger.kernel.org>
Fixes: c5aff18204da ("net: mvneta: driver for Marvell Armada 370/XP network unit")
Signed-off-by: Yelena Krivosheev <yelena@marvell.com>
Tested-by: Dmitri Epshtein <dima@marvell.com>
Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/marvell/mvneta.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
index 40161dacc9c7..744277984cb8 100644
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -858,6 +858,10 @@ static void mvneta_port_disable(struct mvneta_port *pp)
 	val &= ~MVNETA_GMAC0_PORT_ENABLE;
 	mvreg_write(pp, MVNETA_GMAC_CTRL_0, val);
 
+	pp->link = 0;
+	pp->duplex = -1;
+	pp->speed = 0;
+
 	udelay(200);
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc/perf: Dereference BHRB entries safely
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (65 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] parisc: Hide Diva-built-in serial aux and graphics card Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] net: mvneta: clear interface link status on port disable Sasha Levin
                   ` (449 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Ravi Bangoria, Michael Ellerman, Sasha Levin

From: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f41d84dddc66b164ac16acf3f584c276146f1c48 ]

It's theoretically possible that branch instructions recorded in
BHRB (Branch History Rolling Buffer) entries have already been
unmapped before they are processed by the kernel. Hence, trying to
dereference such memory location will result in a crash. eg:

    Unable to handle kernel paging request for data at address 0xd000000019c41764
    Faulting instruction address: 0xc000000000084a14
    NIP [c000000000084a14] branch_target+0x4/0x70
    LR [c0000000000eb828] record_and_restart+0x568/0x5c0
    Call Trace:
    [c0000000000eb3b4] record_and_restart+0xf4/0x5c0 (unreliable)
    [c0000000000ec378] perf_event_interrupt+0x298/0x460
    [c000000000027964] performance_monitor_exception+0x54/0x70
    [c000000000009ba4] performance_monitor_common+0x114/0x120

Fix it by deferefencing the addresses safely.

Fixes: 691231846ceb ("powerpc/perf: Fix setting of "to" addresses for BHRB")
Cc: stable@vger.kernel.org # v3.10+
Suggested-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Reviewed-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
[mpe: Use probe_kernel_read() which is clearer, tweak change log]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/perf/core-book3s.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
index d90893b76e7c..8a39319e7868 100644
--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -401,8 +401,12 @@ static __u64 power_pmu_bhrb_to(u64 addr)
 	int ret;
 	__u64 target;
 
-	if (is_kernel_addr(addr))
-		return branch_target((unsigned int *)addr);
+	if (is_kernel_addr(addr)) {
+		if (probe_kernel_read(&instr, (void *)addr, sizeof(instr)))
+			return 0;
+
+		return branch_target(&instr);
+	}
 
 	/* Userspace: need copy instruction here then translate it */
 	pagefault_disable();
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] tracing: Remove extra zeroing out of the ring buffer page
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (67 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] net: mvneta: clear interface link status on port disable Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] tracing: Fix possible double free on failure of allocating trace buffer Sasha Levin
                   ` (447 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Steven Rostedt (VMware), Sasha Levin

From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6b7e633fe9c24682df550e5311f47fb524701586 ]

The ring_buffer_read_page() takes care of zeroing out any extra data in the
page that it returns. There's no need to zero it out again from the
consumer. It was removed from one consumer of this function, but
read_buffers_splice_read() did not remove it, and worse, it contained a
nasty bug because of it.

Cc: stable@vger.kernel.org
Fixes: 2711ca237a084 ("ring-buffer: Move zeroing out excess in page to ring buffer code")
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/trace/trace.c | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 7a26798ffbf9..915fffdc5329 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -5719,7 +5719,7 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
 		.spd_release	= buffer_spd_release,
 	};
 	struct buffer_ref *ref;
-	int entries, size, i;
+	int entries, i;
 	ssize_t ret = 0;
 
 #ifdef CONFIG_TRACER_MAX_TRACE
@@ -5770,14 +5770,6 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
 			break;
 		}
 
-		/*
-		 * zero out any left over data, this is going to
-		 * user land.
-		 */
-		size = ring_buffer_page_len(ref->page);
-		if (size < PAGE_SIZE)
-			memset(ref->page + size, 0, PAGE_SIZE - size);
-
 		page = virt_to_page(ref->page);
 
 		spd.pages[i] = page;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] tracing: Fix possible double free on failure of allocating trace buffer
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (68 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] tracing: Remove extra zeroing out of the ring buffer page Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] tracing: Fix crash when it fails to alloc ring buffer Sasha Levin
                   ` (446 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Steven Rostedt (VMware), Sasha Levin

From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4397f04575c44e1440ec2e49b6302785c95fd2f8 ]

Jing Xia and Chunyan Zhang reported that on failing to allocate part of the
tracing buffer, memory is freed, but the pointers that point to them are not
initialized back to NULL, and later paths may try to free the freed memory
again. Jing and Chunyan fixed one of the locations that does this, but
missed a spot.

Link: http://lkml.kernel.org/r/20171226071253.8968-1-chunyan.zhang@spreadtrum.com

Cc: stable@vger.kernel.org
Fixes: 737223fbca3b1 ("tracing: Consolidate buffer allocation code")
Reported-by: Jing Xia <jing.xia@spreadtrum.com>
Reported-by: Chunyan Zhang <chunyan.zhang@spreadtrum.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/trace/trace.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 915fffdc5329..8437927928bc 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -6440,6 +6440,7 @@ allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size
 	buf->data = alloc_percpu(struct trace_array_cpu);
 	if (!buf->data) {
 		ring_buffer_free(buf->buffer);
+		buf->buffer = NULL;
 		return -ENOMEM;
 	}
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] tracing: Fix crash when it fails to alloc ring buffer
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (69 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] tracing: Fix possible double free on failure of allocating trace buffer Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ring-buffer: Mask out the info bits when returning buffer page length Sasha Levin
                   ` (445 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Jing Xia, Chunyan Zhang, Steven Rostedt, Sasha Levin

From: Jing Xia <jing.xia@spreadtrum.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 24f2aaf952ee0b59f31c3a18b8b36c9e3d3c2cf5 ]

Double free of the ring buffer happens when it fails to alloc new
ring buffer instance for max_buffer if TRACER_MAX_TRACE is configured.
The root cause is that the pointer is not set to NULL after the buffer
is freed in allocate_trace_buffers(), and the freeing of the ring
buffer is invoked again later if the pointer is not equal to Null,
as:

instance_mkdir()
    |-allocate_trace_buffers()
        |-allocate_trace_buffer(tr, &tr->trace_buffer...)
	|-allocate_trace_buffer(tr, &tr->max_buffer...)

          // allocate fail(-ENOMEM),first free
          // and the buffer pointer is not set to null
        |-ring_buffer_free(tr->trace_buffer.buffer)

       // out_free_tr
    |-free_trace_buffers()
        |-free_trace_buffer(&tr->trace_buffer);

	      //if trace_buffer is not null, free again
	    |-ring_buffer_free(buf->buffer)
                |-rb_free_cpu_buffer(buffer->buffers[cpu])
                    // ring_buffer_per_cpu is null, and
                    // crash in ring_buffer_per_cpu->pages

Link: http://lkml.kernel.org/r/20171226071253.8968-1-chunyan.zhang@spreadtrum.com

Cc: stable@vger.kernel.org
Fixes: 737223fbca3b1 ("tracing: Consolidate buffer allocation code")
Signed-off-by: Jing Xia <jing.xia@spreadtrum.com>
Signed-off-by: Chunyan Zhang <chunyan.zhang@spreadtrum.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/trace/trace.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 8437927928bc..d03f7eadc1f3 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -6464,7 +6464,9 @@ static int allocate_trace_buffers(struct trace_array *tr, int size)
 				    allocate_snapshot ? size : 1);
 	if (WARN_ON(ret)) {
 		ring_buffer_free(tr->trace_buffer.buffer);
+		tr->trace_buffer.buffer = NULL;
 		free_percpu(tr->trace_buffer.data);
+		tr->trace_buffer.data = NULL;
 		return -ENOMEM;
 	}
 	tr->allocated_snapshot = allocate_snapshot;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ring-buffer: Mask out the info bits when returning buffer page length
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (70 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] tracing: Fix crash when it fails to alloc ring buffer Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] iw_cxgb4: Only validate the MSN for successful completions Sasha Levin
                   ` (444 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Steven Rostedt (VMware), Sasha Levin

From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 45d8b80c2ac5d21cd1e2954431fb676bc2b1e099 ]

Two info bits were added to the "commit" part of the ring buffer data page
when returned to be consumed. This was to inform the user space readers that
events have been missed, and that the count may be stored at the end of the
page.

What wasn't handled, was the splice code that actually called a function to
return the length of the data in order to zero out the rest of the page
before sending it up to user space. These data bits were returned with the
length making the value negative, and that negative value was not checked.
It was compared to PAGE_SIZE, and only used if the size was less than
PAGE_SIZE. Luckily PAGE_SIZE is unsigned long which made the compare an
unsigned compare, meaning the negative size value did not end up causing a
large portion of memory to be randomly zeroed out.

Cc: stable@vger.kernel.org
Fixes: 66a8cb95ed040 ("ring-buffer: Add place holder recording of dropped events")
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/trace/ring_buffer.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 75c5271a56c2..40bc77080fad 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -332,6 +332,8 @@ EXPORT_SYMBOL_GPL(ring_buffer_event_data);
 /* Missed count stored at end */
 #define RB_MISSED_STORED	(1 << 30)
 
+#define RB_MISSED_FLAGS		(RB_MISSED_EVENTS|RB_MISSED_STORED)
+
 struct buffer_data_page {
 	u64		 time_stamp;	/* page time stamp */
 	local_t		 commit;	/* write committed index */
@@ -383,7 +385,9 @@ static void rb_init_page(struct buffer_data_page *bpage)
  */
 size_t ring_buffer_page_len(void *page)
 {
-	return local_read(&((struct buffer_data_page *)page)->commit)
+	struct buffer_data_page *bpage = page;
+
+	return (local_read(&bpage->commit) & ~RB_MISSED_FLAGS)
 		+ BUF_PAGE_HDR_SIZE;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] iw_cxgb4: Only validate the MSN for successful completions
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (71 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ring-buffer: Mask out the info bits when returning buffer page length Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ASoC: twl4030: fix child-node lookup Sasha Levin
                   ` (443 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Steve Wise, Jason Gunthorpe, Sasha Levin

From: Steve Wise <swise@opengridcomputing.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f55688c45442bc863f40ad678c638785b26cdce6 ]

If the RECV CQE is in error, ignore the MSN check.  This was causing
recvs that were flushed into the sw cq to be completed with the wrong
status (BAD_MSN instead of FLUSHED).

Cc: stable@vger.kernel.org
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/infiniband/hw/cxgb4/cq.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/hw/cxgb4/cq.c b/drivers/infiniband/hw/cxgb4/cq.c
index 68ddb3710215..c1e8c01f4ab3 100644
--- a/drivers/infiniband/hw/cxgb4/cq.c
+++ b/drivers/infiniband/hw/cxgb4/cq.c
@@ -581,10 +581,10 @@ static int poll_cq(struct t4_wq *wq, struct t4_cq *cq, struct t4_cqe *cqe,
 			ret = -EAGAIN;
 			goto skip_cqe;
 		}
-		if (unlikely((CQE_WRID_MSN(hw_cqe) != (wq->rq.msn)))) {
+		if (unlikely(!CQE_STATUS(hw_cqe) &&
+			     CQE_WRID_MSN(hw_cqe) != wq->rq.msn)) {
 			t4_set_wq_in_error(wq);
-			hw_cqe->header |= htonl(CQE_STATUS_V(T4_ERR_MSN));
-			goto proc_cqe;
+			hw_cqe->header |= cpu_to_be32(CQE_STATUS_V(T4_ERR_MSN));
 		}
 		goto proc_cqe;
 	}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/vm86/32: Switch to flush_tlb_mm_range() in mark_screen_rdonly()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (73 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ASoC: twl4030: fix child-node lookup Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm: Remove flush_tlb() and flush_tlb_current_task() Sasha Levin
                   ` (441 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9ccee2373f0658f234727700e619df097ba57023 ]

mark_screen_rdonly() is the last remaining caller of flush_tlb().
flush_tlb_mm_range() is potentially faster and isn't obsolete.

Compile-tested only because I don't know whether software that uses
this mechanism even exists.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Nadav Amit <namit@vmware.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Sasha Levin <sasha.levin@oracle.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/791a644076fc3577ba7f7b7cafd643cc089baa7d.1492844372.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kernel/vm86_32.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c
index fc9db6ef2a95..e0ae0a8ad5bd 100644
--- a/arch/x86/kernel/vm86_32.c
+++ b/arch/x86/kernel/vm86_32.c
@@ -194,7 +194,7 @@ static void mark_screen_rdonly(struct mm_struct *mm)
 	pte_unmap_unlock(pte, ptl);
 out:
 	up_write(&mm->mmap_sem);
-	flush_tlb();
+	flush_tlb_mm_range(mm, 0xA0000, 0xA0000 + 32*PAGE_SIZE, 0UL);
 }
 
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ASoC: twl4030: fix child-node lookup
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (72 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] iw_cxgb4: Only validate the MSN for successful completions Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/vm86/32: Switch to flush_tlb_mm_range() in mark_screen_rdonly() Sasha Levin
                   ` (442 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Johan Hovold, Mark Brown, Sasha Levin

From: Johan Hovold <johan@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 15f8c5f2415bfac73f33a14bcd83422bcbfb5298 ]

Fix child-node lookup during probe, which ended up searching the whole
device tree depth-first starting at the parent rather than just matching
on its children.

To make things worse, the parent codec node was also prematurely freed,
while the child node was leaked.

Fixes: 2d6d649a2e0f ("ASoC: twl4030: Support for DT booted kernel")
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/soc/codecs/twl4030.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c
index d04693e9cf9f..3a98c0910560 100644
--- a/sound/soc/codecs/twl4030.c
+++ b/sound/soc/codecs/twl4030.c
@@ -232,7 +232,7 @@ static struct twl4030_codec_data *twl4030_get_pdata(struct snd_soc_codec *codec)
 	struct twl4030_codec_data *pdata = dev_get_platdata(codec->dev);
 	struct device_node *twl4030_codec_node = NULL;
 
-	twl4030_codec_node = of_find_node_by_name(codec->dev->parent->of_node,
+	twl4030_codec_node = of_get_child_by_name(codec->dev->parent->of_node,
 						  "codec");
 
 	if (!pdata && twl4030_codec_node) {
@@ -241,9 +241,11 @@ static struct twl4030_codec_data *twl4030_get_pdata(struct snd_soc_codec *codec)
 				     GFP_KERNEL);
 		if (!pdata) {
 			dev_err(codec->dev, "Can not allocate memory\n");
+			of_node_put(twl4030_codec_node);
 			return NULL;
 		}
 		twl4030_setup_pdata_of(pdata, twl4030_codec_node);
+		of_node_put(twl4030_codec_node);
 	}
 
 	return pdata;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/mm: Remove flush_tlb() and flush_tlb_current_task()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (74 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/vm86/32: Switch to flush_tlb_mm_range() in mark_screen_rdonly() Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm: Make flush_tlb_mm_range() more predictable Sasha Levin
                   ` (440 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 29961b59a51f8c6838a26a45e871a7ed6771809b ]

I was trying to figure out what how flush_tlb_current_task() would
possibly work correctly if current->mm != current->active_mm, but I
realized I could spare myself the effort: it has no callers except
the unused flush_tlb() macro.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Nadav Amit <namit@vmware.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/e52d64c11690f85e9f1d69d7b48cc2269cd2e94b.1492844372.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/tlbflush.h |  9 ---------
 arch/x86/mm/tlb.c               | 17 -----------------
 2 files changed, 26 deletions(-)

diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
index 433eeaafe498..d9ee4674c235 100644
--- a/arch/x86/include/asm/tlbflush.h
+++ b/arch/x86/include/asm/tlbflush.h
@@ -197,7 +197,6 @@ static inline void __flush_tlb_one(unsigned long addr)
 /*
  * TLB flushing:
  *
- *  - flush_tlb() flushes the current mm struct TLBs
  *  - flush_tlb_all() flushes all processes TLBs
  *  - flush_tlb_mm(mm) flushes the specified mm context TLB's
  *  - flush_tlb_page(vma, vmaddr) flushes one page
@@ -229,11 +228,6 @@ static inline void flush_tlb_all(void)
 	__flush_tlb_all();
 }
 
-static inline void flush_tlb(void)
-{
-	__flush_tlb_up();
-}
-
 static inline void local_flush_tlb(void)
 {
 	__flush_tlb_up();
@@ -295,14 +289,11 @@ static inline void flush_tlb_kernel_range(unsigned long start,
 		flush_tlb_mm_range(vma->vm_mm, start, end, vma->vm_flags)
 
 extern void flush_tlb_all(void);
-extern void flush_tlb_current_task(void);
 extern void flush_tlb_page(struct vm_area_struct *, unsigned long);
 extern void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,
 				unsigned long end, unsigned long vmflag);
 extern void flush_tlb_kernel_range(unsigned long start, unsigned long end);
 
-#define flush_tlb()	flush_tlb_current_task()
-
 void native_flush_tlb_others(const struct cpumask *cpumask,
 				struct mm_struct *mm,
 				unsigned long start, unsigned long end);
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
index a1aa5f59e3ad..3c59d5bdbd6a 100644
--- a/arch/x86/mm/tlb.c
+++ b/arch/x86/mm/tlb.c
@@ -155,23 +155,6 @@ void native_flush_tlb_others(const struct cpumask *cpumask,
 	smp_call_function_many(cpumask, flush_tlb_func, &info, 1);
 }
 
-void flush_tlb_current_task(void)
-{
-	struct mm_struct *mm = current->mm;
-
-	preempt_disable();
-
-	count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ALL);
-
-	/* This is an implicit full barrier that synchronizes with switch_mm. */
-	local_flush_tlb();
-
-	trace_tlb_flush(TLB_LOCAL_SHOOTDOWN, TLB_FLUSH_ALL);
-	if (cpumask_any_but(mm_cpumask(mm), smp_processor_id()) < nr_cpu_ids)
-		flush_tlb_others(mm_cpumask(mm), mm, 0UL, TLB_FLUSH_ALL);
-	preempt_enable();
-}
-
 /*
  * See Documentation/x86/tlb.txt for details.  We choose 33
  * because it is large enough to cover the vast majority (at
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/mm: Make flush_tlb_mm_range() more predictable
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (75 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm: Remove flush_tlb() and flush_tlb_current_task() Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm: Disable PCID on 32-bit kernels Sasha Levin
                   ` (439 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ce27374fabf553153c3f53efcaa9bfab9216bd8c ]

I'm about to rewrite the function almost completely, but first I
want to get a functional change out of the way.  Currently, if
flush_tlb_mm_range() does not flush the local TLB at all, it will
never do individual page flushes on remote CPUs.  This seems to be
an accident, and preserving it will be awkward.  Let's change it
first so that any regressions in the rewrite will be easier to
bisect and so that the rewrite can attempt to change no visible
behavior at all.

The fix is simple: we can simply avoid short-circuiting the
calculation of base_pages_to_flush.

As a side effect, this also eliminates a potential corner case: if
tlb_single_page_flush_ceiling == TLB_FLUSH_ALL, flush_tlb_mm_range()
could have ended up flushing the entire address space one page at a
time.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Acked-by: Dave Hansen <dave.hansen@intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Nadav Amit <namit@vmware.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/4b29b771d9975aad7154c314534fec235618175a.1492844372.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/mm/tlb.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
index 3c59d5bdbd6a..cd6e3339b19e 100644
--- a/arch/x86/mm/tlb.c
+++ b/arch/x86/mm/tlb.c
@@ -175,6 +175,12 @@ void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,
 	unsigned long base_pages_to_flush = TLB_FLUSH_ALL;
 
 	preempt_disable();
+
+	if ((end != TLB_FLUSH_ALL) && !(vmflag & VM_HUGETLB))
+		base_pages_to_flush = (end - start) >> PAGE_SHIFT;
+	if (base_pages_to_flush > tlb_single_page_flush_ceiling)
+		base_pages_to_flush = TLB_FLUSH_ALL;
+
 	if (current->active_mm != mm) {
 		/* Synchronize with switch_mm. */
 		smp_mb();
@@ -191,15 +197,11 @@ void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,
 		goto out;
 	}
 
-	if ((end != TLB_FLUSH_ALL) && !(vmflag & VM_HUGETLB))
-		base_pages_to_flush = (end - start) >> PAGE_SHIFT;
-
 	/*
 	 * Both branches below are implicit full barriers (MOV to CR or
 	 * INVLPG) that synchronize with switch_mm.
 	 */
-	if (base_pages_to_flush > tlb_single_page_flush_ceiling) {
-		base_pages_to_flush = TLB_FLUSH_ALL;
+	if (base_pages_to_flush == TLB_FLUSH_ALL) {
 		count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ALL);
 		local_flush_tlb();
 	} else {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/mm: Disable PCID on 32-bit kernels
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (76 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm: Make flush_tlb_mm_range() more predictable Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm: Add the 'nopcid' boot option to turn off PCID Sasha Levin
                   ` (438 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit cba4671af7550e008f7a7835f06df0763825bf3e ]

32-bit kernels on new hardware will see PCID in CPUID, but PCID can
only be used in 64-bit mode.  Rather than making all PCID code
conditional, just disable the feature on 32-bit builds.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Reviewed-by: Nadav Amit <nadav.amit@gmail.com>
Reviewed-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Arjan van de Ven <arjan@linux.intel.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/2e391769192a4d31b808410c383c6bf0734bc6ea.1498751203.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/disabled-features.h | 4 +++-
 arch/x86/kernel/cpu/bugs.c               | 8 ++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/arch/x86/include/asm/disabled-features.h b/arch/x86/include/asm/disabled-features.h
index f226df064660..8b17c2ad1048 100644
--- a/arch/x86/include/asm/disabled-features.h
+++ b/arch/x86/include/asm/disabled-features.h
@@ -21,11 +21,13 @@
 # define DISABLE_K6_MTRR	(1<<(X86_FEATURE_K6_MTRR & 31))
 # define DISABLE_CYRIX_ARR	(1<<(X86_FEATURE_CYRIX_ARR & 31))
 # define DISABLE_CENTAUR_MCR	(1<<(X86_FEATURE_CENTAUR_MCR & 31))
+# define DISABLE_PCID		0
 #else
 # define DISABLE_VME		0
 # define DISABLE_K6_MTRR	0
 # define DISABLE_CYRIX_ARR	0
 # define DISABLE_CENTAUR_MCR	0
+# define DISABLE_PCID		(1<<(X86_FEATURE_PCID & 31))
 #endif /* CONFIG_X86_64 */
 
 /*
@@ -35,7 +37,7 @@
 #define DISABLED_MASK1	0
 #define DISABLED_MASK2	0
 #define DISABLED_MASK3	(DISABLE_CYRIX_ARR|DISABLE_CENTAUR_MCR|DISABLE_K6_MTRR)
-#define DISABLED_MASK4	0
+#define DISABLED_MASK4	(DISABLE_PCID)
 #define DISABLED_MASK5	0
 #define DISABLED_MASK6	0
 #define DISABLED_MASK7	0
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
index 03445346ee0a..4c7dd836304a 100644
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -65,6 +65,14 @@ static void __init check_fpu(void)
 
 void __init check_bugs(void)
 {
+#ifdef CONFIG_X86_32
+	/*
+	 * Regardless of whether PCID is enumerated, the SDM says
+	 * that it can't be enabled in 32-bit mode.
+	 */
+	setup_clear_cpu_cap(X86_FEATURE_PCID);
+#endif
+
 	identify_boot_cpu();
 #ifndef CONFIG_SMP
 	pr_info("CPU: ");
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/mm: Add the 'nopcid' boot option to turn off PCID
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (77 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm: Disable PCID on 32-bit kernels Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm: Enable CR4.PCIDE on supported systems Sasha Levin
                   ` (437 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 0790c9aad84901ca1bdc14746175549c8b5da215 ]

The parameter is only present on x86_64 systems to save a few bytes,
as PCID is always disabled on x86_32.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Reviewed-by: Nadav Amit <nadav.amit@gmail.com>
Reviewed-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Arjan van de Ven <arjan@linux.intel.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/8bbb2e65bcd249a5f18bfb8128b4689f08ac2b60.1498751203.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 Documentation/kernel-parameters.txt |  2 ++
 arch/x86/kernel/cpu/common.c        | 18 ++++++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index ceaab09a279e..97bc24101896 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -2471,6 +2471,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
 	nopat		[X86] Disable PAT (page attribute table extension of
 			pagetables) support.
 
+	nopcid		[X86-64] Disable the PCID cpu feature.
+
 	norandmaps	Don't use address space randomization.  Equivalent to
 			echo 0 > /proc/sys/kernel/randomize_va_space
 
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index 90ef802d9d90..843be1de5ddb 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -172,6 +172,24 @@ static int __init x86_xsaves_setup(char *s)
 }
 __setup("noxsaves", x86_xsaves_setup);
 
+#ifdef CONFIG_X86_64
+static int __init x86_pcid_setup(char *s)
+{
+	/* require an exact match without trailing characters */
+	if (strlen(s))
+		return 0;
+
+	/* do not emit a message if the feature is not present */
+	if (!boot_cpu_has(X86_FEATURE_PCID))
+		return 1;
+
+	setup_clear_cpu_cap(X86_FEATURE_PCID);
+	pr_info("nopcid: PCID feature disabled\n");
+	return 1;
+}
+__setup("nopcid", x86_pcid_setup);
+#endif
+
 static int __init x86_noinvpcid_setup(char *s)
 {
 	/* noinvpcid doesn't accept parameters */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/mm/64: Fix reboot interaction with CR4.PCIDE
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (79 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm: Enable CR4.PCIDE on supported systems Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] kbuild: add '-fno-stack-check' to kernel build options Sasha Levin
                   ` (435 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Thomas Gleixner, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 924c6b900cfdf376b07bccfd80e62b21914f8a5a ]

Trying to reboot via real mode fails with PCID on: long mode cannot
be exited while CR4.PCIDE is set.  (No, I have no idea why, but the
SDM and actual CPUs are in agreement here.)  The result is a GPF and
a hang instead of a reboot.

I didn't catch this in testing because neither my computer nor my VM
reboots this way.  I can trigger it with reboot=bios, though.

Fixes: 660da7c9228f ("x86/mm: Enable CR4.PCIDE on supported systems")
Reported-and-tested-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Andy Lutomirski <luto@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Borislav Petkov <bp@alien8.de>
Link: https://lkml.kernel.org/r/f1e7d965998018450a7a70c2823873686a8b21c0.1507524746.git.luto@kernel.org
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kernel/reboot.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
index 0549ae3cb332..d9ea27ec9dbd 100644
--- a/arch/x86/kernel/reboot.c
+++ b/arch/x86/kernel/reboot.c
@@ -93,6 +93,10 @@ void __noreturn machine_real_restart(unsigned int type)
 	load_cr3(initial_page_table);
 #else
 	write_cr3(real_mode_header->trampoline_pgd);
+
+	/* Exiting long mode will fail if CR4.PCIDE is set. */
+	if (static_cpu_has(X86_FEATURE_PCID))
+		cr4_clear_bits(X86_CR4_PCIDE);
 #endif
 
 	/* Jump to the identity-mapped low memory code */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/mm: Enable CR4.PCIDE on supported systems
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (78 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm: Add the 'nopcid' boot option to turn off PCID Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm/64: Fix reboot interaction with CR4.PCIDE Sasha Levin
                   ` (436 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 660da7c9228f685b2ebe664f9fd69aaddcc420b5 ]

We can use PCID if the CPU has PCID and PGE and we're not on Xen.

By itself, this has no effect. A followup patch will start using PCID.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Reviewed-by: Nadav Amit <nadav.amit@gmail.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Arjan van de Ven <arjan@linux.intel.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/6327ecd907b32f79d5aa0d466f04503bbec5df88.1498751203.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/tlbflush.h |  8 ++++++++
 arch/x86/kernel/cpu/common.c    | 22 ++++++++++++++++++++++
 arch/x86/xen/enlighten.c        |  6 ++++++
 3 files changed, 36 insertions(+)

diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
index d9ee4674c235..0b0718d48cb9 100644
--- a/arch/x86/include/asm/tlbflush.h
+++ b/arch/x86/include/asm/tlbflush.h
@@ -184,6 +184,14 @@ static inline void __flush_tlb_all(void)
 		__flush_tlb_global();
 	else
 		__flush_tlb();
+
+	/*
+	 * Note: if we somehow had PCID but not PGE, then this wouldn't work --
+	 * we'd end up flushing kernel translations for the current ASID but
+	 * we might fail to flush kernel translations for other cached ASIDs.
+	 *
+	 * To avoid this issue, we force PCID off if PGE is off.
+	 */
 }
 
 static inline void __flush_tlb_one(unsigned long addr)
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index 843be1de5ddb..f5647d238337 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -339,6 +339,25 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c)
 	}
 }
 
+static void setup_pcid(struct cpuinfo_x86 *c)
+{
+	if (cpu_has(c, X86_FEATURE_PCID)) {
+		if (cpu_has(c, X86_FEATURE_PGE)) {
+			cr4_set_bits(X86_CR4_PCIDE);
+		} else {
+			/*
+			 * flush_tlb_all(), as currently implemented, won't
+			 * work if PCID is on but PGE is not.  Since that
+			 * combination doesn't exist on real hardware, there's
+			 * no reason to try to fully support it, but it's
+			 * polite to avoid corrupting data if we're on
+			 * an improperly configured VM.
+			 */
+			clear_cpu_cap(c, X86_FEATURE_PCID);
+		}
+	}
+}
+
 /*
  * Some CPU features depend on higher CPUID levels, which may not always
  * be available due to CPUID level capping or broken virtualization
@@ -968,6 +987,9 @@ static void identify_cpu(struct cpuinfo_x86 *c)
 	setup_smep(c);
 	setup_smap(c);
 
+	/* Set up PCID */
+	setup_pcid(c);
+
 	/*
 	 * The vendor-specific functions might have changed features.
 	 * Now we do "generic changes."
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index 1ecae556d4ed..809730c09e2b 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -432,6 +432,12 @@ static void __init xen_init_cpuid_mask(void)
 		~((1 << X86_FEATURE_MTRR) |  /* disable MTRR */
 		  (1 << X86_FEATURE_ACC));   /* thermal monitoring */
 
+	/*
+	 * Xen PV would need some work to support PCID: CR3 handling as well
+	 * as xen_flush_tlb_others() would need updating.
+	 */
+	cpuid_leaf1_ecx_mask &= ~(1 << (X86_FEATURE_PCID % 32));  /* disable PCID */
+
 	if (!xen_initial_domain())
 		cpuid_leaf1_edx_mask &=
 			~((1 << X86_FEATURE_ACPI));  /* disable ACPI */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ipv4: igmp: guard against silly MTU values
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (81 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] kbuild: add '-fno-stack-check' to kernel build options Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ipv6: mcast: better catch silly mtu values Sasha Levin
                   ` (433 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Dumazet, David S . Miller, Sasha Levin

From: Eric Dumazet <edumazet@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b5476022bbada3764609368f03329ca287528dc8 ]

IPv4 stack reacts to changes to small MTU, by disabling itself under
RTNL.

But there is a window where threads not using RTNL can see a wrong
device mtu. This can lead to surprises, in igmp code where it is
assumed the mtu is suitable.

Fix this by reading device mtu once and checking IPv4 minimal MTU.

This patch adds missing IPV4_MIN_MTU define, to not abuse
ETH_MIN_MTU anymore.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/net/ip.h     |  2 ++
 net/ipv4/devinet.c   |  2 +-
 net/ipv4/igmp.c      | 24 +++++++++++++++---------
 net/ipv4/ip_tunnel.c |  4 ++--
 4 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/include/net/ip.h b/include/net/ip.h
index 117bde93995d..80b849cadc35 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -33,6 +33,8 @@
 #include <net/flow.h>
 #include <net/flow_keys.h>
 
+#define IPV4_MIN_MTU		68			/* RFC 791 */
+
 struct sock;
 
 struct inet_skb_parm {
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index a57056d87a43..1d2fba4aeeb2 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -1359,7 +1359,7 @@ static void inetdev_changename(struct net_device *dev, struct in_device *in_dev)
 
 static bool inetdev_valid_mtu(unsigned int mtu)
 {
-	return mtu >= 68;
+	return mtu >= IPV4_MIN_MTU;
 }
 
 static void inetdev_send_gratuitous_arp(struct net_device *dev,
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
index e2d3d62297ec..9e6f29c94a0d 100644
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
@@ -402,16 +402,17 @@ static int grec_size(struct ip_mc_list *pmc, int type, int gdel, int sdel)
 }
 
 static struct sk_buff *add_grhead(struct sk_buff *skb, struct ip_mc_list *pmc,
-	int type, struct igmpv3_grec **ppgr)
+	int type, struct igmpv3_grec **ppgr, unsigned int mtu)
 {
 	struct net_device *dev = pmc->interface->dev;
 	struct igmpv3_report *pih;
 	struct igmpv3_grec *pgr;
 
-	if (!skb)
-		skb = igmpv3_newpack(dev, dev->mtu);
-	if (!skb)
-		return NULL;
+	if (!skb) {
+		skb = igmpv3_newpack(dev, mtu);
+		if (!skb)
+			return NULL;
+	}
 	pgr = (struct igmpv3_grec *)skb_put(skb, sizeof(struct igmpv3_grec));
 	pgr->grec_type = type;
 	pgr->grec_auxwords = 0;
@@ -433,10 +434,15 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ip_mc_list *pmc,
 	struct igmpv3_grec *pgr = NULL;
 	struct ip_sf_list *psf, *psf_next, *psf_prev, **psf_list;
 	int scount, stotal, first, isquery, truncate;
+	unsigned int mtu;
 
 	if (pmc->multiaddr == IGMP_ALL_HOSTS)
 		return skb;
 
+	mtu = READ_ONCE(dev->mtu);
+	if (mtu < IPV4_MIN_MTU)
+		return skb;
+
 	isquery = type == IGMPV3_MODE_IS_INCLUDE ||
 		  type == IGMPV3_MODE_IS_EXCLUDE;
 	truncate = type == IGMPV3_MODE_IS_EXCLUDE ||
@@ -457,7 +463,7 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ip_mc_list *pmc,
 		    AVAILABLE(skb) < grec_size(pmc, type, gdeleted, sdeleted)) {
 			if (skb)
 				igmpv3_sendpack(skb);
-			skb = igmpv3_newpack(dev, dev->mtu);
+			skb = igmpv3_newpack(dev, mtu);
 		}
 	}
 	first = 1;
@@ -484,12 +490,12 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ip_mc_list *pmc,
 				pgr->grec_nsrcs = htons(scount);
 			if (skb)
 				igmpv3_sendpack(skb);
-			skb = igmpv3_newpack(dev, dev->mtu);
+			skb = igmpv3_newpack(dev, mtu);
 			first = 1;
 			scount = 0;
 		}
 		if (first) {
-			skb = add_grhead(skb, pmc, type, &pgr);
+			skb = add_grhead(skb, pmc, type, &pgr, mtu);
 			first = 0;
 		}
 		if (!skb)
@@ -523,7 +529,7 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ip_mc_list *pmc,
 				igmpv3_sendpack(skb);
 				skb = NULL; /* add_grhead will get a new one */
 			}
-			skb = add_grhead(skb, pmc, type, &pgr);
+			skb = add_grhead(skb, pmc, type, &pgr, mtu);
 		}
 	}
 	if (pgr)
diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
index 35080a708b59..169bf7d1d8ca 100644
--- a/net/ipv4/ip_tunnel.c
+++ b/net/ipv4/ip_tunnel.c
@@ -393,8 +393,8 @@ static int ip_tunnel_bind_dev(struct net_device *dev)
 	dev->needed_headroom = t_hlen + hlen;
 	mtu -= (dev->hard_header_len + t_hlen);
 
-	if (mtu < 68)
-		mtu = 68;
+	if (mtu < IPV4_MIN_MTU)
+		mtu = IPV4_MIN_MTU;
 
 	return mtu;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] kbuild: add '-fno-stack-check' to kernel build options
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (80 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm/64: Fix reboot interaction with CR4.PCIDE Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ipv4: igmp: guard against silly MTU values Sasha Levin
                   ` (434 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Linus Torvalds, Sasha Levin

From: Linus Torvalds <torvalds@linux-foundation.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 3ce120b16cc548472f80cf8644f90eda958cf1b6 ]

It appears that hardened gentoo enables "-fstack-check" by default for
gcc.

That doesn't work _at_all_ for the kernel, because the kernel stack
doesn't act like a user stack at all: it's much smaller, and it doesn't
auto-expand on use.  So the extra "probe one page below the stack" code
generated by -fstack-check just breaks the kernel in horrible ways,
causing infinite double faults etc.

[ I have to say, that the particular code gcc generates looks very
  stupid even for user space where it works, but that's a separate
  issue.  ]

Reported-and-tested-by: Alexander Tsoy <alexander@tsoy.me>
Reported-and-tested-by: Toralf Förster <toralf.foerster@gmx.de>
Cc: stable@kernel.org
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Jiri Kosina <jikos@kernel.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 Makefile | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Makefile b/Makefile
index a51938e99e37..3d26bf6853bf 100644
--- a/Makefile
+++ b/Makefile
@@ -772,6 +772,9 @@ KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign)
 # disable invalid "can't wrap" optimizations for signed / pointers
 KBUILD_CFLAGS	+= $(call cc-option,-fno-strict-overflow)
 
+# Make sure -fstack-check isn't enabled (like gentoo apparently did)
+KBUILD_CFLAGS  += $(call cc-option,-fno-stack-check,)
+
 # conserve stack if available
 KBUILD_CFLAGS   += $(call cc-option,-fconserve-stack)
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ipv6: mcast: better catch silly mtu values
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (82 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ipv4: igmp: guard against silly MTU values Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] net: igmp: Use correct source address on IGMPv3 reports Sasha Levin
                   ` (432 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Dumazet, David S . Miller, Sasha Levin

From: Eric Dumazet <edumazet@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b9b312a7a451e9c098921856e7cfbc201120e1a7 ]

syzkaller reported crashes in IPv6 stack [1]

Xin Long found that lo MTU was set to silly values.

IPv6 stack reacts to changes to small MTU, by disabling itself under
RTNL.

But there is a window where threads not using RTNL can see a wrong
device mtu. This can lead to surprises, in mld code where it is assumed
the mtu is suitable.

Fix this by reading device mtu once and checking IPv6 minimal MTU.

[1]
 skbuff: skb_over_panic: text:0000000010b86b8d len:196 put:20
 head:000000003b477e60 data:000000000e85441e tail:0xd4 end:0xc0 dev:lo
 ------------[ cut here ]------------
 kernel BUG at net/core/skbuff.c:104!
 invalid opcode: 0000 [#1] SMP KASAN
 Dumping ftrace buffer:
    (ftrace buffer empty)
 Modules linked in:
 CPU: 1 PID: 0 Comm: swapper/1 Not tainted 4.15.0-rc2-mm1+ #39
 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
 Google 01/01/2011
 RIP: 0010:skb_panic+0x15c/0x1f0 net/core/skbuff.c:100
 RSP: 0018:ffff8801db307508 EFLAGS: 00010286
 RAX: 0000000000000082 RBX: ffff8801c517e840 RCX: 0000000000000000
 RDX: 0000000000000082 RSI: 1ffff1003b660e61 RDI: ffffed003b660e95
 RBP: ffff8801db307570 R08: 1ffff1003b660e23 R09: 0000000000000000
 R10: 0000000000000000 R11: 0000000000000000 R12: ffffffff85bd4020
 R13: ffffffff84754ed2 R14: 0000000000000014 R15: ffff8801c4e26540
 FS:  0000000000000000(0000) GS:ffff8801db300000(0000) knlGS:0000000000000000
 CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
 CR2: 0000000000463610 CR3: 00000001c6698000 CR4: 00000000001406e0
 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
 Call Trace:
  <IRQ>
  skb_over_panic net/core/skbuff.c:109 [inline]
  skb_put+0x181/0x1c0 net/core/skbuff.c:1694
  add_grhead.isra.24+0x42/0x3b0 net/ipv6/mcast.c:1695
  add_grec+0xa55/0x1060 net/ipv6/mcast.c:1817
  mld_send_cr net/ipv6/mcast.c:1903 [inline]
  mld_ifc_timer_expire+0x4d2/0x770 net/ipv6/mcast.c:2448
  call_timer_fn+0x23b/0x840 kernel/time/timer.c:1320
  expire_timers kernel/time/timer.c:1357 [inline]
  __run_timers+0x7e1/0xb60 kernel/time/timer.c:1660
  run_timer_softirq+0x4c/0xb0 kernel/time/timer.c:1686
  __do_softirq+0x29d/0xbb2 kernel/softirq.c:285
  invoke_softirq kernel/softirq.c:365 [inline]
  irq_exit+0x1d3/0x210 kernel/softirq.c:405
  exiting_irq arch/x86/include/asm/apic.h:540 [inline]
  smp_apic_timer_interrupt+0x16b/0x700 arch/x86/kernel/apic/apic.c:1052
  apic_timer_interrupt+0xa9/0xb0 arch/x86/entry/entry_64.S:920

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Tested-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv6/mcast.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
index 9a63110b6548..47de89f57a80 100644
--- a/net/ipv6/mcast.c
+++ b/net/ipv6/mcast.c
@@ -1668,16 +1668,16 @@ static int grec_size(struct ifmcaddr6 *pmc, int type, int gdel, int sdel)
 }
 
 static struct sk_buff *add_grhead(struct sk_buff *skb, struct ifmcaddr6 *pmc,
-	int type, struct mld2_grec **ppgr)
+	int type, struct mld2_grec **ppgr, unsigned int mtu)
 {
-	struct net_device *dev = pmc->idev->dev;
 	struct mld2_report *pmr;
 	struct mld2_grec *pgr;
 
-	if (!skb)
-		skb = mld_newpack(pmc->idev, dev->mtu);
-	if (!skb)
-		return NULL;
+	if (!skb) {
+		skb = mld_newpack(pmc->idev, mtu);
+		if (!skb)
+			return NULL;
+	}
 	pgr = (struct mld2_grec *)skb_put(skb, sizeof(struct mld2_grec));
 	pgr->grec_type = type;
 	pgr->grec_auxwords = 0;
@@ -1700,10 +1700,15 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc,
 	struct mld2_grec *pgr = NULL;
 	struct ip6_sf_list *psf, *psf_next, *psf_prev, **psf_list;
 	int scount, stotal, first, isquery, truncate;
+	unsigned int mtu;
 
 	if (pmc->mca_flags & MAF_NOREPORT)
 		return skb;
 
+	mtu = READ_ONCE(dev->mtu);
+	if (mtu < IPV6_MIN_MTU)
+		return skb;
+
 	isquery = type == MLD2_MODE_IS_INCLUDE ||
 		  type == MLD2_MODE_IS_EXCLUDE;
 	truncate = type == MLD2_MODE_IS_EXCLUDE ||
@@ -1724,7 +1729,7 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc,
 		    AVAILABLE(skb) < grec_size(pmc, type, gdeleted, sdeleted)) {
 			if (skb)
 				mld_sendpack(skb);
-			skb = mld_newpack(idev, dev->mtu);
+			skb = mld_newpack(idev, mtu);
 		}
 	}
 	first = 1;
@@ -1751,12 +1756,12 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc,
 				pgr->grec_nsrcs = htons(scount);
 			if (skb)
 				mld_sendpack(skb);
-			skb = mld_newpack(idev, dev->mtu);
+			skb = mld_newpack(idev, mtu);
 			first = 1;
 			scount = 0;
 		}
 		if (first) {
-			skb = add_grhead(skb, pmc, type, &pgr);
+			skb = add_grhead(skb, pmc, type, &pgr, mtu);
 			first = 0;
 		}
 		if (!skb)
@@ -1790,7 +1795,7 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc,
 				mld_sendpack(skb);
 				skb = NULL; /* add_grhead will get a new one */
 			}
-			skb = add_grhead(skb, pmc, type, &pgr);
+			skb = add_grhead(skb, pmc, type, &pgr, mtu);
 		}
 	}
 	if (pgr)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netlink: Add netns check on taps
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (84 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] net: igmp: Use correct source address on IGMPv3 reports Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] tcp md5sig: Use skb's saddr when replying to an incoming segment Sasha Levin
                   ` (430 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Kevin Cernekee, David S . Miller, Sasha Levin

From: Kevin Cernekee <cernekee@chromium.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 93c647643b48f0131f02e45da3bd367d80443291 ]

Currently, a nlmon link inside a child namespace can observe systemwide
netlink activity.  Filter the traffic so that nlmon can only sniff
netlink messages from its own netns.

Test case:

    vpnns -- bash -c "ip link add nlmon0 type nlmon; \
                      ip link set nlmon0 up; \
                      tcpdump -i nlmon0 -q -w /tmp/nlmon.pcap -U" &
    sudo ip xfrm state add src 10.1.1.1 dst 10.1.1.2 proto esp \
        spi 0x1 mode transport \
        auth sha1 0x6162633132330000000000000000000000000000 \
        enc aes 0x00000000000000000000000000000000
    grep --binary abc123 /tmp/nlmon.pcap

Signed-off-by: Kevin Cernekee <cernekee@chromium.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netlink/af_netlink.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index 8daf2e44595a..66c340bc0553 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -259,6 +259,9 @@ static int __netlink_deliver_tap_skb(struct sk_buff *skb,
 	struct sock *sk = skb->sk;
 	int ret = -ENOMEM;
 
+	if (!net_eq(dev_net(dev), sock_net(sk)))
+		return 0;
+
 	dev_hold(dev);
 
 	if (netlink_skb_is_mmaped(skb) || is_vmalloc_addr(skb->head))
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net: igmp: Use correct source address on IGMPv3 reports
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (83 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ipv6: mcast: better catch silly mtu values Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] netlink: Add netns check on taps Sasha Levin
                   ` (431 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Kevin Cernekee, David S . Miller, Sasha Levin

From: Kevin Cernekee <cernekee@chromium.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a46182b00290839fa3fa159d54fd3237bd8669f0 ]

Closing a multicast socket after the final IPv4 address is deleted
from an interface can generate a membership report that uses the
source IP from a different interface.  The following test script, run
from an isolated netns, reproduces the issue:

    #!/bin/bash

    ip link add dummy0 type dummy
    ip link add dummy1 type dummy
    ip link set dummy0 up
    ip link set dummy1 up
    ip addr add 10.1.1.1/24 dev dummy0
    ip addr add 192.168.99.99/24 dev dummy1

    tcpdump -U -i dummy0 &
    socat EXEC:"sleep 2" \
        UDP4-DATAGRAM:239.101.1.68:8889,ip-add-membership=239.0.1.68:10.1.1.1 &

    sleep 1
    ip addr del 10.1.1.1/24 dev dummy0
    sleep 5
    kill %tcpdump

RFC 3376 specifies that the report must be sent with a valid IP source
address from the destination subnet, or from address 0.0.0.0.  Add an
extra check to make sure this is the case.

Signed-off-by: Kevin Cernekee <cernekee@chromium.org>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv4/igmp.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
index 9e6f29c94a0d..0e9d61bf8685 100644
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
@@ -89,6 +89,7 @@
 #include <linux/rtnetlink.h>
 #include <linux/times.h>
 #include <linux/pkt_sched.h>
+#include <linux/byteorder/generic.h>
 
 #include <net/net_namespace.h>
 #include <net/arp.h>
@@ -319,6 +320,23 @@ igmp_scount(struct ip_mc_list *pmc, int type, int gdeleted, int sdeleted)
 	return scount;
 }
 
+/* source address selection per RFC 3376 section 4.2.13 */
+static __be32 igmpv3_get_srcaddr(struct net_device *dev,
+				 const struct flowi4 *fl4)
+{
+	struct in_device *in_dev = __in_dev_get_rcu(dev);
+
+	if (!in_dev)
+		return htonl(INADDR_ANY);
+
+	for_ifa(in_dev) {
+		if (inet_ifa_match(fl4->saddr, ifa))
+			return fl4->saddr;
+	} endfor_ifa(in_dev);
+
+	return htonl(INADDR_ANY);
+}
+
 static struct sk_buff *igmpv3_newpack(struct net_device *dev, unsigned int mtu)
 {
 	struct sk_buff *skb;
@@ -366,7 +384,7 @@ static struct sk_buff *igmpv3_newpack(struct net_device *dev, unsigned int mtu)
 	pip->frag_off = htons(IP_DF);
 	pip->ttl      = 1;
 	pip->daddr    = fl4.daddr;
-	pip->saddr    = fl4.saddr;
+	pip->saddr    = igmpv3_get_srcaddr(dev, &fl4);
 	pip->protocol = IPPROTO_IGMP;
 	pip->tot_len  = 0;	/* filled in later */
 	ip_select_ident(net, skb, NULL);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] tcp md5sig: Use skb's saddr when replying to an incoming segment
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (85 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] netlink: Add netns check on taps Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] net: qmi_wwan: add Sierra EM7565 1199:9091 Sasha Levin
                   ` (429 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Christoph Paasch, David S . Miller, Sasha Levin

From: Christoph Paasch <cpaasch@apple.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 30791ac41927ebd3e75486f9504b6d2280463bf0 ]

The MD5-key that belongs to a connection is identified by the peer's
IP-address. When we are in tcp_v4(6)_reqsk_send_ack(), we are replying
to an incoming segment from tcp_check_req() that failed the seq-number
checks.

Thus, to find the correct key, we need to use the skb's saddr and not
the daddr.

This bug seems to have been there since quite a while, but probably got
unnoticed because the consequences are not catastrophic. We will call
tcp_v4_reqsk_send_ack only to send a challenge-ACK back to the peer,
thus the connection doesn't really fail.

Fixes: 9501f9722922 ("tcp md5sig: Let the caller pass appropriate key for tcp_v{4,6}_do_calc_md5_hash().")
Signed-off-by: Christoph Paasch <cpaasch@apple.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv4/tcp_ipv4.c | 2 +-
 net/ipv6/tcp_ipv6.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 2923f7f7932a..38e9dc5b735d 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -814,7 +814,7 @@ static void tcp_v4_reqsk_send_ack(struct sock *sk, struct sk_buff *skb,
 			tcp_time_stamp,
 			req->ts_recent,
 			0,
-			tcp_md5_do_lookup(sk, (union tcp_md5_addr *)&ip_hdr(skb)->daddr,
+			tcp_md5_do_lookup(sk, (union tcp_md5_addr *)&ip_hdr(skb)->saddr,
 					  AF_INET),
 			inet_rsk(req)->no_srccheck ? IP_REPLY_ARG_NOSRCCHECK : 0,
 			ip_hdr(skb)->tos);
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 2f0f1b415fbe..9f274781ba57 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -940,7 +940,7 @@ static void tcp_v6_reqsk_send_ack(struct sock *sk, struct sk_buff *skb,
 			tcp_rsk(req)->snt_isn + 1 : tcp_sk(sk)->snd_nxt,
 			tcp_rsk(req)->rcv_nxt, req->rcv_wnd,
 			tcp_time_stamp, req->ts_recent, sk->sk_bound_dev_if,
-			tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->daddr),
+			tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->saddr),
 			0, 0);
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net: qmi_wwan: add Sierra EM7565 1199:9091
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (86 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] tcp md5sig: Use skb's saddr when replying to an incoming segment Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] tg3: Fix rx hang on MTU change with 5717/5719 Sasha Levin
                   ` (428 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Sebastian Sjoholm, David S . Miller, Sasha Levin

From: Sebastian Sjoholm <ssjoholm@mac.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit aceef61ee56898cfa7b6960fb60b9326c3860441 ]

Sierra Wireless EM7565 is an Qualcomm MDM9x50 based M.2 modem.
The USB id is added to qmi_wwan.c to allow QMI communication
with the EM7565.

Signed-off-by: Sebastian Sjoholm <ssjoholm@mac.com>
Acked-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/usb/qmi_wwan.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index ca7f16ccbcd3..3d97fd391793 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -779,6 +779,7 @@ static const struct usb_device_id products[] = {
 	{QMI_FIXED_INTF(0x1199, 0x9079, 10)},	/* Sierra Wireless EM74xx */
 	{QMI_FIXED_INTF(0x1199, 0x907b, 8)},	/* Sierra Wireless EM74xx */
 	{QMI_FIXED_INTF(0x1199, 0x907b, 10)},	/* Sierra Wireless EM74xx */
+	{QMI_FIXED_INTF(0x1199, 0x9091, 8)},	/* Sierra Wireless EM7565 */
 	{QMI_FIXED_INTF(0x1bbb, 0x011e, 4)},	/* Telekom Speedstick LTE II (Alcatel One Touch L100V LTE) */
 	{QMI_FIXED_INTF(0x1bbb, 0x0203, 2)},	/* Alcatel L800MA */
 	{QMI_FIXED_INTF(0x2357, 0x0201, 4)},	/* TP-LINK HSUPA Modem MA180 */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] tg3: Fix rx hang on MTU change with 5717/5719
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (87 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] net: qmi_wwan: add Sierra EM7565 1199:9091 Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] sctp: Replace use of sockets_allocated with specified macro Sasha Levin
                   ` (427 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Brian King, David S . Miller, Sasha Levin

From: Brian King <brking@linux.vnet.ibm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 748a240c589824e9121befb1cba5341c319885bc ]

This fixes a hang issue seen when changing the MTU size from 1500 MTU
to 9000 MTU on both 5717 and 5719 chips. In discussion with Broadcom,
they've indicated that these chipsets have the same phy as the 57766
chipset, so the same workarounds apply. This has been tested by IBM
on both Power 8 and Power 9 systems as well as by Broadcom on x86
hardware and has been confirmed to resolve the hang issue.

Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/broadcom/tg3.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index f9713fe036ef..7b150085e34d 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -14228,7 +14228,9 @@ static int tg3_change_mtu(struct net_device *dev, int new_mtu)
 	/* Reset PHY, otherwise the read DMA engine will be in a mode that
 	 * breaks all requests to 256 bytes.
 	 */
-	if (tg3_asic_rev(tp) == ASIC_REV_57766)
+	if (tg3_asic_rev(tp) == ASIC_REV_57766 ||
+	    tg3_asic_rev(tp) == ASIC_REV_5717 ||
+	    tg3_asic_rev(tp) == ASIC_REV_5719)
 		reset_phy = true;
 
 	err = tg3_restart_hw(tp, reset_phy);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net: mvmdio: disable/unprepare clocks in EPROBE_DEFER case
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (89 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] sctp: Replace use of sockets_allocated with specified macro Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ipv4: Fix use-after-free when flushing FIB tables Sasha Levin
                   ` (425 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Tobias Jordan, David S . Miller, Sasha Levin

From: Tobias Jordan <Tobias.Jordan@elektrobit.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 589bf32f09852041fbd3b7ce1a9e703f95c230ba ]

add appropriate calls to clk_disable_unprepare() by jumping to out_mdio
in case orion_mdio_probe() returns -EPROBE_DEFER.

Found by Linux Driver Verification project (linuxtesting.org).

Fixes: 3d604da1e954 ("net: mvmdio: get and enable optional clock")
Signed-off-by: Tobias Jordan <Tobias.Jordan@elektrobit.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/marvell/mvmdio.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
index fc2fb25343f4..c122b3b99cd8 100644
--- a/drivers/net/ethernet/marvell/mvmdio.c
+++ b/drivers/net/ethernet/marvell/mvmdio.c
@@ -241,7 +241,8 @@ static int orion_mdio_probe(struct platform_device *pdev)
 			dev->regs + MVMDIO_ERR_INT_MASK);
 
 	} else if (dev->err_interrupt == -EPROBE_DEFER) {
-		return -EPROBE_DEFER;
+		ret = -EPROBE_DEFER;
+		goto out_mdio;
 	}
 
 	mutex_init(&dev->lock);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] sctp: Replace use of sockets_allocated with specified macro.
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (88 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] tg3: Fix rx hang on MTU change with 5717/5719 Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] net: mvmdio: disable/unprepare clocks in EPROBE_DEFER case Sasha Levin
                   ` (426 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Tonghao Zhang, Tonghao Zhang, David S . Miller, Sasha Levin

From: Tonghao Zhang <xiangxia.m.yue@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8cb38a602478e9f806571f6920b0a3298aabf042 ]

The patch(180d8cd942ce) replaces all uses of struct sock fields'
memory_pressure, memory_allocated, sockets_allocated, and sysctl_mem
to accessor macros. But the sockets_allocated field of sctp sock is
not replaced at all. Then replace it now for unifying the code.

Fixes: 180d8cd942ce ("foundations of per-cgroup memory pressure controlling.")
Cc: Glauber Costa <glommer@parallels.com>
Signed-off-by: Tonghao Zhang <zhangtonghao@didichuxing.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/sctp/socket.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index 946d1c28f93f..c45a33d04fca 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -4163,7 +4163,7 @@ static int sctp_init_sock(struct sock *sk)
 	SCTP_DBG_OBJCNT_INC(sock);
 
 	local_bh_disable();
-	percpu_counter_inc(&sctp_sockets_allocated);
+	sk_sockets_allocated_inc(sk);
 	sock_prot_inuse_add(net, sk->sk_prot, 1);
 
 	/* Nothing can fail after this block, otherwise
@@ -4207,7 +4207,7 @@ static void sctp_destroy_sock(struct sock *sk)
 	}
 	sctp_endpoint_free(sp->ep);
 	local_bh_disable();
-	percpu_counter_dec(&sctp_sockets_allocated);
+	sk_sockets_allocated_dec(sk);
 	sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
 	local_bh_enable();
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ipv4: Fix use-after-free when flushing FIB tables
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (90 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] net: mvmdio: disable/unprepare clocks in EPROBE_DEFER case Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] sock: free skb in skb_complete_tx_timestamp on error Sasha Levin
                   ` (424 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Ido Schimmel, David S . Miller, Sasha Levin

From: Ido Schimmel <idosch@mellanox.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b4681c2829e24943aadd1a7bb3a30d41d0a20050 ]

Since commit 0ddcf43d5d4a ("ipv4: FIB Local/MAIN table collapse") the
local table uses the same trie allocated for the main table when custom
rules are not in use.

When a net namespace is dismantled, the main table is flushed and freed
(via an RCU callback) before the local table. In case the callback is
invoked before the local table is iterated, a use-after-free can occur.

Fix this by iterating over the FIB tables in reverse order, so that the
main table is always freed after the local table.

v3: Reworded comment according to Alex's suggestion.
v2: Add a comment to make the fix more explicit per Dave's and Alex's
feedback.

Fixes: 0ddcf43d5d4a ("ipv4: FIB Local/MAIN table collapse")
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Reported-by: Fengguang Wu <fengguang.wu@intel.com>
Acked-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv4/fib_frontend.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index a8db70b7fe45..5095491e6141 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -1181,7 +1181,7 @@ static int __net_init ip_fib_net_init(struct net *net)
 
 static void ip_fib_net_exit(struct net *net)
 {
-	unsigned int i;
+	int i;
 
 	rtnl_lock();
 #ifdef CONFIG_IP_MULTIPLE_TABLES
@@ -1189,7 +1189,12 @@ static void ip_fib_net_exit(struct net *net)
 	RCU_INIT_POINTER(net->ipv4.fib_main, NULL);
 	RCU_INIT_POINTER(net->ipv4.fib_default, NULL);
 #endif
-	for (i = 0; i < FIB_TABLE_HASHSZ; i++) {
+	/* Destroy the tables in reverse order to guarantee that the
+	 * local table, ID 255, is destroyed before the main table, ID
+	 * 254. This is necessary as the local table may contain
+	 * references to data contained in the main table.
+	 */
+	for (i = FIB_TABLE_HASHSZ - 1; i >= 0; i--) {
 		struct hlist_head *head = &net->ipv4.fib_table_hash[i];
 		struct hlist_node *tmp;
 		struct fib_table *tb;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usbip: fix usbip bind writing random string after command in match_busid
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (92 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] sock: free skb in skb_complete_tx_timestamp on error Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] usbip: stub: stop printing kernel pointer addresses in messages Sasha Levin
                   ` (422 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Juan Zea, Greg Kroah-Hartman, Sasha Levin

From: Juan Zea <juan.zea@qindel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 544c4605acc5ae4afe7dd5914147947db182f2fb ]

usbip bind writes commands followed by random string when writing to
match_busid attribute in sysfs, caused by using full variable size
instead of string length.

Signed-off-by: Juan Zea <juan.zea@qindel.com>
Acked-by: Shuah Khan <shuahkh@osg.samsung.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 tools/usb/usbip/src/utils.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/tools/usb/usbip/src/utils.c b/tools/usb/usbip/src/utils.c
index 2b3d6d235015..3d7b42e77299 100644
--- a/tools/usb/usbip/src/utils.c
+++ b/tools/usb/usbip/src/utils.c
@@ -30,6 +30,7 @@ int modify_match_busid(char *busid, int add)
 	char command[SYSFS_BUS_ID_SIZE + 4];
 	char match_busid_attr_path[SYSFS_PATH_MAX];
 	int rc;
+	int cmd_size;
 
 	snprintf(match_busid_attr_path, sizeof(match_busid_attr_path),
 		 "%s/%s/%s/%s/%s/%s", SYSFS_MNT_PATH, SYSFS_BUS_NAME,
@@ -37,12 +38,14 @@ int modify_match_busid(char *busid, int add)
 		 attr_name);
 
 	if (add)
-		snprintf(command, SYSFS_BUS_ID_SIZE + 4, "add %s", busid);
+		cmd_size = snprintf(command, SYSFS_BUS_ID_SIZE + 4, "add %s",
+				    busid);
 	else
-		snprintf(command, SYSFS_BUS_ID_SIZE + 4, "del %s", busid);
+		cmd_size = snprintf(command, SYSFS_BUS_ID_SIZE + 4, "del %s",
+				    busid);
 
 	rc = write_sysfs_attribute(match_busid_attr_path, command,
-				   sizeof(command));
+				   cmd_size);
 	if (rc < 0) {
 		dbg("failed to write match_busid: %s", strerror(errno));
 		return -1;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] sock: free skb in skb_complete_tx_timestamp on error
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (91 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ipv4: Fix use-after-free when flushing FIB tables Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] usbip: fix usbip bind writing random string after command in match_busid Sasha Levin
                   ` (423 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Willem de Bruijn, David S . Miller, Sasha Levin

From: Willem de Bruijn <willemb@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 35b99dffc3f710cafceee6c8c6ac6a98eb2cb4bf ]

skb_complete_tx_timestamp must ingest the skb it is passed. Call
kfree_skb if the skb cannot be enqueued.

Fixes: b245be1f4db1 ("net-timestamp: no-payload only sysctl")
Fixes: 9ac25fc06375 ("net: fix socket refcounting in skb_complete_tx_timestamp()")
Reported-by: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: Willem de Bruijn <willemb@google.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/core/skbuff.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 97a1fa140a9b..853e82075ebd 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -3694,7 +3694,7 @@ void skb_complete_tx_timestamp(struct sk_buff *skb,
 	struct sock *sk = skb->sk;
 
 	if (!skb_may_tx_timestamp(sk, false))
-		return;
+		goto err;
 
 	/* Take a reference to prevent skb_orphan() from freeing the socket,
 	 * but only if the socket refcount is not zero.
@@ -3703,7 +3703,11 @@ void skb_complete_tx_timestamp(struct sk_buff *skb,
 		*skb_hwtstamps(skb) = *hwtstamps;
 		__skb_complete_tx_timestamp(skb, sk, SCM_TSTAMP_SND);
 		sock_put(sk);
+		return;
 	}
+
+err:
+	kfree_skb(skb);
 }
 EXPORT_SYMBOL_GPL(skb_complete_tx_timestamp);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usbip: vhci: stop printing kernel pointer addresses in messages
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (94 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] usbip: stub: stop printing kernel pointer addresses in messages Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] USB: serial: option: add support for Telit ME910 PID 0x1101 Sasha Levin
                   ` (420 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Shuah Khan, Greg Kroah-Hartman, Sasha Levin

From: Shuah Khan <shuahkh@osg.samsung.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8272d099d05f7ab2776cf56a2ab9f9443be18907 ]

Remove and/or change debug, info. and error messages to not print
kernel pointer addresses.

Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/usbip/vhci_hcd.c | 10 ----------
 drivers/usb/usbip/vhci_rx.c  | 23 +++++++++++------------
 drivers/usb/usbip/vhci_tx.c  |  3 ++-
 3 files changed, 13 insertions(+), 23 deletions(-)

diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c
index e9ef1eccdace..1cca48d19c46 100644
--- a/drivers/usb/usbip/vhci_hcd.c
+++ b/drivers/usb/usbip/vhci_hcd.c
@@ -462,9 +462,6 @@ static int vhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
 	int ret = 0;
 	struct vhci_device *vdev;
 
-	usbip_dbg_vhci_hc("enter, usb_hcd %p urb %p mem_flags %d\n",
-			  hcd, urb, mem_flags);
-
 	/* patch to usb_sg_init() is in 2.5.60 */
 	BUG_ON(!urb->transfer_buffer && urb->transfer_buffer_length);
 
@@ -620,8 +617,6 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
 	struct vhci_priv *priv;
 	struct vhci_device *vdev;
 
-	pr_info("dequeue a urb %p\n", urb);
-
 	spin_lock(&the_controller->lock);
 
 	priv = urb->hcpriv;
@@ -649,7 +644,6 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
 		/* tcp connection is closed */
 		spin_lock(&vdev->priv_lock);
 
-		pr_info("device %p seems to be disconnected\n", vdev);
 		list_del(&priv->list);
 		kfree(priv);
 		urb->hcpriv = NULL;
@@ -661,8 +655,6 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
 		 * vhci_rx will receive RET_UNLINK and give back the URB.
 		 * Otherwise, we give back it here.
 		 */
-		pr_info("gives back urb %p\n", urb);
-
 		usb_hcd_unlink_urb_from_ep(hcd, urb);
 
 		spin_unlock(&the_controller->lock);
@@ -691,8 +683,6 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
 
 		unlink->unlink_seqnum = priv->seqnum;
 
-		pr_info("device %p seems to be still connected\n", vdev);
-
 		/* send cmd_unlink and try to cancel the pending URB in the
 		 * peer */
 		list_add_tail(&unlink->list, &vdev->unlink_tx);
diff --git a/drivers/usb/usbip/vhci_rx.c b/drivers/usb/usbip/vhci_rx.c
index 00e4a54308e4..bc4eb0855314 100644
--- a/drivers/usb/usbip/vhci_rx.c
+++ b/drivers/usb/usbip/vhci_rx.c
@@ -37,24 +37,23 @@ struct urb *pickup_urb_and_free_priv(struct vhci_device *vdev, __u32 seqnum)
 		urb = priv->urb;
 		status = urb->status;
 
-		usbip_dbg_vhci_rx("find urb %p vurb %p seqnum %u\n",
-				urb, priv, seqnum);
+		usbip_dbg_vhci_rx("find urb seqnum %u\n", seqnum);
 
 		switch (status) {
 		case -ENOENT:
 			/* fall through */
 		case -ECONNRESET:
-			dev_info(&urb->dev->dev,
-				 "urb %p was unlinked %ssynchronuously.\n", urb,
-				 status == -ENOENT ? "" : "a");
+			dev_dbg(&urb->dev->dev,
+				 "urb seq# %u was unlinked %ssynchronuously\n",
+				 seqnum, status == -ENOENT ? "" : "a");
 			break;
 		case -EINPROGRESS:
 			/* no info output */
 			break;
 		default:
-			dev_info(&urb->dev->dev,
-				 "urb %p may be in a error, status %d\n", urb,
-				 status);
+			dev_dbg(&urb->dev->dev,
+				 "urb seq# %u may be in a error, status %d\n",
+				 seqnum, status);
 		}
 
 		list_del(&priv->list);
@@ -78,8 +77,8 @@ static void vhci_recv_ret_submit(struct vhci_device *vdev,
 	spin_unlock(&vdev->priv_lock);
 
 	if (!urb) {
-		pr_err("cannot find a urb of seqnum %u\n", pdu->base.seqnum);
-		pr_info("max seqnum %d\n",
+		pr_err("cannot find a urb of seqnum %u max seqnum %d\n",
+			pdu->base.seqnum,
 			atomic_read(&the_controller->seqnum));
 		usbip_event_add(ud, VDEV_EVENT_ERROR_TCP);
 		return;
@@ -102,7 +101,7 @@ static void vhci_recv_ret_submit(struct vhci_device *vdev,
 	if (usbip_dbg_flag_vhci_rx)
 		usbip_dump_urb(urb);
 
-	usbip_dbg_vhci_rx("now giveback urb %p\n", urb);
+	usbip_dbg_vhci_rx("now giveback urb %u\n", pdu->base.seqnum);
 
 	spin_lock(&the_controller->lock);
 	usb_hcd_unlink_urb_from_ep(vhci_to_hcd(the_controller), urb);
@@ -165,7 +164,7 @@ static void vhci_recv_ret_unlink(struct vhci_device *vdev,
 		pr_info("the urb (seqnum %d) was already given back\n",
 			pdu->base.seqnum);
 	} else {
-		usbip_dbg_vhci_rx("now giveback urb %p\n", urb);
+		usbip_dbg_vhci_rx("now giveback urb %d\n", pdu->base.seqnum);
 
 		/* If unlink is successful, status is -ECONNRESET */
 		urb->status = pdu->u.ret_unlink.status;
diff --git a/drivers/usb/usbip/vhci_tx.c b/drivers/usb/usbip/vhci_tx.c
index 409fd99f3257..3c5796c8633a 100644
--- a/drivers/usb/usbip/vhci_tx.c
+++ b/drivers/usb/usbip/vhci_tx.c
@@ -82,7 +82,8 @@ static int vhci_send_cmd_submit(struct vhci_device *vdev)
 		memset(&msg, 0, sizeof(msg));
 		memset(&iov, 0, sizeof(iov));
 
-		usbip_dbg_vhci_tx("setup txdata urb %p\n", urb);
+		usbip_dbg_vhci_tx("setup txdata urb seqnum %lu\n",
+				  priv->seqnum);
 
 		/* 1. setup usbip_header */
 		setup_cmd_submit_pdu(&pdu_header, urb);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usbip: stub: stop printing kernel pointer addresses in messages
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (93 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] usbip: fix usbip bind writing random string after command in match_busid Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] usbip: vhci: " Sasha Levin
                   ` (421 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Shuah Khan, Greg Kroah-Hartman, Sasha Levin

From: Shuah Khan <shuahkh@osg.samsung.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 248a22044366f588d46754c54dfe29ffe4f8b4df ]

Remove and/or change debug, info. and error messages to not print
kernel pointer addresses.

Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/usbip/stub_main.c | 5 +++--
 drivers/usb/usbip/stub_rx.c   | 7 ++-----
 drivers/usb/usbip/stub_tx.c   | 4 ++--
 3 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/usbip/stub_main.c b/drivers/usb/usbip/stub_main.c
index af10f7b131a4..325b4c05acdd 100644
--- a/drivers/usb/usbip/stub_main.c
+++ b/drivers/usb/usbip/stub_main.c
@@ -252,11 +252,12 @@ void stub_device_cleanup_urbs(struct stub_device *sdev)
 	struct stub_priv *priv;
 	struct urb *urb;
 
-	dev_dbg(&sdev->udev->dev, "free sdev %p\n", sdev);
+	dev_dbg(&sdev->udev->dev, "Stub device cleaning up urbs\n");
 
 	while ((priv = stub_priv_pop(sdev))) {
 		urb = priv->urb;
-		dev_dbg(&sdev->udev->dev, "free urb %p\n", urb);
+		dev_dbg(&sdev->udev->dev, "free urb seqnum %lu\n",
+			priv->seqnum);
 		usb_kill_urb(urb);
 
 		kmem_cache_free(stub_priv_cache, priv);
diff --git a/drivers/usb/usbip/stub_rx.c b/drivers/usb/usbip/stub_rx.c
index 00e475c51a12..7de54a66044f 100644
--- a/drivers/usb/usbip/stub_rx.c
+++ b/drivers/usb/usbip/stub_rx.c
@@ -230,9 +230,6 @@ static int stub_recv_cmd_unlink(struct stub_device *sdev,
 		if (priv->seqnum != pdu->u.cmd_unlink.seqnum)
 			continue;
 
-		dev_info(&priv->urb->dev->dev, "unlink urb %p\n",
-			 priv->urb);
-
 		/*
 		 * This matched urb is not completed yet (i.e., be in
 		 * flight in usb hcd hardware/driver). Now we are
@@ -271,8 +268,8 @@ static int stub_recv_cmd_unlink(struct stub_device *sdev,
 		ret = usb_unlink_urb(priv->urb);
 		if (ret != -EINPROGRESS)
 			dev_err(&priv->urb->dev->dev,
-				"failed to unlink a urb %p, ret %d\n",
-				priv->urb, ret);
+				"failed to unlink a urb # %lu, ret %d\n",
+				priv->seqnum, ret);
 
 		return 0;
 	}
diff --git a/drivers/usb/usbip/stub_tx.c b/drivers/usb/usbip/stub_tx.c
index af858d52608a..f4dd30c56f36 100644
--- a/drivers/usb/usbip/stub_tx.c
+++ b/drivers/usb/usbip/stub_tx.c
@@ -201,8 +201,8 @@ static int stub_send_ret_submit(struct stub_device *sdev)
 
 		/* 1. setup usbip_header */
 		setup_ret_submit_pdu(&pdu_header, urb);
-		usbip_dbg_stub_tx("setup txdata seqnum: %d urb: %p\n",
-				  pdu_header.base.seqnum, urb);
+		usbip_dbg_stub_tx("setup txdata seqnum: %d\n",
+				  pdu_header.base.seqnum);
 		usbip_header_correct_endian(&pdu_header, 1);
 
 		iov[iovnum].iov_base = &pdu_header;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] USB: serial: option: add support for Telit ME910 PID 0x1101
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (95 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] usbip: vhci: " Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] usb: add RESET_RESUME for ELSA MicroLink 56K Sasha Levin
                   ` (419 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Daniele Palmas, Johan Hovold, Sasha Levin

From: Daniele Palmas <dnlplm@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 08933099e6404f588f81c2050bfec7313e06eeaf ]

This patch adds support for PID 0x1101 of Telit ME910.

Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/serial/option.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index dc489fb4261b..c8922df86bd0 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -277,6 +277,7 @@ static void option_instat_callback(struct urb *urb);
 #define TELIT_PRODUCT_LE922_USBCFG3		0x1043
 #define TELIT_PRODUCT_LE922_USBCFG5		0x1045
 #define TELIT_PRODUCT_ME910			0x1100
+#define TELIT_PRODUCT_ME910_DUAL_MODEM		0x1101
 #define TELIT_PRODUCT_LE920			0x1200
 #define TELIT_PRODUCT_LE910			0x1201
 #define TELIT_PRODUCT_LE910_USBCFG4		0x1206
@@ -642,6 +643,11 @@ static const struct option_blacklist_info telit_me910_blacklist = {
 	.reserved = BIT(1) | BIT(3),
 };
 
+static const struct option_blacklist_info telit_me910_dual_modem_blacklist = {
+	.sendsetup = BIT(0),
+	.reserved = BIT(3),
+};
+
 static const struct option_blacklist_info telit_le910_blacklist = {
 	.sendsetup = BIT(0),
 	.reserved = BIT(1) | BIT(2),
@@ -1241,6 +1247,8 @@ static const struct usb_device_id option_ids[] = {
 		.driver_info = (kernel_ulong_t)&telit_le922_blacklist_usbcfg0 },
 	{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910),
 		.driver_info = (kernel_ulong_t)&telit_me910_blacklist },
+	{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
+		.driver_info = (kernel_ulong_t)&telit_me910_dual_modem_blacklist },
 	{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910),
 		.driver_info = (kernel_ulong_t)&telit_le910_blacklist },
 	{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: Add device quirk for Logitech HD Pro Webcam C925e
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (97 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] usb: add RESET_RESUME for ELSA MicroLink 56K Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] usb: xhci: Add XHCI_TRUST_TX_LENGTH for Renesas uPD720201 Sasha Levin
                   ` (417 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Dmitry Fleytman Dmitry Fleytman, Greg Kroah-Hartman, Sasha Levin

From: Dmitry Fleytman Dmitry Fleytman <dmitry.fleytman@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7f038d256c723dd390d2fca942919573995f4cfd ]

Commit e0429362ab15
("usb: Add device quirk for Logitech HD Pro Webcams C920 and C930e")
introduced quirk to workaround an issue with some Logitech webcams.

There is one more model that has the same issue - C925e, so applying
the same quirk as well.

See aforementioned commit message for detailed explanation of the problem.

Signed-off-by: Dmitry Fleytman <dmitry.fleytman@gmail.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/core/quirks.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index 50010282c010..60674a932c77 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -57,10 +57,11 @@ static const struct usb_device_id usb_quirk_list[] = {
 	/* Microsoft LifeCam-VX700 v2.0 */
 	{ USB_DEVICE(0x045e, 0x0770), .driver_info = USB_QUIRK_RESET_RESUME },
 
-	/* Logitech HD Pro Webcams C920, C920-C and C930e */
+	/* Logitech HD Pro Webcams C920, C920-C, C925e and C930e */
 	{ USB_DEVICE(0x046d, 0x082d), .driver_info = USB_QUIRK_DELAY_INIT },
 	{ USB_DEVICE(0x046d, 0x0841), .driver_info = USB_QUIRK_DELAY_INIT },
 	{ USB_DEVICE(0x046d, 0x0843), .driver_info = USB_QUIRK_DELAY_INIT },
+	{ USB_DEVICE(0x046d, 0x085b), .driver_info = USB_QUIRK_DELAY_INIT },
 
 	/* Logitech ConferenceCam CC3000e */
 	{ USB_DEVICE(0x046d, 0x0847), .driver_info = USB_QUIRK_DELAY_INIT },
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: add RESET_RESUME for ELSA MicroLink 56K
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (96 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] USB: serial: option: add support for Telit ME910 PID 0x1101 Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] usb: Add device quirk for Logitech HD Pro Webcam C925e Sasha Levin
                   ` (418 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Oliver Neukum, Greg Kroah-Hartman, Sasha Levin

From: Oliver Neukum <oneukum@suse.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b9096d9f15c142574ebebe8fbb137012bb9d99c2 ]

This modem needs this quirk to operate. It produces timeouts when
resumed without reset.

Signed-off-by: Oliver Neukum <oneukum@suse.com>
CC: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/core/quirks.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index 60674a932c77..c05c4f877750 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -155,6 +155,9 @@ static const struct usb_device_id usb_quirk_list[] = {
 	/* Genesys Logic hub, internally used by KY-688 USB 3.1 Type-C Hub */
 	{ USB_DEVICE(0x05e3, 0x0612), .driver_info = USB_QUIRK_NO_LPM },
 
+	/* ELSA MicroLink 56K */
+	{ USB_DEVICE(0x05cc, 0x2267), .driver_info = USB_QUIRK_RESET_RESUME },
+
 	/* Genesys Logic hub, internally used by Moshi USB to Ethernet Adapter */
 	{ USB_DEVICE(0x05e3, 0x0616), .driver_info = USB_QUIRK_NO_LPM },
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: xhci: Add XHCI_TRUST_TX_LENGTH for Renesas uPD720201
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (98 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] usb: Add device quirk for Logitech HD Pro Webcam C925e Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/smpboot: Remove stale TLB flush invocations Sasha Levin
                   ` (416 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Daniel Thompson, Mathias Nyman, Greg Kroah-Hartman, Sasha Levin

From: Daniel Thompson <daniel.thompson@linaro.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit da99706689481717998d1d48edd389f339eea979 ]

When plugging in a USB webcam I see the following message:
xhci_hcd 0000:04:00.0: WARN Successful completion on short TX: needs
XHCI_TRUST_TX_LENGTH quirk?
handle_tx_event: 913 callbacks suppressed

All is quiet again with this patch (and I've done a fair but of soak
testing with the camera since).

Cc: <stable@vger.kernel.org>
Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/host/xhci-pci.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index e91cbf360afe..8a82e14829e9 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -181,6 +181,9 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
 		xhci->quirks |= XHCI_TRUST_TX_LENGTH;
 		xhci->quirks |= XHCI_BROKEN_STREAMS;
 	}
+	if (pdev->vendor == PCI_VENDOR_ID_RENESAS &&
+			pdev->device == 0x0014)
+		xhci->quirks |= XHCI_TRUST_TX_LENGTH;
 	if (pdev->vendor == PCI_VENDOR_ID_RENESAS &&
 			pdev->device == 0x0015)
 		xhci->quirks |= XHCI_RESET_ON_RESUME;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/smpboot: Remove stale TLB flush invocations
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (99 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] usb: xhci: Add XHCI_TRUST_TX_LENGTH for Renesas uPD720201 Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/boot: Add early cmdline parsing for options with arguments Sasha Levin
                   ` (415 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Thomas Gleixner, Ingo Molnar, Sasha Levin

From: Thomas Gleixner <tglx@linutronix.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 322f8b8b340c824aef891342b0f5795d15e11562 ]

smpboot_setup_warm_reset_vector() and smpboot_restore_warm_reset_vector()
invoke local_flush_tlb() for no obvious reason.

Digging in history revealed that the original code in the 2.1 era added
those because the code manipulated a swapper_pg_dir pagetable entry. The
pagetable manipulation was removed long ago in the 2.3 timeframe, but the
TLB flush invocations stayed around forever.

Remove them along with the pointless pr_debug()s which come from the same 2.1
change.

Reported-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: <stable@vger.kernel.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linuxfoundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20171230211829.586548655@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kernel/smpboot.c | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index 50e547eac8cd..f6911cc90a81 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -107,25 +107,16 @@ static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip)
 	spin_lock_irqsave(&rtc_lock, flags);
 	CMOS_WRITE(0xa, 0xf);
 	spin_unlock_irqrestore(&rtc_lock, flags);
-	local_flush_tlb();
-	pr_debug("1.\n");
 	*((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_HIGH)) =
 							start_eip >> 4;
-	pr_debug("2.\n");
 	*((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_LOW)) =
 							start_eip & 0xf;
-	pr_debug("3.\n");
 }
 
 static inline void smpboot_restore_warm_reset_vector(void)
 {
 	unsigned long flags;
 
-	/*
-	 * Install writable page 0 entry to set BIOS data area.
-	 */
-	local_flush_tlb();
-
 	/*
 	 * Paranoid:  Set warm reset code and vector here back
 	 * to default values.
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] n_tty: fix EXTPROC vs ICANON interaction with TIOCINQ (aka FIONREAD)
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (101 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/boot: Add early cmdline parsing for options with arguments Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/paravirt: Dont patch flush_tlb_single Sasha Levin
                   ` (413 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Linus Torvalds, Greg Kroah-Hartman, Sasha Levin

From: Linus Torvalds <torvalds@linux-foundation.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 966031f340185eddd05affcf72b740549f056348 ]

We added support for EXTPROC back in 2010 in commit 26df6d13406d ("tty:
Add EXTPROC support for LINEMODE") and the intent was to allow it to
override some (all?) ICANON behavior.  Quoting from that original commit
message:

         There is a new bit in the termios local flag word, EXTPROC.
         When this bit is set, several aspects of the terminal driver
         are disabled.  Input line editing, character echo, and mapping
         of signals are all disabled.  This allows the telnetd to turn
         off these functions when in linemode, but still keep track of
         what state the user wants the terminal to be in.

but the problem turns out that "several aspects of the terminal driver
are disabled" is a bit ambiguous, and you can really confuse the n_tty
layer by setting EXTPROC and then causing some of the ICANON invariants
to no longer be maintained.

This fixes at least one such case (TIOCINQ) becoming unhappy because of
the confusion over whether ICANON really means ICANON when EXTPROC is set.

This basically makes TIOCINQ match the case of read: if EXTPROC is set,
we ignore ICANON.  Also, make sure to reset the ICANON state ie EXTPROC
changes, not just if ICANON changes.

Fixes: 26df6d13406d ("tty: Add EXTPROC support for LINEMODE")
Reported-by: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
Reported-by: syzkaller <syzkaller@googlegroups.com>
Cc: Jiri Slaby <jslaby@suse.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/tty/n_tty.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
index aba20f66bdd9..66e257b5a5b7 100644
--- a/drivers/tty/n_tty.c
+++ b/drivers/tty/n_tty.c
@@ -1808,7 +1808,7 @@ static void n_tty_set_termios(struct tty_struct *tty, struct ktermios *old)
 {
 	struct n_tty_data *ldata = tty->disc_data;
 
-	if (!old || (old->c_lflag ^ tty->termios.c_lflag) & ICANON) {
+	if (!old || (old->c_lflag ^ tty->termios.c_lflag) & (ICANON | EXTPROC)) {
 		bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE);
 		ldata->line_start = ldata->read_tail;
 		if (!L_ICANON(tty) || !read_cnt(ldata)) {
@@ -2517,7 +2517,7 @@ static int n_tty_ioctl(struct tty_struct *tty, struct file *file,
 		return put_user(tty_chars_in_buffer(tty), (int __user *) arg);
 	case TIOCINQ:
 		down_write(&tty->termios_rwsem);
-		if (L_ICANON(tty))
+		if (L_ICANON(tty) && !L_EXTPROC(tty))
 			retval = inq_canon(ldata);
 		else
 			retval = read_cnt(ldata);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/boot: Add early cmdline parsing for options with arguments
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (100 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/smpboot: Remove stale TLB flush invocations Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] n_tty: fix EXTPROC vs ICANON interaction with TIOCINQ (aka FIONREAD) Sasha Levin
                   ` (414 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Tom Lendacky, Ingo Molnar, Sasha Levin

From: Tom Lendacky <thomas.lendacky@amd.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e505371dd83963caae1a37ead9524e8d997341be ]

Add a cmdline_find_option() function to look for cmdline options that
take arguments. The argument is returned in a supplied buffer and the
argument length (regardless of whether it fits in the supplied buffer)
is returned, with -1 indicating not found.

Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Alexander Potapenko <glider@google.com>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brijesh Singh <brijesh.singh@amd.com>
Cc: Dave Young <dyoung@redhat.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Larry Woodman <lwoodman@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Matt Fleming <matt@codeblueprint.co.uk>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Cc: Rik van Riel <riel@redhat.com>
Cc: Toshimitsu Kani <toshi.kani@hpe.com>
Cc: kasan-dev@googlegroups.com
Cc: kvm@vger.kernel.org
Cc: linux-arch@vger.kernel.org
Cc: linux-doc@vger.kernel.org
Cc: linux-efi@vger.kernel.org
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/36b5f97492a9745dce27682305f990fc20e5cf8a.1500319216.git.thomas.lendacky@amd.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/cmdline.h |   2 +
 arch/x86/lib/cmdline.c         | 105 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 107 insertions(+)

diff --git a/arch/x86/include/asm/cmdline.h b/arch/x86/include/asm/cmdline.h
index e01f7f7ccb0c..84ae170bc3d0 100644
--- a/arch/x86/include/asm/cmdline.h
+++ b/arch/x86/include/asm/cmdline.h
@@ -2,5 +2,7 @@
 #define _ASM_X86_CMDLINE_H
 
 int cmdline_find_option_bool(const char *cmdline_ptr, const char *option);
+int cmdline_find_option(const char *cmdline_ptr, const char *option,
+			char *buffer, int bufsize);
 
 #endif /* _ASM_X86_CMDLINE_H */
diff --git a/arch/x86/lib/cmdline.c b/arch/x86/lib/cmdline.c
index 422db000d727..a744506856b1 100644
--- a/arch/x86/lib/cmdline.c
+++ b/arch/x86/lib/cmdline.c
@@ -82,3 +82,108 @@ int cmdline_find_option_bool(const char *cmdline, const char *option)
 
 	return 0;	/* Buffer overrun */
 }
+
+/*
+ * Find a non-boolean option (i.e. option=argument). In accordance with
+ * standard Linux practice, if this option is repeated, this returns the
+ * last instance on the command line.
+ *
+ * @cmdline: the cmdline string
+ * @max_cmdline_size: the maximum size of cmdline
+ * @option: option string to look for
+ * @buffer: memory buffer to return the option argument
+ * @bufsize: size of the supplied memory buffer
+ *
+ * Returns the length of the argument (regardless of if it was
+ * truncated to fit in the buffer), or -1 on not found.
+ */
+static int
+__cmdline_find_option(const char *cmdline, int max_cmdline_size,
+		      const char *option, char *buffer, int bufsize)
+{
+	char c;
+	int pos = 0, len = -1;
+	const char *opptr = NULL;
+	char *bufptr = buffer;
+	enum {
+		st_wordstart = 0,	/* Start of word/after whitespace */
+		st_wordcmp,	/* Comparing this word */
+		st_wordskip,	/* Miscompare, skip */
+		st_bufcpy,	/* Copying this to buffer */
+	} state = st_wordstart;
+
+	if (!cmdline)
+		return -1;      /* No command line */
+
+	/*
+	 * This 'pos' check ensures we do not overrun
+	 * a non-NULL-terminated 'cmdline'
+	 */
+	while (pos++ < max_cmdline_size) {
+		c = *(char *)cmdline++;
+		if (!c)
+			break;
+
+		switch (state) {
+		case st_wordstart:
+			if (myisspace(c))
+				break;
+
+			state = st_wordcmp;
+			opptr = option;
+			/* fall through */
+
+		case st_wordcmp:
+			if ((c == '=') && !*opptr) {
+				/*
+				 * We matched all the way to the end of the
+				 * option we were looking for, prepare to
+				 * copy the argument.
+				 */
+				len = 0;
+				bufptr = buffer;
+				state = st_bufcpy;
+				break;
+			} else if (c == *opptr++) {
+				/*
+				 * We are currently matching, so continue
+				 * to the next character on the cmdline.
+				 */
+				break;
+			}
+			state = st_wordskip;
+			/* fall through */
+
+		case st_wordskip:
+			if (myisspace(c))
+				state = st_wordstart;
+			break;
+
+		case st_bufcpy:
+			if (myisspace(c)) {
+				state = st_wordstart;
+			} else {
+				/*
+				 * Increment len, but don't overrun the
+				 * supplied buffer and leave room for the
+				 * NULL terminator.
+				 */
+				if (++len < bufsize)
+					*bufptr++ = c;
+			}
+			break;
+		}
+	}
+
+	if (bufsize)
+		*bufptr = '\0';
+
+	return len;
+}
+
+int cmdline_find_option(const char *cmdline, const char *option, char *buffer,
+			int bufsize)
+{
+	return __cmdline_find_option(cmdline, COMMAND_LINE_SIZE, option,
+				     buffer, bufsize);
+}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/paravirt: Dont patch flush_tlb_single
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (102 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] n_tty: fix EXTPROC vs ICANON interaction with TIOCINQ (aka FIONREAD) Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] kernel/acct.c: fix the acct->needcheck check in check_free_space() Sasha Levin
                   ` (412 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Thomas Gleixner, Ingo Molnar, Sasha Levin

From: Thomas Gleixner <tglx@linutronix.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a035795499ca1c2bd1928808d1a156eda1420383 ]

native_flush_tlb_single() will be changed with the upcoming
PAGE_TABLE_ISOLATION feature. This requires to have more code in
there than INVLPG.

Remove the paravirt patching for it.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Josh Poimboeuf <jpoimboe@redhat.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Acked-by: Peter Zijlstra <peterz@infradead.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Borislav Petkov <bpetkov@suse.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David Laight <David.Laight@aculab.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Eduardo Valentin <eduval@amazon.com>
Cc: Greg KH <gregkh@linuxfoundation.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: aliguori@amazon.com
Cc: daniel.gruss@iaik.tugraz.at
Cc: hughd@google.com
Cc: keescook@google.com
Cc: linux-mm@kvack.org
Cc: michael.schwarz@iaik.tugraz.at
Cc: moritz.lipp@iaik.tugraz.at
Cc: richard.fellner@student.tugraz.at
Link: https://lkml.kernel.org/r/20171204150606.828111617@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kernel/paravirt_patch_64.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/arch/x86/kernel/paravirt_patch_64.c b/arch/x86/kernel/paravirt_patch_64.c
index a1da6737ba5b..a91d9b9b4bde 100644
--- a/arch/x86/kernel/paravirt_patch_64.c
+++ b/arch/x86/kernel/paravirt_patch_64.c
@@ -9,7 +9,6 @@ DEF_NATIVE(pv_irq_ops, save_fl, "pushfq; popq %rax");
 DEF_NATIVE(pv_mmu_ops, read_cr2, "movq %cr2, %rax");
 DEF_NATIVE(pv_mmu_ops, read_cr3, "movq %cr3, %rax");
 DEF_NATIVE(pv_mmu_ops, write_cr3, "movq %rdi, %cr3");
-DEF_NATIVE(pv_mmu_ops, flush_tlb_single, "invlpg (%rdi)");
 DEF_NATIVE(pv_cpu_ops, clts, "clts");
 DEF_NATIVE(pv_cpu_ops, wbinvd, "wbinvd");
 
@@ -57,7 +56,6 @@ unsigned native_patch(u8 type, u16 clobbers, void *ibuf,
 		PATCH_SITE(pv_mmu_ops, read_cr3);
 		PATCH_SITE(pv_mmu_ops, write_cr3);
 		PATCH_SITE(pv_cpu_ops, clts);
-		PATCH_SITE(pv_mmu_ops, flush_tlb_single);
 		PATCH_SITE(pv_cpu_ops, wbinvd);
 
 	patch_site:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] crypto: n2 - cure use after free
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (104 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] kernel/acct.c: fix the acct->needcheck check in check_free_space() Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] fscache: Fix the default for fscache_maybe_release_page() Sasha Levin
                   ` (410 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jan Engelhardt, Herbert Xu, Sasha Levin

From: Jan Engelhardt <jengelh@inai.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 203f45003a3d03eea8fa28d74cfc74c354416fdb ]

queue_cache_init is first called for the Control Word Queue
(n2_crypto_probe). At that time, queue_cache[0] is NULL and a new
kmem_cache will be allocated. If the subsequent n2_register_algs call
fails, the kmem_cache will be released in queue_cache_destroy, but
queue_cache_init[0] is not set back to NULL.

So when the Module Arithmetic Unit gets probed next (n2_mau_probe),
queue_cache_init will not allocate a kmem_cache again, but leave it
as its bogus value, causing a BUG() to trigger when queue_cache[0] is
eventually passed to kmem_cache_zalloc:

	n2_crypto: Found N2CP at /virtual-devices@100/n2cp@7
	n2_crypto: Registered NCS HVAPI version 2.0
	called queue_cache_init
	n2_crypto: md5 alg registration failed
	n2cp f028687c: /virtual-devices@100/n2cp@7: Unable to register algorithms.
	called queue_cache_destroy
	n2cp: probe of f028687c failed with error -22
	n2_crypto: Found NCP at /virtual-devices@100/ncp@6
	n2_crypto: Registered NCS HVAPI version 2.0
	called queue_cache_init
	kernel BUG at mm/slab.c:2993!
	Call Trace:
	 [0000000000604488] kmem_cache_alloc+0x1a8/0x1e0
                  (inlined) kmem_cache_zalloc
                  (inlined) new_queue
                  (inlined) spu_queue_setup
                  (inlined) handle_exec_unit
	 [0000000010c61eb4] spu_mdesc_scan+0x1f4/0x460 [n2_crypto]
	 [0000000010c62b80] n2_mau_probe+0x100/0x220 [n2_crypto]
	 [000000000084b174] platform_drv_probe+0x34/0xc0

Cc: <stable@vger.kernel.org>
Signed-off-by: Jan Engelhardt <jengelh@inai.de>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/crypto/n2_core.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/crypto/n2_core.c b/drivers/crypto/n2_core.c
index 10a9aeff1666..32035daae8c9 100644
--- a/drivers/crypto/n2_core.c
+++ b/drivers/crypto/n2_core.c
@@ -1641,6 +1641,7 @@ static int queue_cache_init(void)
 					  CWQ_ENTRY_SIZE, 0, NULL);
 	if (!queue_cache[HV_NCS_QTYPE_CWQ - 1]) {
 		kmem_cache_destroy(queue_cache[HV_NCS_QTYPE_MAU - 1]);
+		queue_cache[HV_NCS_QTYPE_MAU - 1] = NULL;
 		return -ENOMEM;
 	}
 	return 0;
@@ -1650,6 +1651,8 @@ static void queue_cache_destroy(void)
 {
 	kmem_cache_destroy(queue_cache[HV_NCS_QTYPE_MAU - 1]);
 	kmem_cache_destroy(queue_cache[HV_NCS_QTYPE_CWQ - 1]);
+	queue_cache[HV_NCS_QTYPE_MAU - 1] = NULL;
+	queue_cache[HV_NCS_QTYPE_CWQ - 1] = NULL;
 }
 
 static int spu_queue_register(struct spu_queue *p, unsigned long q_type)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] kernel/acct.c: fix the acct->needcheck check in check_free_space()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (103 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/paravirt: Dont patch flush_tlb_single Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] crypto: n2 - cure use after free Sasha Levin
                   ` (411 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Oleg Nesterov, Andrew Morton, Linus Torvalds, Sasha Levin

From: Oleg Nesterov <oleg@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4d9570158b6260f449e317a5f9ed030c2504a615 ]

As Tsukada explains, the time_is_before_jiffies(acct->needcheck) check
is very wrong, we need time_is_after_jiffies() to make sys_acct() work.

Ignoring the overflows, the code should "goto out" if needcheck >
jiffies, while currently it checks "needcheck < jiffies" and thus in the
likely case check_free_space() does nothing until jiffies overflow.

In particular this means that sys_acct() is simply broken, acct_on()
sets acct->needcheck = jiffies and expects that check_free_space()
should set acct->active = 1 after the free-space check, but this won't
happen if jiffies increments in between.

This was broken by commit 32dc73086015 ("get rid of timer in
kern/acct.c") in 2011, then another (correct) commit 795a2f22a8ea
("acct() should honour the limits from the very beginning") made the
problem more visible.

Link: http://lkml.kernel.org/r/20171213133940.GA6554@redhat.com
Fixes: 32dc73086015 ("get rid of timer in kern/acct.c")
Reported-by: TSUKADA Koutaro <tsukada@ascade.co.jp>
Suggested-by: TSUKADA Koutaro <tsukada@ascade.co.jp>
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/acct.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/acct.c b/kernel/acct.c
index 74963d192c5d..37f1dc696fbd 100644
--- a/kernel/acct.c
+++ b/kernel/acct.c
@@ -99,7 +99,7 @@ static int check_free_space(struct bsd_acct_struct *acct)
 {
 	struct kstatfs sbuf;
 
-	if (time_is_before_jiffies(acct->needcheck))
+	if (time_is_after_jiffies(acct->needcheck))
 		goto out;
 
 	/* May block */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] fscache: Fix the default for fscache_maybe_release_page()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (105 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] crypto: n2 - cure use after free Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] kernel: make groups_sort calling a responsibility group_info allocators Sasha Levin
                   ` (409 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: David Howells, Sasha Levin

From: David Howells <dhowells@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 98801506552593c9b8ac11021b0cdad12cab4f6b ]

Fix the default for fscache_maybe_release_page() for when the cookie isn't
valid or the page isn't cached.  It mustn't return false as that indicates
the page cannot yet be freed.

The problem with the default is that if, say, there's no cache, but a
network filesystem's pages are using up almost all the available memory, a
system can OOM because the filesystem ->releasepage() op will not allow
them to be released as fscache_maybe_release_page() incorrectly prevents
it.

This can be tested by writing a sequence of 512MiB files to an AFS mount.
It does not affect NFS or CIFS because both of those wrap the call in a
check of PG_fscache and it shouldn't bother Ceph as that only has
PG_private set whilst writeback is in progress.  This might be an issue for
9P, however.

Note that the pages aren't entirely stuck.  Removing a file or unmounting
will clear things because that uses ->invalidatepage() instead.

Fixes: 201a15428bd5 ("FS-Cache: Handle pages pending storage that get evicted under OOM conditions")
Reported-by: Marc Dionne <marc.dionne@auristor.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Acked-by: Al Viro <viro@zeniv.linux.org.uk>
Tested-by: Marc Dionne <marc.dionne@auristor.com>
cc: stable@vger.kernel.org # 2.6.32+
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/linux/fscache.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/fscache.h b/include/linux/fscache.h
index 115bb81912cc..94a8aae8f9e2 100644
--- a/include/linux/fscache.h
+++ b/include/linux/fscache.h
@@ -764,7 +764,7 @@ bool fscache_maybe_release_page(struct fscache_cookie *cookie,
 {
 	if (fscache_cookie_valid(cookie) && PageFsCache(page))
 		return __fscache_maybe_release_page(cookie, page, gfp);
-	return false;
+	return true;
 }
 
 /**
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] kernel: make groups_sort calling a responsibility group_info allocators
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (106 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] fscache: Fix the default for fscache_maybe_release_page() Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] kernel/signal.c: protect the SIGNAL_UNKILLABLE tasks from !sig_kernel_only() signals Sasha Levin
                   ` (408 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Thiago Rafael Becker, Andrew Morton, Linus Torvalds, Sasha Levin

From: Thiago Rafael Becker <thiago.becker@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit bdcf0a423ea1c40bbb40e7ee483b50fc8aa3d758 ]

In testing, we found that nfsd threads may call set_groups in parallel
for the same entry cached in auth.unix.gid, racing in the call of
groups_sort, corrupting the groups for that entry and leading to
permission denials for the client.

This patch:
 - Make groups_sort globally visible.
 - Move the call to groups_sort to the modifiers of group_info
 - Remove the call to groups_sort from set_groups

Link: http://lkml.kernel.org/r/20171211151420.18655-1-thiago.becker@gmail.com
Signed-off-by: Thiago Rafael Becker <thiago.becker@gmail.com>
Reviewed-by: Matthew Wilcox <mawilcox@microsoft.com>
Reviewed-by: NeilBrown <neilb@suse.com>
Acked-by: "J. Bruce Fields" <bfields@fieldses.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/s390/kernel/compat_linux.c   | 1 +
 fs/nfsd/auth.c                    | 3 +++
 include/linux/cred.h              | 1 +
 kernel/groups.c                   | 5 +++--
 kernel/uid16.c                    | 1 +
 net/sunrpc/auth_gss/gss_rpc_xdr.c | 1 +
 net/sunrpc/auth_gss/svcauth_gss.c | 1 +
 net/sunrpc/svcauth_unix.c         | 2 ++
 8 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c
index 437e61159279..0176ebc97bfd 100644
--- a/arch/s390/kernel/compat_linux.c
+++ b/arch/s390/kernel/compat_linux.c
@@ -263,6 +263,7 @@ COMPAT_SYSCALL_DEFINE2(s390_setgroups16, int, gidsetsize, u16 __user *, grouplis
 		return retval;
 	}
 
+	groups_sort(group_info);
 	retval = set_current_groups(group_info);
 	put_group_info(group_info);
 
diff --git a/fs/nfsd/auth.c b/fs/nfsd/auth.c
index 9d46a0bdd9f9..a260060042ad 100644
--- a/fs/nfsd/auth.c
+++ b/fs/nfsd/auth.c
@@ -59,6 +59,9 @@ int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp)
 				GROUP_AT(gi, i) = exp->ex_anon_gid;
 			else
 				GROUP_AT(gi, i) = GROUP_AT(rqgi, i);
+
+			/* Each thread allocates its own gi, no race */
+			groups_sort(gi);
 		}
 	} else {
 		gi = get_group_info(rqgi);
diff --git a/include/linux/cred.h b/include/linux/cred.h
index 8b6c083e68a7..536d873ad6e5 100644
--- a/include/linux/cred.h
+++ b/include/linux/cred.h
@@ -87,6 +87,7 @@ extern int set_current_groups(struct group_info *);
 extern void set_groups(struct cred *, struct group_info *);
 extern int groups_search(const struct group_info *, kgid_t);
 extern bool may_setgroups(void);
+extern void groups_sort(struct group_info *);
 
 /* access the groups "array" with this macro */
 #define GROUP_AT(gi, i) \
diff --git a/kernel/groups.c b/kernel/groups.c
index 74d431d25251..5ea9847f172f 100644
--- a/kernel/groups.c
+++ b/kernel/groups.c
@@ -101,7 +101,7 @@ static int groups_from_user(struct group_info *group_info,
 }
 
 /* a simple Shell sort */
-static void groups_sort(struct group_info *group_info)
+void groups_sort(struct group_info *group_info)
 {
 	int base, max, stride;
 	int gidsetsize = group_info->ngroups;
@@ -128,6 +128,7 @@ static void groups_sort(struct group_info *group_info)
 		stride /= 3;
 	}
 }
+EXPORT_SYMBOL(groups_sort);
 
 /* a simple bsearch */
 int groups_search(const struct group_info *group_info, kgid_t grp)
@@ -159,7 +160,6 @@ int groups_search(const struct group_info *group_info, kgid_t grp)
 void set_groups(struct cred *new, struct group_info *group_info)
 {
 	put_group_info(new->group_info);
-	groups_sort(group_info);
 	get_group_info(group_info);
 	new->group_info = group_info;
 }
@@ -243,6 +243,7 @@ SYSCALL_DEFINE2(setgroups, int, gidsetsize, gid_t __user *, grouplist)
 		return retval;
 	}
 
+	groups_sort(group_info);
 	retval = set_current_groups(group_info);
 	put_group_info(group_info);
 
diff --git a/kernel/uid16.c b/kernel/uid16.c
index d58cc4d8f0d1..651aaa5221ec 100644
--- a/kernel/uid16.c
+++ b/kernel/uid16.c
@@ -190,6 +190,7 @@ SYSCALL_DEFINE2(setgroups16, int, gidsetsize, old_gid_t __user *, grouplist)
 		return retval;
 	}
 
+	groups_sort(group_info);
 	retval = set_current_groups(group_info);
 	put_group_info(group_info);
 
diff --git a/net/sunrpc/auth_gss/gss_rpc_xdr.c b/net/sunrpc/auth_gss/gss_rpc_xdr.c
index 2410d557ae39..89731c9023f0 100644
--- a/net/sunrpc/auth_gss/gss_rpc_xdr.c
+++ b/net/sunrpc/auth_gss/gss_rpc_xdr.c
@@ -231,6 +231,7 @@ static int gssx_dec_linux_creds(struct xdr_stream *xdr,
 			goto out_free_groups;
 		GROUP_AT(creds->cr_group_info, i) = kgid;
 	}
+	groups_sort(creds->cr_group_info);
 
 	return 0;
 out_free_groups:
diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c
index 033fec307528..036bbf2b44c1 100644
--- a/net/sunrpc/auth_gss/svcauth_gss.c
+++ b/net/sunrpc/auth_gss/svcauth_gss.c
@@ -481,6 +481,7 @@ static int rsc_parse(struct cache_detail *cd,
 				goto out;
 			GROUP_AT(rsci.cred.cr_group_info, i) = kgid;
 		}
+		groups_sort(rsci.cred.cr_group_info);
 
 		/* mech name */
 		len = qword_get(&mesg, buf, mlen);
diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c
index 621ca7b4a155..98db1715cb17 100644
--- a/net/sunrpc/svcauth_unix.c
+++ b/net/sunrpc/svcauth_unix.c
@@ -520,6 +520,7 @@ static int unix_gid_parse(struct cache_detail *cd,
 		GROUP_AT(ug.gi, i) = kgid;
 	}
 
+	groups_sort(ug.gi);
 	ugp = unix_gid_lookup(cd, uid);
 	if (ugp) {
 		struct cache_head *ch;
@@ -827,6 +828,7 @@ svcauth_unix_accept(struct svc_rqst *rqstp, __be32 *authp)
 		kgid_t kgid = make_kgid(&init_user_ns, svc_getnl(argv));
 		GROUP_AT(cred->cr_group_info, i) = kgid;
 	}
+	groups_sort(cred->cr_group_info);
 	if (svc_getu32(argv) != htonl(RPC_AUTH_NULL) || svc_getu32(argv) != 0) {
 		*authp = rpc_autherr_badverf;
 		return SVC_DENIED;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] kernel/signal.c: protect the SIGNAL_UNKILLABLE tasks from !sig_kernel_only() signals
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (107 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] kernel: make groups_sort calling a responsibility group_info allocators Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] kernel/signal.c: protect the traced SIGNAL_UNKILLABLE tasks from SIGKILL Sasha Levin
                   ` (407 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Oleg Nesterov, Andrew Morton, Linus Torvalds, Sasha Levin

From: Oleg Nesterov <oleg@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ac25385089f673560867eb5179228a44ade0cfc1 ]

Change sig_task_ignored() to drop the SIG_DFL && !sig_kernel_only()
signals even if force == T.  This simplifies the next change and this
matches the same check in get_signal() which will drop these signals
anyway.

Link: http://lkml.kernel.org/r/20171103184227.GC21036@redhat.com
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Tested-by: Kyle Huey <me@kylehuey.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/signal.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/signal.c b/kernel/signal.c
index cbb75358f7f5..4e61b75be17a 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -72,7 +72,7 @@ static int sig_task_ignored(struct task_struct *t, int sig, bool force)
 	handler = sig_handler(t, sig);
 
 	if (unlikely(t->signal->flags & SIGNAL_UNKILLABLE) &&
-			handler == SIG_DFL && !force)
+	    handler == SIG_DFL && !(force && sig_kernel_only(sig)))
 		return 1;
 
 	return sig_handler_ignored(handler, sig);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] kernel/signal.c: protect the traced SIGNAL_UNKILLABLE tasks from SIGKILL
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (108 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] kernel/signal.c: protect the SIGNAL_UNKILLABLE tasks from !sig_kernel_only() signals Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] kernel/signal.c: remove the no longer needed SIGNAL_UNKILLABLE check in complete_signal() Sasha Levin
                   ` (406 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Oleg Nesterov, Andrew Morton, Linus Torvalds, Sasha Levin

From: Oleg Nesterov <oleg@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 628c1bcba204052d19b686b5bac149a644cdb72e ]

The comment in sig_ignored() says "Tracers may want to know about even
ignored signals" but SIGKILL can not be reported to debugger and it is
just wrong to return 0 in this case: SIGKILL should only kill the
SIGNAL_UNKILLABLE task if it comes from the parent ns.

Change sig_ignored() to ignore ->ptrace if sig == SIGKILL and rely on
sig_task_ignored().

SISGTOP coming from within the namespace is not really right too but at
least debugger can intercept it, and we can't drop it here because this
will break "gdb -p 1": ptrace_attach() won't work.  Perhaps we will add
another ->ptrace check later, we will see.

Link: http://lkml.kernel.org/r/20171103184206.GB21036@redhat.com
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Tested-by: Kyle Huey <me@kylehuey.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/signal.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/kernel/signal.c b/kernel/signal.c
index 525a4cda5598..cbb75358f7f5 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -88,13 +88,15 @@ static int sig_ignored(struct task_struct *t, int sig, bool force)
 	if (sigismember(&t->blocked, sig) || sigismember(&t->real_blocked, sig))
 		return 0;
 
-	if (!sig_task_ignored(t, sig, force))
-		return 0;
-
 	/*
-	 * Tracers may want to know about even ignored signals.
+	 * Tracers may want to know about even ignored signal unless it
+	 * is SIGKILL which can't be reported anyway but can be ignored
+	 * by SIGNAL_UNKILLABLE task.
 	 */
-	return !t->ptrace;
+	if (t->ptrace && sig != SIGKILL)
+		return 0;
+
+	return sig_task_ignored(t, sig, force);
 }
 
 /*
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] kernel/signal.c: remove the no longer needed SIGNAL_UNKILLABLE check in complete_signal()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (109 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] kernel/signal.c: protect the traced SIGNAL_UNKILLABLE tasks from SIGKILL Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] Input: elantech - add new icbody type 15 Sasha Levin
                   ` (405 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Oleg Nesterov, Andrew Morton, Linus Torvalds, Sasha Levin

From: Oleg Nesterov <oleg@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 426915796ccaf9c2bd9bb06dc5702225957bc2e5 ]

complete_signal() checks SIGNAL_UNKILLABLE before it starts to destroy
the thread group, today this is wrong in many ways.

If nothing else, fatal_signal_pending() should always imply that the
whole thread group (except ->group_exit_task if it is not NULL) is
killed, this check breaks the rule.

After the previous changes we can rely on sig_task_ignored();
sig_fatal(sig) && SIGNAL_UNKILLABLE can only be true if we actually want
to kill this task and sig == SIGKILL OR it is traced and debugger can
intercept the signal.

This should hopefully fix the problem reported by Dmitry.  This
test-case

	static int init(void *arg)
	{
		for (;;)
			pause();
	}

	int main(void)
	{
		char stack[16 * 1024];

		for (;;) {
			int pid = clone(init, stack + sizeof(stack)/2,
					CLONE_NEWPID | SIGCHLD, NULL);
			assert(pid > 0);

			assert(ptrace(PTRACE_ATTACH, pid, 0, 0) == 0);
			assert(waitpid(-1, NULL, WSTOPPED) == pid);

			assert(ptrace(PTRACE_DETACH, pid, 0, SIGSTOP) == 0);
			assert(syscall(__NR_tkill, pid, SIGKILL) == 0);
			assert(pid == wait(NULL));
		}
	}

triggers the WARN_ON_ONCE(!(task->jobctl & JOBCTL_STOP_PENDING)) in
task_participate_group_stop().  do_signal_stop()->signal_group_exit()
checks SIGNAL_GROUP_EXIT and return false, but task_set_jobctl_pending()
checks fatal_signal_pending() and does not set JOBCTL_STOP_PENDING.

And his should fix the minor security problem reported by Kyle,
SECCOMP_RET_TRACE can miss fatal_signal_pending() the same way if the
task is the root of a pid namespace.

Link: http://lkml.kernel.org/r/20171103184246.GD21036@redhat.com
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Reported-by: Dmitry Vyukov <dvyukov@google.com>
Reported-by: Kyle Huey <me@kylehuey.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Tested-by: Kyle Huey <me@kylehuey.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/signal.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/signal.c b/kernel/signal.c
index 4e61b75be17a..46a2471173b8 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -962,9 +962,9 @@ static void complete_signal(int sig, struct task_struct *p, int group)
 	 * then start taking the whole group down immediately.
 	 */
 	if (sig_fatal(p, sig) &&
-	    !(signal->flags & (SIGNAL_UNKILLABLE | SIGNAL_GROUP_EXIT)) &&
+	    !(signal->flags & SIGNAL_GROUP_EXIT) &&
 	    !sigismember(&t->real_blocked, sig) &&
-	    (sig == SIGKILL || !t->ptrace)) {
+	    (sig == SIGKILL || !p->ptrace)) {
 		/*
 		 * This signal will be fatal to the whole group.
 		 */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Input: elantech - add new icbody type 15
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (110 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] kernel/signal.c: remove the no longer needed SIGNAL_UNKILLABLE check in complete_signal() Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/microcode/AMD: Add support for fam17h microcode loading Sasha Levin
                   ` (404 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Aaron Ma, Dmitry Torokhov, Sasha Levin

From: Aaron Ma <aaron.ma@canonical.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 10d900303f1c3a821eb0bef4e7b7ece16768fba4 ]

The touchpad of Lenovo Thinkpad L480 reports it's version as 15.

Cc: stable@vger.kernel.org
Signed-off-by: Aaron Ma <aaron.ma@canonical.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/input/mouse/elantech.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
index c3c5d492cba0..07ce8f4314ba 100644
--- a/drivers/input/mouse/elantech.c
+++ b/drivers/input/mouse/elantech.c
@@ -1550,7 +1550,7 @@ static int elantech_set_properties(struct elantech_data *etd)
 		case 5:
 			etd->hw_version = 3;
 			break;
-		case 6 ... 14:
+		case 6 ... 15:
 			etd->hw_version = 4;
 			break;
 		default:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/microcode/AMD: Add support for fam17h microcode loading
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (111 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] Input: elantech - add new icbody type 15 Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/tlb: Drop the _GPL from the cpu_tlbstate export Sasha Levin
                   ` (403 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Tom Lendacky, Thomas Gleixner, Ingo Molnar, Sasha Levin

From: Tom Lendacky <thomas.lendacky@amd.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f4e9b7af0cd58dd039a0fb2cd67d57cea4889abf ]

The size for the Microcode Patch Block (MPB) for an AMD family 17h
processor is 3200 bytes.  Add a #define for fam17h so that it does
not default to 2048 bytes and fail a microcode load/update.

Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Borislav Petkov <bp@alien8.de>
Link: https://lkml.kernel.org/r/20171130224640.15391.40247.stgit@tlendack-t1.amdoffice.net
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kernel/cpu/microcode/amd.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/arch/x86/kernel/cpu/microcode/amd.c b/arch/x86/kernel/cpu/microcode/amd.c
index 12829c3ced3c..ff422a92f063 100644
--- a/arch/x86/kernel/cpu/microcode/amd.c
+++ b/arch/x86/kernel/cpu/microcode/amd.c
@@ -153,6 +153,7 @@ static unsigned int verify_patch_size(u8 family, u32 patch_size,
 #define F14H_MPB_MAX_SIZE 1824
 #define F15H_MPB_MAX_SIZE 4096
 #define F16H_MPB_MAX_SIZE 3458
+#define F17H_MPB_MAX_SIZE 3200
 
 	switch (family) {
 	case 0x14:
@@ -164,6 +165,9 @@ static unsigned int verify_patch_size(u8 family, u32 patch_size,
 	case 0x16:
 		max_size = F16H_MPB_MAX_SIZE;
 		break;
+	case 0x17:
+		max_size = F17H_MPB_MAX_SIZE;
+		break;
 	default:
 		max_size = F1XH_MPB_MAX_SIZE;
 		break;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] parisc: Fix alignment of pa_tlb_lock in assembly on 32-bit SMP kernel
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (113 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/tlb: Drop the _GPL from the cpu_tlbstate export Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] genksyms: Handle string literals with spaces in reference files Sasha Levin
                   ` (401 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Helge Deller, Sasha Levin

From: Helge Deller <deller@gmx.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 88776c0e70be0290f8357019d844aae15edaa967 ]

Qemu for PARISC reported on a 32bit SMP parisc kernel strange failures
about "Not-handled unaligned insn 0x0e8011d6 and 0x0c2011c9."

Those opcodes evaluate to the ldcw() assembly instruction which requires
(on 32bit) an alignment of 16 bytes to ensure atomicity.

As it turns out, qemu is correct and in our assembly code in entry.S and
pacache.S we don't pay attention to the required alignment.

This patch fixes the problem by aligning the lock offset in assembly
code in the same manner as we do in our C-code.

Signed-off-by: Helge Deller <deller@gmx.de>
Cc: <stable@vger.kernel.org> # v4.0+
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/parisc/include/asm/ldcw.h |  2 ++
 arch/parisc/kernel/entry.S     | 13 +++++++++++--
 arch/parisc/kernel/pacache.S   |  9 +++++++--
 3 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/arch/parisc/include/asm/ldcw.h b/arch/parisc/include/asm/ldcw.h
index 8121aa6db2ff..51bb6b8eade6 100644
--- a/arch/parisc/include/asm/ldcw.h
+++ b/arch/parisc/include/asm/ldcw.h
@@ -11,6 +11,7 @@
    for the semaphore.  */
 
 #define __PA_LDCW_ALIGNMENT	16
+#define __PA_LDCW_ALIGN_ORDER	4
 #define __ldcw_align(a) ({					\
 	unsigned long __ret = (unsigned long) &(a)->lock[0];	\
 	__ret = (__ret + __PA_LDCW_ALIGNMENT - 1)		\
@@ -28,6 +29,7 @@
    ldcd). */
 
 #define __PA_LDCW_ALIGNMENT	4
+#define __PA_LDCW_ALIGN_ORDER	2
 #define __ldcw_align(a) (&(a)->slock)
 #define __LDCW	"ldcw,co"
 
diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S
index c5ef4081b01d..b523fa90a727 100644
--- a/arch/parisc/kernel/entry.S
+++ b/arch/parisc/kernel/entry.S
@@ -35,6 +35,7 @@
 #include <asm/pgtable.h>
 #include <asm/signal.h>
 #include <asm/unistd.h>
+#include <asm/ldcw.h>
 #include <asm/thread_info.h>
 
 #include <linux/linkage.h>
@@ -46,6 +47,14 @@
 #endif
 
 	.import		pa_tlb_lock,data
+	.macro  load_pa_tlb_lock reg
+#if __PA_LDCW_ALIGNMENT > 4
+	load32	PA(pa_tlb_lock) + __PA_LDCW_ALIGNMENT-1, \reg
+	depi	0,31,__PA_LDCW_ALIGN_ORDER, \reg
+#else
+	load32	PA(pa_tlb_lock), \reg
+#endif
+	.endm
 
 	/* space_to_prot macro creates a prot id from a space id */
 
@@ -457,7 +466,7 @@
 	.macro		tlb_lock	spc,ptp,pte,tmp,tmp1,fault
 #ifdef CONFIG_SMP
 	cmpib,COND(=),n	0,\spc,2f
-	load32		PA(pa_tlb_lock),\tmp
+	load_pa_tlb_lock \tmp
 1:	LDCW		0(\tmp),\tmp1
 	cmpib,COND(=)	0,\tmp1,1b
 	nop
@@ -480,7 +489,7 @@
 	/* Release pa_tlb_lock lock. */
 	.macro		tlb_unlock1	spc,tmp
 #ifdef CONFIG_SMP
-	load32		PA(pa_tlb_lock),\tmp
+	load_pa_tlb_lock \tmp
 	tlb_unlock0	\spc,\tmp
 #endif
 	.endm
diff --git a/arch/parisc/kernel/pacache.S b/arch/parisc/kernel/pacache.S
index b743a80eaba0..ddc2f0cf1c73 100644
--- a/arch/parisc/kernel/pacache.S
+++ b/arch/parisc/kernel/pacache.S
@@ -36,6 +36,7 @@
 #include <asm/assembly.h>
 #include <asm/pgtable.h>
 #include <asm/cache.h>
+#include <asm/ldcw.h>
 #include <linux/linkage.h>
 
 	.text
@@ -333,8 +334,12 @@ ENDPROC(flush_data_cache_local)
 
 	.macro	tlb_lock	la,flags,tmp
 #ifdef CONFIG_SMP
-	ldil		L%pa_tlb_lock,%r1
-	ldo		R%pa_tlb_lock(%r1),\la
+#if __PA_LDCW_ALIGNMENT > 4
+	load32		pa_tlb_lock + __PA_LDCW_ALIGNMENT-1, \la
+	depi		0,31,__PA_LDCW_ALIGN_ORDER, \la
+#else
+	load32		pa_tlb_lock, \la
+#endif
 	rsm		PSW_SM_I,\flags
 1:	LDCW		0(\la),\tmp
 	cmpib,<>,n	0,\tmp,3f
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/tlb: Drop the _GPL from the cpu_tlbstate export
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (112 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/microcode/AMD: Add support for fam17h microcode loading Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] parisc: Fix alignment of pa_tlb_lock in assembly on 32-bit SMP kernel Sasha Levin
                   ` (402 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Thomas Gleixner, Sasha Levin

From: Thomas Gleixner <tglx@linutronix.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1e5476815fd7f98b888e01a0f9522b63085f96c9 ]

The recent changes for PTI touch cpu_tlbstate from various tlb_flush
inlines. cpu_tlbstate is exported as GPL symbol, so this causes a
regression when building out of tree drivers for certain graphics cards.

Aside of that the export was wrong since it was introduced as it should
have been EXPORT_PER_CPU_SYMBOL_GPL().

Use the correct PER_CPU export and drop the _GPL to restore the previous
state which allows users to utilize the cards they payed for.

As always I'm really thrilled to make this kind of change to support the
#friends (or however the hot hashtag of today is spelled) from that closet
sauce graphics corp.

Fixes: 1e02ce4cccdc ("x86: Store a per-cpu shadow copy of CR4")
Fixes: 6fd166aae78c ("x86/mm: Use/Fix PCID to optimize user/kernel switches")
Reported-by: Kees Cook <keescook@google.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: stable@vger.kernel.org
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/mm/init.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 3e1bb1c8daea..6fae65ea51d6 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -758,7 +758,7 @@ DEFINE_PER_CPU_SHARED_ALIGNED(struct tlb_state, cpu_tlbstate) = {
 #endif
 	.cr4 = ~0UL,	/* fail hard if we screw up cr4 shadow initialization */
 };
-EXPORT_SYMBOL_GPL(cpu_tlbstate);
+EXPORT_PER_CPU_SYMBOL(cpu_tlbstate);
 
 void update_cache_mode_entry(unsigned entry, enum page_cache_mode cache)
 {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] genksyms: Handle string literals with spaces in reference files
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (114 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] parisc: Fix alignment of pa_tlb_lock in assembly on 32-bit SMP kernel Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] module: keep percpu symbols in module's symtab Sasha Levin
                   ` (400 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Michal Marek, Sasha Levin

From: Michal Marek <mmarek@suse.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a78f70e8d65e88b9f631d073f68cb26dcd746298 ]

The reference files use spaces to separate tokens, however, we must
preserve spaces inside string literals. Currently the only case in the
tree is struct edac_raw_error_desc in <linux/edac.h>:

$ KBUILD_SYMTYPES=1 make -s drivers/edac/amd64_edac.symtypes
$ mv drivers/edac/amd64_edac.{symtypes,symref}
$ KBUILD_SYMTYPES=1 make -s drivers/edac/amd64_edac.symtypes
drivers/edac/amd64_edac.c:527: warning: amd64_get_dram_hole_info: modversion changed because of changes in struct edac_raw_error_desc

Signed-off-by: Michal Marek <mmarek@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 scripts/genksyms/genksyms.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c
index 88632df4381b..dafaf96e0a34 100644
--- a/scripts/genksyms/genksyms.c
+++ b/scripts/genksyms/genksyms.c
@@ -423,13 +423,15 @@ static struct string_list *read_node(FILE *f)
 	struct string_list node = {
 		.string = buffer,
 		.tag = SYM_NORMAL };
-	int c;
+	int c, in_string = 0;
 
 	while ((c = fgetc(f)) != EOF) {
-		if (c == ' ') {
+		if (!in_string && c == ' ') {
 			if (node.string == buffer)
 				continue;
 			break;
+		} else if (c == '"') {
+			in_string = !in_string;
 		} else if (c == '\n') {
 			if (node.string == buffer)
 				return NULL;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] module: keep percpu symbols in module's symtab
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (115 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] genksyms: Handle string literals with spaces in reference files Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] proc: much faster /proc/vmstat Sasha Levin
                   ` (399 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Miroslav Benes, Rusty Russell, Jiri Kosina, Sasha Levin

From: Miroslav Benes <mbenes@suse.cz>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e0224418516b4d8a6c2160574bac18447c354ef0 ]

Currently, percpu symbols from .data..percpu ELF section of a module are
not copied over and stored in final symtab array of struct module.
Consequently such symbol cannot be returned via kallsyms API (for
example kallsyms_lookup_name). This can be especially confusing when the
percpu symbol is exported. Only its __ksymtab et al. are present in its
symtab.

The culprit is in layout_and_allocate() function where SHF_ALLOC flag is
dropped for .data..percpu section. There is in fact no need to copy the
section to final struct module, because kernel module loader allocates
extra percpu section by itself. Unfortunately only symbols from
SHF_ALLOC sections are copied due to a check in is_core_symbol().

The patch changes is_core_symbol() function to copy over also percpu
symbols (their st_shndx points to .data..percpu ELF section). We do it
only if CONFIG_KALLSYMS_ALL is set to be consistent with the rest of the
function (ELF section is SHF_ALLOC but !SHF_EXECINSTR). Finally
elf_type() returns type 'a' for a percpu symbol because its address is
absolute.

Signed-off-by: Miroslav Benes <mbenes@suse.cz>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/module.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/kernel/module.c b/kernel/module.c
index 6920d1080cdd..6fbc430e59db 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -2233,7 +2233,7 @@ static char elf_type(const Elf_Sym *sym, const struct load_info *info)
 	}
 	if (sym->st_shndx == SHN_UNDEF)
 		return 'U';
-	if (sym->st_shndx == SHN_ABS)
+	if (sym->st_shndx == SHN_ABS || sym->st_shndx == info->index.pcpu)
 		return 'a';
 	if (sym->st_shndx >= SHN_LORESERVE)
 		return '?';
@@ -2262,7 +2262,7 @@ static char elf_type(const Elf_Sym *sym, const struct load_info *info)
 }
 
 static bool is_core_symbol(const Elf_Sym *src, const Elf_Shdr *sechdrs,
-			unsigned int shnum)
+			unsigned int shnum, unsigned int pcpundx)
 {
 	const Elf_Shdr *sec;
 
@@ -2271,6 +2271,11 @@ static bool is_core_symbol(const Elf_Sym *src, const Elf_Shdr *sechdrs,
 	    || !src->st_name)
 		return false;
 
+#ifdef CONFIG_KALLSYMS_ALL
+	if (src->st_shndx == pcpundx)
+		return true;
+#endif
+
 	sec = sechdrs + src->st_shndx;
 	if (!(sec->sh_flags & SHF_ALLOC)
 #ifndef CONFIG_KALLSYMS_ALL
@@ -2308,7 +2313,8 @@ static void layout_symtab(struct module *mod, struct load_info *info)
 	/* Compute total space required for the core symbols' strtab. */
 	for (ndst = i = 0; i < nsrc; i++) {
 		if (i == 0 ||
-		    is_core_symbol(src+i, info->sechdrs, info->hdr->e_shnum)) {
+		    is_core_symbol(src+i, info->sechdrs, info->hdr->e_shnum,
+				   info->index.pcpu)) {
 			strtab_size += strlen(&info->strtab[src[i].st_name])+1;
 			ndst++;
 		}
@@ -2366,7 +2372,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info)
 	src = mod->kallsyms->symtab;
 	for (ndst = i = 0; i < mod->kallsyms->num_symtab; i++) {
 		if (i == 0 ||
-		    is_core_symbol(src+i, info->sechdrs, info->hdr->e_shnum)) {
+		    is_core_symbol(src+i, info->sechdrs, info->hdr->e_shnum,
+				   info->index.pcpu)) {
 			dst[ndst] = src[i];
 			dst[ndst++].st_name = s - mod->core_kallsyms.strtab;
 			s += strlcpy(s, &mod->kallsyms->strtab[src[i].st_name],
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] proc: much faster /proc/vmstat
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (116 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] module: keep percpu symbols in module's symtab Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] module: Issue warnings when tainting kernel Sasha Levin
                   ` (398 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Alexey Dobriyan, Andrew Morton, Linus Torvalds, Sasha Levin

From: Alexey Dobriyan <adobriyan@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 68ba0326b4e14988f9e0c24a6e12a85cf2acd1ca ]

Every current KDE system has process named ksysguardd polling files
below once in several seconds:

	$ strace -e trace=open -p $(pidof ksysguardd)
	Process 1812 attached
	open("/etc/mtab", O_RDONLY|O_CLOEXEC)   = 8
	open("/etc/mtab", O_RDONLY|O_CLOEXEC)   = 8
	open("/proc/net/dev", O_RDONLY)         = 8
	open("/proc/net/wireless", O_RDONLY)    = -1 ENOENT (No such file or directory)
	open("/proc/stat", O_RDONLY)            = 8
	open("/proc/vmstat", O_RDONLY)          = 8

Hell knows what it is doing but speed up reading /proc/vmstat by 33%!

Benchmark is open+read+close 1.000.000 times.

			BEFORE
$ perf stat -r 10 taskset -c 3 ./proc-vmstat

 Performance counter stats for 'taskset -c 3 ./proc-vmstat' (10 runs):

      13146.768464      task-clock (msec)         #    0.960 CPUs utilized            ( +-  0.60% )
                15      context-switches          #    0.001 K/sec                    ( +-  1.41% )
                 1      cpu-migrations            #    0.000 K/sec                    ( +- 11.11% )
               104      page-faults               #    0.008 K/sec                    ( +-  0.57% )
    45,489,799,349      cycles                    #    3.460 GHz                      ( +-  0.03% )
     9,970,175,743      stalled-cycles-frontend   #   21.92% frontend cycles idle     ( +-  0.10% )
     2,800,298,015      stalled-cycles-backend    #   6.16% backend cycles idle       ( +-  0.32% )
    79,241,190,850      instructions              #    1.74  insn per cycle
                                                  #    0.13  stalled cycles per insn  ( +-  0.00% )
    17,616,096,146      branches                  # 1339.956 M/sec                    ( +-  0.00% )
       176,106,232      branch-misses             #    1.00% of all branches          ( +-  0.18% )

      13.691078109 seconds time elapsed                                          ( +-  0.03% )
      ^^^^^^^^^^^^

			AFTER
$ perf stat -r 10 taskset -c 3 ./proc-vmstat

 Performance counter stats for 'taskset -c 3 ./proc-vmstat' (10 runs):

       8688.353749      task-clock (msec)         #    0.950 CPUs utilized            ( +-  1.25% )
                10      context-switches          #    0.001 K/sec                    ( +-  2.13% )
                 1      cpu-migrations            #    0.000 K/sec
               104      page-faults               #    0.012 K/sec                    ( +-  0.56% )
    30,384,010,730      cycles                    #    3.497 GHz                      ( +-  0.07% )
    12,296,259,407      stalled-cycles-frontend   #   40.47% frontend cycles idle     ( +-  0.13% )
     3,370,668,651      stalled-cycles-backend    #  11.09% backend cycles idle       ( +-  0.69% )
    28,969,052,879      instructions              #    0.95  insn per cycle
                                                  #    0.42  stalled cycles per insn  ( +-  0.01% )
     6,308,245,891      branches                  #  726.058 M/sec                    ( +-  0.00% )
       214,685,502      branch-misses             #    3.40% of all branches          ( +-  0.26% )

       9.146081052 seconds time elapsed                                          ( +-  0.07% )
       ^^^^^^^^^^^

vsnprintf() is slow because:

1. format_decode() is busy looking for format specifier: 2 branches
   per character (not in this case, but in others)

2. approximately million branches while parsing format mini language
   and everywhere

3.  just look at what string() does /proc/vmstat is good case because
   most of its content are strings

Link: http://lkml.kernel.org/r/20160806125455.GA1187@p183.telecom.by
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Cc: Joe Perches <joe@perches.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 mm/vmstat.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/mm/vmstat.c b/mm/vmstat.c
index 4f5cd974e11a..9b525cd66ca6 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -1326,7 +1326,9 @@ static int vmstat_show(struct seq_file *m, void *arg)
 	unsigned long *l = arg;
 	unsigned long off = l - (unsigned long *)m->private;
 
-	seq_printf(m, "%s %lu\n", vmstat_text[off], *l);
+	seq_puts(m, vmstat_text[off]);
+	seq_put_decimal_ull(m, ' ', *l);
+	seq_putc(m, '\n');
 	return 0;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] module: Issue warnings when tainting kernel
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (117 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] proc: much faster /proc/vmstat Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] KVM: Fix stack-out-of-bounds read in write_mmio Sasha Levin
                   ` (397 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Libor Pechacek, Rusty Russell, Sasha Levin

From: Libor Pechacek <lpechacek@suse.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 3205c36cf7d96024626f92d65f560035df1abcb2 ]

While most of the locations where a kernel taint bit is set are accompanied
with a warning message, there are two which set their bits silently.  If
the tainting module gets unloaded later on, it is almost impossible to tell
what was the reason for setting the flag.

Signed-off-by: Libor Pechacek <lpechacek@suse.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/module.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/kernel/module.c b/kernel/module.c
index 6fbc430e59db..c38bf6e486a4 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -2733,8 +2733,12 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags)
 		return -ENOEXEC;
 	}
 
-	if (!get_modinfo(info, "intree"))
+	if (!get_modinfo(info, "intree")) {
+		if (!test_taint(TAINT_OOT_MODULE))
+			pr_warn("%s: loading out-of-tree module taints kernel.\n",
+				mod->name);
 		add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK);
+	}
 
 	if (get_modinfo(info, "staging")) {
 		add_taint_module(mod, TAINT_CRAP, LOCKDEP_STILL_OK);
@@ -2899,6 +2903,8 @@ static int move_module(struct module *mod, struct load_info *info)
 
 static int check_module_license_and_versions(struct module *mod)
 {
+	int prev_taint = test_taint(TAINT_PROPRIETARY_MODULE);
+
 	/*
 	 * ndiswrapper is under GPL by itself, but loads proprietary modules.
 	 * Don't use add_taint_module(), as it would prevent ndiswrapper from
@@ -2917,6 +2923,9 @@ static int check_module_license_and_versions(struct module *mod)
 		add_taint_module(mod, TAINT_PROPRIETARY_MODULE,
 				 LOCKDEP_NOW_UNRELIABLE);
 
+	if (!prev_taint && test_taint(TAINT_PROPRIETARY_MODULE))
+		pr_warn("%s: module license taints kernel.\n", mod->name);
+
 #ifdef CONFIG_MODVERSIONS
 	if ((mod->num_syms && !mod->crcs)
 	    || (mod->num_gpl_syms && !mod->gpl_crcs)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] KVM: Fix stack-out-of-bounds read in write_mmio
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (118 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] module: Issue warnings when tainting kernel Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] dm bufio: fix shrinker scans when (nr_to_scan < retain_target) Sasha Levin
                   ` (396 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Wanpeng Li, Paolo Bonzini, Sasha Levin

From: Wanpeng Li <wanpeng.li@hotmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e39d200fa5bf5b94a0948db0dae44c1b73b84a56 ]

Reported by syzkaller:

  BUG: KASAN: stack-out-of-bounds in write_mmio+0x11e/0x270 [kvm]
  Read of size 8 at addr ffff8803259df7f8 by task syz-executor/32298

  CPU: 6 PID: 32298 Comm: syz-executor Tainted: G           OE    4.15.0-rc2+ #18
  Hardware name: LENOVO ThinkCentre M8500t-N000/SHARKBAY, BIOS FBKTC1AUS 02/16/2016
  Call Trace:
   dump_stack+0xab/0xe1
   print_address_description+0x6b/0x290
   kasan_report+0x28a/0x370
   write_mmio+0x11e/0x270 [kvm]
   emulator_read_write_onepage+0x311/0x600 [kvm]
   emulator_read_write+0xef/0x240 [kvm]
   emulator_fix_hypercall+0x105/0x150 [kvm]
   em_hypercall+0x2b/0x80 [kvm]
   x86_emulate_insn+0x2b1/0x1640 [kvm]
   x86_emulate_instruction+0x39a/0xb90 [kvm]
   handle_exception+0x1b4/0x4d0 [kvm_intel]
   vcpu_enter_guest+0x15a0/0x2640 [kvm]
   kvm_arch_vcpu_ioctl_run+0x549/0x7d0 [kvm]
   kvm_vcpu_ioctl+0x479/0x880 [kvm]
   do_vfs_ioctl+0x142/0x9a0
   SyS_ioctl+0x74/0x80
   entry_SYSCALL_64_fastpath+0x23/0x9a

The path of patched vmmcall will patch 3 bytes opcode 0F 01 C1(vmcall)
to the guest memory, however, write_mmio tracepoint always prints 8 bytes
through *(u64 *)val since kvm splits the mmio access into 8 bytes. This
leaks 5 bytes from the kernel stack (CVE-2017-17741).  This patch fixes
it by just accessing the bytes which we operate on.

Before patch:

syz-executor-5567  [007] .... 51370.561696: kvm_mmio: mmio write len 3 gpa 0x10 val 0x1ffff10077c1010f

After patch:

syz-executor-13416 [002] .... 51302.299573: kvm_mmio: mmio write len 3 gpa 0x10 val 0xc1010f

Reported-by: Dmitry Vyukov <dvyukov@google.com>
Reviewed-by: Darren Kenny <darren.kenny@oracle.com>
Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
Tested-by: Marc Zyngier <marc.zyngier@arm.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/kvm/mmio.c        | 6 +++---
 arch/x86/kvm/x86.c         | 8 ++++----
 include/trace/events/kvm.h | 7 +++++--
 3 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/arch/arm/kvm/mmio.c b/arch/arm/kvm/mmio.c
index 974b1c606d04..04e5004b34e1 100644
--- a/arch/arm/kvm/mmio.c
+++ b/arch/arm/kvm/mmio.c
@@ -113,7 +113,7 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run)
 		}
 
 		trace_kvm_mmio(KVM_TRACE_MMIO_READ, len, run->mmio.phys_addr,
-			       data);
+			       &data);
 		data = vcpu_data_host_to_guest(vcpu, data, len);
 		*vcpu_reg(vcpu, vcpu->arch.mmio_decode.rt) = data;
 	}
@@ -188,14 +188,14 @@ int io_mem_abort(struct kvm_vcpu *vcpu, struct kvm_run *run,
 	if (is_write) {
 		data = vcpu_data_guest_to_host(vcpu, *vcpu_reg(vcpu, rt), len);
 
-		trace_kvm_mmio(KVM_TRACE_MMIO_WRITE, len, fault_ipa, data);
+		trace_kvm_mmio(KVM_TRACE_MMIO_WRITE, len, fault_ipa, &data);
 		mmio_write_buf(data_buf, len, data);
 
 		ret = kvm_io_bus_write(vcpu, KVM_MMIO_BUS, fault_ipa, len,
 				       data_buf);
 	} else {
 		trace_kvm_mmio(KVM_TRACE_MMIO_READ_UNSATISFIED, len,
-			       fault_ipa, 0);
+			       fault_ipa, NULL);
 
 		ret = kvm_io_bus_read(vcpu, KVM_MMIO_BUS, fault_ipa, len,
 				      data_buf);
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index bd23b1cad80a..be699d1c260f 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -4188,7 +4188,7 @@ static int vcpu_mmio_read(struct kvm_vcpu *vcpu, gpa_t addr, int len, void *v)
 					 addr, n, v))
 		    && kvm_io_bus_read(vcpu, KVM_MMIO_BUS, addr, n, v))
 			break;
-		trace_kvm_mmio(KVM_TRACE_MMIO_READ, n, addr, *(u64 *)v);
+		trace_kvm_mmio(KVM_TRACE_MMIO_READ, n, addr, v);
 		handled += n;
 		addr += n;
 		len -= n;
@@ -4427,7 +4427,7 @@ static int read_prepare(struct kvm_vcpu *vcpu, void *val, int bytes)
 {
 	if (vcpu->mmio_read_completed) {
 		trace_kvm_mmio(KVM_TRACE_MMIO_READ, bytes,
-			       vcpu->mmio_fragments[0].gpa, *(u64 *)val);
+			       vcpu->mmio_fragments[0].gpa, val);
 		vcpu->mmio_read_completed = 0;
 		return 1;
 	}
@@ -4449,14 +4449,14 @@ static int write_emulate(struct kvm_vcpu *vcpu, gpa_t gpa,
 
 static int write_mmio(struct kvm_vcpu *vcpu, gpa_t gpa, int bytes, void *val)
 {
-	trace_kvm_mmio(KVM_TRACE_MMIO_WRITE, bytes, gpa, *(u64 *)val);
+	trace_kvm_mmio(KVM_TRACE_MMIO_WRITE, bytes, gpa, val);
 	return vcpu_mmio_write(vcpu, gpa, bytes, val);
 }
 
 static int read_exit_mmio(struct kvm_vcpu *vcpu, gpa_t gpa,
 			  void *val, int bytes)
 {
-	trace_kvm_mmio(KVM_TRACE_MMIO_READ_UNSATISFIED, bytes, gpa, 0);
+	trace_kvm_mmio(KVM_TRACE_MMIO_READ_UNSATISFIED, bytes, gpa, NULL);
 	return X86EMUL_IO_NEEDED;
 }
 
diff --git a/include/trace/events/kvm.h b/include/trace/events/kvm.h
index a44062da684b..c0cf08e9f38a 100644
--- a/include/trace/events/kvm.h
+++ b/include/trace/events/kvm.h
@@ -204,7 +204,7 @@ TRACE_EVENT(kvm_ack_irq,
 	{ KVM_TRACE_MMIO_WRITE, "write" }
 
 TRACE_EVENT(kvm_mmio,
-	TP_PROTO(int type, int len, u64 gpa, u64 val),
+	TP_PROTO(int type, int len, u64 gpa, void *val),
 	TP_ARGS(type, len, gpa, val),
 
 	TP_STRUCT__entry(
@@ -218,7 +218,10 @@ TRACE_EVENT(kvm_mmio,
 		__entry->type		= type;
 		__entry->len		= len;
 		__entry->gpa		= gpa;
-		__entry->val		= val;
+		__entry->val		= 0;
+		if (val)
+			memcpy(&__entry->val, val,
+			       min_t(u32, sizeof(__entry->val), len));
 	),
 
 	TP_printk("mmio %s len %u gpa 0x%llx val 0x%llx",
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] dm bufio: fix shrinker scans when (nr_to_scan < retain_target)
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (119 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] KVM: Fix stack-out-of-bounds read in write_mmio Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] can: gs_usb: fix return value of the "set_bittiming" callback Sasha Levin
                   ` (395 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Suren Baghdasaryan, Mike Snitzer, Sasha Levin

From: Suren Baghdasaryan <surenb@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fbc7c07ec23c040179384a1f16b62b6030eb6bdd ]

When system is under memory pressure it is observed that dm bufio
shrinker often reclaims only one buffer per scan. This change fixes
the following two issues in dm bufio shrinker that cause this behavior:

1. ((nr_to_scan - freed) <= retain_target) condition is used to
terminate slab scan process. This assumes that nr_to_scan is equal
to the LRU size, which might not be correct because do_shrink_slab()
in vmscan.c calculates nr_to_scan using multiple inputs.
As a result when nr_to_scan is less than retain_target (64) the scan
will terminate after the first iteration, effectively reclaiming one
buffer per scan and making scans very inefficient. This hurts vmscan
performance especially because mutex is acquired/released every time
dm_bufio_shrink_scan() is called.
New implementation uses ((LRU size - freed) <= retain_target)
condition for scan termination. LRU size can be safely determined
inside __scan() because this function is called after dm_bufio_lock().

2. do_shrink_slab() uses value returned by dm_bufio_shrink_count() to
determine number of freeable objects in the slab. However dm_bufio
always retains retain_target buffers in its LRU and will terminate
a scan when this mark is reached. Therefore returning the entire LRU size
from dm_bufio_shrink_count() is misleading because that does not
represent the number of freeable objects that slab will reclaim during
a scan. Returning (LRU size - retain_target) better represents the
number of freeable objects in the slab. This way do_shrink_slab()
returns 0 when (LRU size < retain_target) and vmscan will not try to
scan this shrinker avoiding scans that will not reclaim any memory.

Test: tested using Android device running
<AOSP>/system/extras/alloc-stress that generates memory pressure
and causes intensive shrinker scans

Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/md/dm-bufio.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
index 51dc353f7962..657b8f763754 100644
--- a/drivers/md/dm-bufio.c
+++ b/drivers/md/dm-bufio.c
@@ -1521,7 +1521,8 @@ static unsigned long __scan(struct dm_bufio_client *c, unsigned long nr_to_scan,
 	int l;
 	struct dm_buffer *b, *tmp;
 	unsigned long freed = 0;
-	unsigned long count = nr_to_scan;
+	unsigned long count = c->n_buffers[LIST_CLEAN] +
+			      c->n_buffers[LIST_DIRTY];
 	unsigned long retain_target = get_retain_buffers(c);
 
 	for (l = 0; l < LIST_SIZE; l++) {
@@ -1558,6 +1559,7 @@ dm_bufio_shrink_count(struct shrinker *shrink, struct shrink_control *sc)
 {
 	struct dm_bufio_client *c;
 	unsigned long count;
+	unsigned long retain_target;
 
 	c = container_of(shrink, struct dm_bufio_client, shrinker);
 	if (sc->gfp_mask & __GFP_FS)
@@ -1566,8 +1568,9 @@ dm_bufio_shrink_count(struct shrinker *shrink, struct shrink_control *sc)
 		return 0;
 
 	count = c->n_buffers[LIST_CLEAN] + c->n_buffers[LIST_DIRTY];
+	retain_target = get_retain_buffers(c);
 	dm_bufio_unlock(c);
-	return count;
+	return (count < retain_target) ? 0 : (count - retain_target);
 }
 
 /*
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] can: gs_usb: fix return value of the "set_bittiming" callback
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (120 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] dm bufio: fix shrinker scans when (nr_to_scan < retain_target) Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] IB/srpt: Disable RDMA access by the initiator Sasha Levin
                   ` (394 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Wolfgang Grandegger, Marc Kleine-Budde, Sasha Levin

From: Wolfgang Grandegger <wg@grandegger.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d5b42e6607661b198d8b26a0c30969605b1bf5c7 ]

The "set_bittiming" callback treats a positive return value as error!
For that reason "can_changelink()" will quit silently after setting
the bittiming values without processing ctrlmode, restart-ms, etc.

Signed-off-by: Wolfgang Grandegger <wg@grandegger.com>
Cc: linux-stable <stable@vger.kernel.org>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/can/usb/gs_usb.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c
index 3b850f390fd7..7e6f36a59f06 100644
--- a/drivers/net/can/usb/gs_usb.c
+++ b/drivers/net/can/usb/gs_usb.c
@@ -430,7 +430,7 @@ static int gs_usb_set_bittiming(struct net_device *netdev)
 		dev_err(netdev->dev.parent, "Couldn't set bittimings (err=%d)",
 			rc);
 
-	return rc;
+	return (rc > 0) ? 0 : rc;
 }
 
 static void gs_usb_xmit_callback(struct urb *urb)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] IB/srpt: Disable RDMA access by the initiator
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (121 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] can: gs_usb: fix return value of the "set_bittiming" callback Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Validate PR_SET_FP_MODE prctl(2) requests against the ABI of the task Sasha Levin
                   ` (393 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Bart Van Assche, Jason Gunthorpe, Sasha Levin

From: Bart Van Assche <bart.vanassche@wdc.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit bec40c26041de61162f7be9d2ce548c756ce0f65 ]

With the SRP protocol all RDMA operations are initiated by the target.
Since no RDMA operations are initiated by the initiator, do not grant
the initiator permission to submit RDMA reads or writes to the target.

Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/infiniband/ulp/srpt/ib_srpt.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c
index 416cd07ab87a..6c30192dcb78 100644
--- a/drivers/infiniband/ulp/srpt/ib_srpt.c
+++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
@@ -958,8 +958,7 @@ static int srpt_init_ch_qp(struct srpt_rdma_ch *ch, struct ib_qp *qp)
 		return -ENOMEM;
 
 	attr->qp_state = IB_QPS_INIT;
-	attr->qp_access_flags = IB_ACCESS_LOCAL_WRITE | IB_ACCESS_REMOTE_READ |
-	    IB_ACCESS_REMOTE_WRITE;
+	attr->qp_access_flags = IB_ACCESS_LOCAL_WRITE;
 	attr->port_num = ch->sport->port;
 	attr->pkey_index = 0;
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] MIPS: Validate PR_SET_FP_MODE prctl(2) requests against the ABI of the task
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (122 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] IB/srpt: Disable RDMA access by the initiator Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Factor out NT_PRFPREG regset access helpers Sasha Levin
                   ` (392 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Maciej W. Rozycki, Ralf Baechle, Sasha Levin

From: "Maciej W. Rozycki" <macro@mips.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b67336eee3fcb8ecedc6c13e2bf88aacfa3151e2 ]

Fix an API loophole introduced with commit 9791554b45a2 ("MIPS,prctl:
add PR_[GS]ET_FP_MODE prctl options for MIPS"), where the caller of
prctl(2) is incorrectly allowed to make a change to CP0.Status.FR or
CP0.Config5.FRE register bits even if CONFIG_MIPS_O32_FP64_SUPPORT has
not been enabled, despite that an executable requesting the mode
requested via ELF file annotation would not be allowed to run in the
first place, or for n64 and n64 ABI tasks which do not have non-default
modes defined at all.  Add suitable checks to `mips_set_process_fp_mode'
and bail out if an invalid mode change has been requested for the ABI in
effect, even if the FPU hardware or emulation would otherwise allow it.

Always succeed however without taking any further action if the mode
requested is the same as one already in effect, regardless of whether
any mode change, should it be requested, would actually be allowed for
the task concerned.

Signed-off-by: Maciej W. Rozycki <macro@mips.com>
Fixes: 9791554b45a2 ("MIPS,prctl: add PR_[GS]ET_FP_MODE prctl options for MIPS")
Reviewed-by: Paul Burton <paul.burton@mips.com>
Cc: James Hogan <james.hogan@mips.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Cc: stable@vger.kernel.org # 4.0+
Patchwork: https://patchwork.linux-mips.org/patch/17800/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/mips/kernel/process.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
index ded8b8ba34fd..18cb5eb10e55 100644
--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
@@ -631,6 +631,18 @@ int mips_set_process_fp_mode(struct task_struct *task, unsigned int value)
 	unsigned long switch_count;
 	struct task_struct *t;
 
+	/* If nothing to change, return right away, successfully.  */
+	if (value == mips_get_process_fp_mode(task))
+		return 0;
+
+	/* Only accept a mode change if 64-bit FP enabled for o32.  */
+	if (!IS_ENABLED(CONFIG_MIPS_O32_FP64_SUPPORT))
+		return -EOPNOTSUPP;
+
+	/* And only for o32 tasks.  */
+	if (IS_ENABLED(CONFIG_64BIT) && !test_thread_flag(TIF_32BIT_REGS))
+		return -EOPNOTSUPP;
+
 	/* Check the value is valid */
 	if (value & ~known_bits)
 		return -EOPNOTSUPP;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] MIPS: Guard against any partial write attempt with PTRACE_SETREGSET
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (124 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Factor out NT_PRFPREG regset access helpers Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Consistently handle buffer counter " Sasha Levin
                   ` (390 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Maciej W. Rozycki, Ralf Baechle, Sasha Levin

From: "Maciej W. Rozycki" <macro@mips.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit dc24d0edf33c3e15099688b6bbdf7bdc24bf6e91 ]

Complement commit d614fd58a283 ("mips/ptrace: Preserve previous
registers for short regset write") and ensure that no partial register
write attempt is made with PTRACE_SETREGSET, as we do not preinitialize
any temporaries used to hold incoming register data and consequently
random data could be written.

It is the responsibility of the caller, such as `ptrace_regset', to
arrange for writes to span whole registers only, so here we only assert
that it has indeed happened.

Signed-off-by: Maciej W. Rozycki <macro@mips.com>
Fixes: 72b22bbad1e7 ("MIPS: Don't assume 64-bit FP registers for FP regset")
Cc: James Hogan <james.hogan@mips.com>
Cc: Paul Burton <Paul.Burton@mips.com>
Cc: Alex Smith <alex@alex-smith.me.uk>
Cc: Dave Martin <Dave.Martin@arm.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Cc: stable@vger.kernel.org # v3.15+
Patchwork: https://patchwork.linux-mips.org/patch/17926/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/mips/kernel/ptrace.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c
index 6d3bdd9af8af..30eaf03e6679 100644
--- a/arch/mips/kernel/ptrace.c
+++ b/arch/mips/kernel/ptrace.c
@@ -535,7 +535,15 @@ static int fpr_set_msa(struct task_struct *target,
 	return 0;
 }
 
-/* Copy the supplied NT_PRFPREG buffer to the floating-point context.  */
+/*
+ * Copy the supplied NT_PRFPREG buffer to the floating-point context.
+ *
+ * We optimize for the case where `count % sizeof(elf_fpreg_t) == 0',
+ * which is supposed to have been guaranteed by the kernel before
+ * calling us, e.g. in `ptrace_regset'.  We enforce that requirement,
+ * so that we can safely avoid preinitializing temporaries for
+ * partial register writes.
+ */
 static int fpr_set(struct task_struct *target,
 		   const struct user_regset *regset,
 		   unsigned int pos, unsigned int count,
@@ -543,6 +551,8 @@ static int fpr_set(struct task_struct *target,
 {
 	int err;
 
+	BUG_ON(count % sizeof(elf_fpreg_t));
+
 	/* XXX fcr31  */
 
 	init_fp_ctx(target);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] MIPS: Factor out NT_PRFPREG regset access helpers
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (123 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Validate PR_SET_FP_MODE prctl(2) requests against the ABI of the task Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Guard against any partial write attempt with PTRACE_SETREGSET Sasha Levin
                   ` (391 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Maciej W. Rozycki, Ralf Baechle, Sasha Levin

From: "Maciej W. Rozycki" <macro@mips.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a03fe72572c12e98f4173f8a535f32468e48b6ec ]

In preparation to fix a commit 72b22bbad1e7 ("MIPS: Don't assume 64-bit
FP registers for FP regset") FCSR access regression factor out
NT_PRFPREG regset access helpers for the non-MSA and the MSA variants
respectively, to avoid having to deal with excessive indentation in the
actual fix.

No functional change, however use `target->thread.fpu.fpr[0]' rather
than `target->thread.fpu.fpr[i]' for FGR holding type size determination
as there's no `i' variable to refer to anymore, and for the factored out
`i' variable declaration use `unsigned int' rather than `unsigned' as
its type, following the common style.

Signed-off-by: Maciej W. Rozycki <macro@mips.com>
Fixes: 72b22bbad1e7 ("MIPS: Don't assume 64-bit FP registers for FP regset")
Cc: James Hogan <james.hogan@mips.com>
Cc: Paul Burton <Paul.Burton@mips.com>
Cc: Alex Smith <alex@alex-smith.me.uk>
Cc: Dave Martin <Dave.Martin@arm.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Cc: stable@vger.kernel.org # v3.15+
Patchwork: https://patchwork.linux-mips.org/patch/17925/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/mips/kernel/ptrace.c | 108 +++++++++++++++++++++++++++++++++++-----------
 1 file changed, 83 insertions(+), 25 deletions(-)

diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c
index 2bea5db01b0b..6d3bdd9af8af 100644
--- a/arch/mips/kernel/ptrace.c
+++ b/arch/mips/kernel/ptrace.c
@@ -438,25 +438,36 @@ static int gpr64_set(struct task_struct *target,
 
 #endif /* CONFIG_64BIT */
 
-static int fpr_get(struct task_struct *target,
-		   const struct user_regset *regset,
-		   unsigned int pos, unsigned int count,
-		   void *kbuf, void __user *ubuf)
+/*
+ * Copy the floating-point context to the supplied NT_PRFPREG buffer,
+ * !CONFIG_CPU_HAS_MSA variant.  FP context's general register slots
+ * correspond 1:1 to buffer slots.
+ */
+static int fpr_get_fpa(struct task_struct *target,
+		       unsigned int *pos, unsigned int *count,
+		       void **kbuf, void __user **ubuf)
 {
-	unsigned i;
-	int err;
-	u64 fpr_val;
-
-	/* XXX fcr31  */
+	return user_regset_copyout(pos, count, kbuf, ubuf,
+				   &target->thread.fpu,
+				   0, sizeof(elf_fpregset_t));
+}
 
-	if (sizeof(target->thread.fpu.fpr[i]) == sizeof(elf_fpreg_t))
-		return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
-					   &target->thread.fpu,
-					   0, sizeof(elf_fpregset_t));
+/*
+ * Copy the floating-point context to the supplied NT_PRFPREG buffer,
+ * CONFIG_CPU_HAS_MSA variant.  Only lower 64 bits of FP context's
+ * general register slots are copied to buffer slots.
+ */
+static int fpr_get_msa(struct task_struct *target,
+		       unsigned int *pos, unsigned int *count,
+		       void **kbuf, void __user **ubuf)
+{
+	unsigned int i;
+	u64 fpr_val;
+	int err;
 
 	for (i = 0; i < NUM_FPU_REGS; i++) {
 		fpr_val = get_fpr64(&target->thread.fpu.fpr[i], 0);
-		err = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
+		err = user_regset_copyout(pos, count, kbuf, ubuf,
 					  &fpr_val, i * sizeof(elf_fpreg_t),
 					  (i + 1) * sizeof(elf_fpreg_t));
 		if (err)
@@ -466,27 +477,54 @@ static int fpr_get(struct task_struct *target,
 	return 0;
 }
 
-static int fpr_set(struct task_struct *target,
+/* Copy the floating-point context to the supplied NT_PRFPREG buffer.  */
+static int fpr_get(struct task_struct *target,
 		   const struct user_regset *regset,
 		   unsigned int pos, unsigned int count,
-		   const void *kbuf, const void __user *ubuf)
+		   void *kbuf, void __user *ubuf)
 {
-	unsigned i;
 	int err;
-	u64 fpr_val;
 
 	/* XXX fcr31  */
 
-	init_fp_ctx(target);
+	if (sizeof(target->thread.fpu.fpr[0]) == sizeof(elf_fpreg_t))
+		err = fpr_get_fpa(target, &pos, &count, &kbuf, &ubuf);
+	else
+		err = fpr_get_msa(target, &pos, &count, &kbuf, &ubuf);
+
+	return err;
+}
 
-	if (sizeof(target->thread.fpu.fpr[i]) == sizeof(elf_fpreg_t))
-		return user_regset_copyin(&pos, &count, &kbuf, &ubuf,
-					  &target->thread.fpu,
-					  0, sizeof(elf_fpregset_t));
+/*
+ * Copy the supplied NT_PRFPREG buffer to the floating-point context,
+ * !CONFIG_CPU_HAS_MSA variant.   Buffer slots correspond 1:1 to FP
+ * context's general register slots.
+ */
+static int fpr_set_fpa(struct task_struct *target,
+		       unsigned int *pos, unsigned int *count,
+		       const void **kbuf, const void __user **ubuf)
+{
+	return user_regset_copyin(pos, count, kbuf, ubuf,
+				  &target->thread.fpu,
+				  0, sizeof(elf_fpregset_t));
+}
+
+/*
+ * Copy the supplied NT_PRFPREG buffer to the floating-point context,
+ * CONFIG_CPU_HAS_MSA variant.  Buffer slots are copied to lower 64
+ * bits only of FP context's general register slots.
+ */
+static int fpr_set_msa(struct task_struct *target,
+		       unsigned int *pos, unsigned int *count,
+		       const void **kbuf, const void __user **ubuf)
+{
+	unsigned int i;
+	u64 fpr_val;
+	int err;
 
 	BUILD_BUG_ON(sizeof(fpr_val) != sizeof(elf_fpreg_t));
-	for (i = 0; i < NUM_FPU_REGS && count >= sizeof(elf_fpreg_t); i++) {
-		err = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
+	for (i = 0; i < NUM_FPU_REGS && *count >= sizeof(elf_fpreg_t); i++) {
+		err = user_regset_copyin(pos, count, kbuf, ubuf,
 					 &fpr_val, i * sizeof(elf_fpreg_t),
 					 (i + 1) * sizeof(elf_fpreg_t));
 		if (err)
@@ -497,6 +535,26 @@ static int fpr_set(struct task_struct *target,
 	return 0;
 }
 
+/* Copy the supplied NT_PRFPREG buffer to the floating-point context.  */
+static int fpr_set(struct task_struct *target,
+		   const struct user_regset *regset,
+		   unsigned int pos, unsigned int count,
+		   const void *kbuf, const void __user *ubuf)
+{
+	int err;
+
+	/* XXX fcr31  */
+
+	init_fp_ctx(target);
+
+	if (sizeof(target->thread.fpu.fpr[0]) == sizeof(elf_fpreg_t))
+		err = fpr_set_fpa(target, &pos, &count, &kbuf, &ubuf);
+	else
+		err = fpr_set_msa(target, &pos, &count, &kbuf, &ubuf);
+
+	return err;
+}
+
 enum mips_regset {
 	REGSET_GPR,
 	REGSET_FPR,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] MIPS: Consistently handle buffer counter with PTRACE_SETREGSET
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (125 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Guard against any partial write attempt with PTRACE_SETREGSET Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Fix an FCSR access API regression with NT_PRFPREG and MSA Sasha Levin
                   ` (389 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Maciej W. Rozycki, Ralf Baechle, Sasha Levin

From: "Maciej W. Rozycki" <macro@mips.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 80b3ffce0196ea50068885d085ff981e4b8396f4 ]

Update commit d614fd58a283 ("mips/ptrace: Preserve previous registers
for short regset write") bug and consistently consume all data supplied
to `fpr_set_msa' with the ptrace(2) PTRACE_SETREGSET request, such that
a zero data buffer counter is returned where insufficient data has been
given to fill a whole number of FP general registers.

In reality this is not going to happen, as the caller is supposed to
only supply data covering a whole number of registers and it is verified
in `ptrace_regset' and again asserted in `fpr_set', however structuring
code such that the presence of trailing partial FP general register data
causes `fpr_set_msa' to return with a non-zero data buffer counter makes
it appear that this trailing data will be used if there are subsequent
writes made to FP registers, which is going to be the case with the FCSR
once the missing write to that register has been fixed.

Fixes: d614fd58a283 ("mips/ptrace: Preserve previous registers for short regset write")
Signed-off-by: Maciej W. Rozycki <macro@mips.com>
Cc: James Hogan <james.hogan@mips.com>
Cc: Paul Burton <Paul.Burton@mips.com>
Cc: Alex Smith <alex@alex-smith.me.uk>
Cc: Dave Martin <Dave.Martin@arm.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Cc: stable@vger.kernel.org # v4.11+
Patchwork: https://patchwork.linux-mips.org/patch/17927/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/mips/kernel/ptrace.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c
index 30eaf03e6679..92c861022801 100644
--- a/arch/mips/kernel/ptrace.c
+++ b/arch/mips/kernel/ptrace.c
@@ -523,7 +523,7 @@ static int fpr_set_msa(struct task_struct *target,
 	int err;
 
 	BUILD_BUG_ON(sizeof(fpr_val) != sizeof(elf_fpreg_t));
-	for (i = 0; i < NUM_FPU_REGS && *count >= sizeof(elf_fpreg_t); i++) {
+	for (i = 0; i < NUM_FPU_REGS && *count > 0; i++) {
 		err = user_regset_copyin(pos, count, kbuf, ubuf,
 					 &fpr_val, i * sizeof(elf_fpreg_t),
 					 (i + 1) * sizeof(elf_fpreg_t));
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] MIPS: Fix an FCSR access API regression with NT_PRFPREG and MSA
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (126 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Consistently handle buffer counter " Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Also verify sizeof `elf_fpreg_t' with PTRACE_SETREGSET Sasha Levin
                   ` (388 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Maciej W. Rozycki, Alex Smith, James Hogan, Ralf Baechle, Sasha Levin

From: "Maciej W. Rozycki" <macro@mips.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit be07a6a1188372b6d19a3307ec33211fc9c9439d ]

Fix a commit 72b22bbad1e7 ("MIPS: Don't assume 64-bit FP registers for
FP regset") public API regression, then activated by commit 1db1af84d6df
("MIPS: Basic MSA context switching support"), that caused the FCSR
register not to be read or written for CONFIG_CPU_HAS_MSA kernel
configurations (regardless of actual presence or absence of the MSA
feature in a given processor) with ptrace(2) PTRACE_GETREGSET and
PTRACE_SETREGSET requests nor recorded in core dumps.

This is because with !CONFIG_CPU_HAS_MSA configurations the whole of
`elf_fpregset_t' array is bulk-copied as it is, which includes the FCSR
in one half of the last, 33rd slot, whereas with CONFIG_CPU_HAS_MSA
configurations array elements are copied individually, and then only the
leading 32 FGR slots while the remaining slot is ignored.

Correct the code then such that only FGR slots are copied in the
respective !MSA and MSA helpers an then the FCSR slot is handled
separately in common code.  Use `ptrace_setfcr31' to update the FCSR
too, so that the read-only mask is respected.

Retrieving a correct value of FCSR is important in debugging not only
for the human to be able to get the right interpretation of the
situation, but for correct operation of GDB as well.  This is because
the condition code bits in FSCR are used by GDB to determine the
location to place a breakpoint at when single-stepping through an FPU
branch instruction.  If such a breakpoint is placed incorrectly (i.e.
with the condition reversed), then it will be missed, likely causing the
debuggee to run away from the control of GDB and consequently breaking
the process of investigation.

Fortunately GDB continues using the older PTRACE_GETFPREGS ptrace(2)
request which is unaffected, so the regression only really hits with
post-mortem debug sessions using a core dump file, in which case
execution, and consequently single-stepping through branches is not
possible.  Of course core files created by buggy kernels out there will
have the value of FCSR recorded clobbered, but such core files cannot be
corrected and the person using them simply will have to be aware that
the value of FCSR retrieved is not reliable.

Which also means we can likely get away without defining a replacement
API which would ensure a correct value of FSCR to be retrieved, or none
at all.

This is based on previous work by Alex Smith, extensively rewritten.

Signed-off-by: Alex Smith <alex@alex-smith.me.uk>
Signed-off-by: James Hogan <james.hogan@mips.com>
Signed-off-by: Maciej W. Rozycki <macro@mips.com>
Fixes: 72b22bbad1e7 ("MIPS: Don't assume 64-bit FP registers for FP regset")
Cc: Paul Burton <Paul.Burton@mips.com>
Cc: Dave Martin <Dave.Martin@arm.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Cc: stable@vger.kernel.org # v3.15+
Patchwork: https://patchwork.linux-mips.org/patch/17928/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/mips/kernel/ptrace.c | 47 ++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 36 insertions(+), 11 deletions(-)

diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c
index 92c861022801..57f217c90d72 100644
--- a/arch/mips/kernel/ptrace.c
+++ b/arch/mips/kernel/ptrace.c
@@ -441,7 +441,7 @@ static int gpr64_set(struct task_struct *target,
 /*
  * Copy the floating-point context to the supplied NT_PRFPREG buffer,
  * !CONFIG_CPU_HAS_MSA variant.  FP context's general register slots
- * correspond 1:1 to buffer slots.
+ * correspond 1:1 to buffer slots.  Only general registers are copied.
  */
 static int fpr_get_fpa(struct task_struct *target,
 		       unsigned int *pos, unsigned int *count,
@@ -449,13 +449,14 @@ static int fpr_get_fpa(struct task_struct *target,
 {
 	return user_regset_copyout(pos, count, kbuf, ubuf,
 				   &target->thread.fpu,
-				   0, sizeof(elf_fpregset_t));
+				   0, NUM_FPU_REGS * sizeof(elf_fpreg_t));
 }
 
 /*
  * Copy the floating-point context to the supplied NT_PRFPREG buffer,
  * CONFIG_CPU_HAS_MSA variant.  Only lower 64 bits of FP context's
- * general register slots are copied to buffer slots.
+ * general register slots are copied to buffer slots.  Only general
+ * registers are copied.
  */
 static int fpr_get_msa(struct task_struct *target,
 		       unsigned int *pos, unsigned int *count,
@@ -477,20 +478,29 @@ static int fpr_get_msa(struct task_struct *target,
 	return 0;
 }
 
-/* Copy the floating-point context to the supplied NT_PRFPREG buffer.  */
+/*
+ * Copy the floating-point context to the supplied NT_PRFPREG buffer.
+ * Choose the appropriate helper for general registers, and then copy
+ * the FCSR register separately.
+ */
 static int fpr_get(struct task_struct *target,
 		   const struct user_regset *regset,
 		   unsigned int pos, unsigned int count,
 		   void *kbuf, void __user *ubuf)
 {
+	const int fcr31_pos = NUM_FPU_REGS * sizeof(elf_fpreg_t);
 	int err;
 
-	/* XXX fcr31  */
-
 	if (sizeof(target->thread.fpu.fpr[0]) == sizeof(elf_fpreg_t))
 		err = fpr_get_fpa(target, &pos, &count, &kbuf, &ubuf);
 	else
 		err = fpr_get_msa(target, &pos, &count, &kbuf, &ubuf);
+	if (err)
+		return err;
+
+	err = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
+				  &target->thread.fpu.fcr31,
+				  fcr31_pos, fcr31_pos + sizeof(u32));
 
 	return err;
 }
@@ -498,7 +508,7 @@ static int fpr_get(struct task_struct *target,
 /*
  * Copy the supplied NT_PRFPREG buffer to the floating-point context,
  * !CONFIG_CPU_HAS_MSA variant.   Buffer slots correspond 1:1 to FP
- * context's general register slots.
+ * context's general register slots.  Only general registers are copied.
  */
 static int fpr_set_fpa(struct task_struct *target,
 		       unsigned int *pos, unsigned int *count,
@@ -506,13 +516,14 @@ static int fpr_set_fpa(struct task_struct *target,
 {
 	return user_regset_copyin(pos, count, kbuf, ubuf,
 				  &target->thread.fpu,
-				  0, sizeof(elf_fpregset_t));
+				  0, NUM_FPU_REGS * sizeof(elf_fpreg_t));
 }
 
 /*
  * Copy the supplied NT_PRFPREG buffer to the floating-point context,
  * CONFIG_CPU_HAS_MSA variant.  Buffer slots are copied to lower 64
- * bits only of FP context's general register slots.
+ * bits only of FP context's general register slots.  Only general
+ * registers are copied.
  */
 static int fpr_set_msa(struct task_struct *target,
 		       unsigned int *pos, unsigned int *count,
@@ -537,6 +548,8 @@ static int fpr_set_msa(struct task_struct *target,
 
 /*
  * Copy the supplied NT_PRFPREG buffer to the floating-point context.
+ * Choose the appropriate helper for general registers, and then copy
+ * the FCSR register separately.
  *
  * We optimize for the case where `count % sizeof(elf_fpreg_t) == 0',
  * which is supposed to have been guaranteed by the kernel before
@@ -549,18 +562,30 @@ static int fpr_set(struct task_struct *target,
 		   unsigned int pos, unsigned int count,
 		   const void *kbuf, const void __user *ubuf)
 {
+	const int fcr31_pos = NUM_FPU_REGS * sizeof(elf_fpreg_t);
+	u32 fcr31;
 	int err;
 
 	BUG_ON(count % sizeof(elf_fpreg_t));
 
-	/* XXX fcr31  */
-
 	init_fp_ctx(target);
 
 	if (sizeof(target->thread.fpu.fpr[0]) == sizeof(elf_fpreg_t))
 		err = fpr_set_fpa(target, &pos, &count, &kbuf, &ubuf);
 	else
 		err = fpr_set_msa(target, &pos, &count, &kbuf, &ubuf);
+	if (err)
+		return err;
+
+	if (count > 0) {
+		err = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
+					 &fcr31,
+					 fcr31_pos, fcr31_pos + sizeof(u32));
+		if (err)
+			return err;
+
+		ptrace_setfcr31(target, fcr31);
+	}
 
 	return err;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] MIPS: Also verify sizeof `elf_fpreg_t' with PTRACE_SETREGSET
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (127 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Fix an FCSR access API regression with NT_PRFPREG and MSA Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] kvm: vmx: Scrub hardware GPRs at VM-exit Sasha Levin
                   ` (387 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Maciej W. Rozycki, Ralf Baechle, Sasha Levin

From: "Maciej W. Rozycki" <macro@mips.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 006501e039eec411842bb3150c41358867d320c2 ]

Complement commit d614fd58a283 ("mips/ptrace: Preserve previous
registers for short regset write") and like with the PTRACE_GETREGSET
ptrace(2) request also apply a BUILD_BUG_ON check for the size of the
`elf_fpreg_t' type in the PTRACE_SETREGSET request handler.

Signed-off-by: Maciej W. Rozycki <macro@mips.com>
Fixes: d614fd58a283 ("mips/ptrace: Preserve previous registers for short regset write")
Cc: James Hogan <james.hogan@mips.com>
Cc: Paul Burton <Paul.Burton@mips.com>
Cc: Alex Smith <alex@alex-smith.me.uk>
Cc: Dave Martin <Dave.Martin@arm.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Cc: stable@vger.kernel.org # v4.11+
Patchwork: https://patchwork.linux-mips.org/patch/17929/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/mips/kernel/ptrace.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c
index 57f217c90d72..9356f9d7bd0e 100644
--- a/arch/mips/kernel/ptrace.c
+++ b/arch/mips/kernel/ptrace.c
@@ -466,6 +466,7 @@ static int fpr_get_msa(struct task_struct *target,
 	u64 fpr_val;
 	int err;
 
+	BUILD_BUG_ON(sizeof(fpr_val) != sizeof(elf_fpreg_t));
 	for (i = 0; i < NUM_FPU_REGS; i++) {
 		fpr_val = get_fpr64(&target->thread.fpu.fpr[i], 0);
 		err = user_regset_copyout(pos, count, kbuf, ubuf,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] MIPS: Disallow outsized PTRACE_SETREGSET NT_PRFPREG regset accesses
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (129 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] kvm: vmx: Scrub hardware GPRs at VM-exit Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: pcm: Remove incorrect snd_BUG_ON() usages Sasha Levin
                   ` (385 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Maciej W. Rozycki, Ralf Baechle, Sasha Levin

From: "Maciej W. Rozycki" <macro@mips.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c8c5a3a24d395b14447a9a89d61586a913840a3b ]

Complement commit c23b3d1a5311 ("MIPS: ptrace: Change GP regset to use
correct core dump register layout") and also reject outsized
PTRACE_SETREGSET requests to the NT_PRFPREG regset, like with the
NT_PRSTATUS regset.

Signed-off-by: Maciej W. Rozycki <macro@mips.com>
Fixes: c23b3d1a5311 ("MIPS: ptrace: Change GP regset to use correct core dump register layout")
Cc: James Hogan <james.hogan@mips.com>
Cc: Paul Burton <Paul.Burton@mips.com>
Cc: Alex Smith <alex@alex-smith.me.uk>
Cc: Dave Martin <Dave.Martin@arm.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Cc: stable@vger.kernel.org # v3.17+
Patchwork: https://patchwork.linux-mips.org/patch/17930/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/mips/kernel/ptrace.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c
index 9356f9d7bd0e..938d7576f455 100644
--- a/arch/mips/kernel/ptrace.c
+++ b/arch/mips/kernel/ptrace.c
@@ -569,6 +569,9 @@ static int fpr_set(struct task_struct *target,
 
 	BUG_ON(count % sizeof(elf_fpreg_t));
 
+	if (pos + count > sizeof(elf_fpregset_t))
+		return -EIO;
+
 	init_fp_ctx(target);
 
 	if (sizeof(target->thread.fpu.fpr[0]) == sizeof(elf_fpreg_t))
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] kvm: vmx: Scrub hardware GPRs at VM-exit
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (128 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Also verify sizeof `elf_fpreg_t' with PTRACE_SETREGSET Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Disallow outsized PTRACE_SETREGSET NT_PRFPREG regset accesses Sasha Levin
                   ` (386 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jim Mattson, Paolo Bonzini, Sasha Levin

From: Jim Mattson <jmattson@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 0cb5b30698fdc8f6b4646012e3acb4ddce430788 ]

Guest GPR values are live in the hardware GPRs at VM-exit.  Do not
leave any guest values in hardware GPRs after the guest GPR values are
saved to the vcpu_vmx structure.

This is a partial mitigation for CVE 2017-5715 and CVE 2017-5753.
Specifically, it defeats the Project Zero PoC for CVE 2017-5715.

Suggested-by: Eric Northup <digitaleric@google.com>
Signed-off-by: Jim Mattson <jmattson@google.com>
Reviewed-by: Eric Northup <digitaleric@google.com>
Reviewed-by: Benjamin Serebrin <serebrin@google.com>
Reviewed-by: Andrew Honig <ahonig@google.com>
[Paolo: Add AMD bits, Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kvm/svm.c | 19 +++++++++++++++++++
 arch/x86/kvm/vmx.c | 14 +++++++++++++-
 2 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index c5ecf85227e0..6b87d8bcdcdd 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -3947,6 +3947,25 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
 		"mov %%r13, %c[r13](%[svm]) \n\t"
 		"mov %%r14, %c[r14](%[svm]) \n\t"
 		"mov %%r15, %c[r15](%[svm]) \n\t"
+#endif
+		/*
+		* Clear host registers marked as clobbered to prevent
+		* speculative use.
+		*/
+		"xor %%" _ASM_BX ", %%" _ASM_BX " \n\t"
+		"xor %%" _ASM_CX ", %%" _ASM_CX " \n\t"
+		"xor %%" _ASM_DX ", %%" _ASM_DX " \n\t"
+		"xor %%" _ASM_SI ", %%" _ASM_SI " \n\t"
+		"xor %%" _ASM_DI ", %%" _ASM_DI " \n\t"
+#ifdef CONFIG_X86_64
+		"xor %%r8, %%r8 \n\t"
+		"xor %%r9, %%r9 \n\t"
+		"xor %%r10, %%r10 \n\t"
+		"xor %%r11, %%r11 \n\t"
+		"xor %%r12, %%r12 \n\t"
+		"xor %%r13, %%r13 \n\t"
+		"xor %%r14, %%r14 \n\t"
+		"xor %%r15, %%r15 \n\t"
 #endif
 		"pop %%" _ASM_BP
 		:
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 84f2825f19b5..a3bea4129cbc 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -8252,6 +8252,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
 		/* Save guest registers, load host registers, keep flags */
 		"mov %0, %c[wordsize](%%" _ASM_SP ") \n\t"
 		"pop %0 \n\t"
+		"setbe %c[fail](%0)\n\t"
 		"mov %%" _ASM_AX ", %c[rax](%0) \n\t"
 		"mov %%" _ASM_BX ", %c[rbx](%0) \n\t"
 		__ASM_SIZE(pop) " %c[rcx](%0) \n\t"
@@ -8268,12 +8269,23 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
 		"mov %%r13, %c[r13](%0) \n\t"
 		"mov %%r14, %c[r14](%0) \n\t"
 		"mov %%r15, %c[r15](%0) \n\t"
+		"xor %%r8d,  %%r8d \n\t"
+		"xor %%r9d,  %%r9d \n\t"
+		"xor %%r10d, %%r10d \n\t"
+		"xor %%r11d, %%r11d \n\t"
+		"xor %%r12d, %%r12d \n\t"
+		"xor %%r13d, %%r13d \n\t"
+		"xor %%r14d, %%r14d \n\t"
+		"xor %%r15d, %%r15d \n\t"
 #endif
 		"mov %%cr2, %%" _ASM_AX "   \n\t"
 		"mov %%" _ASM_AX ", %c[cr2](%0) \n\t"
 
+		"xor %%eax, %%eax \n\t"
+		"xor %%ebx, %%ebx \n\t"
+		"xor %%esi, %%esi \n\t"
+		"xor %%edi, %%edi \n\t"
 		"pop  %%" _ASM_BP "; pop  %%" _ASM_DX " \n\t"
-		"setbe %c[fail](%0) \n\t"
 		".pushsection .rodata \n\t"
 		".global vmx_return \n\t"
 		"vmx_return: " _ASM_PTR " 2b \n\t"
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: pcm: Remove incorrect snd_BUG_ON() usages
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (130 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Disallow outsized PTRACE_SETREGSET NT_PRFPREG regset accesses Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: pcm: Add missing error checks in OSS emulation plugin builder Sasha Levin
                   ` (384 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Takashi Iwai, Sasha Levin

From: Takashi Iwai <tiwai@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fe08f34d066f4404934a509b6806db1a4f700c86 ]

syzkaller triggered kernel warnings through PCM OSS emulation at
closing a stream:
  WARNING: CPU: 0 PID: 3502 at sound/core/pcm_lib.c:1635
  snd_pcm_hw_param_first+0x289/0x690 sound/core/pcm_lib.c:1635
  Call Trace:
  ....
   snd_pcm_hw_param_near.constprop.27+0x78d/0x9a0 sound/core/oss/pcm_oss.c:457
   snd_pcm_oss_change_params+0x17d3/0x3720 sound/core/oss/pcm_oss.c:969
   snd_pcm_oss_make_ready+0xaa/0x130 sound/core/oss/pcm_oss.c:1128
   snd_pcm_oss_sync+0x257/0x830 sound/core/oss/pcm_oss.c:1638
   snd_pcm_oss_release+0x20b/0x280 sound/core/oss/pcm_oss.c:2431
   __fput+0x327/0x7e0 fs/file_table.c:210
   ....

This happens while it tries to open and set up the aloop device
concurrently.  The warning above (invoked from snd_BUG_ON() macro) is
to detect the unexpected logical error where snd_pcm_hw_refine() call
shouldn't fail.  The theory is true for the case where the hw_params
config rules are static.  But for an aloop device, the hw_params rule
condition does vary dynamically depending on the connected target;
when another device is opened and changes the parameters, the device
connected in another side is also affected, and it caused the error
from snd_pcm_hw_refine().

That is, the simplest "solution" for this is to remove the incorrect
assumption of static rules, and treat such an error as a normal error
path.  As there are a couple of other places using snd_BUG_ON()
incorrectly, this patch removes these spurious snd_BUG_ON() calls.

Reported-by: syzbot+6f11c7e2a1b91d466432@syzkaller.appspotmail.com
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/core/oss/pcm_oss.c | 1 -
 sound/core/pcm_lib.c     | 4 ++--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
index 33e72c809e50..4a5bcf178982 100644
--- a/sound/core/oss/pcm_oss.c
+++ b/sound/core/oss/pcm_oss.c
@@ -465,7 +465,6 @@ static int snd_pcm_hw_param_near(struct snd_pcm_substream *pcm,
 		v = snd_pcm_hw_param_last(pcm, params, var, dir);
 	else
 		v = snd_pcm_hw_param_first(pcm, params, var, dir);
-	snd_BUG_ON(v < 0);
 	return v;
 }
 
diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
index 9a7cc9a56a21..4ebee7e71c85 100644
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c
@@ -1663,7 +1663,7 @@ int snd_pcm_hw_param_first(struct snd_pcm_substream *pcm,
 		return changed;
 	if (params->rmask) {
 		int err = snd_pcm_hw_refine(pcm, params);
-		if (snd_BUG_ON(err < 0))
+		if (err < 0)
 			return err;
 	}
 	return snd_pcm_hw_param_value(params, var, dir);
@@ -1710,7 +1710,7 @@ int snd_pcm_hw_param_last(struct snd_pcm_substream *pcm,
 		return changed;
 	if (params->rmask) {
 		int err = snd_pcm_hw_refine(pcm, params);
-		if (snd_BUG_ON(err < 0))
+		if (err < 0)
 			return err;
 	}
 	return snd_pcm_hw_param_value(params, var, dir);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: pcm: Add missing error checks in OSS emulation plugin builder
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (131 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: pcm: Remove incorrect snd_BUG_ON() usages Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: pcm: Abort properly at pending signal in OSS read/write loops Sasha Levin
                   ` (383 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Takashi Iwai, Sasha Levin

From: Takashi Iwai <tiwai@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6708913750344a900f2e73bfe4a4d6dbbce4fe8d ]

In the OSS emulation plugin builder where the frame size is parsed in
the plugin chain, some places miss the possible errors returned from
the plugin src_ or dst_frames callback.

This patch papers over such places.

Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/core/oss/pcm_plugin.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/sound/core/oss/pcm_plugin.c b/sound/core/oss/pcm_plugin.c
index 727ac44d39f4..a84a1d3d23e5 100644
--- a/sound/core/oss/pcm_plugin.c
+++ b/sound/core/oss/pcm_plugin.c
@@ -591,18 +591,26 @@ snd_pcm_sframes_t snd_pcm_plug_write_transfer(struct snd_pcm_substream *plug, st
 	snd_pcm_sframes_t frames = size;
 
 	plugin = snd_pcm_plug_first(plug);
-	while (plugin && frames > 0) {
+	while (plugin) {
+		if (frames <= 0)
+			return frames;
 		if ((next = plugin->next) != NULL) {
 			snd_pcm_sframes_t frames1 = frames;
-			if (plugin->dst_frames)
+			if (plugin->dst_frames) {
 				frames1 = plugin->dst_frames(plugin, frames);
+				if (frames1 <= 0)
+					return frames1;
+			}
 			if ((err = next->client_channels(next, frames1, &dst_channels)) < 0) {
 				return err;
 			}
 			if (err != frames1) {
 				frames = err;
-				if (plugin->src_frames)
+				if (plugin->src_frames) {
 					frames = plugin->src_frames(plugin, frames1);
+					if (frames <= 0)
+						return frames;
+				}
 			}
 		} else
 			dst_channels = NULL;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: pcm: Allow aborting mutex lock at OSS read/write loops
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (133 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: pcm: Abort properly at pending signal in OSS read/write loops Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: aloop: Release cable upon open error path Sasha Levin
                   ` (381 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Takashi Iwai, Sasha Levin

From: Takashi Iwai <tiwai@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 900498a34a3ac9c611e9b425094c8106bdd7dc1c ]

PCM OSS read/write loops keep taking the mutex lock for the whole
read/write, and this might take very long when the exceptionally high
amount of data is given.  Also, since it invokes with mutex_lock(),
the concurrent read/write becomes unbreakable.

This patch tries to address these issues by replacing mutex_lock()
with mutex_lock_interruptible(), and also splits / re-takes the lock
at each read/write period chunk, so that it can switch the context
more finely if requested.

Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/core/oss/pcm_oss.c | 36 +++++++++++++++++++++---------------
 1 file changed, 21 insertions(+), 15 deletions(-)

diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
index d2a9e0fd46b0..494b7b533366 100644
--- a/sound/core/oss/pcm_oss.c
+++ b/sound/core/oss/pcm_oss.c
@@ -1369,8 +1369,11 @@ static ssize_t snd_pcm_oss_write1(struct snd_pcm_substream *substream, const cha
 
 	if ((tmp = snd_pcm_oss_make_ready(substream)) < 0)
 		return tmp;
-	mutex_lock(&runtime->oss.params_lock);
 	while (bytes > 0) {
+		if (mutex_lock_interruptible(&runtime->oss.params_lock)) {
+			tmp = -ERESTARTSYS;
+			break;
+		}
 		if (bytes < runtime->oss.period_bytes || runtime->oss.buffer_used > 0) {
 			tmp = bytes;
 			if (tmp + runtime->oss.buffer_used > runtime->oss.period_bytes)
@@ -1414,18 +1417,18 @@ static ssize_t snd_pcm_oss_write1(struct snd_pcm_substream *substream, const cha
 			xfer += tmp;
 			if ((substream->f_flags & O_NONBLOCK) != 0 &&
 			    tmp != runtime->oss.period_bytes)
-				break;
+				tmp = -EAGAIN;
 		}
+ err:
+		mutex_unlock(&runtime->oss.params_lock);
+		if (tmp < 0)
+			break;
 		if (signal_pending(current)) {
 			tmp = -ERESTARTSYS;
-			goto err;
+			break;
 		}
+		tmp = 0;
 	}
-	mutex_unlock(&runtime->oss.params_lock);
-	return xfer;
-
- err:
-	mutex_unlock(&runtime->oss.params_lock);
 	return xfer > 0 ? (snd_pcm_sframes_t)xfer : tmp;
 }
 
@@ -1473,8 +1476,11 @@ static ssize_t snd_pcm_oss_read1(struct snd_pcm_substream *substream, char __use
 
 	if ((tmp = snd_pcm_oss_make_ready(substream)) < 0)
 		return tmp;
-	mutex_lock(&runtime->oss.params_lock);
 	while (bytes > 0) {
+		if (mutex_lock_interruptible(&runtime->oss.params_lock)) {
+			tmp = -ERESTARTSYS;
+			break;
+		}
 		if (bytes < runtime->oss.period_bytes || runtime->oss.buffer_used > 0) {
 			if (runtime->oss.buffer_used == 0) {
 				tmp = snd_pcm_oss_read2(substream, runtime->oss.buffer, runtime->oss.period_bytes, 1);
@@ -1505,16 +1511,16 @@ static ssize_t snd_pcm_oss_read1(struct snd_pcm_substream *substream, char __use
 			bytes -= tmp;
 			xfer += tmp;
 		}
+ err:
+		mutex_unlock(&runtime->oss.params_lock);
+		if (tmp < 0)
+			break;
 		if (signal_pending(current)) {
 			tmp = -ERESTARTSYS;
-			goto err;
+			break;
 		}
+		tmp = 0;
 	}
-	mutex_unlock(&runtime->oss.params_lock);
-	return xfer;
-
- err:
-	mutex_unlock(&runtime->oss.params_lock);
 	return xfer > 0 ? (snd_pcm_sframes_t)xfer : tmp;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: pcm: Abort properly at pending signal in OSS read/write loops
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (132 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: pcm: Add missing error checks in OSS emulation plugin builder Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: pcm: Allow aborting mutex lock at " Sasha Levin
                   ` (382 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Takashi Iwai, Sasha Levin

From: Takashi Iwai <tiwai@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 29159a4ed7044c52e3e2cf1a9fb55cec4745c60b ]

The loops for read and write in PCM OSS emulation have no proper check
of pending signals, and they keep processing even after user tries to
break.  This results in a very long delay, often seen as RCU stall
when a huge unprocessed bytes remain queued.  The bug could be easily
triggered by syzkaller.

As a simple workaround, this patch adds the proper check of pending
signals and aborts the loop appropriately.

Reported-by: syzbot+993cb4cfcbbff3947c21@syzkaller.appspotmail.com
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/core/oss/pcm_oss.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
index 4a5bcf178982..d2a9e0fd46b0 100644
--- a/sound/core/oss/pcm_oss.c
+++ b/sound/core/oss/pcm_oss.c
@@ -1416,6 +1416,10 @@ static ssize_t snd_pcm_oss_write1(struct snd_pcm_substream *substream, const cha
 			    tmp != runtime->oss.period_bytes)
 				break;
 		}
+		if (signal_pending(current)) {
+			tmp = -ERESTARTSYS;
+			goto err;
+		}
 	}
 	mutex_unlock(&runtime->oss.params_lock);
 	return xfer;
@@ -1501,6 +1505,10 @@ static ssize_t snd_pcm_oss_read1(struct snd_pcm_substream *substream, char __use
 			bytes -= tmp;
 			xfer += tmp;
 		}
+		if (signal_pending(current)) {
+			tmp = -ERESTARTSYS;
+			goto err;
+		}
 	}
 	mutex_unlock(&runtime->oss.params_lock);
 	return xfer;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: aloop: Release cable upon open error path
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (134 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: pcm: Allow aborting mutex lock at " Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: aloop: Fix inconsistent format due to incomplete rule Sasha Levin
                   ` (380 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Takashi Iwai, Sasha Levin

From: Takashi Iwai <tiwai@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9685347aa0a5c2869058ca6ab79fd8e93084a67f ]

The aloop runtime object and its assignment in the cable are left even
when opening a substream fails.  This doesn't mean any memory leak,
but it still keeps the invalid pointer that may be referred by the
another side of the cable spontaneously, which is a potential Oops
cause.

Clean up the cable assignment and the empty cable upon the error path
properly.

Fixes: 597603d615d2 ("ALSA: introduce the snd-aloop module for the PCM loopback")
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/drivers/aloop.c | 38 +++++++++++++++++++++++++-------------
 1 file changed, 25 insertions(+), 13 deletions(-)

diff --git a/sound/drivers/aloop.c b/sound/drivers/aloop.c
index 7f9126efc1e5..a9695fb1c5f3 100644
--- a/sound/drivers/aloop.c
+++ b/sound/drivers/aloop.c
@@ -658,12 +658,31 @@ static int rule_channels(struct snd_pcm_hw_params *params,
 	return snd_interval_refine(hw_param_interval(params, rule->var), &t);
 }
 
+static void free_cable(struct snd_pcm_substream *substream)
+{
+	struct loopback *loopback = substream->private_data;
+	int dev = get_cable_index(substream);
+	struct loopback_cable *cable;
+
+	cable = loopback->cables[substream->number][dev];
+	if (!cable)
+		return;
+	if (cable->streams[!substream->stream]) {
+		/* other stream is still alive */
+		cable->streams[substream->stream] = NULL;
+	} else {
+		/* free the cable */
+		loopback->cables[substream->number][dev] = NULL;
+		kfree(cable);
+	}
+}
+
 static int loopback_open(struct snd_pcm_substream *substream)
 {
 	struct snd_pcm_runtime *runtime = substream->runtime;
 	struct loopback *loopback = substream->private_data;
 	struct loopback_pcm *dpcm;
-	struct loopback_cable *cable;
+	struct loopback_cable *cable = NULL;
 	int err = 0;
 	int dev = get_cable_index(substream);
 
@@ -682,7 +701,6 @@ static int loopback_open(struct snd_pcm_substream *substream)
 	if (!cable) {
 		cable = kzalloc(sizeof(*cable), GFP_KERNEL);
 		if (!cable) {
-			kfree(dpcm);
 			err = -ENOMEM;
 			goto unlock;
 		}
@@ -724,6 +742,10 @@ static int loopback_open(struct snd_pcm_substream *substream)
 	else
 		runtime->hw = cable->hw;
  unlock:
+	if (err < 0) {
+		free_cable(substream);
+		kfree(dpcm);
+	}
 	mutex_unlock(&loopback->cable_lock);
 	return err;
 }
@@ -732,20 +754,10 @@ static int loopback_close(struct snd_pcm_substream *substream)
 {
 	struct loopback *loopback = substream->private_data;
 	struct loopback_pcm *dpcm = substream->runtime->private_data;
-	struct loopback_cable *cable;
-	int dev = get_cable_index(substream);
 
 	loopback_timer_stop(dpcm);
 	mutex_lock(&loopback->cable_lock);
-	cable = loopback->cables[substream->number][dev];
-	if (cable->streams[!substream->stream]) {
-		/* other stream is still alive */
-		cable->streams[substream->stream] = NULL;
-	} else {
-		/* free the cable */
-		loopback->cables[substream->number][dev] = NULL;
-		kfree(cable);
-	}
+	free_cable(substream);
 	mutex_unlock(&loopback->cable_lock);
 	return 0;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: aloop: Fix racy hw constraints adjustment
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (136 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: aloop: Fix inconsistent format due to incomplete rule Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] locks: don't check for race with close when setting OFD lock Sasha Levin
                   ` (378 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Takashi Iwai, Sasha Levin

From: Takashi Iwai <tiwai@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 898dfe4687f460ba337a01c11549f87269a13fa2 ]

The aloop driver tries to update the hw constraints of the connected
target on the cable of the opened PCM substream.  This is done by
adding the extra hw constraints rules referring to the substream
runtime->hw fields, while the other substream may update the runtime
hw of another side on the fly.

This is, however, racy and may result in the inconsistent values when
both PCM streams perform the prepare concurrently.  One of the reason
is that it overwrites the other's runtime->hw field; which is not only
racy but also broken when it's called before the open of another side
finishes.  And, since the reference to runtime->hw isn't protected,
the concurrent write may give the partial value update and become
inconsistent.

This patch is an attempt to fix and clean up:
- The prepare doesn't change the runtime->hw of other side any longer,
  but only update the cable->hw that is referred commonly.
- The extra rules refer to the loopback_pcm object instead of the
  runtime->hw.  The actual hw is deduced from cable->hw.
- The extra rules take the cable_lock to protect against the race.

Fixes: b1c73fc8e697 ("ALSA: snd-aloop: Fix hw_params restrictions and checking")
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/drivers/aloop.c | 51 +++++++++++++++++++++------------------------------
 1 file changed, 21 insertions(+), 30 deletions(-)

diff --git a/sound/drivers/aloop.c b/sound/drivers/aloop.c
index dae6cd32a1c0..83ae083b192f 100644
--- a/sound/drivers/aloop.c
+++ b/sound/drivers/aloop.c
@@ -306,19 +306,6 @@ static int loopback_trigger(struct snd_pcm_substream *substream, int cmd)
 	return 0;
 }
 
-static void params_change_substream(struct loopback_pcm *dpcm,
-				    struct snd_pcm_runtime *runtime)
-{
-	struct snd_pcm_runtime *dst_runtime;
-
-	if (dpcm == NULL || dpcm->substream == NULL)
-		return;
-	dst_runtime = dpcm->substream->runtime;
-	if (dst_runtime == NULL)
-		return;
-	dst_runtime->hw = dpcm->cable->hw;
-}
-
 static void params_change(struct snd_pcm_substream *substream)
 {
 	struct snd_pcm_runtime *runtime = substream->runtime;
@@ -330,10 +317,6 @@ static void params_change(struct snd_pcm_substream *substream)
 	cable->hw.rate_max = runtime->rate;
 	cable->hw.channels_min = runtime->channels;
 	cable->hw.channels_max = runtime->channels;
-	params_change_substream(cable->streams[SNDRV_PCM_STREAM_PLAYBACK],
-				runtime);
-	params_change_substream(cable->streams[SNDRV_PCM_STREAM_CAPTURE],
-				runtime);
 }
 
 static int loopback_prepare(struct snd_pcm_substream *substream)
@@ -621,24 +604,29 @@ static unsigned int get_cable_index(struct snd_pcm_substream *substream)
 static int rule_format(struct snd_pcm_hw_params *params,
 		       struct snd_pcm_hw_rule *rule)
 {
-
-	struct snd_pcm_hardware *hw = rule->private;
+	struct loopback_pcm *dpcm = rule->private;
+	struct loopback_cable *cable = dpcm->cable;
 	struct snd_mask m;
 
 	snd_mask_none(&m);
-	m.bits[0] = (u_int32_t)hw->formats;
-	m.bits[1] = (u_int32_t)(hw->formats >> 32);
+	mutex_lock(&dpcm->loopback->cable_lock);
+	m.bits[0] = (u_int32_t)cable->hw.formats;
+	m.bits[1] = (u_int32_t)(cable->hw.formats >> 32);
+	mutex_unlock(&dpcm->loopback->cable_lock);
 	return snd_mask_refine(hw_param_mask(params, rule->var), &m);
 }
 
 static int rule_rate(struct snd_pcm_hw_params *params,
 		     struct snd_pcm_hw_rule *rule)
 {
-	struct snd_pcm_hardware *hw = rule->private;
+	struct loopback_pcm *dpcm = rule->private;
+	struct loopback_cable *cable = dpcm->cable;
 	struct snd_interval t;
 
-        t.min = hw->rate_min;
-        t.max = hw->rate_max;
+	mutex_lock(&dpcm->loopback->cable_lock);
+	t.min = cable->hw.rate_min;
+	t.max = cable->hw.rate_max;
+	mutex_unlock(&dpcm->loopback->cable_lock);
         t.openmin = t.openmax = 0;
         t.integer = 0;
 	return snd_interval_refine(hw_param_interval(params, rule->var), &t);
@@ -647,11 +635,14 @@ static int rule_rate(struct snd_pcm_hw_params *params,
 static int rule_channels(struct snd_pcm_hw_params *params,
 			 struct snd_pcm_hw_rule *rule)
 {
-	struct snd_pcm_hardware *hw = rule->private;
+	struct loopback_pcm *dpcm = rule->private;
+	struct loopback_cable *cable = dpcm->cable;
 	struct snd_interval t;
 
-        t.min = hw->channels_min;
-        t.max = hw->channels_max;
+	mutex_lock(&dpcm->loopback->cable_lock);
+	t.min = cable->hw.channels_min;
+	t.max = cable->hw.channels_max;
+	mutex_unlock(&dpcm->loopback->cable_lock);
         t.openmin = t.openmax = 0;
         t.integer = 0;
 	return snd_interval_refine(hw_param_interval(params, rule->var), &t);
@@ -717,19 +708,19 @@ static int loopback_open(struct snd_pcm_substream *substream)
 	/* are cached -> they do not reflect the actual state */
 	err = snd_pcm_hw_rule_add(runtime, 0,
 				  SNDRV_PCM_HW_PARAM_FORMAT,
-				  rule_format, &runtime->hw,
+				  rule_format, dpcm,
 				  SNDRV_PCM_HW_PARAM_FORMAT, -1);
 	if (err < 0)
 		goto unlock;
 	err = snd_pcm_hw_rule_add(runtime, 0,
 				  SNDRV_PCM_HW_PARAM_RATE,
-				  rule_rate, &runtime->hw,
+				  rule_rate, dpcm,
 				  SNDRV_PCM_HW_PARAM_RATE, -1);
 	if (err < 0)
 		goto unlock;
 	err = snd_pcm_hw_rule_add(runtime, 0,
 				  SNDRV_PCM_HW_PARAM_CHANNELS,
-				  rule_channels, &runtime->hw,
+				  rule_channels, dpcm,
 				  SNDRV_PCM_HW_PARAM_CHANNELS, -1);
 	if (err < 0)
 		goto unlock;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: aloop: Fix inconsistent format due to incomplete rule
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (135 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: aloop: Release cable upon open error path Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: aloop: Fix racy hw constraints adjustment Sasha Levin
                   ` (379 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Takashi Iwai, Sasha Levin

From: Takashi Iwai <tiwai@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b088b53e20c7d09b5ab84c5688e609f478e5c417 ]

The extra hw constraint rule for the formats the aloop driver
introduced has a slight flaw, where it doesn't return a positive value
when the mask got changed.  It came from the fact that it's basically
a copy&paste from snd_hw_constraint_mask64().  The original code is
supposed to be a single-shot and it modifies the mask bits only once
and never after, while what we need for aloop is the dynamic hw rule
that limits the mask bits.

This difference results in the inconsistent state, as the hw_refine
doesn't apply the dependencies fully.  The worse and surprisingly
result is that it causes a crash in OSS emulation when multiple
full-duplex reads/writes are performed concurrently (I leave why it
triggers Oops to readers as a homework).

For fixing this, replace a few open-codes with the standard
snd_mask_*() macros.

Reported-by: syzbot+3902b5220e8ca27889ca@syzkaller.appspotmail.com
Fixes: b1c73fc8e697 ("ALSA: snd-aloop: Fix hw_params restrictions and checking")
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/drivers/aloop.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/sound/drivers/aloop.c b/sound/drivers/aloop.c
index a9695fb1c5f3..dae6cd32a1c0 100644
--- a/sound/drivers/aloop.c
+++ b/sound/drivers/aloop.c
@@ -39,6 +39,7 @@
 #include <sound/core.h>
 #include <sound/control.h>
 #include <sound/pcm.h>
+#include <sound/pcm_params.h>
 #include <sound/info.h>
 #include <sound/initval.h>
 
@@ -622,14 +623,12 @@ static int rule_format(struct snd_pcm_hw_params *params,
 {
 
 	struct snd_pcm_hardware *hw = rule->private;
-	struct snd_mask *maskp = hw_param_mask(params, rule->var);
+	struct snd_mask m;
 
-	maskp->bits[0] &= (u_int32_t)hw->formats;
-	maskp->bits[1] &= (u_int32_t)(hw->formats >> 32);
-	memset(maskp->bits + 2, 0, (SNDRV_MASK_MAX-64) / 8); /* clear rest */
-	if (! maskp->bits[0] && ! maskp->bits[1])
-		return -EINVAL;
-	return 0;
+	snd_mask_none(&m);
+	m.bits[0] = (u_int32_t)hw->formats;
+	m.bits[1] = (u_int32_t)(hw->formats >> 32);
+	return snd_mask_refine(hw_param_mask(params, rule->var), &m);
 }
 
 static int rule_rate(struct snd_pcm_hw_params *params,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] locks: don't check for race with close when setting OFD lock
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (137 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: aloop: Fix racy hw constraints adjustment Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] mm/page-writeback: fix dirty_ratelimit calculation Sasha Levin
                   ` (377 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jeff Layton, Sasha Levin

From: Jeff Layton <jeff.layton@primarydata.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 0752ba807b04ccd69cb4bc8bbf829a80ee208a3c ]

We don't clean out OFD locks on close(), so there's no need to check
for a race with them here. They'll get cleaned out at the same time
that flock locks are.

Signed-off-by: Jeff Layton <jeff.layton@primarydata.com>
Acked-by: "J. Bruce Fields" <bfields@fieldses.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/locks.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/fs/locks.c b/fs/locks.c
index 3c234b9fbdd9..af6fcf6e0dd0 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -2192,10 +2192,12 @@ int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd,
 	error = do_lock_file_wait(filp, cmd, file_lock);
 
 	/*
-	 * Attempt to detect a close/fcntl race and recover by
-	 * releasing the lock that was just acquired.
+	 * Attempt to detect a close/fcntl race and recover by releasing the
+	 * lock that was just acquired. There is no need to do that when we're
+	 * unlocking though, or for OFD locks.
 	 */
-	if (!error && file_lock->fl_type != F_UNLCK) {
+	if (!error && file_lock->fl_type != F_UNLCK &&
+	    !(file_lock->fl_flags & FL_OFDLCK)) {
 		/*
 		 * We need that spin_lock here - it prevents reordering between
 		 * update of i_flctx->flc_posix and check for it done in
@@ -2334,10 +2336,12 @@ int fcntl_setlk64(unsigned int fd, struct file *filp, unsigned int cmd,
 	error = do_lock_file_wait(filp, cmd, file_lock);
 
 	/*
-	 * Attempt to detect a close/fcntl race and recover by
-	 * releasing the lock that was just acquired.
+	 * Attempt to detect a close/fcntl race and recover by releasing the
+	 * lock that was just acquired. There is no need to do that when we're
+	 * unlocking though, or for OFD locks.
 	 */
-	if (!error && file_lock->fl_type != F_UNLCK) {
+	if (!error && file_lock->fl_type != F_UNLCK &&
+	    !(file_lock->fl_flags & FL_OFDLCK)) {
 		/*
 		 * We need that spin_lock here - it prevents reordering between
 		 * update of i_flctx->flc_posix and check for it done in
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mm/page-writeback: fix dirty_ratelimit calculation
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (138 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] locks: don't check for race with close when setting OFD lock Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] futex: Replace barrier() in unqueue_me() with READ_ONCE() Sasha Levin
                   ` (376 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Andrey Ryabinin, Andrew Morton, Linus Torvalds, Sasha Levin

From: Andrey Ryabinin <aryabinin@virtuozzo.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d59b1087a98e402ed9a7cc577f4da435f9a555f5 ]

Calculation of dirty_ratelimit sometimes is not correct.  E.g.  initial
values of dirty_ratelimit == INIT_BW and step == 0, lead to the
following result:

   UBSAN: Undefined behaviour in ../mm/page-writeback.c:1286:7
   shift exponent 25600 is too large for 64-bit type 'long unsigned int'

The fix is straightforward - make step 0 if the shift exponent is too
big.

Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Wu Fengguang <fengguang.wu@intel.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 mm/page-writeback.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index eb59f7eea508..308757ae508d 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -967,6 +967,7 @@ static void bdi_update_dirty_ratelimit(struct backing_dev_info *bdi,
 	unsigned long pos_ratio;
 	unsigned long step;
 	unsigned long x;
+	unsigned long shift;
 
 	/*
 	 * The dirty rate will match the writeout rate in long term, except
@@ -1094,11 +1095,11 @@ static void bdi_update_dirty_ratelimit(struct backing_dev_info *bdi,
 	 * rate itself is constantly fluctuating. So decrease the track speed
 	 * when it gets close to the target. Helps eliminate pointless tremors.
 	 */
-	step >>= dirty_ratelimit / (2 * step + 1);
-	/*
-	 * Limit the tracking speed to avoid overshooting.
-	 */
-	step = (step + 7) / 8;
+	shift = dirty_ratelimit / (2 * step + 1);
+	if (shift < BITS_PER_LONG)
+		step = DIV_ROUND_UP(step >> shift, 8);
+	else
+		step = 0;
 
 	if (dirty_ratelimit < balanced_dirty_ratelimit)
 		dirty_ratelimit += step;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] futex: Replace barrier() in unqueue_me() with READ_ONCE()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (139 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] mm/page-writeback: fix dirty_ratelimit calculation Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] r8152: use test_and_clear_bit Sasha Levin
                   ` (375 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jianyu Zhan, Thomas Gleixner, Sasha Levin

From: Jianyu Zhan <nasa4836@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 29b75eb2d56a714190a93d7be4525e617591077a ]

Commit e91467ecd1ef ("bug in futex unqueue_me") introduced a barrier() in
unqueue_me() to prevent the compiler from rereading the lock pointer which
might change after a check for NULL.

Replace the barrier() with a READ_ONCE() for the following reasons:

1) READ_ONCE() is a weaker form of barrier() that affects only the specific
   load operation, while barrier() is a general compiler level memory barrier.
   READ_ONCE() was not available at the time when the barrier was added.

2) Aside of that READ_ONCE() is descriptive and self explainatory while a
   barrier without comment is not clear to the casual reader.

No functional change.

[ tglx: Massaged changelog ]

Signed-off-by: Jianyu Zhan <nasa4836@gmail.com>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Acked-by: Darren Hart <dvhart@linux.intel.com>
Cc: dave@stgolabs.net
Cc: peterz@infradead.org
Cc: linux@rasmusvillemoes.dk
Cc: akpm@linux-foundation.org
Cc: fengguang.wu@intel.com
Cc: bigeasy@linutronix.de
Link: http://lkml.kernel.org/r/1457314344-5685-1-git-send-email-nasa4836@gmail.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/futex.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/kernel/futex.c b/kernel/futex.c
index 585cf96dab32..959cc4fc6de5 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -1831,8 +1831,12 @@ static int unqueue_me(struct futex_q *q)
 
 	/* In the common case we don't take the spinlock, which is nice. */
 retry:
-	lock_ptr = q->lock_ptr;
-	barrier();
+	/*
+	 * q->lock_ptr can change between this read and the following spin_lock.
+	 * Use READ_ONCE to forbid the compiler from reloading q->lock_ptr and
+	 * optimizing lock_ptr out of the logic below.
+	 */
+	lock_ptr = READ_ONCE(q->lock_ptr);
 	if (lock_ptr != NULL) {
 		spin_lock(lock_ptr);
 		/*
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] [media] usbvision fix overflow of interfaces array
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (141 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] r8152: use test_and_clear_bit Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] sr9700: use skb_cow_head() to deal with cloned skbs Sasha Levin
                   ` (373 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Oliver Neukum, Hans Verkuil, Mauro Carvalho Chehab, Sasha Levin

From: Oliver Neukum <oneukum@suse.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 588afcc1c0e45358159090d95bf7b246fb67565f ]

This fixes the crash reported in:
http://seclists.org/bugtraq/2015/Oct/35
The interface number needs a sanity check.

Signed-off-by: Oliver Neukum <oneukum@suse.com>
Cc: Vladis Dronov <vdronov@redhat.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/usb/usbvision/usbvision-video.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/media/usb/usbvision/usbvision-video.c b/drivers/media/usb/usbvision/usbvision-video.c
index 3b3becc5718d..7b12710becac 100644
--- a/drivers/media/usb/usbvision/usbvision-video.c
+++ b/drivers/media/usb/usbvision/usbvision-video.c
@@ -1522,6 +1522,13 @@ static int usbvision_probe(struct usb_interface *intf,
 	printk(KERN_INFO "%s: %s found\n", __func__,
 				usbvision_device_data[model].model_string);
 
+	/*
+	 * this is a security check.
+	 * an exploit using an incorrect bInterfaceNumber is known
+	 */
+	if (ifnum >= USB_MAXINTERFACES || !dev->actconfig->interface[ifnum])
+		return -ENODEV;
+
 	if (usbvision_device_data[model].interface >= 0)
 		interface = &dev->actconfig->interface[usbvision_device_data[model].interface]->altsetting[0];
 	else if (ifnum < dev->actconfig->desc.bNumInterfaces)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] r8152: use test_and_clear_bit
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (140 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] futex: Replace barrier() in unqueue_me() with READ_ONCE() Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] [media] usbvision fix overflow of interfaces array Sasha Levin
                   ` (374 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: hayeswang, David S . Miller, Sasha Levin

From: hayeswang <hayeswang@realtek.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 216a8349d3a0dd1bc2afbcc821e374c8f929bd62 ]

Replace test_bit() followed by clear_bit() with test_and_clear_bit().

Signed-off-by: Hayes Wang <hayeswang@realtek.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/usb/r8152.c | 20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)

diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index c0fb8a051768..55b0129acff7 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -1929,7 +1929,6 @@ static void _rtl8152_set_rx_mode(struct net_device *netdev)
 	__le32 tmp[2];
 	u32 ocp_data;
 
-	clear_bit(RTL8152_SET_RX_MODE, &tp->flags);
 	netif_stop_queue(netdev);
 	ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
 	ocp_data &= ~RCR_ACPT_ALL;
@@ -2364,8 +2363,6 @@ static void rtl_phy_reset(struct r8152 *tp)
 	u16 data;
 	int i;
 
-	clear_bit(PHY_RESET, &tp->flags);
-
 	data = r8152_mdio_read(tp, MII_BMCR);
 
 	/* don't reset again before the previous one complete */
@@ -2860,10 +2857,9 @@ static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u16 speed, u8 duplex)
 	r8152_mdio_write(tp, MII_ADVERTISE, anar);
 	r8152_mdio_write(tp, MII_BMCR, bmcr);
 
-	if (test_bit(PHY_RESET, &tp->flags)) {
+	if (test_and_clear_bit(PHY_RESET, &tp->flags)) {
 		int i;
 
-		clear_bit(PHY_RESET, &tp->flags);
 		for (i = 0; i < 50; i++) {
 			msleep(20);
 			if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0)
@@ -2872,7 +2868,6 @@ static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u16 speed, u8 duplex)
 	}
 
 out:
-
 	return ret;
 }
 
@@ -2928,7 +2923,6 @@ static void set_carrier(struct r8152 *tp)
 	struct net_device *netdev = tp->netdev;
 	u8 speed;
 
-	clear_bit(RTL8152_LINK_CHG, &tp->flags);
 	speed = rtl8152_get_speed(tp);
 
 	if (speed & LINK_STATUS) {
@@ -2969,20 +2963,18 @@ static void rtl_work_func_t(struct work_struct *work)
 		goto out1;
 	}
 
-	if (test_bit(RTL8152_LINK_CHG, &tp->flags))
+	if (test_and_clear_bit(RTL8152_LINK_CHG, &tp->flags))
 		set_carrier(tp);
 
-	if (test_bit(RTL8152_SET_RX_MODE, &tp->flags))
+	if (test_and_clear_bit(RTL8152_SET_RX_MODE, &tp->flags))
 		_rtl8152_set_rx_mode(tp->netdev);
 
 	/* don't schedule napi before linking */
-	if (test_bit(SCHEDULE_NAPI, &tp->flags) &&
-	    netif_carrier_ok(tp->netdev)) {
-		clear_bit(SCHEDULE_NAPI, &tp->flags);
+	if (test_and_clear_bit(SCHEDULE_NAPI, &tp->flags) &&
+	    netif_carrier_ok(tp->netdev))
 		napi_schedule(&tp->napi);
-	}
 
-	if (test_bit(PHY_RESET, &tp->flags))
+	if (test_and_clear_bit(PHY_RESET, &tp->flags))
 		rtl_phy_reset(tp);
 
 	mutex_unlock(&tp->control);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] smsc75xx: use skb_cow_head() to deal with cloned skbs
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (143 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] sr9700: use skb_cow_head() to deal with cloned skbs Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] cx82310_eth: " Sasha Levin
                   ` (371 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Dumazet, David S . Miller, Sasha Levin

From: Eric Dumazet <edumazet@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b7c6d2675899cfff0180412c63fc9cbd5bacdb4d ]

We need to ensure there is enough headroom to push extra header,
but we also need to check if we are allowed to change headers.

skb_cow_head() is the proper helper to deal with this.

Fixes: d0cad871703b ("smsc75xx: SMSC LAN75xx USB gigabit ethernet adapter driver")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: James Hughes <james.hughes@raspberrypi.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/usb/smsc75xx.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c
index d9e7892262fa..2c526ca29cde 100644
--- a/drivers/net/usb/smsc75xx.c
+++ b/drivers/net/usb/smsc75xx.c
@@ -2198,13 +2198,9 @@ static struct sk_buff *smsc75xx_tx_fixup(struct usbnet *dev,
 {
 	u32 tx_cmd_a, tx_cmd_b;
 
-	if (skb_headroom(skb) < SMSC75XX_TX_OVERHEAD) {
-		struct sk_buff *skb2 =
-			skb_copy_expand(skb, SMSC75XX_TX_OVERHEAD, 0, flags);
+	if (skb_cow_head(skb, SMSC75XX_TX_OVERHEAD)) {
 		dev_kfree_skb_any(skb);
-		skb = skb2;
-		if (!skb)
-			return NULL;
+		return NULL;
 	}
 
 	tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN) | TX_CMD_A_FCS;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] sr9700: use skb_cow_head() to deal with cloned skbs
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (142 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] [media] usbvision fix overflow of interfaces array Sasha Levin
@ 2018-03-01 15:23 ` Sasha Levin
  2018-03-01 15:23 ` [added to the 4.1 stable tree] smsc75xx: " Sasha Levin
                   ` (372 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:23 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Dumazet, David S . Miller, Sasha Levin

From: Eric Dumazet <edumazet@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d532c1082f68176363ed766d09bf187616e282fe ]

We need to ensure there is enough headroom to push extra header,
but we also need to check if we are allowed to change headers.

skb_cow_head() is the proper helper to deal with this.

Fixes: c9b37458e956 ("USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver Support")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: James Hughes <james.hughes@raspberrypi.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/usb/sr9700.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c
index 4a1e9c489f1f..aadfe1d1c37e 100644
--- a/drivers/net/usb/sr9700.c
+++ b/drivers/net/usb/sr9700.c
@@ -456,14 +456,9 @@ static struct sk_buff *sr9700_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
 
 	len = skb->len;
 
-	if (skb_headroom(skb) < SR_TX_OVERHEAD) {
-		struct sk_buff *skb2;
-
-		skb2 = skb_copy_expand(skb, SR_TX_OVERHEAD, 0, flags);
+	if (skb_cow_head(skb, SR_TX_OVERHEAD)) {
 		dev_kfree_skb_any(skb);
-		skb = skb2;
-		if (!skb)
-			return NULL;
+		return NULL;
 	}
 
 	__skb_push(skb, SR_TX_OVERHEAD);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] cx82310_eth: use skb_cow_head() to deal with cloned skbs
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (144 preceding siblings ...)
  2018-03-01 15:23 ` [added to the 4.1 stable tree] smsc75xx: " Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] sysrq: Fix warning in sysrq generated crash Sasha Levin
                   ` (370 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Dumazet, David S . Miller, Sasha Levin

From: Eric Dumazet <edumazet@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a9e840a2081ed28c2b7caa6a9a0041c950b3c37d ]

We need to ensure there is enough headroom to push extra header,
but we also need to check if we are allowed to change headers.

skb_cow_head() is the proper helper to deal with this.

Fixes: cc28a20e77b2 ("introduce cx82310_eth: Conexant CX82310-based ADSL router USB ethernet driver")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: James Hughes <james.hughes@raspberrypi.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/usb/cx82310_eth.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/net/usb/cx82310_eth.c b/drivers/net/usb/cx82310_eth.c
index e221bfcee76b..947bea81d924 100644
--- a/drivers/net/usb/cx82310_eth.c
+++ b/drivers/net/usb/cx82310_eth.c
@@ -293,12 +293,9 @@ static struct sk_buff *cx82310_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
 {
 	int len = skb->len;
 
-	if (skb_headroom(skb) < 2) {
-		struct sk_buff *skb2 = skb_copy_expand(skb, 2, 0, flags);
+	if (skb_cow_head(skb, 2)) {
 		dev_kfree_skb_any(skb);
-		skb = skb2;
-		if (!skb)
-			return NULL;
+		return NULL;
 	}
 	skb_push(skb, 2);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] sysrq: Fix warning in sysrq generated crash.
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (145 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] cx82310_eth: " Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] hwrng: core - sleep interruptible in read Sasha Levin
                   ` (369 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Ani Sinha, Paul E . McKenney, Sasha Levin

From: Ani Sinha <ani@arista.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 984cf355aeaa8f2eda3861b50d0e8d3e3f77e83b ]

Commit 984d74a72076a1 ("sysrq: rcu-ify __handle_sysrq") replaced
spin_lock_irqsave() calls with rcu_read_lock() calls in sysrq. Since
rcu_read_lock() does not disable preemption, faulthandler_disabled() in
__do_page_fault() in x86/fault.c returns false. When the code later calls
might_sleep() in the pagefault handler, we get the following warning:

BUG: sleeping function called from invalid context at ../arch/x86/mm/fault.c:1187
in_atomic(): 0, irqs_disabled(): 0, pid: 4706, name: bash
Preemption disabled at:[<ffffffff81484339>] printk+0x48/0x4a

To fix this, we release the RCU read lock before we crash.

Tested this patch on linux 3.18 by booting off one of our boards.

Fixes: 984d74a72076a1 ("sysrq: rcu-ify __handle_sysrq")

Signed-off-by: Ani Sinha <ani@arista.com>
Reviewed-by: Rik van Riel <riel@redhat.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/tty/sysrq.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
index 529cc86283e7..9c27ee008dff 100644
--- a/drivers/tty/sysrq.c
+++ b/drivers/tty/sysrq.c
@@ -133,6 +133,12 @@ static void sysrq_handle_crash(int key)
 {
 	char *killer = NULL;
 
+	/* we need to release the RCU read lock here,
+	 * otherwise we get an annoying
+	 * 'BUG: sleeping function called from invalid context'
+	 * complaint from the kernel before the panic.
+	 */
+	rcu_read_unlock();
 	panic_on_oops = 1;	/* force panic */
 	wmb();
 	*killer = 1;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] hwrng: core - sleep interruptible in read
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (146 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] sysrq: Fix warning in sysrq generated crash Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] 8021q: fix a memory leak for VLAN 0 device Sasha Levin
                   ` (368 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jiri Slaby, Herbert Xu, Sasha Levin

From: Jiri Slaby <jslaby@suse.cz>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1ab87298cb59b649d8d648d25dc15b36ab865f5a ]

hwrng kthread can be waiting via hwrng_fillfn for some data from a rng
like virtio-rng:
hwrng           D ffff880093e17798     0   382      2 0x00000000
...
Call Trace:
 [<ffffffff817339c6>] wait_for_completion_killable+0x96/0x210
 [<ffffffffa00aa1b7>] virtio_read+0x57/0xf0 [virtio_rng]
 [<ffffffff814f4a35>] hwrng_fillfn+0x75/0x130
 [<ffffffff810aa243>] kthread+0xf3/0x110

And when some user program tries to read the /dev node in this state,
we get:
rngd            D ffff880093e17798     0   762      1 0x00000004
...
Call Trace:
 [<ffffffff817351ac>] mutex_lock_nested+0x15c/0x3e0
 [<ffffffff814f478e>] rng_dev_read+0x6e/0x240
 [<ffffffff81231958>] __vfs_read+0x28/0xe0
 [<ffffffff81232393>] vfs_read+0x83/0x130

And this is indeed unkillable. So use mutex_lock_interruptible
instead of mutex_lock in rng_dev_read and exit immediatelly when
interrupted. And possibly return already read data, if any (as POSIX
allows).

v2: use ERESTARTSYS instead of EINTR

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Matt Mackall <mpm@selenic.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: <linux-crypto@vger.kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/char/hw_random/core.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
index 5643b65cee20..0ff7682cfb14 100644
--- a/drivers/char/hw_random/core.c
+++ b/drivers/char/hw_random/core.c
@@ -238,7 +238,10 @@ static ssize_t rng_dev_read(struct file *filp, char __user *buf,
 			goto out;
 		}
 
-		mutex_lock(&reading_mutex);
+		if (mutex_lock_interruptible(&reading_mutex)) {
+			err = -ERESTARTSYS;
+			goto out_put;
+		}
 		if (!data_avail) {
 			bytes_read = rng_get_data(rng, rng_buffer,
 				rng_buffer_size(),
@@ -288,6 +291,7 @@ static ssize_t rng_dev_read(struct file *filp, char __user *buf,
 
 out_unlock_reading:
 	mutex_unlock(&reading_mutex);
+out_put:
 	put_rng(rng);
 	goto out;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] 8021q: fix a memory leak for VLAN 0 device
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (147 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] hwrng: core - sleep interruptible in read Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] RDS: Heap OOB write in rds_message_alloc_sgs() Sasha Levin
                   ` (367 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Cong Wang, David S . Miller, Sasha Levin

From: Cong Wang <xiyou.wangcong@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 78bbb15f2239bc8e663aa20bbe1987c91a0b75f6 ]

A vlan device with vid 0 is allow to creat by not able to be fully
cleaned up by unregister_vlan_dev() which checks for vlan_id!=0.

Also, VLAN 0 is probably not a valid number and it is kinda
"reserved" for HW accelerating devices, but it is probably too
late to reject it from creation even if makes sense. Instead,
just remove the check in unregister_vlan_dev().

Reported-by: Dmitry Vyukov <dvyukov@google.com>
Fixes: ad1afb003939 ("vlan_dev: VLAN 0 should be treated as "no vlan tag" (802.1p packet)")
Cc: Vlad Yasevich <vyasevich@gmail.com>
Cc: Ben Hutchings <ben.hutchings@codethink.co.uk>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/8021q/vlan.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
index ce53c8691604..6ce54eed45e8 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
@@ -111,12 +111,7 @@ void unregister_vlan_dev(struct net_device *dev, struct list_head *head)
 		vlan_gvrp_uninit_applicant(real_dev);
 	}
 
-	/* Take it out of our own structures, but be sure to interlock with
-	 * HW accelerating devices or SW vlan input packet processing if
-	 * VLAN is not 0 (leave it there for 802.1p).
-	 */
-	if (vlan_id)
-		vlan_vid_del(real_dev, vlan->vlan_proto, vlan_id);
+	vlan_vid_del(real_dev, vlan->vlan_proto, vlan_id);
 
 	/* Get rid of the vlan's reference to real_dev */
 	dev_put(real_dev);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] RDS: Heap OOB write in rds_message_alloc_sgs()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (148 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] 8021q: fix a memory leak for VLAN 0 device Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] RDS: null pointer dereference in rds_atomic_free_op Sasha Levin
                   ` (366 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Mohamed Ghannam, David S . Miller, Sasha Levin

From: Mohamed Ghannam <simo.ghannam@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c095508770aebf1b9218e77026e48345d719b17c ]

When args->nr_local is 0, nr_pages gets also 0 due some size
calculation via rds_rm_size(), which is later used to allocate
pages for DMA, this bug produces a heap Out-Of-Bound write access
to a specific memory region.

Signed-off-by: Mohamed Ghannam <simo.ghannam@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/rds/rdma.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/net/rds/rdma.c b/net/rds/rdma.c
index 612c3050d514..3e6b133c5e96 100644
--- a/net/rds/rdma.c
+++ b/net/rds/rdma.c
@@ -516,6 +516,9 @@ int rds_rdma_extra_size(struct rds_rdma_args *args)
 
 	local_vec = (struct rds_iovec __user *)(unsigned long) args->local_vec_addr;
 
+	if (args->nr_local == 0)
+		return -EINVAL;
+
 	/* figure out the number of pages in the vector */
 	for (i = 0; i < args->nr_local; i++) {
 		if (copy_from_user(&vec, &local_vec[i],
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] sh_eth: fix TSU resource handling
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (150 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] RDS: null pointer dereference in rds_atomic_free_op Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] sh_eth: fix SH7757 GEther initialization Sasha Levin
                   ` (364 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Sergei Shtylyov, David S . Miller, Sasha Levin

From: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit dfe8266b8dd10e12a731c985b725fcf7f0e537f0 ]

When switching  the driver to the managed device API,  I managed to break
the  case of a  dual Ether devices sharing a single TSU: the 2nd Ether port
wouldn't probe. Iwamatsu-san has tried to fix this but his patch was buggy
and he then dropped the ball...

The solution is to  limit calling devm_request_mem_region() to the first
of  the two  ports  sharing the same TSU, so devm_ioremap_resource() can't
be used anymore for the TSU resource...

Fixes: d5e07e69218f ("sh_eth: use managed device API")
Reported-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/renesas/sh_eth.c | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
index e2dd94a91c15..93756c4e9727 100644
--- a/drivers/net/ethernet/renesas/sh_eth.c
+++ b/drivers/net/ethernet/renesas/sh_eth.c
@@ -3171,10 +3171,29 @@ static int sh_eth_drv_probe(struct platform_device *pdev)
 	/* ioremap the TSU registers */
 	if (mdp->cd->tsu) {
 		struct resource *rtsu;
+
 		rtsu = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-		mdp->tsu_addr = devm_ioremap_resource(&pdev->dev, rtsu);
-		if (IS_ERR(mdp->tsu_addr)) {
-			ret = PTR_ERR(mdp->tsu_addr);
+		if (!rtsu) {
+			dev_err(&pdev->dev, "no TSU resource\n");
+			ret = -ENODEV;
+			goto out_release;
+		}
+		/* We can only request the  TSU region  for the first port
+		 * of the two  sharing this TSU for the probe to succeed...
+		 */
+		if (devno % 2 == 0 &&
+		    !devm_request_mem_region(&pdev->dev, rtsu->start,
+					     resource_size(rtsu),
+					     dev_name(&pdev->dev))) {
+			dev_err(&pdev->dev, "can't request TSU resource.\n");
+			ret = -EBUSY;
+			goto out_release;
+		}
+		mdp->tsu_addr = devm_ioremap(&pdev->dev, rtsu->start,
+					     resource_size(rtsu));
+		if (!mdp->tsu_addr) {
+			dev_err(&pdev->dev, "TSU region ioremap() failed.\n");
+			ret = -ENOMEM;
 			goto out_release;
 		}
 		mdp->port = devno % 2;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] RDS: null pointer dereference in rds_atomic_free_op
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (149 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] RDS: Heap OOB write in rds_message_alloc_sgs() Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] sh_eth: fix TSU resource handling Sasha Levin
                   ` (365 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Mohamed Ghannam, David S . Miller, Sasha Levin

From: Mohamed Ghannam <simo.ghannam@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7d11f77f84b27cef452cee332f4e469503084737 ]

set rm->atomic.op_active to 0 when rds_pin_pages() fails
or the user supplied address is invalid,
this prevents a NULL pointer usage in rds_atomic_free_op()

Signed-off-by: Mohamed Ghannam <simo.ghannam@gmail.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/rds/rdma.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/net/rds/rdma.c b/net/rds/rdma.c
index 3e6b133c5e96..b1ec96bca937 100644
--- a/net/rds/rdma.c
+++ b/net/rds/rdma.c
@@ -866,6 +866,7 @@ int rds_cmsg_atomic(struct rds_sock *rs, struct rds_message *rm,
 err:
 	if (page)
 		put_page(page);
+	rm->atomic.op_active = 0;
 	kfree(rm->atomic.op_notifier);
 
 	return ret;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] sh_eth: fix SH7757 GEther initialization
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (151 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] sh_eth: fix TSU resource handling Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] crypto: algapi - fix NULL dereference in crypto_remove_spawns() Sasha Levin
                   ` (363 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Sergei Shtylyov, David S . Miller, Sasha Levin

From: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5133550296d43236439494aa955bfb765a89f615 ]

Renesas  SH7757 has 2 Fast and 2 Gigabit Ether controllers, while the
'sh_eth' driver can only reset and initialize TSU of the first controller
pair. Shimoda-san tried to solve that adding the 'needs_init' member to the
'struct sh_eth_plat_data', however the platform code still never sets this
flag. I think  that we can infer this information from the 'devno' variable
(set  to 'platform_device::id') and reset/init the Ether controller pair
only for an even 'devno'; therefore 'sh_eth_plat_data::needs_init' can be
removed...

Fixes: 150647fb2c31 ("net: sh_eth: change the condition of initialization")
Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/renesas/sh_eth.c | 4 ++--
 include/linux/sh_eth.h                | 1 -
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
index 93756c4e9727..0ae76e419482 100644
--- a/drivers/net/ethernet/renesas/sh_eth.c
+++ b/drivers/net/ethernet/renesas/sh_eth.c
@@ -3200,8 +3200,8 @@ static int sh_eth_drv_probe(struct platform_device *pdev)
 		ndev->features = NETIF_F_HW_VLAN_CTAG_FILTER;
 	}
 
-	/* initialize first or needed device */
-	if (!devno || pd->needs_init) {
+	/* Need to init only the first port of the two sharing a TSU */
+	if (devno % 2 == 0) {
 		if (mdp->cd->chip_reset)
 			mdp->cd->chip_reset(ndev);
 
diff --git a/include/linux/sh_eth.h b/include/linux/sh_eth.h
index 8c9131db2b25..b050ef51e27e 100644
--- a/include/linux/sh_eth.h
+++ b/include/linux/sh_eth.h
@@ -16,7 +16,6 @@ struct sh_eth_plat_data {
 	unsigned char mac_addr[ETH_ALEN];
 	unsigned no_ether_link:1;
 	unsigned ether_link_active_low:1;
-	unsigned needs_init:1;
 };
 
 #endif
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] crypto: algapi - fix NULL dereference in crypto_remove_spawns()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (152 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] sh_eth: fix SH7757 GEther initialization Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ipv6: fix possible mem leaks in ipv6_make_skb() Sasha Levin
                   ` (362 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Biggers, Herbert Xu, Sasha Levin

From: Eric Biggers <ebiggers@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9a00674213a3f00394f4e3221b88f2d21fc05789 ]

syzkaller triggered a NULL pointer dereference in crypto_remove_spawns()
via a program that repeatedly and concurrently requests AEADs
"authenc(cmac(des3_ede-asm),pcbc-aes-aesni)" and hashes "cmac(des3_ede)"
through AF_ALG, where the hashes are requested as "untested"
(CRYPTO_ALG_TESTED is set in ->salg_mask but clear in ->salg_feat; this
causes the template to be instantiated for every request).

Although AF_ALG users really shouldn't be able to request an "untested"
algorithm, the NULL pointer dereference is actually caused by a
longstanding race condition where crypto_remove_spawns() can encounter
an instance which has had spawn(s) "grabbed" but hasn't yet been
registered, resulting in ->cra_users still being NULL.

We probably should properly initialize ->cra_users earlier, but that
would require updating many templates individually.  For now just fix
the bug in a simple way that can easily be backported: make
crypto_remove_spawns() treat a NULL ->cra_users list as empty.

Reported-by: syzbot <syzkaller@googlegroups.com>
Cc: stable@vger.kernel.org
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 crypto/algapi.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/crypto/algapi.c b/crypto/algapi.c
index 4e69f3161888..35f5efb2ecff 100644
--- a/crypto/algapi.c
+++ b/crypto/algapi.c
@@ -160,6 +160,18 @@ void crypto_remove_spawns(struct crypto_alg *alg, struct list_head *list,
 
 			spawn->alg = NULL;
 			spawns = &inst->alg.cra_users;
+
+			/*
+			 * We may encounter an unregistered instance here, since
+			 * an instance's spawns are set up prior to the instance
+			 * being registered.  An unregistered instance will have
+			 * NULL ->cra_users.next, since ->cra_users isn't
+			 * properly initialized until registration.  But an
+			 * unregistered instance cannot have any users, so treat
+			 * it the same as ->cra_users being empty.
+			 */
+			if (spawns->next == NULL)
+				break;
 		}
 	} while ((spawns = crypto_more_spawns(alg, &stack, &top,
 					      &secondary_spawns)));
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ipv6: fix possible mem leaks in ipv6_make_skb()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (153 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] crypto: algapi - fix NULL dereference in crypto_remove_spawns() Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] KVM: x86: Add memory barrier on vmcs field lookup Sasha Levin
                   ` (361 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Dumazet, David S . Miller, Sasha Levin

From: Eric Dumazet <edumazet@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 862c03ee1deb7e19e0f9931682e0294ecd1fcaf9 ]

ip6_setup_cork() might return an error, while memory allocations have
been done and must be rolled back.

Fixes: 6422398c2ab0 ("ipv6: introduce ipv6_make_skb")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Vlad Yasevich <vyasevich@gmail.com>
Reported-by: Mike Maloney <maloney@google.com>
Acked-by:  Mike Maloney <maloney@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv6/ip6_output.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index 7a6317671d32..917e423939fe 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1759,8 +1759,10 @@ struct sk_buff *ip6_make_skb(struct sock *sk,
 	cork.base.opt = NULL;
 	v6_cork.opt = NULL;
 	err = ip6_setup_cork(sk, &cork, &v6_cork, hlimit, tclass, opt, rt, fl6);
-	if (err)
+	if (err) {
+		ip6_cork_release(&cork, &v6_cork);
 		return ERR_PTR(err);
+	}
 
 	if (dontfrag < 0)
 		dontfrag = inet6_sk(sk)->dontfrag;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] KVM: x86: Add memory barrier on vmcs field lookup
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (154 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ipv6: fix possible mem leaks in ipv6_make_skb() Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/microcode/intel: Extend BDW late-loading with a revision check Sasha Levin
                   ` (360 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andrew Honig, Paolo Bonzini, Sasha Levin

From: Andrew Honig <ahonig@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 75f139aaf896d6fdeec2e468ddfa4b2fe469bf40 ]

This adds a memory barrier when performing a lookup into
the vmcs_field_to_offset_table.  This is related to
CVE-2017-5753.

Signed-off-by: Andrew Honig <ahonig@google.com>
Reviewed-by: Jim Mattson <jmattson@google.com>
Cc: stable@vger.kernel.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kvm/vmx.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index a3bea4129cbc..23d5c2fc7573 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -772,8 +772,16 @@ static inline short vmcs_field_to_offset(unsigned long field)
 {
 	BUILD_BUG_ON(ARRAY_SIZE(vmcs_field_to_offset_table) > SHRT_MAX);
 
-	if (field >= ARRAY_SIZE(vmcs_field_to_offset_table) ||
-	    vmcs_field_to_offset_table[field] == 0)
+	if (field >= ARRAY_SIZE(vmcs_field_to_offset_table))
+		return -ENOENT;
+
+	/*
+	 * FIXME: Mitigation for CVE-2017-5753.  To be replaced with a
+	 * generic mechanism.
+	 */
+	asm("lfence");
+
+	if (vmcs_field_to_offset_table[field] == 0)
 		return -ENOENT;
 
 	return vmcs_field_to_offset_table[field];
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/microcode/intel: Extend BDW late-loading with a revision check
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (155 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] KVM: x86: Add memory barrier on vmcs field lookup Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] USB: serial: cp210x: add IDs for LifeScan OneTouch Verio IQ Sasha Levin
                   ` (359 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Jia Zhang, Borislav Petkov, Thomas Gleixner, Sasha Levin

From: Jia Zhang <qianyue.zj@alibaba-inc.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b94b7373317164402ff7728d10f7023127a02b60 ]

Instead of blacklisting all model 79 CPUs when attempting a late
microcode loading, limit that only to CPUs with microcode revisions <
0x0b000021 because only on those late loading may cause a system hang.

For such processors either:

a) a BIOS update which might contain a newer microcode revision

or

b) the early microcode loading method

should be considered.

Processors with revisions 0x0b000021 or higher will not experience such
hangs.

For more details, see erratum BDF90 in document #334165 (Intel Xeon
Processor E7-8800/4800 v4 Product Family Specification Update) from
September 2017.

[ bp: Heavily massage commit message and pr_* statements. ]

Fixes: 723f2828a98c ("x86/microcode/intel: Disable late loading on model 79")
Signed-off-by: Jia Zhang <qianyue.zj@alibaba-inc.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Tony Luck <tony.luck@intel.com>
Cc: x86-ml <x86@kernel.org>
Cc: <stable@vger.kernel.org> # v4.14
Link: http://lkml.kernel.org/r/1514772287-92959-1-git-send-email-qianyue.zj@alibaba-inc.com
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kernel/cpu/microcode/intel.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
index 6ca31bf3ccbd..1009c82088ed 100644
--- a/arch/x86/kernel/cpu/microcode/intel.c
+++ b/arch/x86/kernel/cpu/microcode/intel.c
@@ -276,9 +276,17 @@ static bool is_blacklisted(unsigned int cpu)
 {
 	struct cpuinfo_x86 *c = &cpu_data(cpu);
 
-	if (c->x86 == 6 && c->x86_model == 79) {
-		pr_err_once("late loading on model 79 is disabled.\n");
-		return true;
+	/*
+	 * Late loading on model 79 with microcode revision less than 0x0b000021
+	 * may result in a system hang. This behavior is documented in item
+	 * BDF90, #334165 (Intel Xeon Processor E7-8800/4800 v4 Product Family).
+	 */
+	if (c->x86 == 6 &&
+	    c->x86_model == 79 &&
+	    c->x86_mask == 0x01 &&
+	    c->microcode < 0x0b000021) {
+		pr_err_once("Erratum BDF90: late loading with revision < 0x0b000021 (0x%x) disabled.\n", c->microcode);
+		pr_err_once("Please consider either early loading through initrd/built-in or a potential BIOS update.\n");
 	}
 
 	return false;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] USB: serial: cp210x: add IDs for LifeScan OneTouch Verio IQ
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (156 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/microcode/intel: Extend BDW late-loading with a revision check Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] iscsi-target: Make TASK_REASSIGN use proper se_cmd->cmd_kref Sasha Levin
                   ` (358 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Diego Elio Pettenò, Johan Hovold, Sasha Levin

From: Diego Elio Pettenò <flameeyes@flameeyes.eu>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4307413256ac1e09b8f53e8715af3df9e49beec3 ]

Add IDs for the OneTouch Verio IQ that comes with an embedded
USB-to-serial converter.

Signed-off-by: Diego Elio Pettenò <flameeyes@flameeyes.eu>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/serial/cp210x.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
index b1be08570088..1b1ad7e691e2 100644
--- a/drivers/usb/serial/cp210x.c
+++ b/drivers/usb/serial/cp210x.c
@@ -119,6 +119,7 @@ static const struct usb_device_id id_table[] = {
 	{ USB_DEVICE(0x10C4, 0x846E) }, /* BEI USB Sensor Interface (VCP) */
 	{ USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */
 	{ USB_DEVICE(0x10C4, 0x84B6) }, /* Starizona Hyperion */
+	{ USB_DEVICE(0x10C4, 0x85A7) }, /* LifeScan OneTouch Verio IQ */
 	{ USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */
 	{ USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */
 	{ USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] iscsi-target: Make TASK_REASSIGN use proper se_cmd->cmd_kref
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (157 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] USB: serial: cp210x: add IDs for LifeScan OneTouch Verio IQ Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] USB: serial: cp210x: add new device ID ELV ALC 8xxx Sasha Levin
                   ` (357 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Nicholas Bellinger, Sasha Levin

From: Nicholas Bellinger <nab@linux-iscsi.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ae072726f6109bb1c94841d6fb3a82dde298ea85 ]

Since commit 59b6986dbf fixed a potential NULL pointer dereference
by allocating a se_tmr_req for ISCSI_TM_FUNC_TASK_REASSIGN, the
se_tmr_req is currently leaked by iscsit_free_cmd() because no
iscsi_cmd->se_cmd.se_tfo was associated.

To address this, treat ISCSI_TM_FUNC_TASK_REASSIGN like any other
TMR and call transport_init_se_cmd() + target_get_sess_cmd() to
setup iscsi_cmd->se_cmd.se_tfo with se_cmd->cmd_kref of 2.

This will ensure normal release operation once se_cmd->cmd_kref
reaches zero and target_release_cmd_kref() is invoked, se_tmr_req
will be released via existing target_free_cmd_mem() and
core_tmr_release_req() code.

Reported-by: Donald White <dew@datera.io>
Cc: Donald White <dew@datera.io>
Cc: Mike Christie <mchristi@redhat.com>
Cc: Hannes Reinecke <hare@suse.com>
Cc: stable@vger.kernel.org # 3.10+
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/target/iscsi/iscsi_target.c | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)

diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index 2d6b0cf0929e..614811e93298 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -1755,7 +1755,6 @@ iscsit_handle_task_mgt_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
 	struct iscsi_tmr_req *tmr_req;
 	struct iscsi_tm *hdr;
 	int out_of_order_cmdsn = 0, ret;
-	bool sess_ref = false;
 	u8 function, tcm_function = TMR_UNKNOWN;
 
 	hdr			= (struct iscsi_tm *) buf;
@@ -1797,18 +1796,17 @@ iscsit_handle_task_mgt_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
 					     buf);
 	}
 
+	transport_init_se_cmd(&cmd->se_cmd, &iscsi_ops,
+			      conn->sess->se_sess, 0, DMA_NONE,
+			      TCM_SIMPLE_TAG, cmd->sense_buffer + 2);
+
+	target_get_sess_cmd(&cmd->se_cmd, true);
+
 	/*
 	 * TASK_REASSIGN for ERL=2 / connection stays inside of
 	 * LIO-Target $FABRIC_MOD
 	 */
 	if (function != ISCSI_TM_FUNC_TASK_REASSIGN) {
-		transport_init_se_cmd(&cmd->se_cmd, &iscsi_ops,
-				      conn->sess->se_sess, 0, DMA_NONE,
-				      TCM_SIMPLE_TAG, cmd->sense_buffer + 2);
-
-		target_get_sess_cmd(&cmd->se_cmd, true);
-		sess_ref = true;
-
 		switch (function) {
 		case ISCSI_TM_FUNC_ABORT_TASK:
 			tcm_function = TMR_ABORT_TASK;
@@ -1947,12 +1945,8 @@ iscsit_handle_task_mgt_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
 	 * For connection recovery, this is also the default action for
 	 * TMR TASK_REASSIGN.
 	 */
-	if (sess_ref) {
-		pr_debug("Handle TMR, using sess_ref=true check\n");
-		target_put_sess_cmd(&cmd->se_cmd);
-	}
-
 	iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state);
+	target_put_sess_cmd(&cmd->se_cmd);
 	return 0;
 }
 EXPORT_SYMBOL(iscsit_handle_task_mgt_cmd);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] USB: serial: cp210x: add new device ID ELV ALC 8xxx
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (158 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] iscsi-target: Make TASK_REASSIGN use proper se_cmd->cmd_kref Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usb: misc: usb3503: make sure reset is low for at least 100us Sasha Levin
                   ` (356 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Christian Holl, Johan Hovold, Sasha Levin

From: Christian Holl <cyborgx1@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d14ac576d10f865970bb1324d337e5e24d79aaf4 ]

This adds the ELV ALC 8xxx Battery Charging device
to the list of USB IDs of drivers/usb/serial/cp210x.c

Signed-off-by: Christian Holl <cyborgx1@gmail.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/serial/cp210x.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
index 1b1ad7e691e2..142c876e7b19 100644
--- a/drivers/usb/serial/cp210x.c
+++ b/drivers/usb/serial/cp210x.c
@@ -169,6 +169,7 @@ static const struct usb_device_id id_table[] = {
 	{ USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */
 	{ USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */
 	{ USB_DEVICE(0x18EF, 0xE025) }, /* ELV Marble Sound Board 1 */
+	{ USB_DEVICE(0x18EF, 0xE030) }, /* ELV ALC 8xxx Battery Charger */
 	{ USB_DEVICE(0x18EF, 0xE032) }, /* ELV TFD500 Data Logger */
 	{ USB_DEVICE(0x1901, 0x0190) }, /* GE B850 CP2105 Recorder interface */
 	{ USB_DEVICE(0x1901, 0x0193) }, /* GE B650 CP2104 PMC interface */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] USB: fix usbmon BUG trigger
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (160 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usb: misc: usb3503: make sure reset is low for at least 100us Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: remove kernel addresses from usb device and urb debug msgs Sasha Levin
                   ` (354 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Pete Zaitcev, Greg Kroah-Hartman, Sasha Levin

From: Pete Zaitcev <zaitcev@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 46eb14a6e1585d99c1b9f58d0e7389082a5f466b ]

Automated tests triggered this by opening usbmon and accessing the
mmap while simultaneously resizing the buffers. This bug was with
us since 2006, because typically applications only size the buffers
once and thus avoid racing. Reported by Kirill A. Shutemov.

Reported-by: <syzbot+f9831b881b3e849829fc@syzkaller.appspotmail.com>
Signed-off-by: Pete Zaitcev <zaitcev@redhat.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/mon/mon_bin.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/mon/mon_bin.c b/drivers/usb/mon/mon_bin.c
index 9a62e89d6dc0..bbec84dd34fb 100644
--- a/drivers/usb/mon/mon_bin.c
+++ b/drivers/usb/mon/mon_bin.c
@@ -1000,7 +1000,9 @@ static long mon_bin_ioctl(struct file *file, unsigned int cmd, unsigned long arg
 		break;
 
 	case MON_IOCQ_RING_SIZE:
+		mutex_lock(&rp->fetch_lock);
 		ret = rp->b_size;
+		mutex_unlock(&rp->fetch_lock);
 		break;
 
 	case MON_IOCT_RING_SIZE:
@@ -1227,12 +1229,16 @@ static int mon_bin_vma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 	unsigned long offset, chunk_idx;
 	struct page *pageptr;
 
+	mutex_lock(&rp->fetch_lock);
 	offset = vmf->pgoff << PAGE_SHIFT;
-	if (offset >= rp->b_size)
+	if (offset >= rp->b_size) {
+		mutex_unlock(&rp->fetch_lock);
 		return VM_FAULT_SIGBUS;
+	}
 	chunk_idx = offset / CHUNK_SIZE;
 	pageptr = rp->b_vec[chunk_idx].pg;
 	get_page(pageptr);
+	mutex_unlock(&rp->fetch_lock);
 	vmf->page = pageptr;
 	return 0;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: misc: usb3503: make sure reset is low for at least 100us
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (159 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] USB: serial: cp210x: add new device ID ELV ALC 8xxx Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] USB: fix usbmon BUG trigger Sasha Levin
                   ` (355 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Stefan Agner, Greg Kroah-Hartman, Sasha Levin

From: Stefan Agner <stefan@agner.ch>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b8626f1dc29d3eee444bfaa92146ec7b291ef41c ]

When using a GPIO which is high by default, and initialize the
driver in USB Hub mode, initialization fails with:
  [  111.757794] usb3503 0-0008: SP_ILOCK failed (-5)

The reason seems to be that the chip is not properly reset.
Probe does initialize reset low, however some lines later the
code already set it back high, which is not long enouth.

Make sure reset is asserted for at least 100us by inserting a
delay after initializing the reset pin during probe.

Signed-off-by: Stefan Agner <stefan@agner.ch>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/misc/usb3503.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/usb/misc/usb3503.c b/drivers/usb/misc/usb3503.c
index 64ff5b91752d..b117a1f6bfc3 100644
--- a/drivers/usb/misc/usb3503.c
+++ b/drivers/usb/misc/usb3503.c
@@ -292,6 +292,8 @@ static int usb3503_probe(struct usb3503 *hub)
 	if (gpio_is_valid(hub->gpio_reset)) {
 		err = devm_gpio_request_one(dev, hub->gpio_reset,
 				GPIOF_OUT_INIT_LOW, "usb3503 reset");
+		/* Datasheet defines a hardware reset to be at least 100us */
+		usleep_range(100, 10000);
 		if (err) {
 			dev_err(dev,
 				"unable to request GPIO %d as reset pin (%d)\n",
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usbip: remove kernel addresses from usb device and urb debug msgs
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (161 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] USB: fix usbmon BUG trigger Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] staging: android: ashmem: fix a race condition in ASHMEM_SET_SIZE ioctl Sasha Levin
                   ` (353 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Shuah Khan, Greg Kroah-Hartman, Sasha Levin

From: Shuah Khan <shuahkh@osg.samsung.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e1346fd87c71a1f61de1fe476ec8df1425ac931c ]

usbip_dump_usb_device() and usbip_dump_urb() print kernel addresses.
Remove kernel addresses from usb device and urb debug msgs and improve
the message content.

Instead of printing parent device and bus addresses, print parent device
and bus names.

Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/usbip/usbip_common.c | 17 +++--------------
 1 file changed, 3 insertions(+), 14 deletions(-)

diff --git a/drivers/usb/usbip/usbip_common.c b/drivers/usb/usbip/usbip_common.c
index e40da7759a0e..9752b93f754e 100644
--- a/drivers/usb/usbip/usbip_common.c
+++ b/drivers/usb/usbip/usbip_common.c
@@ -103,7 +103,7 @@ static void usbip_dump_usb_device(struct usb_device *udev)
 	dev_dbg(dev, "       devnum(%d) devpath(%s) usb speed(%s)",
 		udev->devnum, udev->devpath, usb_speed_string(udev->speed));
 
-	pr_debug("tt %p, ttport %d\n", udev->tt, udev->ttport);
+	pr_debug("tt hub ttport %d\n", udev->ttport);
 
 	dev_dbg(dev, "                    ");
 	for (i = 0; i < 16; i++)
@@ -136,12 +136,8 @@ static void usbip_dump_usb_device(struct usb_device *udev)
 	}
 	pr_debug("\n");
 
-	dev_dbg(dev, "parent %p, bus %p\n", udev->parent, udev->bus);
-
-	dev_dbg(dev,
-		"descriptor %p, config %p, actconfig %p, rawdescriptors %p\n",
-		&udev->descriptor, udev->config,
-		udev->actconfig, udev->rawdescriptors);
+	dev_dbg(dev, "parent %s, bus %s\n", dev_name(&udev->parent->dev),
+		udev->bus->bus_name);
 
 	dev_dbg(dev, "have_langid %d, string_langid %d\n",
 		udev->have_langid, udev->string_langid);
@@ -249,9 +245,6 @@ void usbip_dump_urb(struct urb *urb)
 
 	dev = &urb->dev->dev;
 
-	dev_dbg(dev, "   urb                   :%p\n", urb);
-	dev_dbg(dev, "   dev                   :%p\n", urb->dev);
-
 	usbip_dump_usb_device(urb->dev);
 
 	dev_dbg(dev, "   pipe                  :%08x ", urb->pipe);
@@ -260,11 +253,9 @@ void usbip_dump_urb(struct urb *urb)
 
 	dev_dbg(dev, "   status                :%d\n", urb->status);
 	dev_dbg(dev, "   transfer_flags        :%08X\n", urb->transfer_flags);
-	dev_dbg(dev, "   transfer_buffer       :%p\n", urb->transfer_buffer);
 	dev_dbg(dev, "   transfer_buffer_length:%d\n",
 						urb->transfer_buffer_length);
 	dev_dbg(dev, "   actual_length         :%d\n", urb->actual_length);
-	dev_dbg(dev, "   setup_packet          :%p\n", urb->setup_packet);
 
 	if (urb->setup_packet && usb_pipetype(urb->pipe) == PIPE_CONTROL)
 		usbip_dump_usb_ctrlrequest(
@@ -274,8 +265,6 @@ void usbip_dump_urb(struct urb *urb)
 	dev_dbg(dev, "   number_of_packets     :%d\n", urb->number_of_packets);
 	dev_dbg(dev, "   interval              :%d\n", urb->interval);
 	dev_dbg(dev, "   error_count           :%d\n", urb->error_count);
-	dev_dbg(dev, "   context               :%p\n", urb->context);
-	dev_dbg(dev, "   complete              :%p\n", urb->complete);
 }
 EXPORT_SYMBOL_GPL(usbip_dump_urb);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Bluetooth: Prevent stack info leak from the EFS element.
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (163 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] staging: android: ashmem: fix a race condition in ASHMEM_SET_SIZE ioctl Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] e1000e: Fix e1000_check_for_copper_link_ich8lan return value Sasha Levin
                   ` (351 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Ben Seri, Greg Kroah-Hartman, Sasha Levin

From: Ben Seri <ben@armis.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 06e7e776ca4d36547e503279aeff996cbb292c16 ]

In the function l2cap_parse_conf_rsp and in the function
l2cap_parse_conf_req the following variable is declared without
initialization:

struct l2cap_conf_efs efs;

In addition, when parsing input configuration parameters in both of
these functions, the switch case for handling EFS elements may skip the
memcpy call that will write to the efs variable:

...
case L2CAP_CONF_EFS:
if (olen == sizeof(efs))
memcpy(&efs, (void *)val, olen);
...

The olen in the above if is attacker controlled, and regardless of that
if, in both of these functions the efs variable would eventually be
added to the outgoing configuration request that is being built:

l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs), (unsigned long) &efs);

So by sending a configuration request, or response, that contains an
L2CAP_CONF_EFS element, but with an element length that is not
sizeof(efs) - the memcpy to the uninitialized efs variable can be
avoided, and the uninitialized variable would be returned to the
attacker (16 bytes).

This issue has been assigned CVE-2017-1000410

Cc: Marcel Holtmann <marcel@holtmann.org>
Cc: Gustavo Padovan <gustavo@padovan.org>
Cc: Johan Hedberg <johan.hedberg@gmail.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Ben Seri <ben@armis.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/bluetooth/l2cap_core.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index 9b6b35977f48..915a584b4e19 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -3346,9 +3346,10 @@ static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data, size_t data
 			break;
 
 		case L2CAP_CONF_EFS:
-			remote_efs = 1;
-			if (olen == sizeof(efs))
+			if (olen == sizeof(efs)) {
+				remote_efs = 1;
 				memcpy(&efs, (void *) val, olen);
+			}
 			break;
 
 		case L2CAP_CONF_EWS:
@@ -3567,16 +3568,17 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
 			break;
 
 		case L2CAP_CONF_EFS:
-			if (olen == sizeof(efs))
+			if (olen == sizeof(efs)) {
 				memcpy(&efs, (void *)val, olen);
 
-			if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
-			    efs.stype != L2CAP_SERV_NOTRAFIC &&
-			    efs.stype != chan->local_stype)
-				return -ECONNREFUSED;
+				if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
+				    efs.stype != L2CAP_SERV_NOTRAFIC &&
+				    efs.stype != chan->local_stype)
+					return -ECONNREFUSED;
 
-			l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs),
-					   (unsigned long) &efs, endptr - ptr);
+				l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs),
+						   (unsigned long) &efs, endptr - ptr);
+			}
 			break;
 
 		case L2CAP_CONF_FCS:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] staging: android: ashmem: fix a race condition in ASHMEM_SET_SIZE ioctl
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (162 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: remove kernel addresses from usb device and urb debug msgs Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] Bluetooth: Prevent stack info leak from the EFS element Sasha Levin
                   ` (352 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Viktor Slavkovic, Greg Kroah-Hartman, Sasha Levin

From: Viktor Slavkovic <viktors@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 443064cb0b1fb4569fe0a71209da7625129fb760 ]

A lock-unlock is missing in ASHMEM_SET_SIZE ioctl which can result in a
race condition when mmap is called. After the !asma->file check, before
setting asma->size, asma->file can be set in mmap. That would result in
having different asma->size than the mapped memory size. Combined with
ASHMEM_UNPIN ioctl and shrinker invocation, this can result in memory
corruption.

Signed-off-by: Viktor Slavkovic <viktors@google.com>
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/staging/android/ashmem.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/staging/android/ashmem.c b/drivers/staging/android/ashmem.c
index 7dd6bde4f325..c40bd7fbc210 100644
--- a/drivers/staging/android/ashmem.c
+++ b/drivers/staging/android/ashmem.c
@@ -758,10 +758,12 @@ static long ashmem_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 		break;
 	case ASHMEM_SET_SIZE:
 		ret = -EINVAL;
+		mutex_lock(&ashmem_mutex);
 		if (!asma->file) {
 			ret = 0;
 			asma->size = (size_t) arg;
 		}
+		mutex_unlock(&ashmem_mutex);
 		break;
 	case ASHMEM_GET_SIZE:
 		ret = asma->size;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] uas: ignore UAS for Norelsys NS1068(X) chips
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (165 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] e1000e: Fix e1000_check_for_copper_link_ich8lan return value Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/cpu: Factor out application of forced CPU caps Sasha Levin
                   ` (349 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Icenowy Zheng, Greg Kroah-Hartman, Sasha Levin

From: Icenowy Zheng <icenowy@aosc.io>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 928afc85270753657b5543e052cc270c279a3fe9 ]

The UAS mode of Norelsys NS1068(X) is reported to fail to work on
several platforms with the following error message:

xhci-hcd xhci-hcd.0.auto: ERROR Transfer event for unknown stream ring slot 1 ep 8
xhci-hcd xhci-hcd.0.auto: @00000000bf04a400 00000000 00000000 1b000000 01098001

And when trying to mount a partition on the disk the disk will
disconnect from the USB controller, then after re-connecting the device
will be offlined and not working at all.

Falling back to USB mass storage can solve this problem, so ignore UAS
function of this chip.

Cc: stable@vger.kernel.org
Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
Acked-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/storage/unusual_uas.h | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h
index 2f80163ffb94..8ed80f28416f 100644
--- a/drivers/usb/storage/unusual_uas.h
+++ b/drivers/usb/storage/unusual_uas.h
@@ -155,6 +155,13 @@ UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999,
 		USB_SC_DEVICE, USB_PR_DEVICE, NULL,
 		US_FL_NO_ATA_1X),
 
+/* Reported-by: Icenowy Zheng <icenowy@aosc.io> */
+UNUSUAL_DEV(0x2537, 0x1068, 0x0000, 0x9999,
+		"Norelsys",
+		"NS1068X",
+		USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+		US_FL_IGNORE_UAS),
+
 /* Reported-by: Takeo Nakayama <javhera@gmx.com> */
 UNUSUAL_DEV(0x357d, 0x7788, 0x0000, 0x9999,
 		"JMicron",
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] e1000e: Fix e1000_check_for_copper_link_ich8lan return value.
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (164 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] Bluetooth: Prevent stack info leak from the EFS element Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] uas: ignore UAS for Norelsys NS1068(X) chips Sasha Levin
                   ` (350 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Benjamin Poirier, Jeff Kirsher, Sasha Levin

From: Benjamin Poirier <bpoirier@suse.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4110e02eb45ea447ec6f5459c9934de0a273fb91 ]

e1000e_check_for_copper_link() and e1000_check_for_copper_link_ich8lan()
are the two functions that may be assigned to mac.ops.check_for_link when
phy.media_type == e1000_media_type_copper. Commit 19110cfbb34d ("e1000e:
Separate signaling for link check/link up") changed the meaning of the
return value of check_for_link for copper media but only adjusted the first
function. This patch adjusts the second function likewise.

Reported-by: Christian Hesse <list@eworm.de>
Reported-by: Gabriel C <nix.or.die@gmail.com>
Link: https://bugzilla.kernel.org/show_bug.cgi?id=198047
Fixes: 19110cfbb34d ("e1000e: Separate signaling for link check/link up")
Signed-off-by: Benjamin Poirier <bpoirier@suse.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Tested-by: Christian Hesse <list@eworm.de>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/intel/e1000e/ich8lan.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
index e2498dbf3c3b..5e63a8931f2e 100644
--- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
@@ -1345,6 +1345,9 @@ static s32 e1000_disable_ulp_lpt_lp(struct e1000_hw *hw, bool force)
  *  Checks to see of the link status of the hardware has changed.  If a
  *  change in link status has been detected, then we read the PHY registers
  *  to get the current speed/duplex if link exists.
+ *
+ *  Returns a negative error code (-E1000_ERR_*) or 0 (link down) or 1 (link
+ *  up).
  **/
 static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
 {
@@ -1360,7 +1363,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
 	 * Change or Rx Sequence Error interrupt.
 	 */
 	if (!mac->get_link_status)
-		return 0;
+		return 1;
 
 	/* First we want to see if the MII Status Register reports
 	 * link.  If so, then we want to get the current speed/duplex
@@ -1519,10 +1522,12 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
 	 * different link partner.
 	 */
 	ret_val = e1000e_config_fc_after_link_up(hw);
-	if (ret_val)
+	if (ret_val) {
 		e_dbg("Error configuring flow control\n");
+		return ret_val;
+	}
 
-	return ret_val;
+	return 1;
 }
 
 static s32 e1000_get_variants_ich8lan(struct e1000_adapter *adapter)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/cpufeatures: Make CPU bugs sticky
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (167 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/cpu: Factor out application of forced CPU caps Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/alternatives: Fix optimize_nops() checking Sasha Levin
                   ` (347 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Thomas Gleixner, Ingo Molnar, Sasha Levin

From: Thomas Gleixner <tglx@linutronix.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6cbd2171e89b13377261d15e64384df60ecb530e ]

There is currently no way to force CPU bug bits like CPU feature bits. That
makes it impossible to set a bug bit once at boot and have it stick for all
upcoming CPUs.

Extend the force set/clear arrays to handle bug bits as well.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Borislav Petkov <bp@suse.de>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Borislav Petkov <bpetkov@suse.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David Laight <David.Laight@aculab.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Eduardo Valentin <eduval@amazon.com>
Cc: Greg KH <gregkh@linuxfoundation.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: aliguori@amazon.com
Cc: daniel.gruss@iaik.tugraz.at
Cc: hughd@google.com
Cc: keescook@google.com
Link: https://lkml.kernel.org/r/20171204150606.992156574@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/cpufeature.h | 2 ++
 arch/x86/include/asm/processor.h  | 4 ++--
 arch/x86/kernel/cpu/common.c      | 6 +++---
 3 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h
index 3d6606fb97d0..026c0b4ae086 100644
--- a/arch/x86/include/asm/cpufeature.h
+++ b/arch/x86/include/asm/cpufeature.h
@@ -348,6 +348,8 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
 	set_bit(bit, (unsigned long *)cpu_caps_set);	\
 } while (0)
 
+#define setup_force_cpu_bug(bit) setup_force_cpu_cap(bit)
+
 #define cpu_has_fpu		boot_cpu_has(X86_FEATURE_FPU)
 #define cpu_has_de		boot_cpu_has(X86_FEATURE_DE)
 #define cpu_has_pse		boot_cpu_has(X86_FEATURE_PSE)
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 23ba6765b718..ecc3dec4beb6 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -150,8 +150,8 @@ extern struct cpuinfo_x86	boot_cpu_data;
 extern struct cpuinfo_x86	new_cpu_data;
 
 extern struct tss_struct	doublefault_tss;
-extern __u32			cpu_caps_cleared[NCAPINTS];
-extern __u32			cpu_caps_set[NCAPINTS];
+extern __u32			cpu_caps_cleared[NCAPINTS + NBUGINTS];
+extern __u32			cpu_caps_set[NCAPINTS + NBUGINTS];
 
 #ifdef CONFIG_SMP
 DECLARE_PER_CPU_READ_MOSTLY(struct cpuinfo_x86, cpu_info);
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index c4681f3461a1..9613a72723cd 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -436,8 +436,8 @@ static const char *table_lookup_model(struct cpuinfo_x86 *c)
 	return NULL;		/* Not found */
 }
 
-__u32 cpu_caps_cleared[NCAPINTS];
-__u32 cpu_caps_set[NCAPINTS];
+__u32 cpu_caps_cleared[NCAPINTS + NBUGINTS];
+__u32 cpu_caps_set[NCAPINTS + NBUGINTS];
 
 void load_percpu_segment(int cpu)
 {
@@ -670,7 +670,7 @@ static void apply_forced_caps(struct cpuinfo_x86 *c)
 {
 	int i;
 
-	for (i = 0; i < NCAPINTS; i++) {
+	for (i = 0; i < NCAPINTS + NBUGINTS; i++) {
 		c->x86_capability[i] &= ~cpu_caps_cleared[i];
 		c->x86_capability[i] |= cpu_caps_set[i];
 	}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/cpu: Factor out application of forced CPU caps
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (166 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] uas: ignore UAS for Norelsys NS1068(X) chips Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/cpufeatures: Make CPU bugs sticky Sasha Levin
                   ` (348 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8bf1ebca215c262e48c15a4a15f175991776f57f ]

There are multiple call sites that apply forced CPU caps.  Factor
them into a helper.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Reviewed-by: Borislav Petkov <bp@suse.de>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Matthew Whitehead <tedheadster@gmail.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: One Thousand Gnomes <gnomes@lxorguk.ukuu.org.uk>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Yu-cheng Yu <yu-cheng.yu@intel.com>
Link: http://lkml.kernel.org/r/623ff7555488122143e4417de09b18be2085ad06.1484705016.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kernel/cpu/common.c | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index f5647d238337..c4681f3461a1 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -666,6 +666,16 @@ void cpu_detect(struct cpuinfo_x86 *c)
 	}
 }
 
+static void apply_forced_caps(struct cpuinfo_x86 *c)
+{
+	int i;
+
+	for (i = 0; i < NCAPINTS; i++) {
+		c->x86_capability[i] &= ~cpu_caps_cleared[i];
+		c->x86_capability[i] |= cpu_caps_set[i];
+	}
+}
+
 void get_cpu_cap(struct cpuinfo_x86 *c)
 {
 	u32 tfms, xlvl;
@@ -957,11 +967,8 @@ static void identify_cpu(struct cpuinfo_x86 *c)
 	if (this_cpu->c_identify)
 		this_cpu->c_identify(c);
 
-	/* Clear/Set all flags overriden by options, after probe */
-	for (i = 0; i < NCAPINTS; i++) {
-		c->x86_capability[i] &= ~cpu_caps_cleared[i];
-		c->x86_capability[i] |= cpu_caps_set[i];
-	}
+ 	/* Clear/Set all flags overridden by options, after probe */
+	apply_forced_caps(c);
 
 #ifdef CONFIG_X86_64
 	c->apicid = apic->phys_pkg_id(c->initial_apicid, 0);
@@ -1022,10 +1029,7 @@ static void identify_cpu(struct cpuinfo_x86 *c)
 	 * Clear/Set all flags overriden by options, need do it
 	 * before following smp all cpus cap AND.
 	 */
-	for (i = 0; i < NCAPINTS; i++) {
-		c->x86_capability[i] &= ~cpu_caps_cleared[i];
-		c->x86_capability[i] |= cpu_caps_set[i];
-	}
+	apply_forced_caps(c);
 
 	/*
 	 * On SMP, boot_cpu_data holds the common feature set between
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/alternatives: Fix optimize_nops() checking
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (168 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/cpufeatures: Make CPU bugs sticky Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/alternatives: Add missing '\n' at end of ALTERNATIVE inline asm Sasha Levin
                   ` (346 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Borislav Petkov, Thomas Gleixner, Sasha Levin

From: Borislav Petkov <bp@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 612e8e9350fd19cae6900cf36ea0c6892d1a0dca ]

The alternatives code checks only the first byte whether it is a NOP, but
with NOPs in front of the payload and having actual instructions after it
breaks the "optimized' test.

Make sure to scan all bytes before deciding to optimize the NOPs in there.

Reported-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Tim Chen <tim.c.chen@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Jiri Kosina <jikos@kernel.org>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Andrew Lutomirski <luto@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Greg Kroah-Hartman <gregkh@linux-foundation.org>
Cc: Paul Turner <pjt@google.com>
Link: https://lkml.kernel.org/r/20180110112815.mgciyf5acwacphkq@pd.tnic
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kernel/alternative.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
index d1918a8c4393..fb3d8ca0f0a2 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -326,9 +326,12 @@ recompute_jump(struct alt_instr *a, u8 *orig_insn, u8 *repl_insn, u8 *insnbuf)
 static void __init_or_module optimize_nops(struct alt_instr *a, u8 *instr)
 {
 	unsigned long flags;
+	int i;
 
-	if (instr[0] != 0x90)
-		return;
+	for (i = 0; i < a->padlen; i++) {
+		if (instr[i] != 0x90)
+			return;
+	}
 
 	local_irq_save(flags);
 	add_nops(instr + (a->instrlen - a->padlen), a->padlen);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/alternatives: Add missing '\n' at end of ALTERNATIVE inline asm
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (169 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/alternatives: Fix optimize_nops() checking Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] gcov: disable for COMPILE_TEST Sasha Levin
                   ` (345 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: David Woodhouse, Thomas Gleixner, Sasha Levin

From: David Woodhouse <dwmw@amazon.co.uk>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b9e705ef7cfaf22db0daab91ad3cd33b0fa32eb9 ]

Where an ALTERNATIVE is used in the middle of an inline asm block, this
would otherwise lead to the following instruction being appended directly
to the trailing ".popsection", and a failed compile.

Fixes: 9cebed423c84 ("x86, alternative: Use .pushsection/.popsection")
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: gnomes@lxorguk.ukuu.org.uk
Cc: Rik van Riel <riel@redhat.com>
Cc: ak@linux.intel.com
Cc: Tim Chen <tim.c.chen@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Paul Turner <pjt@google.com>
Cc: Jiri Kosina <jikos@kernel.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Kees Cook <keescook@google.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Greg Kroah-Hartman <gregkh@linux-foundation.org>
Cc: stable@vger.kernel.org
Link: https://lkml.kernel.org/r/20180104143710.8961-8-dwmw@amazon.co.uk
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/alternative.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/include/asm/alternative.h b/arch/x86/include/asm/alternative.h
index c97effa6c72b..84932b5100f0 100644
--- a/arch/x86/include/asm/alternative.h
+++ b/arch/x86/include/asm/alternative.h
@@ -132,7 +132,7 @@ static inline int alternatives_text_reserved(void *start, void *end)
 	".popsection\n"							\
 	".pushsection .altinstr_replacement, \"ax\"\n"			\
 	ALTINSTR_REPLACEMENT(newinstr, feature, 1)			\
-	".popsection"
+	".popsection\n"
 
 #define ALTERNATIVE_2(oldinstr, newinstr1, feature1, newinstr2, feature2)\
 	OLDINSTR_2(oldinstr, 1, 2)					\
@@ -143,7 +143,7 @@ static inline int alternatives_text_reserved(void *start, void *end)
 	".pushsection .altinstr_replacement, \"ax\"\n"			\
 	ALTINSTR_REPLACEMENT(newinstr1, feature1, 1)			\
 	ALTINSTR_REPLACEMENT(newinstr2, feature2, 2)			\
-	".popsection"
+	".popsection\n"
 
 /*
  * This must be included *after* the definition of ALTERNATIVE due to
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] gcov: disable for COMPILE_TEST
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (170 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/alternatives: Add missing '\n' at end of ALTERNATIVE inline asm Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/asm: Use register variable to get stack pointer value Sasha Levin
                   ` (344 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Michal Marek, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit cc622420798c4bcf093785d872525087a7798db9 ]

Enabling gcov is counterproductive to compile testing: it significantly
increases the kernel image size, compile time, and it produces lots
of false positive "may be used uninitialized" warnings as the result
of missed optimizations.

This is in line with how UBSAN_SANITIZE_ALL and PROFILE_ALL_BRANCHES
work, both of which have similar problems.

With an ARM allmodconfig kernel, I see the build time drop from
283 minutes CPU time to 225 minutes, and the vmlinux size drops
from 43MB to 26MB.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
Signed-off-by: Michal Marek <mmarek@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/gcov/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/kernel/gcov/Kconfig b/kernel/gcov/Kconfig
index c92e44855ddd..1276aabaab55 100644
--- a/kernel/gcov/Kconfig
+++ b/kernel/gcov/Kconfig
@@ -37,6 +37,7 @@ config ARCH_HAS_GCOV_PROFILE_ALL
 
 config GCOV_PROFILE_ALL
 	bool "Profile entire Kernel"
+	depends on !COMPILE_TEST
 	depends on GCOV_KERNEL
 	depends on ARCH_HAS_GCOV_PROFILE_ALL
 	default n
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/asm: Use register variable to get stack pointer value
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (171 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] gcov: disable for COMPILE_TEST Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/kbuild: enable modversions for symbols exported from asm Sasha Levin
                   ` (343 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andrey Ryabinin, Ingo Molnar, Sasha Levin

From: Andrey Ryabinin <aryabinin@virtuozzo.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 196bd485ee4f03ce4c690bfcf38138abfcd0a4bc ]

Currently we use current_stack_pointer() function to get the value
of the stack pointer register. Since commit:

  f5caf621ee35 ("x86/asm: Fix inline asm call constraints for Clang")

... we have a stack register variable declared. It can be used instead of
current_stack_pointer() function which allows to optimize away some
excessive "mov %rsp, %<dst>" instructions:

 -mov    %rsp,%rdx
 -sub    %rdx,%rax
 -cmp    $0x3fff,%rax
 -ja     ffffffff810722fd <ist_begin_non_atomic+0x2d>

 +sub    %rsp,%rax
 +cmp    $0x3fff,%rax
 +ja     ffffffff810722fa <ist_begin_non_atomic+0x2a>

Remove current_stack_pointer(), rename __asm_call_sp to current_stack_pointer
and use it instead of the removed function.

Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Reviewed-by: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20170929141537.29167-1-aryabinin@virtuozzo.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/asm.h         | 11 +++++++++++
 arch/x86/include/asm/thread_info.h | 11 -----------
 arch/x86/kernel/irq_32.c           |  6 +++---
 arch/x86/kernel/traps.c            |  2 +-
 4 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/arch/x86/include/asm/asm.h b/arch/x86/include/asm/asm.h
index e2015452177d..37496d271033 100644
--- a/arch/x86/include/asm/asm.h
+++ b/arch/x86/include/asm/asm.h
@@ -88,4 +88,15 @@
 /* For C file, we already have NOKPROBE_SYMBOL macro */
 #endif
 
+#ifndef __ASSEMBLY__
+/*
+ * This output constraint should be used for any inline asm which has a "call"
+ * instruction.  Otherwise the asm may be inserted before the frame pointer
+ * gets set up by the containing function.  If you forget to do this, objtool
+ * may print a "call without frame pointer save/setup" warning.
+ */
+register unsigned long current_stack_pointer asm(_ASM_SP);
+#define ASM_CALL_CONSTRAINT "+r" (current_stack_pointer)
+#endif
+
 #endif /* _ASM_X86_ASM_H */
diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h
index b4bdec3e9523..b58daa40eae9 100644
--- a/arch/x86/include/asm/thread_info.h
+++ b/arch/x86/include/asm/thread_info.h
@@ -184,17 +184,6 @@ static inline struct thread_info *current_thread_info(void)
 	return (struct thread_info *)(current_top_of_stack() - THREAD_SIZE);
 }
 
-static inline unsigned long current_stack_pointer(void)
-{
-	unsigned long sp;
-#ifdef CONFIG_X86_64
-	asm("mov %%rsp,%0" : "=g" (sp));
-#else
-	asm("mov %%esp,%0" : "=g" (sp));
-#endif
-	return sp;
-}
-
 #else /* !__ASSEMBLY__ */
 
 /* Load thread_info address into "reg" */
diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c
index f9fd86a7fcc7..9f4ffc122d9e 100644
--- a/arch/x86/kernel/irq_32.c
+++ b/arch/x86/kernel/irq_32.c
@@ -71,7 +71,7 @@ static void call_on_stack(void *func, void *stack)
 
 static inline void *current_stack(void)
 {
-	return (void *)(current_stack_pointer() & ~(THREAD_SIZE - 1));
+	return (void *)(current_stack_pointer & ~(THREAD_SIZE - 1));
 }
 
 static inline int
@@ -96,7 +96,7 @@ execute_on_irq_stack(int overflow, struct irq_desc *desc, int irq)
 
 	/* Save the next esp at the bottom of the stack */
 	prev_esp = (u32 *)irqstk;
-	*prev_esp = current_stack_pointer();
+	*prev_esp = current_stack_pointer;
 
 	if (unlikely(overflow))
 		call_on_stack(print_stack_overflow, isp);
@@ -149,7 +149,7 @@ void do_softirq_own_stack(void)
 
 	/* Push the previous esp onto the stack */
 	prev_esp = (u32 *)irqstk;
-	*prev_esp = current_stack_pointer();
+	*prev_esp = current_stack_pointer;
 
 	call_on_stack(__do_softirq, isp);
 }
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
index 020248f2cec4..e78c6783a2de 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -175,7 +175,7 @@ void ist_begin_non_atomic(struct pt_regs *regs)
 	 * from double_fault.
 	 */
 	BUG_ON((unsigned long)(current_top_of_stack() -
-			       current_stack_pointer()) >= THREAD_SIZE);
+			       current_stack_pointer) >= THREAD_SIZE);
 
 	preempt_count_sub(HARDIRQ_OFFSET);
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/kbuild: enable modversions for symbols exported from asm
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (172 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/asm: Use register variable to get stack pointer value Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/asm: Make asm/alternative.h safe from assembly Sasha Levin
                   ` (342 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Adam Borowski, Michal Marek, Sasha Levin

From: Adam Borowski <kilobyte@angband.pl>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 334bb773876403eae3457d81be0b8ea70f8e4ccc ]

Commit 4efca4ed ("kbuild: modversions for EXPORT_SYMBOL() for asm") adds
modversion support for symbols exported from asm files. Architectures
must include C-style declarations for those symbols in asm/asm-prototypes.h
in order for them to be versioned.

Add these declarations for x86, and an architecture-independent file that
can be used for common symbols.

With f27c2f6 reverting 8ab2ae6 ("default exported asm symbols to zero") we
produce a scary warning on x86, this commit fixes that.

Signed-off-by: Adam Borowski <kilobyte@angband.pl>
Tested-by: Kalle Valo <kvalo@codeaurora.org>
Acked-by: Nicholas Piggin <npiggin@gmail.com>
Tested-by: Peter Wu <peter@lekensteyn.nl>
Tested-by: Oliver Hartkopp <socketcan@hartkopp.net>
Signed-off-by: Michal Marek <mmarek@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/asm-prototypes.h | 16 ++++++++++++++++
 include/asm-generic/asm-prototypes.h  |  7 +++++++
 2 files changed, 23 insertions(+)
 create mode 100644 arch/x86/include/asm/asm-prototypes.h
 create mode 100644 include/asm-generic/asm-prototypes.h

diff --git a/arch/x86/include/asm/asm-prototypes.h b/arch/x86/include/asm/asm-prototypes.h
new file mode 100644
index 000000000000..44b8762fa0c7
--- /dev/null
+++ b/arch/x86/include/asm/asm-prototypes.h
@@ -0,0 +1,16 @@
+#include <asm/ftrace.h>
+#include <asm/uaccess.h>
+#include <asm/string.h>
+#include <asm/page.h>
+#include <asm/checksum.h>
+
+#include <asm-generic/asm-prototypes.h>
+
+#include <asm/page.h>
+#include <asm/pgtable.h>
+#include <asm/special_insns.h>
+#include <asm/preempt.h>
+
+#ifndef CONFIG_X86_CMPXCHG64
+extern void cmpxchg8b_emu(void);
+#endif
diff --git a/include/asm-generic/asm-prototypes.h b/include/asm-generic/asm-prototypes.h
new file mode 100644
index 000000000000..df13637e4017
--- /dev/null
+++ b/include/asm-generic/asm-prototypes.h
@@ -0,0 +1,7 @@
+#include <linux/bitops.h>
+extern void *__memset(void *, int, __kernel_size_t);
+extern void *__memcpy(void *, const void *, __kernel_size_t);
+extern void *__memmove(void *, const void *, __kernel_size_t);
+extern void *memset(void *, int, __kernel_size_t);
+extern void *memcpy(void *, const void *, __kernel_size_t);
+extern void *memmove(void *, const void *, __kernel_size_t);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/asm: Make asm/alternative.h safe from assembly
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (173 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/kbuild: enable modversions for symbols exported from asm Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] EXPORT_SYMBOL() for asm Sasha Levin
                   ` (341 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f005f5d860e0231fe212cfda8c1a3148b99609f4 ]

asm/alternative.h isn't directly useful from assembly, but it
shouldn't break the build.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/e5b693fcef99fe6e80341c9e97a002fb23871e91.1461698311.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/alternative.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/arch/x86/include/asm/alternative.h b/arch/x86/include/asm/alternative.h
index 84932b5100f0..cb8fd023b23f 100644
--- a/arch/x86/include/asm/alternative.h
+++ b/arch/x86/include/asm/alternative.h
@@ -1,6 +1,8 @@
 #ifndef _ASM_X86_ALTERNATIVE_H
 #define _ASM_X86_ALTERNATIVE_H
 
+#ifndef __ASSEMBLY__
+
 #include <linux/types.h>
 #include <linux/stddef.h>
 #include <linux/stringify.h>
@@ -265,4 +267,6 @@ extern void *text_poke(void *addr, const void *opcode, size_t len);
 extern int poke_int3_handler(struct pt_regs *regs);
 extern void *text_poke_bp(void *addr, const void *opcode, size_t len, void *handler);
 
+#endif /* __ASSEMBLY__ */
+
 #endif /* _ASM_X86_ALTERNATIVE_H */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] kconfig.h: use __is_defined() to check if MODULE is defined
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (175 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] EXPORT_SYMBOL() for asm Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/retpoline/checksum32: Convert assembler indirect jumps Sasha Levin
                   ` (339 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Masahiro Yamada, Michal Marek, Sasha Levin

From: Masahiro Yamada <yamada.masahiro@socionext.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4f920843d248946545415c1bf6120942048708ed ]

The macro MODULE is not a config option, it is a per-file build
option.  So, config_enabled(MODULE) is not sensible.  (There is
another case in include/linux/export.h, where config_enabled() is
used against a non-config option.)

This commit renames some macros in include/linux/kconfig.h for the
use for non-config macros and replaces config_enabled(MODULE) with
__is_defined(MODULE).

I am keeping config_enabled() because it is still referenced from
some places, but I expect it would be deprecated in the future.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Michal Marek <mmarek@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/linux/kconfig.h | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/include/linux/kconfig.h b/include/linux/kconfig.h
index b33c7797eb57..a94b5bf57f51 100644
--- a/include/linux/kconfig.h
+++ b/include/linux/kconfig.h
@@ -17,10 +17,11 @@
  * the last step cherry picks the 2nd arg, we get a zero.
  */
 #define __ARG_PLACEHOLDER_1 0,
-#define config_enabled(cfg) _config_enabled(cfg)
-#define _config_enabled(value) __config_enabled(__ARG_PLACEHOLDER_##value)
-#define __config_enabled(arg1_or_junk) ___config_enabled(arg1_or_junk 1, 0)
-#define ___config_enabled(__ignored, val, ...) val
+#define config_enabled(cfg)		___is_defined(cfg)
+#define __is_defined(x)			___is_defined(x)
+#define ___is_defined(val)		____is_defined(__ARG_PLACEHOLDER_##val)
+#define ____is_defined(arg1_or_junk)	__take_second_arg(arg1_or_junk 1, 0)
+#define __take_second_arg(__ignored, val, ...) val
 
 /*
  * IS_BUILTIN(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y', 0
@@ -42,7 +43,7 @@
  * built-in code when CONFIG_FOO is set to 'm'.
  */
 #define IS_REACHABLE(option) (config_enabled(option) || \
-		 (config_enabled(option##_MODULE) && config_enabled(MODULE)))
+		 (config_enabled(option##_MODULE) && __is_defined(MODULE)))
 
 /*
  * IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm',
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] EXPORT_SYMBOL() for asm
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (174 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/asm: Make asm/alternative.h safe from assembly Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] kconfig.h: use __is_defined() to check if MODULE is defined Sasha Levin
                   ` (340 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Al Viro, Sasha Levin

From: Al Viro <viro@zeniv.linux.org.uk>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 22823ab419d8ed884195cfa75483fd3a99bb1462 ]

Add asm-usable variants of EXPORT_SYMBOL/EXPORT_SYMBOL_GPL.  This
commit just adds the default implementation; most of the architectures
can simply add export.h to asm/Kbuild and start using <asm/export.h>
from assembler.  The rest needs to have their <asm/export.h> define
everal macros and then explicitly include <asm-generic/export.h>

One area where the things might diverge from default is the alignment;
normally it's 8 bytes on 64bit targets and 4 on 32bit ones, both for
unsigned long and for struct kernel_symbol.  Unfortunately, amd64 and
m68k are unusual - m68k aligns to 2 bytes (for both) and amd64 aligns
struct kernel_symbol to 16 bytes.  For those we'll need asm/export.h to
override the constants used by generic version - KSYM_ALIGN and KCRC_ALIGN
for kernel_symbol and unsigned long resp.  And no, __alignof__ would not
do the trick - on amd64 __alignof__ of struct kernel_symbol is 8, not 16.

More serious source of unpleasantness is treatment of function
descriptors on architectures that have those.  Things like ppc64,
parisc, ia64, etc.  need more than the address of the first insn to
call an arbitrary function.  As the result, their representation of
pointers to functions is not the typical "address of the entry point" -
it's an address of a small static structure containing all the required
information (including the entry point, of course).  Sadly, the asm-side
conventions differ in what the function name refers to - entry point or
the function descriptor.  On ppc64 we do the latter;
	bar: .quad foo
is what void (*bar)(void) = foo; turns into and the rare places where
we need to explicitly work with the label of entry point are dealt with
as DOTSYM(foo).  For our purposes it's ideal - generic macros are usable.
However, parisc would have foo and P%foo used for label of entry point
and address of the function descriptor and
	bar: .long P%foo
woudl be used instead.	ia64 goes similar to parisc in that respect,
except that there it's @fptr(foo) rather than P%foo.  Such architectures
need to define KSYM_FUNC that would turn a function name into whatever
is needed to refer to function descriptor.

What's more, on such architectures we need to know whether we are exporting
a function or an object - in assembler we have to tell that explicitly, to
decide whether we want EXPORT_SYMBOL(foo) produce e.g.
	__ksymtab_foo: .quad foo
or
	__ksymtab_foo: .quad @fptr(foo)

For that reason we introduce EXPORT_DATA_SYMBOL{,_GPL}(), to be used for
exports of data objects.  On normal architectures it's the same thing
as EXPORT_SYMBOL{,_GPL}(), but on parisc-like ones they differ and the
right one needs to be used.  Most of the exports are functions, so we
keep EXPORT_SYMBOL for those...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/asm-generic/export.h | 94 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 94 insertions(+)
 create mode 100644 include/asm-generic/export.h

diff --git a/include/asm-generic/export.h b/include/asm-generic/export.h
new file mode 100644
index 000000000000..43199a049da5
--- /dev/null
+++ b/include/asm-generic/export.h
@@ -0,0 +1,94 @@
+#ifndef __ASM_GENERIC_EXPORT_H
+#define __ASM_GENERIC_EXPORT_H
+
+#ifndef KSYM_FUNC
+#define KSYM_FUNC(x) x
+#endif
+#ifdef CONFIG_64BIT
+#define __put .quad
+#ifndef KSYM_ALIGN
+#define KSYM_ALIGN 8
+#endif
+#ifndef KCRC_ALIGN
+#define KCRC_ALIGN 8
+#endif
+#else
+#define __put .long
+#ifndef KSYM_ALIGN
+#define KSYM_ALIGN 4
+#endif
+#ifndef KCRC_ALIGN
+#define KCRC_ALIGN 4
+#endif
+#endif
+
+#ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
+#define KSYM(name) _##name
+#else
+#define KSYM(name) name
+#endif
+
+/*
+ * note on .section use: @progbits vs %progbits nastiness doesn't matter,
+ * since we immediately emit into those sections anyway.
+ */
+.macro ___EXPORT_SYMBOL name,val,sec
+#ifdef CONFIG_MODULES
+	.globl KSYM(__ksymtab_\name)
+	.section ___ksymtab\sec+\name,"a"
+	.balign KSYM_ALIGN
+KSYM(__ksymtab_\name):
+	__put \val, KSYM(__kstrtab_\name)
+	.previous
+	.section __ksymtab_strings,"a"
+KSYM(__kstrtab_\name):
+#ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
+	.asciz "_\name"
+#else
+	.asciz "\name"
+#endif
+	.previous
+#ifdef CONFIG_MODVERSIONS
+	.section ___kcrctab\sec+\name,"a"
+	.balign KCRC_ALIGN
+KSYM(__kcrctab_\name):
+	__put KSYM(__crc_\name)
+	.weak KSYM(__crc_\name)
+	.previous
+#endif
+#endif
+.endm
+#undef __put
+
+#if defined(__KSYM_DEPS__)
+
+#define __EXPORT_SYMBOL(sym, val, sec)	=== __KSYM_##sym ===
+
+#elif defined(CONFIG_TRIM_UNUSED_KSYMS)
+
+#include <linux/kconfig.h>
+#include <generated/autoksyms.h>
+
+#define __EXPORT_SYMBOL(sym, val, sec)				\
+	__cond_export_sym(sym, val, sec, config_enabled(__KSYM_##sym))
+#define __cond_export_sym(sym, val, sec, conf)			\
+	___cond_export_sym(sym, val, sec, conf)
+#define ___cond_export_sym(sym, val, sec, enabled)		\
+	__cond_export_sym_##enabled(sym, val, sec)
+#define __cond_export_sym_1(sym, val, sec) ___EXPORT_SYMBOL sym, val, sec
+#define __cond_export_sym_0(sym, val, sec) /* nothing */
+
+#else
+#define __EXPORT_SYMBOL(sym, val, sec) ___EXPORT_SYMBOL sym, val, sec
+#endif
+
+#define EXPORT_SYMBOL(name)					\
+	__EXPORT_SYMBOL(name, KSYM_FUNC(KSYM(name)),)
+#define EXPORT_SYMBOL_GPL(name) 				\
+	__EXPORT_SYMBOL(name, KSYM_FUNC(KSYM(name)), _gpl)
+#define EXPORT_DATA_SYMBOL(name)				\
+	__EXPORT_SYMBOL(name, KSYM(name),)
+#define EXPORT_DATA_SYMBOL_GPL(name)				\
+	__EXPORT_SYMBOL(name, KSYM(name),_gpl)
+
+#endif
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] scsi: sg: disable SET_FORCE_LOW_DMA
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (177 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/retpoline/checksum32: Convert assembler indirect jumps Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] futex: Prevent overflow by strengthen input validation Sasha Levin
                   ` (337 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Hannes Reinecke, Hannes Reinecke, Martin K . Petersen, Sasha Levin

From: Hannes Reinecke <hare@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 745dfa0d8ec26b24f3304459ff6e9eacc5c8351b ]

The ioctl SET_FORCE_LOW_DMA has never worked since the initial git
check-in, and the respective setting is nowadays handled correctly. So
disable it entirely.

Signed-off-by: Hannes Reinecke <hare@suse.com>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Tested-by: Johannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/sg.c | 30 +++++++++---------------------
 include/scsi/sg.h |  1 -
 2 files changed, 9 insertions(+), 22 deletions(-)

diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index 102806a961da..2589a75f0810 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -160,7 +160,6 @@ typedef struct sg_fd {		/* holds the state of a file descriptor */
 	struct list_head rq_list; /* head of request list */
 	struct fasync_struct *async_qp;	/* used by asynchronous notification */
 	Sg_request req_arr[SG_MAX_QUEUE];	/* used as singly-linked list */
-	char low_dma;		/* as in parent but possibly overridden to 1 */
 	char force_packid;	/* 1 -> pack_id input to read(), 0 -> ignored */
 	char cmd_q;		/* 1 -> allow command queuing, 0 -> don't */
 	unsigned char next_cmd_len; /* 0: automatic, >0: use on next write() */
@@ -926,24 +925,14 @@ sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg)
 				/* strange ..., for backward compatibility */
 		return sfp->timeout_user;
 	case SG_SET_FORCE_LOW_DMA:
-		result = get_user(val, ip);
-		if (result)
-			return result;
-		if (val) {
-			sfp->low_dma = 1;
-			if ((0 == sfp->low_dma) && !sfp->res_in_use) {
-				val = (int) sfp->reserve.bufflen;
-				sg_remove_scat(sfp, &sfp->reserve);
-				sg_build_reserve(sfp, val);
-			}
-		} else {
-			if (atomic_read(&sdp->detaching))
-				return -ENODEV;
-			sfp->low_dma = sdp->device->host->unchecked_isa_dma;
-		}
+		/*
+		 * N.B. This ioctl never worked properly, but failed to
+		 * return an error value. So returning '0' to keep compability
+		 * with legacy applications.
+		 */
 		return 0;
 	case SG_GET_LOW_DMA:
-		return put_user((int) sfp->low_dma, ip);
+		return put_user((int) sdp->device->host->unchecked_isa_dma, ip);
 	case SG_GET_SCSI_ID:
 		if (!access_ok(VERIFY_WRITE, p, sizeof (sg_scsi_id_t)))
 			return -EFAULT;
@@ -1864,6 +1853,7 @@ sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size)
 	int sg_tablesize = sfp->parentdp->sg_tablesize;
 	int blk_size = buff_size, order;
 	gfp_t gfp_mask = GFP_ATOMIC | __GFP_COMP | __GFP_NOWARN;
+	struct sg_device *sdp = sfp->parentdp;
 
 	if (blk_size < 0)
 		return -EFAULT;
@@ -1889,7 +1879,7 @@ sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size)
 			scatter_elem_sz_prev = num;
 	}
 
-	if (sfp->low_dma)
+	if (sdp->device->host->unchecked_isa_dma)
 		gfp_mask |= GFP_DMA;
 
 	if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
@@ -2152,8 +2142,6 @@ sg_add_sfp(Sg_device * sdp)
 	sfp->timeout = SG_DEFAULT_TIMEOUT;
 	sfp->timeout_user = SG_DEFAULT_TIMEOUT_USER;
 	sfp->force_packid = SG_DEF_FORCE_PACK_ID;
-	sfp->low_dma = (SG_DEF_FORCE_LOW_DMA == 0) ?
-	    sdp->device->host->unchecked_isa_dma : 1;
 	sfp->cmd_q = SG_DEF_COMMAND_Q;
 	sfp->keep_orphan = SG_DEF_KEEP_ORPHAN;
 	sfp->parentdp = sdp;
@@ -2612,7 +2600,7 @@ static void sg_proc_debug_helper(struct seq_file *s, Sg_device * sdp)
 			   jiffies_to_msecs(fp->timeout),
 			   fp->reserve.bufflen,
 			   (int) fp->reserve.k_use_sg,
-			   (int) fp->low_dma);
+			   (int) sdp->device->host->unchecked_isa_dma);
 		seq_printf(s, "   cmd_q=%d f_packid=%d k_orphan=%d closed=0\n",
 			   (int) fp->cmd_q, (int) fp->force_packid,
 			   (int) fp->keep_orphan);
diff --git a/include/scsi/sg.h b/include/scsi/sg.h
index 3afec7032448..20bc71c3e0b8 100644
--- a/include/scsi/sg.h
+++ b/include/scsi/sg.h
@@ -197,7 +197,6 @@ typedef struct sg_req_info { /* used by SG_GET_REQUEST_TABLE ioctl() */
 #define SG_DEFAULT_RETRIES 0
 
 /* Defaults, commented if they differ from original sg driver */
-#define SG_DEF_FORCE_LOW_DMA 0  /* was 1 -> memory below 16MB on i386 */
 #define SG_DEF_FORCE_PACK_ID 0
 #define SG_DEF_KEEP_ORPHAN 0
 #define SG_DEF_RESERVED_SIZE SG_SCATTER_SZ /* load time option */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/retpoline/checksum32: Convert assembler indirect jumps
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (176 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] kconfig.h: use __is_defined() to check if MODULE is defined Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] scsi: sg: disable SET_FORCE_LOW_DMA Sasha Levin
                   ` (338 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: David Woodhouse, Thomas Gleixner, Sasha Levin

From: David Woodhouse <dwmw@amazon.co.uk>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5096732f6f695001fa2d6f1335a2680b37912c69 ]

Convert all indirect jumps in 32bit checksum assembler code to use
non-speculative sequences when CONFIG_RETPOLINE is enabled.

Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Arjan van de Ven <arjan@linux.intel.com>
Acked-by: Ingo Molnar <mingo@kernel.org>
Cc: gnomes@lxorguk.ukuu.org.uk
Cc: Rik van Riel <riel@redhat.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: thomas.lendacky@amd.com
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Jiri Kosina <jikos@kernel.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Kees Cook <keescook@google.com>
Cc: Tim Chen <tim.c.chen@linux.intel.com>
Cc: Greg Kroah-Hartman <gregkh@linux-foundation.org>
Cc: Paul Turner <pjt@google.com>
Link: https://lkml.kernel.org/r/1515707194-20531-11-git-send-email-dwmw@amazon.co.uk
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/lib/checksum_32.S | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/arch/x86/lib/checksum_32.S b/arch/x86/lib/checksum_32.S
index 9bc944a91274..b7518368492a 100644
--- a/arch/x86/lib/checksum_32.S
+++ b/arch/x86/lib/checksum_32.S
@@ -29,7 +29,8 @@
 #include <asm/dwarf2.h>
 #include <asm/errno.h>
 #include <asm/asm.h>
-				
+#include <asm/nospec-branch.h>
+
 /*
  * computes a partial checksum, e.g. for TCP/UDP fragments
  */
@@ -159,7 +160,7 @@ ENTRY(csum_partial)
 	negl %ebx
 	lea 45f(%ebx,%ebx,2), %ebx
 	testl %esi, %esi
-	jmp *%ebx
+	JMP_NOSPEC %ebx
 
 	# Handle 2-byte-aligned regions
 20:	addw (%esi), %ax
@@ -446,7 +447,7 @@ ENTRY(csum_partial_copy_generic)
 	andl $-32,%edx
 	lea 3f(%ebx,%ebx), %ebx
 	testl %esi, %esi 
-	jmp *%ebx
+	JMP_NOSPEC %ebx
 1:	addl $64,%esi
 	addl $64,%edi 
 	SRC(movb -32(%edx),%bl)	; SRC(movb (%edx),%bl)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] futex: Prevent overflow by strengthen input validation
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (178 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] scsi: sg: disable SET_FORCE_LOW_DMA Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ALSA: pcm: Remove yet superfluous WARN_ON() Sasha Levin
                   ` (336 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Li Jinyue, Thomas Gleixner, Sasha Levin

From: Li Jinyue <lijinyue@huawei.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fbe0e839d1e22d88810f3ee3e2f1479be4c0aa4a ]

UBSAN reports signed integer overflow in kernel/futex.c:

 UBSAN: Undefined behaviour in kernel/futex.c:2041:18
 signed integer overflow:
 0 - -2147483648 cannot be represented in type 'int'

Add a sanity check to catch negative values of nr_wake and nr_requeue.

Signed-off-by: Li Jinyue <lijinyue@huawei.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: peterz@infradead.org
Cc: dvhart@infradead.org
Cc: stable@vger.kernel.org
Link: https://lkml.kernel.org/r/1513242294-31786-1-git-send-email-lijinyue@huawei.com
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/futex.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/kernel/futex.c b/kernel/futex.c
index 959cc4fc6de5..4195616b27d9 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -1514,6 +1514,9 @@ static int futex_requeue(u32 __user *uaddr1, unsigned int flags,
 	struct futex_hash_bucket *hb1, *hb2;
 	struct futex_q *this, *next;
 
+	if (nr_wake < 0 || nr_requeue < 0)
+		return -EINVAL;
+
 	if (requeue_pi) {
 		/*
 		 * Requeue PI only works on two distinct uaddrs. This
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: pcm: Remove yet superfluous WARN_ON()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (179 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] futex: Prevent overflow by strengthen input validation Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ALSA: hda - Apply headphone noise quirk for another Dell XPS 13 variant Sasha Levin
                   ` (335 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Takashi Iwai, Sasha Levin

From: Takashi Iwai <tiwai@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 23b19b7b50fe1867da8d431eea9cd3e4b6328c2c ]

muldiv32() contains a snd_BUG_ON() (which is morphed as WARN_ON() with
debug option) for checking the case of 0 / 0.  This would be helpful
if this happens only as a logical error; however, since the hw refine
is performed with any data set provided by user, the inconsistent
values that can trigger such a condition might be passed easily.
Actually, syzbot caught this by passing some zero'ed old hw_params
ioctl.

So, having snd_BUG_ON() there is simply superfluous and rather
harmful to give unnecessary confusions.  Let's get rid of it.

Reported-by: syzbot+7e6ee55011deeebce15d@syzkaller.appspotmail.com
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/core/pcm_lib.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
index 4ebee7e71c85..169df070c22b 100644
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c
@@ -578,7 +578,6 @@ static inline unsigned int muldiv32(unsigned int a, unsigned int b,
 {
 	u_int64_t n = (u_int64_t) a * b;
 	if (c == 0) {
-		snd_BUG_ON(!n);
 		*r = 0;
 		return UINT_MAX;
 	}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: hda - Apply headphone noise quirk for another Dell XPS 13 variant
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (180 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ALSA: pcm: Remove yet superfluous WARN_ON() Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] af_key: fix buffer overread in verify_address_len() Sasha Levin
                   ` (334 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Takashi Iwai, Sasha Levin

From: Takashi Iwai <tiwai@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e4c9fd10eb21376f44723c40ad12395089251c28 ]

There is another Dell XPS 13 variant (SSID 1028:082a) that requires
the existing fixup for reducing the headphone noise.
This patch adds the quirk entry for that.

BugLink: http://lkml.kernel.org/r/CAHXyb9ZCZJzVisuBARa+UORcjRERV8yokez=DP1_5O5isTz0ZA@mail.gmail.com
Reported-and-tested-by: Francisco G. <frangio.1@gmail.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/pci/hda/patch_realtek.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index f246bd0426ee..191cba28670c 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -5493,6 +5493,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x1028, 0x075b, "Dell XPS 13 9360", ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE),
 	SND_PCI_QUIRK(0x1028, 0x075d, "Dell AIO", ALC298_FIXUP_SPK_VOLUME),
 	SND_PCI_QUIRK(0x1028, 0x0798, "Dell Inspiron 17 7000 Gaming", ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER),
+	SND_PCI_QUIRK(0x1028, 0x082a, "Dell XPS 13 9360", ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE),
 	SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] af_key: fix buffer overread in verify_address_len()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (181 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ALSA: hda - Apply headphone noise quirk for another Dell XPS 13 variant Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ALSA: hda - Apply the existing quirk to iMac 14,1 Sasha Levin
                   ` (333 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Biggers, Steffen Klassert, Sasha Levin

From: Eric Biggers <ebiggers@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 06b335cb51af018d5feeff5dd4fd53847ddb675a ]

If a message sent to a PF_KEY socket ended with one of the extensions
that takes a 'struct sadb_address' but there were not enough bytes
remaining in the message for the ->sa_family member of the 'struct
sockaddr' which is supposed to follow, then verify_address_len() read
past the end of the message, into uninitialized memory.  Fix it by
returning -EINVAL in this case.

This bug was found using syzkaller with KMSAN.

Reproducer:

	#include <linux/pfkeyv2.h>
	#include <sys/socket.h>
	#include <unistd.h>

	int main()
	{
		int sock = socket(PF_KEY, SOCK_RAW, PF_KEY_V2);
		char buf[24] = { 0 };
		struct sadb_msg *msg = (void *)buf;
		struct sadb_address *addr = (void *)(msg + 1);

		msg->sadb_msg_version = PF_KEY_V2;
		msg->sadb_msg_type = SADB_DELETE;
		msg->sadb_msg_len = 3;
		addr->sadb_address_len = 1;
		addr->sadb_address_exttype = SADB_EXT_ADDRESS_SRC;

		write(sock, buf, 24);
	}

Reported-by: Alexander Potapenko <glider@google.com>
Cc: stable@vger.kernel.org
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/key/af_key.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/net/key/af_key.c b/net/key/af_key.c
index 39c78c9e1c68..1dc7b8894135 100644
--- a/net/key/af_key.c
+++ b/net/key/af_key.c
@@ -401,6 +401,11 @@ static int verify_address_len(const void *p)
 #endif
 	int len;
 
+	if (sp->sadb_address_len <
+	    DIV_ROUND_UP(sizeof(*sp) + offsetofend(typeof(*addr), sa_family),
+			 sizeof(uint64_t)))
+		return -EINVAL;
+
 	switch (addr->sa_family) {
 	case AF_INET:
 		len = DIV_ROUND_UP(sizeof(*sp) + sizeof(*sin), sizeof(uint64_t));
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: hda - Apply the existing quirk to iMac 14,1
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (182 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] af_key: fix buffer overread in verify_address_len() Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] module: Add retpoline tag to VERMAGIC Sasha Levin
                   ` (332 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Takashi Iwai, Sasha Levin

From: Takashi Iwai <tiwai@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 031f335cda879450095873003abb03ae8ed3b74a ]

iMac 14,1 requires the same quirk as iMac 12,2, using GPIO 2 and 3 for
headphone and speaker output amps.  Add the codec SSID quirk entry
(106b:0600) accordingly.

BugLink: http://lkml.kernel.org/r/CAEw6Zyteav09VGHRfD5QwsfuWv5a43r0tFBNbfcHXoNrxVz7ew@mail.gmail.com
Reported-by: Freaky <freaky2000@gmail.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/pci/hda/patch_cirrus.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
index aeb054ca9ed9..b3d222d96a1b 100644
--- a/sound/pci/hda/patch_cirrus.c
+++ b/sound/pci/hda/patch_cirrus.c
@@ -394,6 +394,7 @@ static const struct snd_pci_quirk cs420x_fixup_tbl[] = {
 	/*SND_PCI_QUIRK(0x8086, 0x7270, "IMac 27 Inch", CS420X_IMAC27),*/
 
 	/* codec SSID */
+	SND_PCI_QUIRK(0x106b, 0x0600, "iMac 14,1", CS420X_IMAC27_122),
 	SND_PCI_QUIRK(0x106b, 0x1c00, "MacBookPro 8,1", CS420X_MBP81),
 	SND_PCI_QUIRK(0x106b, 0x2000, "iMac 12,2", CS420X_IMAC27_122),
 	SND_PCI_QUIRK(0x106b, 0x2800, "MacBookPro 10,1", CS420X_MBP101),
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] af_key: fix buffer overread in parse_exthdrs()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (184 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] module: Add retpoline tag to VERMAGIC Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] pipe: avoid round_pipe_size() nr_pages overflow on 32-bit Sasha Levin
                   ` (330 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Biggers, Steffen Klassert, Sasha Levin

From: Eric Biggers <ebiggers@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4e765b4972af7b07adcb1feb16e7a525ce1f6b28 ]

If a message sent to a PF_KEY socket ended with an incomplete extension
header (fewer than 4 bytes remaining), then parse_exthdrs() read past
the end of the message, into uninitialized memory.  Fix it by returning
-EINVAL in this case.

Reproducer:

	#include <linux/pfkeyv2.h>
	#include <sys/socket.h>
	#include <unistd.h>

	int main()
	{
		int sock = socket(PF_KEY, SOCK_RAW, PF_KEY_V2);
		char buf[17] = { 0 };
		struct sadb_msg *msg = (void *)buf;

		msg->sadb_msg_version = PF_KEY_V2;
		msg->sadb_msg_type = SADB_DELETE;
		msg->sadb_msg_len = 2;

		write(sock, buf, 17);
	}

Cc: stable@vger.kernel.org
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/key/af_key.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/net/key/af_key.c b/net/key/af_key.c
index 1dc7b8894135..354c43a1c43d 100644
--- a/net/key/af_key.c
+++ b/net/key/af_key.c
@@ -516,6 +516,9 @@ static int parse_exthdrs(struct sk_buff *skb, const struct sadb_msg *hdr, void *
 		uint16_t ext_type;
 		int ext_len;
 
+		if (len < sizeof(*ehdr))
+			return -EINVAL;
+
 		ext_len  = ehdr->sadb_ext_len;
 		ext_len *= sizeof(uint64_t);
 		ext_type = ehdr->sadb_ext_type;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] module: Add retpoline tag to VERMAGIC
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (183 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ALSA: hda - Apply the existing quirk to iMac 14,1 Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] af_key: fix buffer overread in parse_exthdrs() Sasha Levin
                   ` (331 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andi Kleen, Thomas Gleixner, Sasha Levin

From: Andi Kleen <ak@linux.intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6cfb521ac0d5b97470883ff9b7facae264b7ab12 ]

Add a marker for retpoline to the module VERMAGIC. This catches the case
when a non RETPOLINE compiled module gets loaded into a retpoline kernel,
making it insecure.

It doesn't handle the case when retpoline has been runtime disabled.  Even
in this case the match of the retcompile status will be enforced.  This
implies that even with retpoline run time disabled all modules loaded need
to be recompiled.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: David Woodhouse <dwmw@amazon.co.uk>
Cc: rusty@rustcorp.com.au
Cc: arjan.van.de.ven@intel.com
Cc: jeyu@kernel.org
Cc: torvalds@linux-foundation.org
Link: https://lkml.kernel.org/r/20180116205228.4890-1-andi@firstfloor.org
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/linux/vermagic.h | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/include/linux/vermagic.h b/include/linux/vermagic.h
index 6f8fbcf10dfb..a3d04934aa96 100644
--- a/include/linux/vermagic.h
+++ b/include/linux/vermagic.h
@@ -24,10 +24,16 @@
 #ifndef MODULE_ARCH_VERMAGIC
 #define MODULE_ARCH_VERMAGIC ""
 #endif
+#ifdef RETPOLINE
+#define MODULE_VERMAGIC_RETPOLINE "retpoline "
+#else
+#define MODULE_VERMAGIC_RETPOLINE ""
+#endif
 
 #define VERMAGIC_STRING 						\
 	UTS_RELEASE " "							\
 	MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT 			\
 	MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS	\
-	MODULE_ARCH_VERMAGIC
+	MODULE_ARCH_VERMAGIC						\
+	MODULE_VERMAGIC_RETPOLINE
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] pipe: avoid round_pipe_size() nr_pages overflow on 32-bit
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (185 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] af_key: fix buffer overread in parse_exthdrs() Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] Input: 88pm860x-ts - fix child-node lookup Sasha Levin
                   ` (329 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Joe Lawrence, Andrew Morton, Linus Torvalds, Sasha Levin

From: Joe Lawrence <joe.lawrence@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d3f14c485867cfb2e0c48aa88c41d0ef4bf5209c ]

round_pipe_size() contains a right-bit-shift expression which may
overflow, which would cause undefined results in a subsequent
roundup_pow_of_two() call.

  static inline unsigned int round_pipe_size(unsigned int size)
  {
          unsigned long nr_pages;

          nr_pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
          return roundup_pow_of_two(nr_pages) << PAGE_SHIFT;
  }

PAGE_SIZE is defined as (1UL << PAGE_SHIFT), so:
  - 4 bytes wide on 32-bit (0 to 0xffffffff)
  - 8 bytes wide on 64-bit (0 to 0xffffffffffffffff)

That means that 32-bit round_pipe_size(), nr_pages may overflow to 0:

  size=0x00000000    nr_pages=0x0
  size=0x00000001    nr_pages=0x1
  size=0xfffff000    nr_pages=0xfffff
  size=0xfffff001    nr_pages=0x0         << !
  size=0xffffffff    nr_pages=0x0         << !

This is bad because roundup_pow_of_two(n) is undefined when n == 0!

64-bit is not a problem as the unsigned int size is 4 bytes wide
(similar to 32-bit) and the larger, 8 byte wide unsigned long, is
sufficient to handle the largest value of the bit shift expression:

  size=0xffffffff    nr_pages=100000

Modify round_pipe_size() to return 0 if n == 0 and updates its callers to
handle accordingly.

Link: http://lkml.kernel.org/r/1507658689-11669-3-git-send-email-joe.lawrence@redhat.com
Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>
Reported-by: Mikulas Patocka <mpatocka@redhat.com>
Reviewed-by: Mikulas Patocka <mpatocka@redhat.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Michael Kerrisk <mtk.manpages@gmail.com>
Cc: Randy Dunlap <rdunlap@infradead.org>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/pipe.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/fs/pipe.c b/fs/pipe.c
index 5916c19dbb02..dbea65d88398 100644
--- a/fs/pipe.c
+++ b/fs/pipe.c
@@ -999,6 +999,9 @@ static long pipe_set_size(struct pipe_inode_info *pipe, unsigned long nr_pages)
 {
 	struct pipe_buffer *bufs;
 
+	if (!nr_pages)
+		return -EINVAL;
+
 	/*
 	 * We can shrink the pipe, if arg >= pipe->nrbufs. Since we don't
 	 * expect a lot of shrink+grow operations, just free and allocate
@@ -1043,13 +1046,19 @@ static long pipe_set_size(struct pipe_inode_info *pipe, unsigned long nr_pages)
 
 /*
  * Currently we rely on the pipe array holding a power-of-2 number
- * of pages.
+ * of pages. Returns 0 on error.
  */
 static inline unsigned int round_pipe_size(unsigned int size)
 {
 	unsigned long nr_pages;
 
+	if (size < pipe_min_size)
+		size = pipe_min_size;
+
 	nr_pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
+	if (nr_pages == 0)
+		return 0;
+
 	return roundup_pow_of_two(nr_pages) << PAGE_SHIFT;
 }
 
@@ -1060,13 +1069,18 @@ static inline unsigned int round_pipe_size(unsigned int size)
 int pipe_proc_fn(struct ctl_table *table, int write, void __user *buf,
 		 size_t *lenp, loff_t *ppos)
 {
+	unsigned int rounded_pipe_max_size;
 	int ret;
 
 	ret = proc_dointvec_minmax(table, write, buf, lenp, ppos);
 	if (ret < 0 || !write)
 		return ret;
 
-	pipe_max_size = round_pipe_size(pipe_max_size);
+	rounded_pipe_max_size = round_pipe_size(pipe_max_size);
+	if (rounded_pipe_max_size == 0)
+		return -EINVAL;
+
+	pipe_max_size = rounded_pipe_max_size;
 	return ret;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Input: 88pm860x-ts - fix child-node lookup
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (186 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] pipe: avoid round_pipe_size() nr_pages overflow on 32-bit Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] Input: twl6040-vibra " Sasha Levin
                   ` (328 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Johan Hovold, Dmitry Torokhov, Sasha Levin

From: Johan Hovold <johan@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 906bf7daa0618d0ef39f4872ca42218c29a3631f ]

Fix child node-lookup during probe, which ended up searching the whole
device tree depth-first starting at parent rather than just matching on
its children.

To make things worse, the parent node was prematurely freed, while the
child node was leaked.

Fixes: 2e57d56747e6 ("mfd: 88pm860x: Device tree support")
Cc: stable <stable@vger.kernel.org>     # 3.7
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/input/touchscreen/88pm860x-ts.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/input/touchscreen/88pm860x-ts.c b/drivers/input/touchscreen/88pm860x-ts.c
index 251ff2aa0633..7a0dbce4dae9 100644
--- a/drivers/input/touchscreen/88pm860x-ts.c
+++ b/drivers/input/touchscreen/88pm860x-ts.c
@@ -126,7 +126,7 @@ static int pm860x_touch_dt_init(struct platform_device *pdev,
 	int data, n, ret;
 	if (!np)
 		return -ENODEV;
-	np = of_find_node_by_name(np, "touch");
+	np = of_get_child_by_name(np, "touch");
 	if (!np) {
 		dev_err(&pdev->dev, "Can't find touch node\n");
 		return -EINVAL;
@@ -144,13 +144,13 @@ static int pm860x_touch_dt_init(struct platform_device *pdev,
 	if (data) {
 		ret = pm860x_reg_write(i2c, PM8607_GPADC_MISC1, data);
 		if (ret < 0)
-			return -EINVAL;
+			goto err_put_node;
 	}
 	/* set tsi prebias time */
 	if (!of_property_read_u32(np, "marvell,88pm860x-tsi-prebias", &data)) {
 		ret = pm860x_reg_write(i2c, PM8607_TSI_PREBIAS, data);
 		if (ret < 0)
-			return -EINVAL;
+			goto err_put_node;
 	}
 	/* set prebias & prechg time of pen detect */
 	data = 0;
@@ -161,10 +161,18 @@ static int pm860x_touch_dt_init(struct platform_device *pdev,
 	if (data) {
 		ret = pm860x_reg_write(i2c, PM8607_PD_PREBIAS, data);
 		if (ret < 0)
-			return -EINVAL;
+			goto err_put_node;
 	}
 	of_property_read_u32(np, "marvell,88pm860x-resistor-X", res_x);
+
+	of_node_put(np);
+
 	return 0;
+
+err_put_node:
+	of_node_put(np);
+
+	return -EINVAL;
 }
 #else
 #define pm860x_touch_dt_init(x, y, z)	(-1)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Input: twl6040-vibra - fix child-node lookup
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (187 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] Input: 88pm860x-ts - fix child-node lookup Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] Input: twl6040-vibra - fix DT node memory management Sasha Levin
                   ` (327 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Johan Hovold, Dmitry Torokhov, Sasha Levin

From: Johan Hovold <johan@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit dcaf12a8b0bbdbfcfa2be8dff2c4948d9844b4ad ]

Fix child-node lookup during probe, which ended up searching the whole
device tree depth-first starting at parent rather than just matching on
its children.

Later sanity checks on node properties (which would likely be missing)
should prevent this from causing much trouble however, especially as the
original premature free of the parent node has already been fixed
separately (but that "fix" was apparently never backported to stable).

Fixes: e7ec014a47e4 ("Input: twl6040-vibra - update for device tree support")
Fixes: c52c545ead97 ("Input: twl6040-vibra - fix DT node memory management")
Cc: stable <stable@vger.kernel.org>     # 3.6
Signed-off-by: Johan Hovold <johan@kernel.org>
Acked-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Tested-by: H. Nikolaus Schaller <hns@goldelico.com> (on Pyra OMAP5 hardware)
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/input/misc/twl6040-vibra.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/input/misc/twl6040-vibra.c b/drivers/input/misc/twl6040-vibra.c
index 93e216a17008..6caeb1a2670c 100644
--- a/drivers/input/misc/twl6040-vibra.c
+++ b/drivers/input/misc/twl6040-vibra.c
@@ -262,8 +262,7 @@ static int twl6040_vibra_probe(struct platform_device *pdev)
 	int vddvibr_uV = 0;
 	int error;
 
-	of_node_get(twl6040_core_dev->of_node);
-	twl6040_core_node = of_find_node_by_name(twl6040_core_dev->of_node,
+	twl6040_core_node = of_get_child_by_name(twl6040_core_dev->of_node,
 						 "vibra");
 	if (!twl6040_core_node) {
 		dev_err(&pdev->dev, "parent of node is missing?\n");
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Input: twl6040-vibra - fix DT node memory management
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (188 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] Input: twl6040-vibra " Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] tracing: Fix converting enum's from the map in trace_event_eval_update() Sasha Levin
                   ` (326 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: H. Nikolaus Schaller, Dmitry Torokhov, Sasha Levin

From: "H. Nikolaus Schaller" <hns@goldelico.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c52c545ead97fcc2f4f8ea38f1ae3c23211e09a8 ]

commit e7ec014a47e4 ("Input: twl6040-vibra - update for device tree support")

made the separate vibra DT node to a subnode of the twl6040.

It now calls of_find_node_by_name() to locate the "vibra" subnode.
This function has a side effect to call of_node_put on() for the twl6040
parent node passed in as a parameter. This causes trouble later on.

Solution: we must call of_node_get() before of_find_node_by_name()

Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/input/misc/twl6040-vibra.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/input/misc/twl6040-vibra.c b/drivers/input/misc/twl6040-vibra.c
index 0e0d094df2e6..93e216a17008 100644
--- a/drivers/input/misc/twl6040-vibra.c
+++ b/drivers/input/misc/twl6040-vibra.c
@@ -262,6 +262,7 @@ static int twl6040_vibra_probe(struct platform_device *pdev)
 	int vddvibr_uV = 0;
 	int error;
 
+	of_node_get(twl6040_core_dev->of_node);
 	twl6040_core_node = of_find_node_by_name(twl6040_core_dev->of_node,
 						 "vibra");
 	if (!twl6040_core_node) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] tracing: Fix converting enum's from the map in trace_event_eval_update()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (189 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] Input: twl6040-vibra - fix DT node memory management Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ARM: dts: kirkwood: fix pin-muxing of MPP7 on OpenBlocks A7 Sasha Levin
                   ` (325 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Steven Rostedt (VMware), Sasha Levin

From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1ebe1eaf2f02784921759992ae1fde1a9bec8fd0 ]

Since enums do not get converted by the TRACE_EVENT macro into their values,
the event format displaces the enum name and not the value. This breaks
tools like perf and trace-cmd that need to interpret the raw binary data. To
solve this, an enum map was created to convert these enums into their actual
numbers on boot up. This is done by TRACE_EVENTS() adding a
TRACE_DEFINE_ENUM() macro.

Some enums were not being converted. This was caused by an optization that
had a bug in it.

All calls get checked against this enum map to see if it should be converted
or not, and it compares the call's system to the system that the enum map
was created under. If they match, then they call is processed.

To cut down on the number of iterations needed to find the maps with a
matching system, since calls and maps are grouped by system, when a match is
made, the index into the map array is saved, so that the next call, if it
belongs to the same system as the previous call, could start right at that
array index and not have to scan all the previous arrays.

The problem was, the saved index was used as the variable to know if this is
a call in a new system or not. If the index was zero, it was assumed that
the call is in a new system and would keep incrementing the saved index
until it found a matching system. The issue arises when the first matching
system was at index zero. The next map, if it belonged to the same system,
would then think it was the first match and increment the index to one. If
the next call belong to the same system, it would begin its search of the
maps off by one, and miss the first enum that should be converted. This left
a single enum not converted properly.

Also add a comment to describe exactly what that index was for. It took me a
bit too long to figure out what I was thinking when debugging this issue.

Link: http://lkml.kernel.org/r/717BE572-2070-4C1E-9902-9F2E0FEDA4F8@oracle.com

Cc: stable@vger.kernel.org
Fixes: 0c564a538aa93 ("tracing: Add TRACE_DEFINE_ENUM() macro to map enums to their values")
Reported-by: Chuck Lever <chuck.lever@oracle.com>
Teste-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/trace/trace_events.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 6459f77e2c72..d19406850b0d 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -1819,6 +1819,7 @@ void trace_event_enum_update(struct trace_enum_map **map, int len)
 {
 	struct ftrace_event_call *call, *p;
 	const char *last_system = NULL;
+	bool first = false;
 	int last_i;
 	int i;
 
@@ -1826,15 +1827,28 @@ void trace_event_enum_update(struct trace_enum_map **map, int len)
 	list_for_each_entry_safe(call, p, &ftrace_events, list) {
 		/* events are usually grouped together with systems */
 		if (!last_system || call->class->system != last_system) {
+			first = true;
 			last_i = 0;
 			last_system = call->class->system;
 		}
 
+		/*
+		 * Since calls are grouped by systems, the likelyhood that the
+		 * next call in the iteration belongs to the same system as the
+		 * previous call is high. As an optimization, we skip seaching
+		 * for a map[] that matches the call's system if the last call
+		 * was from the same system. That's what last_i is for. If the
+		 * call has the same system as the previous call, then last_i
+		 * will be the index of the first map[] that has a matching
+		 * system.
+		 */
 		for (i = last_i; i < len; i++) {
 			if (call->class->system == map[i]->system) {
 				/* Save the first system if need be */
-				if (!last_i)
+				if (first) {
 					last_i = i;
+					first = false;
+				}
 				update_event_printk(call, map[i]);
 			}
 		}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ARM: dts: kirkwood: fix pin-muxing of MPP7 on OpenBlocks A7
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (190 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] tracing: Fix converting enum's from the map in trace_event_eval_update() Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] can: peak: fix potential bug in packet fragmentation Sasha Levin
                   ` (324 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Thomas Petazzoni, Gregory CLEMENT, Sasha Levin

From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 56aeb07c914a616ab84357d34f8414a69b140cdf ]

MPP7 is currently muxed as "gpio", but this function doesn't exist for
MPP7, only "gpo" is available. This causes the following error:

kirkwood-pinctrl f1010000.pin-controller: unsupported function gpio on pin mpp7
pinctrl core: failed to register map default (6): invalid type given
kirkwood-pinctrl f1010000.pin-controller: error claiming hogs: -22
kirkwood-pinctrl f1010000.pin-controller: could not claim hogs: -22
kirkwood-pinctrl f1010000.pin-controller: unable to register pinctrl driver
kirkwood-pinctrl: probe of f1010000.pin-controller failed with error -22

So the pinctrl driver is not probed, all device drivers (including the
UART driver) do a -EPROBE_DEFER, and therefore the system doesn't
really boot (well, it boots, but with no UART, and no devices that
require pin-muxing).

Back when the Device Tree file for this board was introduced, the
definition was already wrong. The pinctrl driver also always described
as "gpo" this function for MPP7. However, between Linux 4.10 and 4.11,
a hog pin failing to be muxed was turned from a simple warning to a
hard error that caused the entire pinctrl driver probe to bail
out. This is probably the result of commit 6118714275f0a ("pinctrl:
core: Fix pinctrl_register_and_init() with pinctrl_enable()").

This commit fixes the Device Tree to use the proper "gpo" function for
MPP7, which fixes the boot of OpenBlocks A7, which was broken since
Linux 4.11.

Fixes: f24b56cbcd9d ("ARM: kirkwood: add support for OpenBlocks A7 platform")
Cc: <stable@vger.kernel.org>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/boot/dts/kirkwood-openblocks_a7.dts | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/arch/arm/boot/dts/kirkwood-openblocks_a7.dts b/arch/arm/boot/dts/kirkwood-openblocks_a7.dts
index d5e3bc518968..d57f48543f76 100644
--- a/arch/arm/boot/dts/kirkwood-openblocks_a7.dts
+++ b/arch/arm/boot/dts/kirkwood-openblocks_a7.dts
@@ -53,7 +53,8 @@
 		};
 
 		pinctrl: pin-controller@10000 {
-			pinctrl-0 = <&pmx_dip_switches &pmx_gpio_header>;
+			pinctrl-0 = <&pmx_dip_switches &pmx_gpio_header
+				     &pmx_gpio_header_gpo>;
 			pinctrl-names = "default";
 
 			pmx_uart0: pmx-uart0 {
@@ -85,11 +86,16 @@
 			 * ground.
 			 */
 			pmx_gpio_header: pmx-gpio-header {
-				marvell,pins = "mpp17", "mpp7", "mpp29", "mpp28",
+				marvell,pins = "mpp17", "mpp29", "mpp28",
 					       "mpp35", "mpp34", "mpp40";
 				marvell,function = "gpio";
 			};
 
+			pmx_gpio_header_gpo: pxm-gpio-header-gpo {
+				marvell,pins = "mpp7";
+				marvell,function = "gpo";
+			};
+
 			pmx_gpio_init: pmx-init {
 				marvell,pins = "mpp38";
 				marvell,function = "gpio";
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] can: peak: fix potential bug in packet fragmentation
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (191 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ARM: dts: kirkwood: fix pin-muxing of MPP7 on OpenBlocks A7 Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] libata: apply MAX_SEC_1024 to all LITEON EP1 series devices Sasha Levin
                   ` (323 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Stephane Grosjean, Marc Kleine-Budde, Sasha Levin

From: Stephane Grosjean <s.grosjean@peak-system.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d8a243af1a68395e07ac85384a2740d4134c67f4 ]

In some rare conditions when running one PEAK USB-FD interface over
a non high-speed USB controller, one useless USB fragment might be sent.
This patch fixes the way a USB command is fragmented when its length is
greater than 64 bytes and when the underlying USB controller is not a
high-speed one.

Signed-off-by: Stephane Grosjean <s.grosjean@peak-system.com>
Cc: linux-stable <stable@vger.kernel.org>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/can/usb/peak_usb/pcan_usb_fd.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
index ce44a033f63b..64cc86a82b2d 100644
--- a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
+++ b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
@@ -184,7 +184,7 @@ static int pcan_usb_fd_send_cmd(struct peak_usb_device *dev, void *cmd_tail)
 	void *cmd_head = pcan_usb_fd_cmd_buffer(dev);
 	int err = 0;
 	u8 *packet_ptr;
-	int i, n = 1, packet_len;
+	int packet_len;
 	ptrdiff_t cmd_len;
 
 	/* usb device unregistered? */
@@ -201,17 +201,13 @@ static int pcan_usb_fd_send_cmd(struct peak_usb_device *dev, void *cmd_tail)
 	}
 
 	packet_ptr = cmd_head;
+	packet_len = cmd_len;
 
 	/* firmware is not able to re-assemble 512 bytes buffer in full-speed */
-	if ((dev->udev->speed != USB_SPEED_HIGH) &&
-	    (cmd_len > PCAN_UFD_LOSPD_PKT_SIZE)) {
-		packet_len = PCAN_UFD_LOSPD_PKT_SIZE;
-		n += cmd_len / packet_len;
-	} else {
-		packet_len = cmd_len;
-	}
+	if (unlikely(dev->udev->speed != USB_SPEED_HIGH))
+		packet_len = min(packet_len, PCAN_UFD_LOSPD_PKT_SIZE);
 
-	for (i = 0; i < n; i++) {
+	do {
 		err = usb_bulk_msg(dev->udev,
 				   usb_sndbulkpipe(dev->udev,
 						   PCAN_USBPRO_EP_CMDOUT),
@@ -224,7 +220,12 @@ static int pcan_usb_fd_send_cmd(struct peak_usb_device *dev, void *cmd_tail)
 		}
 
 		packet_ptr += packet_len;
-	}
+		cmd_len -= packet_len;
+
+		if (cmd_len < PCAN_UFD_LOSPD_PKT_SIZE)
+			packet_len = cmd_len;
+
+	} while (packet_len > 0);
 
 	return err;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] libata: apply MAX_SEC_1024 to all LITEON EP1 series devices
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (192 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] can: peak: fix potential bug in packet fragmentation Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] dm btree: fix serious bug in btree_split_beneath() Sasha Levin
                   ` (322 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Xinyu Lin, Tejun Heo, Sasha Levin

From: Xinyu Lin <xinyu0123@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit db5ff909798ef0099004ad50a0ff5fde92426fd1 ]

LITEON EP1 has the same timeout issues as CX1 series devices.

Revert max_sectors to the value of 1024.

'e0edc8c54646 ("libata: apply MAX_SEC_1024 to all CX1-JB*-HP devices")'

Signed-off-by: Xinyu Lin <xinyu0123@gmail.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: stable@vger.kernel.org
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/ata/libata-core.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 4c0dac27882f..b31d6853ba7a 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -4145,6 +4145,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
 	 * https://bugzilla.kernel.org/show_bug.cgi?id=121671
 	 */
 	{ "LITEON CX1-JB*-HP",	NULL,		ATA_HORKAGE_MAX_SEC_1024 },
+	{ "LITEON EP1-*",	NULL,		ATA_HORKAGE_MAX_SEC_1024 },
 
 	/* Devices we expect to fail diagnostics */
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] dm btree: fix serious bug in btree_split_beneath()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (193 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] libata: apply MAX_SEC_1024 to all LITEON EP1 series devices Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] dm thin metadata: THIN_MAX_CONCURRENT_LOCKS should be 6 Sasha Levin
                   ` (321 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Joe Thornber, Mike Snitzer, Sasha Levin

From: Joe Thornber <thornber@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit bc68d0a43560e950850fc69b58f0f8254b28f6d6 ]

When inserting a new key/value pair into a btree we walk down the spine of
btree nodes performing the following 2 operations:

  i) space for a new entry
  ii) adjusting the first key entry if the new key is lower than any in the node.

If the _root_ node is full, the function btree_split_beneath() allocates 2 new
nodes, and redistibutes the root nodes entries between them.  The root node is
left with 2 entries corresponding to the 2 new nodes.

btree_split_beneath() then adjusts the spine to point to one of the two new
children.  This means the first key is never adjusted if the new key was lower,
ie. operation (ii) gets missed out.  This can result in the new key being
'lost' for a period; until another low valued key is inserted that will uncover
it.

This is a serious bug, and quite hard to make trigger in normal use.  A
reproducing test case ("thin create devices-in-reverse-order") is
available as part of the thin-provision-tools project:
  https://github.com/jthornber/thin-provisioning-tools/blob/master/functional-tests/device-mapper/dm-tests.scm#L593

Fix the issue by changing btree_split_beneath() so it no longer adjusts
the spine.  Instead it unlocks both the new nodes, and lets the main
loop in btree_insert_raw() relock the appropriate one and make any
neccessary adjustments.

Cc: stable@vger.kernel.org
Reported-by: Monty Pavel <monty_pavel@sina.com>
Signed-off-by: Joe Thornber <thornber@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/md/persistent-data/dm-btree.c | 19 ++-----------------
 1 file changed, 2 insertions(+), 17 deletions(-)

diff --git a/drivers/md/persistent-data/dm-btree.c b/drivers/md/persistent-data/dm-btree.c
index 360c22d44647..f2a8e4c69d9f 100644
--- a/drivers/md/persistent-data/dm-btree.c
+++ b/drivers/md/persistent-data/dm-btree.c
@@ -572,23 +572,8 @@ static int btree_split_beneath(struct shadow_spine *s, uint64_t key)
 	pn->keys[1] = rn->keys[0];
 	memcpy_disk(value_ptr(pn, 1), &val, sizeof(__le64));
 
-	/*
-	 * rejig the spine.  This is ugly, since it knows too
-	 * much about the spine
-	 */
-	if (s->nodes[0] != new_parent) {
-		unlock_block(s->info, s->nodes[0]);
-		s->nodes[0] = new_parent;
-	}
-	if (key < le64_to_cpu(rn->keys[0])) {
-		unlock_block(s->info, right);
-		s->nodes[1] = left;
-	} else {
-		unlock_block(s->info, left);
-		s->nodes[1] = right;
-	}
-	s->count = 2;
-
+	unlock_block(s->info, left);
+	unlock_block(s->info, right);
 	return 0;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] dm thin metadata: THIN_MAX_CONCURRENT_LOCKS should be 6
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (194 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] dm btree: fix serious bug in btree_split_beneath() Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] arm64: KVM: Fix SMCCC handling of unimplemented SMC/HVC calls Sasha Levin
                   ` (320 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Dennis Yang, Mike Snitzer, Sasha Levin

From: Dennis Yang <dennisyang@qnap.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 490ae017f54e55bde382d45ea24bddfb6d1a0aaf ]

For btree removal, there is a corner case that a single thread
could takes 6 locks which is more than THIN_MAX_CONCURRENT_LOCKS(5)
and leads to deadlock.

A btree removal might eventually call
rebalance_children()->rebalance3() to rebalance entries of three
neighbor child nodes when shadow_spine has already acquired two
write locks. In rebalance3(), it tries to shadow and acquire the
write locks of all three child nodes. However, shadowing a child
node requires acquiring a read lock of the original child node and
a write lock of the new block. Although the read lock will be
released after block shadowing, shadowing the third child node
in rebalance3() could still take the sixth lock.
(2 write locks for shadow_spine +
 2 write locks for the first two child nodes's shadow +
 1 write lock for the last child node's shadow +
 1 read lock for the last child node)

Cc: stable@vger.kernel.org
Signed-off-by: Dennis Yang <dennisyang@qnap.com>
Acked-by: Joe Thornber <thornber@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/md/dm-thin-metadata.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/md/dm-thin-metadata.c b/drivers/md/dm-thin-metadata.c
index a178134abbe8..c9f51f7c1063 100644
--- a/drivers/md/dm-thin-metadata.c
+++ b/drivers/md/dm-thin-metadata.c
@@ -81,10 +81,14 @@
 #define SECTOR_TO_BLOCK_SHIFT 3
 
 /*
+ * For btree insert:
  *  3 for btree insert +
  *  2 for btree lookup used within space map
+ * For btree remove:
+ *  2 for shadow spine +
+ *  4 for rebalance 3 child node
  */
-#define THIN_MAX_CONCURRENT_LOCKS 5
+#define THIN_MAX_CONCURRENT_LOCKS 6
 
 /* This should be plenty */
 #define SPACE_MAP_ROOT_SIZE 128
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] kbuild: modversions for EXPORT_SYMBOL() for asm
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (196 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] arm64: KVM: Fix SMCCC handling of unimplemented SMC/HVC calls Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] MIPS: AR7: ensure the port type's FCR value is used Sasha Levin
                   ` (318 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Nicholas Piggin, Michal Marek, Sasha Levin

From: Nicholas Piggin <npiggin@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4efca4ed05cbdfd13ec3e8cb623fb77d6e4ab187 ]

Allow architectures to create asm/asm-prototypes.h file that
provides C prototypes for exported asm functions, which enables
proper CRC versions to be generated for them.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michal Marek <mmarek@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 scripts/Makefile.build | 87 ++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 80 insertions(+), 7 deletions(-)

diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 01df30af4d4a..18209917e379 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -158,7 +158,8 @@ cmd_cc_i_c       = $(CPP) $(c_flags)   -o $@ $<
 $(obj)/%.i: $(src)/%.c FORCE
 	$(call if_changed_dep,cc_i_c)
 
-cmd_gensymtypes =                                                           \
+# These mirror gensymtypes_S and co below, keep them in synch.
+cmd_gensymtypes_c =                                                         \
     $(CPP) -D__GENKSYMS__ $(c_flags) $< |                                   \
     $(GENKSYMS) $(if $(1), -T $(2))                                         \
      $(patsubst y,-s _,$(CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX))             \
@@ -168,7 +169,7 @@ cmd_gensymtypes =                                                           \
 quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@
 cmd_cc_symtypes_c =                                                         \
     set -e;                                                                 \
-    $(call cmd_gensymtypes,true,$@) >/dev/null;                             \
+    $(call cmd_gensymtypes_c,true,$@) >/dev/null;                           \
     test -s $@ || rm -f $@
 
 $(obj)/%.symtypes : $(src)/%.c FORCE
@@ -197,9 +198,10 @@ else
 #   the actual value of the checksum generated by genksyms
 
 cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $<
-cmd_modversions =								\
+
+cmd_modversions_c =								\
 	if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then		\
-		$(call cmd_gensymtypes,$(KBUILD_SYMTYPES),$(@:.o=.symtypes))	\
+		$(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes))	\
 		    > $(@D)/.tmp_$(@F:.o=.ver);					\
 										\
 		$(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) 			\
@@ -244,7 +246,7 @@ endif
 define rule_cc_o_c
 	$(call echo-cmd,checksrc) $(cmd_checksrc)			  \
 	$(call echo-cmd,cc_o_c) $(cmd_cc_o_c);				  \
-	$(cmd_modversions)						  \
+	$(cmd_modversions_c)						  \
 	$(call echo-cmd,record_mcount)					  \
 	$(cmd_record_mcount)						  \
 	scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' >    \
@@ -253,6 +255,15 @@ define rule_cc_o_c
 	mv -f $(dot-target).tmp $(dot-target).cmd
 endef
 
+define rule_as_o_S
+       $(call echo-cmd,as_o_S) $(cmd_as_o_S);                            \
+       scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,as_o_S)' >    \
+                                                     $(dot-target).tmp;  \
+       $(cmd_modversions_S)						 \
+       rm -f $(depfile);                                                 \
+       mv -f $(dot-target).tmp $(dot-target).cmd
+endef
+
 # Built-in and composite module parts
 $(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE
 	$(call cmd,force_checksrc)
@@ -281,6 +292,38 @@ modkern_aflags := $(KBUILD_AFLAGS_KERNEL) $(AFLAGS_KERNEL)
 $(real-objs-m)      : modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE)
 $(real-objs-m:.o=.s): modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE)
 
+# .S file exports must have their C prototypes defined in asm/asm-prototypes.h
+# or a file that it includes, in order to get versioned symbols. We build a
+# dummy C file that includes asm-prototypes and the EXPORT_SYMBOL lines from
+# the .S file (with trailing ';'), and run genksyms on that, to extract vers.
+#
+# This is convoluted. The .S file must first be preprocessed to run guards and
+# expand names, then the resulting exports must be constructed into plain
+# EXPORT_SYMBOL(symbol); to build our dummy C file, and that gets preprocessed
+# to make the genksyms input.
+#
+# These mirror gensymtypes_c and co above, keep them in synch.
+cmd_gensymtypes_S =                                                         \
+    (echo "\#include <linux/kernel.h>" ;                                    \
+     echo "\#include <asm/asm-prototypes.h>" ;                              \
+    $(CPP) $(a_flags) $< |                                                  \
+      grep "\<___EXPORT_SYMBOL\>" |                                          \
+      sed 's/.*___EXPORT_SYMBOL[[:space:]]*\([a-zA-Z0-9_]*\)[[:space:]]*,.*/EXPORT_SYMBOL(\1);/' ) | \
+    $(CPP) -D__GENKSYMS__ $(c_flags) -xc - |                                \
+    $(GENKSYMS) $(if $(1), -T $(2))                                         \
+     $(patsubst y,-s _,$(CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX))             \
+     $(if $(KBUILD_PRESERVE),-p)                                            \
+     -r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null))
+
+quiet_cmd_cc_symtypes_S = SYM $(quiet_modtag) $@
+cmd_cc_symtypes_S =                                                         \
+    set -e;                                                                 \
+    $(call cmd_gensymtypes_S,true,$@) >/dev/null;                           \
+    test -s $@ || rm -f $@
+
+$(obj)/%.symtypes : $(src)/%.S FORCE
+	$(call cmd,cc_symtypes_S)
+
 quiet_cmd_as_s_S = CPP $(quiet_modtag) $@
 cmd_as_s_S       = $(CPP) $(a_flags)   -o $@ $<
 
@@ -288,10 +331,40 @@ $(obj)/%.s: $(src)/%.S FORCE
 	$(call if_changed_dep,as_s_S)
 
 quiet_cmd_as_o_S = AS $(quiet_modtag)  $@
-cmd_as_o_S       = $(CC) $(a_flags) -c -o $@ $<
+
+ifndef CONFIG_MODVERSIONS
+cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
+
+else
+
+ASM_PROTOTYPES := $(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/asm-prototypes.h)
+
+ifeq ($(ASM_PROTOTYPES),)
+cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
+
+else
+
+# versioning matches the C process described above, with difference that
+# we parse asm-prototypes.h C header to get function definitions.
+
+cmd_as_o_S = $(CC) $(a_flags) -c -o $(@D)/.tmp_$(@F) $<
+
+cmd_modversions_S =								\
+	if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then		\
+		$(call cmd_gensymtypes_S,$(KBUILD_SYMTYPES),$(@:.o=.symtypes))	\
+		    > $(@D)/.tmp_$(@F:.o=.ver);					\
+										\
+		$(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) 			\
+			-T $(@D)/.tmp_$(@F:.o=.ver);				\
+		rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver);		\
+	else									\
+		mv -f $(@D)/.tmp_$(@F) $@;					\
+	fi;
+endif
+endif
 
 $(obj)/%.o: $(src)/%.S FORCE
-	$(call if_changed_dep,as_o_S)
+	$(call if_changed_rule,as_o_S)
 
 targets += $(real-objs-y) $(real-objs-m) $(lib-y)
 targets += $(extra-y) $(MAKECMDGOALS) $(always)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] arm64: KVM: Fix SMCCC handling of unimplemented SMC/HVC calls
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (195 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] dm thin metadata: THIN_MAX_CONCURRENT_LOCKS should be 6 Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] kbuild: modversions for EXPORT_SYMBOL() for asm Sasha Levin
                   ` (319 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Marc Zyngier, Christoffer Dall, Sasha Levin

From: Marc Zyngier <marc.zyngier@arm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit acfb3b883f6d6a4b5d27ad7fdded11f6a09ae6dd ]

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.

Cc: <stable@vger.kernel.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm64/kvm/handle_exit.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c
index 524fa25671fc..2d357aed5e66 100644
--- a/arch/arm64/kvm/handle_exit.c
+++ b/arch/arm64/kvm/handle_exit.c
@@ -42,7 +42,7 @@ static int handle_hvc(struct kvm_vcpu *vcpu, struct kvm_run *run)
 
 	ret = kvm_psci_call(vcpu);
 	if (ret < 0) {
-		kvm_inject_undefined(vcpu);
+		vcpu_set_reg(vcpu, 0, ~0UL);
 		return 1;
 	}
 
@@ -51,7 +51,7 @@ static int handle_hvc(struct kvm_vcpu *vcpu, struct kvm_run *run)
 
 static int handle_smc(struct kvm_vcpu *vcpu, struct kvm_run *run)
 {
-	kvm_inject_undefined(vcpu);
+	vcpu_set_reg(vcpu, 0, ~0UL);
 	return 1;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] MIPS: AR7: ensure the port type's FCR value is used
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (197 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] kbuild: modversions for EXPORT_SYMBOL() for asm Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/asm/32: Make sync_core() handle missing CPUID on all 32-bit kernels Sasha Levin
                   ` (317 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jonas Gorski, Ralf Baechle, Sasha Levin

From: Jonas Gorski <jonas.gorski@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 0a5191efe06b5103909206e4fbcff81d30283f8e ]

Since commit aef9a7bd9b67 ("serial/uart/8250: Add tunable RX interrupt
trigger I/F of FIFO buffers"), the port's default FCR value isn't used
in serial8250_do_set_termios anymore, but copied over once in
serial8250_config_port and then modified as needed.

Unfortunately, serial8250_config_port will never be called if the port
is shared between kernel and userspace, and the port's flag doesn't have
UPF_BOOT_AUTOCONF, which would trigger a serial8250_config_port as well.

This causes garbled output from userspace:

[    5.220000] random: procd urandom read with 49 bits of entropy available
ers
   [kee

Fix this by forcing it to be configured on boot, resulting in the
expected output:

[    5.250000] random: procd urandom read with 50 bits of entropy available
Press the [f] key and hit [enter] to enter failsafe mode
Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level

Fixes: aef9a7bd9b67 ("serial/uart/8250: Add tunable RX interrupt trigger I/F of FIFO buffers")
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Yoshihiro YUNOMAE <yoshihiro.yunomae.ez@hitachi.com>
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: Nicolas Schichan <nschichan@freebox.fr>
Cc: linux-mips@linux-mips.org
Cc: linux-serial@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/17544/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/mips/ar7/platform.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/mips/ar7/platform.c b/arch/mips/ar7/platform.c
index 5afbb7b41160..d60986fdc288 100644
--- a/arch/mips/ar7/platform.c
+++ b/arch/mips/ar7/platform.c
@@ -577,7 +577,7 @@ static int __init ar7_register_uarts(void)
 	uart_port.type		= PORT_AR7;
 	uart_port.uartclk	= clk_get_rate(bus_clk) / 2;
 	uart_port.iotype	= UPIO_MEM32;
-	uart_port.flags		= UPF_FIXED_TYPE;
+	uart_port.flags		= UPF_FIXED_TYPE | UPF_BOOT_AUTOCONF;
 	uart_port.regshift	= 2;
 
 	uart_port.line		= 0;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/asm/32: Make sync_core() handle missing CPUID on all 32-bit kernels
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (198 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] MIPS: AR7: ensure the port type's FCR value is used Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: prevent vhci_hcd driver from leaking a socket pointer address Sasha Levin
                   ` (316 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Thomas Gleixner, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1c52d859cb2d417e7216d3e56bb7fea88444cec9 ]

We support various non-Intel CPUs that don't have the CPUID
instruction, so the M486 test was wrong.  For now, fix it with a big
hammer: handle missing CPUID on all 32-bit CPUs.

Reported-by: One Thousand Gnomes <gnomes@lxorguk.ukuu.org.uk>
Signed-off-by: Andy Lutomirski <luto@kernel.org>
Cc: Juergen Gross <jgross@suse.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Matthew Whitehead <tedheadster@gmail.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: xen-devel <Xen-devel@lists.xen.org>
Link: http://lkml.kernel.org/r/685bd083a7c036f7769510b6846315b17d6ba71f.1481307769.git.luto@kernel.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/processor.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index ecc3dec4beb6..4ac06db325a2 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -701,7 +701,7 @@ static inline void sync_core(void)
 {
 	int tmp;
 
-#ifdef CONFIG_M486
+#ifdef CONFIG_X86_32
 	/*
 	 * Do a CPUID if available, otherwise do a jump.  The jump
 	 * can conveniently enough be the jump around CPUID.
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usbip: prevent vhci_hcd driver from leaking a socket pointer address
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (199 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/asm/32: Make sync_core() handle missing CPUID on all 32-bit kernels Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: Fix implicit fallthrough warning Sasha Levin
                   ` (315 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Shuah Khan, Greg Kroah-Hartman, Sasha Levin

From: Shuah Khan <shuahkh@osg.samsung.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 2f2d0088eb93db5c649d2a5e34a3800a8a935fc5 ]

When a client has a USB device attached over IP, the vhci_hcd driver is
locally leaking a socket pointer address via the

/sys/devices/platform/vhci_hcd/status file (world-readable) and in debug
output when "usbip --debug port" is run.

Fix it to not leak. The socket pointer address is not used at the moment
and it was made visible as a convenient way to find IP address from socket
pointer address by looking up /proc/net/{tcp,tcp6}.

As this opens a security hole, the fix replaces socket pointer address with
sockfd.

Reported-by: Secunia Research <vuln@secunia.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/usbip/usbip_common.h     |  1 +
 drivers/usb/usbip/vhci_sysfs.c       | 25 +++++++++++++++----------
 tools/usb/usbip/libsrc/vhci_driver.c |  8 ++++----
 3 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/drivers/usb/usbip/usbip_common.h b/drivers/usb/usbip/usbip_common.h
index 86b08475c254..f875ccaa55f9 100644
--- a/drivers/usb/usbip/usbip_common.h
+++ b/drivers/usb/usbip/usbip_common.h
@@ -261,6 +261,7 @@ struct usbip_device {
 	/* lock for status */
 	spinlock_t lock;
 
+	int sockfd;
 	struct socket *tcp_socket;
 
 	struct task_struct *tcp_rx;
diff --git a/drivers/usb/usbip/vhci_sysfs.c b/drivers/usb/usbip/vhci_sysfs.c
index 211f43f67ea2..84c21c4ccf46 100644
--- a/drivers/usb/usbip/vhci_sysfs.c
+++ b/drivers/usb/usbip/vhci_sysfs.c
@@ -39,16 +39,20 @@ static ssize_t status_show(struct device *dev, struct device_attribute *attr,
 
 	/*
 	 * output example:
-	 * prt sta spd dev socket           local_busid
-	 * 000 004 000 000         c5a7bb80 1-2.3
-	 * 001 004 000 000         d8cee980 2-3.4
+	 * port sta spd dev      sockfd local_busid
+	 * 0000 004 000 00000000 000003 1-2.3
+	 * 0001 004 000 00000000 000004 2-3.4
 	 *
-	 * IP address can be retrieved from a socket pointer address by looking
-	 * up /proc/net/{tcp,tcp6}. Also, a userland program may remember a
-	 * port number and its peer IP address.
+	 * Output includes socket fd instead of socket pointer address to
+	 * avoid leaking kernel memory address in:
+	 *	/sys/devices/platform/vhci_hcd.0/status and in debug output.
+	 * The socket pointer address is not used at the moment and it was
+	 * made visible as a convenient way to find IP address from socket
+	 * pointer address by looking up /proc/net/{tcp,tcp6}. As this opens
+	 * a security hole, the change is made to use sockfd instead.
 	 */
 	out += sprintf(out,
-		       "prt sta spd bus dev socket           local_busid\n");
+		       "prt sta spd bus dev sockfd local_busid\n");
 
 	for (i = 0; i < VHCI_NPORTS; i++) {
 		struct vhci_device *vdev = port_to_vdev(i);
@@ -60,11 +64,11 @@ static ssize_t status_show(struct device *dev, struct device_attribute *attr,
 			out += sprintf(out, "%03u %08x ",
 				       vdev->speed, vdev->devid);
 			out += sprintf(out, "%16p ", vdev->ud.tcp_socket);
+			out += sprintf(out, "%06u", vdev->ud.sockfd);
 			out += sprintf(out, "%s", dev_name(&vdev->udev->dev));
 
-		} else {
-			out += sprintf(out, "000 000 000 0000000000000000 0-0");
-		}
+		} else
+			out += sprintf(out, "000 000 000 000000 0-0");
 
 		out += sprintf(out, "\n");
 		spin_unlock(&vdev->ud.lock);
@@ -223,6 +227,7 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,
 
 	vdev->devid         = devid;
 	vdev->speed         = speed;
+	vdev->ud.sockfd     = sockfd;
 	vdev->ud.tcp_socket = socket;
 	vdev->ud.status     = VDEV_ST_NOTASSIGNED;
 
diff --git a/tools/usb/usbip/libsrc/vhci_driver.c b/tools/usb/usbip/libsrc/vhci_driver.c
index ad9204773533..1274f326242c 100644
--- a/tools/usb/usbip/libsrc/vhci_driver.c
+++ b/tools/usb/usbip/libsrc/vhci_driver.c
@@ -55,12 +55,12 @@ static int parse_status(const char *value)
 
 	while (*c != '\0') {
 		int port, status, speed, devid;
-		unsigned long socket;
+		int sockfd;
 		char lbusid[SYSFS_BUS_ID_SIZE];
 
-		ret = sscanf(c, "%d %d %d %x %lx %31s\n",
+		ret = sscanf(c, "%d %d %d %x %u %31s\n",
 				&port, &status, &speed,
-				&devid, &socket, lbusid);
+				&devid, &sockfd, lbusid);
 
 		if (ret < 5) {
 			dbg("sscanf failed: %d", ret);
@@ -69,7 +69,7 @@ static int parse_status(const char *value)
 
 		dbg("port %d status %d speed %d devid %x",
 				port, status, speed, devid);
-		dbg("socket %lx lbusid %s", socket, lbusid);
+		dbg("sockfd %u lbusid %s", sockfd, lbusid);
 
 
 		/* if a device is connected, look at it */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usbip: Fix potential format overflow in userspace tools
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (201 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: Fix implicit fallthrough warning Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/cpu/intel: Introduce macros for Intel family numbers Sasha Levin
                   ` (313 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jonathan Dieter, Greg Kroah-Hartman, Sasha Levin

From: Jonathan Dieter <jdieter@lesbg.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e5dfa3f902b9a642ae8c6997d57d7c41e384a90b ]

The usbip userspace tools call sprintf()/snprintf() and don't check for
the return value which can lead the paths to overflow, truncating the
final file in the path.

More urgently, GCC 7 now warns that these aren't checked with
-Wformat-overflow, and with -Werror enabled in configure.ac, that makes
these tools unbuildable.

This patch fixes these problems by replacing sprintf() with snprintf() in
one place and adding checks for the return value of snprintf().

Reviewed-by: Peter Senna Tschudin <peter.senna@gmail.com>
Signed-off-by: Jonathan Dieter <jdieter@lesbg.com>
Acked-by: Shuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 tools/usb/usbip/libsrc/usbip_common.c      |  9 ++++++++-
 tools/usb/usbip/libsrc/usbip_host_driver.c | 27 ++++++++++++++++++++++-----
 2 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/tools/usb/usbip/libsrc/usbip_common.c b/tools/usb/usbip/libsrc/usbip_common.c
index ac73710473de..8000445ff884 100644
--- a/tools/usb/usbip/libsrc/usbip_common.c
+++ b/tools/usb/usbip/libsrc/usbip_common.c
@@ -215,9 +215,16 @@ int read_usb_interface(struct usbip_usb_device *udev, int i,
 		       struct usbip_usb_interface *uinf)
 {
 	char busid[SYSFS_BUS_ID_SIZE];
+	int size;
 	struct udev_device *sif;
 
-	sprintf(busid, "%s:%d.%d", udev->busid, udev->bConfigurationValue, i);
+	size = snprintf(busid, sizeof(busid), "%s:%d.%d",
+			udev->busid, udev->bConfigurationValue, i);
+	if (size < 0 || (unsigned int)size >= sizeof(busid)) {
+		err("busid length %i >= %lu or < 0", size,
+		    (unsigned long)sizeof(busid));
+		return -1;
+	}
 
 	sif = udev_device_new_from_subsystem_sysname(udev_context, "usb", busid);
 	if (!sif) {
diff --git a/tools/usb/usbip/libsrc/usbip_host_driver.c b/tools/usb/usbip/libsrc/usbip_host_driver.c
index bef08d5c44e8..071b9ce99420 100644
--- a/tools/usb/usbip/libsrc/usbip_host_driver.c
+++ b/tools/usb/usbip/libsrc/usbip_host_driver.c
@@ -39,13 +39,19 @@ struct udev *udev_context;
 static int32_t read_attr_usbip_status(struct usbip_usb_device *udev)
 {
 	char status_attr_path[SYSFS_PATH_MAX];
+	int size;
 	int fd;
 	int length;
 	char status;
 	int value = 0;
 
-	snprintf(status_attr_path, SYSFS_PATH_MAX, "%s/usbip_status",
-		 udev->path);
+	size = snprintf(status_attr_path, SYSFS_PATH_MAX, "%s/usbip_status",
+			udev->path);
+	if (size < 0 || (unsigned int)size >= sizeof(status_attr_path)) {
+		err("usbip_status path length %i >= %lu or < 0", size,
+		    (unsigned long)sizeof(status_attr_path));
+		return -1;
+	}
 
 	fd = open(status_attr_path, O_RDONLY);
 	if (fd < 0) {
@@ -225,6 +231,7 @@ int usbip_host_export_device(struct usbip_exported_device *edev, int sockfd)
 {
 	char attr_name[] = "usbip_sockfd";
 	char sockfd_attr_path[SYSFS_PATH_MAX];
+	int size;
 	char sockfd_buff[30];
 	int ret;
 
@@ -244,10 +251,20 @@ int usbip_host_export_device(struct usbip_exported_device *edev, int sockfd)
 	}
 
 	/* only the first interface is true */
-	snprintf(sockfd_attr_path, sizeof(sockfd_attr_path), "%s/%s",
-		 edev->udev.path, attr_name);
+	size = snprintf(sockfd_attr_path, sizeof(sockfd_attr_path), "%s/%s",
+			edev->udev.path, attr_name);
+	if (size < 0 || (unsigned int)size >= sizeof(sockfd_attr_path)) {
+		err("exported device path length %i >= %lu or < 0", size,
+		    (unsigned long)sizeof(sockfd_attr_path));
+		return -1;
+	}
 
-	snprintf(sockfd_buff, sizeof(sockfd_buff), "%d\n", sockfd);
+	size = snprintf(sockfd_buff, sizeof(sockfd_buff), "%d\n", sockfd);
+	if (size < 0 || (unsigned int)size >= sizeof(sockfd_buff)) {
+		err("socket length %i >= %lu or < 0", size,
+		    (unsigned long)sizeof(sockfd_buff));
+		return -1;
+	}
 
 	ret = write_sysfs_attribute(sockfd_attr_path, sockfd_buff,
 				    strlen(sockfd_buff));
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usbip: Fix implicit fallthrough warning
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (200 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: prevent vhci_hcd driver from leaking a socket pointer address Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: Fix potential format overflow in userspace tools Sasha Levin
                   ` (314 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jonathan Dieter, Greg Kroah-Hartman, Sasha Levin

From: Jonathan Dieter <jdieter@lesbg.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit cfd6ed4537a9e938fa76facecd4b9cd65b6d1563 ]

GCC 7 now warns when switch statements fall through implicitly, and with
-Werror enabled in configure.ac, that makes these tools unbuildable.

We fix this by notifying the compiler that this particular case statement
is meant to fall through.

Reviewed-by: Peter Senna Tschudin <peter.senna@gmail.com>
Signed-off-by: Jonathan Dieter <jdieter@lesbg.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 tools/usb/usbip/src/usbip.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/usb/usbip/src/usbip.c b/tools/usb/usbip/src/usbip.c
index d7599d943529..73d8eee8130b 100644
--- a/tools/usb/usbip/src/usbip.c
+++ b/tools/usb/usbip/src/usbip.c
@@ -176,6 +176,8 @@ int main(int argc, char *argv[])
 			break;
 		case '?':
 			printf("usbip: invalid option\n");
+			/* Terminate after printing error */
+			/* FALLTHRU */
 		default:
 			usbip_usage();
 			goto out;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] can: af_can: can_rcv(): replace WARN_ONCE by pr_warn_once
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (203 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/cpu/intel: Introduce macros for Intel family numbers Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] can: af_can: canfd_rcv(): " Sasha Levin
                   ` (311 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Marc Kleine-Budde, Sasha Levin

From: Marc Kleine-Budde <mkl@pengutronix.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8cb68751c115d176ec851ca56ecfbb411568c9e8 ]

If an invalid CAN frame is received, from a driver or from a tun
interface, a Kernel warning is generated.

This patch replaces the WARN_ONCE by a simple pr_warn_once, so that a
kernel, bootet with panic_on_warn, does not panic. A printk seems to be
more appropriate here.

Reported-by: syzbot+4386709c0c1284dca827@syzkaller.appspotmail.com
Suggested-by: Dmitry Vyukov <dvyukov@google.com>
Acked-by: Oliver Hartkopp <socketcan@hartkopp.net>
Cc: linux-stable <stable@vger.kernel.org>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/can/af_can.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/net/can/af_can.c b/net/can/af_can.c
index 62c635f2bcfc..05336748579c 100644
--- a/net/can/af_can.c
+++ b/net/can/af_can.c
@@ -714,13 +714,12 @@ static int can_rcv(struct sk_buff *skb, struct net_device *dev,
 	if (unlikely(!net_eq(dev_net(dev), &init_net)))
 		goto drop;
 
-	if (WARN_ONCE(dev->type != ARPHRD_CAN ||
-		      skb->len != CAN_MTU ||
-		      cfd->len > CAN_MAX_DLEN,
-		      "PF_CAN: dropped non conform CAN skbuf: "
-		      "dev type %d, len %d, datalen %d\n",
-		      dev->type, skb->len, cfd->len))
+	if (unlikely(dev->type != ARPHRD_CAN || skb->len != CAN_MTU ||
+		     cfd->len > CAN_MAX_DLEN)) {
+		pr_warn_once("PF_CAN: dropped non conform CAN skbuf: dev type %d, len %d, datalen %d\n",
+			     dev->type, skb->len, cfd->len);
 		goto drop;
+	}
 
 	can_receive(skb, dev);
 	return NET_RX_SUCCESS;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/cpu/intel: Introduce macros for Intel family numbers
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (202 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: Fix potential format overflow in userspace tools Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] can: af_can: can_rcv(): replace WARN_ONCE by pr_warn_once Sasha Levin
                   ` (312 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Dave Hansen, Dave Hansen, Ingo Molnar, Sasha Levin

From: Dave Hansen <dave@sr71.net>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 970442c599b22ccd644ebfe94d1d303bf6f87c05 ]

Problem:

We have a boatload of open-coded family-6 model numbers.  Half of
them have these model numbers in hex and the other half in
decimal.  This makes grepping for them tons of fun, if you were
to try.

Solution:

Consolidate all the magic numbers.  Put all the definitions in
one header.

The names here are closely derived from the comments describing
the models from arch/x86/events/intel/core.c.  We could easily
make them shorter by doing things like s/SANDYBRIDGE/SNB/, but
they seemed fine even with the longer versions to me.

Do not take any of these names too literally, like "DESKTOP"
or "MOBILE".  These are all colloquial names and not precise
descriptions of everywhere a given model will show up.

Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Darren Hart <dvhart@infradead.org>
Cc: Dave Hansen <dave@sr71.net>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Doug Thompson <dougthompson@xmission.com>
Cc: Eduardo Valentin <edubezval@gmail.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Jacob Pan <jacob.jun.pan@linux.intel.com>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Len Brown <lenb@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: Rajneesh Bhardwaj <rajneesh.bhardwaj@intel.com>
Cc: Souvik Kumar Chakravarty <souvik.k.chakravarty@intel.com>
Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Cc: Stephane Eranian <eranian@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Ulf Hansson <ulf.hansson@linaro.org>
Cc: Viresh Kumar <viresh.kumar@linaro.org>
Cc: Vishwanath Somayaji <vishwanath.somayaji@intel.com>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: jacob.jun.pan@intel.com
Cc: linux-acpi@vger.kernel.org
Cc: linux-edac@vger.kernel.org
Cc: linux-mmc@vger.kernel.org
Cc: linux-pm@vger.kernel.org
Cc: platform-driver-x86@vger.kernel.org
Link: http://lkml.kernel.org/r/20160603001927.F2A7D828@viggo.jf.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/intel-family.h | 68 +++++++++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)
 create mode 100644 arch/x86/include/asm/intel-family.h

diff --git a/arch/x86/include/asm/intel-family.h b/arch/x86/include/asm/intel-family.h
new file mode 100644
index 000000000000..6999f7d01a0d
--- /dev/null
+++ b/arch/x86/include/asm/intel-family.h
@@ -0,0 +1,68 @@
+#ifndef _ASM_X86_INTEL_FAMILY_H
+#define _ASM_X86_INTEL_FAMILY_H
+
+/*
+ * "Big Core" Processors (Branded as Core, Xeon, etc...)
+ *
+ * The "_X" parts are generally the EP and EX Xeons, or the
+ * "Extreme" ones, like Broadwell-E.
+ *
+ * Things ending in "2" are usually because we have no better
+ * name for them.  There's no processor called "WESTMERE2".
+ */
+
+#define INTEL_FAM6_CORE_YONAH		0x0E
+#define INTEL_FAM6_CORE2_MEROM		0x0F
+#define INTEL_FAM6_CORE2_MEROM_L	0x16
+#define INTEL_FAM6_CORE2_PENRYN		0x17
+#define INTEL_FAM6_CORE2_DUNNINGTON	0x1D
+
+#define INTEL_FAM6_NEHALEM		0x1E
+#define INTEL_FAM6_NEHALEM_EP		0x1A
+#define INTEL_FAM6_NEHALEM_EX		0x2E
+#define INTEL_FAM6_WESTMERE		0x25
+#define INTEL_FAM6_WESTMERE2		0x1F
+#define INTEL_FAM6_WESTMERE_EP		0x2C
+#define INTEL_FAM6_WESTMERE_EX		0x2F
+
+#define INTEL_FAM6_SANDYBRIDGE		0x2A
+#define INTEL_FAM6_SANDYBRIDGE_X	0x2D
+#define INTEL_FAM6_IVYBRIDGE		0x3A
+#define INTEL_FAM6_IVYBRIDGE_X		0x3E
+
+#define INTEL_FAM6_HASWELL_CORE		0x3C
+#define INTEL_FAM6_HASWELL_X		0x3F
+#define INTEL_FAM6_HASWELL_ULT		0x45
+#define INTEL_FAM6_HASWELL_GT3E		0x46
+
+#define INTEL_FAM6_BROADWELL_CORE	0x3D
+#define INTEL_FAM6_BROADWELL_XEON_D	0x56
+#define INTEL_FAM6_BROADWELL_GT3E	0x47
+#define INTEL_FAM6_BROADWELL_X		0x4F
+
+#define INTEL_FAM6_SKYLAKE_MOBILE	0x4E
+#define INTEL_FAM6_SKYLAKE_DESKTOP	0x5E
+#define INTEL_FAM6_SKYLAKE_X		0x55
+#define INTEL_FAM6_KABYLAKE_MOBILE	0x8E
+#define INTEL_FAM6_KABYLAKE_DESKTOP	0x9E
+
+/* "Small Core" Processors (Atom) */
+
+#define INTEL_FAM6_ATOM_PINEVIEW	0x1C
+#define INTEL_FAM6_ATOM_LINCROFT	0x26
+#define INTEL_FAM6_ATOM_PENWELL		0x27
+#define INTEL_FAM6_ATOM_CLOVERVIEW	0x35
+#define INTEL_FAM6_ATOM_CEDARVIEW	0x36
+#define INTEL_FAM6_ATOM_SILVERMONT1	0x37 /* BayTrail/BYT / Valleyview */
+#define INTEL_FAM6_ATOM_SILVERMONT2	0x4D /* Avaton/Rangely */
+#define INTEL_FAM6_ATOM_AIRMONT		0x4C /* CherryTrail / Braswell */
+#define INTEL_FAM6_ATOM_MERRIFIELD1	0x4A /* Tangier */
+#define INTEL_FAM6_ATOM_MERRIFIELD2	0x5A /* Annidale */
+#define INTEL_FAM6_ATOM_GOLDMONT	0x5C
+#define INTEL_FAM6_ATOM_DENVERTON	0x5F /* Goldmont Microserver */
+
+/* Xeon Phi */
+
+#define INTEL_FAM6_XEON_PHI_KNL		0x57 /* Knights Landing */
+
+#endif /* _ASM_X86_INTEL_FAMILY_H */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] PM / sleep: declare __tracedata symbols as char[] rather than char
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (205 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] can: af_can: canfd_rcv(): " Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] time: Avoid undefined behaviour in ktime_add_safe() Sasha Levin
                   ` (309 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Biggers, Rafael J . Wysocki, Sasha Levin

From: Eric Biggers <ebiggers3@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f97238373b8662a6d580e204df2e7bcbfa43e27a ]

Accessing more than one byte from a symbol declared simply 'char' is undefined
behavior, as reported by UBSAN:

	UBSAN: Undefined behaviour in drivers/base/power/trace.c:178:18
	load of address ffffffff8203fc78 with insufficient space
	for an object of type 'char'

Avoid this by declaring the symbols as arrays.

Signed-off-by: Eric Biggers <ebiggers3@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/base/power/trace.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/base/power/trace.c b/drivers/base/power/trace.c
index a311cfa4c5bd..a6975795e7f3 100644
--- a/drivers/base/power/trace.c
+++ b/drivers/base/power/trace.c
@@ -166,14 +166,14 @@ void generate_pm_trace(const void *tracedata, unsigned int user)
 }
 EXPORT_SYMBOL(generate_pm_trace);
 
-extern char __tracedata_start, __tracedata_end;
+extern char __tracedata_start[], __tracedata_end[];
 static int show_file_hash(unsigned int value)
 {
 	int match;
 	char *tracedata;
 
 	match = 0;
-	for (tracedata = &__tracedata_start ; tracedata < &__tracedata_end ;
+	for (tracedata = __tracedata_start ; tracedata < __tracedata_end ;
 			tracedata += 2 + sizeof(unsigned long)) {
 		unsigned short lineno = *(unsigned short *)tracedata;
 		const char *file = *(const char **)(tracedata + 2);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] can: af_can: canfd_rcv(): replace WARN_ONCE by pr_warn_once
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (204 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] can: af_can: can_rcv(): replace WARN_ONCE by pr_warn_once Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] PM / sleep: declare __tracedata symbols as char[] rather than char Sasha Levin
                   ` (310 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Marc Kleine-Budde, Sasha Levin

From: Marc Kleine-Budde <mkl@pengutronix.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d4689846881d160a4d12a514e991a740bcb5d65a ]

If an invalid CANFD frame is received, from a driver or from a tun
interface, a Kernel warning is generated.

This patch replaces the WARN_ONCE by a simple pr_warn_once, so that a
kernel, bootet with panic_on_warn, does not panic. A printk seems to be
more appropriate here.

Reported-by: syzbot+e3b775f40babeff6e68b@syzkaller.appspotmail.com
Suggested-by: Dmitry Vyukov <dvyukov@google.com>
Acked-by: Oliver Hartkopp <socketcan@hartkopp.net>
Cc: linux-stable <stable@vger.kernel.org>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/can/af_can.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/net/can/af_can.c b/net/can/af_can.c
index 05336748579c..2a55c0ce9490 100644
--- a/net/can/af_can.c
+++ b/net/can/af_can.c
@@ -737,13 +737,12 @@ static int canfd_rcv(struct sk_buff *skb, struct net_device *dev,
 	if (unlikely(!net_eq(dev_net(dev), &init_net)))
 		goto drop;
 
-	if (WARN_ONCE(dev->type != ARPHRD_CAN ||
-		      skb->len != CANFD_MTU ||
-		      cfd->len > CANFD_MAX_DLEN,
-		      "PF_CAN: dropped non conform CAN FD skbuf: "
-		      "dev type %d, len %d, datalen %d\n",
-		      dev->type, skb->len, cfd->len))
+	if (unlikely(dev->type != ARPHRD_CAN || skb->len != CANFD_MTU ||
+		     cfd->len > CANFD_MAX_DLEN)) {
+		pr_warn_once("PF_CAN: dropped non conform CAN FD skbuf: dev type %d, len %d, datalen %d\n",
+			     dev->type, skb->len, cfd->len);
 		goto drop;
+	}
 
 	can_receive(skb, dev);
 	return NET_RX_SUCCESS;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] drivers: base: cacheinfo: fix x86 with CONFIG_OF enabled
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (207 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] time: Avoid undefined behaviour in ktime_add_safe() Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] fs/select: add vmalloc fallback for select(2) Sasha Levin
                   ` (307 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Sudeep Holla, Greg Kroah-Hartman, Sasha Levin

From: Sudeep Holla <sudeep.holla@arm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fac51482577d5e05bbb0efa8d602a3c2111098bf ]

With CONFIG_OF enabled on x86, we get the following error on boot:
"
	Failed to find cpu0 device node
 	Unable to detect cache hierarchy from DT for CPU 0
"
and the cacheinfo fails to get populated in the corresponding sysfs
entries. This is because cache_setup_of_node looks for of_node for
setting up the shared cpu_map without checking that it's already
populated in the architecture specific callback.

In order to indicate that the shared cpu_map is already populated, this
patch introduces a boolean `cpu_map_populated` in struct cpu_cacheinfo
that can be used by the generic code to skip cache_shared_cpu_map_setup.

This patch also sets that boolean for x86.

Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kernel/cpu/intel_cacheinfo.c | 2 ++
 drivers/base/cacheinfo.c              | 3 +++
 include/linux/cacheinfo.h             | 1 +
 3 files changed, 6 insertions(+)

diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c
index edcb0e28c336..13fb13334f2a 100644
--- a/arch/x86/kernel/cpu/intel_cacheinfo.c
+++ b/arch/x86/kernel/cpu/intel_cacheinfo.c
@@ -934,6 +934,8 @@ static int __populate_cache_leaves(unsigned int cpu)
 		ci_leaf_init(this_leaf++, &id4_regs);
 		__cache_cpumap_setup(cpu, idx, &id4_regs);
 	}
+	this_cpu_ci->cpu_map_populated = true;
+
 	return 0;
 }
 
diff --git a/drivers/base/cacheinfo.c b/drivers/base/cacheinfo.c
index fdba441457ec..3f5fb95b0f4c 100644
--- a/drivers/base/cacheinfo.c
+++ b/drivers/base/cacheinfo.c
@@ -106,6 +106,9 @@ static int cache_shared_cpu_map_setup(unsigned int cpu)
 	unsigned int index;
 	int ret;
 
+	if (this_cpu_ci->cpu_map_populated)
+		return 0;
+
 	ret = cache_setup_of_node(cpu);
 	if (ret)
 		return ret;
diff --git a/include/linux/cacheinfo.h b/include/linux/cacheinfo.h
index 3daf5ed392c9..4b97ae264388 100644
--- a/include/linux/cacheinfo.h
+++ b/include/linux/cacheinfo.h
@@ -71,6 +71,7 @@ struct cpu_cacheinfo {
 	struct cacheinfo *info_list;
 	unsigned int num_levels;
 	unsigned int num_leaves;
+	bool cpu_map_populated;
 };
 
 /*
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] time: Avoid undefined behaviour in ktime_add_safe()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (206 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] PM / sleep: declare __tracedata symbols as char[] rather than char Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] drivers: base: cacheinfo: fix x86 with CONFIG_OF enabled Sasha Levin
                   ` (308 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Vegard Nossum, John Stultz, Sasha Levin

From: Vegard Nossum <vegard.nossum@oracle.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 979515c5645830465739254abc1b1648ada41518 ]

I ran into this:

    ================================================================================
    UBSAN: Undefined behaviour in kernel/time/hrtimer.c:310:16
    signed integer overflow:
    9223372036854775807 + 50000 cannot be represented in type 'long long int'
    CPU: 2 PID: 4798 Comm: trinity-c2 Not tainted 4.8.0-rc1+ #91
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.3-0-ge2fc41e-prebuilt.qemu-project.org 04/01/2014
     0000000000000000 ffff88010ce6fb88 ffffffff82344740 0000000041b58ab3
     ffffffff84f97a20 ffffffff82344694 ffff88010ce6fbb0 ffff88010ce6fb60
     000000000000c350 ffff88010ce6f968 dffffc0000000000 ffffffff857bc320
    Call Trace:
     [<ffffffff82344740>] dump_stack+0xac/0xfc
     [<ffffffff82344694>] ? _atomic_dec_and_lock+0xc4/0xc4
     [<ffffffff8242df78>] ubsan_epilogue+0xd/0x8a
     [<ffffffff8242e6b4>] handle_overflow+0x202/0x23d
     [<ffffffff8242e4b2>] ? val_to_string.constprop.6+0x11e/0x11e
     [<ffffffff8236df71>] ? timerqueue_add+0x151/0x410
     [<ffffffff81485c48>] ? hrtimer_start_range_ns+0x3b8/0x1380
     [<ffffffff81795631>] ? memset+0x31/0x40
     [<ffffffff8242e6fd>] __ubsan_handle_add_overflow+0xe/0x10
     [<ffffffff81488ac9>] hrtimer_nanosleep+0x5d9/0x790
     [<ffffffff814884f0>] ? hrtimer_init_sleeper+0x80/0x80
     [<ffffffff813a9ffb>] ? __might_sleep+0x5b/0x260
     [<ffffffff8148be10>] common_nsleep+0x20/0x30
     [<ffffffff814906c7>] SyS_clock_nanosleep+0x197/0x210
     [<ffffffff81490530>] ? SyS_clock_getres+0x150/0x150
     [<ffffffff823c7113>] ? __this_cpu_preempt_check+0x13/0x20
     [<ffffffff8162ef60>] ? __context_tracking_exit.part.3+0x30/0x1b0
     [<ffffffff81490530>] ? SyS_clock_getres+0x150/0x150
     [<ffffffff81007bd3>] do_syscall_64+0x1b3/0x4b0
     [<ffffffff845f85aa>] entry_SYSCALL64_slow_path+0x25/0x25
    ================================================================================

Add a new ktime_add_unsafe() helper which doesn't check for overflow, but
doesn't throw a UBSAN warning when it does overflow either.

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Prarit Bhargava <prarit@redhat.com>
Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/linux/ktime.h | 7 +++++++
 kernel/time/hrtimer.c | 2 +-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/include/linux/ktime.h b/include/linux/ktime.h
index 2b6a204bd8d4..3ffc69ebe967 100644
--- a/include/linux/ktime.h
+++ b/include/linux/ktime.h
@@ -63,6 +63,13 @@ static inline ktime_t ktime_set(const s64 secs, const unsigned long nsecs)
 #define ktime_add(lhs, rhs) \
 		({ (ktime_t){ .tv64 = (lhs).tv64 + (rhs).tv64 }; })
 
+/*
+ * Same as ktime_add(), but avoids undefined behaviour on overflow; however,
+ * this means that you must check the result for overflow yourself.
+ */
+#define ktime_add_unsafe(lhs, rhs) \
+		({ (ktime_t){ .tv64 = (u64) (lhs).tv64 + (rhs).tv64 }; })
+
 /*
  * Add a ktime_t variable and a scalar nanosecond value.
  * res = kt + nsval:
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
index 93ef7190bdea..e82a5f40a0ac 100644
--- a/kernel/time/hrtimer.c
+++ b/kernel/time/hrtimer.c
@@ -292,7 +292,7 @@ EXPORT_SYMBOL_GPL(__ktime_divns);
  */
 ktime_t ktime_add_safe(const ktime_t lhs, const ktime_t rhs)
 {
-	ktime_t res = ktime_add(lhs, rhs);
+	ktime_t res = ktime_add_unsafe(lhs, rhs);
 
 	/*
 	 * We use KTIME_SEC_MAX here, the maximum timeout which we can
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] fs/select: add vmalloc fallback for select(2)
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (208 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] drivers: base: cacheinfo: fix x86 with CONFIG_OF enabled Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] hwpoison, memcg: forcibly uncharge LRU pages Sasha Levin
                   ` (306 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Vlastimil Babka, Andrew Morton, Linus Torvalds, Sasha Levin

From: Vlastimil Babka <vbabka@suse.cz>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 2d19309cf86883f634a4f8ec55a54bda87db19bf ]

The select(2) syscall performs a kmalloc(size, GFP_KERNEL) where size grows
with the number of fds passed. We had a customer report page allocation
failures of order-4 for this allocation. This is a costly order, so it might
easily fail, as the VM expects such allocation to have a lower-order fallback.

Such trivial fallback is vmalloc(), as the memory doesn't have to be physically
contiguous and the allocation is temporary for the duration of the syscall
only. There were some concerns, whether this would have negative impact on the
system by exposing vmalloc() to userspace. Although an excessive use of vmalloc
can cause some system wide performance issues - TLB flushes etc. - a large
order allocation is not for free either and an excessive reclaim/compaction can
have a similar effect. Also note that the size is effectively limited by
RLIMIT_NOFILE which defaults to 1024 on the systems I checked. That means the
bitmaps will fit well within single page and thus the vmalloc() fallback could
be only excercised for processes where root allows a higher limit.

Note that the poll(2) syscall seems to use a linked list of order-0 pages, so
it doesn't need this kind of fallback.

[eric.dumazet@gmail.com: fix failure path logic]
[akpm@linux-foundation.org: use proper type for size]
Link: http://lkml.kernel.org/r/20160927084536.5923-1-vbabka@suse.cz
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Cc: David Laight <David.Laight@ACULAB.COM>
Cc: Hillf Danton <hillf.zj@alibaba-inc.com>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Jason Baron <jbaron@akamai.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/select.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/fs/select.c b/fs/select.c
index f684c750e08a..f7e6fc7bf83c 100644
--- a/fs/select.c
+++ b/fs/select.c
@@ -29,6 +29,7 @@
 #include <linux/sched/rt.h>
 #include <linux/freezer.h>
 #include <net/busy_poll.h>
+#include <linux/vmalloc.h>
 
 #include <asm/uaccess.h>
 
@@ -550,7 +551,7 @@ int core_sys_select(int n, fd_set __user *inp, fd_set __user *outp,
 	fd_set_bits fds;
 	void *bits;
 	int ret, max_fds;
-	unsigned int size;
+	size_t size, alloc_size;
 	struct fdtable *fdt;
 	/* Allocate small arguments on the stack to save memory and be faster */
 	long stack_fds[SELECT_STACK_ALLOC/sizeof(long)];
@@ -577,7 +578,14 @@ int core_sys_select(int n, fd_set __user *inp, fd_set __user *outp,
 	if (size > sizeof(stack_fds) / 6) {
 		/* Not enough space in on-stack array; must use kmalloc */
 		ret = -ENOMEM;
-		bits = kmalloc(6 * size, GFP_KERNEL);
+		if (size > (SIZE_MAX / 6))
+			goto out_nofds;
+
+		alloc_size = 6 * size;
+		bits = kmalloc(alloc_size, GFP_KERNEL|__GFP_NOWARN);
+		if (!bits && alloc_size > PAGE_SIZE)
+			bits = vmalloc(alloc_size);
+
 		if (!bits)
 			goto out_nofds;
 	}
@@ -614,7 +622,7 @@ int core_sys_select(int n, fd_set __user *inp, fd_set __user *outp,
 
 out:
 	if (bits != stack_fds)
-		kfree(bits);
+		kvfree(bits);
 out_nofds:
 	return ret;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] hwpoison, memcg: forcibly uncharge LRU pages
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (209 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] fs/select: add vmalloc fallback for select(2) Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] mm/mmap.c: do not blow on PROT_NONE MAP_FIXED holes in the stack Sasha Levin
                   ` (305 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Michal Hocko, Andrew Morton, Linus Torvalds, Sasha Levin

From: Michal Hocko <mhocko@suse.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 18365225f0440d09708ad9daade2ec11275c3df9 ]

Laurent Dufour has noticed that hwpoinsoned pages are kept charged.  In
his particular case he has hit a bad_page("page still charged to
cgroup") when onlining a hwpoison page.  While this looks like something
that shouldn't happen in the first place because onlining hwpages and
returning them to the page allocator makes only little sense it shows a
real problem.

hwpoison pages do not get freed usually so we do not uncharge them (at
least not since commit 0a31bc97c80c ("mm: memcontrol: rewrite uncharge
API")).  Each charge pins memcg (since e8ea14cc6ead ("mm: memcontrol:
take a css reference for each charged page")) as well and so the
mem_cgroup and the associated state will never go away.  Fix this leak
by forcibly uncharging a LRU hwpoisoned page in delete_from_lru_cache().
We also have to tweak uncharge_list because it cannot rely on zero ref
count for these pages.

[akpm@linux-foundation.org: coding-style fixes]
Fixes: 0a31bc97c80c ("mm: memcontrol: rewrite uncharge API")
Link: http://lkml.kernel.org/r/20170502185507.GB19165@dhcp22.suse.cz
Signed-off-by: Michal Hocko <mhocko@suse.com>
Reported-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
Tested-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
Reviewed-by: Balbir Singh <bsingharora@gmail.com>
Reviewed-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 mm/memcontrol.c     | 2 +-
 mm/memory-failure.c | 7 +++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 221762e24a68..696b5bbac2e0 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -5641,7 +5641,7 @@ static void uncharge_list(struct list_head *page_list)
 		next = page->lru.next;
 
 		VM_BUG_ON_PAGE(PageLRU(page), page);
-		VM_BUG_ON_PAGE(page_count(page), page);
+		VM_BUG_ON_PAGE(!PageHWPoison(page) && page_count(page), page);
 
 		if (!page->mem_cgroup)
 			continue;
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index 321f5632c17b..7c57635958f2 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -582,6 +582,13 @@ static int delete_from_lru_cache(struct page *p)
 		 */
 		ClearPageActive(p);
 		ClearPageUnevictable(p);
+
+		/*
+		 * Poisoned page might never drop its ref count to 0 so we have
+		 * to uncharge it manually from its memcg.
+		 */
+		mem_cgroup_uncharge(p);
+
 		/*
 		 * drop the page count elevated by isolate_lru_page()
 		 */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mm/mmap.c: do not blow on PROT_NONE MAP_FIXED holes in the stack
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (210 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] hwpoison, memcg: forcibly uncharge LRU pages Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] cma: fix calculation of aligned offset Sasha Levin
                   ` (304 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Michal Hocko, Andrew Morton, Linus Torvalds, Sasha Levin

From: Michal Hocko <mhocko@suse.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 561b5e0709e4a248c67d024d4d94b6e31e3edf2f ]

Commit 1be7107fbe18 ("mm: larger stack guard gap, between vmas") has
introduced a regression in some rust and Java environments which are
trying to implement their own stack guard page.  They are punching a new
MAP_FIXED mapping inside the existing stack Vma.

This will confuse expand_{downwards,upwards} into thinking that the
stack expansion would in fact get us too close to an existing non-stack
vma which is a correct behavior wrt safety.  It is a real regression on
the other hand.

Let's work around the problem by considering PROT_NONE mapping as a part
of the stack.  This is a gros hack but overflowing to such a mapping
would trap anyway an we only can hope that usespace knows what it is
doing and handle it propely.

Fixes: 1be7107fbe18 ("mm: larger stack guard gap, between vmas")
Link: http://lkml.kernel.org/r/20170705182849.GA18027@dhcp22.suse.cz
Signed-off-by: Michal Hocko <mhocko@suse.com>
Debugged-by: Vlastimil Babka <vbabka@suse.cz>
Cc: Ben Hutchings <ben@decadent.org.uk>
Cc: Willy Tarreau <w@1wt.eu>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Rik van Riel <riel@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 mm/mmap.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/mm/mmap.c b/mm/mmap.c
index 1094833d0e82..d730c1b91a12 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -2179,7 +2179,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
 	if (gap_addr < address)
 		return -ENOMEM;
 	next = vma->vm_next;
-	if (next && next->vm_start < gap_addr) {
+	if (next && next->vm_start < gap_addr &&
+			(next->vm_flags & (VM_WRITE|VM_READ|VM_EXEC))) {
 		if (!(next->vm_flags & VM_GROWSUP))
 			return -ENOMEM;
 		/* Check that both stack segments have the same anon_vma? */
@@ -2260,7 +2261,8 @@ int expand_downwards(struct vm_area_struct *vma,
 	if (gap_addr > address)
 		return -ENOMEM;
 	prev = vma->vm_prev;
-	if (prev && prev->vm_end > gap_addr) {
+	if (prev && prev->vm_end > gap_addr &&
+			(prev->vm_flags & (VM_WRITE|VM_READ|VM_EXEC))) {
 		if (!(prev->vm_flags & VM_GROWSDOWN))
 			return -ENOMEM;
 		/* Check that both stack segments have the same anon_vma? */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] cma: fix calculation of aligned offset
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (211 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] mm/mmap.c: do not blow on PROT_NONE MAP_FIXED holes in the stack Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ipc: msg, make msgrcv work with LONG_MIN Sasha Levin
                   ` (303 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Doug Berger, Angus Clark, Andrew Morton, Linus Torvalds, Sasha Levin

From: Doug Berger <opendmb@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e048cb32f69038aa1c8f11e5c1b331be4181659d ]

The align_offset parameter is used by bitmap_find_next_zero_area_off()
to represent the offset of map's base from the previous alignment
boundary; the function ensures that the returned index, plus the
align_offset, honors the specified align_mask.

The logic introduced by commit b5be83e308f7 ("mm: cma: align to physical
address, not CMA region position") has the cma driver calculate the
offset to the *next* alignment boundary.  In most cases, the base
alignment is greater than that specified when making allocations,
resulting in a zero offset whether we align up or down.  In the example
given with the commit, the base alignment (8MB) was half the requested
alignment (16MB) so the math also happened to work since the offset is
8MB in both directions.  However, when requesting allocations with an
alignment greater than twice that of the base, the returned index would
not be correctly aligned.

Also, the align_order arguments of cma_bitmap_aligned_mask() and
cma_bitmap_aligned_offset() should not be negative so the argument type
was made unsigned.

Fixes: b5be83e308f7 ("mm: cma: align to physical address, not CMA region position")
Link: http://lkml.kernel.org/r/20170628170742.2895-1-opendmb@gmail.com
Signed-off-by: Angus Clark <angus@angusclark.org>
Signed-off-by: Doug Berger <opendmb@gmail.com>
Acked-by: Gregory Fong <gregory.0xf0@gmail.com>
Cc: Doug Berger <opendmb@gmail.com>
Cc: Angus Clark <angus@angusclark.org>
Cc: Laura Abbott <labbott@redhat.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Lucas Stach <l.stach@pengutronix.de>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Shiraz Hashim <shashim@codeaurora.org>
Cc: Jaewon Kim <jaewon31.kim@samsung.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 mm/cma.c | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/mm/cma.c b/mm/cma.c
index 3a7a67b93394..3b4e38689202 100644
--- a/mm/cma.c
+++ b/mm/cma.c
@@ -54,7 +54,7 @@ unsigned long cma_get_size(const struct cma *cma)
 }
 
 static unsigned long cma_bitmap_aligned_mask(const struct cma *cma,
-					     int align_order)
+					     unsigned int align_order)
 {
 	if (align_order <= cma->order_per_bit)
 		return 0;
@@ -62,17 +62,14 @@ static unsigned long cma_bitmap_aligned_mask(const struct cma *cma,
 }
 
 /*
- * Find a PFN aligned to the specified order and return an offset represented in
- * order_per_bits.
+ * Find the offset of the base PFN from the specified align_order.
+ * The value returned is represented in order_per_bits.
  */
 static unsigned long cma_bitmap_aligned_offset(const struct cma *cma,
-					       int align_order)
+					       unsigned int align_order)
 {
-	if (align_order <= cma->order_per_bit)
-		return 0;
-
-	return (ALIGN(cma->base_pfn, (1UL << align_order))
-		- cma->base_pfn) >> cma->order_per_bit;
+	return (cma->base_pfn & ((1UL << align_order) - 1))
+		>> cma->order_per_bit;
 }
 
 static unsigned long cma_bitmap_pages_to_bits(const struct cma *cma,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ipc: msg, make msgrcv work with LONG_MIN
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (212 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] cma: fix calculation of aligned offset Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/ioapic: Fix incorrect pointers in ioapic_setup_resources() Sasha Levin
                   ` (302 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Jiri Slaby, Andrew Morton, Linus Torvalds, Sasha Levin

From: Jiri Slaby <jslaby@suse.cz>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 999898355e08ae3b92dfd0a08db706e0c6703d30 ]

When LONG_MIN is passed to msgrcv, one would expect to recieve any
message.  But convert_mode does *msgtyp = -*msgtyp and -LONG_MIN is
undefined.  In particular, with my gcc -LONG_MIN produces -LONG_MIN
again.

So handle this case properly by assigning LONG_MAX to *msgtyp if
LONG_MIN was specified as msgtyp to msgrcv.

This code:
  long msg[] = { 100, 200 };
  int m = msgget(IPC_PRIVATE, IPC_CREAT | 0644);
  msgsnd(m, &msg, sizeof(msg), 0);
  msgrcv(m, &msg, sizeof(msg), LONG_MIN, 0);

produces currently nothing:

  msgget(IPC_PRIVATE, IPC_CREAT|0644)     = 65538
  msgsnd(65538, {100, "\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}, 16, 0) = 0
  msgrcv(65538, ...

Except a UBSAN warning:

  UBSAN: Undefined behaviour in ipc/msg.c:745:13
  negation of -9223372036854775808 cannot be represented in type 'long int':

With the patch, I see what I expect:

  msgget(IPC_PRIVATE, IPC_CREAT|0644)     = 0
  msgsnd(0, {100, "\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}, 16, 0) = 0
  msgrcv(0, {100, "\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}, 16, -9223372036854775808, 0) = 16

Link: http://lkml.kernel.org/r/20161024082633.10148-1-jslaby@suse.cz
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: Manfred Spraul <manfred@colorfullife.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 ipc/msg.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/ipc/msg.c b/ipc/msg.c
index 3b2b0f5149ab..55730c74a42a 100644
--- a/ipc/msg.c
+++ b/ipc/msg.c
@@ -740,7 +740,10 @@ static inline int convert_mode(long *msgtyp, int msgflg)
 	if (*msgtyp == 0)
 		return SEARCH_ANY;
 	if (*msgtyp < 0) {
-		*msgtyp = -*msgtyp;
+		if (*msgtyp == LONG_MIN) /* -LONG_MIN is undefined */
+			*msgtyp = LONG_MAX;
+		else
+			*msgtyp = -*msgtyp;
 		return SEARCH_LESSEQUAL;
 	}
 	if (msgflg & MSG_EXCEPT)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/ioapic: Fix incorrect pointers in ioapic_setup_resources()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (213 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ipc: msg, make msgrcv work with LONG_MIN Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ACPI / processor: Avoid reserving IO regions too early Sasha Levin
                   ` (301 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Rui Wang, Thomas Gleixner, Ingo Molnar, Sasha Levin

From: Rui Wang <rui.y.wang@intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9d98bcec731756b8688b59ec998707924d716d7b ]

On a 4-socket Brickland system, hot-removing one ioapic is fine.
Hot-removing the 2nd one causes panic in mp_unregister_ioapic()
while calling release_resource().

It is because the iomem_res pointer has already been released
when removing the first ioapic.

To explain the use of &res[num] here: res is assigned to ioapic_resources,
and later in ioapic_insert_resources() we do:

	struct resource *r = ioapic_resources;

        for_each_ioapic(i) {
                insert_resource(&iomem_resource, r);
                r++;
        }

Here 'r' is treated as an arry of 'struct resource', and the r++ ensures
that each element of the array is inserted separately. Thus we should call
release_resouce() on each element at &res[num].

Fix it by assigning the correct pointers to ioapics[i].iomem_res in
ioapic_setup_resources().

Signed-off-by: Rui Wang <rui.y.wang@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: tony.luck@intel.com
Cc: linux-pci@vger.kernel.org
Cc: rjw@rjwysocki.net
Cc: linux-acpi@vger.kernel.org
Cc: bhelgaas@google.com
Link: http://lkml.kernel.org/r/1465369193-4816-3-git-send-email-rui.y.wang@intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kernel/apic/io_apic.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index f4dc2462a1ac..484ffab4d3e8 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -2728,8 +2728,8 @@ static struct resource * __init ioapic_setup_resources(void)
 		res[num].flags = IORESOURCE_MEM | IORESOURCE_BUSY;
 		snprintf(mem, IOAPIC_RESOURCE_NAME_SIZE, "IOAPIC %u", i);
 		mem += IOAPIC_RESOURCE_NAME_SIZE;
+		ioapics[i].iomem_res = &res[num];
 		num++;
-		ioapics[i].iomem_res = res;
 	}
 
 	ioapic_resources = res;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ACPI / processor: Avoid reserving IO regions too early
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (214 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/ioapic: Fix incorrect pointers in ioapic_setup_resources() Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: arp_tables: fix invoking 32bit "iptable -P INPUT ACCEPT" failed in 64bit kernel Sasha Levin
                   ` (300 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Rafael J. Wysocki, Sasha Levin

From: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 86314751c7945fa0c67f459beeda2e7c610ca429 ]

Roland Dreier reports that one of his systems cannot boot because of
the changes made by commit ac212b6980d8 (ACPI / processor: Use common
hotplug infrastructure).

The problematic part of it is the request_region() call in
acpi_processor_get_info() that used to run at module init time before
the above commit and now it runs much earlier.  Unfortunately, the
region(s) reserved by it fall into a range the PCI subsystem attempts
to reserve for AHCI IO BARs.  As a result, the PCI reservation fails
and AHCI doesn't work, while previously the PCI reservation would
be made before acpi_processor_get_info() and it would succeed.

That request_region() call, however, was overlooked by commit
ac212b6980d8, as it is not necessary for the enumeration of the
processors.  It only is needed when the ACPI processor driver
actually attempts to handle them which doesn't happen before
loading the ACPI processor driver module.  Therefore that call
should have been moved from acpi_processor_get_info() into that
module.

Address the problem by moving the request_region() call in question
out of acpi_processor_get_info() and use the observation that the
region reserved by it is only needed if the FADT-based CPU
throttling method is going to be used, which means that it should
be sufficient to invoke it from acpi_processor_get_throttling_fadt().

Fixes: ac212b6980d8 (ACPI / processor: Use common hotplug infrastructure)
Reported-by: Roland Dreier <roland@purestorage.com>
Tested-by: Roland Dreier <roland@purestorage.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/acpi/acpi_processor.c       | 9 ---------
 drivers/acpi/processor_throttling.c | 9 +++++++++
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c
index 568f2b942aac..0272d53d5bcb 100644
--- a/drivers/acpi/acpi_processor.c
+++ b/drivers/acpi/acpi_processor.c
@@ -315,15 +315,6 @@ static int acpi_processor_get_info(struct acpi_device *device)
 		pr->throttling.duty_width = acpi_gbl_FADT.duty_width;
 
 		pr->pblk = object.processor.pblk_address;
-
-		/*
-		 * We don't care about error returns - we just try to mark
-		 * these reserved so that nobody else is confused into thinking
-		 * that this region might be unused..
-		 *
-		 * (In particular, allocating the IO range for Cardbus)
-		 */
-		request_region(pr->throttling.address, 6, "ACPI CPU throttle");
 	}
 
 	/*
diff --git a/drivers/acpi/processor_throttling.c b/drivers/acpi/processor_throttling.c
index 84243c32e29c..f3df4b5e5fc9 100644
--- a/drivers/acpi/processor_throttling.c
+++ b/drivers/acpi/processor_throttling.c
@@ -680,6 +680,15 @@ static int acpi_processor_get_throttling_fadt(struct acpi_processor *pr)
 	if (!pr->flags.throttling)
 		return -ENODEV;
 
+	/*
+	 * We don't care about error returns - we just try to mark
+	 * these reserved so that nobody else is confused into thinking
+	 * that this region might be unused..
+	 *
+	 * (In particular, allocating the IO range for Cardbus)
+	 */
+	request_region(pr->throttling.address, 6, "ACPI CPU throttle");
+
 	pr->throttling.state = 0;
 
 	duty_mask = pr->throttling.state_count - 1;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: arp_tables: fix invoking 32bit "iptable -P INPUT ACCEPT" failed in 64bit kernel
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (215 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ACPI / processor: Avoid reserving IO regions too early Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: nf_ct_expect: remove the redundant slash when policy name is empty Sasha Levin
                   ` (299 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Hongxu Jia, Pablo Neira Ayuso, Sasha Levin

From: Hongxu Jia <hongxu.jia@windriver.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 17a49cd549d9dc8707dc9262210166455c612dde ]

Since 09d9686047db ("netfilter: x_tables: do compat validation via
translate_table"), it used compatr structure to assign newinfo
structure.  In translate_compat_table of ip_tables.c and ip6_tables.c,
it used compatr->hook_entry to replace info->hook_entry and
compatr->underflow to replace info->underflow, but not do the same
replacement in arp_tables.c.

It caused invoking 32-bit "arptbale -P INPUT ACCEPT" failed in 64bit
kernel.
--------------------------------------
root@qemux86-64:~# arptables -P INPUT ACCEPT
root@qemux86-64:~# arptables -P INPUT ACCEPT
ERROR: Policy for `INPUT' offset 448 != underflow 0
arptables: Incompatible with this kernel
--------------------------------------

Fixes: 09d9686047db ("netfilter: x_tables: do compat validation via translate_table")
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
Acked-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>

Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv4/netfilter/arp_tables.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c
index ebf5821caefb..7510a851d316 100644
--- a/net/ipv4/netfilter/arp_tables.c
+++ b/net/ipv4/netfilter/arp_tables.c
@@ -1330,8 +1330,8 @@ static int translate_compat_table(struct xt_table_info **pinfo,
 
 	newinfo->number = compatr->num_entries;
 	for (i = 0; i < NF_ARP_NUMHOOKS; i++) {
-		newinfo->hook_entry[i] = info->hook_entry[i];
-		newinfo->underflow[i] = info->underflow[i];
+		newinfo->hook_entry[i] = compatr->hook_entry[i];
+		newinfo->underflow[i] = compatr->underflow[i];
 	}
 	entry1 = newinfo->entries[raw_smp_processor_id()];
 	pos = entry1;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: nf_ct_expect: remove the redundant slash when policy name is empty
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (216 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: arp_tables: fix invoking 32bit "iptable -P INPUT ACCEPT" failed in 64bit kernel Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: restart search if moved to other chain Sasha Levin
                   ` (298 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Liping Zhang, Pablo Neira Ayuso, Sasha Levin

From: Liping Zhang <liping.zhang@spreadtrum.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b173a28f62cf929324a8a6adcc45adadce311d16 ]

The 'name' filed in struct nf_conntrack_expect_policy{} is not a
pointer, so check it is NULL or not will always return true. Even if the
name is empty, slash will always be displayed like follows:
  # cat /proc/net/nf_conntrack_expect
  297 l3proto = 2 proto=6 src=1.1.1.1 dst=2.2.2.2 sport=1 dport=1025 ftp/
                                                                        ^

Fixes: 3a8fc53a45c4 ("netfilter: nf_ct_helper: allocate 16 bytes for the helper and policy names")
Signed-off-by: Liping Zhang <liping.zhang@spreadtrum.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netfilter/nf_conntrack_expect.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/netfilter/nf_conntrack_expect.c b/net/netfilter/nf_conntrack_expect.c
index 4f4c88d70a8f..cba342b37b62 100644
--- a/net/netfilter/nf_conntrack_expect.c
+++ b/net/netfilter/nf_conntrack_expect.c
@@ -557,7 +557,7 @@ static int exp_seq_show(struct seq_file *s, void *v)
 	helper = rcu_dereference(nfct_help(expect->master)->helper);
 	if (helper) {
 		seq_printf(s, "%s%s", expect->flags ? " " : "", helper->name);
-		if (helper->expect_policy[expect->class].name)
+		if (helper->expect_policy[expect->class].name[0])
 			seq_printf(s, "/%s",
 				   helper->expect_policy[expect->class].name);
 	}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: restart search if moved to other chain
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (217 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: nf_ct_expect: remove the redundant slash when policy name is empty Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: nf_conntrack_sip: extend request line validation Sasha Levin
                   ` (297 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Florian Westphal, Pablo Neira Ayuso, Sasha Levin

From: Florian Westphal <fw@strlen.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 95a8d19f28e6b29377a880c6264391a62e07fccc ]

In case nf_conntrack_tuple_taken did not find a conflicting entry
check that all entries in this hash slot were tested and restart
in case an entry was moved to another chain.

Reported-by: Eric Dumazet <edumazet@google.com>
Fixes: ea781f197d6a ("netfilter: nf_conntrack: use SLAB_DESTROY_BY_RCU and get rid of call_rcu()")
Signed-off-by: Florian Westphal <fw@strlen.de>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netfilter/nf_conntrack_core.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index bc3f791845aa..e951ca98757e 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -695,6 +695,7 @@ nf_conntrack_tuple_taken(const struct nf_conntrack_tuple *tuple,
 	 * least once for the stats anyway.
 	 */
 	rcu_read_lock_bh();
+ begin:
 	hlist_nulls_for_each_entry_rcu(h, n, &net->ct.hash[hash], hnnode) {
 		ct = nf_ct_tuplehash_to_ctrack(h);
 		if (ct != ignored_conntrack &&
@@ -706,6 +707,12 @@ nf_conntrack_tuple_taken(const struct nf_conntrack_tuple *tuple,
 		}
 		NF_CT_STAT_INC(net, searched);
 	}
+
+	if (get_nulls_value(n) != hash) {
+		NF_CT_STAT_INC(net, search_restart);
+		goto begin;
+	}
+
 	rcu_read_unlock_bh();
 
 	return 0;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: nf_conntrack_sip: extend request line validation
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (218 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: restart search if moved to other chain Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: nfnetlink_cthelper: Add missing permission checks Sasha Levin
                   ` (296 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Ulrich Weber, Pablo Neira Ayuso, Sasha Levin

From: Ulrich Weber <ulrich.weber@riverbed.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 444f901742d054a4cd5ff045871eac5131646cfb ]

on SIP requests, so a fragmented TCP SIP packet from an allow header starting with
 INVITE,NOTIFY,OPTIONS,REFER,REGISTER,UPDATE,SUBSCRIBE
 Content-Length: 0

will not bet interpreted as an INVITE request. Also Request-URI must start with an alphabetic character.

Confirm with RFC 3261
 Request-Line   =  Method SP Request-URI SP SIP-Version CRLF

Fixes: 30f33e6dee80 ("[NETFILTER]: nf_conntrack_sip: support method specific request/response handling")
Signed-off-by: Ulrich Weber <ulrich.weber@riverbed.com>
Acked-by: Marco Angaroni <marcoangaroni@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netfilter/nf_conntrack_sip.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/net/netfilter/nf_conntrack_sip.c b/net/netfilter/nf_conntrack_sip.c
index 885b4aba3695..1665c2159e4b 100644
--- a/net/netfilter/nf_conntrack_sip.c
+++ b/net/netfilter/nf_conntrack_sip.c
@@ -1434,9 +1434,12 @@ static int process_sip_request(struct sk_buff *skb, unsigned int protoff,
 		handler = &sip_handlers[i];
 		if (handler->request == NULL)
 			continue;
-		if (*datalen < handler->len ||
+		if (*datalen < handler->len + 2 ||
 		    strncasecmp(*dptr, handler->method, handler->len))
 			continue;
+		if ((*dptr)[handler->len] != ' ' ||
+		    !isalpha((*dptr)[handler->len+1]))
+			continue;
 
 		if (ct_sip_get_header(ct, *dptr, 0, *datalen, SIP_HDR_CSEQ,
 				      &matchoff, &matchlen) <= 0) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: nfnetlink_cthelper: Add missing permission checks
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (219 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: nf_conntrack_sip: extend request line validation Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ext2: Don't clear SGID when inheriting ACLs Sasha Levin
                   ` (295 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Kevin Cernekee, Pablo Neira Ayuso, Sasha Levin

From: Kevin Cernekee <cernekee@chromium.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4b380c42f7d00a395feede754f0bc2292eebe6e5 ]

The capability check in nfnetlink_rcv() verifies that the caller
has CAP_NET_ADMIN in the namespace that "owns" the netlink socket.
However, nfnl_cthelper_list is shared by all net namespaces on the
system.  An unprivileged user can create user and net namespaces
in which he holds CAP_NET_ADMIN to bypass the netlink_net_capable()
check:

    $ nfct helper list
    nfct v1.4.4: netlink error: Operation not permitted
    $ vpnns -- nfct helper list
    {
            .name = ftp,
            .queuenum = 0,
            .l3protonum = 2,
            .l4protonum = 6,
            .priv_data_len = 24,
            .status = enabled,
    };

Add capable() checks in nfnetlink_cthelper, as this is cleaner than
trying to generalize the solution.

Signed-off-by: Kevin Cernekee <cernekee@chromium.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netfilter/nfnetlink_cthelper.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c
index 8d34a488efc0..ac143ae4f7b6 100644
--- a/net/netfilter/nfnetlink_cthelper.c
+++ b/net/netfilter/nfnetlink_cthelper.c
@@ -17,6 +17,7 @@
 #include <linux/types.h>
 #include <linux/list.h>
 #include <linux/errno.h>
+#include <linux/capability.h>
 #include <net/netlink.h>
 #include <net/sock.h>
 
@@ -392,6 +393,9 @@ nfnl_cthelper_new(struct sock *nfnl, struct sk_buff *skb,
 	struct nfnl_cthelper *nlcth;
 	int ret = 0;
 
+	if (!capable(CAP_NET_ADMIN))
+		return -EPERM;
+
 	if (!tb[NFCTH_NAME] || !tb[NFCTH_TUPLE])
 		return -EINVAL;
 
@@ -595,6 +599,9 @@ nfnl_cthelper_get(struct sock *nfnl, struct sk_buff *skb,
 	struct nfnl_cthelper *nlcth;
 	bool tuple_set = false;
 
+	if (!capable(CAP_NET_ADMIN))
+		return -EPERM;
+
 	if (nlh->nlmsg_flags & NLM_F_DUMP) {
 		struct netlink_dump_control c = {
 			.dump = nfnl_cthelper_dump_table,
@@ -661,6 +668,9 @@ nfnl_cthelper_del(struct sock *nfnl, struct sk_buff *skb,
 	struct nfnl_cthelper *nlcth, *n;
 	int j = 0, ret;
 
+	if (!capable(CAP_NET_ADMIN))
+		return -EPERM;
+
 	if (tb[NFCTH_NAME])
 		helper_name = nla_data(tb[NFCTH_NAME]);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: xt_osf: Add missing permission checks
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (221 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ext2: Don't clear SGID when inheriting ACLs Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] reiserfs: fix race in prealloc discard Sasha Levin
                   ` (293 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Kevin Cernekee, Pablo Neira Ayuso, Sasha Levin

From: Kevin Cernekee <cernekee@chromium.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 916a27901de01446bcf57ecca4783f6cff493309 ]

The capability check in nfnetlink_rcv() verifies that the caller
has CAP_NET_ADMIN in the namespace that "owns" the netlink socket.
However, xt_osf_fingers is shared by all net namespaces on the
system.  An unprivileged user can create user and net namespaces
in which he holds CAP_NET_ADMIN to bypass the netlink_net_capable()
check:

    vpnns -- nfnl_osf -f /tmp/pf.os

    vpnns -- nfnl_osf -f /tmp/pf.os -d

These non-root operations successfully modify the systemwide OS
fingerprint list.  Add new capable() checks so that they can't.

Signed-off-by: Kevin Cernekee <cernekee@chromium.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netfilter/xt_osf.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/net/netfilter/xt_osf.c b/net/netfilter/xt_osf.c
index 0778855ea5e7..20f7bd64ad40 100644
--- a/net/netfilter/xt_osf.c
+++ b/net/netfilter/xt_osf.c
@@ -19,6 +19,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 
+#include <linux/capability.h>
 #include <linux/if.h>
 #include <linux/inetdevice.h>
 #include <linux/ip.h>
@@ -69,6 +70,9 @@ static int xt_osf_add_callback(struct sock *ctnl, struct sk_buff *skb,
 	struct xt_osf_finger *kf = NULL, *sf;
 	int err = 0;
 
+	if (!capable(CAP_NET_ADMIN))
+		return -EPERM;
+
 	if (!osf_attrs[OSF_ATTR_FINGER])
 		return -EINVAL;
 
@@ -112,6 +116,9 @@ static int xt_osf_remove_callback(struct sock *ctnl, struct sk_buff *skb,
 	struct xt_osf_finger *sf;
 	int err = -ENOENT;
 
+	if (!capable(CAP_NET_ADMIN))
+		return -EPERM;
+
 	if (!osf_attrs[OSF_ATTR_FINGER])
 		return -EINVAL;
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ext2: Don't clear SGID when inheriting ACLs
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (220 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: nfnetlink_cthelper: Add missing permission checks Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: xt_osf: Add missing permission checks Sasha Levin
                   ` (294 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jan Kara, Sasha Levin

From: Jan Kara <jack@suse.cz>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a992f2d38e4ce17b8c7d1f7f67b2de0eebdea069 ]

When new directory 'DIR1' is created in a directory 'DIR0' with SGID bit
set, DIR1 is expected to have SGID bit set (and owning group equal to
the owning group of 'DIR0'). However when 'DIR0' also has some default
ACLs that 'DIR1' inherits, setting these ACLs will result in SGID bit on
'DIR1' to get cleared if user is not member of the owning group.

Fix the problem by creating __ext2_set_acl() function that does not call
posix_acl_update_mode() and use it when inheriting ACLs. That prevents
SGID bit clearing and the mode has been properly set by
posix_acl_create() anyway.

Fixes: 073931017b49d9458aa351605b43a7e34598caef
CC: stable@vger.kernel.org
CC: linux-ext4@vger.kernel.org
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/ext2/acl.c | 36 ++++++++++++++++++++++--------------
 1 file changed, 22 insertions(+), 14 deletions(-)

diff --git a/fs/ext2/acl.c b/fs/ext2/acl.c
index d6aeb84e90b6..d882d873c5a3 100644
--- a/fs/ext2/acl.c
+++ b/fs/ext2/acl.c
@@ -178,11 +178,8 @@ ext2_get_acl(struct inode *inode, int type)
 	return acl;
 }
 
-/*
- * inode->i_mutex: down
- */
-int
-ext2_set_acl(struct inode *inode, struct posix_acl *acl, int type)
+static int
+__ext2_set_acl(struct inode *inode, struct posix_acl *acl, int type)
 {
 	int name_index;
 	void *value = NULL;
@@ -192,13 +189,6 @@ ext2_set_acl(struct inode *inode, struct posix_acl *acl, int type)
 	switch(type) {
 		case ACL_TYPE_ACCESS:
 			name_index = EXT2_XATTR_INDEX_POSIX_ACL_ACCESS;
-			if (acl) {
-				error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
-				if (error)
-					return error;
-				inode->i_ctime = CURRENT_TIME_SEC;
-				mark_inode_dirty(inode);
-			}
 			break;
 
 		case ACL_TYPE_DEFAULT:
@@ -224,6 +214,24 @@ ext2_set_acl(struct inode *inode, struct posix_acl *acl, int type)
 	return error;
 }
 
+/*
+ * inode->i_mutex: down
+ */
+int
+ext2_set_acl(struct inode *inode, struct posix_acl *acl, int type)
+{
+	int error;
+
+	if (type == ACL_TYPE_ACCESS && acl) {
+		error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
+		if (error)
+			return error;
+		inode->i_ctime = CURRENT_TIME_SEC;
+		mark_inode_dirty(inode);
+	}
+	return __ext2_set_acl(inode, acl, type);
+}
+
 /*
  * Initialize the ACLs of a new inode. Called from ext2_new_inode.
  *
@@ -241,12 +249,12 @@ ext2_init_acl(struct inode *inode, struct inode *dir)
 		return error;
 
 	if (default_acl) {
-		error = ext2_set_acl(inode, default_acl, ACL_TYPE_DEFAULT);
+		error = __ext2_set_acl(inode, default_acl, ACL_TYPE_DEFAULT);
 		posix_acl_release(default_acl);
 	}
 	if (acl) {
 		if (!error)
-			error = ext2_set_acl(inode, acl, ACL_TYPE_ACCESS);
+			error = __ext2_set_acl(inode, acl, ACL_TYPE_ACCESS);
 		posix_acl_release(acl);
 	}
 	return error;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] reiserfs: fix race in prealloc discard
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (222 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: xt_osf: Add missing permission checks Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] reiserfs: don't preallocate blocks for extended attributes Sasha Levin
                   ` (292 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jeff Mahoney, Jan Kara, Sasha Levin

From: Jeff Mahoney <jeffm@suse.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 08db141b5313ac2f64b844fb5725b8d81744b417 ]

The main loop in __discard_prealloc is protected by the reiserfs write lock
which is dropped across schedules like the BKL it replaced.  The problem is
that it checks the value, calls a routine that schedules, and then adjusts
the state.  As a result, two threads that are calling
reiserfs_prealloc_discard at the same time can race when one calls
reiserfs_free_prealloc_block, the lock is dropped, and the other calls
reiserfs_free_prealloc_block with the same block number.  In the right
circumstances, it can cause the prealloc count to go negative.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/reiserfs/bitmap.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/fs/reiserfs/bitmap.c b/fs/reiserfs/bitmap.c
index dc198bc64c61..73705d4bb069 100644
--- a/fs/reiserfs/bitmap.c
+++ b/fs/reiserfs/bitmap.c
@@ -513,9 +513,17 @@ static void __discard_prealloc(struct reiserfs_transaction_handle *th,
 			       "inode has negative prealloc blocks count.");
 #endif
 	while (ei->i_prealloc_count > 0) {
-		reiserfs_free_prealloc_block(th, inode, ei->i_prealloc_block);
-		ei->i_prealloc_block++;
+		b_blocknr_t block_to_free;
+
+		/*
+		 * reiserfs_free_prealloc_block can drop the write lock,
+		 * which could allow another caller to free the same block.
+		 * We can protect against it by modifying the prealloc
+		 * state before calling it.
+		 */
+		block_to_free = ei->i_prealloc_block++;
 		ei->i_prealloc_count--;
+		reiserfs_free_prealloc_block(th, inode, block_to_free);
 		dirty = 1;
 	}
 	if (dirty)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] reiserfs: don't preallocate blocks for extended attributes
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (223 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] reiserfs: fix race in prealloc discard Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] reiserfs: Don't clear SGID when inheriting ACLs Sasha Levin
                   ` (291 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jeff Mahoney, Jan Kara, Sasha Levin

From: Jeff Mahoney <jeffm@suse.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 54930dfeb46e978b447af0fb8ab4e181c1bf9d7a ]

Most extended attributes will fit in a single block.  More importantly,
we drop the reference to the inode while holding the transaction open
so the preallocated blocks aren't released.  As a result, the inode
may be evicted before it's removed from the transaction's prealloc list
which can cause memory corruption.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/reiserfs/bitmap.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/reiserfs/bitmap.c b/fs/reiserfs/bitmap.c
index 73705d4bb069..edc8ef78b63f 100644
--- a/fs/reiserfs/bitmap.c
+++ b/fs/reiserfs/bitmap.c
@@ -1136,7 +1136,7 @@ static int determine_prealloc_size(reiserfs_blocknr_hint_t * hint)
 	hint->prealloc_size = 0;
 
 	if (!hint->formatted_node && hint->preallocate) {
-		if (S_ISREG(hint->inode->i_mode)
+		if (S_ISREG(hint->inode->i_mode) && !IS_PRIVATE(hint->inode)
 		    && hint->inode->i_size >=
 		    REISERFS_SB(hint->th->t_super)->s_alloc_options.
 		    preallocmin * hint->inode->i_sb->s_blocksize)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] reiserfs: Don't clear SGID when inheriting ACLs
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (224 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] reiserfs: don't preallocate blocks for extended attributes Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] fs/fcntl: f_setown, avoid undefined behaviour Sasha Levin
                   ` (290 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jan Kara, Sasha Levin

From: Jan Kara <jack@suse.cz>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6883cd7f68245e43e91e5ee583b7550abf14523f ]

When new directory 'DIR1' is created in a directory 'DIR0' with SGID bit
set, DIR1 is expected to have SGID bit set (and owning group equal to
the owning group of 'DIR0'). However when 'DIR0' also has some default
ACLs that 'DIR1' inherits, setting these ACLs will result in SGID bit on
'DIR1' to get cleared if user is not member of the owning group.

Fix the problem by moving posix_acl_update_mode() out of
__reiserfs_set_acl() into reiserfs_set_acl(). That way the function will
not be called when inheriting ACLs which is what we want as it prevents
SGID bit clearing and the mode has been properly set by
posix_acl_create() anyway.

Fixes: 073931017b49d9458aa351605b43a7e34598caef
CC: stable@vger.kernel.org
CC: reiserfs-devel@vger.kernel.org
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/reiserfs/xattr_acl.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/fs/reiserfs/xattr_acl.c b/fs/reiserfs/xattr_acl.c
index 9b1824f35501..91b036902a17 100644
--- a/fs/reiserfs/xattr_acl.c
+++ b/fs/reiserfs/xattr_acl.c
@@ -37,7 +37,14 @@ reiserfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
 	error = journal_begin(&th, inode->i_sb, jcreate_blocks);
 	reiserfs_write_unlock(inode->i_sb);
 	if (error == 0) {
+		if (type == ACL_TYPE_ACCESS && acl) {
+			error = posix_acl_update_mode(inode, &inode->i_mode,
+						      &acl);
+			if (error)
+				goto unlock;
+		}
 		error = __reiserfs_set_acl(&th, inode, type, acl);
+unlock:
 		reiserfs_write_lock(inode->i_sb);
 		error2 = journal_end(&th);
 		reiserfs_write_unlock(inode->i_sb);
@@ -245,11 +252,6 @@ __reiserfs_set_acl(struct reiserfs_transaction_handle *th, struct inode *inode,
 	switch (type) {
 	case ACL_TYPE_ACCESS:
 		name = POSIX_ACL_XATTR_ACCESS;
-		if (acl) {
-			error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
-			if (error)
-				return error;
-		}
 		break;
 	case ACL_TYPE_DEFAULT:
 		name = POSIX_ACL_XATTR_DEFAULT;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] scsi: libiscsi: fix shifting of DID_REQUEUE host byte
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (226 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] fs/fcntl: f_setown, avoid undefined behaviour Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] Revert "module: Add retpoline tag to VERMAGIC" Sasha Levin
                   ` (288 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Johannes Thumshirn, Martin K . Petersen, Sasha Levin

From: Johannes Thumshirn <jthumshirn@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit eef9ffdf9cd39b2986367bc8395e2772bc1284ba ]

The SCSI host byte should be shifted left by 16 in order to have
scsi_decide_disposition() do the right thing (.i.e. requeue the
command).

Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
Fixes: 661134ad3765 ("[SCSI] libiscsi, bnx2i: make bound ep check common")
Cc: Lee Duncan <lduncan@suse.com>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Bart Van Assche <Bart.VanAssche@sandisk.com>
Cc: Chris Leech <cleech@redhat.com>
Acked-by: Lee Duncan <lduncan@suse.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/libiscsi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
index 39e511216fd9..8826110991eb 100644
--- a/drivers/scsi/libiscsi.c
+++ b/drivers/scsi/libiscsi.c
@@ -1727,7 +1727,7 @@ int iscsi_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *sc)
 
 	if (test_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx)) {
 		reason = FAILURE_SESSION_IN_RECOVERY;
-		sc->result = DID_REQUEUE;
+		sc->result = DID_REQUEUE << 16;
 		goto fault;
 	}
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] fs/fcntl: f_setown, avoid undefined behaviour
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (225 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] reiserfs: Don't clear SGID when inheriting ACLs Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] scsi: libiscsi: fix shifting of DID_REQUEUE host byte Sasha Levin
                   ` (289 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jiri Slaby, Jeff Layton, Sasha Levin

From: Jiri Slaby <jslaby@suse.cz>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fc3dc67471461c0efcb1ed22fb7595121d65fad9 ]

fcntl(0, F_SETOWN, 0x80000000) triggers:
UBSAN: Undefined behaviour in fs/fcntl.c:118:7
negation of -2147483648 cannot be represented in type 'int':
CPU: 1 PID: 18261 Comm: syz-executor Not tainted 4.8.1-0-syzkaller #1
...
Call Trace:
...
 [<ffffffffad8f0868>] ? f_setown+0x1d8/0x200
 [<ffffffffad8f19a9>] ? SyS_fcntl+0x999/0xf30
 [<ffffffffaed1fb00>] ? entry_SYSCALL_64_fastpath+0x23/0xc1

Fix that by checking the arg parameter properly (against INT_MAX) before
"who = -who". And return immediatelly with -EINVAL in case it is wrong.
Note that according to POSIX we can return EINVAL:
    http://pubs.opengroup.org/onlinepubs/9699919799/functions/fcntl.html

    [EINVAL]
        The cmd argument is F_SETOWN and the value of the argument
        is not valid as a process or process group identifier.

[v2] returns an error, v1 used to fail silently
[v3] implement proper check for the bad value INT_MIN

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Jeff Layton <jlayton@poochiereds.net>
Cc: "J. Bruce Fields" <bfields@fieldses.org>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/fcntl.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/fs/fcntl.c b/fs/fcntl.c
index 62376451bbce..5df914943d96 100644
--- a/fs/fcntl.c
+++ b/fs/fcntl.c
@@ -113,6 +113,10 @@ void f_setown(struct file *filp, unsigned long arg, int force)
 	int who = arg;
 	type = PIDTYPE_PID;
 	if (who < 0) {
+		/* avoid overflow below */
+		if (who == INT_MIN)
+			return;
+
 		type = PIDTYPE_PGID;
 		who = -who;
 	}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Revert "module: Add retpoline tag to VERMAGIC"
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (227 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] scsi: libiscsi: fix shifting of DID_REQUEUE host byte Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: fix stub_rx: get_pipe() to validate endpoint number Sasha Levin
                   ` (287 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Greg Kroah-Hartman, Linus Torvalds, Sasha Levin

From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5132ede0fe8092b043dae09a7cc32b8ae7272baa ]

This reverts commit 6cfb521ac0d5b97470883ff9b7facae264b7ab12.

Turns out distros do not want to make retpoline as part of their "ABI",
so this patch should not have been merged.  Sorry Andi, this was my
fault, I suggested it when your original patch was the "correct" way of
doing this instead.

Reported-by: Jiri Kosina <jikos@kernel.org>
Fixes: 6cfb521ac0d5 ("module: Add retpoline tag to VERMAGIC")
Acked-by: Andi Kleen <ak@linux.intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: David Woodhouse <dwmw@amazon.co.uk>
Cc: rusty@rustcorp.com.au
Cc: arjan.van.de.ven@intel.com
Cc: jeyu@kernel.org
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/linux/vermagic.h | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/include/linux/vermagic.h b/include/linux/vermagic.h
index a3d04934aa96..6f8fbcf10dfb 100644
--- a/include/linux/vermagic.h
+++ b/include/linux/vermagic.h
@@ -24,16 +24,10 @@
 #ifndef MODULE_ARCH_VERMAGIC
 #define MODULE_ARCH_VERMAGIC ""
 #endif
-#ifdef RETPOLINE
-#define MODULE_VERMAGIC_RETPOLINE "retpoline "
-#else
-#define MODULE_VERMAGIC_RETPOLINE ""
-#endif
 
 #define VERMAGIC_STRING 						\
 	UTS_RELEASE " "							\
 	MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT 			\
 	MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS	\
-	MODULE_ARCH_VERMAGIC						\
-	MODULE_VERMAGIC_RETPOLINE
+	MODULE_ARCH_VERMAGIC
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usbip: fix stub_rx: get_pipe() to validate endpoint number
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (228 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] Revert "module: Add retpoline tag to VERMAGIC" Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] Input: trackpoint - force 3 buttons if 0 button is reported Sasha Levin
                   ` (286 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Shuah Khan, Greg Kroah-Hartman, Sasha Levin

From: Shuah Khan <shuahkh@osg.samsung.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 635f545a7e8be7596b9b2b6a43cab6bbd5a88e43 ]

get_pipe() routine doesn't validate the input endpoint number
and uses to reference ep_in and ep_out arrays. Invalid endpoint
number can trigger BUG(). Range check the epnum and returning
error instead of calling BUG().

Change caller stub_recv_cmd_submit() to handle the get_pipe()
error return.

Reported-by: Secunia Research <vuln@secunia.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/usbip/stub_rx.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/usbip/stub_rx.c b/drivers/usb/usbip/stub_rx.c
index 7de54a66044f..e617c90661b4 100644
--- a/drivers/usb/usbip/stub_rx.c
+++ b/drivers/usb/usbip/stub_rx.c
@@ -344,15 +344,15 @@ static int get_pipe(struct stub_device *sdev, int epnum, int dir)
 	struct usb_host_endpoint *ep;
 	struct usb_endpoint_descriptor *epd = NULL;
 
+	if (epnum < 0 || epnum > 15)
+		goto err_ret;
+
 	if (dir == USBIP_DIR_IN)
 		ep = udev->ep_in[epnum & 0x7f];
 	else
 		ep = udev->ep_out[epnum & 0x7f];
-	if (!ep) {
-		dev_err(&sdev->interface->dev, "no such endpoint?, %d\n",
-			epnum);
-		BUG();
-	}
+	if (!ep)
+		goto err_ret;
 
 	epd = &ep->desc;
 	if (usb_endpoint_xfer_control(epd)) {
@@ -383,9 +383,10 @@ static int get_pipe(struct stub_device *sdev, int epnum, int dir)
 			return usb_rcvisocpipe(udev, epnum);
 	}
 
+err_ret:
 	/* NOT REACHED */
-	dev_err(&sdev->interface->dev, "get pipe, epnum %d\n", epnum);
-	return 0;
+	dev_err(&sdev->udev->dev, "get pipe() invalid epnum %d\n", epnum);
+	return -1;
 }
 
 static void masking_bogus_flags(struct urb *urb)
@@ -451,6 +452,9 @@ static void stub_recv_cmd_submit(struct stub_device *sdev,
 	struct usb_device *udev = sdev->udev;
 	int pipe = get_pipe(sdev, pdu->base.ep, pdu->base.direction);
 
+	if (pipe == -1)
+		return;
+
 	priv = stub_priv_alloc(sdev, pdu);
 	if (!priv)
 		return;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Input: trackpoint - force 3 buttons if 0 button is reported
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (229 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: fix stub_rx: get_pipe() to validate endpoint number Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: fix stub_rx: harden CMD_SUBMIT path to handle malicious input Sasha Levin
                   ` (285 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Aaron Ma, Dmitry Torokhov, Sasha Levin

From: Aaron Ma <aaron.ma@canonical.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f5d07b9e98022d50720e38aa936fc11c67868ece ]

Lenovo introduced trackpoint compatible sticks with minimum PS/2 commands.
They supposed to reply with 0x02, 0x03, or 0x04 in response to the
"Read Extended ID" command, so we would know not to try certain extended
commands. Unfortunately even some trackpoints reporting the original IBM
version (0x01 firmware 0x0e) now respond with incorrect data to the "Get
Extended Buttons" command:

 thinkpad_acpi: ThinkPad BIOS R0DET87W (1.87 ), EC unknown
 thinkpad_acpi: Lenovo ThinkPad E470, model 20H1004SGE

 psmouse serio2: trackpoint: IBM TrackPoint firmware: 0x0e, buttons: 0/0

Since there are no trackpoints without buttons, let's assume the trackpoint
has 3 buttons when we get 0 response to the extended buttons query.

Signed-off-by: Aaron Ma <aaron.ma@canonical.com>
Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=196253
Cc: stable@vger.kernel.org
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/input/mouse/trackpoint.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/input/mouse/trackpoint.c b/drivers/input/mouse/trackpoint.c
index 7e2dc5e56632..0b49f29bf0da 100644
--- a/drivers/input/mouse/trackpoint.c
+++ b/drivers/input/mouse/trackpoint.c
@@ -383,6 +383,9 @@ int trackpoint_detect(struct psmouse *psmouse, bool set_properties)
 	if (trackpoint_read(&psmouse->ps2dev, TP_EXT_BTN, &button_info)) {
 		psmouse_warn(psmouse, "failed to get extended button data, assuming 3 buttons\n");
 		button_info = 0x33;
+	} else if (!button_info) {
+		psmouse_warn(psmouse, "got 0 in extended button data, assuming 3 buttons\n");
+		button_info = 0x33;
 	}
 
 	psmouse->private = kzalloc(sizeof(struct trackpoint_data), GFP_KERNEL);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usbip: prevent leaking socket pointer address in messages
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (231 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: fix stub_rx: harden CMD_SUBMIT path to handle malicious input Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] um: link vmlinux with -no-pie Sasha Levin
                   ` (283 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Shuah Khan, Greg Kroah-Hartman, Sasha Levin

From: Shuah Khan <shuahkh@osg.samsung.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 90120d15f4c397272aaf41077960a157fc4212bf ]

usbip driver is leaking socket pointer address in messages. Remove
the messages that aren't useful and print sockfd in the ones that
are useful for debugging.

Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/usbip/stub_dev.c     |  3 +--
 drivers/usb/usbip/usbip_common.c | 15 ++++-----------
 drivers/usb/usbip/vhci_hcd.c     |  2 +-
 3 files changed, 6 insertions(+), 14 deletions(-)

diff --git a/drivers/usb/usbip/stub_dev.c b/drivers/usb/usbip/stub_dev.c
index a3ec49bdc1e6..ec38370ffcab 100644
--- a/drivers/usb/usbip/stub_dev.c
+++ b/drivers/usb/usbip/stub_dev.c
@@ -163,8 +163,7 @@ static void stub_shutdown_connection(struct usbip_device *ud)
 	 * step 1?
 	 */
 	if (ud->tcp_socket) {
-		dev_dbg(&sdev->udev->dev, "shutdown tcp_socket %p\n",
-			ud->tcp_socket);
+		dev_dbg(&sdev->udev->dev, "shutdown sockfd %d\n", ud->sockfd);
 		kernel_sock_shutdown(ud->tcp_socket, SHUT_RDWR);
 	}
 
diff --git a/drivers/usb/usbip/usbip_common.c b/drivers/usb/usbip/usbip_common.c
index 9752b93f754e..1838f1b2c2fa 100644
--- a/drivers/usb/usbip/usbip_common.c
+++ b/drivers/usb/usbip/usbip_common.c
@@ -317,18 +317,14 @@ int usbip_recv(struct socket *sock, void *buf, int size)
 	struct msghdr msg;
 	struct kvec iov;
 	int total = 0;
-
 	/* for blocks of if (usbip_dbg_flag_xmit) */
 	char *bp = buf;
 	int osize = size;
 
-	usbip_dbg_xmit("enter\n");
-
-	if (!sock || !buf || !size) {
-		pr_err("invalid arg, sock %p buff %p size %d\n", sock, buf,
-		       size);
+	if (!sock || !buf || !size)
 		return -EINVAL;
-	}
+
+	usbip_dbg_xmit("enter\n");
 
 	do {
 		sock->sk->sk_allocation = GFP_NOIO;
@@ -341,11 +337,8 @@ int usbip_recv(struct socket *sock, void *buf, int size)
 		msg.msg_flags      = MSG_NOSIGNAL;
 
 		result = kernel_recvmsg(sock, &msg, &iov, 1, size, MSG_WAITALL);
-		if (result <= 0) {
-			pr_debug("receive sock %p buf %p size %u ret %d total %d\n",
-				 sock, buf, size, result, total);
+		if (result <= 0)
 			goto err;
-		}
 
 		size -= result;
 		buf += result;
diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c
index 1cca48d19c46..0231507837fe 100644
--- a/drivers/usb/usbip/vhci_hcd.c
+++ b/drivers/usb/usbip/vhci_hcd.c
@@ -761,7 +761,7 @@ static void vhci_shutdown_connection(struct usbip_device *ud)
 
 	/* need this? see stub_dev.c */
 	if (ud->tcp_socket) {
-		pr_debug("shutdown tcp_socket %p\n", ud->tcp_socket);
+		pr_debug("shutdown sockfd %d\n", ud->sockfd);
 		kernel_sock_shutdown(ud->tcp_socket, SHUT_RDWR);
 	}
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usbip: fix stub_rx: harden CMD_SUBMIT path to handle malicious input
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (230 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] Input: trackpoint - force 3 buttons if 0 button is reported Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: prevent leaking socket pointer address in messages Sasha Levin
                   ` (284 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Shuah Khan, Greg Kroah-Hartman, Sasha Levin

From: Shuah Khan <shuahkh@osg.samsung.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c6688ef9f29762e65bce325ef4acd6c675806366 ]

Harden CMD_SUBMIT path to handle malicious input that could trigger
large memory allocations. Add checks to validate transfer_buffer_length
and number_of_packets to protect against bad input requesting for
unbounded memory allocations. Validate early in get_pipe() and return
failure.

Reported-by: Secunia Research <vuln@secunia.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/usbip/stub_rx.c | 30 +++++++++++++++++++++++++++---
 1 file changed, 27 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/usbip/stub_rx.c b/drivers/usb/usbip/stub_rx.c
index e617c90661b4..56cacb68040c 100644
--- a/drivers/usb/usbip/stub_rx.c
+++ b/drivers/usb/usbip/stub_rx.c
@@ -338,11 +338,13 @@ static struct stub_priv *stub_priv_alloc(struct stub_device *sdev,
 	return priv;
 }
 
-static int get_pipe(struct stub_device *sdev, int epnum, int dir)
+static int get_pipe(struct stub_device *sdev, struct usbip_header *pdu)
 {
 	struct usb_device *udev = sdev->udev;
 	struct usb_host_endpoint *ep;
 	struct usb_endpoint_descriptor *epd = NULL;
+	int epnum = pdu->base.ep;
+	int dir = pdu->base.direction;
 
 	if (epnum < 0 || epnum > 15)
 		goto err_ret;
@@ -355,6 +357,7 @@ static int get_pipe(struct stub_device *sdev, int epnum, int dir)
 		goto err_ret;
 
 	epd = &ep->desc;
+
 	if (usb_endpoint_xfer_control(epd)) {
 		if (dir == USBIP_DIR_OUT)
 			return usb_sndctrlpipe(udev, epnum);
@@ -377,6 +380,27 @@ static int get_pipe(struct stub_device *sdev, int epnum, int dir)
 	}
 
 	if (usb_endpoint_xfer_isoc(epd)) {
+		/* validate packet size and number of packets */
+		unsigned int maxp, packets, bytes;
+
+#define USB_EP_MAXP_MULT_SHIFT  11
+#define USB_EP_MAXP_MULT_MASK   (3 << USB_EP_MAXP_MULT_SHIFT)
+#define USB_EP_MAXP_MULT(m) \
+	(((m) & USB_EP_MAXP_MULT_MASK) >> USB_EP_MAXP_MULT_SHIFT)
+
+		maxp = usb_endpoint_maxp(epd);
+		maxp *= (USB_EP_MAXP_MULT(
+				__le16_to_cpu(epd->wMaxPacketSize)) + 1);
+		bytes = pdu->u.cmd_submit.transfer_buffer_length;
+		packets = DIV_ROUND_UP(bytes, maxp);
+
+		if (pdu->u.cmd_submit.number_of_packets < 0 ||
+		    pdu->u.cmd_submit.number_of_packets > packets) {
+			dev_err(&sdev->udev->dev,
+				"CMD_SUBMIT: isoc invalid num packets %d\n",
+				pdu->u.cmd_submit.number_of_packets);
+			return -1;
+		}
 		if (dir == USBIP_DIR_OUT)
 			return usb_sndisocpipe(udev, epnum);
 		else
@@ -385,7 +409,7 @@ static int get_pipe(struct stub_device *sdev, int epnum, int dir)
 
 err_ret:
 	/* NOT REACHED */
-	dev_err(&sdev->udev->dev, "get pipe() invalid epnum %d\n", epnum);
+	dev_err(&sdev->udev->dev, "CMD_SUBMIT: invalid epnum %d\n", epnum);
 	return -1;
 }
 
@@ -450,7 +474,7 @@ static void stub_recv_cmd_submit(struct stub_device *sdev,
 	struct stub_priv *priv;
 	struct usbip_device *ud = &sdev->ud;
 	struct usb_device *udev = sdev->udev;
-	int pipe = get_pipe(sdev, pdu->base.ep, pdu->base.direction);
+	int pipe = get_pipe(sdev, pdu);
 
 	if (pipe == -1)
 		return;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] um: link vmlinux with -no-pie
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (232 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: prevent leaking socket pointer address in messages Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] eventpoll.h: add missing epoll event masks Sasha Levin
                   ` (282 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Thomas Meyer, Richard Weinberger, Sasha Levin

From: Thomas Meyer <thomas@m3y3r.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 883354afbc109c57f925ccc19840055193da0cc0 ]

Debian's gcc defaults to pie. The global Makefile already defines the -fno-pie option.
Link UML dynamic kernel image also with -no-pie to fix the build.

Signed-off-by: Thomas Meyer <thomas@m3y3r.de>
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/um/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/um/Makefile b/arch/um/Makefile
index 17d4460b1af3..01558aeeba50 100644
--- a/arch/um/Makefile
+++ b/arch/um/Makefile
@@ -116,7 +116,7 @@ archheaders:
 archprepare: include/generated/user_constants.h
 
 LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static
-LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib
+LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib $(call cc-option, -no-pie)
 
 CFLAGS_NO_HARDENING := $(call cc-option, -fno-PIC,) $(call cc-option, -fno-pic,) \
 	$(call cc-option, -fno-stack-protector,) \
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] eventpoll.h: add missing epoll event masks
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (233 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] um: link vmlinux with -no-pie Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] dccp: don't restart ccid2_hc_tx_rto_expire() if sk in closed state Sasha Levin
                   ` (281 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Greg KH, Sasha Levin

From: Greg KH <gregkh@linuxfoundation.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7e040726850a106587485c21bdacc0bfc8a0cbed ]

[resend due to me forgetting to cc: linux-api the first time around I
posted these back on Feb 23]

From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

For some reason these values are not in the uapi header file, so any
libc has to define it themselves.  To prevent them from needing to do
this, just have the kernel provide the correct values.

Reported-by: Elliott Hughes <enh@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/uapi/linux/eventpoll.h | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/include/uapi/linux/eventpoll.h b/include/uapi/linux/eventpoll.h
index bc81fb2e1f0e..6f04cb419115 100644
--- a/include/uapi/linux/eventpoll.h
+++ b/include/uapi/linux/eventpoll.h
@@ -26,6 +26,19 @@
 #define EPOLL_CTL_DEL 2
 #define EPOLL_CTL_MOD 3
 
+/* Epoll event masks */
+#define EPOLLIN		0x00000001
+#define EPOLLPRI	0x00000002
+#define EPOLLOUT	0x00000004
+#define EPOLLERR	0x00000008
+#define EPOLLHUP	0x00000010
+#define EPOLLRDNORM	0x00000040
+#define EPOLLRDBAND	0x00000080
+#define EPOLLWRNORM	0x00000100
+#define EPOLLWRBAND	0x00000200
+#define EPOLLMSG	0x00000400
+#define EPOLLRDHUP	0x00002000
+
 /*
  * Request the handling of system wakeup events so as to prevent system suspends
  * from happening while those events are being processed.
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] dccp: don't restart ccid2_hc_tx_rto_expire() if sk in closed state
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (234 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] eventpoll.h: add missing epoll event masks Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ipv6: fix udpv6 sendmsg crash caused by too small MTU Sasha Levin
                   ` (280 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Alexey Kodanev, David S . Miller, Sasha Levin

From: Alexey Kodanev <alexey.kodanev@oracle.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit dd5684ecae3bd8e44b644f50e2c12c7e57fdfef5 ]

ccid2_hc_tx_rto_expire() timer callback always restarts the timer
again and can run indefinitely (unless it is stopped outside), and after
commit 120e9dabaf55 ("dccp: defer ccid_hc_tx_delete() at dismantle time"),
which moved ccid_hc_tx_delete() (also includes sk_stop_timer()) from
dccp_destroy_sock() to sk_destruct(), this started to happen quite often.
The timer prevents releasing the socket, as a result, sk_destruct() won't
be called.

Found with LTP/dccp_ipsec tests running on the bonding device,
which later couldn't be unloaded after the tests were completed:

  unregister_netdevice: waiting for bond0 to become free. Usage count = 148

Fixes: 2a91aa396739 ("[DCCP] CCID2: Initial CCID2 (TCP-Like) implementation")
Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/dccp/ccids/ccid2.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/net/dccp/ccids/ccid2.c b/net/dccp/ccids/ccid2.c
index 5e3a7302f774..7753681195c1 100644
--- a/net/dccp/ccids/ccid2.c
+++ b/net/dccp/ccids/ccid2.c
@@ -140,6 +140,9 @@ static void ccid2_hc_tx_rto_expire(unsigned long data)
 
 	ccid2_pr_debug("RTO_EXPIRE\n");
 
+	if (sk->sk_state == DCCP_CLOSED)
+		goto out;
+
 	/* back-off timer */
 	hc->tx_rto <<= 1;
 	if (hc->tx_rto > DCCP_RTO_MAX)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ipv6: fix udpv6 sendmsg crash caused by too small MTU
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (235 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] dccp: don't restart ccid2_hc_tx_rto_expire() if sk in closed state Sasha Levin
@ 2018-03-01 15:24 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] ipv6: ip6_make_skb() needs to clear cork.base.dst Sasha Levin
                   ` (279 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:24 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Mike Maloney, David S . Miller, Sasha Levin

From: Mike Maloney <maloney@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 749439bfac6e1a2932c582e2699f91d329658196 ]

The logic in __ip6_append_data() assumes that the MTU is at least large
enough for the headers.  A device's MTU may be adjusted after being
added while sendmsg() is processing data, resulting in
__ip6_append_data() seeing any MTU.  For an mtu smaller than the size of
the fragmentation header, the math results in a negative 'maxfraglen',
which causes problems when refragmenting any previous skb in the
skb_write_queue, leaving it possibly malformed.

Instead sendmsg returns EINVAL when the mtu is calculated to be less
than IPV6_MIN_MTU.

Found by syzkaller:
kernel BUG at ./include/linux/skbuff.h:2064!
invalid opcode: 0000 [#1] SMP KASAN
Dumping ftrace buffer:
   (ftrace buffer empty)
Modules linked in:
CPU: 1 PID: 14216 Comm: syz-executor5 Not tainted 4.13.0-rc4+ #2
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
task: ffff8801d0b68580 task.stack: ffff8801ac6b8000
RIP: 0010:__skb_pull include/linux/skbuff.h:2064 [inline]
RIP: 0010:__ip6_make_skb+0x18cf/0x1f70 net/ipv6/ip6_output.c:1617
RSP: 0018:ffff8801ac6bf570 EFLAGS: 00010216
RAX: 0000000000010000 RBX: 0000000000000028 RCX: ffffc90003cce000
RDX: 00000000000001b8 RSI: ffffffff839df06f RDI: ffff8801d9478ca0
RBP: ffff8801ac6bf780 R08: ffff8801cc3f1dbc R09: 0000000000000000
R10: ffff8801ac6bf7a0 R11: 43cb4b7b1948a9e7 R12: ffff8801cc3f1dc8
R13: ffff8801cc3f1d40 R14: 0000000000001036 R15: dffffc0000000000
FS:  00007f43d740c700(0000) GS:ffff8801dc100000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f7834984000 CR3: 00000001d79b9000 CR4: 00000000001406e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
 ip6_finish_skb include/net/ipv6.h:911 [inline]
 udp_v6_push_pending_frames+0x255/0x390 net/ipv6/udp.c:1093
 udpv6_sendmsg+0x280d/0x31a0 net/ipv6/udp.c:1363
 inet_sendmsg+0x11f/0x5e0 net/ipv4/af_inet.c:762
 sock_sendmsg_nosec net/socket.c:633 [inline]
 sock_sendmsg+0xca/0x110 net/socket.c:643
 SYSC_sendto+0x352/0x5a0 net/socket.c:1750
 SyS_sendto+0x40/0x50 net/socket.c:1718
 entry_SYSCALL_64_fastpath+0x1f/0xbe
RIP: 0033:0x4512e9
RSP: 002b:00007f43d740bc08 EFLAGS: 00000216 ORIG_RAX: 000000000000002c
RAX: ffffffffffffffda RBX: 00000000007180a8 RCX: 00000000004512e9
RDX: 000000000000002e RSI: 0000000020d08000 RDI: 0000000000000005
RBP: 0000000000000086 R08: 00000000209c1000 R09: 000000000000001c
R10: 0000000000040800 R11: 0000000000000216 R12: 00000000004b9c69
R13: 00000000ffffffff R14: 0000000000000005 R15: 00000000202c2000
Code: 9e 01 fe e9 c5 e8 ff ff e8 7f 9e 01 fe e9 4a ea ff ff 48 89 f7 e8 52 9e 01 fe e9 aa eb ff ff e8 a8 b6 cf fd 0f 0b e8 a1 b6 cf fd <0f> 0b 49 8d 45 78 4d 8d 45 7c 48 89 85 78 fe ff ff 49 8d 85 ba
RIP: __skb_pull include/linux/skbuff.h:2064 [inline] RSP: ffff8801ac6bf570
RIP: __ip6_make_skb+0x18cf/0x1f70 net/ipv6/ip6_output.c:1617 RSP: ffff8801ac6bf570

Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Mike Maloney <maloney@google.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv6/ip6_output.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index 917e423939fe..2bfdfd8218a0 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1217,14 +1217,16 @@ static int ip6_setup_cork(struct sock *sk, struct inet_cork_full *cork,
 	v6_cork->tclass = tclass;
 	if (rt->dst.flags & DST_XFRM_TUNNEL)
 		mtu = np->pmtudisc >= IPV6_PMTUDISC_PROBE ?
-		      rt->dst.dev->mtu : dst_mtu(&rt->dst);
+		      READ_ONCE(rt->dst.dev->mtu) : dst_mtu(&rt->dst);
 	else
 		mtu = np->pmtudisc >= IPV6_PMTUDISC_PROBE ?
-		      rt->dst.dev->mtu : dst_mtu(rt->dst.path);
+		      READ_ONCE(rt->dst.dev->mtu) : dst_mtu(rt->dst.path);
 	if (np->frag_size < mtu) {
 		if (np->frag_size)
 			mtu = np->frag_size;
 	}
+	if (mtu < IPV6_MIN_MTU)
+		return -EINVAL;
 	cork->base.fragsize = mtu;
 	if (dst_allfrag(rt->dst.path))
 		cork->base.flags |= IPCORK_ALLFRAG;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net: igmp: fix source address check for IGMPv3 reports
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (237 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] ipv6: ip6_make_skb() needs to clear cork.base.dst Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] net: qdisc_pkt_len_init() should be more robust Sasha Levin
                   ` (277 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Felix Fietkau, David S . Miller, Sasha Levin

From: Felix Fietkau <nbd@nbd.name>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ad23b750933ea7bf962678972a286c78a8fa36aa ]

Commit "net: igmp: Use correct source address on IGMPv3 reports"
introduced a check to validate the source address of locally generated
IGMPv3 packets.
Instead of checking the local interface address directly, it uses
inet_ifa_match(fl4->saddr, ifa), which checks if the address is on the
local subnet (or equal to the point-to-point address if used).

This breaks for point-to-point interfaces, so check against
ifa->ifa_local directly.

Cc: Kevin Cernekee <cernekee@chromium.org>
Fixes: a46182b00290 ("net: igmp: Use correct source address on IGMPv3 reports")
Reported-by: Sebastian Gottschall <s.gottschall@dd-wrt.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv4/igmp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
index 0e9d61bf8685..7d8121acac74 100644
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
@@ -330,7 +330,7 @@ static __be32 igmpv3_get_srcaddr(struct net_device *dev,
 		return htonl(INADDR_ANY);
 
 	for_ifa(in_dev) {
-		if (inet_ifa_match(fl4->saddr, ifa))
+		if (fl4->saddr == ifa->ifa_local)
 			return fl4->saddr;
 	} endfor_ifa(in_dev);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ipv6: ip6_make_skb() needs to clear cork.base.dst
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (236 preceding siblings ...)
  2018-03-01 15:24 ` [added to the 4.1 stable tree] ipv6: fix udpv6 sendmsg crash caused by too small MTU Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] net: igmp: fix source address check for IGMPv3 reports Sasha Levin
                   ` (278 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Dumazet, David S . Miller, Sasha Levin

From: Eric Dumazet <edumazet@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 95ef498d977bf44ac094778fd448b98af158a3e6 ]

In my last patch, I missed fact that cork.base.dst was not initialized
in ip6_make_skb() :

If ip6_setup_cork() returns an error, we might attempt a dst_release()
on some random pointer.

Fixes: 862c03ee1deb ("ipv6: fix possible mem leaks in ipv6_make_skb()")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv6/ip6_output.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index 2bfdfd8218a0..97397a3df219 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1759,6 +1759,7 @@ struct sk_buff *ip6_make_skb(struct sock *sk,
 	cork.base.flags = 0;
 	cork.base.addr = 0;
 	cork.base.opt = NULL;
+	cork.base.dst = NULL;
 	v6_cork.opt = NULL;
 	err = ip6_setup_cork(sk, &cork, &v6_cork, hlimit, tclass, opt, rt, fl6);
 	if (err) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net: qdisc_pkt_len_init() should be more robust
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (238 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] net: igmp: fix source address check for IGMPv3 reports Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] tcp: __tcp_hdrlen() helper Sasha Levin
                   ` (276 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Dumazet, David S . Miller, Sasha Levin

From: Eric Dumazet <edumazet@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7c68d1a6b4db9012790af7ac0f0fdc0d2083422a ]

Without proper validation of DODGY packets, we might very well
feed qdisc_pkt_len_init() with invalid GSO packets.

tcp_hdrlen() might access out-of-bound data, so let's use
skb_header_pointer() and proper checks.

Whole story is described in commit d0c081b49137 ("flow_dissector:
properly cap thoff field")

We have the goal of validating DODGY packets earlier in the stack,
so we might very well revert this fix in the future.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Willem de Bruijn <willemb@google.com>
Cc: Jason Wang <jasowang@redhat.com>
Reported-by: syzbot+9da69ebac7dddd804552@syzkaller.appspotmail.com
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/core/dev.c | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index 4d4213b6f7f6..196476c8b7d5 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2803,10 +2803,21 @@ static void qdisc_pkt_len_init(struct sk_buff *skb)
 		hdr_len = skb_transport_header(skb) - skb_mac_header(skb);
 
 		/* + transport layer */
-		if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6)))
-			hdr_len += tcp_hdrlen(skb);
-		else
-			hdr_len += sizeof(struct udphdr);
+		if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))) {
+			const struct tcphdr *th;
+			struct tcphdr _tcphdr;
+
+			th = skb_header_pointer(skb, skb_transport_offset(skb),
+						sizeof(_tcphdr), &_tcphdr);
+			if (likely(th))
+				hdr_len += __tcp_hdrlen(th);
+		} else {
+			struct udphdr _udphdr;
+
+			if (skb_header_pointer(skb, skb_transport_offset(skb),
+					       sizeof(_udphdr), &_udphdr))
+				hdr_len += sizeof(struct udphdr);
+		}
 
 		if (shinfo->gso_type & SKB_GSO_DODGY)
 			gso_segs = DIV_ROUND_UP(skb->len - hdr_len,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] tcp: __tcp_hdrlen() helper
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (239 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] net: qdisc_pkt_len_init() should be more robust Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] pppoe: take ->needed_headroom of lower device into account on xmit Sasha Levin
                   ` (275 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Craig Gallek, David S . Miller, Sasha Levin

From: Craig Gallek <kraig@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d9b3fca27385eafe61c3ca6feab6cb1e7dc77482 ]

tcp_hdrlen is wasteful if you already have a pointer to struct tcphdr.
This splits the size calculation into a helper function that can be
used if a struct tcphdr is already available.

Signed-off-by: Craig Gallek <kraig@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/linux/tcp.h | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/include/linux/tcp.h b/include/linux/tcp.h
index e8bbf403618f..5eeeca0b25f1 100644
--- a/include/linux/tcp.h
+++ b/include/linux/tcp.h
@@ -29,9 +29,14 @@ static inline struct tcphdr *tcp_hdr(const struct sk_buff *skb)
 	return (struct tcphdr *)skb_transport_header(skb);
 }
 
+static inline unsigned int __tcp_hdrlen(const struct tcphdr *th)
+{
+	return th->doff * 4;
+}
+
 static inline unsigned int tcp_hdrlen(const struct sk_buff *skb)
 {
-	return tcp_hdr(skb)->doff * 4;
+	return __tcp_hdrlen(tcp_hdr(skb));
 }
 
 static inline struct tcphdr *inner_tcp_hdr(const struct sk_buff *skb)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] pppoe: take ->needed_headroom of lower device into account on xmit
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (240 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] tcp: __tcp_hdrlen() helper Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] sctp: do not allow the v4 socket to bind a v4mapped v6 address Sasha Levin
                   ` (274 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Guillaume Nault, David S . Miller, Sasha Levin

From: Guillaume Nault <g.nault@alphalink.fr>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 02612bb05e51df8489db5e94d0cf8d1c81f87b0c ]

In pppoe_sendmsg(), reserving dev->hard_header_len bytes of headroom
was probably fine before the introduction of ->needed_headroom in
commit f5184d267c1a ("net: Allow netdevices to specify needed head/tailroom").

But now, virtual devices typically advertise the size of their overhead
in dev->needed_headroom, so we must also take it into account in
skb_reserve().
Allocation size of skb is also updated to take dev->needed_tailroom
into account and replace the arbitrary 32 bytes with the real size of
a PPPoE header.

This issue was discovered by syzbot, who connected a pppoe socket to a
gre device which had dev->header_ops->create == ipgre_header and
dev->hard_header_len == 0. Therefore, PPPoE didn't reserve any
headroom, and dev_hard_header() crashed when ipgre_header() tried to
prepend its header to skb->data.

skbuff: skb_under_panic: text:000000001d390b3a len:31 put:24
head:00000000d8ed776f data:000000008150e823 tail:0x7 end:0xc0 dev:gre0
------------[ cut here ]------------
kernel BUG at net/core/skbuff.c:104!
invalid opcode: 0000 [#1] SMP KASAN
Dumping ftrace buffer:
    (ftrace buffer empty)
Modules linked in:
CPU: 1 PID: 3670 Comm: syzkaller801466 Not tainted
4.15.0-rc7-next-20180115+ #97
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
Google 01/01/2011
RIP: 0010:skb_panic+0x162/0x1f0 net/core/skbuff.c:100
RSP: 0018:ffff8801d9bd7840 EFLAGS: 00010282
RAX: 0000000000000083 RBX: ffff8801d4f083c0 RCX: 0000000000000000
RDX: 0000000000000083 RSI: 1ffff1003b37ae92 RDI: ffffed003b37aefc
RBP: ffff8801d9bd78a8 R08: 1ffff1003b37ae8a R09: 0000000000000000
R10: 0000000000000001 R11: 0000000000000000 R12: ffffffff86200de0
R13: ffffffff84a981ad R14: 0000000000000018 R15: ffff8801d2d34180
FS:  00000000019c4880(0000) GS:ffff8801db300000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00000000208bc000 CR3: 00000001d9111001 CR4: 00000000001606e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
  skb_under_panic net/core/skbuff.c:114 [inline]
  skb_push+0xce/0xf0 net/core/skbuff.c:1714
  ipgre_header+0x6d/0x4e0 net/ipv4/ip_gre.c:879
  dev_hard_header include/linux/netdevice.h:2723 [inline]
  pppoe_sendmsg+0x58e/0x8b0 drivers/net/ppp/pppoe.c:890
  sock_sendmsg_nosec net/socket.c:630 [inline]
  sock_sendmsg+0xca/0x110 net/socket.c:640
  sock_write_iter+0x31a/0x5d0 net/socket.c:909
  call_write_iter include/linux/fs.h:1775 [inline]
  do_iter_readv_writev+0x525/0x7f0 fs/read_write.c:653
  do_iter_write+0x154/0x540 fs/read_write.c:932
  vfs_writev+0x18a/0x340 fs/read_write.c:977
  do_writev+0xfc/0x2a0 fs/read_write.c:1012
  SYSC_writev fs/read_write.c:1085 [inline]
  SyS_writev+0x27/0x30 fs/read_write.c:1082
  entry_SYSCALL_64_fastpath+0x29/0xa0

Admittedly PPPoE shouldn't be allowed to run on non Ethernet-like
interfaces, but reserving space for ->needed_headroom is a more
fundamental issue that needs to be addressed first.

Same problem exists for __pppoe_xmit(), which also needs to take
dev->needed_headroom into account in skb_cow_head().

Fixes: f5184d267c1a ("net: Allow netdevices to specify needed head/tailroom")
Reported-by: syzbot+ed0838d0fa4c4f2b528e20286e6dc63effc7c14d@syzkaller.appspotmail.com
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
Reviewed-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ppp/pppoe.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c
index d1c4bc1c4df0..31aa93907b77 100644
--- a/drivers/net/ppp/pppoe.c
+++ b/drivers/net/ppp/pppoe.c
@@ -860,6 +860,7 @@ static int pppoe_sendmsg(struct socket *sock, struct msghdr *m,
 	struct pppoe_hdr *ph;
 	struct net_device *dev;
 	char *start;
+	int hlen;
 
 	lock_sock(sk);
 	if (sock_flag(sk, SOCK_DEAD) || !(sk->sk_state & PPPOX_CONNECTED)) {
@@ -878,16 +879,16 @@ static int pppoe_sendmsg(struct socket *sock, struct msghdr *m,
 	if (total_len > (dev->mtu + dev->hard_header_len))
 		goto end;
 
-
-	skb = sock_wmalloc(sk, total_len + dev->hard_header_len + 32,
-			   0, GFP_KERNEL);
+	hlen = LL_RESERVED_SPACE(dev);
+	skb = sock_wmalloc(sk, hlen + sizeof(*ph) + total_len +
+			   dev->needed_tailroom, 0, GFP_KERNEL);
 	if (!skb) {
 		error = -ENOMEM;
 		goto end;
 	}
 
 	/* Reserve space for headers. */
-	skb_reserve(skb, dev->hard_header_len);
+	skb_reserve(skb, hlen);
 	skb_reset_network_header(skb);
 
 	skb->dev = dev;
@@ -948,7 +949,7 @@ static int __pppoe_xmit(struct sock *sk, struct sk_buff *skb)
 	/* Copy the data if there is no space for the header or if it's
 	 * read-only.
 	 */
-	if (skb_cow_head(skb, sizeof(*ph) + dev->hard_header_len))
+	if (skb_cow_head(skb, LL_RESERVED_SPACE(dev) + sizeof(*ph)))
 		goto abort;
 
 	__skb_push(skb, sizeof(*ph));
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] sctp: return error if the asoc has been peeled off in sctp_wait_for_sndbuf
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (242 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] sctp: do not allow the v4 socket to bind a v4mapped v6 address Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] vmxnet3: repair memory leak Sasha Levin
                   ` (272 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Xin Long, David S . Miller, Sasha Levin

From: Xin Long <lucien.xin@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a0ff660058b88d12625a783ce9e5c1371c87951f ]

After commit cea0cc80a677 ("sctp: use the right sk after waking up from
wait_buf sleep"), it may change to lock another sk if the asoc has been
peeled off in sctp_wait_for_sndbuf.

However, the asoc's new sk could be already closed elsewhere, as it's in
the sendmsg context of the old sk that can't avoid the new sk's closing.
If the sk's last one refcnt is held by this asoc, later on after putting
this asoc, the new sk will be freed, while under it's own lock.

This patch is to revert that commit, but fix the old issue by returning
error under the old sk's lock.

Fixes: cea0cc80a677 ("sctp: use the right sk after waking up from wait_buf sleep")
Reported-by: syzbot+ac6ea7baa4432811eb50@syzkaller.appspotmail.com
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/sctp/socket.c | 16 ++++++----------
 1 file changed, 6 insertions(+), 10 deletions(-)

diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index eb75f69ca372..c44e3d208804 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -83,7 +83,7 @@
 static int sctp_writeable(struct sock *sk);
 static void sctp_wfree(struct sk_buff *skb);
 static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p,
-				size_t msg_len, struct sock **orig_sk);
+				size_t msg_len);
 static int sctp_wait_for_packet(struct sock *sk, int *err, long *timeo_p);
 static int sctp_wait_for_connect(struct sctp_association *, long *timeo_p);
 static int sctp_wait_for_accept(struct sock *sk, long timeo);
@@ -1946,7 +1946,7 @@ static int sctp_sendmsg(struct sock *sk, struct msghdr *msg, size_t msg_len)
 	timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT);
 	if (!sctp_wspace(asoc)) {
 		/* sk can be changed by peel off when waiting for buf. */
-		err = sctp_wait_for_sndbuf(asoc, &timeo, msg_len, &sk);
+		err = sctp_wait_for_sndbuf(asoc, &timeo, msg_len);
 		if (err) {
 			if (err == -ESRCH) {
 				/* asoc is already dead. */
@@ -6977,12 +6977,12 @@ void sctp_sock_rfree(struct sk_buff *skb)
 
 /* Helper function to wait for space in the sndbuf.  */
 static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p,
-				size_t msg_len, struct sock **orig_sk)
+				size_t msg_len)
 {
 	struct sock *sk = asoc->base.sk;
-	int err = 0;
 	long current_timeo = *timeo_p;
 	DEFINE_WAIT(wait);
+	int err = 0;
 
 	pr_debug("%s: asoc:%p, timeo:%ld, msg_len:%zu\n", __func__, asoc,
 		 *timeo_p, msg_len);
@@ -7012,17 +7012,13 @@ static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p,
 		current_timeo = schedule_timeout(current_timeo);
 		BUG_ON(sk != asoc->base.sk);
 		lock_sock(sk);
-		if (sk != asoc->base.sk) {
-			release_sock(sk);
-			sk = asoc->base.sk;
-			lock_sock(sk);
-		}
+		if (sk != asoc->base.sk)
+			goto do_error;
 
 		*timeo_p = current_timeo;
 	}
 
 out:
-	*orig_sk = sk;
 	finish_wait(&asoc->wait, &wait);
 
 	/* Release the association's refcnt.  */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] sctp: do not allow the v4 socket to bind a v4mapped v6 address
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (241 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] pppoe: take ->needed_headroom of lower device into account on xmit Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] sctp: return error if the asoc has been peeled off in sctp_wait_for_sndbuf Sasha Levin
                   ` (273 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Xin Long, David S . Miller, Sasha Levin

From: Xin Long <lucien.xin@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c5006b8aa74599ce19104b31d322d2ea9ff887cc ]

The check in sctp_sockaddr_af is not robust enough to forbid binding a
v4mapped v6 addr on a v4 socket.

The worse thing is that v4 socket's bind_verify would not convert this
v4mapped v6 addr to a v4 addr. syzbot even reported a crash as the v4
socket bound a v6 addr.

This patch is to fix it by doing the common sa.sa_family check first,
then AF_INET check for v4mapped v6 addrs.

Fixes: 7dab83de50c7 ("sctp: Support ipv6only AF_INET6 sockets.")
Reported-by: syzbot+7b7b518b1228d2743963@syzkaller.appspotmail.com
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/sctp/socket.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index c45a33d04fca..eb75f69ca372 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -332,16 +332,14 @@ static struct sctp_af *sctp_sockaddr_af(struct sctp_sock *opt,
 	if (len < sizeof (struct sockaddr))
 		return NULL;
 
+	if (!opt->pf->af_supported(addr->sa.sa_family, opt))
+		return NULL;
+
 	/* V4 mapped address are really of AF_INET family */
 	if (addr->sa.sa_family == AF_INET6 &&
-	    ipv6_addr_v4mapped(&addr->v6.sin6_addr)) {
-		if (!opt->pf->af_supported(AF_INET, opt))
-			return NULL;
-	} else {
-		/* Does this PF support this AF? */
-		if (!opt->pf->af_supported(addr->sa.sa_family, opt))
-			return NULL;
-	}
+	    ipv6_addr_v4mapped(&addr->v6.sin6_addr) &&
+	    !opt->pf->af_supported(AF_INET, opt))
+		return NULL;
 
 	/* If we get this far, af is valid. */
 	af = sctp_get_af_specific(addr->sa.sa_family);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] vmxnet3: repair memory leak
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (243 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] sctp: return error if the asoc has been peeled off in sctp_wait_for_sndbuf Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] ipv4: Make neigh lookup keys for loopback/point-to-point devices be INADDR_ANY Sasha Levin
                   ` (271 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Neil Horman, David S . Miller, Sasha Levin

From: Neil Horman <nhorman@tuxdriver.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 848b159835ddef99cc4193083f7e786c3992f580 ]

with the introduction of commit
b0eb57cb97e7837ebb746404c2c58c6f536f23fa, it appears that rq->buf_info
is improperly handled.  While it is heap allocated when an rx queue is
setup, and freed when torn down, an old line of code in
vmxnet3_rq_destroy was not properly removed, leading to rq->buf_info[0]
being set to NULL prior to its being freed, causing a memory leak, which
eventually exhausts the system on repeated create/destroy operations
(for example, when  the mtu of a vmxnet3 interface is changed
frequently.

Fix is pretty straight forward, just move the NULL set to after the
free.

Tested by myself with successful results

Applies to net, and should likely be queued for stable, please

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Reported-By: boyang@redhat.com
CC: boyang@redhat.com
CC: Shrikrishna Khare <skhare@vmware.com>
CC: "VMware, Inc." <pv-drivers@vmware.com>
CC: David S. Miller <davem@davemloft.net>
Acked-by: Shrikrishna Khare <skhare@vmware.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/vmxnet3/vmxnet3_drv.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index 61c0840c448c..0b9c8d61f7d1 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -1431,7 +1431,6 @@ static void vmxnet3_rq_destroy(struct vmxnet3_rx_queue *rq,
 					  rq->rx_ring[i].basePA);
 			rq->rx_ring[i].base = NULL;
 		}
-		rq->buf_info[i] = NULL;
 	}
 
 	if (rq->comp_ring.base) {
@@ -1446,6 +1445,7 @@ static void vmxnet3_rq_destroy(struct vmxnet3_rx_queue *rq,
 			(rq->rx_ring[0].size + rq->rx_ring[1].size);
 		dma_free_coherent(&adapter->pdev->dev, sz, rq->buf_info[0],
 				  rq->buf_info_pa);
+		rq->buf_info[0] = rq->buf_info[1] = NULL;
 	}
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ipv4: Make neigh lookup keys for loopback/point-to-point devices be INADDR_ANY
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (244 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] vmxnet3: repair memory leak Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] net: Allow neigh contructor functions ability to modify the primary_key Sasha Levin
                   ` (270 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jim Westfall, David S . Miller, Sasha Levin

From: Jim Westfall <jwestfall@surrealistic.net>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit cd9ff4de0107c65d69d02253bb25d6db93c3dbc1 ]

Map all lookup neigh keys to INADDR_ANY for loopback/point-to-point devices
to avoid making an entry for every remote ip the device needs to talk to.

This used the be the old behavior but became broken in a263b3093641f
(ipv4: Make neigh lookups directly in output packet path) and later removed
in 0bb4087cbec0 (ipv4: Fix neigh lookup keying over loopback/point-to-point
devices) because it was broken.

Signed-off-by: Jim Westfall <jwestfall@surrealistic.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/net/arp.h | 3 +++
 net/ipv4/arp.c    | 7 ++++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/include/net/arp.h b/include/net/arp.h
index 5e0f891d476c..1b3f86981757 100644
--- a/include/net/arp.h
+++ b/include/net/arp.h
@@ -19,6 +19,9 @@ static inline u32 arp_hashfn(const void *pkey, const struct net_device *dev, u32
 
 static inline struct neighbour *__ipv4_neigh_lookup_noref(struct net_device *dev, u32 key)
 {
+	if (dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT))
+		key = INADDR_ANY;
+
 	return ___neigh_lookup_noref(&arp_tbl, neigh_key_eq32, arp_hashfn, &key, dev);
 }
 
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
index a7e74fbf2ce6..24b4174a84bf 100644
--- a/net/ipv4/arp.c
+++ b/net/ipv4/arp.c
@@ -221,11 +221,16 @@ static bool arp_key_eq(const struct neighbour *neigh, const void *pkey)
 
 static int arp_constructor(struct neighbour *neigh)
 {
-	__be32 addr = *(__be32 *)neigh->primary_key;
+	__be32 addr;
 	struct net_device *dev = neigh->dev;
 	struct in_device *in_dev;
 	struct neigh_parms *parms;
+	u32 inaddr_any = INADDR_ANY;
 
+	if (dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT))
+		memcpy(neigh->primary_key, &inaddr_any, arp_tbl.key_len);
+
+	addr = *(__be32 *)neigh->primary_key;
 	rcu_read_lock();
 	in_dev = __in_dev_get_rcu(dev);
 	if (!in_dev) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net: Allow neigh contructor functions ability to modify the primary_key
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (245 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] ipv4: Make neigh lookup keys for loopback/point-to-point devices be INADDR_ANY Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] net: tcp: close sock if net namespace is exiting Sasha Levin
                   ` (269 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jim Westfall, David S . Miller, Sasha Levin

From: Jim Westfall <jwestfall@surrealistic.net>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 096b9854c04df86f03b38a97d40b6506e5730919 ]

Use n->primary_key instead of pkey to account for the possibility that a neigh
constructor function may have modified the primary_key value.

Signed-off-by: Jim Westfall <jwestfall@surrealistic.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/core/neighbour.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index cb9a7ab5444c..5fd6c6e699aa 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -492,7 +492,7 @@ struct neighbour *__neigh_create(struct neigh_table *tbl, const void *pkey,
 	if (atomic_read(&tbl->entries) > (1 << nht->hash_shift))
 		nht = neigh_hash_grow(tbl, nht->hash_shift + 1);
 
-	hash_val = tbl->hash(pkey, dev, nht->hash_rnd) >> (32 - nht->hash_shift);
+	hash_val = tbl->hash(n->primary_key, dev, nht->hash_rnd) >> (32 - nht->hash_shift);
 
 	if (n->parms->dead) {
 		rc = ERR_PTR(-EINVAL);
@@ -504,7 +504,7 @@ struct neighbour *__neigh_create(struct neigh_table *tbl, const void *pkey,
 	     n1 != NULL;
 	     n1 = rcu_dereference_protected(n1->next,
 			lockdep_is_held(&tbl->lock))) {
-		if (dev == n1->dev && !memcmp(n1->primary_key, pkey, key_len)) {
+		if (dev == n1->dev && !memcmp(n1->primary_key, n->primary_key, key_len)) {
 			if (want_ref)
 				neigh_hold(n1);
 			rc = n1;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net: tcp: close sock if net namespace is exiting
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (246 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] net: Allow neigh contructor functions ability to modify the primary_key Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] nfsd: auth: Fix gid sorting when rootsquash enabled Sasha Levin
                   ` (268 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Dan Streetman, Dan Streetman, David S . Miller, Sasha Levin

From: Dan Streetman <ddstreet@ieee.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4ee806d51176ba7b8ff1efd81f271d7252e03a1d ]

When a tcp socket is closed, if it detects that its net namespace is
exiting, close immediately and do not wait for FIN sequence.

For normal sockets, a reference is taken to their net namespace, so it will
never exit while the socket is open.  However, kernel sockets do not take a
reference to their net namespace, so it may begin exiting while the kernel
socket is still open.  In this case if the kernel socket is a tcp socket,
it will stay open trying to complete its close sequence.  The sock's dst(s)
hold a reference to their interface, which are all transferred to the
namespace's loopback interface when the real interfaces are taken down.
When the namespace tries to take down its loopback interface, it hangs
waiting for all references to the loopback interface to release, which
results in messages like:

unregister_netdevice: waiting for lo to become free. Usage count = 1

These messages continue until the socket finally times out and closes.
Since the net namespace cleanup holds the net_mutex while calling its
registered pernet callbacks, any new net namespace initialization is
blocked until the current net namespace finishes exiting.

After this change, the tcp socket notices the exiting net namespace, and
closes immediately, releasing its dst(s) and their reference to the
loopback interface, which lets the net namespace continue exiting.

Link: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1711407
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=97811
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/net/net_namespace.h | 10 ++++++++++
 net/ipv4/tcp.c              |  3 +++
 net/ipv4/tcp_timer.c        | 15 +++++++++++++++
 3 files changed, 28 insertions(+)

diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h
index f733656404de..01af6cd44c67 100644
--- a/include/net/net_namespace.h
+++ b/include/net/net_namespace.h
@@ -203,6 +203,11 @@ int net_eq(const struct net *net1, const struct net *net2)
 	return net1 == net2;
 }
 
+static inline int check_net(const struct net *net)
+{
+	return atomic_read(&net->count) != 0;
+}
+
 void net_drop_ns(void *);
 
 #else
@@ -227,6 +232,11 @@ int net_eq(const struct net *net1, const struct net *net2)
 	return 1;
 }
 
+static inline int check_net(const struct net *net)
+{
+	return 1;
+}
+
 #define net_drop_ns NULL
 #endif
 
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index a1de8300cfce..6c9c147a5fff 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -2137,6 +2137,9 @@ void tcp_close(struct sock *sk, long timeout)
 			tcp_send_active_reset(sk, GFP_ATOMIC);
 			NET_INC_STATS_BH(sock_net(sk),
 					LINUX_MIB_TCPABORTONMEMORY);
+		} else if (!check_net(sock_net(sk))) {
+			/* Not possible to send reset; just close */
+			tcp_set_state(sk, TCP_CLOSE);
 		}
 	}
 
diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
index f8c6b2343301..4a3f230ef91b 100644
--- a/net/ipv4/tcp_timer.c
+++ b/net/ipv4/tcp_timer.c
@@ -46,11 +46,19 @@ static void tcp_write_err(struct sock *sk)
  * to prevent DoS attacks. It is called when a retransmission timeout
  * or zero probe timeout occurs on orphaned socket.
  *
+ * Also close if our net namespace is exiting; in that case there is no
+ * hope of ever communicating again since all netns interfaces are already
+ * down (or about to be down), and we need to release our dst references,
+ * which have been moved to the netns loopback interface, so the namespace
+ * can finish exiting.  This condition is only possible if we are a kernel
+ * socket, as those do not hold references to the namespace.
+ *
  * Criteria is still not confirmed experimentally and may change.
  * We kill the socket, if:
  * 1. If number of orphaned sockets exceeds an administratively configured
  *    limit.
  * 2. If we have strong memory pressure.
+ * 3. If our net namespace is exiting.
  */
 static int tcp_out_of_resources(struct sock *sk, bool do_reset)
 {
@@ -79,6 +87,13 @@ static int tcp_out_of_resources(struct sock *sk, bool do_reset)
 		NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPABORTONMEMORY);
 		return 1;
 	}
+
+	if (!check_net(sock_net(sk))) {
+		/* Not possible to send reset; just close */
+		tcp_done(sk);
+		return 1;
+	}
+
 	return 0;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] nfsd: auth: Fix gid sorting when rootsquash enabled
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (247 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] net: tcp: close sock if net namespace is exiting Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] loop: fix concurrent lo_open/lo_release Sasha Levin
                   ` (267 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Ben Hutchings, Linus Torvalds, Sasha Levin

From: Ben Hutchings <ben.hutchings@codethink.co.uk>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1995266727fa8143897e89b55f5d3c79aa828420 ]

Commit bdcf0a423ea1 ("kernel: make groups_sort calling a responsibility
group_info allocators") appears to break nfsd rootsquash in a pretty
major way.

It adds a call to groups_sort() inside the loop that copies/squashes
gids, which means the valid gids are sorted along with the following
garbage.  The net result is that the highest numbered valid gids are
replaced with any lower-valued garbage gids, possibly including 0.

We should sort only once, after filling in all the gids.

Fixes: bdcf0a423ea1 ("kernel: make groups_sort calling a responsibility ...")
Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
Acked-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/nfsd/auth.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/fs/nfsd/auth.c b/fs/nfsd/auth.c
index a260060042ad..67eb154af881 100644
--- a/fs/nfsd/auth.c
+++ b/fs/nfsd/auth.c
@@ -60,9 +60,10 @@ int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp)
 			else
 				GROUP_AT(gi, i) = GROUP_AT(rqgi, i);
 
-			/* Each thread allocates its own gi, no race */
-			groups_sort(gi);
 		}
+
+		/* Each thread allocates its own gi, no race */
+		groups_sort(gi);
 	} else {
 		gi = get_group_info(rqgi);
 	}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] loop: fix concurrent lo_open/lo_release
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (248 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] nfsd: auth: Fix gid sorting when rootsquash enabled Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] bpf: fix divides by zero Sasha Levin
                   ` (266 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Linus Torvalds, Jens Axboe, Sasha Levin

From: Linus Torvalds <torvalds@linux-foundation.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ae6650163c66a7eff1acd6eb8b0f752dcfa8eba5 ]

范龙飞 reports that KASAN can report a use-after-free in __lock_acquire.
The reason is due to insufficient serialization in lo_release(), which
will continue to use the loop device even after it has decremented the
lo_refcnt to zero.

In the meantime, another process can come in, open the loop device
again as it is being shut down. Confusion ensues.

Reported-by: 范龙飞 <long7573@126.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/block/loop.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index ea0c863861b9..b5dbce192c6b 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -1338,9 +1338,8 @@ static int lo_open(struct block_device *bdev, fmode_t mode)
 	return err;
 }
 
-static void lo_release(struct gendisk *disk, fmode_t mode)
+static void __lo_release(struct loop_device *lo)
 {
-	struct loop_device *lo = disk->private_data;
 	int err;
 
 	mutex_lock(&lo->lo_ctl_mutex);
@@ -1368,6 +1367,13 @@ static void lo_release(struct gendisk *disk, fmode_t mode)
 	mutex_unlock(&lo->lo_ctl_mutex);
 }
 
+static void lo_release(struct gendisk *disk, fmode_t mode)
+{
+	mutex_lock(&loop_index_mutex);
+	__lo_release(disk->private_data);
+	mutex_unlock(&loop_index_mutex);
+}
+
 static const struct block_device_operations lo_fops = {
 	.owner =	THIS_MODULE,
 	.open =		lo_open,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] bpf: arsh is not supported in 32 bit alu thus reject it
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (250 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] bpf: fix divides by zero Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] gpio: iop: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE Sasha Levin
                   ` (264 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Daniel Borkmann, Alexei Starovoitov, Sasha Levin

From: Daniel Borkmann <daniel@iogearbox.net>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7891a87efc7116590eaba57acc3c422487802c6f ]

The following snippet was throwing an 'unknown opcode cc' warning
in BPF interpreter:

  0: (18) r0 = 0x0
  2: (7b) *(u64 *)(r10 -16) = r0
  3: (cc) (u32) r0 s>>= (u32) r0
  4: (95) exit

Although a number of JITs do support BPF_ALU | BPF_ARSH | BPF_{K,X}
generation, not all of them do and interpreter does neither. We can
leave existing ones and implement it later in bpf-next for the
remaining ones, but reject this properly in verifier for the time
being.

Fixes: 17a5267067f3 ("bpf: verifier (add verifier core)")
Reported-by: syzbot+93c4904c5c70348a6890@syzkaller.appspotmail.com
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/bpf/verifier.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 1bdc6f910a1d..03d74868c709 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -1020,6 +1020,11 @@ static int check_alu_op(struct reg_state *regs, struct bpf_insn *insn)
 			return -EINVAL;
 		}
 
+		if (opcode == BPF_ARSH && BPF_CLASS(insn->code) != BPF_ALU64) {
+			verbose("BPF_ARSH not supported for 32 bit ALU\n");
+			return -EINVAL;
+		}
+
 		if ((opcode == BPF_LSH || opcode == BPF_RSH ||
 		     opcode == BPF_ARSH) && BPF_SRC(insn->code) == BPF_K) {
 			int size = BPF_CLASS(insn->code) == BPF_ALU64 ? 64 : 32;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] bpf: fix divides by zero
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (249 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] loop: fix concurrent lo_open/lo_release Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] bpf: arsh is not supported in 32 bit alu thus reject it Sasha Levin
                   ` (265 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Dumazet, Alexei Starovoitov, Sasha Levin

From: Eric Dumazet <edumazet@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c366287ebd698ef5e3de300d90cd62ee9ee7373e ]

Divides by zero are not nice, lets avoid them if possible.

Also do_div() seems not needed when dealing with 32bit operands,
but this seems a minor detail.

Fixes: bd4cf0ed331a ("net: filter: rework/optimize internal BPF interpreter's instruction set")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/bpf/core.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
index 54f0e7fcd0e2..199b54e75359 100644
--- a/kernel/bpf/core.c
+++ b/kernel/bpf/core.c
@@ -361,7 +361,7 @@ static unsigned int __bpf_prog_run(void *ctx, const struct bpf_insn *insn)
 		DST = tmp;
 		CONT;
 	ALU_MOD_X:
-		if (unlikely(SRC == 0))
+		if (unlikely((u32)SRC == 0))
 			return 0;
 		tmp = (u32) DST;
 		DST = do_div(tmp, (u32) SRC);
@@ -380,7 +380,7 @@ static unsigned int __bpf_prog_run(void *ctx, const struct bpf_insn *insn)
 		DST = div64_u64(DST, SRC);
 		CONT;
 	ALU_DIV_X:
-		if (unlikely(SRC == 0))
+		if (unlikely((u32)SRC == 0))
 			return 0;
 		tmp = (u32) DST;
 		do_div(tmp, (u32) SRC);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] gpio: iop: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (251 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] bpf: arsh is not supported in 32 bit alu thus reject it Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] ALSA: seq: Make ioctls race-free Sasha Levin
                   ` (263 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jesse Chan, Linus Walleij, Sasha Levin

From: Jesse Chan <jc@linux.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 97b03136e1b637d7a9d2274c099e44ecf23f1103 ]

This change resolves a new compile-time warning
when built as a loadable module:

WARNING: modpost: missing MODULE_LICENSE() in drivers/gpio/gpio-iop.o
see include/linux/module.h for more information

This adds the license as "GPL", which matches the header of the file.

MODULE_DESCRIPTION and MODULE_AUTHOR are also added.

Signed-off-by: Jesse Chan <jc@linux.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/gpio/gpio-iop.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/gpio/gpio-iop.c b/drivers/gpio/gpio-iop.c
index 2ed0237a8baf..304e68633d29 100644
--- a/drivers/gpio/gpio-iop.c
+++ b/drivers/gpio/gpio-iop.c
@@ -129,3 +129,7 @@ static int __init iop3xx_gpio_init(void)
 	return platform_driver_register(&iop3xx_gpio_driver);
 }
 arch_initcall(iop3xx_gpio_init);
+
+MODULE_DESCRIPTION("GPIO handling for Intel IOP3xx processors");
+MODULE_AUTHOR("Lennert Buytenhek <buytenh@wantstofly.org>");
+MODULE_LICENSE("GPL");
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: seq: Make ioctls race-free
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (252 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] gpio: iop: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] igb: Free IRQs when device is hotplugged Sasha Levin
                   ` (262 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Takashi Iwai, Sasha Levin

From: Takashi Iwai <tiwai@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b3defb791b26ea0683a93a4f49c77ec45ec96f10 ]

The ALSA sequencer ioctls have no protection against racy calls while
the concurrent operations may lead to interfere with each other.  As
reported recently, for example, the concurrent calls of setting client
pool with a combination of write calls may lead to either the
unkillable dead-lock or UAF.

As a slightly big hammer solution, this patch introduces the mutex to
make each ioctl exclusive.  Although this may reduce performance via
parallel ioctl calls, usually it's not demanded for sequencer usages,
hence it should be negligible.

Reported-by: Luo Quan <a4651386@163.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/core/seq/seq_clientmgr.c | 10 ++++++++--
 sound/core/seq/seq_clientmgr.h |  1 +
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
index e3767122dd0b..df524126a336 100644
--- a/sound/core/seq/seq_clientmgr.c
+++ b/sound/core/seq/seq_clientmgr.c
@@ -236,6 +236,7 @@ static struct snd_seq_client *seq_create_client1(int client_index, int poolsize)
 	rwlock_init(&client->ports_lock);
 	mutex_init(&client->ports_mutex);
 	INIT_LIST_HEAD(&client->ports_list_head);
+	mutex_init(&client->ioctl_mutex);
 
 	/* find free slot in the client table */
 	spin_lock_irqsave(&clients_lock, flags);
@@ -2195,6 +2196,7 @@ static int snd_seq_do_ioctl(struct snd_seq_client *client, unsigned int cmd,
 			    void __user *arg)
 {
 	struct seq_ioctl_table *p;
+	int ret;
 
 	switch (cmd) {
 	case SNDRV_SEQ_IOCTL_PVERSION:
@@ -2208,8 +2210,12 @@ static int snd_seq_do_ioctl(struct snd_seq_client *client, unsigned int cmd,
 	if (! arg)
 		return -EFAULT;
 	for (p = ioctl_tables; p->cmd; p++) {
-		if (p->cmd == cmd)
-			return p->func(client, arg);
+		if (p->cmd == cmd) {
+			mutex_lock(&client->ioctl_mutex);
+			ret = p->func(client, arg);
+			mutex_unlock(&client->ioctl_mutex);
+			return ret;
+		}
 	}
 	pr_debug("ALSA: seq unknown ioctl() 0x%x (type='%c', number=0x%02x)\n",
 		   cmd, _IOC_TYPE(cmd), _IOC_NR(cmd));
diff --git a/sound/core/seq/seq_clientmgr.h b/sound/core/seq/seq_clientmgr.h
index 20f0a725ec7d..91f8f165bfdc 100644
--- a/sound/core/seq/seq_clientmgr.h
+++ b/sound/core/seq/seq_clientmgr.h
@@ -59,6 +59,7 @@ struct snd_seq_client {
 	struct list_head ports_list_head;
 	rwlock_t ports_lock;
 	struct mutex ports_mutex;
+	struct mutex ioctl_mutex;
 	int convert32;		/* convert 32->64bit */
 
 	/* output pool */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] igb: Free IRQs when device is hotplugged
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (253 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] ALSA: seq: Make ioctls race-free Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] KVM: x86: emulator: Return to user-mode on L1 CPL=0 emulation failure Sasha Levin
                   ` (261 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Lyude Paul, Jeff Kirsher, Sasha Levin

From: Lyude Paul <lyude@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 888f22931478a05bc81ceb7295c626e1292bf0ed ]

Recently I got a Caldigit TS3 Thunderbolt 3 dock, and noticed that upon
hotplugging my kernel would immediately crash due to igb:

[  680.825801] kernel BUG at drivers/pci/msi.c:352!
[  680.828388] invalid opcode: 0000 [#1] SMP
[  680.829194] Modules linked in: igb(O) thunderbolt i2c_algo_bit joydev vfat fat btusb btrtl btbcm btintel bluetooth ecdh_generic hp_wmi sparse_keymap rfkill wmi_bmof iTCO_wdt intel_rapl x86_pkg_temp_thermal coretemp crc32_pclmul snd_pcm rtsx_pci_ms mei_me snd_timer memstick snd pcspkr mei soundcore i2c_i801 tpm_tis psmouse shpchp wmi tpm_tis_core tpm video hp_wireless acpi_pad rtsx_pci_sdmmc mmc_core crc32c_intel serio_raw rtsx_pci mfd_core xhci_pci xhci_hcd i2c_hid i2c_core [last unloaded: igb]
[  680.831085] CPU: 1 PID: 78 Comm: kworker/u16:1 Tainted: G           O     4.15.0-rc3Lyude-Test+ #6
[  680.831596] Hardware name: HP HP ZBook Studio G4/826B, BIOS P71 Ver. 01.03 06/09/2017
[  680.832168] Workqueue: kacpi_hotplug acpi_hotplug_work_fn
[  680.832687] RIP: 0010:free_msi_irqs+0x180/0x1b0
[  680.833271] RSP: 0018:ffffc9000030fbf0 EFLAGS: 00010286
[  680.833761] RAX: ffff8803405f9c00 RBX: ffff88033e3d2e40 RCX: 000000000000002c
[  680.834278] RDX: 0000000000000000 RSI: 00000000000000ac RDI: ffff880340be2178
[  680.834832] RBP: 0000000000000000 R08: ffff880340be1ff0 R09: ffff8803405f9c00
[  680.835342] R10: 0000000000000000 R11: 0000000000000040 R12: ffff88033d63a298
[  680.835822] R13: ffff88033d63a000 R14: 0000000000000060 R15: ffff880341959000
[  680.836332] FS:  0000000000000000(0000) GS:ffff88034f440000(0000) knlGS:0000000000000000
[  680.836817] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  680.837360] CR2: 000055e64044afdf CR3: 0000000001c09002 CR4: 00000000003606e0
[  680.837954] Call Trace:
[  680.838853]  pci_disable_msix+0xce/0xf0
[  680.839616]  igb_reset_interrupt_capability+0x5d/0x60 [igb]
[  680.840278]  igb_remove+0x9d/0x110 [igb]
[  680.840764]  pci_device_remove+0x36/0xb0
[  680.841279]  device_release_driver_internal+0x157/0x220
[  680.841739]  pci_stop_bus_device+0x7d/0xa0
[  680.842255]  pci_stop_bus_device+0x2b/0xa0
[  680.842722]  pci_stop_bus_device+0x3d/0xa0
[  680.843189]  pci_stop_and_remove_bus_device+0xe/0x20
[  680.843627]  trim_stale_devices+0xf3/0x140
[  680.844086]  trim_stale_devices+0x94/0x140
[  680.844532]  trim_stale_devices+0xa6/0x140
[  680.845031]  ? get_slot_status+0x90/0xc0
[  680.845536]  acpiphp_check_bridge.part.5+0xfe/0x140
[  680.846021]  acpiphp_hotplug_notify+0x175/0x200
[  680.846581]  ? free_bridge+0x100/0x100
[  680.847113]  acpi_device_hotplug+0x8a/0x490
[  680.847535]  acpi_hotplug_work_fn+0x1a/0x30
[  680.848076]  process_one_work+0x182/0x3a0
[  680.848543]  worker_thread+0x2e/0x380
[  680.848963]  ? process_one_work+0x3a0/0x3a0
[  680.849373]  kthread+0x111/0x130
[  680.849776]  ? kthread_create_worker_on_cpu+0x50/0x50
[  680.850188]  ret_from_fork+0x1f/0x30
[  680.850601] Code: 43 14 85 c0 0f 84 d5 fe ff ff 31 ed eb 0f 83 c5 01 39 6b 14 0f 86 c5 fe ff ff 8b 7b 10 01 ef e8 b7 e4 d2 ff 48 83 78 70 00 74 e3 <0f> 0b 49 8d b5 a0 00 00 00 e8 62 6f d3 ff e9 c7 fe ff ff 48 8b
[  680.851497] RIP: free_msi_irqs+0x180/0x1b0 RSP: ffffc9000030fbf0

As it turns out, normally the freeing of IRQs that would fix this is called
inside of the scope of __igb_close(). However, since the device is
already gone by the point we try to unregister the netdevice from the
driver due to a hotplug we end up seeing that the netif isn't present
and thus, forget to free any of the device IRQs.

So: make sure that if we're in the process of dismantling the netdev, we
always allow __igb_close() to be called so that IRQs may be freed
normally. Additionally, only allow igb_close() to be called from
__igb_close() if it hasn't already been called for the given adapter.

Signed-off-by: Lyude Paul <lyude@redhat.com>
Fixes: 9474933caf21 ("igb: close/suspend race in netif_device_detach")
Cc: Todd Fujinaka <todd.fujinaka@intel.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Cc: stable@vger.kernel.org
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/intel/igb/igb_main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index 2d54a9e40d7c..cfcafea9d2b6 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -3169,7 +3169,7 @@ static int __igb_close(struct net_device *netdev, bool suspending)
 
 static int igb_close(struct net_device *netdev)
 {
-	if (netif_device_present(netdev))
+	if (netif_device_present(netdev) || netdev->dismantle)
 		return __igb_close(netdev, false);
 	return 0;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] KVM: x86: Don't re-execute instruction when not passing CR2 value
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (255 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] KVM: x86: emulator: Return to user-mode on L1 CPL=0 emulation failure Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] KVM: X86: Fix operand/address-size during instruction decoding Sasha Levin
                   ` (259 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Liran Alon, Konrad Rzeszutek Wilk, Radim Krčmář,
	Sasha Levin

From: Liran Alon <liran.alon@oracle.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9b8ae63798cb97e785a667ff27e43fa6220cb734 ]

In case of instruction-decode failure or emulation failure,
x86_emulate_instruction() will call reexecute_instruction() which will
attempt to use the cr2 value passed to x86_emulate_instruction().
However, when x86_emulate_instruction() is called from
emulate_instruction(), cr2 is not passed (passed as 0) and therefore
it doesn't make sense to execute reexecute_instruction() logic at all.

Fixes: 51d8b66199e9 ("KVM: cleanup emulate_instruction")

Signed-off-by: Liran Alon <liran.alon@oracle.com>
Reviewed-by: Nikita Leshenko <nikita.leshchenko@oracle.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Wanpeng Li <wanpeng.li@hotmail.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/kvm_host.h | 3 ++-
 arch/x86/kvm/vmx.c              | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 606f5fff1989..6e014befd522 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -933,7 +933,8 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu, unsigned long cr2,
 static inline int emulate_instruction(struct kvm_vcpu *vcpu,
 			int emulation_type)
 {
-	return x86_emulate_instruction(vcpu, 0, emulation_type, NULL, 0);
+	return x86_emulate_instruction(vcpu, 0,
+			emulation_type | EMULTYPE_NO_REEXECUTE, NULL, 0);
 }
 
 void kvm_enable_efer_bits(u64);
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 23d5c2fc7573..8c011383844a 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -5929,7 +5929,7 @@ static int handle_invalid_guest_state(struct kvm_vcpu *vcpu)
 		if (test_bit(KVM_REQ_EVENT, &vcpu->requests))
 			return 1;
 
-		err = emulate_instruction(vcpu, EMULTYPE_NO_REEXECUTE);
+		err = emulate_instruction(vcpu, 0);
 
 		if (err == EMULATE_USER_EXIT) {
 			++vcpu->stat.mmio_exits;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] KVM: x86: emulator: Return to user-mode on L1 CPL=0 emulation failure
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (254 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] igb: Free IRQs when device is hotplugged Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] KVM: x86: Don't re-execute instruction when not passing CR2 value Sasha Levin
                   ` (260 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Liran Alon, Konrad Rzeszutek Wilk, Radim Krčmář,
	Sasha Levin

From: Liran Alon <liran.alon@oracle.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1f4dcb3b213235e642088709a1c54964d23365e9 ]

On this case, handle_emulation_failure() fills kvm_run with
internal-error information which it expects to be delivered
to user-mode for further processing.
However, the code reports a wrong return-value which makes KVM to never
return to user-mode on this scenario.

Fixes: 6d77dbfc88e3 ("KVM: inject #UD if instruction emulation fails and exit to
userspace")

Signed-off-by: Liran Alon <liran.alon@oracle.com>
Reviewed-by: Nikita Leshenko <nikita.leshchenko@oracle.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Wanpeng Li <wanpeng.li@hotmail.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kvm/x86.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index be699d1c260f..261b05711246 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -5187,7 +5187,7 @@ static int handle_emulation_failure(struct kvm_vcpu *vcpu)
 		vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
 		vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_EMULATION;
 		vcpu->run->internal.ndata = 0;
-		r = EMULATE_FAIL;
+		r = EMULATE_USER_EXIT;
 	}
 	kvm_queue_exception(vcpu, UD_VECTOR);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] KVM: X86: Fix operand/address-size during instruction decoding
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (256 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] KVM: x86: Don't re-execute instruction when not passing CR2 value Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] cpufreq: Add Loongson machine dependencies Sasha Levin
                   ` (258 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Wanpeng Li, Radim Krčmář, Sasha Levin

From: Wanpeng Li <wanpeng.li@hotmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 3853be2603191829b442b64dac6ae8ba0c027bf9 ]

Pedro reported:
  During tests that we conducted on KVM, we noticed that executing a "PUSH %ES"
  instruction under KVM produces different results on both memory and the SP
  register depending on whether EPT support is enabled. With EPT the SP is
  reduced by 4 bytes (and the written value is 0-padded) but without EPT support
  it is only reduced by 2 bytes. The difference can be observed when the CS.DB
  field is 1 (32-bit) but not when it's 0 (16-bit).

The internal segment descriptor cache exist even in real/vm8096 mode. The CS.D
also should be respected instead of just default operand/address-size/66H
prefix/67H prefix during instruction decoding. This patch fixes it by also
adjusting operand/address-size according to CS.D.

Reported-by: Pedro Fonseca <pfonseca@cs.washington.edu>
Tested-by: Pedro Fonseca <pfonseca@cs.washington.edu>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Cc: Nadav Amit <nadav.amit@gmail.com>
Cc: Pedro Fonseca <pfonseca@cs.washington.edu>
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kvm/emulate.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index d877a59f8de8..dd49efe915e1 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -4480,6 +4480,8 @@ int x86_decode_insn(struct x86_emulate_ctxt *ctxt, void *insn, int insn_len)
 	bool op_prefix = false;
 	bool has_seg_override = false;
 	struct opcode opcode;
+	u16 dummy;
+	struct desc_struct desc;
 
 	ctxt->memop.type = OP_NONE;
 	ctxt->memopp = NULL;
@@ -4498,6 +4500,11 @@ int x86_decode_insn(struct x86_emulate_ctxt *ctxt, void *insn, int insn_len)
 	switch (mode) {
 	case X86EMUL_MODE_REAL:
 	case X86EMUL_MODE_VM86:
+		def_op_bytes = def_ad_bytes = 2;
+		ctxt->ops->get_segment(ctxt, &dummy, &desc, NULL, VCPU_SREG_CS);
+		if (desc.d)
+			def_op_bytes = def_ad_bytes = 4;
+		break;
 	case X86EMUL_MODE_PROT16:
 		def_op_bytes = def_ad_bytes = 2;
 		break;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] bcache: check return value of register_shrinker
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (258 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] cpufreq: Add Loongson machine dependencies Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] drm/amdkfd: Fix SDMA oversubsription handling Sasha Levin
                   ` (256 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Michael Lyle, Jens Axboe, Sasha Levin

From: Michael Lyle <mlyle@lyle.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6c4ca1e36cdc1a0a7a84797804b87920ccbebf51 ]

register_shrinker is now __must_check, so check it to kill a warning.
Caller of bch_btree_cache_alloc in super.c appropriately checks return
value so this is fully plumbed through.

This V2 fixes checkpatch warnings and improves the commit description,
as I was too hasty getting the previous version out.

Signed-off-by: Michael Lyle <mlyle@lyle.org>
Reviewed-by: Vojtech Pavlik <vojtech@suse.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/md/bcache/btree.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
index f0b75d54951a..ee2927b460c9 100644
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
@@ -808,7 +808,10 @@ int bch_btree_cache_alloc(struct cache_set *c)
 	c->shrink.scan_objects = bch_mca_scan;
 	c->shrink.seeks = 4;
 	c->shrink.batch = c->btree_pages * 2;
-	register_shrinker(&c->shrink);
+
+	if (register_shrinker(&c->shrink))
+		pr_warn("bcache: %s: could not register shrinker",
+				__func__);
 
 	return 0;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] cpufreq: Add Loongson machine dependencies
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (257 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] KVM: X86: Fix operand/address-size during instruction decoding Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] bcache: check return value of register_shrinker Sasha Levin
                   ` (257 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: James Hogan, Rafael J . Wysocki, Sasha Levin

From: James Hogan <jhogan@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 0d307935fefa6389eb726c6362351c162c949101 ]

The MIPS loongson cpufreq drivers don't build unless configured for the
correct machine type, due to dependency on machine specific architecture
headers and symbols in machine specific platform code.

More specifically loongson1-cpufreq.c uses RST_CPU_EN and RST_CPU,
neither of which is defined in asm/mach-loongson32/regs-clk.h unless
CONFIG_LOONGSON1_LS1B=y, and loongson2_cpufreq.c references
loongson2_clockmod_table[], which is only defined in
arch/mips/loongson64/lemote-2f/clock.c, i.e. when
CONFIG_LEMOTE_MACH2F=y.

Add these dependencies to Kconfig to avoid randconfig / allyesconfig
build failures (e.g. when based on BMIPS which also has a cpufreq
driver).

Signed-off-by: James Hogan <jhogan@kernel.org>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/cpufreq/Kconfig | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig
index 659879a56dba..949610360b14 100644
--- a/drivers/cpufreq/Kconfig
+++ b/drivers/cpufreq/Kconfig
@@ -236,6 +236,7 @@ endif
 if MIPS
 config LOONGSON2_CPUFREQ
 	tristate "Loongson2 CPUFreq Driver"
+	depends on LEMOTE_MACH2F
 	help
 	  This option adds a CPUFreq driver for loongson processors which
 	  support software configurable cpu frequency.
@@ -248,6 +249,7 @@ config LOONGSON2_CPUFREQ
 
 config LOONGSON1_CPUFREQ
 	tristate "Loongson1 CPUFreq Driver"
+	depends on LOONGSON1_LS1B
 	help
 	  This option adds a CPUFreq driver for loongson1 processors which
 	  support software configurable cpu frequency.
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] drm/amdkfd: Fix SDMA oversubsription handling
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (259 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] bcache: check return value of register_shrinker Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] openvswitch: fix the incorrect flow action alloc size Sasha Levin
                   ` (255 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Felix Kuehling, shaoyun liu, Oded Gabbay, Sasha Levin

From: Felix Kuehling <Felix.Kuehling@amd.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8c946b8988acec785bcf67088b6bd0747f36d2d3 ]

SDMA only supports a fixed number of queues. HWS cannot handle
oversubscription.

Signed-off-by: shaoyun liu <shaoyun.liu@amd.com>
Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com>
Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
index 530b82c4e78b..7c736e8d7f33 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
@@ -189,6 +189,24 @@ int pqm_create_queue(struct process_queue_manager *pqm,
 
 	switch (type) {
 	case KFD_QUEUE_TYPE_SDMA:
+		if (dev->dqm->queue_count >=
+			CIK_SDMA_QUEUES_PER_ENGINE * CIK_SDMA_ENGINE_NUM) {
+			pr_err("Over-subscription is not allowed for SDMA.\n");
+			retval = -EPERM;
+			goto err_create_queue;
+		}
+
+		retval = create_cp_queue(pqm, dev, &q, properties, f, *qid);
+		if (retval != 0)
+			goto err_create_queue;
+		pqn->q = q;
+		pqn->kq = NULL;
+		retval = dev->dqm->ops.create_queue(dev->dqm, q, &pdd->qpd,
+						&q->properties.vmid);
+		pr_debug("DQM returned %d for create_queue\n", retval);
+		print_queue(q);
+		break;
+
 	case KFD_QUEUE_TYPE_COMPUTE:
 		/* check if there is over subscription */
 		if ((sched_policy == KFD_SCHED_POLICY_HWS_NO_OVERSUBSCRIPTION) &&
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] openvswitch: fix the incorrect flow action alloc size
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (260 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] drm/amdkfd: Fix SDMA oversubsription handling Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] mac80211: fix the update of path metric for RANN frame Sasha Levin
                   ` (254 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: zhangliping, David S . Miller, Sasha Levin

From: zhangliping <zhangliping02@baidu.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 67c8d22a73128ff910e2287567132530abcf5b71 ]

If we want to add a datapath flow, which has more than 500 vxlan outputs'
action, we will get the following error reports:
  openvswitch: netlink: Flow action size 32832 bytes exceeds max
  openvswitch: netlink: Flow action size 32832 bytes exceeds max
  openvswitch: netlink: Actions may not be safe on all matching packets
  ... ...

It seems that we can simply enlarge the MAX_ACTIONS_BUFSIZE to fix it, but
this is not the root cause. For example, for a vxlan output action, we need
about 60 bytes for the nlattr, but after it is converted to the flow
action, it only occupies 24 bytes. This means that we can still support
more than 1000 vxlan output actions for a single datapath flow under the
the current 32k max limitation.

So even if the nla_len(attr) is larger than MAX_ACTIONS_BUFSIZE, we
shouldn't report EINVAL and keep it move on, as the judgement can be
done by the reserve_sfa_size.

Signed-off-by: zhangliping <zhangliping02@baidu.com>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/openvswitch/flow_netlink.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/net/openvswitch/flow_netlink.c b/net/openvswitch/flow_netlink.c
index c691b1a1eee0..a2601b0c4b0f 100644
--- a/net/openvswitch/flow_netlink.c
+++ b/net/openvswitch/flow_netlink.c
@@ -1531,14 +1531,11 @@ int ovs_nla_put_mask(const struct sw_flow *flow, struct sk_buff *skb)
 
 #define MAX_ACTIONS_BUFSIZE	(32 * 1024)
 
-static struct sw_flow_actions *nla_alloc_flow_actions(int size, bool log)
+static struct sw_flow_actions *nla_alloc_flow_actions(int size)
 {
 	struct sw_flow_actions *sfa;
 
-	if (size > MAX_ACTIONS_BUFSIZE) {
-		OVS_NLERR(log, "Flow action size %u bytes exceeds max", size);
-		return ERR_PTR(-EINVAL);
-	}
+	WARN_ON_ONCE(size > MAX_ACTIONS_BUFSIZE);
 
 	sfa = kmalloc(sizeof(*sfa) + size, GFP_KERNEL);
 	if (!sfa)
@@ -1571,12 +1568,15 @@ static struct nlattr *reserve_sfa_size(struct sw_flow_actions **sfa,
 	new_acts_size = ksize(*sfa) * 2;
 
 	if (new_acts_size > MAX_ACTIONS_BUFSIZE) {
-		if ((MAX_ACTIONS_BUFSIZE - next_offset) < req_size)
+		if ((MAX_ACTIONS_BUFSIZE - next_offset) < req_size) {
+			OVS_NLERR(log, "Flow action size exceeds max %u",
+				  MAX_ACTIONS_BUFSIZE);
 			return ERR_PTR(-EMSGSIZE);
+		}
 		new_acts_size = MAX_ACTIONS_BUFSIZE;
 	}
 
-	acts = nla_alloc_flow_actions(new_acts_size, log);
+	acts = nla_alloc_flow_actions(new_acts_size);
 	if (IS_ERR(acts))
 		return (void *)acts;
 
@@ -2170,7 +2170,7 @@ int ovs_nla_copy_actions(const struct nlattr *attr,
 {
 	int err;
 
-	*sfa = nla_alloc_flow_actions(nla_len(attr), log);
+	*sfa = nla_alloc_flow_actions(min(nla_len(attr), MAX_ACTIONS_BUFSIZE));
 	if (IS_ERR(*sfa))
 		return PTR_ERR(*sfa);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mac80211: fix the update of path metric for RANN frame
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (261 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] openvswitch: fix the incorrect flow action alloc size Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] btrfs: fix deadlock when writing out space cache Sasha Levin
                   ` (253 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Chun-Yeow Yeoh, Johannes Berg, Sasha Levin

From: Chun-Yeow Yeoh <yeohchunyeow@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fbbdad5edf0bb59786a51b94a9d006bc8c2da9a2 ]

The previous path metric update from RANN frame has not considered
the own link metric toward the transmitting mesh STA. Fix this.

Reported-by: Michael65535
Signed-off-by: Chun-Yeow Yeoh <yeohchunyeow@gmail.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/mac80211/mesh_hwmp.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c
index 214e63b84e5c..4efc60236cdb 100644
--- a/net/mac80211/mesh_hwmp.c
+++ b/net/mac80211/mesh_hwmp.c
@@ -763,7 +763,7 @@ static void hwmp_rann_frame_process(struct ieee80211_sub_if_data *sdata,
 	struct mesh_path *mpath;
 	u8 ttl, flags, hopcount;
 	const u8 *orig_addr;
-	u32 orig_sn, metric, metric_txsta, interval;
+	u32 orig_sn, new_metric, orig_metric, last_hop_metric, interval;
 	bool root_is_gate;
 
 	ttl = rann->rann_ttl;
@@ -774,7 +774,7 @@ static void hwmp_rann_frame_process(struct ieee80211_sub_if_data *sdata,
 	interval = le32_to_cpu(rann->rann_interval);
 	hopcount = rann->rann_hopcount;
 	hopcount++;
-	metric = le32_to_cpu(rann->rann_metric);
+	orig_metric = le32_to_cpu(rann->rann_metric);
 
 	/*  Ignore our own RANNs */
 	if (ether_addr_equal(orig_addr, sdata->vif.addr))
@@ -791,7 +791,10 @@ static void hwmp_rann_frame_process(struct ieee80211_sub_if_data *sdata,
 		return;
 	}
 
-	metric_txsta = airtime_link_metric_get(local, sta);
+	last_hop_metric = airtime_link_metric_get(local, sta);
+	new_metric = orig_metric + last_hop_metric;
+	if (new_metric < orig_metric)
+		new_metric = MAX_METRIC;
 
 	mpath = mesh_path_lookup(sdata, orig_addr);
 	if (!mpath) {
@@ -804,7 +807,7 @@ static void hwmp_rann_frame_process(struct ieee80211_sub_if_data *sdata,
 	}
 
 	if (!(SN_LT(mpath->sn, orig_sn)) &&
-	    !(mpath->sn == orig_sn && metric < mpath->rann_metric)) {
+	    !(mpath->sn == orig_sn && new_metric < mpath->rann_metric)) {
 		rcu_read_unlock();
 		return;
 	}
@@ -822,7 +825,7 @@ static void hwmp_rann_frame_process(struct ieee80211_sub_if_data *sdata,
 	}
 
 	mpath->sn = orig_sn;
-	mpath->rann_metric = metric + metric_txsta;
+	mpath->rann_metric = new_metric;
 	mpath->is_root = true;
 	/* Recording RANNs sender address to send individually
 	 * addressed PREQs destined for root mesh STA */
@@ -842,7 +845,7 @@ static void hwmp_rann_frame_process(struct ieee80211_sub_if_data *sdata,
 		mesh_path_sel_frame_tx(MPATH_RANN, flags, orig_addr,
 				       orig_sn, 0, NULL, 0, broadcast_addr,
 				       hopcount, ttl, interval,
-				       metric + metric_txsta, 0, sdata);
+				       new_metric, 0, sdata);
 	}
 
 	rcu_read_unlock();
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] btrfs: fix deadlock when writing out space cache
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (262 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] mac80211: fix the update of path metric for RANN frame Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] KVM: VMX: Fix rflags cache during vCPU reset Sasha Levin
                   ` (252 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Josef Bacik, David Sterba, Sasha Levin

From: Josef Bacik <jbacik@fb.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b77000ed558daa3bef0899d29bf171b8c9b5e6a8 ]

If we fail to prepare our pages for whatever reason (out of memory in
our case) we need to make sure to drop the block_group->data_rwsem,
otherwise hilarity ensues.

Signed-off-by: Josef Bacik <jbacik@fb.com>
Reviewed-by: Omar Sandoval <osandov@fb.com>
Reviewed-by: Liu Bo <bo.li.liu@oracle.com>
Reviewed-by: David Sterba <dsterba@suse.com>
[ add label and use existing unlocking code ]
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/btrfs/free-space-cache.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c
index 9dbe5b548fa6..0814dffa30c8 100644
--- a/fs/btrfs/free-space-cache.c
+++ b/fs/btrfs/free-space-cache.c
@@ -1260,7 +1260,7 @@ static int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
 	/* Lock all pages first so we can lock the extent safely. */
 	ret = io_ctl_prepare_pages(io_ctl, inode, 0);
 	if (ret)
-		goto out;
+		goto out_unlock;
 
 	lock_extent_bits(&BTRFS_I(inode)->io_tree, 0, i_size_read(inode) - 1,
 			 0, &cached_state);
@@ -1353,6 +1353,7 @@ static int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
 out_nospc:
 	cleanup_write_cache_enospc(inode, io_ctl, &cached_state, &bitmap_list);
 
+out_unlock:
 	if (block_group && (block_group->flags & BTRFS_BLOCK_GROUP_DATA))
 		up_write(&block_group->data_rwsem);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] xen-netfront: remove warning when unloading module
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (264 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] KVM: VMX: Fix rflags cache during vCPU reset Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] nfsd: CLOSE SHOULD return the invalid special stateid for NFSv4.x (x>0) Sasha Levin
                   ` (250 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eduardo Otubo, David S . Miller, Sasha Levin

From: Eduardo Otubo <otubo@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5b5971df3bc2775107ddad164018a8a8db633b81 ]

v2:
 * Replace busy wait with wait_event()/wake_up_all()
 * Cannot garantee that at the time xennet_remove is called, the
   xen_netback state will not be XenbusStateClosed, so added a
   condition for that
 * There's a small chance for the xen_netback state is
   XenbusStateUnknown by the time the xen_netfront switches to Closed,
   so added a condition for that.

When unloading module xen_netfront from guest, dmesg would output
warning messages like below:

  [  105.236836] xen:grant_table: WARNING: g.e. 0x903 still in use!
  [  105.236839] deferring g.e. 0x903 (pfn 0x35805)

This problem relies on netfront and netback being out of sync. By the time
netfront revokes the g.e.'s netback didn't have enough time to free all of
them, hence displaying the warnings on dmesg.

The trick here is to make netfront to wait until netback frees all the g.e.'s
and only then continue to cleanup for the module removal, and this is done by
manipulating both device states.

Signed-off-by: Eduardo Otubo <otubo@redhat.com>
Acked-by: Juergen Gross <jgross@suse.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/xen-netfront.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index 8a38a5bd34b8..9e8461466534 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -87,6 +87,8 @@ struct netfront_cb {
 /* IRQ name is queue name with "-tx" or "-rx" appended */
 #define IRQ_NAME_SIZE (QUEUE_NAME_SIZE + 3)
 
+static DECLARE_WAIT_QUEUE_HEAD(module_unload_q);
+
 struct netfront_stats {
 	u64			packets;
 	u64			bytes;
@@ -1999,10 +2001,12 @@ static void netback_changed(struct xenbus_device *dev,
 		break;
 
 	case XenbusStateClosed:
+		wake_up_all(&module_unload_q);
 		if (dev->state == XenbusStateClosed)
 			break;
 		/* Missed the backend's CLOSING state -- fallthrough */
 	case XenbusStateClosing:
+		wake_up_all(&module_unload_q);
 		xenbus_frontend_closed(dev);
 		break;
 	}
@@ -2108,6 +2112,20 @@ static int xennet_remove(struct xenbus_device *dev)
 
 	dev_dbg(&dev->dev, "%s\n", dev->nodename);
 
+	if (xenbus_read_driver_state(dev->otherend) != XenbusStateClosed) {
+		xenbus_switch_state(dev, XenbusStateClosing);
+		wait_event(module_unload_q,
+			   xenbus_read_driver_state(dev->otherend) ==
+			   XenbusStateClosing);
+
+		xenbus_switch_state(dev, XenbusStateClosed);
+		wait_event(module_unload_q,
+			   xenbus_read_driver_state(dev->otherend) ==
+			   XenbusStateClosed ||
+			   xenbus_read_driver_state(dev->otherend) ==
+			   XenbusStateUnknown);
+	}
+
 	xennet_disconnect_backend(info);
 
 	unregister_netdev(info->netdev);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] KVM: VMX: Fix rflags cache during vCPU reset
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (263 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] btrfs: fix deadlock when writing out space cache Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] xen-netfront: remove warning when unloading module Sasha Levin
                   ` (251 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Wanpeng Li, Paolo Bonzini, Sasha Levin

From: Wanpeng Li <wanpeng.li@hotmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c37c28730bb031cc8a44a130c2555c0f3efbe2d0 ]

Reported by syzkaller:

   *** Guest State ***
   CR0: actual=0x0000000080010031, shadow=0x0000000060000010, gh_mask=fffffffffffffff7
   CR4: actual=0x0000000000002061, shadow=0x0000000000000000, gh_mask=ffffffffffffe8f1
   CR3 = 0x000000002081e000
   RSP = 0x000000000000fffa  RIP = 0x0000000000000000
   RFLAGS=0x00023000         DR7 = 0x00000000000000
          ^^^^^^^^^^
   ------------[ cut here ]------------
   WARNING: CPU: 6 PID: 24431 at /home/kernel/linux/arch/x86/kvm//x86.c:7302 kvm_arch_vcpu_ioctl_run+0x651/0x2ea0 [kvm]
   CPU: 6 PID: 24431 Comm: reprotest Tainted: G        W  OE   4.14.0+ #26
   RIP: 0010:kvm_arch_vcpu_ioctl_run+0x651/0x2ea0 [kvm]
   RSP: 0018:ffff880291d179e0 EFLAGS: 00010202
   Call Trace:
    kvm_vcpu_ioctl+0x479/0x880 [kvm]
    do_vfs_ioctl+0x142/0x9a0
    SyS_ioctl+0x74/0x80
    entry_SYSCALL_64_fastpath+0x23/0x9a

The failed vmentry is triggered by the following beautified testcase:

    #include <unistd.h>
    #include <sys/syscall.h>
    #include <string.h>
    #include <stdint.h>
    #include <linux/kvm.h>
    #include <fcntl.h>
    #include <sys/ioctl.h>

    long r[5];
    int main()
    {
        struct kvm_debugregs dr = { 0 };

        r[2] = open("/dev/kvm", O_RDONLY);
        r[3] = ioctl(r[2], KVM_CREATE_VM, 0);
        r[4] = ioctl(r[3], KVM_CREATE_VCPU, 7);
        struct kvm_guest_debug debug = {
                .control = 0xf0403,
                .arch = {
                        .debugreg[6] = 0x2,
                        .debugreg[7] = 0x2
                }
        };
        ioctl(r[4], KVM_SET_GUEST_DEBUG, &debug);
        ioctl(r[4], KVM_RUN, 0);
    }

which testcase tries to setup the processor specific debug
registers and configure vCPU for handling guest debug events through
KVM_SET_GUEST_DEBUG.  The KVM_SET_GUEST_DEBUG ioctl will get and set
rflags in order to set TF bit if single step is needed. All regs' caches
are reset to avail and GUEST_RFLAGS vmcs field is reset to 0x2 during vCPU
reset. However, the cache of rflags is not reset during vCPU reset. The
function vmx_get_rflags() returns an unreset rflags cache value since
the cache is marked avail, it is 0 after boot. Vmentry fails if the
rflags reserved bit 1 is 0.

This patch fixes it by resetting both the GUEST_RFLAGS vmcs field and
its cache to 0x2 during vCPU reset.

Reported-by: Dmitry Vyukov <dvyukov@google.com>
Tested-by: Dmitry Vyukov <dvyukov@google.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Cc: Nadav Amit <nadav.amit@gmail.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kvm/vmx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 8c011383844a..1a692b632914 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -4770,7 +4770,7 @@ static void vmx_vcpu_reset(struct kvm_vcpu *vcpu)
 	vmcs_writel(GUEST_SYSENTER_ESP, 0);
 	vmcs_writel(GUEST_SYSENTER_EIP, 0);
 
-	vmcs_writel(GUEST_RFLAGS, 0x02);
+	kvm_set_rflags(vcpu, X86_EFLAGS_FIXED);
 	kvm_rip_write(vcpu, 0xfff0);
 
 	vmcs_writel(GUEST_GDTR_BASE, 0);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] nfsd: CLOSE SHOULD return the invalid special stateid for NFSv4.x (x>0)
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (265 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] xen-netfront: remove warning when unloading module Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] grace: replace BUG_ON by WARN_ONCE in exit_net hook Sasha Levin
                   ` (249 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Trond Myklebust, J . Bruce Fields, Sasha Levin

From: Trond Myklebust <trond.myklebust@primarydata.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fb500a7cfee7f2f447d2bbf30cb59629feab6ac1 ]

Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/nfsd/nfs4state.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 529434f926f1..72019f141ebc 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -63,6 +63,9 @@ static const stateid_t zero_stateid = {
 static const stateid_t currentstateid = {
 	.si_generation = 1,
 };
+static const stateid_t close_stateid = {
+	.si_generation = 0xffffffffU,
+};
 
 static u64 current_sessionid = 1;
 
@@ -5107,6 +5110,11 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
 
 	nfsd4_close_open_stateid(stp);
 
+	/* See RFC5661 sectionm 18.2.4 */
+	if (stp->st_stid.sc_client->cl_minorversion)
+		memcpy(&close->cl_stateid, &close_stateid,
+				sizeof(close->cl_stateid));
+
 	/* put reference from nfs4_preprocess_seqid_op */
 	nfs4_put_stid(&stp->st_stid);
 out:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] grace: replace BUG_ON by WARN_ONCE in exit_net hook
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (266 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] nfsd: CLOSE SHOULD return the invalid special stateid for NFSv4.x (x>0) Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] nfsd: check for use of the closed special stateid Sasha Levin
                   ` (248 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Vasily Averin, J . Bruce Fields, Sasha Levin

From: Vasily Averin <vvs@virtuozzo.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b872285751c1af010e12d02bce7069e2061a58ca ]

Signed-off-by: Vasily Averin <vvs@virtuozzo.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/nfs_common/grace.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/fs/nfs_common/grace.c b/fs/nfs_common/grace.c
index ae6e58ea4de5..450954d5b7f6 100644
--- a/fs/nfs_common/grace.c
+++ b/fs/nfs_common/grace.c
@@ -85,7 +85,9 @@ grace_exit_net(struct net *net)
 {
 	struct list_head *grace_list = net_generic(net, grace_net_id);
 
-	BUG_ON(!list_empty(grace_list));
+	WARN_ONCE(!list_empty(grace_list),
+		  "net %x %s: grace_list is not empty\n",
+		  net->ns.inum, __func__);
 }
 
 static struct pernet_operations grace_net_ops = {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] nfsd: check for use of the closed special stateid
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (267 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] grace: replace BUG_ON by WARN_ONCE in exit_net hook Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] hwmon: (pmbus) Use 64bit math for DIRECT format values Sasha Levin
                   ` (247 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andrew Elble, J . Bruce Fields, Sasha Levin

From: Andrew Elble <aweits@rit.edu>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ae254dac721d44c0bfebe2795df87459e2e88219 ]

Prevent the use of the closed (invalid) special stateid by clients.

Signed-off-by: Andrew Elble <aweits@rit.edu>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/nfsd/nfs4state.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 72019f141ebc..322cf41b5257 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -72,6 +72,7 @@ static u64 current_sessionid = 1;
 #define ZERO_STATEID(stateid) (!memcmp((stateid), &zero_stateid, sizeof(stateid_t)))
 #define ONE_STATEID(stateid)  (!memcmp((stateid), &one_stateid, sizeof(stateid_t)))
 #define CURRENT_STATEID(stateid) (!memcmp((stateid), &currentstateid, sizeof(stateid_t)))
+#define CLOSE_STATEID(stateid)  (!memcmp((stateid), &close_stateid, sizeof(stateid_t)))
 
 /* forward declarations */
 static bool check_for_locks(struct nfs4_file *fp, struct nfs4_lockowner *lowner);
@@ -4618,7 +4619,8 @@ static __be32 nfsd4_validate_stateid(struct nfs4_client *cl, stateid_t *stateid)
 	struct nfs4_stid *s;
 	__be32 status = nfserr_bad_stateid;
 
-	if (ZERO_STATEID(stateid) || ONE_STATEID(stateid))
+	if (ZERO_STATEID(stateid) || ONE_STATEID(stateid) ||
+		CLOSE_STATEID(stateid))
 		return status;
 	/* Client debugging aid. */
 	if (!same_clid(&stateid->si_opaque.so_clid, &cl->cl_clientid)) {
@@ -4676,7 +4678,8 @@ nfsd4_lookup_stateid(struct nfsd4_compound_state *cstate,
 	else if (typemask & NFS4_DELEG_STID)
 		typemask |= NFS4_REVOKED_DELEG_STID;
 
-	if (ZERO_STATEID(stateid) || ONE_STATEID(stateid))
+	if (ZERO_STATEID(stateid) || ONE_STATEID(stateid) ||
+		CLOSE_STATEID(stateid))
 		return nfserr_bad_stateid;
 	status = lookup_clientid(&stateid->si_opaque.so_clid, cstate, nn);
 	if (status == nfserr_stale_clientid) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] hwmon: (pmbus) Use 64bit math for DIRECT format values
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (268 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] nfsd: check for use of the closed special stateid Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] net: ethernet: xilinx: Mark XILINX_LL_TEMAC broken on 64-bit Sasha Levin
                   ` (246 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Robert Lippert, Robert Lippert, Guenter Roeck, Sasha Levin

From: Robert Lippert <roblip@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit bd467e4eababe4c04272c1e646f066db02734c79 ]

Power values in the 100s of watt range can easily blow past
32bit math limits when processing everything in microwatts.

Use 64bit math instead to avoid these issues on common 32bit ARM
BMC platforms.

Fixes: 442aba78728e ("hwmon: PMBus device driver")
Signed-off-by: Robert Lippert <rlippert@google.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/hwmon/pmbus/pmbus_core.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c
index f2e47c7dd808..1362de353076 100644
--- a/drivers/hwmon/pmbus/pmbus_core.c
+++ b/drivers/hwmon/pmbus/pmbus_core.c
@@ -20,6 +20,7 @@
  */
 
 #include <linux/kernel.h>
+#include <linux/math64.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/err.h>
@@ -476,8 +477,8 @@ static long pmbus_reg2data_linear(struct pmbus_data *data,
 static long pmbus_reg2data_direct(struct pmbus_data *data,
 				  struct pmbus_sensor *sensor)
 {
-	long val = (s16) sensor->data;
-	long m, b, R;
+	s64 b, val = (s16)sensor->data;
+	s32 m, R;
 
 	m = data->info->m[sensor->class];
 	b = data->info->b[sensor->class];
@@ -505,11 +506,12 @@ static long pmbus_reg2data_direct(struct pmbus_data *data,
 		R--;
 	}
 	while (R < 0) {
-		val = DIV_ROUND_CLOSEST(val, 10);
+		val = div_s64(val + 5LL, 10L);  /* round closest */
 		R++;
 	}
 
-	return (val - b) / m;
+	val = div_s64(val - b, m);
+	return clamp_val(val, LONG_MIN, LONG_MAX);
 }
 
 /*
@@ -621,7 +623,8 @@ static u16 pmbus_data2reg_linear(struct pmbus_data *data,
 static u16 pmbus_data2reg_direct(struct pmbus_data *data,
 				 struct pmbus_sensor *sensor, long val)
 {
-	long m, b, R;
+	s64 b, val64 = val;
+	s32 m, R;
 
 	m = data->info->m[sensor->class];
 	b = data->info->b[sensor->class];
@@ -638,18 +641,18 @@ static u16 pmbus_data2reg_direct(struct pmbus_data *data,
 		R -= 3;		/* Adjust R and b for data in milli-units */
 		b *= 1000;
 	}
-	val = val * m + b;
+	val64 = val64 * m + b;
 
 	while (R > 0) {
-		val *= 10;
+		val64 *= 10;
 		R--;
 	}
 	while (R < 0) {
-		val = DIV_ROUND_CLOSEST(val, 10);
+		val64 = div_s64(val64 + 5LL, 10L);  /* round closest */
 		R++;
 	}
 
-	return val;
+	return (u16)clamp_val(val64, S16_MIN, S16_MAX);
 }
 
 static u16 pmbus_data2reg_vid(struct pmbus_data *data,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net: ethernet: xilinx: Mark XILINX_LL_TEMAC broken on 64-bit
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (269 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] hwmon: (pmbus) Use 64bit math for DIRECT format values Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] quota: Check for register_shrinker() failure Sasha Levin
                   ` (245 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Geert Uytterhoeven, David S . Miller, Sasha Levin

From: Geert Uytterhoeven <geert+renesas@glider.be>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 15bfe05c8d6386f1a90e9340d15336e85e32aad6 ]

On 64-bit (e.g. powerpc64/allmodconfig):

    drivers/net/ethernet/xilinx/ll_temac_main.c: In function 'temac_start_xmit_done':
    drivers/net/ethernet/xilinx/ll_temac_main.c:633:22: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
	dev_kfree_skb_irq((struct sk_buff *)cur_p->app4);
			  ^

cdmac_bd.app4 is u32, so it is too small to hold a kernel pointer.

Note that several other fields in struct cdmac_bd are also too small to
hold physical addresses on 64-bit platforms.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/xilinx/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/xilinx/Kconfig b/drivers/net/ethernet/xilinx/Kconfig
index 7b90a5eba099..9d6c252c1911 100644
--- a/drivers/net/ethernet/xilinx/Kconfig
+++ b/drivers/net/ethernet/xilinx/Kconfig
@@ -36,6 +36,7 @@ config XILINX_AXI_EMAC
 config XILINX_LL_TEMAC
 	tristate "Xilinx LL TEMAC (LocalLink Tri-mode Ethernet MAC) driver"
 	depends on (PPC || MICROBLAZE)
+	depends on !64BIT || BROKEN
 	select PHYLIB
 	---help---
 	  This driver supports the Xilinx 10/100/1000 LocalLink TEMAC
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] quota: Check for register_shrinker() failure.
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (270 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] net: ethernet: xilinx: Mark XILINX_LL_TEMAC broken on 64-bit Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] drm/omap: Fix error handling path in 'omap_dmm_probe()' Sasha Levin
                   ` (244 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Tetsuo Handa, Jan Kara, Sasha Levin

From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 88bc0ede8d35edc969350852894dc864a2dc1859 ]

register_shrinker() might return -ENOMEM error since Linux 3.12.
Call panic() as with other failure checks in this function if
register_shrinker() failed.

Fixes: 1d3d4437eae1 ("vmscan: per-node deferred work")
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Cc: Jan Kara <jack@suse.com>
Cc: Michal Hocko <mhocko@suse.com>
Reviewed-by: Michal Hocko <mhocko@suse.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/quota/dquot.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
index 19c777ad0084..4f3b028e3a1f 100644
--- a/fs/quota/dquot.c
+++ b/fs/quota/dquot.c
@@ -2881,7 +2881,8 @@ static int __init dquot_init(void)
 	pr_info("VFS: Dquot-cache hash table entries: %ld (order %ld,"
 		" %ld bytes)\n", nr_hash, order, (PAGE_SIZE << order));
 
-	register_shrinker(&dqcache_shrinker);
+	if (register_shrinker(&dqcache_shrinker))
+		panic("Cannot register dquot shrinker");
 
 	return 0;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] SUNRPC: Allow connect to return EHOSTUNREACH
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (272 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] drm/omap: Fix error handling path in 'omap_dmm_probe()' Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] scsi: ufs: ufshcd: fix potential NULL pointer dereference in ufshcd_config_vreg Sasha Levin
                   ` (242 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Trond Myklebust, Anna Schumaker, Sasha Levin

From: Trond Myklebust <trond.myklebust@primarydata.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4ba161a793d5f43757c35feff258d9f20a082940 ]

Reported-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Tested-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/sunrpc/xprtsock.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 5e3ad598d3f5..14972988d29d 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -2189,6 +2189,7 @@ static void xs_tcp_setup_socket(struct work_struct *work)
 	case -ECONNREFUSED:
 	case -ECONNRESET:
 	case -ENETUNREACH:
+	case -EHOSTUNREACH:
 	case -EADDRINUSE:
 	case -ENOBUFS:
 		/* retry with existing socket, after a delay */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] drm/omap: Fix error handling path in 'omap_dmm_probe()'
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (271 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] quota: Check for register_shrinker() failure Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] SUNRPC: Allow connect to return EHOSTUNREACH Sasha Levin
                   ` (243 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Christophe JAILLET, Tomi Valkeinen, Sasha Levin

From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8677b1ac2db021ab30bb1fa34f1e56ebe0051ec3 ]

If we don't find a matching device node, we must free the memory allocated
in 'omap_dmm' a few lines above.

Fixes: 7cb0d6c17b96 ("drm/omap: fix TILER on OMAP5")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/gpu/drm/omapdrm/omap_dmm_tiler.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c b/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
index 042038e8a662..6e6634cd1d17 100644
--- a/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
+++ b/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
@@ -610,7 +610,8 @@ static int omap_dmm_probe(struct platform_device *dev)
 		match = of_match_node(dmm_of_match, dev->dev.of_node);
 		if (!match) {
 			dev_err(&dev->dev, "failed to find matching device node\n");
-			return -ENODEV;
+			ret = -ENODEV;
+			goto fail;
 		}
 
 		omap_dmm->plat_data = match->data;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] scsi: ufs: ufshcd: fix potential NULL pointer dereference in ufshcd_config_vreg
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (273 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] SUNRPC: Allow connect to return EHOSTUNREACH Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] xfs: ubsan fixes Sasha Levin
                   ` (241 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Gustavo A. R. Silva, Martin K . Petersen, Sasha Levin

From: "Gustavo A. R. Silva" <garsilva@embeddedor.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 727535903bea924c4f73abb202c4b3e85fff0ca4 ]

_vreg_ is being dereferenced before it is null checked, hence there is a
potential null pointer dereference.

Fix this by moving the pointer dereference after _vreg_ has been null
checked.

This issue was detected with the help of Coccinelle.

Fixes: aa4976130934 ("ufs: Add regulator enable support")
Signed-off-by: Gustavo A. R. Silva <garsilva@embeddedor.com>
Reviewed-by: Subhash Jadavani <subhashj@codeaurora.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/ufs/ufshcd.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 648a44675880..05b76cdfb263 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -4290,12 +4290,15 @@ static int ufshcd_config_vreg(struct device *dev,
 		struct ufs_vreg *vreg, bool on)
 {
 	int ret = 0;
-	struct regulator *reg = vreg->reg;
-	const char *name = vreg->name;
+	struct regulator *reg;
+	const char *name;
 	int min_uV, uA_load;
 
 	BUG_ON(!vreg);
 
+	reg = vreg->reg;
+	name = vreg->name;
+
 	if (regulator_count_voltages(reg) > 0) {
 		min_uV = on ? vreg->min_uV : 0;
 		ret = regulator_set_voltage(reg, min_uV, vreg->max_uV);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] xfs: ubsan fixes
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (274 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] scsi: ufs: ufshcd: fix potential NULL pointer dereference in ufshcd_config_vreg Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] media: usbtv: add a new usbid Sasha Levin
                   ` (240 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Darrick J. Wong, Sasha Levin

From: "Darrick J. Wong" <darrick.wong@oracle.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 22a6c83777ac7c17d6c63891beeeac24cf5da450 ]

Fix some complaints from the UBSAN about signed integer addition overflows.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/xfs/xfs_aops.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
index a56960dd1684..123ec87efac0 100644
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -303,7 +303,7 @@ xfs_map_blocks(
 	       (ip->i_df.if_flags & XFS_IFEXTENTS));
 	ASSERT(offset <= mp->m_super->s_maxbytes);
 
-	if (offset + count > mp->m_super->s_maxbytes)
+	if ((xfs_ufsize_t)offset + count > mp->m_super->s_maxbytes)
 		count = mp->m_super->s_maxbytes - offset;
 	end_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)offset + count);
 	offset_fsb = XFS_B_TO_FSBT(mp, offset);
@@ -1332,7 +1332,7 @@ xfs_map_trim_size(
 	if (mapping_size > size)
 		mapping_size = size;
 	if (offset < i_size_read(inode) &&
-	    offset + mapping_size >= i_size_read(inode)) {
+	    (xfs_ufsize_t)offset + mapping_size >= i_size_read(inode)) {
 		/* limit mapping to block that spans EOF */
 		mapping_size = roundup_64(i_size_read(inode) - offset,
 					  1 << inode->i_blkbits);
@@ -1387,7 +1387,7 @@ __xfs_get_blocks(
 	}
 
 	ASSERT(offset <= mp->m_super->s_maxbytes);
-	if (offset + size > mp->m_super->s_maxbytes)
+	if ((xfs_ufsize_t)offset + size > mp->m_super->s_maxbytes)
 		size = mp->m_super->s_maxbytes - offset;
 	end_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)offset + size);
 	offset_fsb = XFS_B_TO_FSBT(mp, offset);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] media: usbtv: add a new usbid
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (275 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] xfs: ubsan fixes Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] staging: rtl8188eu: Fix incorrect response to SIOCGIWESSID Sasha Levin
                   ` (239 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Icenowy Zheng, Mauro Carvalho Chehab, Sasha Levin

From: Icenowy Zheng <icenowy@aosc.io>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 04226916d2360f56d57ad00bc48d2d1854d1e0b0 ]

A new usbid of UTV007 is found in a newly bought device.

The usbid is 1f71:3301.

The ID on the chip is:
UTV007
A89029.1
1520L18K1

Both video and audio is tested with the modified usbtv driver.

Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
Acked-by: Lubomir Rintel <lkundrak@v3.sk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/usb/usbtv/usbtv-core.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/media/usb/usbtv/usbtv-core.c b/drivers/media/usb/usbtv/usbtv-core.c
index 29428bef272c..3bbc77aa6a33 100644
--- a/drivers/media/usb/usbtv/usbtv-core.c
+++ b/drivers/media/usb/usbtv/usbtv-core.c
@@ -127,6 +127,7 @@ static void usbtv_disconnect(struct usb_interface *intf)
 
 static struct usb_device_id usbtv_id_table[] = {
 	{ USB_DEVICE(0x1b71, 0x3002) },
+	{ USB_DEVICE(0x1f71, 0x3301) },
 	{}
 };
 MODULE_DEVICE_TABLE(usb, usbtv_id_table);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: gadget: don't dereference g until after it has been null checked
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (277 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] staging: rtl8188eu: Fix incorrect response to SIOCGIWESSID Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] usb: option: Add support for FS040U modem Sasha Levin
                   ` (237 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Colin Ian King, Felipe Balbi, Sasha Levin

From: Colin Ian King <colin.king@canonical.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b2fc059fa549fe6881d4c1f8d698b0f50bcd16ec ]

Avoid dereferencing pointer g until after g has been sanity null checked;
move the assignment of cdev much later when it is required into a more
local scope.

Detected by CoverityScan, CID#1222135 ("Dereference before null check")

Fixes: b785ea7ce662 ("usb: gadget: composite: fix ep->maxburst initialization")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/gadget/composite.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index a01d90fe37d9..54c15622e133 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -103,7 +103,6 @@ int config_ep_by_speed(struct usb_gadget *g,
 			struct usb_function *f,
 			struct usb_ep *_ep)
 {
-	struct usb_composite_dev	*cdev = get_gadget_data(g);
 	struct usb_endpoint_descriptor *chosen_desc = NULL;
 	struct usb_descriptor_header **speed_desc = NULL;
 
@@ -170,8 +169,12 @@ int config_ep_by_speed(struct usb_gadget *g,
 			_ep->maxburst = comp_desc->bMaxBurst + 1;
 			break;
 		default:
-			if (comp_desc->bMaxBurst != 0)
+			if (comp_desc->bMaxBurst != 0) {
+				struct usb_composite_dev *cdev;
+
+				cdev = get_gadget_data(g);
 				ERROR(cdev, "ep0 bMaxBurst must be 0\n");
+			}
 			_ep->maxburst = 1;
 			break;
 		}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] staging: rtl8188eu: Fix incorrect response to SIOCGIWESSID
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (276 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] media: usbtv: add a new usbid Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] usb: gadget: don't dereference g until after it has been null checked Sasha Levin
                   ` (238 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Larry Finger, Greg Kroah-Hartman, Sasha Levin

From: Larry Finger <Larry.Finger@lwfinger.net>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b77992d2df9e47144354d1b25328b180afa33442 ]

When not associated with an AP, wifi device drivers should respond to the
SIOCGIWESSID ioctl with a zero-length string for the SSID, which is the
behavior expected by dhcpcd.

Currently, this driver returns an error code (-1) from the ioctl call,
which causes dhcpcd to assume that the device is not a wireless interface
and therefore it fails to work correctly with it thereafter.

This problem was reported and tested at
https://github.com/lwfinger/rtl8188eu/issues/234.

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c
index 96c1c2d4a112..6e73f4e130b5 100644
--- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c
+++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c
@@ -1397,19 +1397,13 @@ static int rtw_wx_get_essid(struct net_device *dev,
 	if ((check_fwstate(pmlmepriv, _FW_LINKED)) ||
 	    (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE))) {
 		len = pcur_bss->Ssid.SsidLength;
-
-		wrqu->essid.length = len;
-
 		memcpy(extra, pcur_bss->Ssid.Ssid, len);
-
-		wrqu->essid.flags = 1;
 	} else {
-		ret = -1;
-		goto exit;
+		len = 0;
+		*extra = 0;
 	}
-
-exit:
-
+	wrqu->essid.length = len;
+	wrqu->essid.flags = 1;
 
 	return ret;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] USB: serial: pl2303: new device id for Chilitag
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (279 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] usb: option: Add support for FS040U modem Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] CDC-ACM: apply quirk for card reader Sasha Levin
                   ` (235 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Greg Kroah-Hartman, Sasha Levin

From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d08dd3f3dd2ae351b793fc5b76abdbf0fd317b12 ]

This adds a new device id for Chilitag devices to the pl2303 driver.

Reported-by: "Chu.Mike [朱堅宜]" <Mike-Chu@prolific.com.tw>
Cc: stable <stable@vger.kernel.org>
Acked-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/serial/pl2303.c | 1 +
 drivers/usb/serial/pl2303.h | 1 +
 2 files changed, 2 insertions(+)

diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
index a51b28379850..3da25ad267a2 100644
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -39,6 +39,7 @@ static const struct usb_device_id id_table[] = {
 	{ USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) },
 	{ USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_DCU11) },
 	{ USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) },
+	{ USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_CHILITAG) },
 	{ USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) },
 	{ USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) },
 	{ USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) },
diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
index 3b5a15d1dc0d..123289085ee2 100644
--- a/drivers/usb/serial/pl2303.h
+++ b/drivers/usb/serial/pl2303.h
@@ -17,6 +17,7 @@
 #define PL2303_PRODUCT_ID_DCU11		0x1234
 #define PL2303_PRODUCT_ID_PHAROS	0xaaa0
 #define PL2303_PRODUCT_ID_RSAQ3		0xaaa2
+#define PL2303_PRODUCT_ID_CHILITAG	0xaaa8
 #define PL2303_PRODUCT_ID_ALDIGA	0x0611
 #define PL2303_PRODUCT_ID_MMX		0x0612
 #define PL2303_PRODUCT_ID_GPRS		0x0609
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: option: Add support for FS040U modem
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (278 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] usb: gadget: don't dereference g until after it has been null checked Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] USB: serial: pl2303: new device id for Chilitag Sasha Levin
                   ` (236 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: OKAMOTO Yoshiaki, Hiroyuki Yamamoto, Greg Kroah-Hartman, Sasha Levin

From: OKAMOTO Yoshiaki <yokamoto@allied-telesis.co.jp>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 69341bd15018da0a662847e210f9b2380c71e623 ]

FS040U modem is manufactured by omega, and sold by Fujisoft. This patch
adds ID of the modem to use option1 driver. Interface 3 is used as
qmi_wwan, so the interface is ignored.

Signed-off-by: Yoshiaki Okamoto <yokamoto@allied-telesis.co.jp>
Signed-off-by: Hiroyuki Yamamoto <hyamamo@allied-telesis.co.jp>
Cc: stable <stable@vger.kernel.org>
Acked-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/serial/option.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index c8922df86bd0..0d31ca1cbf35 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -375,6 +375,9 @@ static void option_instat_callback(struct urb *urb);
 #define FOUR_G_SYSTEMS_PRODUCT_W14		0x9603
 #define FOUR_G_SYSTEMS_PRODUCT_W100		0x9b01
 
+/* Fujisoft products */
+#define FUJISOFT_PRODUCT_FS040U			0x9b02
+
 /* iBall 3.5G connect wireless modem */
 #define IBALL_3_5G_CONNECT			0x9605
 
@@ -1882,6 +1885,8 @@ static const struct usb_device_id option_ids[] = {
 	{ USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W100),
 	  .driver_info = (kernel_ulong_t)&four_g_w100_blacklist
 	},
+	{USB_DEVICE(LONGCHEER_VENDOR_ID, FUJISOFT_PRODUCT_FS040U),
+	 .driver_info = (kernel_ulong_t)&net_intf3_blacklist},
 	{ USB_DEVICE_INTERFACE_CLASS(LONGCHEER_VENDOR_ID, SPEEDUP_PRODUCT_SU9800, 0xff) },
 	{ USB_DEVICE_INTERFACE_CLASS(LONGCHEER_VENDOR_ID, 0x9801, 0xff),
 	  .driver_info = (kernel_ulong_t)&net_intf3_blacklist },
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] USB: cdc-acm: Do not log urb submission errors on disconnect
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (281 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] CDC-ACM: apply quirk for card reader Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] USB: serial: io_edgeport: fix possible sleep-in-atomic Sasha Levin
                   ` (233 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Hans de Goede, Greg Kroah-Hartman, Sasha Levin

From: Hans de Goede <hdegoede@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f0386c083c2ce85284dc0b419d7b89c8e567c09f ]

When disconnected sometimes the cdc-acm driver logs errors like these:

[20278.039417] cdc_acm 2-2:2.1: urb 9 failed submission with -19
[20278.042924] cdc_acm 2-2:2.1: urb 10 failed submission with -19
[20278.046449] cdc_acm 2-2:2.1: urb 11 failed submission with -19
[20278.049920] cdc_acm 2-2:2.1: urb 12 failed submission with -19
[20278.053442] cdc_acm 2-2:2.1: urb 13 failed submission with -19
[20278.056915] cdc_acm 2-2:2.1: urb 14 failed submission with -19
[20278.060418] cdc_acm 2-2:2.1: urb 15 failed submission with -19

Silence these by not logging errors when the result is -ENODEV.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Oliver Neukum <oneukum@suse.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/class/cdc-acm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index 463d8a3375f5..43096733f09c 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -381,7 +381,7 @@ static int acm_submit_read_urb(struct acm *acm, int index, gfp_t mem_flags)
 
 	res = usb_submit_urb(acm->read_urbs[index], mem_flags);
 	if (res) {
-		if (res != -EPERM) {
+		if (res != -EPERM && res != -ENODEV) {
 			dev_err(&acm->data->dev,
 					"%s - usb_submit_urb failed: %d\n",
 					__func__, res);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] CDC-ACM: apply quirk for card reader
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (280 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] USB: serial: pl2303: new device id for Chilitag Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] USB: cdc-acm: Do not log urb submission errors on disconnect Sasha Levin
                   ` (234 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Oliver Neukum, Greg Kroah-Hartman, Sasha Levin

From: Oliver Neukum <oneukum@suse.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit df1cc78a52491f71d8170d513d0f6f114faa1bda ]

This devices drops random bytes from messages if you talk to it
too fast.

Signed-off-by: Oliver Neukum <oneukum@suse.com>
CC: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/class/cdc-acm.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index 43096733f09c..eeed4b45d35c 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -1707,6 +1707,9 @@ static const struct usb_device_id acm_ids[] = {
 	{ USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
 	.driver_info = SINGLE_RX_URB, /* firmware bug */
 	},
+	{ USB_DEVICE(0x11ca, 0x0201), /* VeriFone Mx870 Gadget Serial */
+	.driver_info = SINGLE_RX_URB,
+	},
 	{ USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 	},
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] USB: serial: io_edgeport: fix possible sleep-in-atomic
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (282 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] USB: cdc-acm: Do not log urb submission errors on disconnect Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] usbip: list: don't list devices attached to vhci_hcd Sasha Levin
                   ` (232 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jia-Ju Bai, Johan Hovold, Sasha Levin

From: Jia-Ju Bai <baijiaju1990@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c7b8f77872c73f69a16528a9eb87afefcccdc18b ]

According to drivers/usb/serial/io_edgeport.c, the driver may sleep
under a spinlock.
The function call path is:
edge_bulk_in_callback (acquire the spinlock)
   process_rcvd_data
     process_rcvd_status
       change_port_settings
         send_iosp_ext_cmd
           write_cmd_usb
             usb_kill_urb --> may sleep

To fix it, the redundant usb_kill_urb() is removed from the error path
after usb_submit_urb() fails.

This possible bug is found by my static analysis tool (DSAC) and checked
by my code review.

Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/serial/io_edgeport.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
index 749e1b674145..6947985ccfb0 100644
--- a/drivers/usb/serial/io_edgeport.c
+++ b/drivers/usb/serial/io_edgeport.c
@@ -2219,7 +2219,6 @@ static int write_cmd_usb(struct edgeport_port *edge_port,
 		/* something went wrong */
 		dev_err(dev, "%s - usb_submit_urb(write command) failed, status = %d\n",
 			__func__, status);
-		usb_kill_urb(urb);
 		usb_free_urb(urb);
 		atomic_dec(&CmdUrbs);
 		return status;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usbip: prevent bind loops on devices attached to vhci_hcd
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (284 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] usbip: list: don't list devices attached to vhci_hcd Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] usb: f_fs: Prevent gadget unbind if it is already unbound Sasha Levin
                   ` (230 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Shuah Khan, Greg Kroah-Hartman, Sasha Levin

From: Shuah Khan <shuahkh@osg.samsung.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ef54cf0c600fb8f5737fb001a9e357edda1a1de8 ]

usbip host binds to devices attached to vhci_hcd on the same server
when user does attach over localhost or specifies the server as the
remote.

usbip attach -r localhost -b busid
or
usbip attach -r servername (or server IP)

Unbind followed by bind works, however device is left in a bad state with
accesses via the attached busid result in errors and system hangs during
shutdown.

Fix it to check and bail out if the device is already attached to vhci_hcd.

Cc: stable@vger.kernel.org
Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 tools/usb/usbip/src/usbip_bind.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/tools/usb/usbip/src/usbip_bind.c b/tools/usb/usbip/src/usbip_bind.c
index fa46141ae68b..e121cfb1746a 100644
--- a/tools/usb/usbip/src/usbip_bind.c
+++ b/tools/usb/usbip/src/usbip_bind.c
@@ -144,6 +144,7 @@ static int bind_device(char *busid)
 	int rc;
 	struct udev *udev;
 	struct udev_device *dev;
+	const char *devpath;
 
 	/* Check whether the device with this bus ID exists. */
 	udev = udev_new();
@@ -152,8 +153,16 @@ static int bind_device(char *busid)
 		err("device with the specified bus ID does not exist");
 		return -1;
 	}
+	devpath = udev_device_get_devpath(dev);
 	udev_unref(udev);
 
+	/* If the device is already attached to vhci_hcd - bail out */
+	if (strstr(devpath, USBIP_VHCI_DRV_NAME)) {
+		err("bind loop detected: device: %s is attached to %s\n",
+		    devpath, USBIP_VHCI_DRV_NAME);
+		return -1;
+	}
+
 	rc = unbind_other(busid);
 	if (rc == UNBIND_ST_FAILED) {
 		err("could not unbind driver from device on busid %s", busid);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usbip: list: don't list devices attached to vhci_hcd
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (283 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] USB: serial: io_edgeport: fix possible sleep-in-atomic Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] usbip: prevent bind loops on " Sasha Levin
                   ` (231 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Shuah Khan, Greg Kroah-Hartman, Sasha Levin

From: Shuah Khan <shuahkh@osg.samsung.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ef824501f50846589f02173d73ce3fe6021a9d2a ]

usbip host lists devices attached to vhci_hcd on the same server
when user does attach over localhost or specifies the server as the
remote.

usbip attach -r localhost -b busid
or
usbip attach -r servername (or server IP)

Fix it to check and not list devices that are attached to vhci_hcd.

Cc: stable@vger.kernel.org
Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 tools/usb/usbip/src/usbip_list.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/tools/usb/usbip/src/usbip_list.c b/tools/usb/usbip/src/usbip_list.c
index d5ce34a410e7..ac6081c3db82 100644
--- a/tools/usb/usbip/src/usbip_list.c
+++ b/tools/usb/usbip/src/usbip_list.c
@@ -180,6 +180,7 @@ static int list_devices(bool parsable)
 	const char *busid;
 	char product_name[128];
 	int ret = -1;
+	const char *devpath;
 
 	/* Create libudev context. */
 	udev = udev_new();
@@ -202,6 +203,14 @@ static int list_devices(bool parsable)
 		path = udev_list_entry_get_name(dev_list_entry);
 		dev = udev_device_new_from_syspath(udev, path);
 
+		/* Ignore devices attached to vhci_hcd */
+		devpath = udev_device_get_devpath(dev);
+		if (strstr(devpath, USBIP_VHCI_DRV_NAME)) {
+			dbg("Skip the device %s already attached to %s\n",
+			    devpath, USBIP_VHCI_DRV_NAME);
+			continue;
+		}
+
 		/* Get device information. */
 		idVendor = udev_device_get_sysattr_value(dev, "idVendor");
 		idProduct = udev_device_get_sysattr_value(dev, "idProduct");
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] USB: serial: simple: add Motorola Tetra driver
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (286 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] usb: f_fs: Prevent gadget unbind if it is already unbound Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] spi: imx: do not access registers while clocks disabled Sasha Levin
                   ` (228 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Johan Hovold, Greg Kroah-Hartman, Sasha Levin

From: Johan Hovold <johan@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 46fe895e22ab3845515ec06b01eaf1282b342e29 ]

Add new Motorola Tetra (simple) driver for Motorola Solutions TETRA PEI
devices.

D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=0cad ProdID=9011 Rev=24.16
S:  Manufacturer=Motorola Solutions Inc.
S:  Product=Motorola Solutions TETRA PEI interface
C:  #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)

Note that these devices do not support the CDC SET_CONTROL_LINE_STATE
request (for any interface).

Reported-by: Max Schulze <max.schulze@posteo.de>
Tested-by: Max Schulze <max.schulze@posteo.de>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/serial/Kconfig             | 1 +
 drivers/usb/serial/usb-serial-simple.c | 7 +++++++
 2 files changed, 8 insertions(+)

diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig
index b7cf1982d1d9..941716c1177e 100644
--- a/drivers/usb/serial/Kconfig
+++ b/drivers/usb/serial/Kconfig
@@ -63,6 +63,7 @@ config USB_SERIAL_SIMPLE
 		- Google USB serial devices
 		- HP4x calculators
 		- a number of Motorola phones
+		- Motorola Tetra devices
 		- Novatel Wireless GPS receivers
 		- Siemens USB/MPI adapter.
 		- ViVOtech ViVOpay USB device.
diff --git a/drivers/usb/serial/usb-serial-simple.c b/drivers/usb/serial/usb-serial-simple.c
index e98b6e57b703..6aa7ff2c1cf7 100644
--- a/drivers/usb/serial/usb-serial-simple.c
+++ b/drivers/usb/serial/usb-serial-simple.c
@@ -80,6 +80,11 @@ DEVICE(vivopay, VIVOPAY_IDS);
 	{ USB_DEVICE(0x22b8, 0x2c64) }	/* Motorola V950 phone */
 DEVICE(moto_modem, MOTO_IDS);
 
+/* Motorola Tetra driver */
+#define MOTOROLA_TETRA_IDS()			\
+	{ USB_DEVICE(0x0cad, 0x9011) }	/* Motorola Solutions TETRA PEI */
+DEVICE(motorola_tetra, MOTOROLA_TETRA_IDS);
+
 /* Novatel Wireless GPS driver */
 #define NOVATEL_IDS()			\
 	{ USB_DEVICE(0x09d7, 0x0100) }	/* NovAtel FlexPack GPS */
@@ -110,6 +115,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
 	&google_device,
 	&vivopay_device,
 	&moto_modem_device,
+	&motorola_tetra_device,
 	&novatel_gps_device,
 	&hp4x_device,
 	&suunto_device,
@@ -125,6 +131,7 @@ static const struct usb_device_id id_table[] = {
 	GOOGLE_IDS(),
 	VIVOPAY_IDS(),
 	MOTO_IDS(),
+	MOTOROLA_TETRA_IDS(),
 	NOVATEL_IDS(),
 	HP4X_IDS(),
 	SUUNTO_IDS(),
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: f_fs: Prevent gadget unbind if it is already unbound
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (285 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] usbip: prevent bind loops on " Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] USB: serial: simple: add Motorola Tetra driver Sasha Levin
                   ` (229 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Hemant Kumar, Amit Pundir, Greg Kroah-Hartman, Sasha Levin

From: Hemant Kumar <hemantk@codeaurora.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ce5bf9a50daf2d9078b505aca1cea22e88ecb94a ]

Upon usb composition switch there is possibility of ep0 file
release happening after gadget driver bind. In case of composition
switch from adb to a non-adb composition gadget will never gets
bound again resulting into failure of usb device enumeration. Fix
this issue by checking FFS_FL_BOUND flag and avoid extra
gadget driver unbind if it is already done as part of composition
switch.

This fixes adb reconnection error reported on Android running
v4.4 and above kernel versions. Verified on Hikey running vanilla
v4.15-rc7 + few out of tree Mali patches.

Reviewed-at: https://android-review.googlesource.com/#/c/582632/

Cc: Felipe Balbi <balbi@kernel.org>
Cc: Greg KH <gregkh@linux-foundation.org>
Cc: Michal Nazarewicz <mina86@mina86.com>
Cc: John Stultz <john.stultz@linaro.org>
Cc: Dmitry Shmidt <dimitrysh@google.com>
Cc: Badhri <badhri@google.com>
Cc: Android Kernel Team <kernel-team@android.com>
Cc: stable@vger.kernel.org
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
[AmitP: Cherry-picked it from android-4.14 and updated the commit log]
Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/gadget/function/f_fs.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
index 2c25a5dec442..d3fb7bd8e10d 100644
--- a/drivers/usb/gadget/function/f_fs.c
+++ b/drivers/usb/gadget/function/f_fs.c
@@ -3486,7 +3486,8 @@ static void ffs_closed(struct ffs_data *ffs)
 	ci = opts->func_inst.group.cg_item.ci_parent->ci_parent;
 	ffs_dev_unlock();
 
-	unregister_gadget_item(ci);
+	if (test_bit(FFS_FL_BOUND, &ffs->flags))
+		unregister_gadget_item(ci);
 	return;
 done:
 	ffs_dev_unlock();
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: uas: unconditionally bring back host after reset
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (288 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] spi: imx: do not access registers while clocks disabled Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/bpf/jit: Disable classic BPF JIT on ppc64le Sasha Levin
                   ` (226 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Oliver Neukum, Greg Kroah-Hartman, Sasha Levin

From: Oliver Neukum <oneukum@suse.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit cbeef22fd611c4f47c494b821b2b105b8af970bb ]

Quoting Hans:

If we return 1 from our post_reset handler, then our disconnect handler
will be called immediately afterwards. Since pre_reset blocks all scsi
requests our disconnect handler will then hang in the scsi_remove_host
call.

This is esp. bad because our disconnect handler hanging for ever also
stops the USB subsys from enumerating any new USB devices, causes commands
like lsusb to hang, etc.

In practice this happens when unplugging some uas devices because the hub
code may see the device as needing a warm-reset and calls usb_reset_device
before seeing the disconnect. In this case uas_configure_endpoints fails
with -ENODEV. We do not want to print an error for this, so this commit
also silences the shost_printk for -ENODEV.

ENDQUOTE

However, if we do that we better drop any unconditional execution
and report to the SCSI subsystem that we have undergone a reset
but we are not operational now.

Signed-off-by: Oliver Neukum <oneukum@suse.com>
Reported-by: Hans de Goede <hdegoede@redhat.com>
CC: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/storage/uas.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
index f58ae4a84c11..021d6880a3ed 100644
--- a/drivers/usb/storage/uas.c
+++ b/drivers/usb/storage/uas.c
@@ -1052,20 +1052,19 @@ static int uas_post_reset(struct usb_interface *intf)
 		return 0;
 
 	err = uas_configure_endpoints(devinfo);
-	if (err) {
+	if (err && err != ENODEV)
 		shost_printk(KERN_ERR, shost,
 			     "%s: alloc streams error %d after reset",
 			     __func__, err);
-		return 1;
-	}
 
+	/* we must unblock the host in every case lest we deadlock */
 	spin_lock_irqsave(shost->host_lock, flags);
 	scsi_report_bus_reset(shost, 0);
 	spin_unlock_irqrestore(shost->host_lock, flags);
 
 	scsi_unblock_requests(shost);
 
-	return 0;
+	return err ? 1 : 0;
 }
 
 static int uas_suspend(struct usb_interface *intf, pm_message_t message)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] spi: imx: do not access registers while clocks disabled
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (287 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] USB: serial: simple: add Motorola Tetra driver Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] usb: uas: unconditionally bring back host after reset Sasha Levin
                   ` (227 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Stefan Agner, Mark Brown, Sasha Levin

From: Stefan Agner <stefan@agner.ch>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d593574aff0ab846136190b1729c151c736727ec ]

Since clocks are disabled except during message transfer clocks
are also disabled when spi_imx_remove gets called. Accessing
registers leads to a freeeze at least on a i.MX 6ULL. Enable
clocks before disabling accessing the MXC_CSPICTRL register.

Fixes: 9e556dcc55774 ("spi: spi-imx: only enable the clocks when we start to transfer a message")
Signed-off-by: Stefan Agner <stefan@agner.ch>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/spi/spi-imx.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
index 412b9c86b997..967ba6329a58 100644
--- a/drivers/spi/spi-imx.c
+++ b/drivers/spi/spi-imx.c
@@ -1221,12 +1221,23 @@ static int spi_imx_remove(struct platform_device *pdev)
 {
 	struct spi_master *master = platform_get_drvdata(pdev);
 	struct spi_imx_data *spi_imx = spi_master_get_devdata(master);
+	int ret;
 
 	spi_bitbang_stop(&spi_imx->bitbang);
 
+	ret = clk_enable(spi_imx->clk_per);
+	if (ret)
+		return ret;
+
+	ret = clk_enable(spi_imx->clk_ipg);
+	if (ret) {
+		clk_disable(spi_imx->clk_per);
+		return ret;
+	}
+
 	writel(0, spi_imx->base + MXC_CSPICTRL);
-	clk_unprepare(spi_imx->clk_ipg);
-	clk_unprepare(spi_imx->clk_per);
+	clk_disable_unprepare(spi_imx->clk_ipg);
+	clk_disable_unprepare(spi_imx->clk_per);
 	spi_imx_sdma_exit(spi_imx);
 	spi_master_put(master);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc/bpf/jit: Disable classic BPF JIT on ppc64le
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (289 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] usb: uas: unconditionally bring back host after reset Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64: Fix flush_(d|i)cache_range() called from modules Sasha Levin
                   ` (225 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Naveen N. Rao, Michael Ellerman, Sasha Levin

From: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 844e3be47693f92a108cb1fb3b0606bf25e9c7a6 ]

Classic BPF JIT was never ported completely to work on little endian
powerpc. However, it can be enabled and will crash the system when used.
As such, disable use of BPF JIT on ppc64le.

Fixes: 7c105b63bd98 ("powerpc: Add CONFIG_CPU_LITTLE_ENDIAN kernel config option.")
Reported-by: Thadeu Lima de Souza Cascardo <cascardo@redhat.com>
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Acked-by: Thadeu Lima de Souza Cascardo <cascardo@redhat.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 4b8c928a9873..cffaeeee0d3e 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -126,7 +126,7 @@ config PPC
 	select IRQ_FORCED_THREADING
 	select HAVE_RCU_TABLE_FREE if SMP
 	select HAVE_SYSCALL_TRACEPOINTS
-	select HAVE_BPF_JIT
+	select HAVE_BPF_JIT if CPU_BIG_ENDIAN
 	select HAVE_ARCH_JUMP_LABEL
 	select ARCH_HAVE_NMI_SAFE_CMPXCHG
 	select ARCH_HAS_GCOV_PROFILE_ALL
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc/64: Fix flush_(d|i)cache_range() called from modules
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (290 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/bpf/jit: Disable classic BPF JIT on ppc64le Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc: Fix VSX enabling/flushing to also test MSR_FP and MSR_VEC Sasha Levin
                   ` (224 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Oliver O'Halloran, Michael Ellerman, Sasha Levin

From: Oliver O'Halloran <oohall@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8f5f525d5b83f7d76a6baf9c4e94d4bf312ea7f6 ]

When the kernel is compiled to use 64bit ABIv2 the _GLOBAL() macro does
not include a global entry point. A function's global entry point is
used when the function is called from a different TOC context and in the
kernel this typically means a call from a module into the vmlinux (or
vice-versa).

There are a few exported asm functions declared with _GLOBAL() and
calling them from a module will likely crash the kernel since any TOC
relative load will yield garbage.

flush_icache_range() and flush_dcache_range() are both exported to
modules, and use the TOC, so must use _GLOBAL_TOC().

Fixes: 721aeaa9fdf3 ("powerpc: Build little endian ppc64 kernel with ABIv2")
Cc: stable@vger.kernel.org # v3.16+
Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/include/asm/ppc_asm.h | 12 ++++++++++++
 arch/powerpc/kernel/misc_64.S      |  4 ++--
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h
index dd0fc18d8103..160bb2311bbb 100644
--- a/arch/powerpc/include/asm/ppc_asm.h
+++ b/arch/powerpc/include/asm/ppc_asm.h
@@ -224,6 +224,16 @@ name: \
 	.globl name; \
 name:
 
+#define _KPROBE_TOC(name)			\
+	.section ".kprobes.text","a";		\
+	.align 2 ;				\
+	.type name,@function;			\
+	.globl name;				\
+name:						\
+0:	addis r2,r12,(.TOC.-0b)@ha;		\
+	addi r2,r2,(.TOC.-0b)@l;		\
+	.localentry name,.-name
+
 #define DOTSYM(a)	a
 
 #else
@@ -261,6 +271,8 @@ name: \
 	.type GLUE(.,name),@function; \
 GLUE(.,name):
 
+#define _KPROBE_TOC(n)	_KPROBE(n)
+
 #define DOTSYM(a)	GLUE(.,a)
 
 #endif
diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S
index 4e314b90c75d..25a6f6ae729f 100644
--- a/arch/powerpc/kernel/misc_64.S
+++ b/arch/powerpc/kernel/misc_64.S
@@ -65,7 +65,7 @@ PPC64_CACHES:
  *   flush all bytes from start through stop-1 inclusive
  */
 
-_KPROBE(flush_icache_range)
+_KPROBE_TOC(flush_icache_range)
 BEGIN_FTR_SECTION
 	PURGE_PREFETCHED_INS
 	blr
@@ -116,7 +116,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_COHERENT_ICACHE)
  *
  *    flush all bytes from start to stop-1 inclusive
  */
-_GLOBAL(flush_dcache_range)
+_GLOBAL_TOC(flush_dcache_range)
 
 /*
  * Flush the data cache to memory 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc: Fix VSX enabling/flushing to also test MSR_FP and MSR_VEC
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (291 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64: Fix flush_(d|i)cache_range() called from modules Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc: Simplify module TOC handling Sasha Levin
                   ` (223 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Benjamin Herrenschmidt, Michael Ellerman, Sasha Levin

From: Benjamin Herrenschmidt <benh@kernel.crashing.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5a69aec945d27e78abac9fd032533d3aaebf7c1e ]

VSX uses a combination of the old vector registers, the old FP
registers and new "second halves" of the FP registers.

Thus when we need to see the VSX state in the thread struct
(flush_vsx_to_thread()) or when we'll use the VSX in the kernel
(enable_kernel_vsx()) we need to ensure they are all flushed into
the thread struct if either of them is individually enabled.

Unfortunately we only tested if the whole VSX was enabled, not if they
were individually enabled.

Fixes: 72cd7b44bc99 ("powerpc: Uncomment and make enable_kernel_vsx() routine available")
Cc: stable@vger.kernel.org # v4.3+
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/kernel/process.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index dd023904bac5..9579f9c13315 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -209,7 +209,8 @@ void enable_kernel_vsx(void)
 	WARN_ON(preemptible());
 
 #ifdef CONFIG_SMP
-	if (current->thread.regs && (current->thread.regs->msr & MSR_VSX))
+	if (current->thread.regs &&
+	    (current->thread.regs->msr & (MSR_VSX|MSR_VEC|MSR_FP)))
 		giveup_vsx(current);
 	else
 		giveup_vsx(NULL);	/* just enable vsx for kernel - force */
@@ -231,7 +232,7 @@ void flush_vsx_to_thread(struct task_struct *tsk)
 {
 	if (tsk->thread.regs) {
 		preempt_disable();
-		if (tsk->thread.regs->msr & MSR_VSX) {
+		if (tsk->thread.regs->msr & (MSR_VSX|MSR_VEC|MSR_FP)) {
 #ifdef CONFIG_SMP
 			BUG_ON(tsk != current);
 #endif
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc: Simplify module TOC handling
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (292 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc: Fix VSX enabling/flushing to also test MSR_FP and MSR_VEC Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64: Add macros for annotating the destination of rfid/hrfid Sasha Levin
                   ` (222 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Alan Modra, Michael Ellerman, Sasha Levin

From: Alan Modra <amodra@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c153693d7eb9eeb28478aa2deaaf0b4e7b5ff5e9 ]

PowerPC64 uses the symbol .TOC. much as other targets use
_GLOBAL_OFFSET_TABLE_. It identifies the value of the GOT pointer (or in
powerpc parlance, the TOC pointer). Global offset tables are generally
local to an executable or shared library, or in the kernel, module. Thus
it does not make sense for a module to resolve a relocation against
.TOC. to the kernel's .TOC. value. A module has its own .TOC., and
indeed the powerpc64 module relocation processing ignores the kernel
value of .TOC. and instead calculates a module-local value.

This patch removes code involved in exporting the kernel .TOC., tweaks
modpost to ignore an undefined .TOC., and the module loader to twiddle
the section symbol so that .TOC. isn't seen as undefined.

Note that if the kernel was compiled with -msingle-pic-base then ELFv2
would not have function global entry code setting up r2. In that case
the module call stubs would need to be modified to set up r2 using the
kernel .TOC. value, requiring some of this code to be reinstated.

mpe: Furthermore a change in binutils master (not yet released) causes
the current way we handle the TOC to no longer work when building with
MODVERSIONS=y and RELOCATABLE=n. The symptom is that modules can not be
loaded due to there being no version found for TOC.

Cc: stable@vger.kernel.org # 3.16+
Signed-off-by: Alan Modra <amodra@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/kernel/misc_64.S   | 28 ----------------------------
 arch/powerpc/kernel/module_64.c | 12 +++++++++---
 scripts/mod/modpost.c           |  3 ++-
 3 files changed, 11 insertions(+), 32 deletions(-)

diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S
index 25a6f6ae729f..1f979d5617a2 100644
--- a/arch/powerpc/kernel/misc_64.S
+++ b/arch/powerpc/kernel/misc_64.S
@@ -634,31 +634,3 @@ _GLOBAL(kexec_sequence)
 	li	r5,0
 	blr	/* image->start(physid, image->start, 0); */
 #endif /* CONFIG_KEXEC */
-
-#ifdef CONFIG_MODULES
-#if defined(_CALL_ELF) && _CALL_ELF == 2
-
-#ifdef CONFIG_MODVERSIONS
-.weak __crc_TOC.
-.section "___kcrctab+TOC.","a"
-.globl __kcrctab_TOC.
-__kcrctab_TOC.:
-	.llong	__crc_TOC.
-#endif
-
-/*
- * Export a fake .TOC. since both modpost and depmod will complain otherwise.
- * Both modpost and depmod strip the leading . so we do the same here.
- */
-.section "__ksymtab_strings","a"
-__kstrtab_TOC.:
-	.asciz "TOC."
-
-.section "___ksymtab+TOC.","a"
-/* This symbol name is important: it's used by modpost to find exported syms */
-.globl __ksymtab_TOC.
-__ksymtab_TOC.:
-	.llong 0 /* .value */
-	.llong __kstrtab_TOC.
-#endif /* ELFv2 */
-#endif /* MODULES */
diff --git a/arch/powerpc/kernel/module_64.c b/arch/powerpc/kernel/module_64.c
index e4f7d4eed20c..08b7a40de5f8 100644
--- a/arch/powerpc/kernel/module_64.c
+++ b/arch/powerpc/kernel/module_64.c
@@ -326,7 +326,10 @@ static void dedotify_versions(struct modversion_info *vers,
 		}
 }
 
-/* Undefined symbols which refer to .funcname, hack to funcname (or .TOC.) */
+/*
+ * Undefined symbols which refer to .funcname, hack to funcname. Make .TOC.
+ * seem to be defined (value set later).
+ */
 static void dedotify(Elf64_Sym *syms, unsigned int numsyms, char *strtab)
 {
 	unsigned int i;
@@ -334,8 +337,11 @@ static void dedotify(Elf64_Sym *syms, unsigned int numsyms, char *strtab)
 	for (i = 1; i < numsyms; i++) {
 		if (syms[i].st_shndx == SHN_UNDEF) {
 			char *name = strtab + syms[i].st_name;
-			if (name[0] == '.')
+			if (name[0] == '.') {
+				if (strcmp(name+1, "TOC.") == 0)
+					syms[i].st_shndx = SHN_ABS;
 				syms[i].st_name++;
+			}
 		}
 	}
 }
@@ -351,7 +357,7 @@ static Elf64_Sym *find_dot_toc(Elf64_Shdr *sechdrs,
 	numsyms = sechdrs[symindex].sh_size / sizeof(Elf64_Sym);
 
 	for (i = 1; i < numsyms; i++) {
-		if (syms[i].st_shndx == SHN_UNDEF
+		if (syms[i].st_shndx == SHN_ABS
 		    && strcmp(strtab + syms[i].st_name, "TOC.") == 0)
 			return &syms[i];
 	}
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 91ee1b2e0f9a..a9f02fe15ce3 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -593,7 +593,8 @@ static int ignore_undef_symbol(struct elf_info *info, const char *symname)
 		if (strncmp(symname, "_restgpr0_", sizeof("_restgpr0_") - 1) == 0 ||
 		    strncmp(symname, "_savegpr0_", sizeof("_savegpr0_") - 1) == 0 ||
 		    strncmp(symname, "_restvr_", sizeof("_restvr_") - 1) == 0 ||
-		    strncmp(symname, "_savevr_", sizeof("_savevr_") - 1) == 0)
+		    strncmp(symname, "_savevr_", sizeof("_savevr_") - 1) == 0 ||
+		    strcmp(symname, ".TOC.") == 0)
 			return 1;
 	/* Do not ignore this symbol */
 	return 0;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc/pseries: Add H_GET_CPU_CHARACTERISTICS flags & wrapper
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (294 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64: Add macros for annotating the destination of rfid/hrfid Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-02  3:08   ` Michael Ellerman
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64: Convert the syscall exit path to use RFI_TO_USER/KERNEL Sasha Levin
                   ` (220 subsequent siblings)
  516 siblings, 1 reply; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Michael Neuling, Michael Ellerman, Sasha Levin

From: Michael Neuling <mikey@neuling.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 191eccb1580939fb0d47deb405b82a85b0379070 ]

A new hypervisor call has been defined to communicate various
characteristics of the CPU to guests. Add definitions for the hcall
number, flags and a wrapper function.

Signed-off-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/include/asm/hvcall.h         | 17 +++++++++++++++++
 arch/powerpc/include/asm/plpar_wrappers.h | 14 ++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/arch/powerpc/include/asm/hvcall.h b/arch/powerpc/include/asm/hvcall.h
index 85bc8c0d257b..51adbde09845 100644
--- a/arch/powerpc/include/asm/hvcall.h
+++ b/arch/powerpc/include/asm/hvcall.h
@@ -239,6 +239,7 @@
 #define H_GET_HCA_INFO          0x1B8
 #define H_GET_PERF_COUNT        0x1BC
 #define H_MANAGE_TRACE          0x1C0
+#define H_GET_CPU_CHARACTERISTICS 0x1C8
 #define H_FREE_LOGICAL_LAN_BUFFER 0x1D4
 #define H_QUERY_INT_STATE       0x1E4
 #define H_POLL_PENDING		0x1D8
@@ -285,6 +286,17 @@
 #define H_SET_MODE_RESOURCE_ADDR_TRANS_MODE	3
 #define H_SET_MODE_RESOURCE_LE			4
 
+/* H_GET_CPU_CHARACTERISTICS return values */
+#define H_CPU_CHAR_SPEC_BAR_ORI31	(1ull << 63) // IBM bit 0
+#define H_CPU_CHAR_BCCTRL_SERIALISED	(1ull << 62) // IBM bit 1
+#define H_CPU_CHAR_L1D_FLUSH_ORI30	(1ull << 61) // IBM bit 2
+#define H_CPU_CHAR_L1D_FLUSH_TRIG2	(1ull << 60) // IBM bit 3
+#define H_CPU_CHAR_L1D_THREAD_PRIV	(1ull << 59) // IBM bit 4
+
+#define H_CPU_BEHAV_FAVOUR_SECURITY	(1ull << 63) // IBM bit 0
+#define H_CPU_BEHAV_L1D_FLUSH_PR	(1ull << 62) // IBM bit 1
+#define H_CPU_BEHAV_BNDS_CHK_SPEC_BAR	(1ull << 61) // IBM bit 2
+
 #ifndef __ASSEMBLY__
 
 /**
@@ -423,6 +435,11 @@ extern long pseries_big_endian_exceptions(void);
 
 #endif /* CONFIG_PPC_PSERIES */
 
+struct h_cpu_char_result {
+	u64 character;
+	u64 behaviour;
+};
+
 #endif /* __ASSEMBLY__ */
 #endif /* __KERNEL__ */
 #endif /* _ASM_POWERPC_HVCALL_H */
diff --git a/arch/powerpc/include/asm/plpar_wrappers.h b/arch/powerpc/include/asm/plpar_wrappers.h
index 67859edbf8fd..6e05cb397a5c 100644
--- a/arch/powerpc/include/asm/plpar_wrappers.h
+++ b/arch/powerpc/include/asm/plpar_wrappers.h
@@ -323,4 +323,18 @@ static inline long plapr_set_watchpoint0(unsigned long dawr0, unsigned long dawr
 	return plpar_set_mode(0, H_SET_MODE_RESOURCE_SET_DAWR, dawr0, dawrx0);
 }
 
+static inline long plpar_get_cpu_characteristics(struct h_cpu_char_result *p)
+{
+	unsigned long retbuf[PLPAR_HCALL_BUFSIZE];
+	long rc;
+
+	rc = plpar_hcall(H_GET_CPU_CHARACTERISTICS, retbuf);
+	if (rc == H_SUCCESS) {
+		p->character = retbuf[0];
+		p->behaviour = retbuf[1];
+	}
+
+	return rc;
+}
+
 #endif /* _ASM_POWERPC_PLPAR_WRAPPERS_H */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc/64: Add macros for annotating the destination of rfid/hrfid
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (293 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc: Simplify module TOC handling Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/pseries: Add H_GET_CPU_CHARACTERISTICS flags & wrapper Sasha Levin
                   ` (221 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Nicholas Piggin, Michael Ellerman, Sasha Levin

From: Nicholas Piggin <npiggin@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 50e51c13b3822d14ff6df4279423e4b7b2269bc3 ]

The rfid/hrfid ((Hypervisor) Return From Interrupt) instruction is
used for switching from the kernel to userspace, and from the
hypervisor to the guest kernel. However it can and is also used for
other transitions, eg. from real mode kernel code to virtual mode
kernel code, and it's not always clear from the code what the
destination context is.

To make it clearer when reading the code, add macros which encode the
expected destination context.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/include/asm/exception-64e.h |  6 ++++++
 arch/powerpc/include/asm/exception-64s.h | 29 +++++++++++++++++++++++++++++
 2 files changed, 35 insertions(+)

diff --git a/arch/powerpc/include/asm/exception-64e.h b/arch/powerpc/include/asm/exception-64e.h
index a8b52b61043f..bd8958445336 100644
--- a/arch/powerpc/include/asm/exception-64e.h
+++ b/arch/powerpc/include/asm/exception-64e.h
@@ -208,5 +208,11 @@ exc_##label##_book3e:
 	ori	r3,r3,interrupt_base_book3e@l;	\
 	mtspr	SPRN_IVOR##vector_number,r3;
 
+#define RFI_TO_KERNEL							\
+	rfi
+
+#define RFI_TO_USER							\
+	rfi
+
 #endif /* _ASM_POWERPC_EXCEPTION_64E_H */
 
diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h
index 77f52b26dad6..c8c8a81e3976 100644
--- a/arch/powerpc/include/asm/exception-64s.h
+++ b/arch/powerpc/include/asm/exception-64s.h
@@ -50,6 +50,35 @@
 #define EX_PPR		88	/* SMT thread status register (priority) */
 #define EX_CTR		96
 
+/* Macros for annotating the expected destination of (h)rfid */
+
+#define RFI_TO_KERNEL							\
+	rfid
+
+#define RFI_TO_USER							\
+	rfid
+
+#define RFI_TO_USER_OR_KERNEL						\
+	rfid
+
+#define RFI_TO_GUEST							\
+	rfid
+
+#define HRFI_TO_KERNEL							\
+	hrfid
+
+#define HRFI_TO_USER							\
+	hrfid
+
+#define HRFI_TO_USER_OR_KERNEL						\
+	hrfid
+
+#define HRFI_TO_GUEST							\
+	hrfid
+
+#define HRFI_TO_UNKNOWN							\
+	hrfid
+
 #ifdef CONFIG_RELOCATABLE
 #define __EXCEPTION_RELON_PROLOG_PSERIES_1(label, h)			\
 	ld	r12,PACAKBASE(r13);	/* get high part of &label */	\
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc/64: Convert fast_exception_return to use RFI_TO_USER/KERNEL
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (296 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64: Convert the syscall exit path to use RFI_TO_USER/KERNEL Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Convert slb_miss_common " Sasha Levin
                   ` (218 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Nicholas Piggin, Michael Ellerman, Sasha Levin

From: Nicholas Piggin <npiggin@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a08f828cf47e6c605af21d2cdec68f84e799c318 ]

Similar to the syscall return path, in fast_exception_return we may be
returning to user or kernel context. We already have a test for that,
because we conditionally restore r13. So use that existing test and
branch, and bifurcate the return based on that.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/kernel/entry_64.S | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index de276553cc79..80d90d687d66 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -840,7 +840,7 @@ BEGIN_FTR_SECTION
 END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
 	ACCOUNT_CPU_USER_EXIT(r2, r4)
 	REST_GPR(13, r1)
-1:
+
 	mtspr	SPRN_SRR1,r3
 
 	ld	r2,_CCR(r1)
@@ -853,8 +853,22 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
 	ld	r3,GPR3(r1)
 	ld	r4,GPR4(r1)
 	ld	r1,GPR1(r1)
+	RFI_TO_USER
+	b	.	/* prevent speculative execution */
 
-	rfid
+1:	mtspr	SPRN_SRR1,r3
+
+	ld	r2,_CCR(r1)
+	mtcrf	0xFF,r2
+	ld	r2,_NIP(r1)
+	mtspr	SPRN_SRR0,r2
+
+	ld	r0,GPR0(r1)
+	ld	r2,GPR2(r1)
+	ld	r3,GPR3(r1)
+	ld	r4,GPR4(r1)
+	ld	r1,GPR1(r1)
+	RFI_TO_KERNEL
 	b	.	/* prevent speculative execution */
 
 #endif /* CONFIG_PPC_BOOK3E */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc/64: Convert the syscall exit path to use RFI_TO_USER/KERNEL
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (295 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/pseries: Add H_GET_CPU_CHARACTERISTICS flags & wrapper Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64: Convert fast_exception_return " Sasha Levin
                   ` (219 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Nicholas Piggin, Michael Ellerman, Sasha Levin

From: Nicholas Piggin <npiggin@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b8e90cb7bc04a509e821e82ab6ed7a8ef11ba333 ]

In the syscall exit path we may be returning to user or kernel
context. We already have a test for that, because we conditionally
restore r13. So use that existing test and branch, and bifurcate the
return based on that.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/kernel/entry_64.S | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index 80d90d687d66..dc22fdcdcb09 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -218,13 +218,23 @@ END_FTR_SECTION_IFCLR(CPU_FTR_STCX_CHECKS_ADDRESS)
 	ACCOUNT_CPU_USER_EXIT(r11, r12)
 	HMT_MEDIUM_LOW_HAS_PPR
 	ld	r13,GPR13(r1)	/* only restore r13 if returning to usermode */
+	ld	r2,GPR2(r1)
+	ld	r1,GPR1(r1)
+	mtlr	r4
+	mtcr	r5
+	mtspr	SPRN_SRR0,r7
+	mtspr	SPRN_SRR1,r8
+	RFI_TO_USER
+	b	.	/* prevent speculative execution */
+
+	/* exit to kernel */
 1:	ld	r2,GPR2(r1)
 	ld	r1,GPR1(r1)
 	mtlr	r4
 	mtcr	r5
 	mtspr	SPRN_SRR0,r7
 	mtspr	SPRN_SRR1,r8
-	RFI
+	RFI_TO_KERNEL
 	b	.	/* prevent speculative execution */
 
 syscall_error:	
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc/64s: Convert slb_miss_common to use RFI_TO_USER/KERNEL
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (297 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64: Convert fast_exception_return " Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Add support for RFI flush of L1-D cache Sasha Levin
                   ` (217 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Nicholas Piggin, Michael Ellerman, Sasha Levin

From: Nicholas Piggin <npiggin@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c7305645eb0c1621351cfc104038831ae87c0053 ]

In the SLB miss handler we may be returning to user or kernel. We need
to add a check early on and save the result in the cr4 register, and
then we bifurcate the return path based on that.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/kernel/exceptions-64s.S | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
index 7662bfae0493..df610b045c7d 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -1511,6 +1511,8 @@ slb_miss_realmode:
 
 	andi.	r10,r12,MSR_RI	/* check for unrecoverable exception */
 	beq-	2f
+	andi.	r10,r12,MSR_PR	/* check for user mode (PR != 0) */
+	bne	1f
 
 .machine	push
 .machine	"power4"
@@ -1524,7 +1526,23 @@ slb_miss_realmode:
 	ld	r11,PACA_EXSLB+EX_R11(r13)
 	ld	r12,PACA_EXSLB+EX_R12(r13)
 	ld	r13,PACA_EXSLB+EX_R13(r13)
-	rfid
+	RFI_TO_KERNEL
+	b	.	/* prevent speculative execution */
+
+1:
+.machine	push
+.machine	"power4"
+	mtcrf	0x80,r9
+	mtcrf	0x01,r9		/* slb_allocate uses cr0 and cr7 */
+.machine	pop
+
+	RESTORE_PPR_PACA(PACA_EXSLB, r9)
+	ld	r9,PACA_EXSLB+EX_R9(r13)
+	ld	r10,PACA_EXSLB+EX_R10(r13)
+	ld	r11,PACA_EXSLB+EX_R11(r13)
+	ld	r12,PACA_EXSLB+EX_R12(r13)
+	ld	r13,PACA_EXSLB+EX_R13(r13)
+	RFI_TO_USER
 	b	.	/* prevent speculative execution */
 
 2:	mfspr	r11,SPRN_SRR0
@@ -1533,7 +1551,7 @@ slb_miss_realmode:
 	mtspr	SPRN_SRR0,r10
 	ld	r10,PACAKMSR(r13)
 	mtspr	SPRN_SRR1,r10
-	rfid
+	RFI_TO_KERNEL
 	b	.
 
 unrecov_slb:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc/64s: Support disabling RFI flush with no_rfi_flush and nopti
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (299 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Add support for RFI flush of L1-D cache Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/pseries: Query hypervisor for RFI flush settings Sasha Levin
                   ` (215 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Michael Ellerman, Sasha Levin

From: Michael Ellerman <mpe@ellerman.id.au>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit bc9c9304a45480797e13a8e1df96ffcf44fb62fe ]

Because there may be some performance overhead of the RFI flush, add
kernel command line options to disable it.

We add a sensibly named 'no_rfi_flush' option, but we also hijack the
x86 option 'nopti'. The RFI flush is not the same as KPTI, but if we
see 'nopti' we can guess that the user is trying to avoid any overhead
of Meltdown mitigations, and it means we don't have to educate every
one about a different command line option.

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/kernel/setup_64.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index e76bcacaf150..a3993ac21b50 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -811,8 +811,29 @@ early_initcall(disable_hardlockup_detector);
 #ifdef CONFIG_PPC_BOOK3S_64
 static enum l1d_flush_type enabled_flush_types;
 static void *l1d_flush_fallback_area;
+static bool no_rfi_flush;
 bool rfi_flush;
 
+static int __init handle_no_rfi_flush(char *p)
+{
+	pr_info("rfi-flush: disabled on command line.");
+	no_rfi_flush = true;
+	return 0;
+}
+early_param("no_rfi_flush", handle_no_rfi_flush);
+
+/*
+ * The RFI flush is not KPTI, but because users will see doco that says to use
+ * nopti we hijack that option here to also disable the RFI flush.
+ */
+static int __init handle_no_pti(char *p)
+{
+	pr_info("rfi-flush: disabling due to 'nopti' on command line.\n");
+	handle_no_rfi_flush(NULL);
+	return 0;
+}
+early_param("nopti", handle_no_pti);
+
 static void do_nothing(void *unused)
 {
 	/*
@@ -883,7 +904,8 @@ void __init setup_rfi_flush(enum l1d_flush_type types, bool enable)
 
 	enabled_flush_types = types;
 
-	rfi_flush_enable(enable);
+	if (!no_rfi_flush)
+		rfi_flush_enable(enable);
 }
 #endif /* CONFIG_PPC_BOOK3S_64 */
 #endif
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc/64s: Add support for RFI flush of L1-D cache
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (298 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Convert slb_miss_common " Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Support disabling RFI flush with no_rfi_flush and nopti Sasha Levin
                   ` (216 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Michael Ellerman, Nicholas Piggin, Sasha Levin

From: Michael Ellerman <mpe@ellerman.id.au>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit aa8a5e0062ac940f7659394f4817c948dc8c0667 ]

On some CPUs we can prevent the Meltdown vulnerability by flushing the
L1-D cache on exit from kernel to user mode, and from hypervisor to
guest.

This is known to be the case on at least Power7, Power8 and Power9. At
this time we do not know the status of the vulnerability on other CPUs
such as the 970 (Apple G5), pasemi CPUs (AmigaOne X1000) or Freescale
CPUs. As more information comes to light we can enable this, or other
mechanisms on those CPUs.

The vulnerability occurs when the load of an architecturally
inaccessible memory region (eg. userspace load of kernel memory) is
speculatively executed to the point where its result can influence the
address of a subsequent speculatively executed load.

In order for that to happen, the first load must hit in the L1,
because before the load is sent to the L2 the permission check is
performed. Therefore if no kernel addresses hit in the L1 the
vulnerability can not occur. We can ensure that is the case by
flushing the L1 whenever we return to userspace. Similarly for
hypervisor vs guest.

In order to flush the L1-D cache on exit, we add a section of nops at
each (h)rfi location that returns to a lower privileged context, and
patch that with some sequence. Newer firmwares are able to advertise
to us that there is a special nop instruction that flushes the L1-D.
If we do not see that advertised, we fall back to doing a displacement
flush in software.

For guest kernels we support migration between some CPU versions, and
different CPUs may use different flush instructions. So that we are
prepared to migrate to a machine with a different flush instruction
activated, we may have to patch more than one flush instruction at
boot if the hypervisor tells us to.

In the end this patch is mostly the work of Nicholas Piggin and
Michael Ellerman. However a cast of thousands contributed to analysis
of the issue, earlier versions of the patch, back ports testing etc.
Many thanks to all of them.

Tested-by: Jon Masters <jcm@redhat.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/include/asm/exception-64s.h  | 40 +++++++++++---
 arch/powerpc/include/asm/feature-fixups.h | 15 ++++++
 arch/powerpc/include/asm/paca.h           | 10 ++++
 arch/powerpc/include/asm/setup.h          | 13 +++++
 arch/powerpc/kernel/asm-offsets.c         |  4 ++
 arch/powerpc/kernel/exceptions-64s.S      | 86 +++++++++++++++++++++++++++++++
 arch/powerpc/kernel/setup_64.c            | 79 ++++++++++++++++++++++++++++
 arch/powerpc/kernel/vmlinux.lds.S         |  9 ++++
 arch/powerpc/lib/feature-fixups.c         | 42 +++++++++++++++
 9 files changed, 290 insertions(+), 8 deletions(-)

diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h
index c8c8a81e3976..2367cee008ce 100644
--- a/arch/powerpc/include/asm/exception-64s.h
+++ b/arch/powerpc/include/asm/exception-64s.h
@@ -50,34 +50,58 @@
 #define EX_PPR		88	/* SMT thread status register (priority) */
 #define EX_CTR		96
 
-/* Macros for annotating the expected destination of (h)rfid */
+/*
+ * Macros for annotating the expected destination of (h)rfid
+ *
+ * The nop instructions allow us to insert one or more instructions to flush the
+ * L1-D cache when returning to userspace or a guest.
+ */
+#define RFI_FLUSH_SLOT							\
+	RFI_FLUSH_FIXUP_SECTION;					\
+	nop;								\
+	nop;								\
+	nop
 
 #define RFI_TO_KERNEL							\
 	rfid
 
 #define RFI_TO_USER							\
-	rfid
+	RFI_FLUSH_SLOT;							\
+	rfid;								\
+	b	rfi_flush_fallback
 
 #define RFI_TO_USER_OR_KERNEL						\
-	rfid
+	RFI_FLUSH_SLOT;							\
+	rfid;								\
+	b	rfi_flush_fallback
 
 #define RFI_TO_GUEST							\
-	rfid
+	RFI_FLUSH_SLOT;							\
+	rfid;								\
+	b	rfi_flush_fallback
 
 #define HRFI_TO_KERNEL							\
 	hrfid
 
 #define HRFI_TO_USER							\
-	hrfid
+	RFI_FLUSH_SLOT;							\
+	hrfid;								\
+	b	hrfi_flush_fallback
 
 #define HRFI_TO_USER_OR_KERNEL						\
-	hrfid
+	RFI_FLUSH_SLOT;							\
+	hrfid;								\
+	b	hrfi_flush_fallback
 
 #define HRFI_TO_GUEST							\
-	hrfid
+	RFI_FLUSH_SLOT;							\
+	hrfid;								\
+	b	hrfi_flush_fallback
 
 #define HRFI_TO_UNKNOWN							\
-	hrfid
+	RFI_FLUSH_SLOT;							\
+	hrfid;								\
+	b	hrfi_flush_fallback
 
 #ifdef CONFIG_RELOCATABLE
 #define __EXCEPTION_RELON_PROLOG_PSERIES_1(label, h)			\
diff --git a/arch/powerpc/include/asm/feature-fixups.h b/arch/powerpc/include/asm/feature-fixups.h
index 9a67a38bf7b9..7068bafbb2d6 100644
--- a/arch/powerpc/include/asm/feature-fixups.h
+++ b/arch/powerpc/include/asm/feature-fixups.h
@@ -184,4 +184,19 @@ label##3:					       	\
 	FTR_ENTRY_OFFSET label##1b-label##3b;		\
 	.popsection;
 
+#define RFI_FLUSH_FIXUP_SECTION				\
+951:							\
+	.pushsection __rfi_flush_fixup,"a";		\
+	.align 2;					\
+952:							\
+	FTR_ENTRY_OFFSET 951b-952b;			\
+	.popsection;
+
+
+#ifndef __ASSEMBLY__
+
+extern long __start___rfi_flush_fixup, __stop___rfi_flush_fixup;
+
+#endif
+
 #endif /* __ASM_POWERPC_FEATURE_FIXUPS_H */
diff --git a/arch/powerpc/include/asm/paca.h b/arch/powerpc/include/asm/paca.h
index 70bd4381f8e6..45e2aefece16 100644
--- a/arch/powerpc/include/asm/paca.h
+++ b/arch/powerpc/include/asm/paca.h
@@ -192,6 +192,16 @@ struct paca_struct {
 #endif
 	struct kvmppc_host_state kvm_hstate;
 #endif
+#ifdef CONFIG_PPC_BOOK3S_64
+	/*
+	 * rfi fallback flush must be in its own cacheline to prevent
+	 * other paca data leaking into the L1d
+	 */
+	u64 exrfi[13] __aligned(0x80);
+	void *rfi_flush_fallback_area;
+	u64 l1d_flush_congruence;
+	u64 l1d_flush_sets;
+#endif
 };
 
 extern struct paca_struct *paca;
diff --git a/arch/powerpc/include/asm/setup.h b/arch/powerpc/include/asm/setup.h
index e9d384cbd021..7916b56f2e60 100644
--- a/arch/powerpc/include/asm/setup.h
+++ b/arch/powerpc/include/asm/setup.h
@@ -26,6 +26,19 @@ void initmem_init(void);
 void setup_panic(void);
 #define ARCH_PANIC_TIMEOUT 180
 
+void rfi_flush_enable(bool enable);
+
+/* These are bit flags */
+enum l1d_flush_type {
+	L1D_FLUSH_NONE		= 0x1,
+	L1D_FLUSH_FALLBACK	= 0x2,
+	L1D_FLUSH_ORI		= 0x4,
+	L1D_FLUSH_MTTRIG	= 0x8,
+};
+
+void __init setup_rfi_flush(enum l1d_flush_type, bool enable);
+void do_rfi_flush_fixups(enum l1d_flush_type types);
+
 #endif /* !__ASSEMBLY__ */
 
 #endif	/* _ASM_POWERPC_SETUP_H */
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
index d8d332e65078..69761d8ad871 100644
--- a/arch/powerpc/kernel/asm-offsets.c
+++ b/arch/powerpc/kernel/asm-offsets.c
@@ -244,6 +244,10 @@ int main(void)
 #ifdef CONFIG_PPC_BOOK3S_64
 	DEFINE(PACAMCEMERGSP, offsetof(struct paca_struct, mc_emergency_sp));
 	DEFINE(PACA_IN_MCE, offsetof(struct paca_struct, in_mce));
+	DEFINE(PACA_RFI_FLUSH_FALLBACK_AREA, offsetof(struct paca_struct, rfi_flush_fallback_area));
+	DEFINE(PACA_EXRFI, offsetof(struct paca_struct, exrfi));
+	DEFINE(PACA_L1D_FLUSH_CONGRUENCE, offsetof(struct paca_struct, l1d_flush_congruence));
+	DEFINE(PACA_L1D_FLUSH_SETS, offsetof(struct paca_struct, l1d_flush_sets));
 #endif
 	DEFINE(PACAHWCPUID, offsetof(struct paca_struct, hw_cpu_id));
 	DEFINE(PACAKEXECSTATE, offsetof(struct paca_struct, kexec_state));
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
index df610b045c7d..12f705671652 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -1572,6 +1572,92 @@ power4_fixup_nap:
 	blr
 #endif
 
+	.globl rfi_flush_fallback
+rfi_flush_fallback:
+	SET_SCRATCH0(r13);
+	GET_PACA(r13);
+	std	r9,PACA_EXRFI+EX_R9(r13)
+	std	r10,PACA_EXRFI+EX_R10(r13)
+	std	r11,PACA_EXRFI+EX_R11(r13)
+	std	r12,PACA_EXRFI+EX_R12(r13)
+	std	r8,PACA_EXRFI+EX_R13(r13)
+	mfctr	r9
+	ld	r10,PACA_RFI_FLUSH_FALLBACK_AREA(r13)
+	ld	r11,PACA_L1D_FLUSH_SETS(r13)
+	ld	r12,PACA_L1D_FLUSH_CONGRUENCE(r13)
+	/*
+	 * The load adresses are at staggered offsets within cachelines,
+	 * which suits some pipelines better (on others it should not
+	 * hurt).
+	 */
+	addi	r12,r12,8
+	mtctr	r11
+	DCBT_STOP_ALL_STREAM_IDS(r11) /* Stop prefetch streams */
+
+	/* order ld/st prior to dcbt stop all streams with flushing */
+	sync
+1:	li	r8,0
+	.rept	8 /* 8-way set associative */
+	ldx	r11,r10,r8
+	add	r8,r8,r12
+	xor	r11,r11,r11	// Ensure r11 is 0 even if fallback area is not
+	add	r8,r8,r11	// Add 0, this creates a dependency on the ldx
+	.endr
+	addi	r10,r10,128 /* 128 byte cache line */
+	bdnz	1b
+
+	mtctr	r9
+	ld	r9,PACA_EXRFI+EX_R9(r13)
+	ld	r10,PACA_EXRFI+EX_R10(r13)
+	ld	r11,PACA_EXRFI+EX_R11(r13)
+	ld	r12,PACA_EXRFI+EX_R12(r13)
+	ld	r8,PACA_EXRFI+EX_R13(r13)
+	GET_SCRATCH0(r13);
+	rfid
+
+	.globl hrfi_flush_fallback
+hrfi_flush_fallback:
+	SET_SCRATCH0(r13);
+	GET_PACA(r13);
+	std	r9,PACA_EXRFI+EX_R9(r13)
+	std	r10,PACA_EXRFI+EX_R10(r13)
+	std	r11,PACA_EXRFI+EX_R11(r13)
+	std	r12,PACA_EXRFI+EX_R12(r13)
+	std	r8,PACA_EXRFI+EX_R13(r13)
+	mfctr	r9
+	ld	r10,PACA_RFI_FLUSH_FALLBACK_AREA(r13)
+	ld	r11,PACA_L1D_FLUSH_SETS(r13)
+	ld	r12,PACA_L1D_FLUSH_CONGRUENCE(r13)
+	/*
+	 * The load adresses are at staggered offsets within cachelines,
+	 * which suits some pipelines better (on others it should not
+	 * hurt).
+	 */
+	addi	r12,r12,8
+	mtctr	r11
+	DCBT_STOP_ALL_STREAM_IDS(r11) /* Stop prefetch streams */
+
+	/* order ld/st prior to dcbt stop all streams with flushing */
+	sync
+1:	li	r8,0
+	.rept	8 /* 8-way set associative */
+	ldx	r11,r10,r8
+	add	r8,r8,r12
+	xor	r11,r11,r11	// Ensure r11 is 0 even if fallback area is not
+	add	r8,r8,r11	// Add 0, this creates a dependency on the ldx
+	.endr
+	addi	r10,r10,128 /* 128 byte cache line */
+	bdnz	1b
+
+	mtctr	r9
+	ld	r9,PACA_EXRFI+EX_R9(r13)
+	ld	r10,PACA_EXRFI+EX_R10(r13)
+	ld	r11,PACA_EXRFI+EX_R11(r13)
+	ld	r12,PACA_EXRFI+EX_R12(r13)
+	ld	r8,PACA_EXRFI+EX_R13(r13)
+	GET_SCRATCH0(r13);
+	hrfid
+
 /*
  * Hash table stuff
  */
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 8161d66830a2..e76bcacaf150 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -807,4 +807,83 @@ static int __init disable_hardlockup_detector(void)
 	return 0;
 }
 early_initcall(disable_hardlockup_detector);
+
+#ifdef CONFIG_PPC_BOOK3S_64
+static enum l1d_flush_type enabled_flush_types;
+static void *l1d_flush_fallback_area;
+bool rfi_flush;
+
+static void do_nothing(void *unused)
+{
+	/*
+	 * We don't need to do the flush explicitly, just enter+exit kernel is
+	 * sufficient, the RFI exit handlers will do the right thing.
+	 */
+}
+
+void rfi_flush_enable(bool enable)
+{
+	if (rfi_flush == enable)
+		return;
+
+	if (enable) {
+		do_rfi_flush_fixups(enabled_flush_types);
+		on_each_cpu(do_nothing, NULL, 1);
+	} else
+		do_rfi_flush_fixups(L1D_FLUSH_NONE);
+
+	rfi_flush = enable;
+}
+
+static void init_fallback_flush(void)
+{
+	u64 l1d_size, limit;
+	int cpu;
+
+	l1d_size = ppc64_caches.dsize;
+	limit = min(safe_stack_limit(), ppc64_rma_size);
+
+	/*
+	 * Align to L1d size, and size it at 2x L1d size, to catch possible
+	 * hardware prefetch runoff. We don't have a recipe for load patterns to
+	 * reliably avoid the prefetcher.
+	 */
+	l1d_flush_fallback_area = __va(memblock_alloc_base(l1d_size * 2, l1d_size, limit));
+	memset(l1d_flush_fallback_area, 0, l1d_size * 2);
+
+	for_each_possible_cpu(cpu) {
+		/*
+		 * The fallback flush is currently coded for 8-way
+		 * associativity. Different associativity is possible, but it
+		 * will be treated as 8-way and may not evict the lines as
+		 * effectively.
+		 *
+		 * 128 byte lines are mandatory.
+		 */
+		u64 c = l1d_size / 8;
+
+		paca[cpu].rfi_flush_fallback_area = l1d_flush_fallback_area;
+		paca[cpu].l1d_flush_congruence = c;
+		paca[cpu].l1d_flush_sets = c / 128;
+	}
+}
+
+void __init setup_rfi_flush(enum l1d_flush_type types, bool enable)
+{
+	if (types & L1D_FLUSH_FALLBACK) {
+		pr_info("rfi-flush: Using fallback displacement flush\n");
+		init_fallback_flush();
+	}
+
+	if (types & L1D_FLUSH_ORI)
+		pr_info("rfi-flush: Using ori type flush\n");
+
+	if (types & L1D_FLUSH_MTTRIG)
+		pr_info("rfi-flush: Using mttrig type flush\n");
+
+	enabled_flush_types = types;
+
+	rfi_flush_enable(enable);
+}
+#endif /* CONFIG_PPC_BOOK3S_64 */
 #endif
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S
index 1db685104ffc..b542a80477c8 100644
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -72,6 +72,15 @@ SECTIONS
 	/* Read-only data */
 	RODATA
 
+#ifdef CONFIG_PPC64
+	. = ALIGN(8);
+	__rfi_flush_fixup : AT(ADDR(__rfi_flush_fixup) - LOAD_OFFSET) {
+		__start___rfi_flush_fixup = .;
+		*(__rfi_flush_fixup)
+		__stop___rfi_flush_fixup = .;
+	}
+#endif
+
 	EXCEPTION_TABLE(0)
 
 	NOTES :kernel :notes
diff --git a/arch/powerpc/lib/feature-fixups.c b/arch/powerpc/lib/feature-fixups.c
index 7ce3870d7ddd..a18d648d31a6 100644
--- a/arch/powerpc/lib/feature-fixups.c
+++ b/arch/powerpc/lib/feature-fixups.c
@@ -20,6 +20,7 @@
 #include <asm/code-patching.h>
 #include <asm/page.h>
 #include <asm/sections.h>
+#include <asm/setup.h>
 
 
 struct fixup_entry {
@@ -113,6 +114,47 @@ void do_feature_fixups(unsigned long value, void *fixup_start, void *fixup_end)
 	}
 }
 
+#ifdef CONFIG_PPC_BOOK3S_64
+void do_rfi_flush_fixups(enum l1d_flush_type types)
+{
+	unsigned int instrs[3], *dest;
+	long *start, *end;
+	int i;
+
+	start = PTRRELOC(&__start___rfi_flush_fixup),
+	end = PTRRELOC(&__stop___rfi_flush_fixup);
+
+	instrs[0] = 0x60000000; /* nop */
+	instrs[1] = 0x60000000; /* nop */
+	instrs[2] = 0x60000000; /* nop */
+
+	if (types & L1D_FLUSH_FALLBACK)
+		/* b .+16 to fallback flush */
+		instrs[0] = 0x48000010;
+
+	i = 0;
+	if (types & L1D_FLUSH_ORI) {
+		instrs[i++] = 0x63ff0000; /* ori 31,31,0 speculation barrier */
+		instrs[i++] = 0x63de0000; /* ori 30,30,0 L1d flush*/
+	}
+
+	if (types & L1D_FLUSH_MTTRIG)
+		instrs[i++] = 0x7c12dba6; /* mtspr TRIG2,r0 (SPR #882) */
+
+	for (i = 0; start < end; start++, i++) {
+		dest = (void *)start + *start;
+
+		pr_devel("patching dest %lx\n", (unsigned long)dest);
+
+		patch_instruction(dest, instrs[0]);
+		patch_instruction(dest + 1, instrs[1]);
+		patch_instruction(dest + 2, instrs[2]);
+	}
+
+	printk(KERN_DEBUG "rfi-flush: patched %d locations\n", i);
+}
+#endif /* CONFIG_PPC_BOOK3S_64 */
+
 void do_lwsync_fixups(unsigned long value, void *fixup_start, void *fixup_end)
 {
 	long *start, *end;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc/pseries: Query hypervisor for RFI flush settings
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (300 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Support disabling RFI flush with no_rfi_flush and nopti Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Wire up cpu_show_meltdown() Sasha Levin
                   ` (214 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Michael Neuling, Michael Ellerman, Sasha Levin

From: Michael Neuling <mikey@neuling.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8989d56878a7735dfdb234707a2fee6faf631085 ]

A new hypervisor call is available which tells the guest settings
related to the RFI flush. Use it to query the appropriate flush
instruction(s), and whether the flush is required.

Signed-off-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/platforms/pseries/setup.c | 37 +++++++++++++++++++++++++++++++++-
 1 file changed, 36 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index e6e8b241d717..b4867b4d5a1e 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -507,6 +507,39 @@ static void __init find_and_init_phbs(void)
 	}
 }
 
+static void pseries_setup_rfi_flush(void)
+{
+	struct h_cpu_char_result result;
+	enum l1d_flush_type types;
+	bool enable;
+	long rc;
+
+	/* Enable by default */
+	enable = true;
+
+	rc = plpar_get_cpu_characteristics(&result);
+	if (rc == H_SUCCESS) {
+		types = L1D_FLUSH_NONE;
+
+		if (result.character & H_CPU_CHAR_L1D_FLUSH_TRIG2)
+			types |= L1D_FLUSH_MTTRIG;
+		if (result.character & H_CPU_CHAR_L1D_FLUSH_ORI30)
+			types |= L1D_FLUSH_ORI;
+
+		/* Use fallback if nothing set in hcall */
+		if (types == L1D_FLUSH_NONE)
+			types = L1D_FLUSH_FALLBACK;
+
+		if (!(result.behaviour & H_CPU_BEHAV_L1D_FLUSH_PR))
+			enable = false;
+	} else {
+		/* Default to fallback if case hcall is not available */
+		types = L1D_FLUSH_FALLBACK;
+	}
+
+	setup_rfi_flush(types, enable);
+}
+
 static void __init pSeries_setup_arch(void)
 {
 	set_arch_panic_timeout(10, ARCH_PANIC_TIMEOUT);
@@ -523,7 +556,9 @@ static void __init pSeries_setup_arch(void)
 
 	fwnmi_init();
 
-	/* By default, only probe PCI (can be overriden by rtas_pci) */
+	pseries_setup_rfi_flush();
+
+	/* By default, only probe PCI (can be overridden by rtas_pci) */
 	pci_add_flags(PCI_PROBE_ONLY);
 
 	/* Find and initialize PCI host bridges */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc/64s: Wire up cpu_show_meltdown()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (301 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/pseries: Query hypervisor for RFI flush settings Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-02  3:20   ` Michael Ellerman
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Allow control of RFI flush via debugfs Sasha Levin
                   ` (213 subsequent siblings)
  516 siblings, 1 reply; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Michael Ellerman, Sasha Levin

From: Michael Ellerman <mpe@ellerman.id.au>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fd6e440f20b1a4304553775fc55938848ff617c9 ]

The recent commit 87590ce6e373 ("sysfs/cpu: Add vulnerability folder")
added a generic folder and set of files for reporting information on
CPU vulnerabilities. One of those was for meltdown:

  /sys/devices/system/cpu/vulnerabilities/meltdown

This commit wires up that file for 64-bit Book3S powerpc.

For now we default to "Vulnerable" unless the RFI flush is enabled.
That may not actually be true on all hardware, further patches will
refine the reporting based on the CPU/platform etc. But for now we
default to being pessimists.

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/Kconfig           | 1 +
 arch/powerpc/kernel/setup_64.c | 8 ++++++++
 2 files changed, 9 insertions(+)

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index cffaeeee0d3e..a55a246fc784 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -133,6 +133,7 @@ config PPC
 	select GENERIC_SMP_IDLE_THREAD
 	select GENERIC_CMOS_UPDATE
 	select GENERIC_TIME_VSYSCALL_OLD
+	select GENERIC_CPU_VULNERABILITIES	if PPC_BOOK3S_64
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_CLOCKEVENTS_BROADCAST if SMP
 	select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index a3993ac21b50..1555778adb9c 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -907,5 +907,13 @@ void __init setup_rfi_flush(enum l1d_flush_type types, bool enable)
 	if (!no_rfi_flush)
 		rfi_flush_enable(enable);
 }
+
+ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, char *buf)
+{
+	if (rfi_flush)
+		return sprintf(buf, "Mitigation: RFI Flush\n");
+
+	return sprintf(buf, "Vulnerable\n");
+}
 #endif /* CONFIG_PPC_BOOK3S_64 */
 #endif
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ASoC: pcm512x: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (303 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Allow control of RFI flush via debugfs Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] drm: rcar-du: Use the VBK interrupt for vblank events Sasha Levin
                   ` (211 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jesse Chan, Mark Brown, Sasha Levin

From: Jesse Chan <jc@linux.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 0cab20cec0b663b7be8e2be5998d5a4113647f86 ]

This change resolves a new compile-time warning
when built as a loadable module:

WARNING: modpost: missing MODULE_LICENSE() in sound/soc/codecs/snd-soc-pcm512x-spi.o
see include/linux/module.h for more information

This adds the license as "GPL v2", which matches the header of the file.

MODULE_DESCRIPTION and MODULE_AUTHOR are also added.

Signed-off-by: Jesse Chan <jc@linux.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/soc/codecs/pcm512x-spi.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/sound/soc/codecs/pcm512x-spi.c b/sound/soc/codecs/pcm512x-spi.c
index 7b64a9cef704..8adb0912d5f8 100644
--- a/sound/soc/codecs/pcm512x-spi.c
+++ b/sound/soc/codecs/pcm512x-spi.c
@@ -71,3 +71,7 @@ static struct spi_driver pcm512x_spi_driver = {
 };
 
 module_spi_driver(pcm512x_spi_driver);
+
+MODULE_DESCRIPTION("ASoC PCM512x codec driver - SPI");
+MODULE_AUTHOR("Mark Brown <broonie@kernel.org>");
+MODULE_LICENSE("GPL v2");
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc/64s: Allow control of RFI flush via debugfs
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (302 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Wire up cpu_show_meltdown() Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] ASoC: pcm512x: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE Sasha Levin
                   ` (212 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Michael Ellerman, Sasha Levin

From: Michael Ellerman <mpe@ellerman.id.au>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 236003e6b5443c45c18e613d2b0d776a9f87540e ]

Expose the state of the RFI flush (enabled/disabled) via debugfs, and
allow it to be enabled/disabled at runtime.

eg: $ cat /sys/kernel/debug/powerpc/rfi_flush
    1
    $ echo 0 > /sys/kernel/debug/powerpc/rfi_flush
    $ cat /sys/kernel/debug/powerpc/rfi_flush
    0

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/kernel/setup_64.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 1555778adb9c..4e91905dc510 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -38,6 +38,7 @@
 #include <linux/hugetlb.h>
 #include <linux/memory.h>
 #include <linux/nmi.h>
+#include <linux/debugfs.h>
 
 #include <asm/io.h>
 #include <asm/kdump.h>
@@ -908,6 +909,35 @@ void __init setup_rfi_flush(enum l1d_flush_type types, bool enable)
 		rfi_flush_enable(enable);
 }
 
+#ifdef CONFIG_DEBUG_FS
+static int rfi_flush_set(void *data, u64 val)
+{
+	if (val == 1)
+		rfi_flush_enable(true);
+	else if (val == 0)
+		rfi_flush_enable(false);
+	else
+		return -EINVAL;
+
+	return 0;
+}
+
+static int rfi_flush_get(void *data, u64 *val)
+{
+	*val = rfi_flush ? 1 : 0;
+	return 0;
+}
+
+DEFINE_SIMPLE_ATTRIBUTE(fops_rfi_flush, rfi_flush_get, rfi_flush_set, "%llu\n");
+
+static __init int rfi_flush_debugfs_init(void)
+{
+	debugfs_create_file("rfi_flush", 0600, powerpc_debugfs_root, NULL, &fops_rfi_flush);
+	return 0;
+}
+device_initcall(rfi_flush_debugfs_init);
+#endif
+
 ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, char *buf)
 {
 	if (rfi_flush)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] drm: rcar-du: Use the VBK interrupt for vblank events
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (304 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] ASoC: pcm512x: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] ip6mr: fix stale iterator Sasha Levin
                   ` (210 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Laurent Pinchart, Sasha Levin

From: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit cbbb90b0c084d7dfb2ed8e3fecf8df200fbdd2a0 ]

When implementing support for interlaced modes, the driver switched from
reporting vblank events on the vertical blanking (VBK) interrupt to the
frame end interrupt (FRM). This incorrectly divided the reported refresh
rate by two. Fix it by moving back to the VBK interrupt.

Fixes: 906eff7fcada ("drm: rcar-du: Implement support for interlaced modes")
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
index 824c835330df..de155c77f739 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
@@ -511,7 +511,7 @@ static irqreturn_t rcar_du_crtc_irq(int irq, void *arg)
 	status = rcar_du_crtc_read(rcrtc, DSSR);
 	rcar_du_crtc_write(rcrtc, DSRCR, status & DSRCR_MASK);
 
-	if (status & DSSR_FRM) {
+	if (status & DSSR_VBK) {
 		drm_handle_vblank(rcrtc->crtc.dev, rcrtc->index);
 		rcar_du_crtc_finish_page_flip(rcrtc);
 		ret = IRQ_HANDLED;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ip6mr: fix stale iterator
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (305 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] drm: rcar-du: Use the VBK interrupt for vblank events Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] net: igmp: add a missing rcu locking section Sasha Levin
                   ` (209 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Nikolay Aleksandrov, David S . Miller, Sasha Levin

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4adfa79fc254efb7b0eb3cd58f62c2c3f805f1ba ]

When we dump the ip6mr mfc entries via proc, we initialize an iterator
with the table to dump but we don't clear the cache pointer which might
be initialized from a prior read on the same descriptor that ended. This
can result in lock imbalance (an unnecessary unlock) leading to other
crashes and hangs. Clear the cache pointer like ipmr does to fix the issue.
Thanks for the reliable reproducer.

Here's syzbot's trace:
 WARNING: bad unlock balance detected!
 4.15.0-rc3+ #128 Not tainted
 syzkaller971460/3195 is trying to release lock (mrt_lock) at:
 [<000000006898068d>] ipmr_mfc_seq_stop+0xe1/0x130 net/ipv6/ip6mr.c:553
 but there are no more locks to release!

 other info that might help us debug this:
 1 lock held by syzkaller971460/3195:
  #0:  (&p->lock){+.+.}, at: [<00000000744a6565>] seq_read+0xd5/0x13d0
 fs/seq_file.c:165

 stack backtrace:
 CPU: 1 PID: 3195 Comm: syzkaller971460 Not tainted 4.15.0-rc3+ #128
 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
 Google 01/01/2011
 Call Trace:
  __dump_stack lib/dump_stack.c:17 [inline]
  dump_stack+0x194/0x257 lib/dump_stack.c:53
  print_unlock_imbalance_bug+0x12f/0x140 kernel/locking/lockdep.c:3561
  __lock_release kernel/locking/lockdep.c:3775 [inline]
  lock_release+0x5f9/0xda0 kernel/locking/lockdep.c:4023
  __raw_read_unlock include/linux/rwlock_api_smp.h:225 [inline]
  _raw_read_unlock+0x1a/0x30 kernel/locking/spinlock.c:255
  ipmr_mfc_seq_stop+0xe1/0x130 net/ipv6/ip6mr.c:553
  traverse+0x3bc/0xa00 fs/seq_file.c:135
  seq_read+0x96a/0x13d0 fs/seq_file.c:189
  proc_reg_read+0xef/0x170 fs/proc/inode.c:217
  do_loop_readv_writev fs/read_write.c:673 [inline]
  do_iter_read+0x3db/0x5b0 fs/read_write.c:897
  compat_readv+0x1bf/0x270 fs/read_write.c:1140
  do_compat_preadv64+0xdc/0x100 fs/read_write.c:1189
  C_SYSC_preadv fs/read_write.c:1209 [inline]
  compat_SyS_preadv+0x3b/0x50 fs/read_write.c:1203
  do_syscall_32_irqs_on arch/x86/entry/common.c:327 [inline]
  do_fast_syscall_32+0x3ee/0xf9d arch/x86/entry/common.c:389
  entry_SYSENTER_compat+0x51/0x60 arch/x86/entry/entry_64_compat.S:125
 RIP: 0023:0xf7f73c79
 RSP: 002b:00000000e574a15c EFLAGS: 00000292 ORIG_RAX: 000000000000014d
 RAX: ffffffffffffffda RBX: 000000000000000f RCX: 0000000020a3afb0
 RDX: 0000000000000001 RSI: 0000000000000067 RDI: 0000000000000000
 RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
 R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
 R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
 BUG: sleeping function called from invalid context at lib/usercopy.c:25
 in_atomic(): 1, irqs_disabled(): 0, pid: 3195, name: syzkaller971460
 INFO: lockdep is turned off.
 CPU: 1 PID: 3195 Comm: syzkaller971460 Not tainted 4.15.0-rc3+ #128
 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
 Google 01/01/2011
 Call Trace:
  __dump_stack lib/dump_stack.c:17 [inline]
  dump_stack+0x194/0x257 lib/dump_stack.c:53
  ___might_sleep+0x2b2/0x470 kernel/sched/core.c:6060
  __might_sleep+0x95/0x190 kernel/sched/core.c:6013
  __might_fault+0xab/0x1d0 mm/memory.c:4525
  _copy_to_user+0x2c/0xc0 lib/usercopy.c:25
  copy_to_user include/linux/uaccess.h:155 [inline]
  seq_read+0xcb4/0x13d0 fs/seq_file.c:279
  proc_reg_read+0xef/0x170 fs/proc/inode.c:217
  do_loop_readv_writev fs/read_write.c:673 [inline]
  do_iter_read+0x3db/0x5b0 fs/read_write.c:897
  compat_readv+0x1bf/0x270 fs/read_write.c:1140
  do_compat_preadv64+0xdc/0x100 fs/read_write.c:1189
  C_SYSC_preadv fs/read_write.c:1209 [inline]
  compat_SyS_preadv+0x3b/0x50 fs/read_write.c:1203
  do_syscall_32_irqs_on arch/x86/entry/common.c:327 [inline]
  do_fast_syscall_32+0x3ee/0xf9d arch/x86/entry/common.c:389
  entry_SYSENTER_compat+0x51/0x60 arch/x86/entry/entry_64_compat.S:125
 RIP: 0023:0xf7f73c79
 RSP: 002b:00000000e574a15c EFLAGS: 00000292 ORIG_RAX: 000000000000014d
 RAX: ffffffffffffffda RBX: 000000000000000f RCX: 0000000020a3afb0
 RDX: 0000000000000001 RSI: 0000000000000067 RDI: 0000000000000000
 RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
 R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
 R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
 WARNING: CPU: 1 PID: 3195 at lib/usercopy.c:26 _copy_to_user+0xb5/0xc0
 lib/usercopy.c:26

Reported-by: syzbot <bot+eceb3204562c41a438fa1f2335e0fe4f6886d669@syzkaller.appspotmail.com>
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv6/ip6mr.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
index 1c4db0fe7f88..672dd08dc3dd 100644
--- a/net/ipv6/ip6mr.c
+++ b/net/ipv6/ip6mr.c
@@ -496,6 +496,7 @@ static void *ipmr_mfc_seq_start(struct seq_file *seq, loff_t *pos)
 		return ERR_PTR(-ENOENT);
 
 	it->mrt = mrt;
+	it->cache = NULL;
 	return *pos ? ipmr_mfc_seq_idx(net, seq->private, *pos - 1)
 		: SEQ_START_TOKEN;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net: igmp: add a missing rcu locking section
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (306 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] ip6mr: fix stale iterator Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] qlcnic: fix deadlock bug Sasha Levin
                   ` (208 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Dumazet, David S . Miller, Sasha Levin

From: Eric Dumazet <edumazet@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e7aadb27a5415e8125834b84a74477bfbee4eff5 ]

Newly added igmpv3_get_srcaddr() needs to be called under rcu lock.

Timer callbacks do not ensure this locking.

=============================
WARNING: suspicious RCU usage
4.15.0+ #200 Not tainted
-----------------------------
./include/linux/inetdevice.h:216 suspicious rcu_dereference_check() usage!

other info that might help us debug this:

rcu_scheduler_active = 2, debug_locks = 1
3 locks held by syzkaller616973/4074:
 #0:  (&mm->mmap_sem){++++}, at: [<00000000bfce669e>] __do_page_fault+0x32d/0xc90 arch/x86/mm/fault.c:1355
 #1:  ((&im->timer)){+.-.}, at: [<00000000619d2f71>] lockdep_copy_map include/linux/lockdep.h:178 [inline]
 #1:  ((&im->timer)){+.-.}, at: [<00000000619d2f71>] call_timer_fn+0x1c6/0x820 kernel/time/timer.c:1316
 #2:  (&(&im->lock)->rlock){+.-.}, at: [<000000005f833c5c>] spin_lock_bh include/linux/spinlock.h:315 [inline]
 #2:  (&(&im->lock)->rlock){+.-.}, at: [<000000005f833c5c>] igmpv3_send_report+0x98/0x5b0 net/ipv4/igmp.c:600

stack backtrace:
CPU: 0 PID: 4074 Comm: syzkaller616973 Not tainted 4.15.0+ #200
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
 <IRQ>
 __dump_stack lib/dump_stack.c:17 [inline]
 dump_stack+0x194/0x257 lib/dump_stack.c:53
 lockdep_rcu_suspicious+0x123/0x170 kernel/locking/lockdep.c:4592
 __in_dev_get_rcu include/linux/inetdevice.h:216 [inline]
 igmpv3_get_srcaddr net/ipv4/igmp.c:329 [inline]
 igmpv3_newpack+0xeef/0x12e0 net/ipv4/igmp.c:389
 add_grhead.isra.27+0x235/0x300 net/ipv4/igmp.c:432
 add_grec+0xbd3/0x1170 net/ipv4/igmp.c:565
 igmpv3_send_report+0xd5/0x5b0 net/ipv4/igmp.c:605
 igmp_send_report+0xc43/0x1050 net/ipv4/igmp.c:722
 igmp_timer_expire+0x322/0x5c0 net/ipv4/igmp.c:831
 call_timer_fn+0x228/0x820 kernel/time/timer.c:1326
 expire_timers kernel/time/timer.c:1363 [inline]
 __run_timers+0x7ee/0xb70 kernel/time/timer.c:1666
 run_timer_softirq+0x4c/0x70 kernel/time/timer.c:1692
 __do_softirq+0x2d7/0xb85 kernel/softirq.c:285
 invoke_softirq kernel/softirq.c:365 [inline]
 irq_exit+0x1cc/0x200 kernel/softirq.c:405
 exiting_irq arch/x86/include/asm/apic.h:541 [inline]
 smp_apic_timer_interrupt+0x16b/0x700 arch/x86/kernel/apic/apic.c:1052
 apic_timer_interrupt+0xa9/0xb0 arch/x86/entry/entry_64.S:938

Fixes: a46182b00290 ("net: igmp: Use correct source address on IGMPv3 reports")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>

Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv4/igmp.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
index 7d8121acac74..c17485bcb18a 100644
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
@@ -384,7 +384,11 @@ static struct sk_buff *igmpv3_newpack(struct net_device *dev, unsigned int mtu)
 	pip->frag_off = htons(IP_DF);
 	pip->ttl      = 1;
 	pip->daddr    = fl4.daddr;
+
+	rcu_read_lock();
 	pip->saddr    = igmpv3_get_srcaddr(dev, &fl4);
+	rcu_read_unlock();
+
 	pip->protocol = IPPROTO_IGMP;
 	pip->tot_len  = 0;	/* filled in later */
 	ip_select_ident(net, skb, NULL);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] qlcnic: fix deadlock bug
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (307 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] net: igmp: add a missing rcu locking section Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] r8169: fix RTL8168EP take too long to complete driver initialization Sasha Levin
                   ` (207 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Junxiao Bi, David S . Miller, Sasha Levin

From: Junxiao Bi <junxiao.bi@oracle.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 233ac3891607f501f08879134d623b303838f478 ]

The following soft lockup was caught. This is a deadlock caused by
recusive locking.

Process kworker/u40:1:28016 was holding spin lock "mbx->queue_lock" in
qlcnic_83xx_mailbox_worker(), while a softirq came in and ask the same spin
lock in qlcnic_83xx_enqueue_mbx_cmd(). This lock should be hold by disable
bh..

[161846.962125] NMI watchdog: BUG: soft lockup - CPU#1 stuck for 22s! [kworker/u40:1:28016]
[161846.962367] Modules linked in: tun ocfs2 xen_netback xen_blkback xen_gntalloc xen_gntdev xen_evtchn xenfs xen_privcmd autofs4 ocfs2_dlmfs ocfs2_stack_o2cb ocfs2_dlm ocfs2_nodemanager ocfs2_stackglue configfs bnx2fc fcoe libfcoe libfc sunrpc 8021q mrp garp bridge stp llc bonding dm_round_robin dm_multipath iTCO_wdt iTCO_vendor_support pcspkr sb_edac edac_core i2c_i801 shpchp lpc_ich mfd_core ioatdma ipmi_devintf ipmi_si ipmi_msghandler sg ext4 jbd2 mbcache2 sr_mod cdrom sd_mod igb i2c_algo_bit i2c_core ahci libahci megaraid_sas ixgbe dca ptp pps_core vxlan udp_tunnel ip6_udp_tunnel qla2xxx scsi_transport_fc qlcnic crc32c_intel be2iscsi bnx2i cnic uio cxgb4i cxgb4 cxgb3i libcxgbi ipv6 cxgb3 mdio libiscsi_tcp qla4xxx iscsi_boot_sysfs libiscsi scsi_transport_iscsi dm_mirror dm_region_hash dm_log dm_mod
[161846.962454]
[161846.962460] CPU: 1 PID: 28016 Comm: kworker/u40:1 Not tainted 4.1.12-94.5.9.el6uek.x86_64 #2
[161846.962463] Hardware name: Oracle Corporation SUN SERVER X4-2L      /ASSY,MB,X4-2L         , BIOS 26050100 09/19/2017
[161846.962489] Workqueue: qlcnic_mailbox qlcnic_83xx_mailbox_worker [qlcnic]
[161846.962493] task: ffff8801f2e34600 ti: ffff88004ca5c000 task.ti: ffff88004ca5c000
[161846.962496] RIP: e030:[<ffffffff810013aa>]  [<ffffffff810013aa>] xen_hypercall_sched_op+0xa/0x20
[161846.962506] RSP: e02b:ffff880202e43388  EFLAGS: 00000206
[161846.962509] RAX: 0000000000000000 RBX: ffff8801f6996b70 RCX: ffffffff810013aa
[161846.962511] RDX: ffff880202e433cc RSI: ffff880202e433b0 RDI: 0000000000000003
[161846.962513] RBP: ffff880202e433d0 R08: 0000000000000000 R09: ffff8801fe893200
[161846.962516] R10: ffff8801fe400538 R11: 0000000000000206 R12: ffff880202e4b000
[161846.962518] R13: 0000000000000050 R14: 0000000000000001 R15: 000000000000020d
[161846.962528] FS:  0000000000000000(0000) GS:ffff880202e40000(0000) knlGS:ffff880202e40000
[161846.962531] CS:  e033 DS: 0000 ES: 0000 CR0: 0000000080050033
[161846.962533] CR2: 0000000002612640 CR3: 00000001bb796000 CR4: 0000000000042660
[161846.962536] Stack:
[161846.962538]  ffff880202e43608 0000000000000000 ffffffff813f0442 ffff880202e433b0
[161846.962543]  0000000000000000 ffff880202e433cc ffffffff00000001 0000000000000000
[161846.962547]  00000009813f03d6 ffff880202e433e0 ffffffff813f0460 ffff880202e43440
[161846.962552] Call Trace:
[161846.962555]  <IRQ>
[161846.962565]  [<ffffffff813f0442>] ? xen_poll_irq_timeout+0x42/0x50
[161846.962570]  [<ffffffff813f0460>] xen_poll_irq+0x10/0x20
[161846.962578]  [<ffffffff81014222>] xen_lock_spinning+0xe2/0x110
[161846.962583]  [<ffffffff81013f01>] __raw_callee_save_xen_lock_spinning+0x11/0x20
[161846.962592]  [<ffffffff816e5c57>] ? _raw_spin_lock+0x57/0x80
[161846.962609]  [<ffffffffa028acfc>] qlcnic_83xx_enqueue_mbx_cmd+0x7c/0xe0 [qlcnic]
[161846.962623]  [<ffffffffa028e008>] qlcnic_83xx_issue_cmd+0x58/0x210 [qlcnic]
[161846.962636]  [<ffffffffa028caf2>] qlcnic_83xx_sre_macaddr_change+0x162/0x1d0 [qlcnic]
[161846.962649]  [<ffffffffa028cb8b>] qlcnic_83xx_change_l2_filter+0x2b/0x30 [qlcnic]
[161846.962657]  [<ffffffff8160248b>] ? __skb_flow_dissect+0x18b/0x650
[161846.962670]  [<ffffffffa02856e5>] qlcnic_send_filter+0x205/0x250 [qlcnic]
[161846.962682]  [<ffffffffa0285c77>] qlcnic_xmit_frame+0x547/0x7b0 [qlcnic]
[161846.962691]  [<ffffffff8160ac22>] xmit_one+0x82/0x1a0
[161846.962696]  [<ffffffff8160ad90>] dev_hard_start_xmit+0x50/0xa0
[161846.962701]  [<ffffffff81630112>] sch_direct_xmit+0x112/0x220
[161846.962706]  [<ffffffff8160b80f>] __dev_queue_xmit+0x1df/0x5e0
[161846.962710]  [<ffffffff8160bc33>] dev_queue_xmit_sk+0x13/0x20
[161846.962721]  [<ffffffffa0575bd5>] bond_dev_queue_xmit+0x35/0x80 [bonding]
[161846.962729]  [<ffffffffa05769fb>] __bond_start_xmit+0x1cb/0x210 [bonding]
[161846.962736]  [<ffffffffa0576a71>] bond_start_xmit+0x31/0x60 [bonding]
[161846.962740]  [<ffffffff8160ac22>] xmit_one+0x82/0x1a0
[161846.962745]  [<ffffffff8160ad90>] dev_hard_start_xmit+0x50/0xa0
[161846.962749]  [<ffffffff8160bb1e>] __dev_queue_xmit+0x4ee/0x5e0
[161846.962754]  [<ffffffff8160bc33>] dev_queue_xmit_sk+0x13/0x20
[161846.962760]  [<ffffffffa05cfa72>] vlan_dev_hard_start_xmit+0xb2/0x150 [8021q]
[161846.962764]  [<ffffffff8160ac22>] xmit_one+0x82/0x1a0
[161846.962769]  [<ffffffff8160ad90>] dev_hard_start_xmit+0x50/0xa0
[161846.962773]  [<ffffffff8160bb1e>] __dev_queue_xmit+0x4ee/0x5e0
[161846.962777]  [<ffffffff8160bc33>] dev_queue_xmit_sk+0x13/0x20
[161846.962789]  [<ffffffffa05adf74>] br_dev_queue_push_xmit+0x54/0xa0 [bridge]
[161846.962797]  [<ffffffffa05ae4ff>] br_forward_finish+0x2f/0x90 [bridge]
[161846.962807]  [<ffffffff810b0dad>] ? ttwu_do_wakeup+0x1d/0x100
[161846.962811]  [<ffffffff815f929b>] ? __alloc_skb+0x8b/0x1f0
[161846.962818]  [<ffffffffa05ae04d>] __br_forward+0x8d/0x120 [bridge]
[161846.962822]  [<ffffffff815f613b>] ? __kmalloc_reserve+0x3b/0xa0
[161846.962829]  [<ffffffff810be55e>] ? update_rq_runnable_avg+0xee/0x230
[161846.962836]  [<ffffffffa05ae176>] br_forward+0x96/0xb0 [bridge]
[161846.962845]  [<ffffffffa05af85e>] br_handle_frame_finish+0x1ae/0x420 [bridge]
[161846.962853]  [<ffffffffa05afc4f>] br_handle_frame+0x17f/0x260 [bridge]
[161846.962862]  [<ffffffffa05afad0>] ? br_handle_frame_finish+0x420/0x420 [bridge]
[161846.962867]  [<ffffffff8160d057>] __netif_receive_skb_core+0x1f7/0x870
[161846.962872]  [<ffffffff8160d6f2>] __netif_receive_skb+0x22/0x70
[161846.962877]  [<ffffffff8160d913>] netif_receive_skb_internal+0x23/0x90
[161846.962884]  [<ffffffffa07512ea>] ? xenvif_idx_release+0xea/0x100 [xen_netback]
[161846.962889]  [<ffffffff816e5a10>] ? _raw_spin_unlock_irqrestore+0x20/0x50
[161846.962893]  [<ffffffff8160e624>] netif_receive_skb_sk+0x24/0x90
[161846.962899]  [<ffffffffa075269a>] xenvif_tx_submit+0x2ca/0x3f0 [xen_netback]
[161846.962906]  [<ffffffffa0753f0c>] xenvif_tx_action+0x9c/0xd0 [xen_netback]
[161846.962915]  [<ffffffffa07567f5>] xenvif_poll+0x35/0x70 [xen_netback]
[161846.962920]  [<ffffffff8160e01b>] napi_poll+0xcb/0x1e0
[161846.962925]  [<ffffffff8160e1c0>] net_rx_action+0x90/0x1c0
[161846.962931]  [<ffffffff8108aaba>] __do_softirq+0x10a/0x350
[161846.962938]  [<ffffffff8108ae75>] irq_exit+0x125/0x130
[161846.962943]  [<ffffffff813f03a9>] xen_evtchn_do_upcall+0x39/0x50
[161846.962950]  [<ffffffff816e7ffe>] xen_do_hypervisor_callback+0x1e/0x40
[161846.962952]  <EOI>
[161846.962959]  [<ffffffff816e5c4a>] ? _raw_spin_lock+0x4a/0x80
[161846.962964]  [<ffffffff816e5b1e>] ? _raw_spin_lock_irqsave+0x1e/0xa0
[161846.962978]  [<ffffffffa028e279>] ? qlcnic_83xx_mailbox_worker+0xb9/0x2a0 [qlcnic]
[161846.962991]  [<ffffffff810a14e1>] ? process_one_work+0x151/0x4b0
[161846.962995]  [<ffffffff8100c3f2>] ? check_events+0x12/0x20
[161846.963001]  [<ffffffff810a1960>] ? worker_thread+0x120/0x480
[161846.963005]  [<ffffffff816e187b>] ? __schedule+0x30b/0x890
[161846.963010]  [<ffffffff810a1840>] ? process_one_work+0x4b0/0x4b0
[161846.963015]  [<ffffffff810a1840>] ? process_one_work+0x4b0/0x4b0
[161846.963021]  [<ffffffff810a6b3e>] ? kthread+0xce/0xf0
[161846.963025]  [<ffffffff810a6a70>] ? kthread_freezable_should_stop+0x70/0x70
[161846.963031]  [<ffffffff816e6522>] ? ret_from_fork+0x42/0x70
[161846.963035]  [<ffffffff810a6a70>] ? kthread_freezable_should_stop+0x70/0x70
[161846.963037] Code: cc 51 41 53 b8 1c 00 00 00 0f 05 41 5b 59 c3 cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc 51 41 53 b8 1d 00 00 00 0f 05 <41> 5b 59 c3 cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc

Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
index dd618d7ed257..1c40c524f0c8 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
@@ -3825,7 +3825,7 @@ static void qlcnic_83xx_flush_mbx_queue(struct qlcnic_adapter *adapter)
 	struct list_head *head = &mbx->cmd_q;
 	struct qlcnic_cmd_args *cmd = NULL;
 
-	spin_lock(&mbx->queue_lock);
+	spin_lock_bh(&mbx->queue_lock);
 
 	while (!list_empty(head)) {
 		cmd = list_entry(head->next, struct qlcnic_cmd_args, list);
@@ -3836,7 +3836,7 @@ static void qlcnic_83xx_flush_mbx_queue(struct qlcnic_adapter *adapter)
 		qlcnic_83xx_notify_cmd_completion(adapter, cmd);
 	}
 
-	spin_unlock(&mbx->queue_lock);
+	spin_unlock_bh(&mbx->queue_lock);
 }
 
 static int qlcnic_83xx_check_mbx_status(struct qlcnic_adapter *adapter)
@@ -3872,12 +3872,12 @@ static void qlcnic_83xx_dequeue_mbx_cmd(struct qlcnic_adapter *adapter,
 {
 	struct qlcnic_mailbox *mbx = adapter->ahw->mailbox;
 
-	spin_lock(&mbx->queue_lock);
+	spin_lock_bh(&mbx->queue_lock);
 
 	list_del(&cmd->list);
 	mbx->num_cmds--;
 
-	spin_unlock(&mbx->queue_lock);
+	spin_unlock_bh(&mbx->queue_lock);
 
 	qlcnic_83xx_notify_cmd_completion(adapter, cmd);
 }
@@ -3942,7 +3942,7 @@ static int qlcnic_83xx_enqueue_mbx_cmd(struct qlcnic_adapter *adapter,
 		init_completion(&cmd->completion);
 		cmd->rsp_opcode = QLC_83XX_MBX_RESPONSE_UNKNOWN;
 
-		spin_lock(&mbx->queue_lock);
+		spin_lock_bh(&mbx->queue_lock);
 
 		list_add_tail(&cmd->list, &mbx->cmd_q);
 		mbx->num_cmds++;
@@ -3950,7 +3950,7 @@ static int qlcnic_83xx_enqueue_mbx_cmd(struct qlcnic_adapter *adapter,
 		*timeout = cmd->total_cmds * QLC_83XX_MBX_TIMEOUT;
 		queue_work(mbx->work_q, &mbx->work);
 
-		spin_unlock(&mbx->queue_lock);
+		spin_unlock_bh(&mbx->queue_lock);
 
 		return 0;
 	}
@@ -4046,15 +4046,15 @@ static void qlcnic_83xx_mailbox_worker(struct work_struct *work)
 		mbx->rsp_status = QLC_83XX_MBX_RESPONSE_WAIT;
 		spin_unlock_irqrestore(&mbx->aen_lock, flags);
 
-		spin_lock(&mbx->queue_lock);
+		spin_lock_bh(&mbx->queue_lock);
 
 		if (list_empty(head)) {
-			spin_unlock(&mbx->queue_lock);
+			spin_unlock_bh(&mbx->queue_lock);
 			return;
 		}
 		cmd = list_entry(head->next, struct qlcnic_cmd_args, list);
 
-		spin_unlock(&mbx->queue_lock);
+		spin_unlock_bh(&mbx->queue_lock);
 
 		mbx_ops->encode_cmd(adapter, cmd);
 		mbx_ops->nofity_fw(adapter, QLC_83XX_MBX_REQUEST);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] tcp: release sk_frag.page in tcp_disconnect
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (309 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] r8169: fix RTL8168EP take too long to complete driver initialization Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] vhost_net: stop device during reset owner Sasha Levin
                   ` (205 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Li RongQing, David S . Miller, Sasha Levin

From: Li RongQing <lirongqing@baidu.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9b42d55a66d388e4dd5550107df051a9637564fc ]

socket can be disconnected and gets transformed back to a listening
socket, if sk_frag.page is not released, which will be cloned into
a new socket by sk_clone_lock, but the reference count of this page
is increased, lead to a use after free or double free issue

Signed-off-by: Li RongQing <lirongqing@baidu.com>
Cc: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv4/tcp.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 6c9c147a5fff..94a4b28e5da6 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -2235,6 +2235,12 @@ int tcp_disconnect(struct sock *sk, int flags)
 
 	WARN_ON(inet->inet_num && !icsk->icsk_bind_hash);
 
+	if (sk->sk_frag.page) {
+		put_page(sk->sk_frag.page);
+		sk->sk_frag.page = NULL;
+		sk->sk_frag.offset = 0;
+	}
+
 	sk->sk_error_report(sk);
 	return err;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] r8169: fix RTL8168EP take too long to complete driver initialization.
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (308 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] qlcnic: fix deadlock bug Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] tcp: release sk_frag.page in tcp_disconnect Sasha Levin
                   ` (206 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: hau, David S . Miller, Sasha Levin

From: Chunhao Lin <hau@realtek.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 086ca23d03c0d2f4088f472386778d293e15c5f6 ]

Driver check the wrong register bit in rtl_ocp_tx_cond() that keep driver
waiting until timeout.

Fix this by waiting for the right register bit.

Signed-off-by: Chunhao Lin <hau@realtek.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/realtek/r8169.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index af4b1f4c24d2..8004de976890 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -1375,7 +1375,7 @@ DECLARE_RTL_COND(rtl_ocp_tx_cond)
 {
 	void __iomem *ioaddr = tp->mmio_addr;
 
-	return RTL_R8(IBISR0) & 0x02;
+	return RTL_R8(IBISR0) & 0x20;
 }
 
 static void rtl8168ep_stop_cmac(struct rtl8169_private *tp)
@@ -1383,7 +1383,7 @@ static void rtl8168ep_stop_cmac(struct rtl8169_private *tp)
 	void __iomem *ioaddr = tp->mmio_addr;
 
 	RTL_W8(IBCR2, RTL_R8(IBCR2) & ~0x01);
-	rtl_msleep_loop_wait_low(tp, &rtl_ocp_tx_cond, 50, 2000);
+	rtl_msleep_loop_wait_high(tp, &rtl_ocp_tx_cond, 50, 2000);
 	RTL_W8(IBISR0, RTL_R8(IBISR0) | 0x20);
 	RTL_W8(IBCR0, RTL_R8(IBCR0) & ~0x01);
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] vhost_net: stop device during reset owner
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (310 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] tcp: release sk_frag.page in tcp_disconnect Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] media: soc_camera: soc_scale_crop: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE Sasha Levin
                   ` (204 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jason Wang, David S . Miller, Sasha Levin

From: Jason Wang <jasowang@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4cd879515d686849eec5f718aeac62a70b067d82 ]

We don't stop device before reset owner, this means we could try to
serve any virtqueue kick before reset dev->worker. This will result a
warn since the work was pending at llist during owner resetting. Fix
this by stopping device during owner reset.

Reported-by: syzbot+eb17c6162478cc50632c@syzkaller.appspotmail.com
Fixes: 3a4d5c94e9593 ("vhost_net: a kernel-level virtio server")
Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/vhost/net.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index 7d137a43cc86..14265c4c0203 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -982,6 +982,7 @@ static long vhost_net_reset_owner(struct vhost_net *n)
 	}
 	vhost_net_stop(n, &tx_sock, &rx_sock);
 	vhost_net_flush(n);
+	vhost_dev_stop(&n->dev);
 	vhost_dev_reset_owner(&n->dev, memory);
 	vhost_net_vq_reset(n);
 done:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] media: soc_camera: soc_scale_crop: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (311 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] vhost_net: stop device during reset owner Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] KEYS: encrypted: fix buffer overread in valid_master_desc() Sasha Levin
                   ` (203 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Jesse Chan, Hans Verkuil, Mauro Carvalho Chehab, Sasha Levin

From: Jesse Chan <jc@linux.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5331aec1bf9c9da557668174e0a4bfcee39f1121 ]

This change resolves a new compile-time warning
when built as a loadable module:

WARNING: modpost: missing MODULE_LICENSE() in drivers/media/platform/soc_camera/soc_scale_crop.o
see include/linux/module.h for more information

This adds the license as "GPL", which matches the header of the file.

MODULE_DESCRIPTION and MODULE_AUTHOR are also added.

Signed-off-by: Jesse Chan <jc@linux.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/platform/soc_camera/soc_scale_crop.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/media/platform/soc_camera/soc_scale_crop.c b/drivers/media/platform/soc_camera/soc_scale_crop.c
index 8e74fb7f2a07..2d673516a614 100644
--- a/drivers/media/platform/soc_camera/soc_scale_crop.c
+++ b/drivers/media/platform/soc_camera/soc_scale_crop.c
@@ -400,3 +400,7 @@ void soc_camera_calc_client_output(struct soc_camera_device *icd,
 	mf->height = soc_camera_shift_scale(rect->height, shift, scale_v);
 }
 EXPORT_SYMBOL(soc_camera_calc_client_output);
+
+MODULE_DESCRIPTION("soc-camera scaling-cropping functions");
+MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
+MODULE_LICENSE("GPL");
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] KEYS: encrypted: fix buffer overread in valid_master_desc()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (312 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] media: soc_camera: soc_scale_crop: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] cifs: Fix autonegotiate security settings mismatch Sasha Levin
                   ` (202 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Eric Biggers, David Howells, James Morris, Sasha Levin

From: Eric Biggers <ebiggers@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 794b4bc292f5d31739d89c0202c54e7dc9bc3add ]

With the 'encrypted' key type it was possible for userspace to provide a
data blob ending with a master key description shorter than expected,
e.g. 'keyctl add encrypted desc "new x" @s'.  When validating such a
master key description, validate_master_desc() could read beyond the end
of the buffer.  Fix this by using strncmp() instead of memcmp().  [Also
clean up the code to deduplicate some logic.]

Cc: Mimi Zohar <zohar@linux.vnet.ibm.com>
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: James Morris <james.l.morris@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 security/keys/encrypted-keys/encrypted.c | 31 +++++++++++++++----------------
 1 file changed, 15 insertions(+), 16 deletions(-)

diff --git a/security/keys/encrypted-keys/encrypted.c b/security/keys/encrypted-keys/encrypted.c
index 89d5695c51cd..20251ee5c491 100644
--- a/security/keys/encrypted-keys/encrypted.c
+++ b/security/keys/encrypted-keys/encrypted.c
@@ -141,23 +141,22 @@ static int valid_ecryptfs_desc(const char *ecryptfs_desc)
  */
 static int valid_master_desc(const char *new_desc, const char *orig_desc)
 {
-	if (!memcmp(new_desc, KEY_TRUSTED_PREFIX, KEY_TRUSTED_PREFIX_LEN)) {
-		if (strlen(new_desc) == KEY_TRUSTED_PREFIX_LEN)
-			goto out;
-		if (orig_desc)
-			if (memcmp(new_desc, orig_desc, KEY_TRUSTED_PREFIX_LEN))
-				goto out;
-	} else if (!memcmp(new_desc, KEY_USER_PREFIX, KEY_USER_PREFIX_LEN)) {
-		if (strlen(new_desc) == KEY_USER_PREFIX_LEN)
-			goto out;
-		if (orig_desc)
-			if (memcmp(new_desc, orig_desc, KEY_USER_PREFIX_LEN))
-				goto out;
-	} else
-		goto out;
+	int prefix_len;
+
+	if (!strncmp(new_desc, KEY_TRUSTED_PREFIX, KEY_TRUSTED_PREFIX_LEN))
+		prefix_len = KEY_TRUSTED_PREFIX_LEN;
+	else if (!strncmp(new_desc, KEY_USER_PREFIX, KEY_USER_PREFIX_LEN))
+		prefix_len = KEY_USER_PREFIX_LEN;
+	else
+		return -EINVAL;
+
+	if (!new_desc[prefix_len])
+		return -EINVAL;
+
+	if (orig_desc && strncmp(new_desc, orig_desc, prefix_len))
+		return -EINVAL;
+
 	return 0;
-out:
-	return -EINVAL;
 }
 
 /*
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] cifs: Fix autonegotiate security settings mismatch
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (313 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] KEYS: encrypted: fix buffer overread in valid_master_desc() Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] cifs: Fix missing put_xid in cifs_file_strict_mmap Sasha Levin
                   ` (201 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Daniel N Pettersson, Steve French, Sasha Levin

From: Daniel N Pettersson <danielnp@axis.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9aca7e454415f7878b28524e76bebe1170911a88 ]

Autonegotiation gives a security settings mismatch error if the SMB
server selects an SMBv3 dialect that isn't SMB3.02. The exact error is
"protocol revalidation - security settings mismatch".
This can be tested using Samba v4.2 or by setting the global Samba
setting max protocol = SMB3_00.

The check that fails in smb3_validate_negotiate is the dialect
verification of the negotiate info response. This is because it tries
to verify against the protocol_id in the global smbdefault_values. The
protocol_id in smbdefault_values is SMB3.02.
In SMB2_negotiate the protocol_id in smbdefault_values isn't updated,
it is global so it probably shouldn't be, but server->dialect is.

This patch changes the check in smb3_validate_negotiate to use
server->dialect instead of server->vals->protocol_id. The patch works
with autonegotiate and when using a specific version in the vers mount
option.

Signed-off-by: Daniel N Pettersson <danielnp@axis.com>
Signed-off-by: Steve French <smfrench@gmail.com>
CC: Stable <stable@vger.kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/cifs/smb2pdu.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
index 0cf4a76e8e94..69422157c71b 100644
--- a/fs/cifs/smb2pdu.c
+++ b/fs/cifs/smb2pdu.c
@@ -507,8 +507,7 @@ int smb3_validate_negotiate(const unsigned int xid, struct cifs_tcon *tcon)
 	}
 
 	/* check validate negotiate info response matches what we got earlier */
-	if (pneg_rsp->Dialect !=
-			cpu_to_le16(tcon->ses->server->vals->protocol_id))
+	if (pneg_rsp->Dialect != cpu_to_le16(tcon->ses->server->dialect))
 		goto vneg_out;
 
 	if (pneg_rsp->SecurityMode != cpu_to_le16(tcon->ses->server->sec_mode))
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] cifs: Fix missing put_xid in cifs_file_strict_mmap
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (314 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] cifs: Fix autonegotiate security settings mismatch Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] dmaengine: dmatest: fix container_of member in dmatest_callback Sasha Levin
                   ` (200 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Matthew Wilcox, Steve French, Sasha Levin

From: Matthew Wilcox <mawilcox@microsoft.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f04a703c3d613845ae3141bfaf223489de8ab3eb ]

If cifs_zap_mapping() returned an error, we would return without putting
the xid that we got earlier.  Restructure cifs_file_strict_mmap() and
cifs_file_mmap() to be more similar to each other and have a single
point of return that always puts the xid.

Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
Signed-off-by: Steve French <smfrench@gmail.com>
CC: Stable <stable@vger.kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/cifs/file.c | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index 47e04038a846..1366d2151389 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -3231,20 +3231,18 @@ static struct vm_operations_struct cifs_file_vm_ops = {
 
 int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma)
 {
-	int rc, xid;
+	int xid, rc = 0;
 	struct inode *inode = file_inode(file);
 
 	xid = get_xid();
 
-	if (!CIFS_CACHE_READ(CIFS_I(inode))) {
+	if (!CIFS_CACHE_READ(CIFS_I(inode)))
 		rc = cifs_zap_mapping(inode);
-		if (rc)
-			return rc;
-	}
-
-	rc = generic_file_mmap(file, vma);
-	if (rc == 0)
+	if (!rc)
+		rc = generic_file_mmap(file, vma);
+	if (!rc)
 		vma->vm_ops = &cifs_file_vm_ops;
+
 	free_xid(xid);
 	return rc;
 }
@@ -3254,16 +3252,16 @@ int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
 	int rc, xid;
 
 	xid = get_xid();
+
 	rc = cifs_revalidate_file(file);
-	if (rc) {
+	if (rc)
 		cifs_dbg(FYI, "Validation prior to mmap failed, error=%d\n",
 			 rc);
-		free_xid(xid);
-		return rc;
-	}
-	rc = generic_file_mmap(file, vma);
-	if (rc == 0)
+	if (!rc)
+		rc = generic_file_mmap(file, vma);
+	if (!rc)
 		vma->vm_ops = &cifs_file_vm_ops;
+
 	free_xid(xid);
 	return rc;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] dmaengine: dmatest: fix container_of member in dmatest_callback
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (315 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] cifs: Fix missing put_xid in cifs_file_strict_mmap Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] CIFS: zero sensitive data when freeing Sasha Levin
                   ` (199 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Yang Shunyong, Vinod Koul, Sasha Levin

From: Yang Shunyong <shunyong.yang@hxt-semitech.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 66b3bd2356e0a1531c71a3dcf96944621e25c17c ]

The type of arg passed to dmatest_callback is struct dmatest_done.
It refers to test_done in struct dmatest_thread, not done_wait.

Fixes: 6f6a23a213be ("dmaengine: dmatest: move callback wait ...")
Signed-off-by: Yang Shunyong <shunyong.yang@hxt-semitech.com>
Acked-by: Adam Wallis <awallis@codeaurora.org>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/dma/dmatest.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
index 2e9bc49d30ec..5e4fe755a4d8 100644
--- a/drivers/dma/dmatest.c
+++ b/drivers/dma/dmatest.c
@@ -329,7 +329,7 @@ static void dmatest_callback(void *arg)
 {
 	struct dmatest_done *done = arg;
 	struct dmatest_thread *thread =
-		container_of(arg, struct dmatest_thread, done_wait);
+		container_of(done, struct dmatest_thread, test_done);
 	if (!thread->done) {
 		done->done = true;
 		wake_up_all(done->wait);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] CIFS: zero sensitive data when freeing
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (316 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] dmaengine: dmatest: fix container_of member in dmatest_callback Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] posix-timer: Properly check sigevent->sigev_notify Sasha Levin
                   ` (198 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Aurelien Aptel, Steve French, Sasha Levin

From: Aurelien Aptel <aaptel@suse.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 97f4b7276b829a8927ac903a119bef2f963ccc58 ]

also replaces memset()+kfree() by kzfree().

Signed-off-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Steve French <smfrench@gmail.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/cifs/cifsencrypt.c |  3 +--
 fs/cifs/connect.c     |  6 +++---
 fs/cifs/misc.c        | 14 ++++----------
 3 files changed, 8 insertions(+), 15 deletions(-)

diff --git a/fs/cifs/cifsencrypt.c b/fs/cifs/cifsencrypt.c
index 4acbc390a7d6..1d707a67f8ac 100644
--- a/fs/cifs/cifsencrypt.c
+++ b/fs/cifs/cifsencrypt.c
@@ -306,9 +306,8 @@ int calc_lanman_hash(const char *password, const char *cryptkey, bool encrypt,
 {
 	int i;
 	int rc;
-	char password_with_pad[CIFS_ENCPWD_SIZE];
+	char password_with_pad[CIFS_ENCPWD_SIZE] = {0};
 
-	memset(password_with_pad, 0, CIFS_ENCPWD_SIZE);
 	if (password)
 		strncpy(password_with_pad, password, CIFS_ENCPWD_SIZE);
 
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index a2c100aed4b0..d733df946cc6 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -1635,7 +1635,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
 			tmp_end++;
 			if (!(tmp_end < end && tmp_end[1] == delim)) {
 				/* No it is not. Set the password to NULL */
-				kfree(vol->password);
+				kzfree(vol->password);
 				vol->password = NULL;
 				break;
 			}
@@ -1673,7 +1673,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
 					options = end;
 			}
 
-			kfree(vol->password);
+			kzfree(vol->password);
 			/* Now build new password string */
 			temp_len = strlen(value);
 			vol->password = kzalloc(temp_len+1, GFP_KERNEL);
@@ -4038,7 +4038,7 @@ cifs_construct_tcon(struct cifs_sb_info *cifs_sb, kuid_t fsuid)
 		reset_cifs_unix_caps(0, tcon, NULL, vol_info);
 out:
 	kfree(vol_info->username);
-	kfree(vol_info->password);
+	kzfree(vol_info->password);
 	kfree(vol_info);
 
 	return tcon;
diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c
index 8442b8b8e0be..a9b68cb38c12 100644
--- a/fs/cifs/misc.c
+++ b/fs/cifs/misc.c
@@ -99,14 +99,11 @@ sesInfoFree(struct cifs_ses *buf_to_free)
 	kfree(buf_to_free->serverOS);
 	kfree(buf_to_free->serverDomain);
 	kfree(buf_to_free->serverNOS);
-	if (buf_to_free->password) {
-		memset(buf_to_free->password, 0, strlen(buf_to_free->password));
-		kfree(buf_to_free->password);
-	}
+	kzfree(buf_to_free->password);
 	kfree(buf_to_free->user_name);
 	kfree(buf_to_free->domainName);
-	kfree(buf_to_free->auth_key.response);
-	kfree(buf_to_free);
+	kzfree(buf_to_free->auth_key.response);
+	kzfree(buf_to_free);
 }
 
 struct cifs_tcon *
@@ -136,10 +133,7 @@ tconInfoFree(struct cifs_tcon *buf_to_free)
 	}
 	atomic_dec(&tconInfoAllocCount);
 	kfree(buf_to_free->nativeFileSystem);
-	if (buf_to_free->password) {
-		memset(buf_to_free->password, 0, strlen(buf_to_free->password));
-		kfree(buf_to_free->password);
-	}
+	kzfree(buf_to_free->password);
 	kfree(buf_to_free);
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] posix-timer: Properly check sigevent->sigev_notify
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (317 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] CIFS: zero sensitive data when freeing Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] dccp: CVE-2017-8824: use-after-free in DCCP code Sasha Levin
                   ` (197 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Thomas Gleixner, Sasha Levin

From: Thomas Gleixner <tglx@linutronix.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit cef31d9af908243421258f1df35a4a644604efbe ]

timer_create() specifies via sigevent->sigev_notify the signal delivery for
the new timer. The valid modes are SIGEV_NONE, SIGEV_SIGNAL, SIGEV_THREAD
and (SIGEV_SIGNAL | SIGEV_THREAD_ID).

The sanity check in good_sigevent() is only checking the valid combination
for the SIGEV_THREAD_ID bit, i.e. SIGEV_SIGNAL, but if SIGEV_THREAD_ID is
not set it accepts any random value.

This has no real effects on the posix timer and signal delivery code, but
it affects show_timer() which handles the output of /proc/$PID/timers. That
function uses a string array to pretty print sigev_notify. The access to
that array has no bound checks, so random sigev_notify cause access beyond
the array bounds.

Add proper checks for the valid notify modes and remove the SIGEV_THREAD_ID
masking from various code pathes as SIGEV_NONE can never be set in
combination with SIGEV_THREAD_ID.

Reported-by: Eric Biggers <ebiggers3@gmail.com>
Reported-by: Dmitry Vyukov <dvyukov@google.com>
Reported-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: John Stultz <john.stultz@linaro.org>
Cc: stable@vger.kernel.org
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/time/posix-timers.c | 34 +++++++++++++++++++---------------
 1 file changed, 19 insertions(+), 15 deletions(-)

diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
index 31ea01f42e1f..2cca2e79c643 100644
--- a/kernel/time/posix-timers.c
+++ b/kernel/time/posix-timers.c
@@ -500,17 +500,22 @@ static struct pid *good_sigevent(sigevent_t * event)
 {
 	struct task_struct *rtn = current->group_leader;
 
-	if ((event->sigev_notify & SIGEV_THREAD_ID ) &&
-		(!(rtn = find_task_by_vpid(event->sigev_notify_thread_id)) ||
-		 !same_thread_group(rtn, current) ||
-		 (event->sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_SIGNAL))
+	switch (event->sigev_notify) {
+	case SIGEV_SIGNAL | SIGEV_THREAD_ID:
+		rtn = find_task_by_vpid(event->sigev_notify_thread_id);
+		if (!rtn || !same_thread_group(rtn, current))
+			return NULL;
+		/* FALLTHRU */
+	case SIGEV_SIGNAL:
+	case SIGEV_THREAD:
+		if (event->sigev_signo <= 0 || event->sigev_signo > SIGRTMAX)
+			return NULL;
+		/* FALLTHRU */
+	case SIGEV_NONE:
+		return task_pid(rtn);
+	default:
 		return NULL;
-
-	if (((event->sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_NONE) &&
-	    ((event->sigev_signo <= 0) || (event->sigev_signo > SIGRTMAX)))
-		return NULL;
-
-	return task_pid(rtn);
+	}
 }
 
 void posix_timers_register_clock(const clockid_t clock_id,
@@ -738,8 +743,7 @@ common_timer_get(struct k_itimer *timr, struct itimerspec *cur_setting)
 	/* interval timer ? */
 	if (iv.tv64)
 		cur_setting->it_interval = ktime_to_timespec(iv);
-	else if (!hrtimer_active(timer) &&
-		 (timr->it_sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_NONE)
+	else if (!hrtimer_active(timer) && timr->it_sigev_notify != SIGEV_NONE)
 		return;
 
 	now = timer->base->get_time();
@@ -750,7 +754,7 @@ common_timer_get(struct k_itimer *timr, struct itimerspec *cur_setting)
 	 * expiry is > now.
 	 */
 	if (iv.tv64 && (timr->it_requeue_pending & REQUEUE_PENDING ||
-	    (timr->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE))
+			timr->it_sigev_notify == SIGEV_NONE))
 		timr->it_overrun += (unsigned int) hrtimer_forward(timer, now, iv);
 
 	remaining = ktime_sub(hrtimer_get_expires(timer), now);
@@ -760,7 +764,7 @@ common_timer_get(struct k_itimer *timr, struct itimerspec *cur_setting)
 		 * A single shot SIGEV_NONE timer must return 0, when
 		 * it is expired !
 		 */
-		if ((timr->it_sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_NONE)
+		if (timr->it_sigev_notify != SIGEV_NONE)
 			cur_setting->it_value.tv_nsec = 1;
 	} else
 		cur_setting->it_value = ktime_to_timespec(remaining);
@@ -858,7 +862,7 @@ common_timer_set(struct k_itimer *timr, int flags,
 	timr->it.real.interval = timespec_to_ktime(new_setting->it_interval);
 
 	/* SIGEV_NONE timers are not queued ! See common_timer_get */
-	if (((timr->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE)) {
+	if (timr->it_sigev_notify == SIGEV_NONE) {
 		/* Setup correct expiry time for relative timers */
 		if (mode == HRTIMER_MODE_REL) {
 			hrtimer_add_expires(timer, timer->base->get_time());
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] dccp: CVE-2017-8824: use-after-free in DCCP code
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (318 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] posix-timer: Properly check sigevent->sigev_notify Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:25 ` [added to the 4.1 stable tree] media: dvb-usb-v2: lmedm04: Improve logic checking of warm start Sasha Levin
                   ` (196 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Mohamed Ghannam, David S . Miller, Sasha Levin

From: Mohamed Ghannam <simo.ghannam@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 69c64866ce072dea1d1e59a0d61e0f66c0dffb76 ]

Whenever the sock object is in DCCP_CLOSED state,
dccp_disconnect() must free dccps_hc_tx_ccid and
dccps_hc_rx_ccid and set to NULL.

Signed-off-by: Mohamed Ghannam <simo.ghannam@gmail.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/dccp/proto.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/net/dccp/proto.c b/net/dccp/proto.c
index 522658179cca..a20dc23360f9 100644
--- a/net/dccp/proto.c
+++ b/net/dccp/proto.c
@@ -259,6 +259,7 @@ int dccp_disconnect(struct sock *sk, int flags)
 {
 	struct inet_connection_sock *icsk = inet_csk(sk);
 	struct inet_sock *inet = inet_sk(sk);
+	struct dccp_sock *dp = dccp_sk(sk);
 	int err = 0;
 	const int old_state = sk->sk_state;
 
@@ -278,6 +279,10 @@ int dccp_disconnect(struct sock *sk, int flags)
 		sk->sk_err = ECONNRESET;
 
 	dccp_clear_xmit_timers(sk);
+	ccid_hc_rx_delete(dp->dccps_hc_rx_ccid, sk);
+	ccid_hc_tx_delete(dp->dccps_hc_tx_ccid, sk);
+	dp->dccps_hc_rx_ccid = NULL;
+	dp->dccps_hc_tx_ccid = NULL;
 
 	__skb_queue_purge(&sk->sk_receive_queue);
 	__skb_queue_purge(&sk->sk_write_queue);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] media: dvb-usb-v2: lmedm04: Improve logic checking of warm start
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (319 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] dccp: CVE-2017-8824: use-after-free in DCCP code Sasha Levin
@ 2018-03-01 15:25 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] mtd: cfi: convert inline functions to macros Sasha Levin
                   ` (195 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:25 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Malcolm Priestley, Mauro Carvalho Chehab, Sasha Levin

From: Malcolm Priestley <tvboxspy@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 3d932ee27e852e4904647f15b64dedca51187ad7 ]

Warm start has no check as whether a genuine device has
connected and proceeds to next execution path.

Check device should read 0x47 at offset of 2 on USB descriptor read
and it is the amount requested of 6 bytes.

Fix for
kasan: CONFIG_KASAN_INLINE enabled
kasan: GPF could be caused by NULL-ptr deref or user memory access as

Reported-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/usb/dvb-usb-v2/lmedm04.c | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c
index 5de6f7c04d09..a98cdf8e5ac1 100644
--- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
+++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
@@ -444,18 +444,23 @@ static int lme2510_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid,
 
 static int lme2510_return_status(struct dvb_usb_device *d)
 {
-	int ret = 0;
+	int ret;
 	u8 *data;
 
-	data = kzalloc(10, GFP_KERNEL);
+	data = kzalloc(6, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;
 
-	ret |= usb_control_msg(d->udev, usb_rcvctrlpipe(d->udev, 0),
-			0x06, 0x80, 0x0302, 0x00, data, 0x0006, 200);
-	info("Firmware Status: %x (%x)", ret , data[2]);
+	ret = usb_control_msg(d->udev, usb_rcvctrlpipe(d->udev, 0),
+			      0x06, 0x80, 0x0302, 0x00,
+			      data, 0x6, 200);
+	if (ret != 6)
+		ret = -EINVAL;
+	else
+		ret = data[2];
+
+	info("Firmware Status: %6ph", data);
 
-	ret = (ret < 0) ? -ENODEV : data[2];
 	kfree(data);
 	return ret;
 }
@@ -1150,6 +1155,7 @@ static int lme2510_get_adapter_count(struct dvb_usb_device *d)
 static int lme2510_identify_state(struct dvb_usb_device *d, const char **name)
 {
 	struct lme2510_state *st = d->priv;
+	int status;
 
 	usb_reset_configuration(d->udev);
 
@@ -1158,12 +1164,16 @@ static int lme2510_identify_state(struct dvb_usb_device *d, const char **name)
 
 	st->dvb_usb_lme2510_firmware = dvb_usb_lme2510_firmware;
 
-	if (lme2510_return_status(d) == 0x44) {
+	status = lme2510_return_status(d);
+	if (status == 0x44) {
 		*name = lme_firmware_switch(d, 0);
 		return COLD;
 	}
 
-	return 0;
+	if (status != 0x47)
+		return -EINVAL;
+
+	return WARM;
 }
 
 static int lme2510_get_stream_config(struct dvb_frontend *fe, u8 *ts_type,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mtd: cfi: convert inline functions to macros
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (320 preceding siblings ...)
  2018-03-01 15:25 ` [added to the 4.1 stable tree] media: dvb-usb-v2: lmedm04: Improve logic checking of warm start Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: dvb-usb-v2: lmedm04: move ts2020 attach to dm04_lme2510_tuner Sasha Levin
                   ` (194 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Boris Brezillon, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9e343e87d2c4c707ef8fae2844864d4dde3a2d13 ]

The map_word_() functions, dating back to linux-2.6.8, try to perform
bitwise operations on a 'map_word' structure. This may have worked
with compilers that were current then (gcc-3.4 or earlier), but end
up being rather inefficient on any version I could try now (gcc-4.4 or
higher). Specifically we hit a problem analyzed in gcc PR81715 where we
fail to reuse the stack space for local variables.

This can be seen immediately in the stack consumption for
cfi_staa_erase_varsize() and other functions that (with CONFIG_KASAN)
can be up to 2200 bytes. Changing the inline functions into macros brings
this down to 1280 bytes.  Without KASAN, the same problem exists, but
the stack consumption is lower to start with, my patch shrinks it from
920 to 496 bytes on with arm-linux-gnueabi-gcc-5.4, and saves around
1KB in .text size for cfi_cmdset_0020.c, as it avoids copying map_word
structures for each call to one of these helpers.

With the latest gcc-8 snapshot, the problem is fixed in upstream gcc,
but nobody uses that yet, so we should still work around it in mainline
kernels and probably backport the workaround to stable kernels as well.
We had a couple of other functions that suffered from the same gcc bug,
and all of those had a simpler workaround involving dummy variables
in the inline function. Unfortunately that did not work here, the
macro hack was the best I could come up with.

It would also be helpful to have someone to a little performance testing
on the patch, to see how much it helps in terms of CPU utilitzation.

Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81715
Cc: stable@vger.kernel.org
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/linux/mtd/map.h | 130 +++++++++++++++++++++++-------------------------
 1 file changed, 61 insertions(+), 69 deletions(-)

diff --git a/include/linux/mtd/map.h b/include/linux/mtd/map.h
index dfff2baf836b..0deabc012551 100644
--- a/include/linux/mtd/map.h
+++ b/include/linux/mtd/map.h
@@ -265,75 +265,67 @@ void map_destroy(struct mtd_info *mtd);
 #define INVALIDATE_CACHED_RANGE(map, from, size) \
 	do { if (map->inval_cache) map->inval_cache(map, from, size); } while (0)
 
-
-static inline int map_word_equal(struct map_info *map, map_word val1, map_word val2)
-{
-	int i;
-
-	for (i = 0; i < map_words(map); i++) {
-		if (val1.x[i] != val2.x[i])
-			return 0;
-	}
-
-	return 1;
-}
-
-static inline map_word map_word_and(struct map_info *map, map_word val1, map_word val2)
-{
-	map_word r;
-	int i;
-
-	for (i = 0; i < map_words(map); i++)
-		r.x[i] = val1.x[i] & val2.x[i];
-
-	return r;
-}
-
-static inline map_word map_word_clr(struct map_info *map, map_word val1, map_word val2)
-{
-	map_word r;
-	int i;
-
-	for (i = 0; i < map_words(map); i++)
-		r.x[i] = val1.x[i] & ~val2.x[i];
-
-	return r;
-}
-
-static inline map_word map_word_or(struct map_info *map, map_word val1, map_word val2)
-{
-	map_word r;
-	int i;
-
-	for (i = 0; i < map_words(map); i++)
-		r.x[i] = val1.x[i] | val2.x[i];
-
-	return r;
-}
-
-static inline int map_word_andequal(struct map_info *map, map_word val1, map_word val2, map_word val3)
-{
-	int i;
-
-	for (i = 0; i < map_words(map); i++) {
-		if ((val1.x[i] & val2.x[i]) != val3.x[i])
-			return 0;
-	}
-
-	return 1;
-}
-
-static inline int map_word_bitsset(struct map_info *map, map_word val1, map_word val2)
-{
-	int i;
-
-	for (i = 0; i < map_words(map); i++) {
-		if (val1.x[i] & val2.x[i])
-			return 1;
-	}
-
-	return 0;
-}
+#define map_word_equal(map, val1, val2)					\
+({									\
+	int i, ret = 1;							\
+	for (i = 0; i < map_words(map); i++)				\
+		if ((val1).x[i] != (val2).x[i]) {			\
+			ret = 0;					\
+			break;						\
+		}							\
+	ret;								\
+})
+
+#define map_word_and(map, val1, val2)					\
+({									\
+	map_word r;							\
+	int i;								\
+	for (i = 0; i < map_words(map); i++)				\
+		r.x[i] = (val1).x[i] & (val2).x[i];			\
+	r;								\
+})
+
+#define map_word_clr(map, val1, val2)					\
+({									\
+	map_word r;							\
+	int i;								\
+	for (i = 0; i < map_words(map); i++)				\
+		r.x[i] = (val1).x[i] & ~(val2).x[i];			\
+	r;								\
+})
+
+#define map_word_or(map, val1, val2)					\
+({									\
+	map_word r;							\
+	int i;								\
+	for (i = 0; i < map_words(map); i++)				\
+		r.x[i] = (val1).x[i] | (val2).x[i];			\
+	r;								\
+})
+
+#define map_word_andequal(map, val1, val2, val3)			\
+({									\
+	int i, ret = 1;							\
+	for (i = 0; i < map_words(map); i++) {				\
+		if (((val1).x[i] & (val2).x[i]) != (val2).x[i]) {	\
+			ret = 0;					\
+			break;						\
+		}							\
+	}								\
+	ret;								\
+})
+
+#define map_word_bitsset(map, val1, val2)				\
+({									\
+	int i, ret = 0;							\
+	for (i = 0; i < map_words(map); i++) {				\
+		if ((val1).x[i] & (val2).x[i]) {			\
+			ret = 1;					\
+			break;						\
+		}							\
+	}								\
+	ret;								\
+})
 
 static inline map_word map_word_load(struct map_info *map, const void *ptr)
 {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] media: dvb-usb-v2: lmedm04: move ts2020 attach to dm04_lme2510_tuner
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (321 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] mtd: cfi: convert inline functions to macros Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] mtd: nand: Fix nand_do_read_oob() return value Sasha Levin
                   ` (193 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Malcolm Priestley, Mauro Carvalho Chehab, Sasha Levin

From: Malcolm Priestley <tvboxspy@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7bf7a7116ed313c601307f7e585419369926ab05 ]

When the tuner was split from m88rs2000 the attach function is in wrong
place.

Move to dm04_lme2510_tuner to trap errors on failure and removing
a call to lme_coldreset.

Prevents driver starting up without any tuner connected.

Fixes to trap for ts2020 fail.
LME2510(C): FE Found M88RS2000
ts2020: probe of 0-0060 failed with error -11
...
LME2510(C): TUN Found RS2000 tuner
kasan: CONFIG_KASAN_INLINE enabled
kasan: GPF could be caused by NULL-ptr deref or user memory access
general protection fault: 0000 [#1] PREEMPT SMP KASAN

Reported-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Tested-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/usb/dvb-usb-v2/lmedm04.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c
index a98cdf8e5ac1..7399bd58e286 100644
--- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
+++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
@@ -1034,8 +1034,6 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
 
 		if (adap->fe[0]) {
 			info("FE Found M88RS2000");
-			dvb_attach(ts2020_attach, adap->fe[0], &ts2020_config,
-					&d->i2c_adap);
 			st->i2c_tuner_gate_w = 5;
 			st->i2c_tuner_gate_r = 5;
 			st->i2c_tuner_addr = 0x60;
@@ -1101,17 +1099,18 @@ static int dm04_lme2510_tuner(struct dvb_usb_adapter *adap)
 			ret = st->tuner_config;
 		break;
 	case TUNER_RS2000:
-		ret = st->tuner_config;
+		if (dvb_attach(ts2020_attach, adap->fe[0],
+			       &ts2020_config, &d->i2c_adap))
+			ret = st->tuner_config;
 		break;
 	default:
 		break;
 	}
 
-	if (ret)
+	if (ret) {
 		info("TUN Found %s tuner", tun_msg[ret]);
-	else {
-		info("TUN No tuner found --- resetting device");
-		lme_coldreset(d);
+	} else {
+		info("TUN No tuner found");
 		return -ENODEV;
 	}
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mtd: nand: Fix nand_do_read_oob() return value
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (322 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: dvb-usb-v2: lmedm04: move ts2020 attach to dm04_lme2510_tuner Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] NFS: Add a cond_resched() to nfs_commit_release_pages() Sasha Levin
                   ` (192 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Miquel Raynal, Boris Brezillon, Sasha Levin

From: Miquel Raynal <miquel.raynal@free-electrons.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 87e89ce8d0d14f573c068c61bec2117751fb5103 ]

Starting from commit 041e4575f034 ("mtd: nand: handle ECC errors in
OOB"), nand_do_read_oob() (from the NAND core) did return 0 or a
negative error, and the MTD layer expected it.

However, the trend for the NAND layer is now to return an error or a
positive number of bitflips. Deciding which status to return to the user
belongs to the MTD layer.

Commit e47f68587b82 ("mtd: check for max_bitflips in mtd_read_oob()")
brought this logic to the mtd_read_oob() function while the return value
coming from nand_do_read_oob() (called by the ->_read_oob() hook) was
left unchanged.

Fixes: e47f68587b82 ("mtd: check for max_bitflips in mtd_read_oob()")
Cc: stable@vger.kernel.org
Signed-off-by: Miquel Raynal <miquel.raynal@free-electrons.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/mtd/nand/nand_base.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index f84113fc7cb7..14a5f559e300 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -1889,6 +1889,7 @@ static int nand_write_oob_syndrome(struct mtd_info *mtd,
 static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
 			    struct mtd_oob_ops *ops)
 {
+	unsigned int max_bitflips = 0;
 	int page, realpage, chipnr;
 	struct nand_chip *chip = mtd->priv;
 	struct mtd_ecc_stats stats;
@@ -1949,6 +1950,8 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
 				nand_wait_ready(mtd);
 		}
 
+		max_bitflips = max_t(unsigned int, max_bitflips, ret);
+
 		readlen -= len;
 		if (!readlen)
 			break;
@@ -1974,7 +1977,7 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
 	if (mtd->ecc_stats.failed - stats.failed)
 		return -EBADMSG;
 
-	return  mtd->ecc_stats.corrected - stats.corrected ? -EUCLEAN : 0;
+	return max_bitflips;
 }
 
 /**
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] NFS: Add a cond_resched() to nfs_commit_release_pages()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (323 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] mtd: nand: Fix nand_do_read_oob() return value Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] mtd: nand: sunxi: Fix ECC strength choice Sasha Levin
                   ` (191 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Trond Myklebust, Sasha Levin

From: Trond Myklebust <trond.myklebust@primarydata.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7f1bda447c9bd48b415acedba6b830f61591601f ]

The commit list can get very large, and so we need a cond_resched()
in nfs_commit_release_pages() in order to ensure we don't hog the CPU
for excessive periods of time.

Reported-by: Mike Galbraith <efault@gmx.de>
Cc: stable@vger.kernel.org
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/nfs/write.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index 51af4fff890f..209b39ef69dd 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -1728,6 +1728,8 @@ static void nfs_commit_release_pages(struct nfs_commit_data *data)
 		set_bit(NFS_CONTEXT_RESEND_WRITES, &req->wb_context->flags);
 	next:
 		nfs_unlock_and_release_request(req);
+		/* Latency breaker */
+		cond_resched();
 	}
 	nfss = NFS_SERVER(data->inode);
 	if (atomic_long_read(&nfss->writeback) < NFS_CONGESTION_OFF_THRESH)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mtd: nand: sunxi: Fix ECC strength choice
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (324 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] NFS: Add a cond_resched() to nfs_commit_release_pages() Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] NFS: commit direct writes even if they fail partially Sasha Levin
                   ` (190 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Miquel Raynal, Boris Brezillon, Sasha Levin

From: Miquel Raynal <miquel.raynal@free-electrons.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f4c6cd1a7f2275d5bc0e494b21fff26f8dde80f0 ]

When the requested ECC strength does not exactly match the strengths
supported by the ECC engine, the driver is selecting the closest
strength meeting the 'selected_strength > requested_strength'
constraint. Fix the fact that, in this particular case, ecc->strength
value was not updated to match the 'selected_strength'.

For instance, one can encounter this issue when no ECC requirement is
filled in the device tree while the NAND chip minimum requirement is not
a strength/step_size combo natively supported by the ECC engine.

Fixes: 1fef62c1423b ("mtd: nand: add sunxi NAND flash controller support")
Cc: <stable@vger.kernel.org>
Suggested-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Miquel Raynal <miquel.raynal@free-electrons.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/mtd/nand/sunxi_nand.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
index 499b8e433d3d..1c8fdc3cec93 100644
--- a/drivers/mtd/nand/sunxi_nand.c
+++ b/drivers/mtd/nand/sunxi_nand.c
@@ -933,8 +933,14 @@ static int sunxi_nand_hw_common_ecc_ctrl_init(struct mtd_info *mtd,
 
 	/* Add ECC info retrieval from DT */
 	for (i = 0; i < ARRAY_SIZE(strengths); i++) {
-		if (ecc->strength <= strengths[i])
+		if (ecc->strength <= strengths[i]) {
+			/*
+			 * Update ecc->strength value with the actual strength
+			 * that will be used by the ECC engine.
+			 */
+			ecc->strength = strengths[i];
 			break;
+		}
 	}
 
 	if (i >= ARRAY_SIZE(strengths)) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] NFS: commit direct writes even if they fail partially
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (325 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] mtd: nand: sunxi: Fix ECC strength choice Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] kernfs: fix regression in kernfs_fop_write caused by wrong type Sasha Levin
                   ` (189 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: J. Bruce Fields, Trond Myklebust, Sasha Levin

From: "J. Bruce Fields" <bfields@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1b8d97b0a837beaf48a8449955b52c650a7114b4 ]

If some of the WRITE calls making up an O_DIRECT write syscall fail,
we neglect to commit, even if some of the WRITEs succeed.

We also depend on the commit code to free the reference count on the
nfs_page taken in the "if (request_commit)" case at the end of
nfs_direct_write_completion().  The problem was originally noticed
because ENOSPC's encountered partway through a write would result in a
closed file being sillyrenamed when it should have been unlinked.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/nfs/direct.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
index 38678d9a5cc4..cb050d1e8146 100644
--- a/fs/nfs/direct.c
+++ b/fs/nfs/direct.c
@@ -784,10 +784,8 @@ static void nfs_direct_write_completion(struct nfs_pgio_header *hdr)
 
 	spin_lock(&dreq->lock);
 
-	if (test_bit(NFS_IOHDR_ERROR, &hdr->flags)) {
-		dreq->flags = 0;
+	if (test_bit(NFS_IOHDR_ERROR, &hdr->flags))
 		dreq->error = hdr->error;
-	}
 	if (dreq->error == 0) {
 		nfs_direct_good_bytes(dreq, hdr);
 		if (nfs_write_need_commit(hdr)) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] NFS: reject request for id_legacy key without auxdata
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (327 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] kernfs: fix regression in kernfs_fop_write caused by wrong type Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ahci: Add PCI ids for Intel Bay Trail, Cherry Trail and Apollo Lake AHCI Sasha Levin
                   ` (187 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Biggers, Trond Myklebust, Sasha Levin

From: Eric Biggers <ebiggers@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 49686cbbb3ebafe42e63868222f269d8053ead00 ]

nfs_idmap_legacy_upcall() is supposed to be called with 'aux' pointing
to a 'struct idmap', via the call to request_key_with_auxdata() in
nfs_idmap_request_key().

However it can also be reached via the request_key() system call in
which case 'aux' will be NULL, causing a NULL pointer dereference in
nfs_idmap_prepare_pipe_upcall(), assuming that the key description is
valid enough to get that far.

Fix this by making nfs_idmap_legacy_upcall() negate the key if no
auxdata is provided.

As usual, this bug was found by syzkaller.  A simple reproducer using
the command-line keyctl program is:

    keyctl request2 id_legacy uid:0 '' @s

Fixes: 57e62324e469 ("NFS: Store the legacy idmapper result in the keyring")
Reported-by: syzbot+5dfdbcf7b3eb5912abbb@syzkaller.appspotmail.com
Cc: <stable@vger.kernel.org> # v3.4+
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Trond Myklebust <trondmy@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/nfs/nfs4idmap.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/fs/nfs/nfs4idmap.c b/fs/nfs/nfs4idmap.c
index 2e1737c40a29..27c4970ed32f 100644
--- a/fs/nfs/nfs4idmap.c
+++ b/fs/nfs/nfs4idmap.c
@@ -582,9 +582,13 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
 	struct idmap_msg *im;
 	struct idmap *idmap = (struct idmap *)aux;
 	struct key *key = cons->key;
-	int ret = -ENOMEM;
+	int ret = -ENOKEY;
+
+	if (!aux)
+		goto out1;
 
 	/* msg and im are freed in idmap_pipe_destroy_msg */
+	ret = -ENOMEM;
 	data = kzalloc(sizeof(*data), GFP_KERNEL);
 	if (!data)
 		goto out1;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] kernfs: fix regression in kernfs_fop_write caused by wrong type
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (326 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] NFS: commit direct writes even if they fail partially Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] NFS: reject request for id_legacy key without auxdata Sasha Levin
                   ` (188 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Ivan Vecera, Al Viro, Sasha Levin

From: Ivan Vecera <ivecera@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ba87977a49913129962af8ac35b0e13e0fa4382d ]

Commit b7ce40cff0b9 ("kernfs: cache atomic_write_len in
kernfs_open_file") changes type of local variable 'len' from ssize_t
to size_t. This change caused that the *ppos value is updated also
when the previous write callback failed.

Mentioned snippet:
...
len = ops->write(...); <- return value can be negative
...
if (len > 0)           <- true here in this case
        *ppos += len;
...

Fixes: b7ce40cff0b9 ("kernfs: cache atomic_write_len in kernfs_open_file")
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Ivan Vecera <ivecera@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/kernfs/file.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/kernfs/file.c b/fs/kernfs/file.c
index 9ff28bc294c0..5d084638e1f8 100644
--- a/fs/kernfs/file.c
+++ b/fs/kernfs/file.c
@@ -272,7 +272,7 @@ static ssize_t kernfs_fop_write(struct file *file, const char __user *user_buf,
 {
 	struct kernfs_open_file *of = kernfs_of(file);
 	const struct kernfs_ops *ops;
-	size_t len;
+	ssize_t len;
 	char *buf;
 
 	if (of->atomic_write_len) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ahci: Add Intel Cannon Lake PCH-H PCI ID
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (329 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ahci: Add PCI ids for Intel Bay Trail, Cherry Trail and Apollo Lake AHCI Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] crypto: hash - introduce crypto_hash_alg_has_setkey() Sasha Levin
                   ` (185 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Mika Westerberg, Tejun Heo, Sasha Levin

From: Mika Westerberg <mika.westerberg@linux.intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f919dde0772a894c693a1eeabc77df69d6a9b937 ]

Add Intel Cannon Lake PCH-H PCI ID to the list of supported controllers.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: stable@vger.kernel.org
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/ata/ahci.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index bf63b8bf1e02..3b0cebb2122b 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -388,6 +388,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {
 	{ PCI_VDEVICE(INTEL, 0xa20e), board_ahci }, /* Lewisburg RAID*/
 	{ PCI_VDEVICE(INTEL, 0xa252), board_ahci }, /* Lewisburg RAID*/
 	{ PCI_VDEVICE(INTEL, 0xa256), board_ahci }, /* Lewisburg RAID*/
+	{ PCI_VDEVICE(INTEL, 0xa356), board_ahci }, /* Cannon Lake PCH-H RAID */
 	{ PCI_VDEVICE(INTEL, 0x0f22), board_ahci }, /* Bay Trail AHCI */
 	{ PCI_VDEVICE(INTEL, 0x0f23), board_ahci }, /* Bay Trail AHCI */
 	{ PCI_VDEVICE(INTEL, 0x22a3), board_ahci }, /* Cherry Trail AHCI */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ahci: Add PCI ids for Intel Bay Trail, Cherry Trail and Apollo Lake AHCI
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (328 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] NFS: reject request for id_legacy key without auxdata Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ahci: Add Intel Cannon Lake PCH-H PCI ID Sasha Levin
                   ` (186 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Hans de Goede, Tejun Heo, Sasha Levin

From: Hans de Goede <hdegoede@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 998008b779e424bd7513c434d0ab9c1268459009 ]

Add PCI ids for Intel Bay Trail, Cherry Trail and Apollo Lake AHCI
SATA controllers. This commit is a preparation patch for allowing a
different default sata link powermanagement policy for mobile chipsets.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/ata/ahci.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 34825d63d483..bf63b8bf1e02 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -388,6 +388,10 @@ static const struct pci_device_id ahci_pci_tbl[] = {
 	{ PCI_VDEVICE(INTEL, 0xa20e), board_ahci }, /* Lewisburg RAID*/
 	{ PCI_VDEVICE(INTEL, 0xa252), board_ahci }, /* Lewisburg RAID*/
 	{ PCI_VDEVICE(INTEL, 0xa256), board_ahci }, /* Lewisburg RAID*/
+	{ PCI_VDEVICE(INTEL, 0x0f22), board_ahci }, /* Bay Trail AHCI */
+	{ PCI_VDEVICE(INTEL, 0x0f23), board_ahci }, /* Bay Trail AHCI */
+	{ PCI_VDEVICE(INTEL, 0x22a3), board_ahci }, /* Cherry Trail AHCI */
+	{ PCI_VDEVICE(INTEL, 0x5ae3), board_ahci }, /* Apollo Lake AHCI */
 
 	/* JMicron 360/1/3/5/6, match class to avoid IDE function */
 	{ PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] crypto: hash - introduce crypto_hash_alg_has_setkey()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (330 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ahci: Add Intel Cannon Lake PCH-H PCI ID Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] crypto: cryptd - pass through absence of ->setkey() Sasha Levin
                   ` (184 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Biggers, Herbert Xu, Sasha Levin

From: Eric Biggers <ebiggers@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit cd6ed77ad5d223dc6299fb58f62e0f5267f7e2ba ]

Templates that use an shash spawn can use crypto_shash_alg_has_setkey()
to determine whether the underlying algorithm requires a key or not.
But there was no corresponding function for ahash spawns.  Add it.

Note that the new function actually has to support both shash and ahash
algorithms, since the ahash API can be used with either.

Cc: stable@vger.kernel.org
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 crypto/ahash.c                 | 11 +++++++++++
 include/crypto/internal/hash.h |  2 ++
 2 files changed, 13 insertions(+)

diff --git a/crypto/ahash.c b/crypto/ahash.c
index f9caf0f74199..7006dbfd39bd 100644
--- a/crypto/ahash.c
+++ b/crypto/ahash.c
@@ -637,5 +637,16 @@ struct hash_alg_common *ahash_attr_alg(struct rtattr *rta, u32 type, u32 mask)
 }
 EXPORT_SYMBOL_GPL(ahash_attr_alg);
 
+bool crypto_hash_alg_has_setkey(struct hash_alg_common *halg)
+{
+	struct crypto_alg *alg = &halg->base;
+
+	if (alg->cra_type != &crypto_ahash_type)
+		return crypto_shash_alg_has_setkey(__crypto_shash_alg(alg));
+
+	return __crypto_ahash_alg(alg)->setkey != NULL;
+}
+EXPORT_SYMBOL_GPL(crypto_hash_alg_has_setkey);
+
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Asynchronous cryptographic hash type");
diff --git a/include/crypto/internal/hash.h b/include/crypto/internal/hash.h
index 9779c35f8454..dab9569f22bf 100644
--- a/include/crypto/internal/hash.h
+++ b/include/crypto/internal/hash.h
@@ -91,6 +91,8 @@ static inline bool crypto_shash_alg_has_setkey(struct shash_alg *alg)
 	return alg->setkey != shash_no_setkey;
 }
 
+bool crypto_hash_alg_has_setkey(struct hash_alg_common *halg);
+
 int crypto_init_ahash_spawn(struct crypto_ahash_spawn *spawn,
 			    struct hash_alg_common *alg,
 			    struct crypto_instance *inst);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] crypto: cryptd - pass through absence of ->setkey()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (331 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] crypto: hash - introduce crypto_hash_alg_has_setkey() Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] nsfs: mark dentry with DCACHE_RCUACCESS Sasha Levin
                   ` (183 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Biggers, Herbert Xu, Sasha Levin

From: Eric Biggers <ebiggers@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 841a3ff329713f796a63356fef6e2f72e4a3f6a3 ]

When the cryptd template is used to wrap an unkeyed hash algorithm,
don't install a ->setkey() method to the cryptd instance.  This change
is necessary for cryptd to keep working with unkeyed hash algorithms
once we start enforcing that ->setkey() is called when present.

Cc: stable@vger.kernel.org
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 crypto/cryptd.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/crypto/cryptd.c b/crypto/cryptd.c
index 66c9e8262572..4e76f1db3e68 100644
--- a/crypto/cryptd.c
+++ b/crypto/cryptd.c
@@ -645,7 +645,8 @@ static int cryptd_create_hash(struct crypto_template *tmpl, struct rtattr **tb,
 	inst->alg.finup  = cryptd_hash_finup_enqueue;
 	inst->alg.export = cryptd_hash_export;
 	inst->alg.import = cryptd_hash_import;
-	inst->alg.setkey = cryptd_hash_setkey;
+	if (crypto_shash_alg_has_setkey(salg))
+		inst->alg.setkey = cryptd_hash_setkey;
 	inst->alg.digest = cryptd_hash_digest_enqueue;
 
 	err = ahash_register_instance(tmpl, inst);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] nsfs: mark dentry with DCACHE_RCUACCESS
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (332 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] crypto: cryptd - pass through absence of ->setkey() Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: v4l2-ioctl.c: don't copy back the result for -ENOTTY Sasha Levin
                   ` (182 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Cong Wang, Linus Torvalds, Sasha Levin

From: Cong Wang <xiyou.wangcong@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 073c516ff73557a8f7315066856c04b50383ac34 ]

Andrey reported a use-after-free in __ns_get_path():

  spin_lock include/linux/spinlock.h:299 [inline]
  lockref_get_not_dead+0x19/0x80 lib/lockref.c:179
  __ns_get_path+0x197/0x860 fs/nsfs.c:66
  open_related_ns+0xda/0x200 fs/nsfs.c:143
  sock_ioctl+0x39d/0x440 net/socket.c:1001
  vfs_ioctl fs/ioctl.c:45 [inline]
  do_vfs_ioctl+0x1bf/0x1780 fs/ioctl.c:685
  SYSC_ioctl fs/ioctl.c:700 [inline]
  SyS_ioctl+0x8f/0xc0 fs/ioctl.c:691

We are under rcu read lock protection at that point:

        rcu_read_lock();
        d = atomic_long_read(&ns->stashed);
        if (!d)
                goto slow;
        dentry = (struct dentry *)d;
        if (!lockref_get_not_dead(&dentry->d_lockref))
                goto slow;
        rcu_read_unlock();

but don't use a proper RCU API on the free path, therefore a parallel
__d_free() could free it at the same time.  We need to mark the stashed
dentry with DCACHE_RCUACCESS so that __d_free() will be called after all
readers leave RCU.

Fixes: e149ed2b805f ("take the targets of /proc/*/ns/* symlinks to separate fs")
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Andrew Morton <akpm@linux-foundation.org>
Reported-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/nsfs.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/fs/nsfs.c b/fs/nsfs.c
index 99521e7c492b..845f29e15ac9 100644
--- a/fs/nsfs.c
+++ b/fs/nsfs.c
@@ -94,6 +94,7 @@ void *ns_get_path(struct path *path, struct task_struct *task,
 		return ERR_PTR(-ENOMEM);
 	}
 	d_instantiate(dentry, inode);
+	dentry->d_flags |= DCACHE_RCUACCESS;
 	dentry->d_fsdata = (void *)ns_ops;
 	d = atomic_long_cmpxchg(&ns->stashed, 0, (unsigned long)dentry);
 	if (d) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] media: v4l2-ioctl.c: don't copy back the result for -ENOTTY
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (333 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] nsfs: mark dentry with DCACHE_RCUACCESS Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: add missing VIDIOC_PREPARE_BUF Sasha Levin
                   ` (181 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Hans Verkuil, Mauro Carvalho Chehab, Sasha Levin

From: Hans Verkuil <hans.verkuil@cisco.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 181a4a2d5a0a7b43cab08a70710d727e7764ccdd ]

If the ioctl returned -ENOTTY, then don't bother copying
back the result as there is no point.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: <stable@vger.kernel.org>      # for v4.15 and up
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/v4l2-core/v4l2-ioctl.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index aa407cb5f830..7004477e7ffc 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -2552,8 +2552,11 @@ video_usercopy(struct file *file, unsigned int cmd, unsigned long arg,
 
 	/* Handles IOCTL */
 	err = func(file, cmd, parg);
-	if (err == -ENOIOCTLCMD)
+	if (err == -ENOTTY || err == -ENOIOCTLCMD) {
 		err = -ENOTTY;
+		goto out;
+	}
+
 	if (err == 0) {
 		if (cmd == VIDIOC_DQBUF)
 			trace_v4l2_dqbuf(video_devdata(file)->minor, parg);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: add missing VIDIOC_PREPARE_BUF
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (334 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: v4l2-ioctl.c: don't copy back the result for -ENOTTY Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: fix ctrl_is_pointer Sasha Levin
                   ` (180 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Hans Verkuil, Mauro Carvalho Chehab, Sasha Levin

From: Hans Verkuil <hans.verkuil@cisco.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 3ee6d040719ae09110e5cdf24d5386abe5d1b776 ]

The result of the VIDIOC_PREPARE_BUF ioctl was never copied back
to userspace since it was missing in the switch.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: <stable@vger.kernel.org>      # for v4.15 and up
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
index 4f002d0bebb1..42d402948ea2 100644
--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
@@ -999,6 +999,7 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
 		err = put_v4l2_create32(&karg.v2crt, up);
 		break;
 
+	case VIDIOC_PREPARE_BUF:
 	case VIDIOC_QUERYBUF:
 	case VIDIOC_QBUF:
 	case VIDIOC_DQBUF:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: fix ctrl_is_pointer
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (335 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: add missing VIDIOC_PREPARE_BUF Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: make ctrl_is_pointer work for subdevs Sasha Levin
                   ` (179 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Hans Verkuil, Mauro Carvalho Chehab, Sasha Levin

From: Hans Verkuil <hans.verkuil@cisco.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b8c601e8af2d08f733d74defa8465303391bb930 ]

ctrl_is_pointer just hardcoded two known string controls, but that
caused problems when using e.g. custom controls that use a pointer
for the payload.

Reimplement this function: it now finds the v4l2_ctrl (if the driver
uses the control framework) or it calls vidioc_query_ext_ctrl (if the
driver implements that directly).

In both cases it can now check if the control is a pointer control
or not.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: <stable@vger.kernel.org>      # for v4.15 and up
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 57 ++++++++++++++++++---------
 1 file changed, 38 insertions(+), 19 deletions(-)

diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
index 42d402948ea2..4bbbfc34d4e5 100644
--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
@@ -18,6 +18,8 @@
 #include <linux/videodev2.h>
 #include <linux/v4l2-subdev.h>
 #include <media/v4l2-dev.h>
+#include <media/v4l2-fh.h>
+#include <media/v4l2-ctrls.h>
 #include <media/v4l2-ioctl.h>
 
 static long native_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
@@ -623,24 +625,39 @@ struct v4l2_ext_control32 {
 	};
 } __attribute__ ((packed));
 
-/* The following function really belong in v4l2-common, but that causes
-   a circular dependency between modules. We need to think about this, but
-   for now this will do. */
-
-/* Return non-zero if this control is a pointer type. Currently only
-   type STRING is a pointer type. */
-static inline int ctrl_is_pointer(u32 id)
+/* Return true if this control is a pointer type. */
+static inline bool ctrl_is_pointer(struct file *file, u32 id)
 {
-	switch (id) {
-	case V4L2_CID_RDS_TX_PS_NAME:
-	case V4L2_CID_RDS_TX_RADIO_TEXT:
-		return 1;
-	default:
-		return 0;
+	struct video_device *vdev = video_devdata(file);
+	struct v4l2_fh *fh = NULL;
+	struct v4l2_ctrl_handler *hdl = NULL;
+	struct v4l2_query_ext_ctrl qec = { id };
+	const struct v4l2_ioctl_ops *ops = vdev->ioctl_ops;
+
+	if (test_bit(V4L2_FL_USES_V4L2_FH, &vdev->flags))
+		fh = file->private_data;
+
+	if (fh && fh->ctrl_handler)
+		hdl = fh->ctrl_handler;
+	else if (vdev->ctrl_handler)
+		hdl = vdev->ctrl_handler;
+
+	if (hdl) {
+		struct v4l2_ctrl *ctrl = v4l2_ctrl_find(hdl, id);
+
+		return ctrl && ctrl->is_ptr;
 	}
+
+	if (!ops->vidioc_query_ext_ctrl)
+		return false;
+
+	return !ops->vidioc_query_ext_ctrl(file, fh, &qec) &&
+		(qec.flags & V4L2_CTRL_FLAG_HAS_PAYLOAD);
 }
 
-static int get_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext_controls32 __user *up)
+static int get_v4l2_ext_controls32(struct file *file,
+				   struct v4l2_ext_controls *kp,
+				   struct v4l2_ext_controls32 __user *up)
 {
 	struct v4l2_ext_control32 __user *ucontrols;
 	struct v4l2_ext_control __user *kcontrols;
@@ -673,7 +690,7 @@ static int get_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext
 			return -EFAULT;
 		if (get_user(id, &kcontrols->id))
 			return -EFAULT;
-		if (ctrl_is_pointer(id)) {
+		if (ctrl_is_pointer(file, id)) {
 			void __user *s;
 
 			if (get_user(p, &ucontrols->string))
@@ -688,7 +705,9 @@ static int get_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext
 	return 0;
 }
 
-static int put_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext_controls32 __user *up)
+static int put_v4l2_ext_controls32(struct file *file,
+				   struct v4l2_ext_controls *kp,
+				   struct v4l2_ext_controls32 __user *up)
 {
 	struct v4l2_ext_control32 __user *ucontrols;
 	struct v4l2_ext_control __user *kcontrols =
@@ -721,7 +740,7 @@ static int put_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext
 		/* Do not modify the pointer when copying a pointer control.
 		   The contents of the pointer was changed, not the pointer
 		   itself. */
-		if (ctrl_is_pointer(id))
+		if (ctrl_is_pointer(file, id))
 			size -= sizeof(ucontrols->value64);
 		if (copy_in_user(ucontrols, kcontrols, size))
 			return -EFAULT;
@@ -934,7 +953,7 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
 	case VIDIOC_G_EXT_CTRLS:
 	case VIDIOC_S_EXT_CTRLS:
 	case VIDIOC_TRY_EXT_CTRLS:
-		err = get_v4l2_ext_controls32(&karg.v2ecs, up);
+		err = get_v4l2_ext_controls32(file, &karg.v2ecs, up);
 		compatible_arg = 0;
 		break;
 	case VIDIOC_DQEVENT:
@@ -961,7 +980,7 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
 	case VIDIOC_G_EXT_CTRLS:
 	case VIDIOC_S_EXT_CTRLS:
 	case VIDIOC_TRY_EXT_CTRLS:
-		if (put_v4l2_ext_controls32(&karg.v2ecs, up))
+		if (put_v4l2_ext_controls32(file, &karg.v2ecs, up))
 			err = -EFAULT;
 		break;
 	}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: make ctrl_is_pointer work for subdevs
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (336 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: fix ctrl_is_pointer Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] arm: KVM: Fix SMCCC handling of unimplemented SMC/HVC calls Sasha Levin
                   ` (178 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Hans Verkuil, Hans Verkuil, Mauro Carvalho Chehab, Sasha Levin

From: Hans Verkuil <hansverk@cisco.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 273caa260035c03d89ad63d72d8cd3d9e5c5e3f1 ]

If the device is of type VFL_TYPE_SUBDEV then vdev->ioctl_ops
is NULL so the 'if (!ops->vidioc_query_ext_ctrl)' check would crash.
Add a test for !ops to the condition.

All sub-devices that have controls will use the control framework,
so they do not have an equivalent to ops->vidioc_query_ext_ctrl.
Returning false if ops is NULL is the correct thing to do here.

Fixes: b8c601e8af ("v4l2-compat-ioctl32.c: fix ctrl_is_pointer")

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: <stable@vger.kernel.org>      # for v4.15 and up
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
index 4bbbfc34d4e5..f3e66a738b9e 100644
--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
@@ -648,7 +648,7 @@ static inline bool ctrl_is_pointer(struct file *file, u32 id)
 		return ctrl && ctrl->is_ptr;
 	}
 
-	if (!ops->vidioc_query_ext_ctrl)
+	if (!ops || !ops->vidioc_query_ext_ctrl)
 		return false;
 
 	return !ops->vidioc_query_ext_ctrl(file, fh, &qec) &&
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: don't copy back the result for certain errors
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (338 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] arm: KVM: Fix SMCCC handling of unimplemented SMC/HVC calls Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: cxusb, dib0700: ignore XC2028_I2C_FLUSH Sasha Levin
                   ` (176 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Hans Verkuil, Mauro Carvalho Chehab, Sasha Levin

From: Hans Verkuil <hans.verkuil@cisco.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d83a8243aaefe62ace433e4384a4f077bed86acb ]

Some ioctls need to copy back the result even if the ioctl returned
an error. However, don't do this for the error code -ENOTTY.
It makes no sense in that cases.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: <stable@vger.kernel.org>      # for v4.15 and up
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
index f3e66a738b9e..ee084d7c4a4c 100644
--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
@@ -973,6 +973,9 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
 		set_fs(old_fs);
 	}
 
+	if (err == -ENOTTY)
+		return err;
+
 	/* Special case: even after an error we need to put the
 	   results back for these ioctls since the error_idx will
 	   contain information on which control failed. */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] arm: KVM: Fix SMCCC handling of unimplemented SMC/HVC calls
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (337 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: make ctrl_is_pointer work for subdevs Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: don't copy back the result for certain errors Sasha Levin
                   ` (177 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Marc Zyngier, Catalin Marinas, Sasha Levin

From: Marc Zyngier <marc.zyngier@arm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 20e8175d246e9f9deb377f2784b3e7dfb2ad3e86 ]

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.

Cc: <stable@vger.kernel.org>
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: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/kvm/handle_exit.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/arch/arm/kvm/handle_exit.c b/arch/arm/kvm/handle_exit.c
index f36b5b1acd1f..05b2f8294968 100644
--- 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 *vcpu, struct kvm_run *run)
 
 	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 *vcpu, struct kvm_run *run)
 
 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;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] KVM: nVMX: Fix races when sending nested PI while dest enters/leaves L2
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (340 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: cxusb, dib0700: ignore XC2028_I2C_FLUSH Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] kernel/async.c: revert "async: simplify lowest_in_progress()" Sasha Levin
                   ` (174 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Liran Alon, Paolo Bonzini, Radim Krčmář, Sasha Levin

From: Liran Alon <liran.alon@oracle.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6b6977117f50d60455ace86b2d256f6fb4f3de05 ]

Consider the following scenario:
1. CPU A calls vmx_deliver_nested_posted_interrupt() to send an IPI
to CPU B via virtual posted-interrupt mechanism.
2. CPU B is currently executing L2 guest.
3. vmx_deliver_nested_posted_interrupt() calls
kvm_vcpu_trigger_posted_interrupt() which will note that
vcpu->mode == IN_GUEST_MODE.
4. Assume that before CPU A sends the physical POSTED_INTR_NESTED_VECTOR
IPI, CPU B exits from L2 to L0 during event-delivery
(valid IDT-vectoring-info).
5. CPU A now sends the physical IPI. The IPI is received in host and
it's handler (smp_kvm_posted_intr_nested_ipi()) does nothing.
6. Assume that before CPU A sets pi_pending=true and KVM_REQ_EVENT,
CPU B continues to run in L0 and reach vcpu_enter_guest(). As
KVM_REQ_EVENT is not set yet, vcpu_enter_guest() will continue and resume
L2 guest.
7. At this point, CPU A sets pi_pending=true and KVM_REQ_EVENT but
it's too late! CPU B already entered L2 and KVM_REQ_EVENT will only be
consumed at next L2 entry!

Another scenario to consider:
1. CPU A calls vmx_deliver_nested_posted_interrupt() to send an IPI
to CPU B via virtual posted-interrupt mechanism.
2. Assume that before CPU A calls kvm_vcpu_trigger_posted_interrupt(),
CPU B is at L0 and is about to resume into L2. Further assume that it is
in vcpu_enter_guest() after check for KVM_REQ_EVENT.
3. At this point, CPU A calls kvm_vcpu_trigger_posted_interrupt() which
will note that vcpu->mode != IN_GUEST_MODE. Therefore, do nothing and
return false. Then, will set pi_pending=true and KVM_REQ_EVENT.
4. Now CPU B continue and resumes into L2 guest without processing
the posted-interrupt until next L2 entry!

To fix both issues, we just need to change
vmx_deliver_nested_posted_interrupt() to set pi_pending=true and
KVM_REQ_EVENT before calling kvm_vcpu_trigger_posted_interrupt().

It will fix the first scenario by chaging step (6) to note that
KVM_REQ_EVENT and pi_pending=true and therefore process
nested posted-interrupt.

It will fix the second scenario by two possible ways:
1. If kvm_vcpu_trigger_posted_interrupt() is called while CPU B has changed
vcpu->mode to IN_GUEST_MODE, physical IPI will be sent and will be received
when CPU resumes into L2.
2. If kvm_vcpu_trigger_posted_interrupt() is called while CPU B hasn't yet
changed vcpu->mode to IN_GUEST_MODE, then after CPU B will change
vcpu->mode it will call kvm_request_pending() which will return true and
therefore force another round of vcpu_enter_guest() which will note that
KVM_REQ_EVENT and pi_pending=true and therefore process nested
posted-interrupt.

Cc: stable@vger.kernel.org
Fixes: 705699a13994 ("KVM: nVMX: Enable nested posted interrupt processing")
Signed-off-by: Liran Alon <liran.alon@oracle.com>
Reviewed-by: Nikita Leshenko <nikita.leshchenko@oracle.com>
Reviewed-by: Krish Sadhukhan <krish.sadhukhan@oracle.com>
[Add kvm_vcpu_kick to also handle the case where L1 doesn't intercept L2 HLT
 and L2 executes HLT instruction. - Paolo]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kvm/vmx.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 1a692b632914..6092e6c83de0 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -4420,14 +4420,15 @@ static int vmx_deliver_nested_posted_interrupt(struct kvm_vcpu *vcpu,
 
 	if (is_guest_mode(vcpu) &&
 	    vector == vmx->nested.posted_intr_nv) {
-		/* the PIR and ON have been set by L1. */
-		kvm_vcpu_trigger_posted_interrupt(vcpu);
 		/*
 		 * If a posted intr is not recognized by hardware,
 		 * we will accomplish it in the next vmentry.
 		 */
 		vmx->nested.pi_pending = true;
 		kvm_make_request(KVM_REQ_EVENT, vcpu);
+		/* the PIR and ON have been set by L1. */
+		if (!kvm_vcpu_trigger_posted_interrupt(vcpu))
+			kvm_vcpu_kick(vcpu);
 		return 0;
 	}
 	return -1;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] media: cxusb, dib0700: ignore XC2028_I2C_FLUSH
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (339 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: don't copy back the result for certain errors Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] KVM: nVMX: Fix races when sending nested PI while dest enters/leaves L2 Sasha Levin
                   ` (175 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Mauro Carvalho Chehab, Sasha Levin

From: Mauro Carvalho Chehab <mchehab@osg.samsung.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9893b905e743ded332575ca04486bd586c0772f7 ]

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

Cc: stable@vger.kernel.org
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: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/usb/dvb-usb/cxusb.c           | 2 ++
 drivers/media/usb/dvb-usb/dib0700_devices.c | 1 +
 2 files changed, 3 insertions(+)

diff --git a/drivers/media/usb/dvb-usb/cxusb.c b/drivers/media/usb/dvb-usb/cxusb.c
index ffc3704abded..d89de44d94a0 100644
--- a/drivers/media/usb/dvb-usb/cxusb.c
+++ b/drivers/media/usb/dvb-usb/cxusb.c
@@ -818,6 +818,8 @@ static int dvico_bluebird_xc2028_callback(void *ptr, int component,
 	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);
diff --git a/drivers/media/usb/dvb-usb/dib0700_devices.c b/drivers/media/usb/dvb-usb/dib0700_devices.c
index 0d7565158207..97057ae10509 100644
--- 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(void *ptr, int component,
 		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__,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] kernel/async.c: revert "async: simplify lowest_in_progress()"
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (341 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] KVM: nVMX: Fix races when sending nested PI while dest enters/leaves L2 Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] Revert "Bluetooth: btusb: fix QCA Rome suspend/resume" Sasha Levin
                   ` (173 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Rasmus Villemoes, Andrew Morton, Linus Torvalds, Sasha Levin

From: Rasmus Villemoes <linux@rasmusvillemoes.dk>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4f7e988e63e336827f4150de48163bed05d653bd ]

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>
Cc: <stable@vger.kernel.org>	[3.10+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/async.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/kernel/async.c b/kernel/async.c
index 4c3773c0bf63..f1fd155abff6 100644
--- 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;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Revert "Bluetooth: btusb: fix QCA Rome suspend/resume"
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (342 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] kernel/async.c: revert "async: simplify lowest_in_progress()" Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] Bluetooth: btsdio: Do not bind to non-removable BCM43341 Sasha Levin
                   ` (172 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Kai-Heng Feng, Marcel Holtmann, Sasha Levin

From: Kai-Heng Feng <kai.heng.feng@canonical.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7d06d5895c159f64c46560dc258e553ad8670fe0 ]

This reverts commit fd865802c66bc451dc515ed89360f84376ce1a56.

This commit causes a regression on some QCA ROME chips. The USB device
reset happens in btusb_open(), hence firmware loading gets interrupted.

Furthermore, this commit stops working after commit
("a0085f2510e8976614ad8f766b209448b385492f Bluetooth: btusb: driver to
enable the usb-wakeup feature"). Reset-resume quirk only gets enabled in
btusb_suspend() when it's not a wakeup source.

If we really want to reset the USB device, we need to do it before
btusb_open(). Let's handle it in drivers/usb/core/quirks.c.

Cc: stable@vger.kernel.org
Cc: Leif Liddy <leif.linux@gmail.com>
Cc: Matthias Kaehlcke <mka@chromium.org>
Cc: Brian Norris <briannorris@chromium.org>
Cc: Daniel Drake <drake@endlessm.com>
Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Reviewed-by: Brian Norris <briannorris@chromium.org>
Tested-by: Brian Norris <briannorris@chromium.org>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/bluetooth/btusb.c | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index b17bd3fc74cb..32f5b87fe93c 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -3207,12 +3207,6 @@ static int btusb_probe(struct usb_interface *intf,
 	if (id->driver_info & BTUSB_QCA_ROME) {
 		data->setup_on_usb = btusb_setup_qca;
 		hdev->set_bdaddr = btusb_set_bdaddr_ath3012;
-
-		/* QCA Rome devices lose their updated firmware over suspend,
-		 * but the USB hub doesn't notice any status change.
-		 * Explicitly request a device reset on resume.
-		 */
-		set_bit(BTUSB_RESET_RESUME, &data->flags);
 	}
 
 	if (id->driver_info & BTUSB_REALTEK)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Bluetooth: btsdio: Do not bind to non-removable BCM43341
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (343 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] Revert "Bluetooth: btusb: fix QCA Rome suspend/resume" Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] signal/openrisc: Fix do_unaligned_access to send the proper signal Sasha Levin
                   ` (171 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Hans de Goede, Marcel Holtmann, Sasha Levin

From: Hans de Goede <hdegoede@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b4cdaba274247c9c841c6a682c08fa91fb3aa549 ]

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.

Cc: stable@vger.kernel.org
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/bluetooth/btsdio.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/bluetooth/btsdio.c b/drivers/bluetooth/btsdio.c
index 83f6437dd91d..1481a3c9b5af 100644
--- 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 *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;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] signal/openrisc: Fix do_unaligned_access to send the proper signal
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (344 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] Bluetooth: btsdio: Do not bind to non-removable BCM43341 Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] alpha: fix crash if pthread_create races with signal delivery Sasha Levin
                   ` (170 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric W. Biederman, Sasha Levin

From: "Eric W. Biederman" <ebiederm@xmission.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 500d58300571b6602341b041f97c082a461ef994 ]

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.

Cc: stable@vger.kernel.org
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: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/openrisc/kernel/traps.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/openrisc/kernel/traps.c b/arch/openrisc/kernel/traps.c
index 3d3f6062f49c..605a284922fb 100644
--- a/arch/openrisc/kernel/traps.c
+++ b/arch/openrisc/kernel/traps.c
@@ -302,12 +302,12 @@ asmlinkage void do_unaligned_access(struct pt_regs *regs, unsigned long address)
 	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);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] signal/sh: Ensure si_signo is initialized in do_divide_error
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (346 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] alpha: fix crash if pthread_create races with signal delivery Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] xtensa: fix futex_atomic_cmpxchg_inatomic Sasha Levin
                   ` (168 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric W. Biederman, Sasha Levin

From: "Eric W. Biederman" <ebiederm@xmission.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 0e88bb002a9b2ee8cc3cc9478ce2dc126f849696 ]

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
Cc: stable@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: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/sh/kernel/traps_32.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/sh/kernel/traps_32.c b/arch/sh/kernel/traps_32.c
index ff639342a8be..c5b997757988 100644
--- a/arch/sh/kernel/traps_32.c
+++ b/arch/sh/kernel/traps_32.c
@@ -607,7 +607,8 @@ asmlinkage void do_divide_error(unsigned long r4)
 		break;
 	}
 
-	force_sig_info(SIGFPE, &info, current);
+	info.si_signo = SIGFPE;
+	force_sig_info(info.si_signo, &info, current);
 }
 #endif
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] alpha: fix crash if pthread_create races with signal delivery
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (345 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] signal/openrisc: Fix do_unaligned_access to send the proper signal Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] signal/sh: Ensure si_signo is initialized in do_divide_error Sasha Levin
                   ` (169 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Mikulas Patocka, Matt Turner, Sasha Levin

From: Mikulas Patocka <mpatocka@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 21ffceda1c8b3807615c40d440d7815e0c85d366 ]

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>
Cc: stable@vger.kernel.org
Signed-off-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/alpha/kernel/process.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/alpha/kernel/process.c b/arch/alpha/kernel/process.c
index 84d13263ce46..8095fb2c5c94 100644
--- a/arch/alpha/kernel/process.c
+++ b/arch/alpha/kernel/process.c
@@ -273,12 +273,13 @@ copy_thread(unsigned long clone_flags, unsigned long usp,
 	   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;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] xtensa: fix futex_atomic_cmpxchg_inatomic
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (347 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] signal/sh: Ensure si_signo is initialized in do_divide_error Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] alpha: fix reboot on Avanti platform Sasha Levin
                   ` (167 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Max Filippov, Sasha Levin

From: Max Filippov <jcmvbkbc@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ca47480921587ae30417dd234a9f79af188e3666 ]

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*.

Cc: stable@vger.kernel.org
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/xtensa/include/asm/futex.h | 23 ++++++++++-------------
 1 file changed, 10 insertions(+), 13 deletions(-)

diff --git a/arch/xtensa/include/asm/futex.h b/arch/xtensa/include/asm/futex.h
index b39531babec0..72bfc1cbc2b5 100644
--- 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 __user *uaddr,
 			      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, u32 __user *uaddr,
 
 	__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;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] alpha: fix reboot on Avanti platform
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (348 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] xtensa: fix futex_atomic_cmpxchg_inatomic Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] EDAC, octeon: Fix an uninitialized variable warning Sasha Levin
                   ` (166 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Mikulas Patocka, Matt Turner, Sasha Levin

From: Mikulas Patocka <mpatocka@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 55fc633c41a08ce9244ff5f528f420b16b1e04d6 ]

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>
Cc: stable@vger.kernel.org
Signed-off-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/alpha/kernel/pci_impl.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/alpha/kernel/pci_impl.h b/arch/alpha/kernel/pci_impl.h
index 2b0ac429f5eb..412bb3c24f36 100644
--- 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
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] EDAC, octeon: Fix an uninitialized variable warning
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (349 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] alpha: fix reboot on Avanti platform Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] pktcdvd: Fix pkt_setup_dev() error path Sasha Levin
                   ` (165 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: James Hogan, Borislav Petkov, Sasha Levin

From: James Hogan <jhogan@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 544e92581a2ac44607d7cc602c6b54d18656f56d ]

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
Cc: <stable@vger.kernel.org> # 3.15+
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: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/edac/octeon_edac-lmc.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/edac/octeon_edac-lmc.c b/drivers/edac/octeon_edac-lmc.c
index cda6dab5067a..6b65a102b49d 100644
--- 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(struct mem_ctl_info *mci)
 	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)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] pktcdvd: Fix pkt_setup_dev() error path
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (350 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] EDAC, octeon: Fix an uninitialized variable warning Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] btrfs: Handle btrfs_set_extent_delalloc failure in fixup worker Sasha Levin
                   ` (164 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Bart Van Assche, Jens Axboe, Sasha Levin

From: Bart Van Assche <bart.vanassche@wdc.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5a0ec388ef0f6e33841aeb810d7fa23f049ec4cd ]

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>
Cc: <stable@vger.kernel.org> # v3.2
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/block/pktcdvd.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
index 09e628dafd9d..46098d236476 100644
--- a/drivers/block/pktcdvd.c
+++ b/drivers/block/pktcdvd.c
@@ -2798,7 +2798,7 @@ static int pkt_setup_dev(dev_t dev, dev_t* pkt_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_t* pkt_dev)
 	mutex_unlock(&ctl_mutex);
 	return 0;
 
-out_new_dev:
-	blk_cleanup_queue(disk->queue);
 out_mem2:
 	put_disk(disk);
 out_mem:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] btrfs: Handle btrfs_set_extent_delalloc failure in fixup worker
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (351 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] pktcdvd: Fix pkt_setup_dev() error path Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ovl: fix failure to fsync lower dir Sasha Levin
                   ` (163 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Nikolay Borisov, David Sterba, Sasha Levin

From: Nikolay Borisov <nborisov@suse.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f3038ee3a3f1017a1cbe9907e31fa12d366c5dcb ]

This function was introduced by 247e743cbe6e ("Btrfs: Use async helpers
to deal with pages that have been improperly dirtied") and it didn't do
any error handling then. This function might very well fail in ENOMEM
situation, yet it's not handled, this could lead to inconsistent state.
So let's handle the failure by setting the mapping error bit.

Cc: stable@vger.kernel.org
Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/btrfs/inode.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index d14af5bd13d6..1423231c7e49 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -1999,7 +1999,15 @@ static void btrfs_writepage_fixup_worker(struct btrfs_work *work)
 		goto out;
 	 }
 
-	btrfs_set_extent_delalloc(inode, page_start, page_end, &cached_state);
+	ret = btrfs_set_extent_delalloc(inode, page_start, page_end,
+					&cached_state);
+	if (ret) {
+		mapping_set_error(page->mapping, ret);
+		end_extent_writepage(page, ret, page_start, page_end);
+		ClearPageChecked(page);
+		goto out;
+	}
+
 	ClearPageChecked(page);
 	set_page_dirty(page);
 out:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ACPI: sbshc: remove raw pointer from printk() message
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (353 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ovl: fix failure to fsync lower dir Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] mn10300/misalignment: Use SIGSEGV SEGV_MAPERR to report a failed user copy Sasha Levin
                   ` (161 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Greg Kroah-Hartman, Rafael J . Wysocki, Sasha Levin

From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 43cdd1b716b26f6af16da4e145b6578f98798bf6 ]

There's no need to be printing a raw kernel pointer to the kernel log at
every boot.  So just remove it, and change the whole message to use the
correct dev_info() call at the same time.

Reported-by: Wang Qize <wang_qize@venustech.com.cn>
Cc: All applicable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/acpi/sbshc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/acpi/sbshc.c b/drivers/acpi/sbshc.c
index bf034f8b7c1a..030ab2f543df 100644
--- a/drivers/acpi/sbshc.c
+++ b/drivers/acpi/sbshc.c
@@ -309,8 +309,8 @@ static int acpi_smbus_hc_add(struct acpi_device *device)
 	device->driver_data = hc;
 
 	acpi_ec_add_query_handler(hc->ec, hc->query_bit, NULL, smbus_alarm, hc);
-	printk(KERN_INFO PREFIX "SBS HC: EC = 0x%p, offset = 0x%0x, query_bit = 0x%0x\n",
-		hc->ec, hc->offset, hc->query_bit);
+	dev_info(&device->dev, "SBS HC: offset = 0x%0x, query_bit = 0x%0x\n",
+		 hc->offset, hc->query_bit);
 
 	return 0;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ovl: fix failure to fsync lower dir
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (352 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] btrfs: Handle btrfs_set_extent_delalloc failure in fixup worker Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ACPI: sbshc: remove raw pointer from printk() message Sasha Levin
                   ` (162 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Amir Goldstein, Miklos Szeredi, Sasha Levin

From: Amir Goldstein <amir73il@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d796e77f1dd541fe34481af2eee6454688d13982 ]

As a writable mount, it is not expected for overlayfs to return
EINVAL/EROFS for fsync, even if dir/file is not changed.

This commit fixes the case of fsync of directory, which is easier to
address, because overlayfs already implements fsync file operation for
directories.

The problem reported by Raphael is that new PostgreSQL 10.0 with a
database in overlayfs where lower layer in squashfs fails to start.
The failure is due to fsync error, when PostgreSQL does fsync on all
existing db directories on startup and a specific directory exists
lower layer with no changes.

Reported-by: Raphael Hertzog <raphael@ouaza.com>
Cc: <stable@vger.kernel.org> # v3.18
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Tested-by: Raphaël Hertzog <hertzog@debian.org>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/overlayfs/readdir.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c
index adcb1398c481..299a6e1d6b77 100644
--- a/fs/overlayfs/readdir.c
+++ b/fs/overlayfs/readdir.c
@@ -441,10 +441,14 @@ static int ovl_dir_fsync(struct file *file, loff_t start, loff_t end,
 	struct dentry *dentry = file->f_path.dentry;
 	struct file *realfile = od->realfile;
 
+	/* Nothing to sync for lower */
+	if (!OVL_TYPE_UPPER(ovl_path_type(dentry)))
+		return 0;
+
 	/*
 	 * Need to check if we started out being a lower dir, but got copied up
 	 */
-	if (!od->is_upper && OVL_TYPE_UPPER(ovl_path_type(dentry))) {
+	if (!od->is_upper) {
 		struct inode *inode = file_inode(file);
 
 		realfile = lockless_dereference(od->upperfile);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mn10300/misalignment: Use SIGSEGV SEGV_MAPERR to report a failed user copy
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (354 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ACPI: sbshc: remove raw pointer from printk() message Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] PM / devfreq: Propagate error from devfreq_add_device() Sasha Levin
                   ` (160 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric W. Biederman, Sasha Levin

From: "Eric W. Biederman" <ebiederm@xmission.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6ac1dc736b323011a55ecd1fc5897c24c4f77cbd ]

Setting si_code to 0 is the same a setting si_code to SI_USER which is definitely
not correct.  With si_code set to SI_USER si_pid and si_uid will be copied to
userspace instead of si_addr.  Which is very wrong.

So fix this by using a sensible si_code (SEGV_MAPERR) for this failure.

Cc: stable@vger.kernel.org
Fixes: b920de1b77b7 ("mn10300: add the MN10300/AM33 architecture to the kernel")
Cc: David Howells <dhowells@redhat.com>
Cc: Masakazu Urade <urade.masakazu@jp.panasonic.com>
Cc: Koichi Yasutake <yasutake.koichi@jp.panasonic.com>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/mn10300/mm/misalignment.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/mn10300/mm/misalignment.c b/arch/mn10300/mm/misalignment.c
index b9920b1edd5a..70cef54dc40f 100644
--- a/arch/mn10300/mm/misalignment.c
+++ b/arch/mn10300/mm/misalignment.c
@@ -437,7 +437,7 @@ asmlinkage void misalignment(struct pt_regs *regs, enum exception_code code)
 
 	info.si_signo	= SIGSEGV;
 	info.si_errno	= 0;
-	info.si_code	= 0;
+	info.si_code	= SEGV_MAPERR;
 	info.si_addr	= (void *) regs->pc;
 	force_sig_info(SIGSEGV, &info, current);
 	return;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] PM / devfreq: Propagate error from devfreq_add_device()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (355 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] mn10300/misalignment: Use SIGSEGV SEGV_MAPERR to report a failed user copy Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] IB/mlx4: Fix incorrectly releasing steerable UD QPs when have only ETH ports Sasha Levin
                   ` (159 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Bjorn Andersson, MyungJoo Ham, Sasha Levin

From: Bjorn Andersson <bjorn.andersson@linaro.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d1bf2d30728f310f72296b54f0651ecdb09cbb12 ]

Propagate the error of devfreq_add_device() in devm_devfreq_add_device()
rather than statically returning ENOMEM. This makes it slightly faster
to pinpoint the cause of a returned error.

Fixes: 8cd84092d35e ("PM / devfreq: Add resource-managed function for devfreq device")
Cc: stable@vger.kernel.org
Acked-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/devfreq/devfreq.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
index ca1b362d77e2..3373561caae8 100644
--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
@@ -584,7 +584,7 @@ struct devfreq *devm_devfreq_add_device(struct device *dev,
 	devfreq = devfreq_add_device(dev, profile, governor_name, data);
 	if (IS_ERR(devfreq)) {
 		devres_free(ptr);
-		return ERR_PTR(-ENOMEM);
+		return devfreq;
 	}
 
 	*ptr = devfreq;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] IB/mlx4: Fix incorrectly releasing steerable UD QPs when have only ETH ports
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (356 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] PM / devfreq: Propagate error from devfreq_add_device() Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] s390: fix handling of -1 in set{,fs}[gu]id16 syscalls Sasha Levin
                   ` (158 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Jack Morgenstein, Leon Romanovsky, Jason Gunthorpe, Sasha Levin

From: Jack Morgenstein <jackm@dev.mellanox.co.il>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 852f6927594d0d3e8632c889b2ab38cbc46476ad ]

Allocating steerable UD QPs depends on having at least one IB port,
while releasing those QPs does not.

As a result, when there are only ETH ports, the IB (RoCE) driver
requests releasing a qp range whose base qp is zero, with
qp count zero.

When SR-IOV is enabled, and the VF driver is running on a VM over
a hypervisor which treats such qp release calls as errors
(rather than NOPs), we see lines in the VM message log like:

 mlx4_core 0002:00:02.0: Failed to release qp range base:0 cnt:0

Fix this by adding a check for a zero count in mlx4_release_qp_range()
(which thus treats releasing 0 qps as a nop), and eliminating the
check for device managed flow steering when releasing steerable UD QPs.
(Freeing ib_uc_qpns_bitmap unconditionally is also OK, since it
remains NULL when steerable UD QPs are not allocated).

Cc: <stable@vger.kernel.org>
Fixes: 4196670be786 ("IB/mlx4: Don't allocate range of steerable UD QPs for Ethernet-only device")
Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/infiniband/hw/mlx4/main.c       | 13 +++++--------
 drivers/net/ethernet/mellanox/mlx4/qp.c |  3 +++
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
index 1563ee64a180..640bb7360537 100644
--- a/drivers/infiniband/hw/mlx4/main.c
+++ b/drivers/infiniband/hw/mlx4/main.c
@@ -2436,9 +2436,8 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
 	kfree(ibdev->ib_uc_qpns_bitmap);
 
 err_steer_qp_release:
-	if (ibdev->steering_support == MLX4_STEERING_MODE_DEVICE_MANAGED)
-		mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
-				      ibdev->steer_qpn_count);
+	mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
+			      ibdev->steer_qpn_count);
 err_counter:
 	for (; i; --i)
 		if (ibdev->counters[i - 1] != -1)
@@ -2540,11 +2539,9 @@ static void mlx4_ib_remove(struct mlx4_dev *dev, void *ibdev_ptr)
 		ibdev->iboe.nb.notifier_call = NULL;
 	}
 
-	if (ibdev->steering_support == MLX4_STEERING_MODE_DEVICE_MANAGED) {
-		mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
-				      ibdev->steer_qpn_count);
-		kfree(ibdev->ib_uc_qpns_bitmap);
-	}
+	mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
+			      ibdev->steer_qpn_count);
+	kfree(ibdev->ib_uc_qpns_bitmap);
 
 	if (ibdev->iboe.nb_inet.notifier_call) {
 		if (unregister_inetaddr_notifier(&ibdev->iboe.nb_inet))
diff --git a/drivers/net/ethernet/mellanox/mlx4/qp.c b/drivers/net/ethernet/mellanox/mlx4/qp.c
index b75214a80d0e..eb1dcb7e9e96 100644
--- a/drivers/net/ethernet/mellanox/mlx4/qp.c
+++ b/drivers/net/ethernet/mellanox/mlx4/qp.c
@@ -280,6 +280,9 @@ void mlx4_qp_release_range(struct mlx4_dev *dev, int base_qpn, int cnt)
 	u64 in_param = 0;
 	int err;
 
+	if (!cnt)
+		return;
+
 	if (mlx4_is_mfunc(dev)) {
 		set_param_l(&in_param, base_qpn);
 		set_param_h(&in_param, cnt);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] s390: fix handling of -1 in set{,fs}[gu]id16 syscalls
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (357 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] IB/mlx4: Fix incorrectly releasing steerable UD QPs when have only ETH ports Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] arm: spear13xx: Fix dmas cells Sasha Levin
                   ` (157 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Eugene Syromiatnikov, Heiko Carstens, Martin Schwidefsky, Sasha Levin

From: Eugene Syromiatnikov <esyr@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6dd0d2d22aa363fec075cb2577ba273ac8462e94 ]

For some reason, the implementation of some 16-bit ID system calls
(namely, setuid16/setgid16 and setfsuid16/setfsgid16) used type cast
instead of low2highgid/low2highuid macros for converting [GU]IDs, which
led to incorrect handling of value of -1 (which ought to be considered
invalid).

Discovered by strace test suite.

Cc: stable@vger.kernel.org
Signed-off-by: Eugene Syromiatnikov <esyr@redhat.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/s390/kernel/compat_linux.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c
index 0176ebc97bfd..86f934255eb6 100644
--- a/arch/s390/kernel/compat_linux.c
+++ b/arch/s390/kernel/compat_linux.c
@@ -110,7 +110,7 @@ COMPAT_SYSCALL_DEFINE2(s390_setregid16, u16, rgid, u16, egid)
 
 COMPAT_SYSCALL_DEFINE1(s390_setgid16, u16, gid)
 {
-	return sys_setgid((gid_t)gid);
+	return sys_setgid(low2highgid(gid));
 }
 
 COMPAT_SYSCALL_DEFINE2(s390_setreuid16, u16, ruid, u16, euid)
@@ -120,7 +120,7 @@ COMPAT_SYSCALL_DEFINE2(s390_setreuid16, u16, ruid, u16, euid)
 
 COMPAT_SYSCALL_DEFINE1(s390_setuid16, u16, uid)
 {
-	return sys_setuid((uid_t)uid);
+	return sys_setuid(low2highuid(uid));
 }
 
 COMPAT_SYSCALL_DEFINE3(s390_setresuid16, u16, ruid, u16, euid, u16, suid)
@@ -173,12 +173,12 @@ COMPAT_SYSCALL_DEFINE3(s390_getresgid16, u16 __user *, rgidp,
 
 COMPAT_SYSCALL_DEFINE1(s390_setfsuid16, u16, uid)
 {
-	return sys_setfsuid((uid_t)uid);
+	return sys_setfsuid(low2highuid(uid));
 }
 
 COMPAT_SYSCALL_DEFINE1(s390_setfsgid16, u16, gid)
 {
-	return sys_setfsgid((gid_t)gid);
+	return sys_setfsgid(low2highgid(gid));
 }
 
 static int groups16_to_user(u16 __user *grouplist, struct group_info *group_info)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] arm: spear600: Add missing interrupt-parent of rtc
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (359 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] arm: spear13xx: Fix dmas cells Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] arm: spear13xx: Fix spics gpio controller's warning Sasha Levin
                   ` (155 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Viresh Kumar, Olof Johansson, Sasha Levin

From: Viresh Kumar <viresh.kumar@linaro.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6ffb5b4f248fe53e0361b8cbc2a523b432566442 ]

The interrupt-parent of rtc was missing, add it.

Fixes: 8113ba917dfa ("ARM: SPEAr: DT: Update device nodes")
Cc: stable@vger.kernel.org # v3.8+
Reported-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Olof Johansson <olof@lixom.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/boot/dts/spear600.dtsi | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/boot/dts/spear600.dtsi b/arch/arm/boot/dts/spear600.dtsi
index 9f60a7b6a42b..bd379034993c 100644
--- a/arch/arm/boot/dts/spear600.dtsi
+++ b/arch/arm/boot/dts/spear600.dtsi
@@ -194,6 +194,7 @@
 			rtc@fc900000 {
 				compatible = "st,spear600-rtc";
 				reg = <0xfc900000 0x1000>;
+				interrupt-parent = <&vic0>;
 				interrupts = <10>;
 				status = "disabled";
 			};
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] arm: spear13xx: Fix dmas cells
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (358 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] s390: fix handling of -1 in set{,fs}[gu]id16 syscalls Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] arm: spear600: Add missing interrupt-parent of rtc Sasha Levin
                   ` (156 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Viresh Kumar, Olof Johansson, Sasha Levin

From: Viresh Kumar <viresh.kumar@linaro.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit cdd10409914184c7eee5ae3e11beb890c9c16c61 ]

The "dmas" cells for the designware DMA controller need to have only 3
properties apart from the phandle: request line, src master and
destination master. But the commit 6e8887f60f60 updated it incorrectly
while moving from platform code to DT. Fix it.

Cc: stable@vger.kernel.org # v3.10+
Fixes: 6e8887f60f60 ("ARM: SPEAr13xx: Pass generic DW DMAC platform data from DT")
Reported-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Olof Johansson <olof@lixom.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 Documentation/devicetree/bindings/dma/snps-dma.txt | 2 +-
 arch/arm/boot/dts/spear1340.dtsi                   | 4 ++--
 arch/arm/boot/dts/spear13xx.dtsi                   | 6 +++---
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/Documentation/devicetree/bindings/dma/snps-dma.txt b/Documentation/devicetree/bindings/dma/snps-dma.txt
index c261598164a7..17d43ca27f41 100644
--- a/Documentation/devicetree/bindings/dma/snps-dma.txt
+++ b/Documentation/devicetree/bindings/dma/snps-dma.txt
@@ -58,6 +58,6 @@ Example:
 		interrupts = <0 35 0x4>;
 		status = "disabled";
 		dmas = <&dmahost 12 0 1>,
-			<&dmahost 13 0 1 0>;
+			<&dmahost 13 1 0>;
 		dma-names = "rx", "rx";
 	};
diff --git a/arch/arm/boot/dts/spear1340.dtsi b/arch/arm/boot/dts/spear1340.dtsi
index 13e1aa33daa2..69bc407b4a5a 100644
--- a/arch/arm/boot/dts/spear1340.dtsi
+++ b/arch/arm/boot/dts/spear1340.dtsi
@@ -141,8 +141,8 @@
 				reg = <0xb4100000 0x1000>;
 				interrupts = <0 105 0x4>;
 				status = "disabled";
-				dmas = <&dwdma0 0x600 0 0 1>, /* 0xC << 11 */
-					<&dwdma0 0x680 0 1 0>; /* 0xD << 7 */
+				dmas = <&dwdma0 12 0 1>,
+					<&dwdma0 13 1 0>;
 				dma-names = "tx", "rx";
 			};
 
diff --git a/arch/arm/boot/dts/spear13xx.dtsi b/arch/arm/boot/dts/spear13xx.dtsi
index 40accc87e3a2..4e5a2770eac8 100644
--- a/arch/arm/boot/dts/spear13xx.dtsi
+++ b/arch/arm/boot/dts/spear13xx.dtsi
@@ -100,7 +100,7 @@
 			reg = <0xb2800000 0x1000>;
 			interrupts = <0 29 0x4>;
 			status = "disabled";
-			dmas = <&dwdma0 0 0 0 0>;
+			dmas = <&dwdma0 0 0 0>;
 			dma-names = "data";
 		};
 
@@ -288,8 +288,8 @@
 				#size-cells = <0>;
 				interrupts = <0 31 0x4>;
 				status = "disabled";
-				dmas = <&dwdma0 0x2000 0 0 0>, /* 0x4 << 11 */
-					<&dwdma0 0x0280 0 0 0>;  /* 0x5 << 7 */
+				dmas = <&dwdma0 4 0 0>,
+					<&dwdma0 5 0 0>;
 				dma-names = "tx", "rx";
 			};
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] arm: spear13xx: Fix spics gpio controller's warning
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (360 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] arm: spear600: Add missing interrupt-parent of rtc Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] rtc-opal: Fix handling of firmware error codes, prevent busy loops Sasha Levin
                   ` (154 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Viresh Kumar, Olof Johansson, Sasha Levin

From: Viresh Kumar <viresh.kumar@linaro.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f8975cb1b8a36d0839b6365235778dd9df1d04ca ]

This fixes the following warning by also sending the flags argument for
gpio controllers:

Property 'cs-gpios', cell 6 is not a phandle reference in
/ahb/apb/spi@e0100000

Fixes: 8113ba917dfa ("ARM: SPEAr: DT: Update device nodes")
Cc: stable@vger.kernel.org # v3.8+
Reported-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Olof Johansson <olof@lixom.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/boot/dts/spear1310-evb.dts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/spear1310-evb.dts b/arch/arm/boot/dts/spear1310-evb.dts
index d42c84b1df8d..9cff28d476be 100644
--- a/arch/arm/boot/dts/spear1310-evb.dts
+++ b/arch/arm/boot/dts/spear1310-evb.dts
@@ -349,7 +349,7 @@
 			spi0: spi@e0100000 {
 				status = "okay";
 				num-cs = <3>;
-				cs-gpios = <&gpio1 7 0>, <&spics 0>, <&spics 1>;
+				cs-gpios = <&gpio1 7 0>, <&spics 0 0>, <&spics 1 0>;
 
 				stmpe610@0 {
 					compatible = "st,stmpe610";
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] drm/radeon: adjust tested variable
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (362 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] rtc-opal: Fix handling of firmware error codes, prevent busy loops Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ext4: save error to disk in __ext4_grp_locked_error() Sasha Levin
                   ` (152 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Julia Lawall, Alex Deucher, Sasha Levin

From: Julia Lawall <Julia.Lawall@lip6.fr>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 3a61b527b4e1f285d21b6e9e623dc45cf8bb391f ]

Check the variable that was most recently initialized.

The semantic match that finds this problem is as follows:
(http://coccinelle.lip6.fr/)

// <smpl>
@@
expression x, y, f, g, e, m;
statement S1,S2,S3,S4;
@@

x = f(...);
if (\(<+...x...+>\&e\)) S1 else S2
(
x = g(...);
|
m = g(...,&x,...);
|
y = g(...);
*if (e)
 S3 else S4
)
// </smpl>

Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/gpu/drm/radeon/radeon_uvd.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c
index 6edcb5485092..b35ebabd6a9f 100644
--- a/drivers/gpu/drm/radeon/radeon_uvd.c
+++ b/drivers/gpu/drm/radeon/radeon_uvd.c
@@ -946,7 +946,7 @@ int radeon_uvd_calc_upll_dividers(struct radeon_device *rdev,
 		/* calc dclk divider with current vco freq */
 		dclk_div = radeon_uvd_calc_upll_post_div(vco_freq, dclk,
 							 pd_min, pd_even);
-		if (vclk_div > pd_max)
+		if (dclk_div > pd_max)
 			break; /* vco is too big, it has to stop */
 
 		/* calc score with current vco freq */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] rtc-opal: Fix handling of firmware error codes, prevent busy loops
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (361 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] arm: spear13xx: Fix spics gpio controller's warning Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] drm/radeon: adjust tested variable Sasha Levin
                   ` (153 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Stewart Smith, Michael Ellerman, Sasha Levin

From: Stewart Smith <stewart@linux.vnet.ibm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5b8b58063029f02da573120ef4dc9079822e3cda ]

According to the OPAL docs:
  skiboot-5.2.5/doc/opal-api/opal-rtc-read-3.txt
  skiboot-5.2.5/doc/opal-api/opal-rtc-write-4.txt

OPAL_HARDWARE may be returned from OPAL_RTC_READ or OPAL_RTC_WRITE and
this indicates either a transient or permanent error.

Prior to this patch, Linux was not dealing with OPAL_HARDWARE being a
permanent error particularly well, in that you could end up in a busy
loop.

This was not too hard to trigger on an AMI BMC based OpenPOWER machine
doing a continuous "ipmitool mc reset cold" to the BMC, the result of
that being that we'd get stuck in an infinite loop in
opal_get_rtc_time().

We now retry a few times before returning the error higher up the
stack.

Fixes: 16b1d26e77b1 ("rtc/tpo: Driver to support rtc and wakeup on PowerNV platform")
Cc: stable@vger.kernel.org # v3.19+
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/rtc/rtc-opal.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/rtc/rtc-opal.c b/drivers/rtc/rtc-opal.c
index 7061dcae2b09..482af0dda0b0 100644
--- a/drivers/rtc/rtc-opal.c
+++ b/drivers/rtc/rtc-opal.c
@@ -58,6 +58,7 @@ static void tm_to_opal(struct rtc_time *tm, u32 *y_m_d, u64 *h_m_s_ms)
 static int opal_get_rtc_time(struct device *dev, struct rtc_time *tm)
 {
 	long rc = OPAL_BUSY;
+	int retries = 10;
 	u32 y_m_d;
 	u64 h_m_s_ms;
 	__be32 __y_m_d;
@@ -67,8 +68,11 @@ static int opal_get_rtc_time(struct device *dev, struct rtc_time *tm)
 		rc = opal_rtc_read(&__y_m_d, &__h_m_s_ms);
 		if (rc == OPAL_BUSY_EVENT)
 			opal_poll_events(NULL);
-		else
+		else if (retries-- && (rc == OPAL_HARDWARE
+				       || rc == OPAL_INTERNAL_ERROR))
 			msleep(10);
+		else if (rc != OPAL_BUSY && rc != OPAL_BUSY_EVENT)
+			break;
 	}
 
 	if (rc != OPAL_SUCCESS)
@@ -84,6 +88,7 @@ static int opal_get_rtc_time(struct device *dev, struct rtc_time *tm)
 static int opal_set_rtc_time(struct device *dev, struct rtc_time *tm)
 {
 	long rc = OPAL_BUSY;
+	int retries = 10;
 	u32 y_m_d = 0;
 	u64 h_m_s_ms = 0;
 
@@ -92,8 +97,11 @@ static int opal_set_rtc_time(struct device *dev, struct rtc_time *tm)
 		rc = opal_rtc_write(y_m_d, h_m_s_ms);
 		if (rc == OPAL_BUSY_EVENT)
 			opal_poll_events(NULL);
-		else
+		else if (retries-- && (rc == OPAL_HARDWARE
+				       || rc == OPAL_INTERNAL_ERROR))
 			msleep(10);
+		else if (rc != OPAL_BUSY && rc != OPAL_BUSY_EVENT)
+			break;
 	}
 
 	return rc == OPAL_SUCCESS ? 0 : -EIO;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ext4: save error to disk in __ext4_grp_locked_error()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (363 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] drm/radeon: adjust tested variable Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] mm: hide a #warning for COMPILE_TEST Sasha Levin
                   ` (151 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Zhouyi Zhou, Theodore Ts'o, Sasha Levin

From: Zhouyi Zhou <zhouzhouyi@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 06f29cc81f0350261f59643a505010531130eea0 ]

In the function __ext4_grp_locked_error(), __save_error_info()
is called to save error info in super block block, but does not sync
that information to disk to info the subsequence fsck after reboot.

This patch writes the error information to disk.  After this patch,
I think there is no obvious EXT4 error handle branches which leads to
"Remounting filesystem read-only" will leave the disk partition miss
the subsequence fsck.

Signed-off-by: Zhouyi Zhou <zhouzhouyi@gmail.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Cc: stable@vger.kernel.org
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/ext4/super.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index b29a7ef4953e..fcc9333fcf19 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -669,6 +669,7 @@ __acquires(bitlock)
 	}
 
 	ext4_unlock_group(sb, grp);
+	ext4_commit_super(sb, 1);
 	ext4_handle_error(sb);
 	/*
 	 * We only get here in the ERRORS_RO case; relocking the group
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ext4: correct documentation for grpid mount option
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (365 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] mm: hide a #warning for COMPILE_TEST Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] console/dummy: leave .con_font_get set to NULL Sasha Levin
                   ` (149 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Ernesto A. Fernández, Theodore Ts'o, Sasha Levin

From: Ernesto A. Fernández <ernesto.mnd.fernandez@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9f0372488cc9243018a812e8cfbf27de650b187b ]

The grpid option is currently described as being the same as nogrpid.

Signed-off-by: Ernesto A. Fernández <ernesto.mnd.fernandez@gmail.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Cc: stable@vger.kernel.org
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 Documentation/filesystems/ext4.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Documentation/filesystems/ext4.txt b/Documentation/filesystems/ext4.txt
index 6c0108eb0137..2139ea253142 100644
--- a/Documentation/filesystems/ext4.txt
+++ b/Documentation/filesystems/ext4.txt
@@ -233,7 +233,7 @@ data_err=ignore(*)	Just print an error message if an error occurs
 data_err=abort		Abort the journal if an error occurs in a file
 			data buffer in ordered mode.
 
-grpid			Give objects the same group ID as their creator.
+grpid			New objects have the group ID of their parent.
 bsdgroups
 
 nogrpid		(*)	New objects have the group ID of their creator.
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mm: hide a #warning for COMPILE_TEST
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (364 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ext4: save error to disk in __ext4_grp_locked_error() Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ext4: correct documentation for grpid mount option Sasha Levin
                   ` (150 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Linus Torvalds, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit af27d9403f5b80685b79c88425086edccecaf711 ]

We get a warning about some slow configurations in randconfig kernels:

  mm/memory.c:83:2: error: #warning Unfortunate NUMA and NUMA Balancing config, growing page-frame for last_cpupid. [-Werror=cpp]

The warning is reasonable by itself, but gets in the way of randconfig
build testing, so I'm hiding it whenever CONFIG_COMPILE_TEST is set.

The warning was added in 2013 in commit 75980e97dacc ("mm: fold
page->_last_nid into page->flags where possible").

Cc: stable@vger.kernel.org
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 mm/memory.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/memory.c b/mm/memory.c
index fc449016d10e..942daab4dc57 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -71,7 +71,7 @@
 
 #include "internal.h"
 
-#ifdef LAST_CPUPID_NOT_IN_PAGE_FLAGS
+#if defined(LAST_CPUPID_NOT_IN_PAGE_FLAGS) && !defined(CONFIG_COMPILE_TEST)
 #warning Unfortunate NUMA and NUMA Balancing config, growing page-frame for last_cpupid.
 #endif
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] console/dummy: leave .con_font_get set to NULL
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (366 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ext4: correct documentation for grpid mount option Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] video: fbdev: atmel_lcdfb: fix display-timings lookup Sasha Levin
                   ` (148 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Nicolas Pitre, Nicolas Pitre, Bartlomiej Zolnierkiewicz, Sasha Levin

From: Nicolas Pitre <nicolas.pitre@linaro.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 724ba8b30b044aa0d94b1cd374fc15806cdd6f18 ]

When this method is set, the caller expects struct console_font fields
to be properly initialized when it returns. Leave it unset otherwise
nonsensical (leaked kernel stack) values are returned to user space.

Signed-off-by: Nicolas Pitre <nico@linaro.org>
Cc: stable@vger.kernel.org
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/video/console/dummycon.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/video/console/dummycon.c b/drivers/video/console/dummycon.c
index 0efc52f11ad0..b30e7d87804b 100644
--- a/drivers/video/console/dummycon.c
+++ b/drivers/video/console/dummycon.c
@@ -68,7 +68,6 @@ const struct consw dummy_con = {
     .con_switch =	DUMMY,
     .con_blank =	DUMMY,
     .con_font_set =	DUMMY,
-    .con_font_get =	DUMMY,
     .con_font_default =	DUMMY,
     .con_font_copy =	DUMMY,
     .con_set_palette =	DUMMY,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] video: fbdev: atmel_lcdfb: fix display-timings lookup
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (367 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] console/dummy: leave .con_font_get set to NULL Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] Btrfs: fix deadlock in run_delalloc_nocow Sasha Levin
                   ` (147 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Johan Hovold, Bartlomiej Zolnierkiewicz, Sasha Levin

From: Johan Hovold <johan@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9cb18db0701f6b74f0c45c23ad767b3ebebe37f6 ]

Fix child-node lookup during probe, which ended up searching the whole
device tree depth-first starting at the parent rather than just matching
on its children.

To make things worse, the parent display node was also prematurely
freed.

Note that the display and timings node references are never put after a
successful dt-initialisation so the nodes would leak on later probe
deferrals and on driver unbind.

Fixes: b985172b328a ("video: atmel_lcdfb: add device tree suport")
Cc: stable <stable@vger.kernel.org>     # 3.13
Cc: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
Cc: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/video/fbdev/atmel_lcdfb.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/video/fbdev/atmel_lcdfb.c b/drivers/video/fbdev/atmel_lcdfb.c
index 94a8d04e60f9..b16a1c16e212 100644
--- a/drivers/video/fbdev/atmel_lcdfb.c
+++ b/drivers/video/fbdev/atmel_lcdfb.c
@@ -1121,7 +1121,7 @@ static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo)
 		goto put_display_node;
 	}
 
-	timings_np = of_find_node_by_name(display_np, "display-timings");
+	timings_np = of_get_child_by_name(display_np, "display-timings");
 	if (!timings_np) {
 		dev_err(dev, "failed to find display-timings node\n");
 		ret = -ENODEV;
@@ -1142,6 +1142,12 @@ static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo)
 		fb_add_videomode(&fb_vm, &info->modelist);
 	}
 
+	/*
+	 * FIXME: Make sure we are not referencing any fields in display_np
+	 * and timings_np and drop our references to them before returning to
+	 * avoid leaking the nodes on probe deferral and driver unbind.
+	 */
+
 	return 0;
 
 put_timings_node:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Btrfs: fix deadlock in run_delalloc_nocow
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (368 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] video: fbdev: atmel_lcdfb: fix display-timings lookup Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] Btrfs: fix crash due to not cleaning up tree log block's dirty bits Sasha Levin
                   ` (146 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Liu Bo, David Sterba, Sasha Levin

From: Liu Bo <bo.li.liu@oracle.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e89166990f11c3f21e1649d760dd35f9e410321c ]

@cur_offset is not set back to what it should be (@cow_start) if
btrfs_next_leaf() returns something wrong, and the range [cow_start,
cur_offset) remains locked forever.

cc: <stable@vger.kernel.org>
Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Reviewed-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/btrfs/inode.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 1423231c7e49..884e90e9622a 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -1282,8 +1282,11 @@ static noinline int run_delalloc_nocow(struct inode *inode,
 		leaf = path->nodes[0];
 		if (path->slots[0] >= btrfs_header_nritems(leaf)) {
 			ret = btrfs_next_leaf(root, path);
-			if (ret < 0)
+			if (ret < 0) {
+				if (cow_start != (u64)-1)
+					cur_offset = cow_start;
 				goto error;
+			}
 			if (ret > 0)
 				break;
 			leaf = path->nodes[0];
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Btrfs: fix crash due to not cleaning up tree log block's dirty bits
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (369 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] Btrfs: fix deadlock in run_delalloc_nocow Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] Btrfs: fix unexpected -EEXIST when creating new inode Sasha Levin
                   ` (145 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Liu Bo, David Sterba, Sasha Levin

From: Liu Bo <bo.li.liu@oracle.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1846430c24d66e85cc58286b3319c82cd54debb2 ]

In cases that the whole fs flips into readonly status due to failures in
critical sections, then log tree's blocks are still dirty, and this leads
to a crash during umount time, the crash is about use-after-free,

umount
 -> close_ctree
    -> stop workers
    -> iput(btree_inode)
       -> iput_final
          -> write_inode_now
	     -> ...
	       -> queue job on stop'd workers

cc: <stable@vger.kernel.org> v3.12+
Fixes: 681ae50917df ("Btrfs: cleanup reserved space when freeing tree log on error")
Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Reviewed-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/btrfs/tree-log.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index 6ee954c62fe6..3cd1abf692dd 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -2343,6 +2343,9 @@ static noinline int walk_down_log_tree(struct btrfs_trans_handle *trans,
 							next);
 					btrfs_wait_tree_block_writeback(next);
 					btrfs_tree_unlock(next);
+				} else {
+					if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
+						clear_extent_buffer_dirty(next);
 				}
 
 				WARN_ON(root_owner !=
@@ -2422,6 +2425,9 @@ static noinline int walk_up_log_tree(struct btrfs_trans_handle *trans,
 							next);
 					btrfs_wait_tree_block_writeback(next);
 					btrfs_tree_unlock(next);
+				} else {
+					if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
+						clear_extent_buffer_dirty(next);
 				}
 
 				WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID);
@@ -2498,6 +2504,9 @@ static int walk_log_tree(struct btrfs_trans_handle *trans,
 				clean_tree_block(trans, log->fs_info, next);
 				btrfs_wait_tree_block_writeback(next);
 				btrfs_tree_unlock(next);
+			} else {
+				if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
+					clear_extent_buffer_dirty(next);
 			}
 
 			WARN_ON(log->root_key.objectid !=
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Btrfs: fix unexpected -EEXIST when creating new inode
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (370 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] Btrfs: fix crash due to not cleaning up tree log block's dirty bits Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ALSA: usb-audio: Fix UAC2 get_ctl request with a RANGE attribute Sasha Levin
                   ` (144 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Liu Bo, David Sterba, Sasha Levin

From: Liu Bo <bo.li.liu@oracle.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 900c9981680067573671ecc5cbfa7c5770be3a40 ]

The highest objectid, which is assigned to new inode, is decided at
the time of initializing fs roots.  However, in cases where log replay
gets processed, the btree which fs root owns might be changed, so we
have to search it again for the highest objectid, otherwise creating
new inode would end up with -EEXIST.

cc: <stable@vger.kernel.org> v4.4-rc6+
Fixes: f32e48e92596 ("Btrfs: Initialize btrfs_root->highest_objectid when loading tree root and subvolume roots")
Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Reviewed-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/btrfs/tree-log.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index 3cd1abf692dd..f355bd2d6ad8 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -26,6 +26,7 @@
 #include "print-tree.h"
 #include "backref.h"
 #include "hash.h"
+#include "inode-map.h"
 
 /* magic values for the inode_only field in btrfs_log_inode:
  *
@@ -5303,6 +5304,23 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree)
 						      path);
 		}
 
+		if (!ret && wc.stage == LOG_WALK_REPLAY_ALL) {
+			struct btrfs_root *root = wc.replay_dest;
+
+			btrfs_release_path(path);
+
+			/*
+			 * We have just replayed everything, and the highest
+			 * objectid of fs roots probably has changed in case
+			 * some inode_item's got replayed.
+			 *
+			 * root->objectid_mutex is not acquired as log replay
+			 * could only happen during mount.
+			 */
+			ret = btrfs_find_highest_objectid(root,
+						  &root->highest_objectid);
+		}
+
 		key.offset = found_key.offset - 1;
 		wc.replay_dest->log_root = NULL;
 		free_extent_buffer(log->node);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: usb-audio: Fix UAC2 get_ctl request with a RANGE attribute
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (371 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] Btrfs: fix unexpected -EEXIST when creating new inode Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ALSA: usb-audio: add implicit fb quirk for Behringer UFX1204 Sasha Levin
                   ` (143 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Kirill Marinushkin, Takashi Iwai, Sasha Levin

From: Kirill Marinushkin <k.marinushkin@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 447cae58cecd69392b74a4a42cd0ab9cabd816af ]

The layout of the UAC2 Control request and response varies depending on
the request type. With the current implementation, only the Layout 2
Parameter Block (with the 2-byte sized RANGE attribute) is handled
properly. For the Control requests with the 1-byte sized RANGE attribute
(Bass Control, Mid Control, Tremble Control), the response is parsed
incorrectly.

This commit:
* fixes the wLength field value in the request
* fixes parsing the range values from the response

Fixes: 23caaf19b11e ("ALSA: usb-mixer: Add support for Audio Class v2.0")
Signed-off-by: Kirill Marinushkin <k.marinushkin@gmail.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/usb/mixer.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
index 5455efc8cf63..76f7c95b38af 100644
--- a/sound/usb/mixer.c
+++ b/sound/usb/mixer.c
@@ -343,17 +343,20 @@ static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request,
 			    int validx, int *value_ret)
 {
 	struct snd_usb_audio *chip = cval->head.mixer->chip;
-	unsigned char buf[4 + 3 * sizeof(__u32)]; /* enough space for one range */
+	/* enough space for one range */
+	unsigned char buf[sizeof(__u16) + 3 * sizeof(__u32)];
 	unsigned char *val;
-	int idx = 0, ret, size;
+	int idx = 0, ret, val_size, size;
 	__u8 bRequest;
 
+	val_size = uac2_ctl_value_size(cval->val_type);
+
 	if (request == UAC_GET_CUR) {
 		bRequest = UAC2_CS_CUR;
-		size = uac2_ctl_value_size(cval->val_type);
+		size = val_size;
 	} else {
 		bRequest = UAC2_CS_RANGE;
-		size = sizeof(buf);
+		size = sizeof(__u16) + 3 * val_size;
 	}
 
 	memset(buf, 0, sizeof(buf));
@@ -386,16 +389,17 @@ static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request,
 		val = buf + sizeof(__u16);
 		break;
 	case UAC_GET_MAX:
-		val = buf + sizeof(__u16) * 2;
+		val = buf + sizeof(__u16) + val_size;
 		break;
 	case UAC_GET_RES:
-		val = buf + sizeof(__u16) * 3;
+		val = buf + sizeof(__u16) + val_size * 2;
 		break;
 	default:
 		return -EINVAL;
 	}
 
-	*value_ret = convert_signed_value(cval, snd_usb_combine_bytes(val, sizeof(__u16)));
+	*value_ret = convert_signed_value(cval,
+					  snd_usb_combine_bytes(val, val_size));
 
 	return 0;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: usb-audio: add implicit fb quirk for Behringer UFX1204
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (372 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ALSA: usb-audio: Fix UAC2 get_ctl request with a RANGE attribute Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ALSA: hda/realtek: PCI quirk for Fujitsu U7x7 Sasha Levin
                   ` (142 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Lassi Ylikojola, Takashi Iwai, Sasha Levin

From: Lassi Ylikojola <lassi.ylikojola@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5e35dc0338d85ccebacf3f77eca1e5dea73155e8 ]

Add quirk to ensure a sync endpoint is properly configured.
This patch is a fix for same symptoms on Behringer UFX1204 as patch
from Albertto Aquirre on Dec 8 2016 for Axe-Fx II.

Signed-off-by: Lassi Ylikojola <lassi.ylikojola@gmail.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/usb/pcm.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
index a51155197277..3351e2f9656d 100644
--- a/sound/usb/pcm.c
+++ b/sound/usb/pcm.c
@@ -343,6 +343,15 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
 		ep = 0x81;
 		iface = usb_ifnum_to_if(dev, 2);
 
+		if (!iface || iface->num_altsetting == 0)
+			return -EINVAL;
+
+		alts = &iface->altsetting[1];
+		goto add_sync_ep;
+	case USB_ID(0x1397, 0x0002):
+		ep = 0x81;
+		iface = usb_ifnum_to_if(dev, 1);
+
 		if (!iface || iface->num_altsetting == 0)
 			return -EINVAL;
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: hda/realtek: PCI quirk for Fujitsu U7x7
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (373 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ALSA: usb-audio: add implicit fb quirk for Behringer UFX1204 Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ALSA: seq: Fix racy pool initializations Sasha Levin
                   ` (141 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jan-Marek Glogowski, Takashi Iwai, Sasha Levin

From: Jan-Marek Glogowski <glogow@fbihome.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fdcc968a3b290407bcba9d4c90e2fba6d8d928f1 ]

These laptops have a combined jack to attach headsets, the U727 on
the left, the U757 on the right, but a headsets microphone doesn't
work. Using hdajacksensetest I found that pin 0x19 changed the
present state when plugging the headset, in addition to 0x21, but
didn't have the correct configuration (shown as "Not connected").

So this sets the configuration to the same values as the headphone
pin 0x21 except for the device type microphone, which makes it
work correctly. With the patch the configured pins for U727 are

Pin 0x12 (Internal Mic, Mobile-In): present = No
Pin 0x14 (Internal Speaker): present = No
Pin 0x19 (Black Mic, Left side): present = No
Pin 0x1d (Internal Aux): present = No
Pin 0x21 (Black Headphone, Left side): present = No

Signed-off-by: Jan-Marek Glogowski <glogow@fbihome.de>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/pci/hda/patch_realtek.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 191cba28670c..861dc57cb082 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -3119,6 +3119,19 @@ static void alc269_fixup_pincfg_no_hp_to_lineout(struct hda_codec *codec,
 		spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
 }
 
+static void alc269_fixup_pincfg_U7x7_headset_mic(struct hda_codec *codec,
+						 const struct hda_fixup *fix,
+						 int action)
+{
+	unsigned int cfg_headphone = snd_hda_codec_get_pincfg(codec, 0x21);
+	unsigned int cfg_headset_mic = snd_hda_codec_get_pincfg(codec, 0x19);
+
+	if (cfg_headphone && cfg_headset_mic == 0x411111f0)
+		snd_hda_codec_set_pincfg(codec, 0x19,
+			(cfg_headphone & ~AC_DEFCFG_DEVICE) |
+			(AC_JACK_MIC_IN << AC_DEFCFG_DEVICE_SHIFT));
+}
+
 static void alc269_fixup_hweq(struct hda_codec *codec,
 			       const struct hda_fixup *fix, int action)
 {
@@ -4675,6 +4688,7 @@ enum {
 	ALC269_FIXUP_LIFEBOOK_EXTMIC,
 	ALC269_FIXUP_LIFEBOOK_HP_PIN,
 	ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT,
+	ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC,
 	ALC269_FIXUP_AMIC,
 	ALC269_FIXUP_DMIC,
 	ALC269VB_FIXUP_AMIC,
@@ -4865,6 +4879,10 @@ static const struct hda_fixup alc269_fixups[] = {
 		.type = HDA_FIXUP_FUNC,
 		.v.func = alc269_fixup_pincfg_no_hp_to_lineout,
 	},
+	[ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = alc269_fixup_pincfg_U7x7_headset_mic,
+	},
 	[ALC269_FIXUP_AMIC] = {
 		.type = HDA_FIXUP_PINS,
 		.v.pins = (const struct hda_pintbl[]) {
@@ -5580,6 +5598,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x10cf, 0x159f, "Lifebook E780", ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT),
 	SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN),
 	SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN),
+	SND_PCI_QUIRK(0x10cf, 0x1629, "Lifebook U7x7", ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC),
 	SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
 	SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
 	SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_BXBT2807_MIC),
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: seq: Fix racy pool initializations
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (374 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ALSA: hda/realtek: PCI quirk for Fujitsu U7x7 Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] mvpp2: fix multicast address filter Sasha Levin
                   ` (140 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Takashi Iwai, Sasha Levin

From: Takashi Iwai <tiwai@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d15d662e89fc667b90cd294b0eb45694e33144da ]

ALSA sequencer core initializes the event pool on demand by invoking
snd_seq_pool_init() when the first write happens and the pool is
empty.  Meanwhile user can reset the pool size manually via ioctl
concurrently, and this may lead to UAF or out-of-bound accesses since
the function tries to vmalloc / vfree the buffer.

A simple fix is to just wrap the snd_seq_pool_init() call with the
recently introduced client->ioctl_mutex; as the calls for
snd_seq_pool_init() from other side are always protected with this
mutex, we can avoid the race.

Reported-by: 范龙飞 <long7573@126.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/core/seq/seq_clientmgr.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
index df524126a336..b9ce5da25938 100644
--- a/sound/core/seq/seq_clientmgr.c
+++ b/sound/core/seq/seq_clientmgr.c
@@ -1012,7 +1012,7 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
 {
 	struct snd_seq_client *client = file->private_data;
 	int written = 0, len;
-	int err = -EINVAL;
+	int err;
 	struct snd_seq_event event;
 
 	if (!(snd_seq_file_flags(file) & SNDRV_SEQ_LFLG_OUTPUT))
@@ -1027,11 +1027,15 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
 
 	/* allocate the pool now if the pool is not allocated yet */ 
 	if (client->pool->size > 0 && !snd_seq_write_pool_allocated(client)) {
-		if (snd_seq_pool_init(client->pool) < 0)
+		mutex_lock(&client->ioctl_mutex);
+		err = snd_seq_pool_init(client->pool);
+		mutex_unlock(&client->ioctl_mutex);
+		if (err < 0)
 			return -ENOMEM;
 	}
 
 	/* only process whole events */
+	err = -EINVAL;
 	while (count >= sizeof(struct snd_seq_event)) {
 		/* Read in the event header from the user */
 		len = sizeof(event);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mvpp2: fix multicast address filter
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (375 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ALSA: seq: Fix racy pool initializations Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] vfs: don't do RCU lookup of empty pathnames Sasha Levin
                   ` (139 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Mikulas Patocka, David S . Miller, Sasha Levin

From: Mikulas Patocka <mpatocka@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7ac8ff95f48cbfa609a060fd6a1e361dd62feeb3 ]

IPv6 doesn't work on the MacchiatoBIN board. It is caused by broken
multicast address filter in the mvpp2 driver.

The driver loads doesn't load any multicast entries if "allmulti" is not
set. This condition should be reversed.

The condition !netdev_mc_empty(dev) is useless (because
netdev_for_each_mc_addr is nop if the list is empty).

This patch also fixes a possible overflow of the multicast list - if
mvpp2_prs_mac_da_accept fails, we set the allmulti flag and retry.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/marvell/mvpp2.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
index 3e8b1bfb1f2e..eda6b0a2faf4 100644
--- a/drivers/net/ethernet/marvell/mvpp2.c
+++ b/drivers/net/ethernet/marvell/mvpp2.c
@@ -5583,6 +5583,7 @@ static void mvpp2_set_rx_mode(struct net_device *dev)
 	int id = port->id;
 	bool allmulti = dev->flags & IFF_ALLMULTI;
 
+retry:
 	mvpp2_prs_mac_promisc_set(priv, id, dev->flags & IFF_PROMISC);
 	mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_ALL, allmulti);
 	mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_IP6, allmulti);
@@ -5590,9 +5591,13 @@ static void mvpp2_set_rx_mode(struct net_device *dev)
 	/* Remove all port->id's mcast enries */
 	mvpp2_prs_mcast_del_all(priv, id);
 
-	if (allmulti && !netdev_mc_empty(dev)) {
-		netdev_for_each_mc_addr(ha, dev)
-			mvpp2_prs_mac_da_accept(priv, id, ha->addr, true);
+	if (!allmulti) {
+		netdev_for_each_mc_addr(ha, dev) {
+			if (mvpp2_prs_mac_da_accept(priv, id, ha->addr, true)) {
+				allmulti = true;
+				goto retry;
+			}
+		}
 	}
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] vfs: don't do RCU lookup of empty pathnames
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (376 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] mvpp2: fix multicast address filter Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: r820t: fix r820t_write_reg for KASAN Sasha Levin
                   ` (138 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Linus Torvalds, Sasha Levin

From: Linus Torvalds <torvalds@linux-foundation.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c0eb027e5aef70b71e5a38ee3e264dc0b497f343 ]

Normal pathname lookup doesn't allow empty pathnames, but using
AT_EMPTY_PATH (with name_to_handle_at() or fstatat(), for example) you
can trigger an empty pathname lookup.

And not only is the RCU lookup in that case entirely unnecessary
(because we'll obviously immediately finalize the end result), it is
actively wrong.

Why? An empth path is a special case that will return the original
'dirfd' dentry - and that dentry may not actually be RCU-free'd,
resulting in a potential use-after-free if we were to initialize the
path lazily under the RCU read lock and depend on complete_walk()
finalizing the dentry.

Found by syzkaller and KASAN.

Reported-by: Dmitry Vyukov <dvyukov@google.com>
Reported-by: Vegard Nossum <vegard.nossum@gmail.com>
Acked-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/namei.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/fs/namei.c b/fs/namei.c
index c7a6eabc02a5..0d97235019a9 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1894,6 +1894,9 @@ static int path_init(int dfd, const struct filename *name, unsigned int flags,
 	int retval = 0;
 	const char *s = name->name;
 
+	if (!*s)
+		flags &= ~LOOKUP_RCU;
+
 	nd->last_type = LAST_ROOT; /* if there are only slashes... */
 	nd->flags = flags | LOOKUP_JUMPED | LOOKUP_PARENT;
 	nd->depth = 0;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] media: r820t: fix r820t_write_reg for KASAN
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (377 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] vfs: don't do RCU lookup of empty pathnames Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ARM: dts: s5pv210: add interrupt-parent for ohci Sasha Levin
                   ` (137 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Mauro Carvalho Chehab, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 16c3ada89cff9a8c2a0eea34ffa1aa20af3f6008 ]

With CONFIG_KASAN, we get an overly long stack frame due to inlining
the register access functions:

drivers/media/tuners/r820t.c: In function 'generic_set_freq.isra.7':
drivers/media/tuners/r820t.c:1334:1: error: the frame size of 2880 bytes is larger than 2048 bytes [-Werror=frame-larger-than=]

This is caused by a gcc bug that has now been fixed in gcc-8.
To work around the problem, we can pass the register data
through a local variable that older gcc versions can optimize
out as well.

Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81715

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/tuners/r820t.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/media/tuners/r820t.c b/drivers/media/tuners/r820t.c
index 71159a58860f..4bfd64b0c0ad 100644
--- a/drivers/media/tuners/r820t.c
+++ b/drivers/media/tuners/r820t.c
@@ -410,9 +410,11 @@ static int r820t_write(struct r820t_priv *priv, u8 reg, const u8 *val,
 	return 0;
 }
 
-static int r820t_write_reg(struct r820t_priv *priv, u8 reg, u8 val)
+static inline int r820t_write_reg(struct r820t_priv *priv, u8 reg, u8 val)
 {
-	return r820t_write(priv, reg, &val, 1);
+	u8 tmp = val; /* work around GCC PR81715 with asan-stack=1 */
+
+	return r820t_write(priv, reg, &tmp, 1);
 }
 
 static int r820t_read_cache_reg(struct r820t_priv *priv, int reg)
@@ -425,17 +427,18 @@ static int r820t_read_cache_reg(struct r820t_priv *priv, int reg)
 		return -EINVAL;
 }
 
-static int r820t_write_reg_mask(struct r820t_priv *priv, u8 reg, u8 val,
+static inline int r820t_write_reg_mask(struct r820t_priv *priv, u8 reg, u8 val,
 				u8 bit_mask)
 {
+	u8 tmp = val;
 	int rc = r820t_read_cache_reg(priv, reg);
 
 	if (rc < 0)
 		return rc;
 
-	val = (rc & ~bit_mask) | (val & bit_mask);
+	tmp = (rc & ~bit_mask) | (tmp & bit_mask);
 
-	return r820t_write(priv, reg, &val, 1);
+	return r820t_write(priv, reg, &tmp, 1);
 }
 
 static int r820t_read(struct r820t_priv *priv, u8 reg, u8 *val, int len)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ARM: dts: s5pv210: add interrupt-parent for ohci
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (378 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: r820t: fix r820t_write_reg for KASAN Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] mm,vmscan: Make unregister_shrinker() no-op if register_shrinker() failed Sasha Levin
                   ` (136 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5c1037196b9ee75897c211972de370ed1336ec8f ]

The ohci-hcd node has an interrupt number but no interrupt-parent,
leading to a warning with current dtc versions:

arch/arm/boot/dts/s5pv210-aquila.dtb: Warning (interrupts_property): Missing interrupt-parent for /soc/ohci@ec300000
arch/arm/boot/dts/s5pv210-goni.dtb: Warning (interrupts_property): Missing interrupt-parent for /soc/ohci@ec300000
arch/arm/boot/dts/s5pv210-smdkc110.dtb: Warning (interrupts_property): Missing interrupt-parent for /soc/ohci@ec300000
arch/arm/boot/dts/s5pv210-smdkv210.dtb: Warning (interrupts_property): Missing interrupt-parent for /soc/ohci@ec300000
arch/arm/boot/dts/s5pv210-torbreck.dtb: Warning (interrupts_property): Missing interrupt-parent for /soc/ohci@ec300000

As seen from the related exynos dts files, the ohci and ehci controllers
always share one interrupt number, and the number is the same here as
well, so setting the same interrupt-parent is the reasonable solution
here.

Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/boot/dts/s5pv210.dtsi | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/boot/dts/s5pv210.dtsi b/arch/arm/boot/dts/s5pv210.dtsi
index 8344a0ee2b86..b03fe747b98c 100644
--- a/arch/arm/boot/dts/s5pv210.dtsi
+++ b/arch/arm/boot/dts/s5pv210.dtsi
@@ -461,6 +461,7 @@
 			compatible = "samsung,exynos4210-ohci";
 			reg = <0xec300000 0x100>;
 			interrupts = <23>;
+			interrupt-parent = <&vic1>;
 			clocks = <&clocks CLK_USB_HOST>;
 			clock-names = "usbhost";
 			#address-cells = <1>;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] cfg80211: check dev_set_name() return value
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (380 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] mm,vmscan: Make unregister_shrinker() no-op if register_shrinker() failed Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] xfrm: check id proto in validate_tmpl() Sasha Levin
                   ` (134 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Johannes Berg, Sasha Levin

From: Johannes Berg <johannes.berg@intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 59b179b48ce2a6076448a44531242ac2b3f6cef2 ]

syzbot reported a warning from rfkill_alloc(), and after a while
I think that the reason is that it was doing fault injection and
the dev_set_name() failed, leaving the name NULL, and we didn't
check the return value and got to rfkill_alloc() with a NULL name.
Since we really don't want a NULL name, we ought to check the
return value.

Fixes: fb28ad35906a ("net: struct device - replace bus_id with dev_name(), dev_set_name()")
Reported-by: syzbot+1ddfb3357e1d7bb5b5d3@syzkaller.appspotmail.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/wireless/core.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/net/wireless/core.c b/net/wireless/core.c
index 71e9b84847f3..a0e465845735 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -390,6 +390,8 @@ struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv,
 		if (rv)
 			goto use_default_name;
 	} else {
+		int rv;
+
 use_default_name:
 		/* NOTE:  This is *probably* safe w/out holding rtnl because of
 		 * the restrictions on phy names.  Probably this call could
@@ -397,7 +399,11 @@ struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv,
 		 * phyX.  But, might should add some locking and check return
 		 * value, and use a different name if this one exists?
 		 */
-		dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx);
+		rv = dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx);
+		if (rv < 0) {
+			kfree(rdev);
+			return NULL;
+		}
 	}
 
 	INIT_LIST_HEAD(&rdev->wdev_list);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mm,vmscan: Make unregister_shrinker() no-op if register_shrinker() failed.
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (379 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ARM: dts: s5pv210: add interrupt-parent for ohci Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] cfg80211: check dev_set_name() return value Sasha Levin
                   ` (135 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Tetsuo Handa, Aliaksei Karaliou, Al Viro, Sasha Levin

From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit bb422a738f6566f7439cd347d54e321e4fe92a9f ]

Syzbot caught an oops at unregister_shrinker() because combination of
commit 1d3d4437eae1bb29 ("vmscan: per-node deferred work") and fault
injection made register_shrinker() fail and the caller of
register_shrinker() did not check for failure.

----------
[  554.881422] FAULT_INJECTION: forcing a failure.
[  554.881422] name failslab, interval 1, probability 0, space 0, times 0
[  554.881438] CPU: 1 PID: 13231 Comm: syz-executor1 Not tainted 4.14.0-rc8+ #82
[  554.881443] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
[  554.881445] Call Trace:
[  554.881459]  dump_stack+0x194/0x257
[  554.881474]  ? arch_local_irq_restore+0x53/0x53
[  554.881486]  ? find_held_lock+0x35/0x1d0
[  554.881507]  should_fail+0x8c0/0xa40
[  554.881522]  ? fault_create_debugfs_attr+0x1f0/0x1f0
[  554.881537]  ? check_noncircular+0x20/0x20
[  554.881546]  ? find_next_zero_bit+0x2c/0x40
[  554.881560]  ? ida_get_new_above+0x421/0x9d0
[  554.881577]  ? find_held_lock+0x35/0x1d0
[  554.881594]  ? __lock_is_held+0xb6/0x140
[  554.881628]  ? check_same_owner+0x320/0x320
[  554.881634]  ? lock_downgrade+0x990/0x990
[  554.881649]  ? find_held_lock+0x35/0x1d0
[  554.881672]  should_failslab+0xec/0x120
[  554.881684]  __kmalloc+0x63/0x760
[  554.881692]  ? lock_downgrade+0x990/0x990
[  554.881712]  ? register_shrinker+0x10e/0x2d0
[  554.881721]  ? trace_event_raw_event_module_request+0x320/0x320
[  554.881737]  register_shrinker+0x10e/0x2d0
[  554.881747]  ? prepare_kswapd_sleep+0x1f0/0x1f0
[  554.881755]  ? _down_write_nest_lock+0x120/0x120
[  554.881765]  ? memcpy+0x45/0x50
[  554.881785]  sget_userns+0xbcd/0xe20
(...snipped...)
[  554.898693] kasan: CONFIG_KASAN_INLINE enabled
[  554.898724] kasan: GPF could be caused by NULL-ptr deref or user memory access
[  554.898732] general protection fault: 0000 [#1] SMP KASAN
[  554.898737] Dumping ftrace buffer:
[  554.898741]    (ftrace buffer empty)
[  554.898743] Modules linked in:
[  554.898752] CPU: 1 PID: 13231 Comm: syz-executor1 Not tainted 4.14.0-rc8+ #82
[  554.898755] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
[  554.898760] task: ffff8801d1dbe5c0 task.stack: ffff8801c9e38000
[  554.898772] RIP: 0010:__list_del_entry_valid+0x7e/0x150
[  554.898775] RSP: 0018:ffff8801c9e3f108 EFLAGS: 00010246
[  554.898780] RAX: dffffc0000000000 RBX: 0000000000000000 RCX: 0000000000000000
[  554.898784] RDX: 0000000000000000 RSI: ffff8801c53c6f98 RDI: ffff8801c53c6fa0
[  554.898788] RBP: ffff8801c9e3f120 R08: 1ffff100393c7d55 R09: 0000000000000004
[  554.898791] R10: ffff8801c9e3ef70 R11: 0000000000000000 R12: 0000000000000000
[  554.898795] R13: dffffc0000000000 R14: 1ffff100393c7e45 R15: ffff8801c53c6f98
[  554.898800] FS:  0000000000000000(0000) GS:ffff8801db300000(0000) knlGS:0000000000000000
[  554.898804] CS:  0010 DS: 002b ES: 002b CR0: 0000000080050033
[  554.898807] CR2: 00000000dbc23000 CR3: 00000001c7269000 CR4: 00000000001406e0
[  554.898813] DR0: 0000000020000000 DR1: 0000000020000000 DR2: 0000000000000000
[  554.898816] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000600
[  554.898818] Call Trace:
[  554.898828]  unregister_shrinker+0x79/0x300
[  554.898837]  ? perf_trace_mm_vmscan_writepage+0x750/0x750
[  554.898844]  ? down_write+0x87/0x120
[  554.898851]  ? deactivate_super+0x139/0x1b0
[  554.898857]  ? down_read+0x150/0x150
[  554.898864]  ? check_same_owner+0x320/0x320
[  554.898875]  deactivate_locked_super+0x64/0xd0
[  554.898883]  deactivate_super+0x141/0x1b0
----------

Since allowing register_shrinker() callers to call unregister_shrinker()
when register_shrinker() failed can simplify error recovery path, this
patch makes unregister_shrinker() no-op when register_shrinker() failed.
Also, reset shrinker->nr_deferred in case unregister_shrinker() was
by error called twice.

Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: Aliaksei Karaliou <akaraliou.dev@gmail.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Cc: Glauber Costa <glauber@scylladb.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 mm/vmscan.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index f16e330e1096..c6033260e739 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -223,10 +223,13 @@ EXPORT_SYMBOL(register_shrinker);
  */
 void unregister_shrinker(struct shrinker *shrinker)
 {
+	if (!shrinker->nr_deferred)
+		return;
 	down_write(&shrinker_rwsem);
 	list_del(&shrinker->list);
 	up_write(&shrinker_rwsem);
 	kfree(shrinker->nr_deferred);
+	shrinker->nr_deferred = NULL;
 }
 EXPORT_SYMBOL(unregister_shrinker);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] xfrm: check id proto in validate_tmpl()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (381 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] cfg80211: check dev_set_name() return value Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] blktrace: fix unlocked registration of tracepoints Sasha Levin
                   ` (133 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Cong Wang, Steffen Klassert, Sasha Levin

From: Cong Wang <xiyou.wangcong@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6a53b7593233ab9e4f96873ebacc0f653a55c3e1 ]

syzbot reported a kernel warning in xfrm_state_fini(), which
indicates that we have entries left in the list
net->xfrm.state_all whose proto is zero. And
xfrm_id_proto_match() doesn't consider them as a match with
IPSEC_PROTO_ANY in this case.

Proto with value 0 is probably not a valid value, at least
verify_newsa_info() doesn't consider it valid either.

This patch fixes it by checking the proto value in
validate_tmpl() and rejecting invalid ones, like what iproute2
does in xfrm_xfrmproto_getbyname().

Reported-by: syzbot <syzkaller@googlegroups.com>
Cc: Steffen Klassert <steffen.klassert@secunet.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/xfrm/xfrm_user.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index 30593cadd428..713194a3822f 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -1379,6 +1379,21 @@ static int validate_tmpl(int nr, struct xfrm_user_tmpl *ut, u16 family)
 		default:
 			return -EINVAL;
 		}
+
+		switch (ut[i].id.proto) {
+		case IPPROTO_AH:
+		case IPPROTO_ESP:
+		case IPPROTO_COMP:
+#if IS_ENABLED(CONFIG_IPV6)
+		case IPPROTO_ROUTING:
+		case IPPROTO_DSTOPTS:
+#endif
+		case IPSEC_PROTO_ANY:
+			break;
+		default:
+			return -EINVAL;
+		}
+
 	}
 
 	return 0;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Provide a function to create a NUL-terminated string from unterminated data
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (383 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] blktrace: fix unlocked registration of tracepoints Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] selinux: skip bounded transition processing if the policy isn't loaded Sasha Levin
                   ` (131 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: David Howells, Al Viro, Sasha Levin

From: David Howells <dhowells@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f35157417215ec138c920320c746fdb3e04ef1d5 ]

Provide a function, kmemdup_nul(), that will create a NUL-terminated string
from an unterminated character array where the length is known in advance.

This is better than kstrndup() in situations where we already know the
string length as the strnlen() in kstrndup() is superfluous.

Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/linux/string.h |  1 +
 mm/util.c              | 24 ++++++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/include/linux/string.h b/include/linux/string.h
index e40099e585c9..f8902cc0c10d 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -118,6 +118,7 @@ extern char *kstrdup(const char *s, gfp_t gfp);
 extern const char *kstrdup_const(const char *s, gfp_t gfp);
 extern char *kstrndup(const char *s, size_t len, gfp_t gfp);
 extern void *kmemdup(const void *src, size_t len, gfp_t gfp);
+extern char *kmemdup_nul(const char *s, size_t len, gfp_t gfp);
 
 extern char **argv_split(gfp_t gfp, const char *str, int *argcp);
 extern void argv_free(char **argv);
diff --git a/mm/util.c b/mm/util.c
index 68ff8a5361e7..4baa25c35af8 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -80,6 +80,8 @@ EXPORT_SYMBOL(kstrdup_const);
  * @s: the string to duplicate
  * @max: read at most @max chars from @s
  * @gfp: the GFP mask used in the kmalloc() call when allocating memory
+ *
+ * Note: Use kmemdup_nul() instead if the size is known exactly.
  */
 char *kstrndup(const char *s, size_t max, gfp_t gfp)
 {
@@ -117,6 +119,28 @@ void *kmemdup(const void *src, size_t len, gfp_t gfp)
 }
 EXPORT_SYMBOL(kmemdup);
 
+/**
+ * kmemdup_nul - Create a NUL-terminated string from unterminated data
+ * @s: The data to stringify
+ * @len: The size of the data
+ * @gfp: the GFP mask used in the kmalloc() call when allocating memory
+ */
+char *kmemdup_nul(const char *s, size_t len, gfp_t gfp)
+{
+	char *buf;
+
+	if (!s)
+		return NULL;
+
+	buf = kmalloc_track_caller(len + 1, gfp);
+	if (buf) {
+		memcpy(buf, s, len);
+		buf[len] = '\0';
+	}
+	return buf;
+}
+EXPORT_SYMBOL(kmemdup_nul);
+
 /**
  * memdup_user - duplicate memory region from user space
  *
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] blktrace: fix unlocked registration of tracepoints
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (382 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] xfrm: check id proto in validate_tmpl() Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] Provide a function to create a NUL-terminated string from unterminated data Sasha Levin
                   ` (132 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jens Axboe, Sasha Levin

From: Jens Axboe <axboe@kernel.dk>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a6da0024ffc19e0d47712bb5ca4fd083f76b07df ]

We need to ensure that tracepoints are registered and unregistered
with the users of them. The existing atomic count isn't enough for
that. Add a lock around the tracepoints, so we serialize access
to them.

This fixes cases where we have multiple users setting up and
tearing down tracepoints, like this:

CPU: 0 PID: 2995 Comm: syzkaller857118 Not tainted
4.14.0-rc5-next-20171018+ #36
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
Google 01/01/2011
Call Trace:
  __dump_stack lib/dump_stack.c:16 [inline]
  dump_stack+0x194/0x257 lib/dump_stack.c:52
  panic+0x1e4/0x41c kernel/panic.c:183
  __warn+0x1c4/0x1e0 kernel/panic.c:546
  report_bug+0x211/0x2d0 lib/bug.c:183
  fixup_bug+0x40/0x90 arch/x86/kernel/traps.c:177
  do_trap_no_signal arch/x86/kernel/traps.c:211 [inline]
  do_trap+0x260/0x390 arch/x86/kernel/traps.c:260
  do_error_trap+0x120/0x390 arch/x86/kernel/traps.c:297
  do_invalid_op+0x1b/0x20 arch/x86/kernel/traps.c:310
  invalid_op+0x18/0x20 arch/x86/entry/entry_64.S:905
RIP: 0010:tracepoint_add_func kernel/tracepoint.c:210 [inline]
RIP: 0010:tracepoint_probe_register_prio+0x397/0x9a0 kernel/tracepoint.c:283
RSP: 0018:ffff8801d1d1f6c0 EFLAGS: 00010293
RAX: ffff8801d22e8540 RBX: 00000000ffffffef RCX: ffffffff81710f07
RDX: 0000000000000000 RSI: ffffffff85b679c0 RDI: ffff8801d5f19818
RBP: ffff8801d1d1f7c8 R08: ffffffff81710c10 R09: 0000000000000004
R10: ffff8801d1d1f6b0 R11: 0000000000000003 R12: ffffffff817597f0
R13: 0000000000000000 R14: 00000000ffffffff R15: ffff8801d1d1f7a0
  tracepoint_probe_register+0x2a/0x40 kernel/tracepoint.c:304
  register_trace_block_rq_insert include/trace/events/block.h:191 [inline]
  blk_register_tracepoints+0x1e/0x2f0 kernel/trace/blktrace.c:1043
  do_blk_trace_setup+0xa10/0xcf0 kernel/trace/blktrace.c:542
  blk_trace_setup+0xbd/0x180 kernel/trace/blktrace.c:564
  sg_ioctl+0xc71/0x2d90 drivers/scsi/sg.c:1089
  vfs_ioctl fs/ioctl.c:45 [inline]
  do_vfs_ioctl+0x1b1/0x1520 fs/ioctl.c:685
  SYSC_ioctl fs/ioctl.c:700 [inline]
  SyS_ioctl+0x8f/0xc0 fs/ioctl.c:691
  entry_SYSCALL_64_fastpath+0x1f/0xbe
RIP: 0033:0x444339
RSP: 002b:00007ffe05bb5b18 EFLAGS: 00000206 ORIG_RAX: 0000000000000010
RAX: ffffffffffffffda RBX: 00000000006d66c0 RCX: 0000000000444339
RDX: 000000002084cf90 RSI: 00000000c0481273 RDI: 0000000000000009
RBP: 0000000000000082 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000206 R12: ffffffffffffffff
R13: 00000000c0481273 R14: 0000000000000000 R15: 0000000000000000

since we can now run these in parallel. Ensure that the exported helpers
for doing this are grabbing the queue trace mutex.

Reported-by: Steven Rostedt <rostedt@goodmis.org>
Tested-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/trace/blktrace.c | 32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index 483cecfa5c17..1994901ef239 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -57,7 +57,8 @@ static struct tracer_flags blk_tracer_flags = {
 };
 
 /* Global reference count of probes */
-static atomic_t blk_probes_ref = ATOMIC_INIT(0);
+static DEFINE_MUTEX(blk_probe_mutex);
+static int blk_probes_ref;
 
 static void blk_register_tracepoints(void);
 static void blk_unregister_tracepoints(void);
@@ -300,11 +301,26 @@ static void blk_trace_free(struct blk_trace *bt)
 	kfree(bt);
 }
 
+static void get_probe_ref(void)
+{
+	mutex_lock(&blk_probe_mutex);
+	if (++blk_probes_ref == 1)
+		blk_register_tracepoints();
+	mutex_unlock(&blk_probe_mutex);
+}
+
+static void put_probe_ref(void)
+{
+	mutex_lock(&blk_probe_mutex);
+	if (!--blk_probes_ref)
+		blk_unregister_tracepoints();
+	mutex_unlock(&blk_probe_mutex);
+}
+
 static void blk_trace_cleanup(struct blk_trace *bt)
 {
 	blk_trace_free(bt);
-	if (atomic_dec_and_test(&blk_probes_ref))
-		blk_unregister_tracepoints();
+	put_probe_ref();
 }
 
 int blk_trace_remove(struct request_queue *q)
@@ -527,8 +543,7 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
 		goto err;
 	}
 
-	if (atomic_inc_return(&blk_probes_ref) == 1)
-		blk_register_tracepoints();
+	get_probe_ref();
 
 	return 0;
 err:
@@ -1474,9 +1489,7 @@ static int blk_trace_remove_queue(struct request_queue *q)
 	if (bt == NULL)
 		return -EINVAL;
 
-	if (atomic_dec_and_test(&blk_probes_ref))
-		blk_unregister_tracepoints();
-
+	put_probe_ref();
 	blk_trace_free(bt);
 	return 0;
 }
@@ -1510,8 +1523,7 @@ static int blk_trace_setup_queue(struct request_queue *q,
 		goto free_bt;
 	}
 
-	if (atomic_inc_return(&blk_probes_ref) == 1)
-		blk_register_tracepoints();
+	get_probe_ref();
 	return 0;
 
 free_bt:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] selinux: ensure the context is NUL terminated in security_context_to_sid_core()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (385 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] selinux: skip bounded transition processing if the policy isn't loaded Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] netfilter: x_tables: fix int overflow in xt_alloc_table_info() Sasha Levin
                   ` (129 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Paul Moore, Sasha Levin

From: Paul Moore <paul@paul-moore.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ef28df55ac27e1e5cd122e19fa311d886d47a756 ]

The syzbot/syzkaller automated tests found a problem in
security_context_to_sid_core() during early boot (before we load the
SELinux policy) where we could potentially feed context strings without
NUL terminators into the strcmp() function.

We already guard against this during normal operation (after the SELinux
policy has been loaded) by making a copy of the context strings and
explicitly adding a NUL terminator to the end.  The patch extends this
protection to the early boot case (no loaded policy) by moving the context
copy earlier in security_context_to_sid_core().

Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Paul Moore <paul@paul-moore.com>
Reviewed-By: William Roberts <william.c.roberts@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 security/selinux/ss/services.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
index 9e2d82070915..3308a8215180 100644
--- a/security/selinux/ss/services.c
+++ b/security/selinux/ss/services.c
@@ -1236,27 +1236,25 @@ static int security_context_to_sid_core(const char *scontext, u32 scontext_len,
 	if (!scontext_len)
 		return -EINVAL;
 
+	/* Copy the string to allow changes and ensure a NUL terminator */
+	scontext2 = kmemdup_nul(scontext, scontext_len, gfp_flags);
+	if (!scontext2)
+		return -ENOMEM;
+
 	if (!ss_initialized) {
 		int i;
 
 		for (i = 1; i < SECINITSID_NUM; i++) {
-			if (!strcmp(initial_sid_to_string[i], scontext)) {
+			if (!strcmp(initial_sid_to_string[i], scontext2)) {
 				*sid = i;
-				return 0;
+				goto out;
 			}
 		}
 		*sid = SECINITSID_KERNEL;
-		return 0;
+		goto out;
 	}
 	*sid = SECSID_NULL;
 
-	/* Copy the string so that we can modify the copy as we parse it. */
-	scontext2 = kmalloc(scontext_len + 1, gfp_flags);
-	if (!scontext2)
-		return -ENOMEM;
-	memcpy(scontext2, scontext, scontext_len);
-	scontext2[scontext_len] = 0;
-
 	if (force) {
 		/* Save another copy for storing in uninterpreted form */
 		rc = -ENOMEM;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] selinux: skip bounded transition processing if the policy isn't loaded
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (384 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] Provide a function to create a NUL-terminated string from unterminated data Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] selinux: ensure the context is NUL terminated in security_context_to_sid_core() Sasha Levin
                   ` (130 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Paul Moore, Sasha Levin

From: Paul Moore <paul@paul-moore.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4b14752ec4e0d87126e636384cf37c8dd9df157c ]

We can't do anything reasonable in security_bounded_transition() if we
don't have a policy loaded, and in fact we could run into problems
with some of the code inside expecting a policy.  Fix these problems
like we do many others in security/selinux/ss/services.c by checking
to see if the policy is loaded (ss_initialized) and returning quickly
if it isn't.

Reported-by: syzbot <syzkaller-bugs@googlegroups.com>
Signed-off-by: Paul Moore <paul@paul-moore.com>
Acked-by: Stephen Smalley <sds@tycho.nsa.gov>
Reviewed-by: James Morris <james.l.morris@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 security/selinux/ss/services.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
index 3308a8215180..31d1d2ebd6f2 100644
--- a/security/selinux/ss/services.c
+++ b/security/selinux/ss/services.c
@@ -823,6 +823,9 @@ int security_bounded_transition(u32 old_sid, u32 new_sid)
 	int index;
 	int rc;
 
+	if (!ss_initialized)
+		return 0;
+
 	read_lock(&policy_rwlock);
 
 	rc = -EINVAL;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: x_tables: fix int overflow in xt_alloc_table_info()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (386 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] selinux: ensure the context is NUL terminated in security_context_to_sid_core() Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] crypto: x86/twofish-3way - Fix %rbp usage Sasha Levin
                   ` (128 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Dmitry Vyukov, Pablo Neira Ayuso, Sasha Levin

From: Dmitry Vyukov <dvyukov@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 889c604fd0b5f6d3b8694ade229ee44124de1127 ]

syzkaller triggered OOM kills by passing ipt_replace.size = -1
to IPT_SO_SET_REPLACE. The root cause is that SMP_ALIGN() in
xt_alloc_table_info() causes int overflow and the size check passes
when it should not. SMP_ALIGN() is no longer needed leftover.

Remove SMP_ALIGN() call in xt_alloc_table_info().

Reported-by: syzbot+4396883fa8c4f64e0175@syzkaller.appspotmail.com
Signed-off-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netfilter/x_tables.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c
index 703fc9ba6f20..a7d9d021c0c7 100644
--- a/net/netfilter/x_tables.c
+++ b/net/netfilter/x_tables.c
@@ -38,8 +38,6 @@ MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
 MODULE_DESCRIPTION("{ip,ip6,arp,eb}_tables backend module");
 
-#define SMP_ALIGN(x) (((x) + SMP_CACHE_BYTES-1) & ~(SMP_CACHE_BYTES-1))
-
 struct compat_delta {
 	unsigned int offset; /* offset in kernel */
 	int delta; /* delta in 32bit user land */
@@ -951,7 +949,7 @@ struct xt_table_info *xt_alloc_table_info(unsigned int size)
 	int cpu;
 
 	/* Pedantry: prevent them from hitting BUG() in vmalloc.c --RR */
-	if ((SMP_ALIGN(size) >> PAGE_SHIFT) + 2 > totalram_pages)
+	if ((size >> PAGE_SHIFT) + 2 > totalram_pages)
 		return NULL;
 
 	newinfo = kzalloc(XT_TABLE_INFO_SZ, GFP_KERNEL);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] crypto: x86/twofish-3way - Fix %rbp usage
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (387 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] netfilter: x_tables: fix int overflow in xt_alloc_table_info() Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] netfilter: x_tables: avoid out-of-bounds reads in xt_request_find_{match|target} Sasha Levin
                   ` (127 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Biggers, Herbert Xu, Sasha Levin

From: Eric Biggers <ebiggers@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d8c7fe9f2a486a6e5f0d5229ca43807af5ab22c6 ]

Using %rbp as a temporary register breaks frame pointer convention and
breaks stack traces when unwinding from an interrupt in the crypto code.

In twofish-3way, we can't simply replace %rbp with another register
because there are none available.  Instead, we use the stack to hold the
values that %rbp, %r11, and %r12 were holding previously.  Each of these
values represents the half of the output from the previous Feistel round
that is being passed on unchanged to the following round.  They are only
used once per round, when they are exchanged with %rax, %rbx, and %rcx.

As a result, we free up 3 registers (one per block) and can reassign
them so that %rbp is not used, and additionally %r14 and %r15 are not
used so they do not need to be saved/restored.

There may be a small overhead caused by replacing 'xchg REG, REG' with
the needed sequence 'mov MEM, REG; mov REG, MEM; mov REG, REG' once per
round.  But, counterintuitively, when I tested "ctr-twofish-3way" on a
Haswell processor, the new version was actually about 2% faster.
(Perhaps 'xchg' is not as well optimized as plain moves.)

Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Eric Biggers <ebiggers@google.com>
Reviewed-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/crypto/twofish-x86_64-asm_64-3way.S | 112 ++++++++++++++-------------
 1 file changed, 60 insertions(+), 52 deletions(-)

diff --git a/arch/x86/crypto/twofish-x86_64-asm_64-3way.S b/arch/x86/crypto/twofish-x86_64-asm_64-3way.S
index 1c3b7ceb36d2..e7273a606a07 100644
--- a/arch/x86/crypto/twofish-x86_64-asm_64-3way.S
+++ b/arch/x86/crypto/twofish-x86_64-asm_64-3way.S
@@ -55,29 +55,31 @@
 #define RAB1bl %bl
 #define RAB2bl %cl
 
+#define CD0 0x0(%rsp)
+#define CD1 0x8(%rsp)
+#define CD2 0x10(%rsp)
+
+# used only before/after all rounds
 #define RCD0 %r8
 #define RCD1 %r9
 #define RCD2 %r10
 
-#define RCD0d %r8d
-#define RCD1d %r9d
-#define RCD2d %r10d
-
-#define RX0 %rbp
-#define RX1 %r11
-#define RX2 %r12
+# used only during rounds
+#define RX0 %r8
+#define RX1 %r9
+#define RX2 %r10
 
-#define RX0d %ebp
-#define RX1d %r11d
-#define RX2d %r12d
+#define RX0d %r8d
+#define RX1d %r9d
+#define RX2d %r10d
 
-#define RY0 %r13
-#define RY1 %r14
-#define RY2 %r15
+#define RY0 %r11
+#define RY1 %r12
+#define RY2 %r13
 
-#define RY0d %r13d
-#define RY1d %r14d
-#define RY2d %r15d
+#define RY0d %r11d
+#define RY1d %r12d
+#define RY2d %r13d
 
 #define RT0 %rdx
 #define RT1 %rsi
@@ -85,6 +87,8 @@
 #define RT0d %edx
 #define RT1d %esi
 
+#define RT1bl %sil
+
 #define do16bit_ror(rot, op1, op2, T0, T1, tmp1, tmp2, ab, dst) \
 	movzbl ab ## bl,		tmp2 ## d; \
 	movzbl ab ## bh,		tmp1 ## d; \
@@ -92,6 +96,11 @@
 	op1##l T0(CTX, tmp2, 4),	dst ## d; \
 	op2##l T1(CTX, tmp1, 4),	dst ## d;
 
+#define swap_ab_with_cd(ab, cd, tmp)	\
+	movq cd, tmp;			\
+	movq ab, cd;			\
+	movq tmp, ab;
+
 /*
  * Combined G1 & G2 function. Reordered with help of rotates to have moves
  * at begining.
@@ -110,15 +119,15 @@
 	/* G1,2 && G2,2 */ \
 	do16bit_ror(32, xor, xor, Tx2, Tx3, RT0, RT1, ab ## 0, x ## 0); \
 	do16bit_ror(16, xor, xor, Ty3, Ty0, RT0, RT1, ab ## 0, y ## 0); \
-	xchgq cd ## 0, ab ## 0; \
+	swap_ab_with_cd(ab ## 0, cd ## 0, RT0); \
 	\
 	do16bit_ror(32, xor, xor, Tx2, Tx3, RT0, RT1, ab ## 1, x ## 1); \
 	do16bit_ror(16, xor, xor, Ty3, Ty0, RT0, RT1, ab ## 1, y ## 1); \
-	xchgq cd ## 1, ab ## 1; \
+	swap_ab_with_cd(ab ## 1, cd ## 1, RT0); \
 	\
 	do16bit_ror(32, xor, xor, Tx2, Tx3, RT0, RT1, ab ## 2, x ## 2); \
 	do16bit_ror(16, xor, xor, Ty3, Ty0, RT0, RT1, ab ## 2, y ## 2); \
-	xchgq cd ## 2, ab ## 2;
+	swap_ab_with_cd(ab ## 2, cd ## 2, RT0);
 
 #define enc_round_end(ab, x, y, n) \
 	addl y ## d,			x ## d; \
@@ -168,6 +177,16 @@
 	decrypt_round3(ba, dc, (n*2)+1); \
 	decrypt_round3(ba, dc, (n*2));
 
+#define push_cd()	\
+	pushq RCD2;	\
+	pushq RCD1;	\
+	pushq RCD0;
+
+#define pop_cd()	\
+	popq RCD0;	\
+	popq RCD1;	\
+	popq RCD2;
+
 #define inpack3(in, n, xy, m) \
 	movq 4*(n)(in),			xy ## 0; \
 	xorq w+4*m(CTX),		xy ## 0; \
@@ -223,11 +242,8 @@ ENTRY(__twofish_enc_blk_3way)
 	 *	%rdx: src, RIO
 	 *	%rcx: bool, if true: xor output
 	 */
-	pushq %r15;
-	pushq %r14;
 	pushq %r13;
 	pushq %r12;
-	pushq %rbp;
 	pushq %rbx;
 
 	pushq %rcx; /* bool xor */
@@ -235,40 +251,36 @@ ENTRY(__twofish_enc_blk_3way)
 
 	inpack_enc3();
 
-	encrypt_cycle3(RAB, RCD, 0);
-	encrypt_cycle3(RAB, RCD, 1);
-	encrypt_cycle3(RAB, RCD, 2);
-	encrypt_cycle3(RAB, RCD, 3);
-	encrypt_cycle3(RAB, RCD, 4);
-	encrypt_cycle3(RAB, RCD, 5);
-	encrypt_cycle3(RAB, RCD, 6);
-	encrypt_cycle3(RAB, RCD, 7);
+	push_cd();
+	encrypt_cycle3(RAB, CD, 0);
+	encrypt_cycle3(RAB, CD, 1);
+	encrypt_cycle3(RAB, CD, 2);
+	encrypt_cycle3(RAB, CD, 3);
+	encrypt_cycle3(RAB, CD, 4);
+	encrypt_cycle3(RAB, CD, 5);
+	encrypt_cycle3(RAB, CD, 6);
+	encrypt_cycle3(RAB, CD, 7);
+	pop_cd();
 
 	popq RIO; /* dst */
-	popq %rbp; /* bool xor */
+	popq RT1; /* bool xor */
 
-	testb %bpl, %bpl;
+	testb RT1bl, RT1bl;
 	jnz .L__enc_xor3;
 
 	outunpack_enc3(mov);
 
 	popq %rbx;
-	popq %rbp;
 	popq %r12;
 	popq %r13;
-	popq %r14;
-	popq %r15;
 	ret;
 
 .L__enc_xor3:
 	outunpack_enc3(xor);
 
 	popq %rbx;
-	popq %rbp;
 	popq %r12;
 	popq %r13;
-	popq %r14;
-	popq %r15;
 	ret;
 ENDPROC(__twofish_enc_blk_3way)
 
@@ -278,35 +290,31 @@ ENTRY(twofish_dec_blk_3way)
 	 *	%rsi: dst
 	 *	%rdx: src, RIO
 	 */
-	pushq %r15;
-	pushq %r14;
 	pushq %r13;
 	pushq %r12;
-	pushq %rbp;
 	pushq %rbx;
 
 	pushq %rsi; /* dst */
 
 	inpack_dec3();
 
-	decrypt_cycle3(RAB, RCD, 7);
-	decrypt_cycle3(RAB, RCD, 6);
-	decrypt_cycle3(RAB, RCD, 5);
-	decrypt_cycle3(RAB, RCD, 4);
-	decrypt_cycle3(RAB, RCD, 3);
-	decrypt_cycle3(RAB, RCD, 2);
-	decrypt_cycle3(RAB, RCD, 1);
-	decrypt_cycle3(RAB, RCD, 0);
+	push_cd();
+	decrypt_cycle3(RAB, CD, 7);
+	decrypt_cycle3(RAB, CD, 6);
+	decrypt_cycle3(RAB, CD, 5);
+	decrypt_cycle3(RAB, CD, 4);
+	decrypt_cycle3(RAB, CD, 3);
+	decrypt_cycle3(RAB, CD, 2);
+	decrypt_cycle3(RAB, CD, 1);
+	decrypt_cycle3(RAB, CD, 0);
+	pop_cd();
 
 	popq RIO; /* dst */
 
 	outunpack_dec3();
 
 	popq %rbx;
-	popq %rbp;
 	popq %r12;
 	popq %r13;
-	popq %r14;
-	popq %r15;
 	ret;
 ENDPROC(twofish_dec_blk_3way)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: x_tables: avoid out-of-bounds reads in xt_request_find_{match|target}
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (388 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] crypto: x86/twofish-3way - Fix %rbp usage Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] netfilter: ipt_CLUSTERIP: fix out-of-bounds accesses in clusterip_tg_check() Sasha Levin
                   ` (126 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Dumazet, Pablo Neira Ayuso, Sasha Levin

From: Eric Dumazet <edumazet@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit da17c73b6eb74aad3c3c0654394635675b623b3e ]

It looks like syzbot found its way into netfilter territory.

Issue here is that @name comes from user space and might
not be null terminated.

Out-of-bound reads happen, KASAN is not happy.

v2 added similar fix for xt_request_find_target(),
as Florian advised.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Acked-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netfilter/x_tables.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c
index a7d9d021c0c7..f4fcd9441561 100644
--- a/net/netfilter/x_tables.c
+++ b/net/netfilter/x_tables.c
@@ -209,6 +209,9 @@ xt_request_find_match(uint8_t nfproto, const char *name, uint8_t revision)
 {
 	struct xt_match *match;
 
+	if (strnlen(name, XT_EXTENSION_MAXNAMELEN) == XT_EXTENSION_MAXNAMELEN)
+		return ERR_PTR(-EINVAL);
+
 	match = xt_find_match(nfproto, name, revision);
 	if (IS_ERR(match)) {
 		request_module("%st_%s", xt_prefix[nfproto], name);
@@ -251,6 +254,9 @@ struct xt_target *xt_request_find_target(u8 af, const char *name, u8 revision)
 {
 	struct xt_target *target;
 
+	if (strnlen(name, XT_EXTENSION_MAXNAMELEN) == XT_EXTENSION_MAXNAMELEN)
+		return ERR_PTR(-EINVAL);
+
 	target = xt_find_target(af, name, revision);
 	if (IS_ERR(target)) {
 		request_module("%st_%s", xt_prefix[af], name);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: on sockopt() acquire sock lock only in the required scope
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (390 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] netfilter: ipt_CLUSTERIP: fix out-of-bounds accesses in clusterip_tg_check() Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] netfilter: xt_RATEEST: acquire xt_rateest_mutex for hash insert Sasha Levin
                   ` (124 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Paolo Abeni, Pablo Neira Ayuso, Sasha Levin

From: Paolo Abeni <pabeni@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 3f34cfae1238848fd53f25e5c8fd59da57901f4b ]

Syzbot reported several deadlocks in the netfilter area caused by
rtnl lock and socket lock being acquired with a different order on
different code paths, leading to backtraces like the following one:

======================================================
WARNING: possible circular locking dependency detected
4.15.0-rc9+ #212 Not tainted
------------------------------------------------------
syzkaller041579/3682 is trying to acquire lock:
  (sk_lock-AF_INET6){+.+.}, at: [<000000008775e4dd>] lock_sock
include/net/sock.h:1463 [inline]
  (sk_lock-AF_INET6){+.+.}, at: [<000000008775e4dd>]
do_ipv6_setsockopt.isra.8+0x3c5/0x39d0 net/ipv6/ipv6_sockglue.c:167

but task is already holding lock:
  (rtnl_mutex){+.+.}, at: [<000000004342eaa9>] rtnl_lock+0x17/0x20
net/core/rtnetlink.c:74

which lock already depends on the new lock.

the existing dependency chain (in reverse order) is:

-> #1 (rtnl_mutex){+.+.}:
        __mutex_lock_common kernel/locking/mutex.c:756 [inline]
        __mutex_lock+0x16f/0x1a80 kernel/locking/mutex.c:893
        mutex_lock_nested+0x16/0x20 kernel/locking/mutex.c:908
        rtnl_lock+0x17/0x20 net/core/rtnetlink.c:74
        register_netdevice_notifier+0xad/0x860 net/core/dev.c:1607
        tee_tg_check+0x1a0/0x280 net/netfilter/xt_TEE.c:106
        xt_check_target+0x22c/0x7d0 net/netfilter/x_tables.c:845
        check_target net/ipv6/netfilter/ip6_tables.c:538 [inline]
        find_check_entry.isra.7+0x935/0xcf0
net/ipv6/netfilter/ip6_tables.c:580
        translate_table+0xf52/0x1690 net/ipv6/netfilter/ip6_tables.c:749
        do_replace net/ipv6/netfilter/ip6_tables.c:1165 [inline]
        do_ip6t_set_ctl+0x370/0x5f0 net/ipv6/netfilter/ip6_tables.c:1691
        nf_sockopt net/netfilter/nf_sockopt.c:106 [inline]
        nf_setsockopt+0x67/0xc0 net/netfilter/nf_sockopt.c:115
        ipv6_setsockopt+0x115/0x150 net/ipv6/ipv6_sockglue.c:928
        udpv6_setsockopt+0x45/0x80 net/ipv6/udp.c:1422
        sock_common_setsockopt+0x95/0xd0 net/core/sock.c:2978
        SYSC_setsockopt net/socket.c:1849 [inline]
        SyS_setsockopt+0x189/0x360 net/socket.c:1828
        entry_SYSCALL_64_fastpath+0x29/0xa0

-> #0 (sk_lock-AF_INET6){+.+.}:
        lock_acquire+0x1d5/0x580 kernel/locking/lockdep.c:3914
        lock_sock_nested+0xc2/0x110 net/core/sock.c:2780
        lock_sock include/net/sock.h:1463 [inline]
        do_ipv6_setsockopt.isra.8+0x3c5/0x39d0 net/ipv6/ipv6_sockglue.c:167
        ipv6_setsockopt+0xd7/0x150 net/ipv6/ipv6_sockglue.c:922
        udpv6_setsockopt+0x45/0x80 net/ipv6/udp.c:1422
        sock_common_setsockopt+0x95/0xd0 net/core/sock.c:2978
        SYSC_setsockopt net/socket.c:1849 [inline]
        SyS_setsockopt+0x189/0x360 net/socket.c:1828
        entry_SYSCALL_64_fastpath+0x29/0xa0

other info that might help us debug this:

  Possible unsafe locking scenario:

        CPU0                    CPU1
        ----                    ----
   lock(rtnl_mutex);
                                lock(sk_lock-AF_INET6);
                                lock(rtnl_mutex);
   lock(sk_lock-AF_INET6);

  *** DEADLOCK ***

1 lock held by syzkaller041579/3682:
  #0:  (rtnl_mutex){+.+.}, at: [<000000004342eaa9>] rtnl_lock+0x17/0x20
net/core/rtnetlink.c:74

The problem, as Florian noted, is that nf_setsockopt() is always
called with the socket held, even if the lock itself is required only
for very tight scopes and only for some operation.

This patch addresses the issues moving the lock_sock() call only
where really needed, namely in ipv*_getorigdst(), so that nf_setsockopt()
does not need anymore to acquire both locks.

Fixes: 22265a5c3c10 ("netfilter: xt_TEE: resolve oif using netdevice notifiers")
Reported-by: syzbot+a4c2dc980ac1af699b36@syzkaller.appspotmail.com
Suggested-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>

Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv4/ip_sockglue.c                         | 14 ++++----------
 net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c |  6 +++++-
 net/ipv6/ipv6_sockglue.c                       | 17 +++++------------
 net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c | 18 ++++++++++++------
 4 files changed, 26 insertions(+), 29 deletions(-)

diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
index b6c7bdea4853..c32c3dd2f639 100644
--- a/net/ipv4/ip_sockglue.c
+++ b/net/ipv4/ip_sockglue.c
@@ -1203,11 +1203,8 @@ int ip_setsockopt(struct sock *sk, int level,
 	if (err == -ENOPROTOOPT && optname != IP_HDRINCL &&
 			optname != IP_IPSEC_POLICY &&
 			optname != IP_XFRM_POLICY &&
-			!ip_mroute_opt(optname)) {
-		lock_sock(sk);
+			!ip_mroute_opt(optname))
 		err = nf_setsockopt(sk, PF_INET, optname, optval, optlen);
-		release_sock(sk);
-	}
 #endif
 	return err;
 }
@@ -1232,12 +1229,9 @@ int compat_ip_setsockopt(struct sock *sk, int level, int optname,
 	if (err == -ENOPROTOOPT && optname != IP_HDRINCL &&
 			optname != IP_IPSEC_POLICY &&
 			optname != IP_XFRM_POLICY &&
-			!ip_mroute_opt(optname)) {
-		lock_sock(sk);
-		err = compat_nf_setsockopt(sk, PF_INET, optname,
-					   optval, optlen);
-		release_sock(sk);
-	}
+			!ip_mroute_opt(optname))
+		err = compat_nf_setsockopt(sk, PF_INET, optname, optval,
+					   optlen);
 #endif
 	return err;
 }
diff --git a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c
index 30ad9554b5e9..406d69f033ac 100644
--- a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c
+++ b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c
@@ -261,15 +261,19 @@ getorigdst(struct sock *sk, int optval, void __user *user, int *len)
 	struct nf_conntrack_tuple tuple;
 
 	memset(&tuple, 0, sizeof(tuple));
+
+	lock_sock(sk);
 	tuple.src.u3.ip = inet->inet_rcv_saddr;
 	tuple.src.u.tcp.port = inet->inet_sport;
 	tuple.dst.u3.ip = inet->inet_daddr;
 	tuple.dst.u.tcp.port = inet->inet_dport;
 	tuple.src.l3num = PF_INET;
 	tuple.dst.protonum = sk->sk_protocol;
+	release_sock(sk);
 
 	/* We only do TCP and SCTP at the moment: is there a better way? */
-	if (sk->sk_protocol != IPPROTO_TCP && sk->sk_protocol != IPPROTO_SCTP) {
+	if (tuple.dst.protonum != IPPROTO_TCP &&
+	    tuple.dst.protonum != IPPROTO_SCTP) {
 		pr_debug("SO_ORIGINAL_DST: Not a TCP/SCTP socket\n");
 		return -ENOPROTOOPT;
 	}
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
index 4449ad1f8114..0e2da9f8d6bb 100644
--- a/net/ipv6/ipv6_sockglue.c
+++ b/net/ipv6/ipv6_sockglue.c
@@ -896,12 +896,8 @@ int ipv6_setsockopt(struct sock *sk, int level, int optname,
 #ifdef CONFIG_NETFILTER
 	/* we need to exclude all possible ENOPROTOOPTs except default case */
 	if (err == -ENOPROTOOPT && optname != IPV6_IPSEC_POLICY &&
-			optname != IPV6_XFRM_POLICY) {
-		lock_sock(sk);
-		err = nf_setsockopt(sk, PF_INET6, optname, optval,
-				optlen);
-		release_sock(sk);
-	}
+			optname != IPV6_XFRM_POLICY)
+		err = nf_setsockopt(sk, PF_INET6, optname, optval, optlen);
 #endif
 	return err;
 }
@@ -931,12 +927,9 @@ int compat_ipv6_setsockopt(struct sock *sk, int level, int optname,
 #ifdef CONFIG_NETFILTER
 	/* we need to exclude all possible ENOPROTOOPTs except default case */
 	if (err == -ENOPROTOOPT && optname != IPV6_IPSEC_POLICY &&
-	    optname != IPV6_XFRM_POLICY) {
-		lock_sock(sk);
-		err = compat_nf_setsockopt(sk, PF_INET6, optname,
-					   optval, optlen);
-		release_sock(sk);
-	}
+	    optname != IPV6_XFRM_POLICY)
+		err = compat_nf_setsockopt(sk, PF_INET6, optname, optval,
+					   optlen);
 #endif
 	return err;
 }
diff --git a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
index 4ba0c34c627b..6bb16657db3a 100644
--- a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
+++ b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
@@ -232,20 +232,27 @@ static struct nf_hook_ops ipv6_conntrack_ops[] __read_mostly = {
 static int
 ipv6_getorigdst(struct sock *sk, int optval, void __user *user, int *len)
 {
-	const struct inet_sock *inet = inet_sk(sk);
+	struct nf_conntrack_tuple tuple = { .src.l3num = NFPROTO_IPV6 };
 	const struct ipv6_pinfo *inet6 = inet6_sk(sk);
+	const struct inet_sock *inet = inet_sk(sk);
 	const struct nf_conntrack_tuple_hash *h;
 	struct sockaddr_in6 sin6;
-	struct nf_conntrack_tuple tuple = { .src.l3num = NFPROTO_IPV6 };
 	struct nf_conn *ct;
+	__be32 flow_label;
+	int bound_dev_if;
 
+	lock_sock(sk);
 	tuple.src.u3.in6 = sk->sk_v6_rcv_saddr;
 	tuple.src.u.tcp.port = inet->inet_sport;
 	tuple.dst.u3.in6 = sk->sk_v6_daddr;
 	tuple.dst.u.tcp.port = inet->inet_dport;
 	tuple.dst.protonum = sk->sk_protocol;
+	bound_dev_if = sk->sk_bound_dev_if;
+	flow_label = inet6->flow_label;
+	release_sock(sk);
 
-	if (sk->sk_protocol != IPPROTO_TCP && sk->sk_protocol != IPPROTO_SCTP)
+	if (tuple.dst.protonum != IPPROTO_TCP &&
+	    tuple.dst.protonum != IPPROTO_SCTP)
 		return -ENOPROTOOPT;
 
 	if (*len < 0 || (unsigned int) *len < sizeof(sin6))
@@ -263,14 +270,13 @@ ipv6_getorigdst(struct sock *sk, int optval, void __user *user, int *len)
 
 	sin6.sin6_family = AF_INET6;
 	sin6.sin6_port = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u.tcp.port;
-	sin6.sin6_flowinfo = inet6->flow_label & IPV6_FLOWINFO_MASK;
+	sin6.sin6_flowinfo = flow_label & IPV6_FLOWINFO_MASK;
 	memcpy(&sin6.sin6_addr,
 		&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u3.in6,
 					sizeof(sin6.sin6_addr));
 
 	nf_ct_put(ct);
-	sin6.sin6_scope_id = ipv6_iface_scope_id(&sin6.sin6_addr,
-						 sk->sk_bound_dev_if);
+	sin6.sin6_scope_id = ipv6_iface_scope_id(&sin6.sin6_addr, bound_dev_if);
 	return copy_to_user(user, &sin6, sizeof(sin6)) ? -EFAULT : 0;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: ipt_CLUSTERIP: fix out-of-bounds accesses in clusterip_tg_check()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (389 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] netfilter: x_tables: avoid out-of-bounds reads in xt_request_find_{match|target} Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] netfilter: on sockopt() acquire sock lock only in the required scope Sasha Levin
                   ` (125 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Dmitry Vyukov, Pablo Neira Ayuso, Sasha Levin

From: Dmitry Vyukov <dvyukov@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1a38956cce5eabd7b74f94bab70265e4df83165e ]

Commit 136e92bbec0a switched local_nodes from an array to a bitmask
but did not add proper bounds checks. As the result
clusterip_config_init_nodelist() can both over-read
ipt_clusterip_tgt_info.local_nodes and over-write
clusterip_config.local_nodes.

Add bounds checks for both.

Fixes: 136e92bbec0a ("[NETFILTER] CLUSTERIP: use a bitmap to store node responsibility data")
Signed-off-by: Dmitry Vyukov <dvyukov@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv4/netfilter/ipt_CLUSTERIP.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c
index 771ab3d01ad3..d098013855f0 100644
--- a/net/ipv4/netfilter/ipt_CLUSTERIP.c
+++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c
@@ -365,7 +365,7 @@ static int clusterip_tg_check(const struct xt_tgchk_param *par)
 	struct ipt_clusterip_tgt_info *cipinfo = par->targinfo;
 	const struct ipt_entry *e = par->entryinfo;
 	struct clusterip_config *config;
-	int ret;
+	int ret, i;
 
 	if (cipinfo->hash_mode != CLUSTERIP_HASHMODE_SIP &&
 	    cipinfo->hash_mode != CLUSTERIP_HASHMODE_SIP_SPT &&
@@ -379,8 +379,18 @@ static int clusterip_tg_check(const struct xt_tgchk_param *par)
 		pr_info("Please specify destination IP\n");
 		return -EINVAL;
 	}
-
-	/* FIXME: further sanity checks */
+	if (cipinfo->num_local_nodes > ARRAY_SIZE(cipinfo->local_nodes)) {
+		pr_info("bad num_local_nodes %u\n", cipinfo->num_local_nodes);
+		return -EINVAL;
+	}
+	for (i = 0; i < cipinfo->num_local_nodes; i++) {
+		if (cipinfo->local_nodes[i] - 1 >=
+		    sizeof(config->local_nodes) * 8) {
+			pr_info("bad local_nodes[%d] %u\n",
+				i, cipinfo->local_nodes[i]);
+			return -EINVAL;
+		}
+	}
 
 	config = clusterip_config_find_get(par->net, e->ip.dst.s_addr, 1);
 	if (!config) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: xt_RATEEST: acquire xt_rateest_mutex for hash insert
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (391 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] netfilter: on sockopt() acquire sock lock only in the required scope Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] net: avoid skb_warn_bad_offload on IS_ERR Sasha Levin
                   ` (123 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Cong Wang, Pablo Neira Ayuso, Sasha Levin

From: Cong Wang <xiyou.wangcong@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7dc68e98757a8eccf8ca7a53a29b896f1eef1f76 ]

rateest_hash is supposed to be protected by xt_rateest_mutex,
and, as suggested by Eric, lookup and insert should be atomic,
so we should acquire the xt_rateest_mutex once for both.

So introduce a non-locking helper for internal use and keep the
locking one for external.

Reported-by: <syzbot+5cb189720978275e4c75@syzkaller.appspotmail.com>
Fixes: 5859034d7eb8 ("[NETFILTER]: x_tables: add RATEEST target")
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Reviewed-by: Florian Westphal <fw@strlen.de>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netfilter/xt_RATEEST.c | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/net/netfilter/xt_RATEEST.c b/net/netfilter/xt_RATEEST.c
index 604df6fae6fc..0be96f8475f7 100644
--- a/net/netfilter/xt_RATEEST.c
+++ b/net/netfilter/xt_RATEEST.c
@@ -40,23 +40,31 @@ static void xt_rateest_hash_insert(struct xt_rateest *est)
 	hlist_add_head(&est->list, &rateest_hash[h]);
 }
 
-struct xt_rateest *xt_rateest_lookup(const char *name)
+static struct xt_rateest *__xt_rateest_lookup(const char *name)
 {
 	struct xt_rateest *est;
 	unsigned int h;
 
 	h = xt_rateest_hash(name);
-	mutex_lock(&xt_rateest_mutex);
 	hlist_for_each_entry(est, &rateest_hash[h], list) {
 		if (strcmp(est->name, name) == 0) {
 			est->refcnt++;
-			mutex_unlock(&xt_rateest_mutex);
 			return est;
 		}
 	}
-	mutex_unlock(&xt_rateest_mutex);
+
 	return NULL;
 }
+
+struct xt_rateest *xt_rateest_lookup(const char *name)
+{
+	struct xt_rateest *est;
+
+	mutex_lock(&xt_rateest_mutex);
+	est = __xt_rateest_lookup(name);
+	mutex_unlock(&xt_rateest_mutex);
+	return est;
+}
 EXPORT_SYMBOL_GPL(xt_rateest_lookup);
 
 void xt_rateest_put(struct xt_rateest *est)
@@ -104,8 +112,10 @@ static int xt_rateest_tg_checkentry(const struct xt_tgchk_param *par)
 		rnd_inited = true;
 	}
 
-	est = xt_rateest_lookup(info->name);
+	mutex_lock(&xt_rateest_mutex);
+	est = __xt_rateest_lookup(info->name);
 	if (est) {
+		mutex_unlock(&xt_rateest_mutex);
 		/*
 		 * If estimator parameters are specified, they must match the
 		 * existing estimator.
@@ -143,11 +153,13 @@ static int xt_rateest_tg_checkentry(const struct xt_tgchk_param *par)
 
 	info->est = est;
 	xt_rateest_hash_insert(est);
+	mutex_unlock(&xt_rateest_mutex);
 	return 0;
 
 err2:
 	kfree(est);
 err1:
+	mutex_unlock(&xt_rateest_mutex);
 	return ret;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net: avoid skb_warn_bad_offload on IS_ERR
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (392 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] netfilter: xt_RATEEST: acquire xt_rateest_mutex for hash insert Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ASoC: ux500: add MODULE_LICENSE tag Sasha Levin
                   ` (122 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Willem de Bruijn, David S . Miller, Sasha Levin

From: Willem de Bruijn <willemb@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8d74e9f88d65af8bb2e095aff506aa6eac755ada ]

skb_warn_bad_offload warns when packets enter the GSO stack that
require skb_checksum_help or vice versa. Do not warn on arbitrary
bad packets. Packet sockets can craft many. Syzkaller was able to
demonstrate another one with eth_type games.

In particular, suppress the warning when segmentation returns an
error, which is for reasons other than checksum offload.

See also commit 36c92474498a ("net: WARN if skb_checksum_help() is
called on skb requiring segmentation") for context on this warning.

Signed-off-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/core/dev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index 196476c8b7d5..0ccae464b46e 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2513,7 +2513,7 @@ struct sk_buff *__skb_gso_segment(struct sk_buff *skb,
 
 	segs = skb_mac_gso_segment(skb, features);
 
-	if (unlikely(skb_needs_check(skb, tx_path)))
+	if (unlikely(skb_needs_check(skb, tx_path) && !IS_ERR(segs)))
 		skb_warn_bad_offload(skb);
 
 	return segs;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ASoC: ux500: add MODULE_LICENSE tag
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (393 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] net: avoid skb_warn_bad_offload on IS_ERR Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] dn_getsockoptdecnet: move nf_{get/set}sockopt outside sock lock Sasha Levin
                   ` (121 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Mark Brown, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1783c9d7cb7bc3181b9271665959b87280d98d8e ]

This adds MODULE_LICENSE/AUTHOR/DESCRIPTION tags to the ux500
platform drivers, to avoid these build warnings:

WARNING: modpost: missing MODULE_LICENSE() in sound/soc/ux500/snd-soc-ux500-plat-dma.o
WARNING: modpost: missing MODULE_LICENSE() in sound/soc/ux500/snd-soc-ux500-mach-mop500.o

The company no longer exists, so the email addresses of the authors
don't work any more, but I've added them anyway for consistency.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/soc/ux500/mop500.c    | 4 ++++
 sound/soc/ux500/ux500_pcm.c | 5 +++++
 2 files changed, 9 insertions(+)

diff --git a/sound/soc/ux500/mop500.c b/sound/soc/ux500/mop500.c
index 4e0c0e502ade..49a1b8050bc7 100644
--- a/sound/soc/ux500/mop500.c
+++ b/sound/soc/ux500/mop500.c
@@ -163,3 +163,7 @@ static struct platform_driver snd_soc_mop500_driver = {
 };
 
 module_platform_driver(snd_soc_mop500_driver);
+
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("ASoC MOP500 board driver");
+MODULE_AUTHOR("Ola Lilja");
diff --git a/sound/soc/ux500/ux500_pcm.c b/sound/soc/ux500/ux500_pcm.c
index 51a66a87305a..b4ab903fca1b 100644
--- a/sound/soc/ux500/ux500_pcm.c
+++ b/sound/soc/ux500/ux500_pcm.c
@@ -166,3 +166,8 @@ int ux500_pcm_unregister_platform(struct platform_device *pdev)
 	return 0;
 }
 EXPORT_SYMBOL_GPL(ux500_pcm_unregister_platform);
+
+MODULE_AUTHOR("Ola Lilja");
+MODULE_AUTHOR("Roger Nilsson");
+MODULE_DESCRIPTION("ASoC UX500 driver");
+MODULE_LICENSE("GPL v2");
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] dn_getsockoptdecnet: move nf_{get/set}sockopt outside sock lock
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (394 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ASoC: ux500: add MODULE_LICENSE tag Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] video: fbdev/mmp: add MODULE_LICENSE Sasha Levin
                   ` (120 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Paolo Abeni, David S . Miller, Sasha Levin

From: Paolo Abeni <pabeni@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit dfec091439bb2acf763497cfc58f2bdfc67c56b7 ]

After commit 3f34cfae1238 ("netfilter: on sockopt() acquire sock lock
only in the required scope"), the caller of nf_{get/set}sockopt() must
not hold any lock, but, in such changeset, I forgot to cope with DECnet.

This commit addresses the issue moving the nf call outside the lock,
in the dn_{get,set}sockopt() with the same schema currently used by
ipv4 and ipv6. Also moves the unhandled sockopts of the end of the main
switch statements, to improve code readability.

Reported-by: Petr Vandrovec <petr@vandrovec.name>
BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=198791#c2
Fixes: 3f34cfae1238 ("netfilter: on sockopt() acquire sock lock only in the required scope")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/decnet/af_decnet.c | 62 +++++++++++++++++++++++++++-----------------------
 1 file changed, 33 insertions(+), 29 deletions(-)

diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c
index 2783c538ec19..e31f0da7537a 100644
--- a/net/decnet/af_decnet.c
+++ b/net/decnet/af_decnet.c
@@ -1337,6 +1337,12 @@ static int dn_setsockopt(struct socket *sock, int level, int optname, char __use
 	lock_sock(sk);
 	err = __dn_setsockopt(sock, level, optname, optval, optlen, 0);
 	release_sock(sk);
+#ifdef CONFIG_NETFILTER
+	/* we need to exclude all possible ENOPROTOOPTs except default case */
+	if (err == -ENOPROTOOPT && optname != DSO_LINKINFO &&
+	    optname != DSO_STREAM && optname != DSO_SEQPACKET)
+		err = nf_setsockopt(sk, PF_DECnet, optname, optval, optlen);
+#endif
 
 	return err;
 }
@@ -1444,15 +1450,6 @@ static int __dn_setsockopt(struct socket *sock, int level,int optname, char __us
 		dn_nsp_send_disc(sk, 0x38, 0, sk->sk_allocation);
 		break;
 
-	default:
-#ifdef CONFIG_NETFILTER
-		return nf_setsockopt(sk, PF_DECnet, optname, optval, optlen);
-#endif
-	case DSO_LINKINFO:
-	case DSO_STREAM:
-	case DSO_SEQPACKET:
-		return -ENOPROTOOPT;
-
 	case DSO_MAXWINDOW:
 		if (optlen != sizeof(unsigned long))
 			return -EINVAL;
@@ -1500,6 +1497,12 @@ static int __dn_setsockopt(struct socket *sock, int level,int optname, char __us
 			return -EINVAL;
 		scp->info_loc = u.info;
 		break;
+
+	case DSO_LINKINFO:
+	case DSO_STREAM:
+	case DSO_SEQPACKET:
+	default:
+		return -ENOPROTOOPT;
 	}
 
 	return 0;
@@ -1513,6 +1516,20 @@ static int dn_getsockopt(struct socket *sock, int level, int optname, char __use
 	lock_sock(sk);
 	err = __dn_getsockopt(sock, level, optname, optval, optlen, 0);
 	release_sock(sk);
+#ifdef CONFIG_NETFILTER
+	if (err == -ENOPROTOOPT && optname != DSO_STREAM &&
+	    optname != DSO_SEQPACKET && optname != DSO_CONACCEPT &&
+	    optname != DSO_CONREJECT) {
+		int len;
+
+		if (get_user(len, optlen))
+			return -EFAULT;
+
+		err = nf_getsockopt(sk, PF_DECnet, optname, optval, &len);
+		if (err >= 0)
+			err = put_user(len, optlen);
+	}
+#endif
 
 	return err;
 }
@@ -1578,26 +1595,6 @@ static int __dn_getsockopt(struct socket *sock, int level,int optname, char __us
 		r_data = &link;
 		break;
 
-	default:
-#ifdef CONFIG_NETFILTER
-	{
-		int ret, len;
-
-		if (get_user(len, optlen))
-			return -EFAULT;
-
-		ret = nf_getsockopt(sk, PF_DECnet, optname, optval, &len);
-		if (ret >= 0)
-			ret = put_user(len, optlen);
-		return ret;
-	}
-#endif
-	case DSO_STREAM:
-	case DSO_SEQPACKET:
-	case DSO_CONACCEPT:
-	case DSO_CONREJECT:
-		return -ENOPROTOOPT;
-
 	case DSO_MAXWINDOW:
 		if (r_len > sizeof(unsigned long))
 			r_len = sizeof(unsigned long);
@@ -1629,6 +1626,13 @@ static int __dn_getsockopt(struct socket *sock, int level,int optname, char __us
 			r_len = sizeof(unsigned char);
 		r_data = &scp->info_rem;
 		break;
+
+	case DSO_STREAM:
+	case DSO_SEQPACKET:
+	case DSO_CONACCEPT:
+	case DSO_CONREJECT:
+	default:
+		return -ENOPROTOOPT;
 	}
 
 	if (r_data) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] video: fbdev/mmp: add MODULE_LICENSE
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (395 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] dn_getsockoptdecnet: move nf_{get/set}sockopt outside sock lock Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] usbip: keep usbip_device sockfd state in sync with tcp_socket Sasha Levin
                   ` (119 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Arnd Bergmann, Bartlomiej Zolnierkiewicz, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c1530ac5a3ce93a1f02adabc4508b5fbf862dfe2 ]

Kbuild complains about the lack of a license tag in this driver:

WARNING: modpost: missing MODULE_LICENSE() in drivers/video/fbdev/mmp/mmp_disp.o

This adds the license, author and description tags.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/video/fbdev/mmp/core.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/video/fbdev/mmp/core.c b/drivers/video/fbdev/mmp/core.c
index a0f496049db7..3a6bb6561ba0 100644
--- a/drivers/video/fbdev/mmp/core.c
+++ b/drivers/video/fbdev/mmp/core.c
@@ -23,6 +23,7 @@
 #include <linux/slab.h>
 #include <linux/dma-mapping.h>
 #include <linux/export.h>
+#include <linux/module.h>
 #include <video/mmp_disp.h>
 
 static struct mmp_overlay *path_get_overlay(struct mmp_path *path,
@@ -249,3 +250,7 @@ void mmp_unregister_path(struct mmp_path *path)
 	mutex_unlock(&disp_lock);
 }
 EXPORT_SYMBOL_GPL(mmp_unregister_path);
+
+MODULE_AUTHOR("Zhou Zhu <zzhu3@marvell.com>");
+MODULE_DESCRIPTION("Marvell MMP display framework");
+MODULE_LICENSE("GPL");
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usbip: keep usbip_device sockfd state in sync with tcp_socket
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (396 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] video: fbdev/mmp: add MODULE_LICENSE Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] binder: check for binder_thread allocation failure in binder_poll() Sasha Levin
                   ` (118 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Shuah Khan, Greg Kroah-Hartman, Sasha Levin

From: Shuah Khan <shuahkh@osg.samsung.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 009f41aed4b3e11e6dc1e3c07377a10c20f1a5ed ]

Keep usbip_device sockfd state in sync with tcp_socket. When tcp_socket
is reset to null, reset sockfd to -1 to keep it in sync.

Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/usbip/stub_dev.c | 3 +++
 drivers/usb/usbip/vhci_hcd.c | 2 ++
 2 files changed, 5 insertions(+)

diff --git a/drivers/usb/usbip/stub_dev.c b/drivers/usb/usbip/stub_dev.c
index ec38370ffcab..0931f3271119 100644
--- a/drivers/usb/usbip/stub_dev.c
+++ b/drivers/usb/usbip/stub_dev.c
@@ -87,6 +87,7 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
 			goto err;
 
 		sdev->ud.tcp_socket = socket;
+		sdev->ud.sockfd = sockfd;
 
 		spin_unlock_irq(&sdev->ud.lock);
 
@@ -186,6 +187,7 @@ static void stub_shutdown_connection(struct usbip_device *ud)
 	if (ud->tcp_socket) {
 		sockfd_put(ud->tcp_socket);
 		ud->tcp_socket = NULL;
+		ud->sockfd = -1;
 	}
 
 	/* 3. free used data */
@@ -280,6 +282,7 @@ static struct stub_device *stub_device_alloc(struct usb_device *udev)
 	sdev->ud.status		= SDEV_ST_AVAILABLE;
 	spin_lock_init(&sdev->ud.lock);
 	sdev->ud.tcp_socket	= NULL;
+	sdev->ud.sockfd		= -1;
 
 	INIT_LIST_HEAD(&sdev->priv_init);
 	INIT_LIST_HEAD(&sdev->priv_tx);
diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c
index 0231507837fe..17498af82b69 100644
--- a/drivers/usb/usbip/vhci_hcd.c
+++ b/drivers/usb/usbip/vhci_hcd.c
@@ -780,6 +780,7 @@ static void vhci_shutdown_connection(struct usbip_device *ud)
 	if (vdev->ud.tcp_socket) {
 		sockfd_put(vdev->ud.tcp_socket);
 		vdev->ud.tcp_socket = NULL;
+		vdev->ud.sockfd = -1;
 	}
 	pr_info("release socket\n");
 
@@ -826,6 +827,7 @@ static void vhci_device_reset(struct usbip_device *ud)
 	if (ud->tcp_socket) {
 		sockfd_put(ud->tcp_socket);
 		ud->tcp_socket = NULL;
+		ud->sockfd = -1;
 	}
 	ud->status = VDEV_ST_NULL;
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] binder: check for binder_thread allocation failure in binder_poll()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (397 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] usbip: keep usbip_device sockfd state in sync with tcp_socket Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ARM: OMAP2+: Fix SRAM virt to phys translation for save_secure_ram_context Sasha Levin
                   ` (117 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Eric Biggers, Greg Kroah-Hartman, Sasha Levin

From: Eric Biggers <ebiggers@google.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f88982679f54f75daa5b8eff3da72508f1e7422f ]

If the kzalloc() in binder_get_thread() fails, binder_poll()
dereferences the resulting NULL pointer.

Fix it by returning POLLERR if the memory allocation failed.

This bug was found by syzkaller using fault injection.

Reported-by: syzbot <syzkaller@googlegroups.com>
Fixes: 457b9a6f09f0 ("Staging: android: add binder driver")
Cc: stable@vger.kernel.org
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/android/binder.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index 235ba1fbabdb..b834278c0c4d 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -2618,6 +2618,8 @@ static unsigned int binder_poll(struct file *filp,
 	binder_lock(__func__);
 
 	thread = binder_get_thread(proc);
+	if (!thread)
+		return POLLERR;
 
 	wait_for_proc_work = thread->transaction_stack == NULL &&
 		list_empty(&thread->todo) && thread->return_error == BR_OK;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: build drivers/usb/common/ when USB_SUPPORT is set
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (399 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ARM: OMAP2+: Fix SRAM virt to phys translation for save_secure_ram_context Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ARM: AM33xx: PRM: Remove am33xx_pwrdm_read_prev_pwrst function Sasha Levin
                   ` (115 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Randy Dunlap, Greg Kroah-Hartman, Sasha Levin

From: Randy Dunlap <rdunlap@infradead.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c9d24f78268be444e803fb2bb138a2f598de9c23 ]

PHY drivers can use ULPI interfaces when CONFIG_USB (which is host side
support) is not enabled, so also build drivers/usb/ when CONFIG_USB_SUPPORT
is enabled so that drivers/usb/common/ is built.

ERROR: "ulpi_unregister_driver" [drivers/phy/ti/phy-tusb1210.ko] undefined!
ERROR: "__ulpi_register_driver" [drivers/phy/ti/phy-tusb1210.ko] undefined!
ERROR: "ulpi_read" [drivers/phy/ti/phy-tusb1210.ko] undefined!
ERROR: "ulpi_write" [drivers/phy/ti/phy-tusb1210.ko] undefined!
ERROR: "ulpi_unregister_driver" [drivers/phy/qualcomm/phy-qcom-usb-hs.ko] undefined!
ERROR: "__ulpi_register_driver" [drivers/phy/qualcomm/phy-qcom-usb-hs.ko] undefined!
ERROR: "ulpi_write" [drivers/phy/qualcomm/phy-qcom-usb-hs.ko] undefined!

Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/Makefile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/Makefile b/drivers/Makefile
index d7407f0b0d3b..bffce51498df 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -93,6 +93,7 @@ obj-$(CONFIG_TC)		+= tc/
 obj-$(CONFIG_UWB)		+= uwb/
 obj-$(CONFIG_USB_PHY)		+= usb/
 obj-$(CONFIG_USB)		+= usb/
+obj-$(CONFIG_USB_SUPPORT)	+= usb/
 obj-$(CONFIG_PCI)		+= usb/
 obj-$(CONFIG_USB_GADGET)	+= usb/
 obj-$(CONFIG_OF)		+= usb/
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ARM: OMAP2+: Fix SRAM virt to phys translation for save_secure_ram_context
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (398 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] binder: check for binder_thread allocation failure in binder_poll() Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] usb: build drivers/usb/common/ when USB_SUPPORT is set Sasha Levin
                   ` (116 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Tony Lindgren, Sasha Levin

From: Tony Lindgren <tony@atomide.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d09220a887f70368afa79e850c95e74890c0a32d ]

With the CMA changes from Joonsoo Kim <iamjoonsoo.kim@lge.com>, it
was noticed that n900 stopped booting. After investigating it turned
out that n900 save_secure_ram_context does some whacky virtual to
physical address translation for the SRAM data address.

As we now only have minimal parts of omap3 idle code copied to SRAM,
running save_secure_ram_context() in SRAM is not needed. It only gets
called on PM init. And it seems there's no need to ever call this from
SRAM idle code.

So let's just keep save_secure_ram_context() in DDR, and pass it the
physical address of the parameters. We can do everything else in
omap-secure.c like we already do for other secure code.

And since we don't have any documentation, I still have no clue what
the values for 0, 1 and 1 for the parameters might be. If somebody has
figured it out, please do send a patch to add some comments.

Debugged-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/mach-omap2/omap-secure.c | 19 +++++++++++++++++++
 arch/arm/mach-omap2/omap-secure.h |  4 ++++
 arch/arm/mach-omap2/pm.h          |  4 ----
 arch/arm/mach-omap2/pm34xx.c      | 13 ++++---------
 arch/arm/mach-omap2/sleep34xx.S   | 26 ++++----------------------
 5 files changed, 31 insertions(+), 35 deletions(-)

diff --git a/arch/arm/mach-omap2/omap-secure.c b/arch/arm/mach-omap2/omap-secure.c
index 5ac122e88f67..9ff92050053c 100644
--- a/arch/arm/mach-omap2/omap-secure.c
+++ b/arch/arm/mach-omap2/omap-secure.c
@@ -73,6 +73,25 @@ phys_addr_t omap_secure_ram_mempool_base(void)
 	return omap_secure_memblock_base;
 }
 
+u32 omap3_save_secure_ram(void __iomem *addr, int size)
+{
+	u32 ret;
+	u32 param[5];
+
+	if (size != OMAP3_SAVE_SECURE_RAM_SZ)
+		return OMAP3_SAVE_SECURE_RAM_SZ;
+
+	param[0] = 4;		/* Number of arguments */
+	param[1] = __pa(addr);	/* Physical address for saving */
+	param[2] = 0;
+	param[3] = 1;
+	param[4] = 1;
+
+	ret = save_secure_ram_context(__pa(param));
+
+	return ret;
+}
+
 /**
  * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
  * @idx: The PPA API index
diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h
index af2851fbcdf0..ab6ce2597a88 100644
--- a/arch/arm/mach-omap2/omap-secure.h
+++ b/arch/arm/mach-omap2/omap-secure.h
@@ -31,6 +31,8 @@
 /* Maximum Secure memory storage size */
 #define OMAP_SECURE_RAM_STORAGE	(88 * SZ_1K)
 
+#define OMAP3_SAVE_SECURE_RAM_SZ	0x803F
+
 /* Secure low power HAL API index */
 #define OMAP4_HAL_SAVESECURERAM_INDEX	0x1a
 #define OMAP4_HAL_SAVEHW_INDEX		0x1b
@@ -64,6 +66,8 @@ extern u32 omap_smc2(u32 id, u32 falg, u32 pargs);
 extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs);
 extern phys_addr_t omap_secure_ram_mempool_base(void);
 extern int omap_secure_ram_reserve_memblock(void);
+extern u32 save_secure_ram_context(u32 args_pa);
+extern u32 omap3_save_secure_ram(void __iomem *save_regs, int size);
 
 extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
 				  u32 arg1, u32 arg2, u32 arg3, u32 arg4);
diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h
index 425bfcd67db6..326218953737 100644
--- a/arch/arm/mach-omap2/pm.h
+++ b/arch/arm/mach-omap2/pm.h
@@ -81,10 +81,6 @@ extern unsigned int omap3_do_wfi_sz;
 /* ... and its pointer from SRAM after copy */
 extern void (*omap3_do_wfi_sram)(void);
 
-/* save_secure_ram_context function pointer and size, for copy to SRAM */
-extern int save_secure_ram_context(u32 *addr);
-extern unsigned int save_secure_ram_context_sz;
-
 extern void omap3_save_scratchpad_contents(void);
 
 #define PM_RTA_ERRATUM_i608		(1 << 0)
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 87b98bf92366..0b8ab6c00071 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -48,6 +48,7 @@
 #include "prm3xxx.h"
 #include "pm.h"
 #include "sdrc.h"
+#include "omap-secure.h"
 #include "sram.h"
 #include "control.h"
 #include "vc.h"
@@ -66,7 +67,6 @@ struct power_state {
 
 static LIST_HEAD(pwrst_list);
 
-static int (*_omap_save_secure_sram)(u32 *addr);
 void (*omap3_do_wfi_sram)(void);
 
 static struct powerdomain *mpu_pwrdm, *neon_pwrdm;
@@ -121,8 +121,8 @@ static void omap3_save_secure_ram_context(void)
 		 * will hang the system.
 		 */
 		pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_ON);
-		ret = _omap_save_secure_sram((u32 *)(unsigned long)
-				__pa(omap3_secure_ram_storage));
+		ret = omap3_save_secure_ram(omap3_secure_ram_storage,
+					    OMAP3_SAVE_SECURE_RAM_SZ);
 		pwrdm_set_next_pwrst(mpu_pwrdm, mpu_next_state);
 		/* Following is for error tracking, it should not happen */
 		if (ret) {
@@ -431,15 +431,10 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)
  *
  * The minimum set of functions is pushed to SRAM for execution:
  * - omap3_do_wfi for erratum i581 WA,
- * - save_secure_ram_context for security extensions.
  */
 void omap_push_sram_idle(void)
 {
 	omap3_do_wfi_sram = omap_sram_push(omap3_do_wfi, omap3_do_wfi_sz);
-
-	if (omap_type() != OMAP2_DEVICE_TYPE_GP)
-		_omap_save_secure_sram = omap_sram_push(save_secure_ram_context,
-				save_secure_ram_context_sz);
 }
 
 static void __init pm_errata_configure(void)
@@ -551,7 +546,7 @@ int __init omap3_pm_init(void)
 	clkdm_add_wkdep(neon_clkdm, mpu_clkdm);
 	if (omap_type() != OMAP2_DEVICE_TYPE_GP) {
 		omap3_secure_ram_storage =
-			kmalloc(0x803F, GFP_KERNEL);
+			kmalloc(OMAP3_SAVE_SECURE_RAM_SZ, GFP_KERNEL);
 		if (!omap3_secure_ram_storage)
 			pr_err("Memory allocation failed when allocating for secure sram context\n");
 
diff --git a/arch/arm/mach-omap2/sleep34xx.S b/arch/arm/mach-omap2/sleep34xx.S
index 1b9f0520dea9..3e0d802c59da 100644
--- a/arch/arm/mach-omap2/sleep34xx.S
+++ b/arch/arm/mach-omap2/sleep34xx.S
@@ -93,20 +93,13 @@ ENTRY(enable_omap3630_toggle_l2_on_restore)
 ENDPROC(enable_omap3630_toggle_l2_on_restore)
 
 /*
- * Function to call rom code to save secure ram context. This gets
- * relocated to SRAM, so it can be all in .data section. Otherwise
- * we need to initialize api_params separately.
+ * Function to call rom code to save secure ram context.
+ *
+ * r0 = physical address of the parameters
  */
-	.data
-	.align	3
 ENTRY(save_secure_ram_context)
 	stmfd	sp!, {r4 - r11, lr}	@ save registers on stack
-	adr	r3, api_params		@ r3 points to parameters
-	str	r0, [r3,#0x4]		@ r0 has sdram address
-	ldr	r12, high_mask
-	and	r3, r3, r12
-	ldr	r12, sram_phy_addr_mask
-	orr	r3, r3, r12
+	mov	r3, r0			@ physical address of parameters
 	mov	r0, #25			@ set service ID for PPA
 	mov	r12, r0			@ copy secure service ID in r12
 	mov	r1, #0			@ set task id for ROM code in r1
@@ -120,18 +113,7 @@ ENTRY(save_secure_ram_context)
 	nop
 	nop
 	ldmfd	sp!, {r4 - r11, pc}
-	.align
-sram_phy_addr_mask:
-	.word	SRAM_BASE_P
-high_mask:
-	.word	0xffff
-api_params:
-	.word	0x4, 0x0, 0x0, 0x1, 0x1
 ENDPROC(save_secure_ram_context)
-ENTRY(save_secure_ram_context_sz)
-	.word	. - save_secure_ram_context
-
-	.text
 
 /*
  * ======================
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ARM: AM33xx: PRM: Remove am33xx_pwrdm_read_prev_pwrst function
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (400 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] usb: build drivers/usb/common/ when USB_SUPPORT is set Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ARM: dts: am4372: Correct the interrupts_properties of McASP Sasha Levin
                   ` (114 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Keerthy, Tony Lindgren, Sasha Levin

From: Keerthy <j-keerthy@ti.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b6d6af7226465b6d11eac09d0be2ab78a4a9eb62 ]

Referring TRM Am335X series:
http://www.ti.com/lit/ug/spruh73p/spruh73p.pdf

The LastPowerStateEntered bitfield is present only for PM_CEFUSE
domain. This is not present in any of the other power domains. Hence
remove the generic am33xx_pwrdm_read_prev_pwrst hook which wrongly
reads the reserved bit fields for all the other power domains.

Reading the reserved bits leads to wrongly interpreting the low
power transitions for various power domains that do not have the
LastPowerStateEntered field. The pm debug counters values are wrong
currently as we are incrementing them based on the reserved bits.

Signed-off-by: Keerthy <j-keerthy@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/mach-omap2/prm33xx.c | 12 ------------
 1 file changed, 12 deletions(-)

diff --git a/arch/arm/mach-omap2/prm33xx.c b/arch/arm/mach-omap2/prm33xx.c
index dcb5001d77da..973bcd754e1c 100644
--- a/arch/arm/mach-omap2/prm33xx.c
+++ b/arch/arm/mach-omap2/prm33xx.c
@@ -176,17 +176,6 @@ static int am33xx_pwrdm_read_pwrst(struct powerdomain *pwrdm)
 	return v;
 }
 
-static int am33xx_pwrdm_read_prev_pwrst(struct powerdomain *pwrdm)
-{
-	u32 v;
-
-	v = am33xx_prm_read_reg(pwrdm->prcm_offs, pwrdm->pwrstst_offs);
-	v &= AM33XX_LASTPOWERSTATEENTERED_MASK;
-	v >>= AM33XX_LASTPOWERSTATEENTERED_SHIFT;
-
-	return v;
-}
-
 static int am33xx_pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm)
 {
 	am33xx_prm_rmw_reg_bits(AM33XX_LOWPOWERSTATECHANGE_MASK,
@@ -357,7 +346,6 @@ struct pwrdm_ops am33xx_pwrdm_operations = {
 	.pwrdm_set_next_pwrst		= am33xx_pwrdm_set_next_pwrst,
 	.pwrdm_read_next_pwrst		= am33xx_pwrdm_read_next_pwrst,
 	.pwrdm_read_pwrst		= am33xx_pwrdm_read_pwrst,
-	.pwrdm_read_prev_pwrst		= am33xx_pwrdm_read_prev_pwrst,
 	.pwrdm_set_logic_retst		= am33xx_pwrdm_set_logic_retst,
 	.pwrdm_read_logic_pwrst		= am33xx_pwrdm_read_logic_pwrst,
 	.pwrdm_read_logic_retst		= am33xx_pwrdm_read_logic_retst,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ARM: dts: Fix omap4 hang with GPS connected to USB by using wakeupgen
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (402 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ARM: dts: am4372: Correct the interrupts_properties of McASP Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] perf top: Fix window dimensions change handling Sasha Levin
                   ` (112 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Tony Lindgren, Sasha Levin

From: Tony Lindgren <tony@atomide.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit cf87634c8b24e24bf379b8c6807c8b0fb5f23567 ]

There's been a reproducable USB OHCI/EHCI cpuidle related hang on omap4
for a while that happens after about 20 - 40 minutes on an idle system
with some data feeding device being connected, like a USB GPS device or
a cellular modem.

This issue happens in cpuidle states C2 and C3 and does not happen if
cpuidle is limited to C1 state only. The symptoms are that the whole
system hangs and never wakes up from idle, and if a watchdog is
configured the system reboots after a while.

Turns out that OHCI/EHCI devices on omap4 are trying to use the GIC
interrupt controller directly as a parent instead of the WUGEN. We
need to pass the interrupts through WUGEN to GIC to provide the wakeup
events for the processor.

Let's fix the issue by removing the gic interrupt-parent and use the
default interrupt-parent wakeupgen instead. Note that omap5.dtsi had
this already fixes earlier by commit 7136d457f365 ("ARM: omap: convert
wakeupgen to stacked domains") but we somehow missed omap4 at that
point.

Fixes: 7136d457f365 ("ARM: omap: convert wakeupgen to stacked domains")
Cc: Dave Gerlach <d-gerlach@ti.com>
Cc: Nishanth Menon <nm@ti.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
Reviewed-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/boot/dts/omap4.dtsi | 2 --
 1 file changed, 2 deletions(-)

diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi
index 84be9da74c7e..48c5a3b23d03 100644
--- a/arch/arm/boot/dts/omap4.dtsi
+++ b/arch/arm/boot/dts/omap4.dtsi
@@ -841,14 +841,12 @@
 			usbhsohci: ohci@4a064800 {
 				compatible = "ti,ohci-omap3";
 				reg = <0x4a064800 0x400>;
-				interrupt-parent = <&gic>;
 				interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
 			};
 
 			usbhsehci: ehci@4a064c00 {
 				compatible = "ti,ehci-omap";
 				reg = <0x4a064c00 0x400>;
-				interrupt-parent = <&gic>;
 				interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
 			};
 		};
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ARM: dts: am4372: Correct the interrupts_properties of McASP
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (401 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ARM: AM33xx: PRM: Remove am33xx_pwrdm_read_prev_pwrst function Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ARM: dts: Fix omap4 hang with GPS connected to USB by using wakeupgen Sasha Levin
                   ` (113 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Peter Ujfalusi, Tony Lindgren, Sasha Levin

From: Peter Ujfalusi <peter.ujfalusi@ti.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 627395a6f8091c0aa18f49dca7df59ba3ec147ef ]

Fixes the following warnings:

arch/arm/boot/dts/am437x-cm-t43.dtb: Warning (interrupts_property):
interrupts size is (8), expected multiple of 12 in
/ocp@44000000/mcasp@48038000

arch/arm/boot/dts/am437x-cm-t43.dtb: Warning (interrupts_property):
interrupts size is (8), expected multiple of 12 in
/ocp@44000000/mcasp@4803C000

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/boot/dts/am4372.dtsi | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/arch/arm/boot/dts/am4372.dtsi b/arch/arm/boot/dts/am4372.dtsi
index c80a3e233792..96222885ad27 100644
--- a/arch/arm/boot/dts/am4372.dtsi
+++ b/arch/arm/boot/dts/am4372.dtsi
@@ -750,7 +750,8 @@
 			reg = <0x48038000 0x2000>,
 			      <0x46000000 0x400000>;
 			reg-names = "mpu", "dat";
-			interrupts = <80>, <81>;
+			interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>;
 			interrupt-names = "tx", "rx";
 			status = "disabled";
 			dmas = <&edma 8>,
@@ -764,7 +765,8 @@
 			reg = <0x4803C000 0x2000>,
 			      <0x46400000 0x400000>;
 			reg-names = "mpu", "dat";
-			interrupts = <82>, <83>;
+			interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
 			interrupt-names = "tx", "rx";
 			status = "disabled";
 			dmas = <&edma 10>,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] perf top: Fix window dimensions change handling
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (403 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ARM: dts: Fix omap4 hang with GPS connected to USB by using wakeupgen Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] perf bench numa: Fixup discontiguous/sparse numa nodes Sasha Levin
                   ` (111 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jiri Olsa, Arnaldo Carvalho de Melo, Sasha Levin

From: Jiri Olsa <jolsa@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b135e5ee1a0e325166c30b16cf5493fea44ede45 ]

The stdio perf top crashes when we change the terminal
window size. The reason is that we assumed we get the
perf_top pointer as a signal handler argument which is
not the case.

Changing the SIGWINCH handler logic to change global
resize variable, which is checked in the main thread
loop.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Tested-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-ysuzwz77oev1ftgvdscn9bpu@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 tools/perf/builtin-top.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index 65e138019b99..866b911bcda5 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -69,6 +69,7 @@
 #include <linux/types.h>
 
 static volatile int done;
+static volatile int resize;
 
 #define HEADER_LINE_NR  5
 
@@ -78,10 +79,13 @@ static void perf_top__update_print_entries(struct perf_top *top)
 }
 
 static void perf_top__sig_winch(int sig __maybe_unused,
-				siginfo_t *info __maybe_unused, void *arg)
+				siginfo_t *info __maybe_unused, void *arg __maybe_unused)
 {
-	struct perf_top *top = arg;
+	resize = 1;
+}
 
+static void perf_top__resize(struct perf_top *top)
+{
 	get_term_dimensions(&top->winsize);
 	perf_top__update_print_entries(top);
 }
@@ -460,7 +464,7 @@ static bool perf_top__handle_keypress(struct perf_top *top, int c)
 					.sa_sigaction = perf_top__sig_winch,
 					.sa_flags     = SA_SIGINFO,
 				};
-				perf_top__sig_winch(SIGWINCH, NULL, top);
+				perf_top__resize(top);
 				sigaction(SIGWINCH, &act, NULL);
 			} else {
 				signal(SIGWINCH, SIG_DFL);
@@ -998,6 +1002,11 @@ static int __cmd_top(struct perf_top *top)
 
 		if (hits == top->samples)
 			ret = perf_evlist__poll(top->evlist, 100);
+
+		if (resize) {
+			perf_top__resize(top);
+			resize = 0;
+		}
 	}
 
 	ret = 0;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] media: s5k6aa: describe some function parameters
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (405 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] perf bench numa: Fixup discontiguous/sparse numa nodes Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] pinctrl: sunxi: Fix A80 interrupt pin bank Sasha Levin
                   ` (109 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Mauro Carvalho Chehab, Sasha Levin

From: Mauro Carvalho Chehab <mchehab@s-opensource.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 070250a1715cee2297de0d9e7e2cea58be999d37 ]

as warned:
  drivers/media/i2c/s5k6aa.c:429: warning: No description found for parameter 's5k6aa'
  drivers/media/i2c/s5k6aa.c:679: warning: No description found for parameter 's5k6aa'
  drivers/media/i2c/s5k6aa.c:733: warning: No description found for parameter 's5k6aa'
  drivers/media/i2c/s5k6aa.c:733: warning: No description found for parameter 'preset'
  drivers/media/i2c/s5k6aa.c:787: warning: No description found for parameter 'sd'

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/i2c/s5k6aa.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/media/i2c/s5k6aa.c b/drivers/media/i2c/s5k6aa.c
index de803a11efb4..768ae2115f1a 100644
--- a/drivers/media/i2c/s5k6aa.c
+++ b/drivers/media/i2c/s5k6aa.c
@@ -421,6 +421,7 @@ static int s5k6aa_set_ahb_address(struct i2c_client *client)
 
 /**
  * s5k6aa_configure_pixel_clock - apply ISP main clock/PLL configuration
+ * @s5k6aa: pointer to &struct s5k6aa describing the device
  *
  * Configure the internal ISP PLL for the required output frequency.
  * Locking: called with s5k6aa.lock mutex held.
@@ -669,6 +670,7 @@ static int s5k6aa_set_input_params(struct s5k6aa *s5k6aa)
 
 /**
  * s5k6aa_configure_video_bus - configure the video output interface
+ * @s5k6aa: pointer to &struct s5k6aa describing the device
  * @bus_type: video bus type: parallel or MIPI-CSI
  * @nlanes: number of MIPI lanes to be used (MIPI-CSI only)
  *
@@ -724,6 +726,8 @@ static int s5k6aa_new_config_sync(struct i2c_client *client, int timeout,
 
 /**
  * s5k6aa_set_prev_config - write user preview register set
+ * @s5k6aa: pointer to &struct s5k6aa describing the device
+ * @preset: s5kaa preset to be applied
  *
  * Configure output resolution and color fromat, pixel clock
  * frequency range, device frame rate type and frame period range.
@@ -777,6 +781,7 @@ static int s5k6aa_set_prev_config(struct s5k6aa *s5k6aa,
 
 /**
  * s5k6aa_initialize_isp - basic ISP MCU initialization
+ * @sd: pointer to V4L2 sub-device descriptor
  *
  * Configure AHB addresses for registers read/write; configure PLLs for
  * required output pixel clock. The ISP power supply needs to be already
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] perf bench numa: Fixup discontiguous/sparse numa nodes
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (404 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] perf top: Fix window dimensions change handling Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: s5k6aa: describe some function parameters Sasha Levin
                   ` (110 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Satheesh Rajendran, Balamuruhan S, Arnaldo Carvalho de Melo, Sasha Levin

From: Satheesh Rajendran <sathnaga@linux.vnet.ibm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 321a7c35c90cc834851ceda18a8ee18f1d032b92 ]

Certain systems are designed to have sparse/discontiguous nodes.  On
such systems, 'perf bench numa' hangs, shows wrong number of nodes and
shows values for non-existent nodes. Handle this by only taking nodes
that are exposed by kernel to userspace.

Signed-off-by: Satheesh Rajendran <sathnaga@linux.vnet.ibm.com>
Reviewed-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Acked-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Link: http://lkml.kernel.org/r/1edbcd353c009e109e93d78f2f46381930c340fe.1511368645.git.sathnaga@linux.vnet.ibm.com
Signed-off-by: Balamuruhan S <bala24@linux.vnet.ibm.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 tools/perf/bench/numa.c | 56 ++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 51 insertions(+), 5 deletions(-)

diff --git a/tools/perf/bench/numa.c b/tools/perf/bench/numa.c
index ba5efa4710b5..d464305c7c6c 100644
--- a/tools/perf/bench/numa.c
+++ b/tools/perf/bench/numa.c
@@ -203,6 +203,47 @@ static const char * const numa_usage[] = {
 	NULL
 };
 
+/*
+ * To get number of numa nodes present.
+ */
+static int nr_numa_nodes(void)
+{
+	int i, nr_nodes = 0;
+
+	for (i = 0; i < g->p.nr_nodes; i++) {
+		if (numa_bitmask_isbitset(numa_nodes_ptr, i))
+			nr_nodes++;
+	}
+
+	return nr_nodes;
+}
+
+/*
+ * To check if given numa node is present.
+ */
+static int is_node_present(int node)
+{
+	return numa_bitmask_isbitset(numa_nodes_ptr, node);
+}
+
+/*
+ * To check given numa node has cpus.
+ */
+static bool node_has_cpus(int node)
+{
+	struct bitmask *cpu = numa_allocate_cpumask();
+	unsigned int i;
+
+	if (cpu && !numa_node_to_cpus(node, cpu)) {
+		for (i = 0; i < cpu->size; i++) {
+			if (numa_bitmask_isbitset(cpu, i))
+				return true;
+		}
+	}
+
+	return false; /* lets fall back to nocpus safely */
+}
+
 static cpu_set_t bind_to_cpu(int target_cpu)
 {
 	cpu_set_t orig_mask, mask;
@@ -231,12 +272,12 @@ static cpu_set_t bind_to_cpu(int target_cpu)
 
 static cpu_set_t bind_to_node(int target_node)
 {
-	int cpus_per_node = g->p.nr_cpus/g->p.nr_nodes;
+	int cpus_per_node = g->p.nr_cpus / nr_numa_nodes();
 	cpu_set_t orig_mask, mask;
 	int cpu;
 	int ret;
 
-	BUG_ON(cpus_per_node*g->p.nr_nodes != g->p.nr_cpus);
+	BUG_ON(cpus_per_node * nr_numa_nodes() != g->p.nr_cpus);
 	BUG_ON(!cpus_per_node);
 
 	ret = sched_getaffinity(0, sizeof(orig_mask), &orig_mask);
@@ -636,7 +677,7 @@ static int parse_setup_node_list(void)
 			int i;
 
 			for (i = 0; i < mul; i++) {
-				if (t >= g->p.nr_tasks) {
+				if (t >= g->p.nr_tasks || !node_has_cpus(bind_node)) {
 					printf("\n# NOTE: ignoring bind NODEs starting at NODE#%d\n", bind_node);
 					goto out;
 				}
@@ -951,6 +992,8 @@ static void calc_convergence(double runtime_ns_max, double *convergence)
 	sum = 0;
 
 	for (node = 0; node < g->p.nr_nodes; node++) {
+		if (!is_node_present(node))
+			continue;
 		nr = nodes[node];
 		nr_min = min(nr, nr_min);
 		nr_max = max(nr, nr_max);
@@ -971,8 +1014,11 @@ static void calc_convergence(double runtime_ns_max, double *convergence)
 	process_groups = 0;
 
 	for (node = 0; node < g->p.nr_nodes; node++) {
-		int processes = count_node_processes(node);
+		int processes;
 
+		if (!is_node_present(node))
+			continue;
+		processes = count_node_processes(node);
 		nr = nodes[node];
 		tprintf(" %2d/%-2d", nr, processes);
 
@@ -1270,7 +1316,7 @@ static void print_summary(void)
 
 	printf("\n ###\n");
 	printf(" # %d %s will execute (on %d nodes, %d CPUs):\n",
-		g->p.nr_tasks, g->p.nr_tasks == 1 ? "task" : "tasks", g->p.nr_nodes, g->p.nr_cpus);
+		g->p.nr_tasks, g->p.nr_tasks == 1 ? "task" : "tasks", nr_numa_nodes(), g->p.nr_cpus);
 	printf(" #      %5dx %5ldMB global  shared mem operations\n",
 			g->p.nr_loops, g->p.bytes_global/1024/1024);
 	printf(" #      %5dx %5ldMB process shared mem operations\n",
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] scripts/kernel-doc: Don't fail with status != 0 if error encountered with -none
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (407 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] pinctrl: sunxi: Fix A80 interrupt pin bank Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ipvlan: Add the skb->mark as flow4's member to lookup route Sasha Levin
                   ` (107 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Will Deacon, Jonathan Corbet, Sasha Levin

From: Will Deacon <will.deacon@arm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e814bccbafece52a24e152d2395b5d49eef55841 ]

My bisect scripts starting running into build failures when trying to
compile 4.15-rc1 with the builds failing with things like:

drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c:2078: error: Cannot parse struct or union!

The line in question is actually just a #define, but after some digging
it turns out that my scripts pass W=1 and since commit 3a025e1d1c2ea
("Add optional check for bad kernel-doc comments") that results in
kernel-doc running on each source file. The file in question has a
badly formatted comment immediately before the #define:

/**
 * struct brcmf_skbuff_cb reserves first two bytes in sk_buff::cb for
 * bus layer usage.
 */

which causes the regex in dump_struct to fail (lack of braces following
struct declaration) and kernel-doc returns 1, which causes the build
to fail.

Fix the issue by always returning 0 from kernel-doc when invoked with
-none. It successfully generates no documentation, and prints out any
issues.

Cc: Matthew Wilcox <mawilcox@microsoft.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 scripts/kernel-doc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index 9922e66883a5..f936d9e5db91 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -2616,4 +2616,4 @@ if ($verbose && $warnings) {
   print STDERR "$warnings warnings\n";
 }
 
-exit($errors);
+exit($output_mode eq "none" ? 0 : $errors);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] pinctrl: sunxi: Fix A80 interrupt pin bank
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (406 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] media: s5k6aa: describe some function parameters Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] scripts/kernel-doc: Don't fail with status != 0 if error encountered with -none Sasha Levin
                   ` (108 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andre Przywara, Linus Walleij, Sasha Levin

From: Andre Przywara <andre.przywara@arm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6ad4cc8d1ac483e0fd33f605fb2788b0ecf51ed4 ]

On the A80 the pins on port B can trigger interrupts, and those are
assigned to the second interrupt bank.
Having two pins assigned to the same interrupt bank/pin combination does
not look healthy (instead more like a copy&paste bug from pins PA14-PA16),
so fix the interrupt bank for pins PB14-PB16, which is actually 1.

I don't have any A80 board, so could not test this.

Fixes: d5e9fb31baa2 ("pinctrl: sunxi: Add A80 pinctrl muxing options")
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Acked-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c b/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c
index 1b580ba76453..907d7db3fcee 100644
--- a/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c
+++ b/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c
@@ -145,19 +145,19 @@ static const struct sunxi_desc_pin sun9i_a80_pins[] = {
 		  SUNXI_FUNCTION(0x0, "gpio_in"),
 		  SUNXI_FUNCTION(0x1, "gpio_out"),
 		  SUNXI_FUNCTION(0x3, "mcsi"),		/* MCLK */
-		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 14)),	/* PB_EINT14 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 14)),	/* PB_EINT14 */
 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 15),
 		  SUNXI_FUNCTION(0x0, "gpio_in"),
 		  SUNXI_FUNCTION(0x1, "gpio_out"),
 		  SUNXI_FUNCTION(0x3, "mcsi"),		/* SCK */
 		  SUNXI_FUNCTION(0x4, "i2c4"),		/* SCK */
-		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 15)),	/* PB_EINT15 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 15)),	/* PB_EINT15 */
 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 16),
 		  SUNXI_FUNCTION(0x0, "gpio_in"),
 		  SUNXI_FUNCTION(0x1, "gpio_out"),
 		  SUNXI_FUNCTION(0x3, "mcsi"),		/* SDA */
 		  SUNXI_FUNCTION(0x4, "i2c4"),		/* SDA */
-		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 16)),	/* PB_EINT16 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 16)),	/* PB_EINT16 */
 
 	/* Hole */
 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ipvlan: Add the skb->mark as flow4's member to lookup route
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (408 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] scripts/kernel-doc: Don't fail with status != 0 if error encountered with -none Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] s390/dasd: prevent prefix I/O error Sasha Levin
                   ` (106 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Gao Feng, David S . Miller, Sasha Levin

From: Gao Feng <gfree.wind@vip.163.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a98a4ebc8c61d20f0150d6be66e0e65223a347af ]

Current codes don't use skb->mark to assign flowi4_mark, it would
make the policy route rule with fwmark doesn't work as expected.

Signed-off-by: Gao Feng <gfree.wind@vip.163.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ipvlan/ipvlan_core.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c
index c30b5c300c05..f3cd85ecd795 100644
--- a/drivers/net/ipvlan/ipvlan_core.c
+++ b/drivers/net/ipvlan/ipvlan_core.c
@@ -345,6 +345,7 @@ static int ipvlan_process_v4_outbound(struct sk_buff *skb)
 		.flowi4_oif = dev_get_iflink(dev),
 		.flowi4_tos = RT_TOS(ip4h->tos),
 		.flowi4_flags = FLOWI_FLAG_ANYSRC,
+		.flowi4_mark = skb->mark,
 		.daddr = ip4h->daddr,
 		.saddr = ip4h->saddr,
 	};
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] powerpc/perf: Fix oops when grouping different pmu events
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (410 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] s390/dasd: prevent prefix I/O error Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] gianfar: fix a flooded alignment reports because of padding issue Sasha Levin
                   ` (104 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Ravi Bangoria, Michael Ellerman, Sasha Levin

From: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5aa04b3eb6fca63d2e9827be656dcadc26d54e11 ]

When user tries to group imc (In-Memory Collections) event with
normal event, (sometime) kernel crashes with following log:

    Faulting instruction address: 0x00000000
    [link register   ] c00000000010ce88 power_check_constraints+0x128/0x980
    ...
    c00000000010e238 power_pmu_event_init+0x268/0x6f0
    c0000000002dc60c perf_try_init_event+0xdc/0x1a0
    c0000000002dce88 perf_event_alloc+0x7b8/0xac0
    c0000000002e92e0 SyS_perf_event_open+0x530/0xda0
    c00000000000b004 system_call+0x38/0xe0

'event_base' field of 'struct hw_perf_event' is used as flags for
normal hw events and used as memory address for imc events. While
grouping these two types of events, collect_events() tries to
interpret imc 'event_base' as a flag, which causes a corruption
resulting in a crash.

Consider only those events which belongs to 'perf_hw_context' in
collect_events().

Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Reviewed-By: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/powerpc/perf/core-book3s.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
index 8a39319e7868..b7e1307fe633 100644
--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -1381,7 +1381,7 @@ static int collect_events(struct perf_event *group, int max_count,
 	int n = 0;
 	struct perf_event *event;
 
-	if (!is_software_event(group)) {
+	if (group->pmu->task_ctx_nr == perf_hw_context) {
 		if (n >= max_count)
 			return -1;
 		ctrs[n] = group;
@@ -1389,7 +1389,7 @@ static int collect_events(struct perf_event *group, int max_count,
 		events[n++] = group->hw.config;
 	}
 	list_for_each_entry(event, &group->sibling_list, group_entry) {
-		if (!is_software_event(event) &&
+		if (event->pmu->task_ctx_nr == perf_hw_context &&
 		    event->state != PERF_EVENT_STATE_OFF) {
 			if (n >= max_count)
 				return -1;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] s390/dasd: prevent prefix I/O error
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (409 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] ipvlan: Add the skb->mark as flow4's member to lookup route Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] powerpc/perf: Fix oops when grouping different pmu events Sasha Levin
                   ` (105 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Stefan Haberland, Martin Schwidefsky, Sasha Levin

From: Stefan Haberland <sth@linux.vnet.ibm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit da340f921d3454f1521671c7a5a43ad3331fbe50 ]

Prevent that a prefix flag is set based on invalid configuration data.
The validity.verify_base flag should only be set for alias devices.
Usually the unit address type is either one of base, PAV alias or
HyperPAV alias. But in cases where the unit address type is not set or
any other value the validity.verify_base flag might be set as well.
This would lead to follow on errors.
Explicitly check for alias devices and set the validity flag only for
them.

Signed-off-by: Stefan Haberland <sth@linux.vnet.ibm.com>
Reviewed-by: Jan Hoeppner <hoeppner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/s390/block/dasd_eckd.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
index 6215f6455eb8..7f31087fca31 100644
--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -518,10 +518,12 @@ static int prefix_LRE(struct ccw1 *ccw, struct PFX_eckd_data *pfxdata,
 	pfxdata->validity.define_extent = 1;
 
 	/* private uid is kept up to date, conf_data may be outdated */
-	if (startpriv->uid.type != UA_BASE_DEVICE) {
+	if (startpriv->uid.type == UA_BASE_PAV_ALIAS)
 		pfxdata->validity.verify_base = 1;
-		if (startpriv->uid.type == UA_HYPER_PAV_ALIAS)
-			pfxdata->validity.hyper_pav = 1;
+
+	if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) {
+		pfxdata->validity.verify_base = 1;
+		pfxdata->validity.hyper_pav = 1;
 	}
 
 	/* define extend data (mostly)*/
@@ -2964,10 +2966,12 @@ static int prepare_itcw(struct itcw *itcw,
 	pfxdata.validity.define_extent = 1;
 
 	/* private uid is kept up to date, conf_data may be outdated */
-	if (startpriv->uid.type != UA_BASE_DEVICE) {
+	if (startpriv->uid.type == UA_BASE_PAV_ALIAS)
+		pfxdata.validity.verify_base = 1;
+
+	if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) {
 		pfxdata.validity.verify_base = 1;
-		if (startpriv->uid.type == UA_HYPER_PAV_ALIAS)
-			pfxdata.validity.hyper_pav = 1;
+		pfxdata.validity.hyper_pav = 1;
 	}
 
 	switch (cmd) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] gianfar: fix a flooded alignment reports because of padding issue.
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (411 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] powerpc/perf: Fix oops when grouping different pmu events Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] net_sched: red: Avoid illegal values Sasha Levin
                   ` (103 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Zumeng Chen, David S . Miller, Sasha Levin

From: Zumeng Chen <zumeng.chen@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 58117672943734715bbe7565ac9f062effa524f0 ]

According to LS1021A RM, the value of PAL can be set so that the start of the
IP header in the receive data buffer is aligned to a 32-bit boundary. Normally,
setting PAL = 2 provides minimal padding to ensure such alignment of the IP
header.

However every incoming packet's 8-byte time stamp will be inserted into the
packet data buffer as padding alignment bytes when hardware time stamping is
enabled.

So we set the padding 8+2 here to avoid the flooded alignment faults:

root@128:~# cat /proc/cpu/alignment
User:           0
System:         17539 (inet_gro_receive+0x114/0x2c0)
Skipped:        0
Half:           0
Word:           0
DWord:          0
Multi:          17539
User faults:    2 (fixup)

Also shown when exception report enablement

CPU: 0 PID: 161 Comm: irq/66-eth1_g0_ Not tainted 4.1.21-rt13-WR8.0.0.0_preempt-rt #16
Hardware name: Freescale LS1021A
[<8001b420>] (unwind_backtrace) from [<8001476c>] (show_stack+0x20/0x24)
[<8001476c>] (show_stack) from [<807cfb48>] (dump_stack+0x94/0xac)
[<807cfb48>] (dump_stack) from [<80025d70>] (do_alignment+0x720/0x958)
[<80025d70>] (do_alignment) from [<80009224>] (do_DataAbort+0x40/0xbc)
[<80009224>] (do_DataAbort) from [<80015398>] (__dabt_svc+0x38/0x60)
Exception stack(0x86ad1cc0 to 0x86ad1d08)
1cc0: f9b3e080 86b3d072 2d78d287 00000000 866816c0 86b3d05e 86e785d0 00000000
1ce0: 00000011 0000000e 80840ab0 86ad1d3c 86ad1d08 86ad1d08 806d7fc0 806d806c
1d00: 40070013 ffffffff
[<80015398>] (__dabt_svc) from [<806d806c>] (inet_gro_receive+0x114/0x2c0)
[<806d806c>] (inet_gro_receive) from [<80660eec>] (dev_gro_receive+0x21c/0x3c0)
[<80660eec>] (dev_gro_receive) from [<8066133c>] (napi_gro_receive+0x44/0x17c)
[<8066133c>] (napi_gro_receive) from [<804f0538>] (gfar_clean_rx_ring+0x39c/0x7d4)
[<804f0538>] (gfar_clean_rx_ring) from [<804f0bf4>] (gfar_poll_rx_sq+0x58/0xe0)
[<804f0bf4>] (gfar_poll_rx_sq) from [<80660b10>] (net_rx_action+0x27c/0x43c)
[<80660b10>] (net_rx_action) from [<80033638>] (do_current_softirqs+0x1e0/0x3dc)
[<80033638>] (do_current_softirqs) from [<800338c4>] (__local_bh_enable+0x90/0xa8)
[<800338c4>] (__local_bh_enable) from [<8008025c>] (irq_forced_thread_fn+0x70/0x84)
[<8008025c>] (irq_forced_thread_fn) from [<800805e8>] (irq_thread+0x16c/0x244)
[<800805e8>] (irq_thread) from [<8004e490>] (kthread+0xe8/0x104)
[<8004e490>] (kthread) from [<8000fda8>] (ret_from_fork+0x14/0x2c)

Signed-off-by: Zumeng Chen <zumeng.chen@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/freescale/gianfar.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index 3ea651afa63d..6075ed694a6c 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -1413,9 +1413,11 @@ static int gfar_probe(struct platform_device *ofdev)
 
 	gfar_init_addr_hash_table(priv);
 
-	/* Insert receive time stamps into padding alignment bytes */
+	/* Insert receive time stamps into padding alignment bytes, and
+	 * plus 2 bytes padding to ensure the cpu alignment.
+	 */
 	if (priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)
-		priv->padding = 8;
+		priv->padding = 8 + DEFAULT_PADDING;
 
 	if (dev->features & NETIF_F_IP_CSUM ||
 	    priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net_sched: red: Avoid devision by zero
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (413 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] net_sched: red: Avoid illegal values Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] 509: fix printing uninitialized stack memory when OID is empty Sasha Levin
                   ` (101 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Nogah Frankel, David S . Miller, Sasha Levin

From: Nogah Frankel <nogahf@mellanox.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5c472203421ab4f928aa1ae9e1dbcfdd80324148 ]

Do not allow delta value to be zero since it is used as a divisor.

Fixes: 8af2a218de38 ("sch_red: Adaptative RED AQM")
Signed-off-by: Nogah Frankel <nogahf@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/net/red.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/net/red.h b/include/net/red.h
index 76e0b5f922c6..ba5039418a93 100644
--- a/include/net/red.h
+++ b/include/net/red.h
@@ -178,7 +178,7 @@ static inline void red_set_parms(struct red_parms *p,
 	p->qth_max	= qth_max << Wlog;
 	p->Wlog		= Wlog;
 	p->Plog		= Plog;
-	if (delta < 0)
+	if (delta <= 0)
 		delta = 1;
 	p->qth_delta	= delta;
 	if (!max_P) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net_sched: red: Avoid illegal values
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (412 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] gianfar: fix a flooded alignment reports because of padding issue Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] net_sched: red: Avoid devision by zero Sasha Levin
                   ` (102 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Nogah Frankel, David S . Miller, Sasha Levin

From: Nogah Frankel <nogahf@mellanox.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8afa10cbe281b10371fee5a87ab266e48d71a7f9 ]

Check the qmin & qmax values doesn't overflow for the given Wlog value.
Check that qmin <= qmax.

Fixes: a783474591f2 ("[PKT_SCHED]: Generic RED layer")
Signed-off-by: Nogah Frankel <nogahf@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/net/red.h     | 11 +++++++++++
 net/sched/sch_choke.c |  3 +++
 net/sched/sch_gred.c  |  3 +++
 net/sched/sch_red.c   |  2 ++
 net/sched/sch_sfq.c   |  3 +++
 5 files changed, 22 insertions(+)

diff --git a/include/net/red.h b/include/net/red.h
index ba5039418a93..3618cdfec884 100644
--- a/include/net/red.h
+++ b/include/net/red.h
@@ -167,6 +167,17 @@ static inline void red_set_vars(struct red_vars *v)
 	v->qcount	= -1;
 }
 
+static inline bool red_check_params(u32 qth_min, u32 qth_max, u8 Wlog)
+{
+	if (fls(qth_min) + Wlog > 32)
+		return false;
+	if (fls(qth_max) + Wlog > 32)
+		return false;
+	if (qth_max < qth_min)
+		return false;
+	return true;
+}
+
 static inline void red_set_parms(struct red_parms *p,
 				 u32 qth_min, u32 qth_max, u8 Wlog, u8 Plog,
 				 u8 Scell_log, u8 *stab, u32 max_P)
diff --git a/net/sched/sch_choke.c b/net/sched/sch_choke.c
index 3f6437db9b0f..ec11aced121d 100644
--- a/net/sched/sch_choke.c
+++ b/net/sched/sch_choke.c
@@ -431,6 +431,9 @@ static int choke_change(struct Qdisc *sch, struct nlattr *opt)
 
 	ctl = nla_data(tb[TCA_CHOKE_PARMS]);
 
+	if (!red_check_params(ctl->qth_min, ctl->qth_max, ctl->Wlog))
+		return -EINVAL;
+
 	if (ctl->limit > CHOKE_MAX_QUEUE)
 		return -EINVAL;
 
diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c
index 634529e0ce6b..5a476126a8fb 100644
--- a/net/sched/sch_gred.c
+++ b/net/sched/sch_gred.c
@@ -388,6 +388,9 @@ static inline int gred_change_vq(struct Qdisc *sch, int dp,
 	struct gred_sched *table = qdisc_priv(sch);
 	struct gred_sched_data *q = table->tab[dp];
 
+	if (!red_check_params(ctl->qth_min, ctl->qth_max, ctl->Wlog))
+		return -EINVAL;
+
 	if (!q) {
 		table->tab[dp] = q = *prealloc;
 		*prealloc = NULL;
diff --git a/net/sched/sch_red.c b/net/sched/sch_red.c
index 8c0508c0e287..0505b8408c8b 100644
--- a/net/sched/sch_red.c
+++ b/net/sched/sch_red.c
@@ -199,6 +199,8 @@ static int red_change(struct Qdisc *sch, struct nlattr *opt)
 	max_P = tb[TCA_RED_MAX_P] ? nla_get_u32(tb[TCA_RED_MAX_P]) : 0;
 
 	ctl = nla_data(tb[TCA_RED_PARMS]);
+	if (!red_check_params(ctl->qth_min, ctl->qth_max, ctl->Wlog))
+		return -EINVAL;
 
 	if (ctl->limit > 0) {
 		child = fifo_create_dflt(sch, &bfifo_qdisc_ops, ctl->limit);
diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c
index 78d0eaf5de61..0dd1f2b2eb10 100644
--- a/net/sched/sch_sfq.c
+++ b/net/sched/sch_sfq.c
@@ -656,6 +656,9 @@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt)
 	if (ctl->divisor &&
 	    (!is_power_of_2(ctl->divisor) || ctl->divisor > 65536))
 		return -EINVAL;
+	if (ctl_v1 && !red_check_params(ctl_v1->qth_min, ctl_v1->qth_max,
+					ctl_v1->Wlog))
+		return -EINVAL;
 	if (ctl_v1 && ctl_v1->qth_min) {
 		p = kmalloc(sizeof(*p), GFP_KERNEL);
 		if (!p)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] 509: fix printing uninitialized stack memory when OID is empty
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (414 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] net_sched: red: Avoid devision by zero Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] btrfs: Fix possible off-by-one in btrfs_search_path_in_tree Sasha Levin
                   ` (100 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Eric Biggers, Eric Biggers, David Howells, Sasha Levin

From: Eric Biggers <ebiggers3@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8dfd2f22d3bf3ab7714f7495ad5d897b8845e8c1 ]

Callers of sprint_oid() do not check its return value before printing
the result.  In the case where the OID is zero-length, -EBADMSG was
being returned without anything being written to the buffer, resulting
in uninitialized stack memory being printed.  Fix this by writing
"(bad)" to the buffer in the cases where -EBADMSG is returned.

Fixes: 4f73175d0375 ("X.509: Add utility functions to render OIDs as strings")
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 lib/oid_registry.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/lib/oid_registry.c b/lib/oid_registry.c
index 318f382a010d..150e04d70303 100644
--- a/lib/oid_registry.c
+++ b/lib/oid_registry.c
@@ -116,7 +116,7 @@ int sprint_oid(const void *data, size_t datasize, char *buffer, size_t bufsize)
 	int count;
 
 	if (v >= end)
-		return -EBADMSG;
+		goto bad;
 
 	n = *v++;
 	ret = count = snprintf(buffer, bufsize, "%u.%u", n / 40, n % 40);
@@ -134,7 +134,7 @@ int sprint_oid(const void *data, size_t datasize, char *buffer, size_t bufsize)
 			num = n & 0x7f;
 			do {
 				if (v >= end)
-					return -EBADMSG;
+					goto bad;
 				n = *v++;
 				num <<= 7;
 				num |= n & 0x7f;
@@ -148,6 +148,10 @@ int sprint_oid(const void *data, size_t datasize, char *buffer, size_t bufsize)
 	}
 
 	return ret;
+
+bad:
+	snprintf(buffer, bufsize, "(bad)");
+	return -EBADMSG;
 }
 EXPORT_SYMBOL_GPL(sprint_oid);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] btrfs: Fix possible off-by-one in btrfs_search_path_in_tree
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (415 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] 509: fix printing uninitialized stack memory when OID is empty Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:26 ` [added to the 4.1 stable tree] clk: fix a panic error caused by accessing NULL pointer Sasha Levin
                   ` (99 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Nikolay Borisov, David Sterba, Sasha Levin

From: Nikolay Borisov <nborisov@suse.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c8bcbfbd239ed60a6562964b58034ac8a25f4c31 ]

The name char array passed to btrfs_search_path_in_tree is of size
BTRFS_INO_LOOKUP_PATH_MAX (4080). So the actual accessible char indexes
are in the range of [0, 4079]. Currently the code uses the define but this
represents an off-by-one.

Implications:

Size of btrfs_ioctl_ino_lookup_args is 4096, so the new byte will be
written to extra space, not some padding that could be provided by the
allocator.

btrfs-progs store the arguments on stack, but kernel does own copy of
the ioctl buffer and the off-by-one overwrite does not affect userspace,
but the ending 0 might be lost.

Kernel ioctl buffer is allocated dynamically so we're overwriting
somebody else's memory, and the ioctl is privileged if args.objectid is
not 256. Which is in most cases, but resolving a subvolume stored in
another directory will trigger that path.

Before this patch the buffer was one byte larger, but then the -1 was
not added.

Fixes: ac8e9819d71f907 ("Btrfs: add search and inode lookup ioctls")
Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
[ added implications ]
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/btrfs/ioctl.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 2b115c309e1c..b7f6b473cd16 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -2216,7 +2216,7 @@ static noinline int btrfs_search_path_in_tree(struct btrfs_fs_info *info,
 	if (!path)
 		return -ENOMEM;
 
-	ptr = &name[BTRFS_INO_LOOKUP_PATH_MAX];
+	ptr = &name[BTRFS_INO_LOOKUP_PATH_MAX - 1];
 
 	key.objectid = tree_id;
 	key.type = BTRFS_ROOT_ITEM_KEY;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] clk: fix a panic error caused by accessing NULL pointer
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (416 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] btrfs: Fix possible off-by-one in btrfs_search_path_in_tree Sasha Levin
@ 2018-03-01 15:26 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] spi: sun4i: disable clocks in the remove function Sasha Levin
                   ` (98 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:26 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Cai Li, Chunyan Zhang, Stephen Boyd, Sasha Levin

From: Cai Li <cai.li@spreadtrum.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 975b820b6836b6b6c42fb84cd2e772e2b41bca67 ]

In some cases the clock parent would be set NULL when doing re-parent,
it will cause a NULL pointer accessing if clk_set trace event is
enabled.

This patch sets the parent as "none" if the input parameter is NULL.

Fixes: dfc202ead312 (clk: Add tracepoints for hardware operations)
Signed-off-by: Cai Li <cai.li@spreadtrum.com>
Signed-off-by: Chunyan Zhang <chunyan.zhang@spreadtrum.com>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/trace/events/clk.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/trace/events/clk.h b/include/trace/events/clk.h
index 758607226bfd..2cd449328aee 100644
--- a/include/trace/events/clk.h
+++ b/include/trace/events/clk.h
@@ -134,12 +134,12 @@ DECLARE_EVENT_CLASS(clk_parent,
 
 	TP_STRUCT__entry(
 		__string(        name,           core->name                )
-		__string(        pname,          parent->name              )
+		__string(        pname, parent ? parent->name : "none"     )
 	),
 
 	TP_fast_assign(
 		__assign_str(name, core->name);
-		__assign_str(pname, parent->name);
+		__assign_str(pname, parent ? parent->name : "none");
 	),
 
 	TP_printk("%s %s", __get_str(name), __get_str(pname))
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] xfrm: Fix stack-out-of-bounds with misconfigured transport mode policies.
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (418 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] spi: sun4i: disable clocks in the remove function Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] dmaengine: jz4740: disable/unprepare clk if probe fails Sasha Levin
                   ` (96 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Steffen Klassert, Sasha Levin

From: Steffen Klassert <steffen.klassert@secunet.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 732706afe1cc46ef48493b3d2b69c98f36314ae4 ]

On policies with a transport mode template, we pass the addresses
from the flowi to xfrm_state_find(), assuming that the IP addresses
(and address family) don't change during transformation.

Unfortunately our policy template validation is not strict enough.
It is possible to configure policies with transport mode template
where the address family of the template does not match the selectors
address family. This lead to stack-out-of-bound reads because
we compare arddesses of the wrong family. Fix this by refusing
such a configuration, address family can not change on transport
mode.

We use the assumption that, on transport mode, the first templates
address family must match the address family of the policy selector.
Subsequent transport mode templates must mach the address family of
the previous template.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/xfrm/xfrm_user.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index 713194a3822f..84541b35629a 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -1353,11 +1353,14 @@ static void copy_templates(struct xfrm_policy *xp, struct xfrm_user_tmpl *ut,
 
 static int validate_tmpl(int nr, struct xfrm_user_tmpl *ut, u16 family)
 {
+	u16 prev_family;
 	int i;
 
 	if (nr > XFRM_MAX_DEPTH)
 		return -EINVAL;
 
+	prev_family = family;
+
 	for (i = 0; i < nr; i++) {
 		/* We never validated the ut->family value, so many
 		 * applications simply leave it at zero.  The check was
@@ -1369,6 +1372,12 @@ static int validate_tmpl(int nr, struct xfrm_user_tmpl *ut, u16 family)
 		if (!ut[i].family)
 			ut[i].family = family;
 
+		if ((ut[i].mode == XFRM_MODE_TRANSPORT) &&
+		    (ut[i].family != prev_family))
+			return -EINVAL;
+
+		prev_family = ut[i].family;
+
 		switch (ut[i].family) {
 		case AF_INET:
 			break;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] spi: sun4i: disable clocks in the remove function
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (417 preceding siblings ...)
  2018-03-01 15:26 ` [added to the 4.1 stable tree] clk: fix a panic error caused by accessing NULL pointer Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] xfrm: Fix stack-out-of-bounds with misconfigured transport mode policies Sasha Levin
                   ` (97 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Takuo Koguchi, Takuo Koguchi, Mark Brown, Sasha Levin

From: Takuo Koguchi <takuo.koguchi@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c810daba0ab5226084a56893a789af427a801146 ]

mclk and hclk need to be disabled. Since pm_runtime_disable does
not disable the clocks, use pm_runtime_force_suspend instead.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Takuo Koguchi <takuo.koguchi.sw@hitachi.com>
Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/spi/spi-sun4i.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/spi/spi-sun4i.c b/drivers/spi/spi-sun4i.c
index 39d7c7c70112..2eea3de5a668 100644
--- a/drivers/spi/spi-sun4i.c
+++ b/drivers/spi/spi-sun4i.c
@@ -458,7 +458,7 @@ static int sun4i_spi_probe(struct platform_device *pdev)
 
 static int sun4i_spi_remove(struct platform_device *pdev)
 {
-	pm_runtime_disable(&pdev->dev);
+	pm_runtime_force_suspend(&pdev->dev);
 
 	return 0;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] dmaengine: jz4740: disable/unprepare clk if probe fails
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (419 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] xfrm: Fix stack-out-of-bounds with misconfigured transport mode policies Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] mm/early_ioremap: Fix boot hang with earlyprintk=efi,keep Sasha Levin
                   ` (95 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Tobias Jordan, Vinod Koul, Sasha Levin

From: Tobias Jordan <Tobias.Jordan@elektrobit.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit eb9436966fdc84cebdf222952a99898ab46d9bb0 ]

in error path of jz4740_dma_probe(), call clk_disable_unprepare() to clean
up.

Found by Linux Driver Verification project (linuxtesting.org).

Fixes: 25ce6c35fea0 MIPS: jz4740: Remove custom DMA API
Signed-off-by: Tobias Jordan <Tobias.Jordan@elektrobit.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/dma/dma-jz4740.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/dma/dma-jz4740.c b/drivers/dma/dma-jz4740.c
index 7638b24ce8d0..35fc58f4bf4b 100644
--- a/drivers/dma/dma-jz4740.c
+++ b/drivers/dma/dma-jz4740.c
@@ -557,7 +557,7 @@ static int jz4740_dma_probe(struct platform_device *pdev)
 
 	ret = dma_async_device_register(dd);
 	if (ret)
-		return ret;
+		goto err_clk;
 
 	irq = platform_get_irq(pdev, 0);
 	ret = request_irq(irq, jz4740_dma_irq, 0, dev_name(&pdev->dev), dmadev);
@@ -570,6 +570,8 @@ static int jz4740_dma_probe(struct platform_device *pdev)
 
 err_unregister:
 	dma_async_device_unregister(dd);
+err_clk:
+	clk_disable_unprepare(dmadev->clk);
 	return ret;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mm/early_ioremap: Fix boot hang with earlyprintk=efi,keep
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (420 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] dmaengine: jz4740: disable/unprepare clk if probe fails Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/mm/kmmio: Fix mmiotrace for page unaligned addresses Sasha Levin
                   ` (94 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Dave Young, Ingo Molnar, Sasha Levin

From: Dave Young <dyoung@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7f6f60a1ba52538c16f26930bfbcfe193d9d746a ]

earlyprintk=efi,keep does not work any more with a warning
in mm/early_ioremap.c: WARN_ON(system_state != SYSTEM_BOOTING):
Boot just hangs because of the earlyprintk within the earlyprintk
implementation code itself.

This is caused by a new introduced middle state in:

  69a78ff226fe ("init: Introduce SYSTEM_SCHEDULING state")

early_ioremap() is fine in both SYSTEM_BOOTING and SYSTEM_SCHEDULING
states, original condition should be updated accordingly.

Signed-off-by: Dave Young <dyoung@redhat.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: bp@suse.de
Cc: linux-efi@vger.kernel.org
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20171209041610.GA3249@dhcp-128-65.nay.redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 mm/early_ioremap.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/early_ioremap.c b/mm/early_ioremap.c
index e10ccd299d66..5edcf1b37fa6 100644
--- a/mm/early_ioremap.c
+++ b/mm/early_ioremap.c
@@ -102,7 +102,7 @@ __early_ioremap(resource_size_t phys_addr, unsigned long size, pgprot_t prot)
 	enum fixed_addresses idx;
 	int i, slot;
 
-	WARN_ON(system_state != SYSTEM_BOOTING);
+	WARN_ON(system_state >= SYSTEM_RUNNING);
 
 	slot = -1;
 	for (i = 0; i < FIX_BTMAPS_SLOTS; i++) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] xen: XEN_ACPI_PROCESSOR is Dom0-only
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (422 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/mm/kmmio: Fix mmiotrace for page unaligned addresses Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] hippi: Fix a Fix a possible sleep-in-atomic bug in rr_close Sasha Levin
                   ` (92 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Jan Beulich, Jan Beulich, Boris Ostrovsky, Sasha Levin

From: Jan Beulich <JBeulich@suse.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c4f9d9cb2c29ff04c6b4bb09b72802d8aedfc7cb ]

Add a respective dependency.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/xen/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig
index 7cd226da15fe..a4918b00308f 100644
--- a/drivers/xen/Kconfig
+++ b/drivers/xen/Kconfig
@@ -239,7 +239,7 @@ config XEN_ACPI_HOTPLUG_CPU
 
 config XEN_ACPI_PROCESSOR
 	tristate "Xen ACPI processor"
-	depends on XEN && X86 && ACPI_PROCESSOR && CPU_FREQ
+	depends on XEN && XEN_DOM0 && X86 && ACPI_PROCESSOR && CPU_FREQ
 	default m
 	help
           This ACPI processor uploads Power Management information to the Xen
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/mm/kmmio: Fix mmiotrace for page unaligned addresses
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (421 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] mm/early_ioremap: Fix boot hang with earlyprintk=efi,keep Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] xen: XEN_ACPI_PROCESSOR is Dom0-only Sasha Levin
                   ` (93 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Karol Herbst, Ingo Molnar, Sasha Levin

From: Karol Herbst <kherbst@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6d60ce384d1d5ca32b595244db4077a419acc687 ]

If something calls ioremap() with an address not aligned to PAGE_SIZE, the
returned address might be not aligned as well. This led to a probe
registered on exactly the returned address, but the entire page was armed
for mmiotracing.

On calling iounmap() the address passed to unregister_kmmio_probe() was
PAGE_SIZE aligned by the caller leading to a complete freeze of the
machine.

We should always page align addresses while (un)registerung mappings,
because the mmiotracer works on top of pages, not mappings. We still keep
track of the probes based on their real addresses and lengths though,
because the mmiotrace still needs to know what are mapped memory regions.

Also move the call to mmiotrace_iounmap() prior page aligning the address,
so that all probes are unregistered properly, otherwise the kernel ends up
failing memory allocations randomly after disabling the mmiotracer.

Tested-by: Lyude <lyude@redhat.com>
Signed-off-by: Karol Herbst <kherbst@redhat.com>
Acked-by: Pekka Paalanen <ppaalanen@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: nouveau@lists.freedesktop.org
Link: http://lkml.kernel.org/r/20171127075139.4928-1-kherbst@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/mm/ioremap.c |  4 ++--
 arch/x86/mm/kmmio.c   | 12 +++++++-----
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
index 70e7444c6835..5f3e167daefd 100644
--- a/arch/x86/mm/ioremap.c
+++ b/arch/x86/mm/ioremap.c
@@ -304,11 +304,11 @@ void iounmap(volatile void __iomem *addr)
 	    (void __force *)addr < phys_to_virt(ISA_END_ADDRESS))
 		return;
 
+	mmiotrace_iounmap(addr);
+
 	addr = (volatile void __iomem *)
 		(PAGE_MASK & (unsigned long __force)addr);
 
-	mmiotrace_iounmap(addr);
-
 	/* Use the vm area unlocked, assuming the caller
 	   ensures there isn't another iounmap for the same address
 	   in parallel. Reuse of the virtual address is prevented by
diff --git a/arch/x86/mm/kmmio.c b/arch/x86/mm/kmmio.c
index ddb2244b06a1..76604c8a2a48 100644
--- a/arch/x86/mm/kmmio.c
+++ b/arch/x86/mm/kmmio.c
@@ -434,17 +434,18 @@ int register_kmmio_probe(struct kmmio_probe *p)
 	unsigned long flags;
 	int ret = 0;
 	unsigned long size = 0;
+	unsigned long addr = p->addr & PAGE_MASK;
 	const unsigned long size_lim = p->len + (p->addr & ~PAGE_MASK);
 	unsigned int l;
 	pte_t *pte;
 
 	spin_lock_irqsave(&kmmio_lock, flags);
-	if (get_kmmio_probe(p->addr)) {
+	if (get_kmmio_probe(addr)) {
 		ret = -EEXIST;
 		goto out;
 	}
 
-	pte = lookup_address(p->addr, &l);
+	pte = lookup_address(addr, &l);
 	if (!pte) {
 		ret = -EINVAL;
 		goto out;
@@ -453,7 +454,7 @@ int register_kmmio_probe(struct kmmio_probe *p)
 	kmmio_count++;
 	list_add_rcu(&p->list, &kmmio_probes);
 	while (size < size_lim) {
-		if (add_kmmio_fault_page(p->addr + size))
+		if (add_kmmio_fault_page(addr + size))
 			pr_err("Unable to set page fault.\n");
 		size += page_level_size(l);
 	}
@@ -527,19 +528,20 @@ void unregister_kmmio_probe(struct kmmio_probe *p)
 {
 	unsigned long flags;
 	unsigned long size = 0;
+	unsigned long addr = p->addr & PAGE_MASK;
 	const unsigned long size_lim = p->len + (p->addr & ~PAGE_MASK);
 	struct kmmio_fault_page *release_list = NULL;
 	struct kmmio_delayed_release *drelease;
 	unsigned int l;
 	pte_t *pte;
 
-	pte = lookup_address(p->addr, &l);
+	pte = lookup_address(addr, &l);
 	if (!pte)
 		return;
 
 	spin_lock_irqsave(&kmmio_lock, flags);
 	while (size < size_lim) {
-		release_kmmio_fault_page(p->addr + size, &release_list);
+		release_kmmio_fault_page(addr + size, &release_list);
 		size += page_level_size(l);
 	}
 	list_del_rcu(&p->list);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] hippi: Fix a Fix a possible sleep-in-atomic bug in rr_close
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (423 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] xen: XEN_ACPI_PROCESSOR is Dom0-only Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] isdn: icn: remove a #warning Sasha Levin
                   ` (91 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jia-Ju Bai, David S . Miller, Sasha Levin

From: Jia-Ju Bai <baijiaju1990@163.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6e266610eb6553cfb7e7eb5d11914bd01509c406 ]

The driver may sleep under a spinlock.
The function call path is:
rr_close (acquire the spinlock)
  free_irq --> may sleep

To fix it, free_irq is moved to the place without holding the spinlock.

This bug is found by my static analysis tool(DSAC) and checked by my code review.

Signed-off-by: Jia-Ju Bai <baijiaju1990@163.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/hippi/rrunner.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/hippi/rrunner.c b/drivers/net/hippi/rrunner.c
index 95c0b45a68fb..313e006f74fe 100644
--- a/drivers/net/hippi/rrunner.c
+++ b/drivers/net/hippi/rrunner.c
@@ -1381,8 +1381,8 @@ static int rr_close(struct net_device *dev)
 			    rrpriv->info_dma);
 	rrpriv->info = NULL;
 
-	free_irq(pdev->irq, dev);
 	spin_unlock_irqrestore(&rrpriv->lock, flags);
+	free_irq(pdev->irq, dev);
 
 	return 0;
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] isdn: icn: remove a #warning
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (424 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] hippi: Fix a Fix a possible sleep-in-atomic bug in rr_close Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] virtio_balloon: prevent uninitialized variable use Sasha Levin
                   ` (90 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Greg Kroah-Hartman, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 01ed1e1504ac83a8b0b365c9f55d3427babbd7d9 ]

The icn driver currently produces an unconditional #warning whenever
we build it, introduced by Karsten Keil back in 2003:

 #warning TODO test headroom or use skb->nb to flag ACK

Karsten's original commit (from BitKeeper) contains this description:

    - here are lot of bugs left, so ISDN is not stable yet but
      I think it's really time to fix it, even if it need some cycles
      to get it right (normally I'm only send patches if it works 100% for
      me).
    - I add some additional #warnings to address places which need fixing
      (I hope that some of the other ISDN developer jump in)

Apparently this has not happened, and it is unlikely that it ever will,
given that the driver doesn't seem to work. No substantial bug fixes
other than janitorial cleanups have happened in the driver since then,
and I see no indication that anyone who patched it had the hardware.

We should probably either remove the driver, or remove all of i4l,
but for now, this shuts up the distracting #warning by turning it
into a comment.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Link: http://git.meleeweb.net/linux.git/commit/?id=b0deac0886b0056765afd149e9834373b38e096b
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/isdn/icn/icn.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/isdn/icn/icn.c b/drivers/isdn/icn/icn.c
index 358a574d9e8b..46d957c34be1 100644
--- a/drivers/isdn/icn/icn.c
+++ b/drivers/isdn/icn/icn.c
@@ -718,7 +718,7 @@ icn_sendbuf(int channel, int ack, struct sk_buff *skb, icn_card *card)
 			return 0;
 		if (card->sndcount[channel] > ICN_MAX_SQUEUE)
 			return 0;
-#warning TODO test headroom or use skb->nb to flag ACK
+		/* TODO test headroom or use skb->nb to flag ACK */
 		nskb = skb_clone(skb, GFP_ATOMIC);
 		if (nskb) {
 			/* Push ACK flag as one
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] virtio_balloon: prevent uninitialized variable use
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (425 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] isdn: icn: remove a #warning Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] vmxnet3: prevent building with 64K pages Sasha Levin
                   ` (89 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Arnd Bergmann, Ladi Prosek, Michael S . Tsirkin, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f0bb2d50dfcc519f06f901aac88502be6ff1df2c ]

The latest gcc-7.0.1 snapshot reports a new warning:

virtio/virtio_balloon.c: In function 'update_balloon_stats':
virtio/virtio_balloon.c:258:26: error: 'events[2]' is used uninitialized in this function [-Werror=uninitialized]
virtio/virtio_balloon.c:260:26: error: 'events[3]' is used uninitialized in this function [-Werror=uninitialized]
virtio/virtio_balloon.c:261:56: error: 'events[18]' is used uninitialized in this function [-Werror=uninitialized]
virtio/virtio_balloon.c:262:56: error: 'events[17]' is used uninitialized in this function [-Werror=uninitialized]

This seems absolutely right, so we should add an extra check to
prevent copying uninitialized stack data into the statistics.
>>From all I can tell, this has been broken since the statistics code
was originally added in 2.6.34.

Fixes: 9564e138b1f6 ("virtio: Add memory statistics reporting to the balloon driver (V4)")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Ladi Prosek <lprosek@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/virtio/virtio_balloon.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
index 01d15dca940e..7cf26768ea0b 100644
--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -239,12 +239,14 @@ static void update_balloon_stats(struct virtio_balloon *vb)
 	all_vm_events(events);
 	si_meminfo(&i);
 
+#ifdef CONFIG_VM_EVENT_COUNTERS
 	update_stat(vb, idx++, VIRTIO_BALLOON_S_SWAP_IN,
 				pages_to_bytes(events[PSWPIN]));
 	update_stat(vb, idx++, VIRTIO_BALLOON_S_SWAP_OUT,
 				pages_to_bytes(events[PSWPOUT]));
 	update_stat(vb, idx++, VIRTIO_BALLOON_S_MAJFLT, events[PGMAJFAULT]);
 	update_stat(vb, idx++, VIRTIO_BALLOON_S_MINFLT, events[PGFAULT]);
+#endif
 	update_stat(vb, idx++, VIRTIO_BALLOON_S_MEMFREE,
 				pages_to_bytes(i.freeram));
 	update_stat(vb, idx++, VIRTIO_BALLOON_S_MEMTOT,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] vmxnet3: prevent building with 64K pages
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (426 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] virtio_balloon: prevent uninitialized variable use Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] gpio: intel-mid: Fix build warning when !CONFIG_PM Sasha Levin
                   ` (88 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, David S . Miller, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fbdf0e28d061708cf18ba0f8e0db5360dc9a15b9 ]

I got a warning about broken code on ARM64 with 64K pages:

drivers/net/vmxnet3/vmxnet3_drv.c: In function 'vmxnet3_rq_init':
drivers/net/vmxnet3/vmxnet3_drv.c:1679:29: error: large integer implicitly truncated to unsigned type [-Werror=overflow]
    rq->buf_info[0][i].len = PAGE_SIZE;

'len' here is a 16-bit integer, so this clearly won't work. I don't think
this driver is used much on anything other than x86, so there is no need
to fix this properly and we can work around it with a Kconfig dependency
to forbid known-broken configurations. qemu in theory supports it on
other architectures too, but presumably only for compatibility with x86
guests that also run on vmware.

CONFIG_PAGE_SIZE_64KB is used on hexagon, mips, sh and tile, the other
symbols are architecture-specific names for the same thing.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/Kconfig | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index df51d6025a90..0eeb248a287e 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -374,6 +374,9 @@ config XEN_NETDEV_BACKEND
 config VMXNET3
 	tristate "VMware VMXNET3 ethernet driver"
 	depends on PCI && INET
+	depends on !(PAGE_SIZE_64KB || ARM64_64K_PAGES || \
+		     IA64_PAGE_SIZE_64KB || MICROBLAZE_64K_PAGES || \
+		     PARISC_PAGE_SIZE_64KB || PPC_64K_PAGES)
 	help
 	  This driver supports VMware's vmxnet3 virtual ethernet NIC.
 	  To compile this driver as a module, choose M here: the
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] platform/x86: intel_mid_thermal: Fix suspend handlers unused warning
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (428 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] gpio: intel-mid: Fix build warning when !CONFIG_PM Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: advansys: fix build warning for PCI=n Sasha Levin
                   ` (86 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Borislav Petkov, Andy Shevchenko, Sasha Levin

From: Borislav Petkov <bp@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b4aca383f9afb5f84b05de272656e6d4a919d995 ]

Fix:

  drivers/platform/x86/intel_mid_thermal.c:424:12: warning: ‘mid_thermal_resume’
  defined but not used [-Wunused-function]
   static int mid_thermal_resume(struct device *dev)
              ^
  drivers/platform/x86/intel_mid_thermal.c:436:12: warning: ‘mid_thermal_suspend’
  defined but not used [-Wunused-function]
   static int mid_thermal_suspend(struct device *dev)
              ^

which I see during randbuilds here.

Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Darren Hart <dvhart@infradead.org>
Cc: platform-driver-x86@vger.kernel.org
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/platform/x86/intel_mid_thermal.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/platform/x86/intel_mid_thermal.c b/drivers/platform/x86/intel_mid_thermal.c
index aeb3f786d2f0..84273a979768 100644
--- a/drivers/platform/x86/intel_mid_thermal.c
+++ b/drivers/platform/x86/intel_mid_thermal.c
@@ -416,6 +416,7 @@ static struct thermal_device_info *initialize_sensor(int index)
 	return td_info;
 }
 
+#ifdef CONFIG_PM_SLEEP
 /**
  * mid_thermal_resume - resume routine
  * @dev: device structure
@@ -443,6 +444,7 @@ static int mid_thermal_suspend(struct device *dev)
 	 */
 	return configure_adc(0);
 }
+#endif
 
 static SIMPLE_DEV_PM_OPS(mid_thermal_pm,
 			 mid_thermal_suspend, mid_thermal_resume);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] gpio: intel-mid: Fix build warning when !CONFIG_PM
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (427 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] vmxnet3: prevent building with 64K pages Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] platform/x86: intel_mid_thermal: Fix suspend handlers unused warning Sasha Levin
                   ` (87 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Augusto Mecking Caringi, Linus Walleij, Sasha Levin

From: Augusto Mecking Caringi <augustocaringi@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fbc2a294f29e726787a0f5238b27137904f26b81 ]

The only usage of function intel_gpio_runtime_idle() is here (in the
same file):

static const struct dev_pm_ops intel_gpio_pm_ops = {
	SET_RUNTIME_PM_OPS(NULL, NULL, intel_gpio_runtime_idle)
};

And when CONFIG_PM is not set, the macro SET_RUNTIME_PM_OPS expands to
nothing, causing the following compiler warning:

drivers/gpio/gpio-intel-mid.c:324:12: warning: ‘intel_gpio_runtime_idle’
defined but not used [-Wunused-function]
static int intel_gpio_runtime_idle(struct device *dev)

Fix it by annotating the function with __maybe_unused.

Signed-off-by: Augusto Mecking Caringi <augustocaringi@gmail.com>
Acked-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/gpio/gpio-intel-mid.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpio/gpio-intel-mid.c b/drivers/gpio/gpio-intel-mid.c
index 14945fd9d5e1..935fa3bce6d0 100644
--- a/drivers/gpio/gpio-intel-mid.c
+++ b/drivers/gpio/gpio-intel-mid.c
@@ -326,7 +326,7 @@ static void intel_mid_irq_init_hw(struct intel_mid_gpio *priv)
 	}
 }
 
-static int intel_gpio_runtime_idle(struct device *dev)
+static int __maybe_unused intel_gpio_runtime_idle(struct device *dev)
 {
 	int err = pm_schedule_suspend(dev, 500);
 	return err ?: -EBUSY;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] video: fbdev: via: remove possibly unused variables
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (430 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: advansys: fix build warning for PCI=n Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/ras/inject: Make it depend on X86_LOCAL_APIC=y Sasha Levin
                   ` (84 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Arnd Bergmann, Bartlomiej Zolnierkiewicz, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 484c7bbf2649831714da3a0fa30213977458e9b5 ]

When CONFIG_PROC_FS is disabled, we get warnings about unused variables
as remove_proc_entry() evaluates to an empty macro.

drivers/video/fbdev/via/viafbdev.c: In function 'viafb_remove_proc':
drivers/video/fbdev/via/viafbdev.c:1635:4: error: unused variable 'iga2_entry' [-Werror=unused-variable]
drivers/video/fbdev/via/viafbdev.c:1634:4: error: unused variable 'iga1_entry' [-Werror=unused-variable]

These are easy to avoid by using the pointer from the structure.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/video/fbdev/via/viafbdev.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/video/fbdev/via/viafbdev.c b/drivers/video/fbdev/via/viafbdev.c
index f9718f012aae..badee04ef496 100644
--- a/drivers/video/fbdev/via/viafbdev.c
+++ b/drivers/video/fbdev/via/viafbdev.c
@@ -1630,16 +1630,14 @@ static void viafb_init_proc(struct viafb_shared *shared)
 }
 static void viafb_remove_proc(struct viafb_shared *shared)
 {
-	struct proc_dir_entry *viafb_entry = shared->proc_entry,
-		*iga1_entry = shared->iga1_proc_entry,
-		*iga2_entry = shared->iga2_proc_entry;
+	struct proc_dir_entry *viafb_entry = shared->proc_entry;
 
 	if (!viafb_entry)
 		return;
 
-	remove_proc_entry("output_devices", iga2_entry);
+	remove_proc_entry("output_devices", shared->iga2_proc_entry);
 	remove_proc_entry("iga2", viafb_entry);
-	remove_proc_entry("output_devices", iga1_entry);
+	remove_proc_entry("output_devices", shared->iga1_proc_entry);
 	remove_proc_entry("iga1", viafb_entry);
 	remove_proc_entry("supported_output_devices", viafb_entry);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] scsi: advansys: fix build warning for PCI=n
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (429 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] platform/x86: intel_mid_thermal: Fix suspend handlers unused warning Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] video: fbdev: via: remove possibly unused variables Sasha Levin
                   ` (85 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Martin K . Petersen, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f46e7cd36b5f2ce2bfb567e278a10ca717f85b84 ]

The advansys probe function tries to handle both ISA and PCI cases, each
hidden in an #ifdef when unused. This leads to a warning indicating that
when PCI is disabled we could be using uninitialized data:

drivers/scsi/advansys.c: In function  advansys_board_found :
drivers/scsi/advansys.c:11036:5: error:  ret  may be used uninitialized in this function [-Werror=maybe-uninitialized]
drivers/scsi/advansys.c:10928:28: note:  ret  was declared here
drivers/scsi/advansys.c:11309:8: error:  share_irq  may be used uninitialized in this function [-Werror=maybe-uninitialized]
drivers/scsi/advansys.c:10928:6: note:  share_irq  was declared here

This cannot happen in practice because the hardware in question only
exists for PCI, but changing the code to just error out here is better
for consistency and avoids the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/advansys.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c
index ae95e347f37d..969469261353 100644
--- a/drivers/scsi/advansys.c
+++ b/drivers/scsi/advansys.c
@@ -11476,6 +11476,9 @@ static int advansys_board_found(struct Scsi_Host *shost, unsigned int iop,
 		ASC_DBG(2, "AdvInitGetConfig()\n");
 
 		ret = AdvInitGetConfig(pdev, shost) ? -ENODEV : 0;
+#else
+		share_irq = 0;
+		ret = -ENODEV;
 #endif /* CONFIG_PCI */
 	}
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/build: Silence the build with "make -s"
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (432 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/ras/inject: Make it depend on X86_LOCAL_APIC=y Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86: add MULTIUSER dependency for KVM Sasha Levin
                   ` (82 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Ingo Molnar, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d460131dd50599e0e9405d5f4ae02c27d529a44a ]

Every kernel build on x86 will result in some output:

  Setup is 13084 bytes (padded to 13312 bytes).
  System is 4833 kB
  CRC 6d35fa35
  Kernel: arch/x86/boot/bzImage is ready  (#2)

This shuts it up, so that 'make -s' is truely silent as long as
everything works. Building without '-s' should produce unchanged
output.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Matt Fleming <matt@codeblueprint.co.uk>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20170719125310.2487451-6-arnd@arndb.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/boot/Makefile | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile
index 78c366462e70..48740eb2910c 100644
--- a/arch/x86/boot/Makefile
+++ b/arch/x86/boot/Makefile
@@ -64,12 +64,13 @@ GCOV_PROFILE := n
 $(obj)/bzImage: asflags-y  := $(SVGA_MODE)
 
 quiet_cmd_image = BUILD   $@
+silent_redirect_image = >/dev/null
 cmd_image = $(obj)/tools/build $(obj)/setup.bin $(obj)/vmlinux.bin \
-			       $(obj)/zoffset.h $@
+			       $(obj)/zoffset.h $@ $($(quiet)redirect_image)
 
 $(obj)/bzImage: $(obj)/setup.bin $(obj)/vmlinux.bin $(obj)/tools/build FORCE
 	$(call if_changed,image)
-	@echo 'Kernel: $@ is ready' ' (#'`cat .version`')'
+	@$(kecho) 'Kernel: $@ is ready' ' (#'`cat .version`')'
 
 OBJCOPYFLAGS_vmlinux.bin := -O binary -R .note -R .comment -S
 $(obj)/vmlinux.bin: $(obj)/compressed/vmlinux FORCE
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/ras/inject: Make it depend on X86_LOCAL_APIC=y
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (431 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] video: fbdev: via: remove possibly unused variables Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/build: Silence the build with "make -s" Sasha Levin
                   ` (83 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Borislav Petkov, Ingo Molnar, Sasha Levin

From: Borislav Petkov <bp@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d4b2ac63b0eae461fc10c9791084be24724ef57a ]

... and get rid of the annoying:

  arch/x86/kernel/cpu/mcheck/mce-inject.c:97:13: warning: ‘mce_irq_ipi’ defined but not used [-Wunused-function]

when doing randconfig builds.

Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Yazen Ghannam <Yazen.Ghannam@amd.com>
Cc: linux-edac <linux-edac@vger.kernel.org>
Link: http://lkml.kernel.org/r/20170123183514.13356-2-bp@alien8.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/Kconfig                        | 2 +-
 arch/x86/kernel/cpu/mcheck/mce-inject.c | 5 +----
 2 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index a3d283addbde..ffb2cb0495c3 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -982,7 +982,7 @@ config X86_MCE_THRESHOLD
 	def_bool y
 
 config X86_MCE_INJECT
-	depends on X86_MCE
+	depends on X86_MCE && X86_LOCAL_APIC
 	tristate "Machine check injector support"
 	---help---
 	  Provide support for injecting machine checks for testing purposes.
diff --git a/arch/x86/kernel/cpu/mcheck/mce-inject.c b/arch/x86/kernel/cpu/mcheck/mce-inject.c
index 4cfba4371a71..101bfae369e1 100644
--- a/arch/x86/kernel/cpu/mcheck/mce-inject.c
+++ b/arch/x86/kernel/cpu/mcheck/mce-inject.c
@@ -152,7 +152,6 @@ static void raise_mce(struct mce *m)
 	if (context == MCJ_CTX_RANDOM)
 		return;
 
-#ifdef CONFIG_X86_LOCAL_APIC
 	if (m->inject_flags & (MCJ_IRQ_BROADCAST | MCJ_NMI_BROADCAST)) {
 		unsigned long start;
 		int cpu;
@@ -193,9 +192,7 @@ static void raise_mce(struct mce *m)
 		raise_local();
 		put_cpu();
 		put_online_cpus();
-	} else
-#endif
-	{
+	} else {
 		preempt_disable();
 		raise_local();
 		preempt_enable();
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86: add MULTIUSER dependency for KVM
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (433 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/build: Silence the build with "make -s" Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: advansys: fix uninitialized data access Sasha Levin
                   ` (81 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Arnd Bergmann, Radim Krčmář, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c2ce3f5d89d57301e2756ac325fe2ebc33bfec30 ]

KVM tries to select 'TASKSTATS', which had additional dependencies:

warning: (KVM) selects TASKSTATS which has unmet direct dependencies (NET && MULTIUSER)

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kvm/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig
index 413a7bf9efbb..64c1920515ea 100644
--- a/arch/x86/kvm/Kconfig
+++ b/arch/x86/kvm/Kconfig
@@ -22,7 +22,7 @@ config KVM
 	depends on HAVE_KVM
 	depends on HIGH_RES_TIMERS
 	# for TASKSTATS/TASK_DELAY_ACCT:
-	depends on NET
+	depends on NET && MULTIUSER
 	select PREEMPT_NOTIFIERS
 	select MMU_NOTIFIER
 	select ANON_INODES
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ALSA: hda/ca0132 - fix possible NULL pointer use
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (435 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: advansys: fix uninitialized data access Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] reiserfs: avoid a -Wmaybe-uninitialized warning Sasha Levin
                   ` (79 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Takashi Iwai, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 46a049dae771b95e77ac6c823330f4a60f600236 ]

gcc-7 caught what it considers a NULL pointer dereference:

sound/pci/hda/patch_ca0132.c: In function 'dspio_scp.constprop':
sound/pci/hda/patch_ca0132.c:1487:4: error: argument 1 null where non-null expected [-Werror=nonnull]

This is plausible from looking at the function, as we compare 'reply'
to NULL earlier in it. I have not tried to analyze if there are constraints
that make it impossible to hit the bug, but adding another NULL check in
the end kills the warning and makes the function more robust.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/pci/hda/patch_ca0132.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c
index 0374bd5b61c8..1fb951225318 100644
--- a/sound/pci/hda/patch_ca0132.c
+++ b/sound/pci/hda/patch_ca0132.c
@@ -1452,6 +1452,9 @@ static int dspio_scp(struct hda_codec *codec,
 		} else if (ret_size != reply_data_size) {
 			codec_dbg(codec, "RetLen and HdrLen .NE.\n");
 			return -EINVAL;
+		} else if (!reply) {
+			codec_dbg(codec, "NULL reply\n");
+			return -EINVAL;
 		} else {
 			*reply_len = ret_size*sizeof(unsigned int);
 			memcpy(reply, scp_reply.data, *reply_len);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] scsi: advansys: fix uninitialized data access
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (434 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86: add MULTIUSER dependency for KVM Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] ALSA: hda/ca0132 - fix possible NULL pointer use Sasha Levin
                   ` (80 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Martin K . Petersen, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 44a5b977128c0ffff0654392b40f4c2ce72a619b ]

gcc-7.0.1 now warns about a previously unnoticed access of uninitialized
struct members:

drivers/scsi/advansys.c: In function 'AscMsgOutSDTR':
drivers/scsi/advansys.c:3860:26: error: '*((void *)&sdtr_buf+5)' may be used uninitialized in this function [-Werror=maybe-uninitialized]
         ((ushort)s_buffer[i + 1] << 8) | s_buffer[i]);
                          ^
drivers/scsi/advansys.c:3860:26: error: '*((void *)&sdtr_buf+7)' may be used uninitialized in this function [-Werror=maybe-uninitialized]
drivers/scsi/advansys.c:3860:26: error: '*((void *)&sdtr_buf+5)' may be used uninitialized in this function [-Werror=maybe-uninitialized]
drivers/scsi/advansys.c:3860:26: error: '*((void *)&sdtr_buf+7)' may be used uninitialized in this function [-Werror=maybe-uninitialized]

The code has existed in this exact form at least since v2.6.12, and the
warning seems correct. This uses named initializers to ensure we
initialize all members of the structure.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/advansys.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c
index 969469261353..42a14c456da0 100644
--- a/drivers/scsi/advansys.c
+++ b/drivers/scsi/advansys.c
@@ -6482,18 +6482,17 @@ static uchar AscGetSynPeriodIndex(ASC_DVC_VAR *asc_dvc, uchar syn_time)
 static uchar
 AscMsgOutSDTR(ASC_DVC_VAR *asc_dvc, uchar sdtr_period, uchar sdtr_offset)
 {
-	EXT_MSG sdtr_buf;
-	uchar sdtr_period_index;
-	PortAddr iop_base;
-
-	iop_base = asc_dvc->iop_base;
-	sdtr_buf.msg_type = EXTENDED_MESSAGE;
-	sdtr_buf.msg_len = MS_SDTR_LEN;
-	sdtr_buf.msg_req = EXTENDED_SDTR;
-	sdtr_buf.xfer_period = sdtr_period;
+	PortAddr iop_base = asc_dvc->iop_base;
+	uchar sdtr_period_index = AscGetSynPeriodIndex(asc_dvc, sdtr_period);
+	EXT_MSG sdtr_buf = {
+		.msg_type = EXTENDED_MESSAGE,
+		.msg_len = MS_SDTR_LEN,
+		.msg_req = EXTENDED_SDTR,
+		.xfer_period = sdtr_period,
+		.req_ack_offset = sdtr_offset,
+	};
 	sdtr_offset &= ASC_SYN_MAX_OFFSET;
-	sdtr_buf.req_ack_offset = sdtr_offset;
-	sdtr_period_index = AscGetSynPeriodIndex(asc_dvc, sdtr_period);
+
 	if (sdtr_period_index <= asc_dvc->max_sdtr_index) {
 		AscMemWordCopyPtrToLram(iop_base, ASCV_MSGOUT_BEG,
 					(uchar *)&sdtr_buf,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] reiserfs: avoid a -Wmaybe-uninitialized warning
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (436 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] ALSA: hda/ca0132 - fix possible NULL pointer use Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] thermal: spear: use __maybe_unused for PM functions Sasha Levin
                   ` (78 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Jan Kara, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ab4949640d6674b617b314ad3c2c00353304bab9 ]

The latest gcc-7.0.1 snapshot warns about an unintialized variable use:

In file included from fs/reiserfs/lbalance.c:8:0:
fs/reiserfs/lbalance.c: In function 'leaf_item_bottle.isra.3':
fs/reiserfs/reiserfs.h:1279:13: error: '*((void *)&n_ih+8).v' may be used uninitialized in this function [-Werror=maybe-uninitialized]
  v2->v = (v2->v & cpu_to_le64(15ULL << 60)) | cpu_to_le64(offset);
           ~~^~~
fs/reiserfs/reiserfs.h:1279:13: error: '*((void *)&n_ih+8).v' may be used uninitialized in this function [-Werror=maybe-uninitialized]
  v2->v = (v2->v & cpu_to_le64(15ULL << 60)) | cpu_to_le64(offset);

This happens because the offset/type pair that is stored in
ih.key.u.k_offset_v2 is actually uninitialized when we call
set_le_ih_k_offset() and set_le_ih_k_type(). After we have called both,
all data is correct, but the first of the two reads uninitialized data
for the type field and writes it back before it gets overwritten.

This works around the warning by initializing the k_offset_v2 through
the slightly larger memcpy().

[JK: Remove now unused define and make it obvious we initialize the key]

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/reiserfs/lbalance.c | 2 +-
 fs/reiserfs/reiserfs.h | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/fs/reiserfs/lbalance.c b/fs/reiserfs/lbalance.c
index 249594a821e0..f5cebd70d903 100644
--- a/fs/reiserfs/lbalance.c
+++ b/fs/reiserfs/lbalance.c
@@ -475,7 +475,7 @@ static void leaf_item_bottle(struct buffer_info *dest_bi,
 			 * 'cpy_bytes'; create new item header;
 			 * n_ih = new item_header;
 			 */
-			memcpy(&n_ih, ih, SHORT_KEY_SIZE);
+			memcpy(&n_ih.ih_key, &ih->ih_key, KEY_SIZE);
 
 			/* Endian safe, both le */
 			n_ih.ih_version = ih->ih_version;
diff --git a/fs/reiserfs/reiserfs.h b/fs/reiserfs/reiserfs.h
index 2adcde137c3f..5dcf3ab83886 100644
--- a/fs/reiserfs/reiserfs.h
+++ b/fs/reiserfs/reiserfs.h
@@ -1326,7 +1326,6 @@ struct cpu_key {
 #define KEY_NOT_FOUND 0
 
 #define KEY_SIZE (sizeof(struct reiserfs_key))
-#define SHORT_KEY_SIZE (sizeof (__u32) + sizeof (__u32))
 
 /* return values for search_by_key and clones */
 #define ITEM_FOUND 1
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] thermal: spear: use __maybe_unused for PM functions
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (437 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] reiserfs: avoid a -Wmaybe-uninitialized warning Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/boot: Avoid warning for zero-filling .bss Sasha Levin
                   ` (77 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Eduardo Valentin, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d612c64d1f4d6b2464993dfeafd9ec319f774188 ]

The spear thermal driver hides its suspend/resume function conditionally
based on CONFIG_PM, but references them based on CONFIG_PM_SLEEP, so
we get a warning if the former is set but the latter is not:

thermal/spear_thermal.c:58:12: warning: 'spear_thermal_suspend' defined but not used [-Wunused-function]
thermal/spear_thermal.c:75:12: warning: 'spear_thermal_resume' defined but not used [-Wunused-function]

This removes the #ifdef and instead uses a __maybe_uninitialized
annotation to avoid the warning and improve compile-time coverage.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/thermal/spear_thermal.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/thermal/spear_thermal.c b/drivers/thermal/spear_thermal.c
index bddb71744a6c..9d42f88a4224 100644
--- a/drivers/thermal/spear_thermal.c
+++ b/drivers/thermal/spear_thermal.c
@@ -54,8 +54,7 @@ static struct thermal_zone_device_ops ops = {
 	.get_temp = thermal_get_temp,
 };
 
-#ifdef CONFIG_PM
-static int spear_thermal_suspend(struct device *dev)
+static int __maybe_unused spear_thermal_suspend(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct thermal_zone_device *spear_thermal = platform_get_drvdata(pdev);
@@ -72,7 +71,7 @@ static int spear_thermal_suspend(struct device *dev)
 	return 0;
 }
 
-static int spear_thermal_resume(struct device *dev)
+static int __maybe_unused spear_thermal_resume(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct thermal_zone_device *spear_thermal = platform_get_drvdata(pdev);
@@ -94,7 +93,6 @@ static int spear_thermal_resume(struct device *dev)
 
 	return 0;
 }
-#endif
 
 static SIMPLE_DEV_PM_OPS(spear_thermal_pm_ops, spear_thermal_suspend,
 		spear_thermal_resume);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] scsi: sim710: fix build warning
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (439 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/boot: Avoid warning for zero-filling .bss Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] drivers/net: fix eisa_driver probe section mismatch Sasha Levin
                   ` (75 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Sudip Mukherjee, Sudip Mukherjee, Martin K . Petersen, Sasha Levin

From: Sudip Mukherjee <sudipm.mukherjee@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 648a0a7da34f281410e8e3a59de8c13ec6ea380a ]

We are getting build warning about:
 "Section mismatch in reference from the variable sim710_eisa_driver to
 the function .init.text:sim710_eisa_probe()
 The variable sim710_eisa_driver references the function __init
 sim710_eisa_probe()"

sim710_eisa_probe() was having __init but that was being referenced from
sim710_eisa_driver.

Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/sim710.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/scsi/sim710.c b/drivers/scsi/sim710.c
index 3b3b56f4a830..82ed99848378 100644
--- a/drivers/scsi/sim710.c
+++ b/drivers/scsi/sim710.c
@@ -176,8 +176,7 @@ static struct eisa_device_id sim710_eisa_ids[] = {
 };
 MODULE_DEVICE_TABLE(eisa, sim710_eisa_ids);
 
-static __init int
-sim710_eisa_probe(struct device *dev)
+static int sim710_eisa_probe(struct device *dev)
 {
 	struct eisa_device *edev = to_eisa_device(dev);
 	unsigned long io_addr = edev->base_addr;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/boot: Avoid warning for zero-filling .bss
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (438 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] thermal: spear: use __maybe_unused for PM functions Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: sim710: fix build warning Sasha Levin
                   ` (76 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Ingo Molnar, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 553bbc11aa6c1f9e0f529a06aeeca15fbe4a3985 ]

The latest binutils are warning about a .fill directive with an explicit
value in a .bss section:

  arch/x86/kernel/head_32.S: Assembler messages:
  arch/x86/kernel/head_32.S:677: Warning: ignoring fill value in section `.bss..page_aligned'
  arch/x86/kernel/head_32.S:679: Warning: ignoring fill value in section `.bss..page_aligned'

This comes from the 'ENTRY()' macro padding the space between the symbols
with 'nop' via:

  .align 4,0x90

Open-coding the .globl directive without the padding avoids that warning,
as all the symbols are already page aligned.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20161116141726.2013389-1-arnd@arndb.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kernel/head_32.S | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
index 7e429c99c728..63dd2c971db8 100644
--- a/arch/x86/kernel/head_32.S
+++ b/arch/x86/kernel/head_32.S
@@ -670,14 +670,17 @@ __PAGE_ALIGNED_BSS
 initial_pg_pmd:
 	.fill 1024*KPMDS,4,0
 #else
-ENTRY(initial_page_table)
+.globl initial_page_table
+initial_page_table:
 	.fill 1024,4,0
 #endif
 initial_pg_fixmap:
 	.fill 1024,4,0
-ENTRY(empty_zero_page)
+.globl empty_zero_page
+empty_zero_page:
 	.fill 4096,1,0
-ENTRY(swapper_pg_dir)
+.globl swapper_pg_dir
+swapper_pg_dir:
 	.fill 1024,4,0
 
 /*
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] drivers/net: fix eisa_driver probe section mismatch
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (440 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: sim710: fix build warning Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] profile: hide unused functions when !CONFIG_PROC_FS Sasha Levin
                   ` (74 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Fabian Frederick, David S . Miller, Sasha Levin

From: Fabian Frederick <fabf@skynet.be>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit cb4396edd84ed73081635fb933d19c1410fafaf4 ]

Some eisa_driver structures used __init probe functions which generates
a warning and could crash if function is called after being deleted.

Signed-off-by: Fabian Frederick <fabf@skynet.be>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/3com/3c509.c      | 2 +-
 drivers/net/ethernet/3com/3c59x.c      | 2 +-
 drivers/net/ethernet/dec/tulip/de4x5.c | 2 +-
 drivers/net/ethernet/hp/hp100.c        | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/3com/3c509.c b/drivers/net/ethernet/3com/3c509.c
index 4547a1b8b958..7677c745fb30 100644
--- a/drivers/net/ethernet/3com/3c509.c
+++ b/drivers/net/ethernet/3com/3c509.c
@@ -562,7 +562,7 @@ static void el3_common_remove (struct net_device *dev)
 }
 
 #ifdef CONFIG_EISA
-static int __init el3_eisa_probe (struct device *device)
+static int el3_eisa_probe(struct device *device)
 {
 	short i;
 	int ioaddr, irq, if_port;
diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
index 41095ebad97f..8a876e97597c 100644
--- a/drivers/net/ethernet/3com/3c59x.c
+++ b/drivers/net/ethernet/3com/3c59x.c
@@ -907,7 +907,7 @@ static struct eisa_device_id vortex_eisa_ids[] = {
 };
 MODULE_DEVICE_TABLE(eisa, vortex_eisa_ids);
 
-static int __init vortex_eisa_probe(struct device *device)
+static int vortex_eisa_probe(struct device *device)
 {
 	void __iomem *ioaddr;
 	struct eisa_device *edev;
diff --git a/drivers/net/ethernet/dec/tulip/de4x5.c b/drivers/net/ethernet/dec/tulip/de4x5.c
index badff181e719..37827819ae86 100644
--- a/drivers/net/ethernet/dec/tulip/de4x5.c
+++ b/drivers/net/ethernet/dec/tulip/de4x5.c
@@ -1990,7 +1990,7 @@ SetMulticastFilter(struct net_device *dev)
 
 static u_char de4x5_irq[] = EISA_ALLOWED_IRQ_LIST;
 
-static int __init de4x5_eisa_probe (struct device *gendev)
+static int de4x5_eisa_probe(struct device *gendev)
 {
 	struct eisa_device *edev;
 	u_long iobase;
diff --git a/drivers/net/ethernet/hp/hp100.c b/drivers/net/ethernet/hp/hp100.c
index ae6e30d39f0f..1d5c3e16d8f4 100644
--- a/drivers/net/ethernet/hp/hp100.c
+++ b/drivers/net/ethernet/hp/hp100.c
@@ -2843,7 +2843,7 @@ static void cleanup_dev(struct net_device *d)
 }
 
 #ifdef CONFIG_EISA
-static int __init hp100_eisa_probe (struct device *gendev)
+static int hp100_eisa_probe(struct device *gendev)
 {
 	struct net_device *dev = alloc_etherdev(sizeof(struct hp100_private));
 	struct eisa_device *edev = to_eisa_device(gendev);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] profile: hide unused functions when !CONFIG_PROC_FS
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (441 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] drivers/net: fix eisa_driver probe section mismatch Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] dpt_i2o: fix build warning Sasha Levin
                   ` (73 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Arnd Bergmann, Andrew Morton, Linus Torvalds, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ade356b99a4187578609f2a91c4d2ed88e4e70dc ]

A couple of functions and variables in the profile implementation are
used only on SMP systems by the procfs code, but are unused if either
procfs is disabled or in uniprocessor kernels.  gcc prints a harmless
warning about the unused symbols:

  kernel/profile.c:243:13: error: 'profile_flip_buffers' defined but not used [-Werror=unused-function]
   static void profile_flip_buffers(void)
               ^
  kernel/profile.c:266:13: error: 'profile_discard_flip_buffers' defined but not used [-Werror=unused-function]
   static void profile_discard_flip_buffers(void)
               ^
  kernel/profile.c:330:12: error: 'profile_cpu_callback' defined but not used [-Werror=unused-function]
   static int profile_cpu_callback(struct notifier_block *info,
              ^

This adds further #ifdef to the file, to annotate exactly in which cases
they are used.  I have done several thousand ARM randconfig kernels with
this patch applied and no longer get any warnings in this file.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Robin Holt <robinmholt@gmail.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Christoph Lameter <cl@linux.com>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/profile.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/profile.c b/kernel/profile.c
index a7bcd28d6e9f..7ad939c708b9 100644
--- a/kernel/profile.c
+++ b/kernel/profile.c
@@ -44,7 +44,7 @@ int prof_on __read_mostly;
 EXPORT_SYMBOL_GPL(prof_on);
 
 static cpumask_var_t prof_cpu_mask;
-#ifdef CONFIG_SMP
+#if defined(CONFIG_SMP) && defined(CONFIG_PROC_FS)
 static DEFINE_PER_CPU(struct profile_hit *[2], cpu_profile_hits);
 static DEFINE_PER_CPU(int, cpu_profile_flip);
 static DEFINE_MUTEX(profile_flip_mutex);
@@ -201,7 +201,7 @@ int profile_event_unregister(enum profile_type type, struct notifier_block *n)
 }
 EXPORT_SYMBOL_GPL(profile_event_unregister);
 
-#ifdef CONFIG_SMP
+#if defined(CONFIG_SMP) && defined(CONFIG_PROC_FS)
 /*
  * Each cpu has a pair of open-addressed hashtables for pending
  * profile hits. read_profile() IPI's all cpus to request them
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] dpt_i2o: fix build warning
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (442 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] profile: hide unused functions when !CONFIG_PROC_FS Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] md: avoid warning for 32-bit sector_t Sasha Levin
                   ` (72 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Sudip Mukherjee, Sudip Mukherjee, Martin K . Petersen, Sasha Levin

From: Sudip Mukherjee <sudipm.mukherjee@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f50abb9b63b1d8773e1ce32115701c06416e6f91 ]

We were getting build warning about:
drivers/scsi/dpt_i2o.c:183:29: warning: 'dptids' defined but not used

dptids[] is only used in the MODULE_DEVICE_TABLE so when MODULE is not
defined then dptids[] becomes unused.

Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/dpt_i2o.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c
index 2806cfbec2b9..8803bafc48e9 100644
--- a/drivers/scsi/dpt_i2o.c
+++ b/drivers/scsi/dpt_i2o.c
@@ -180,11 +180,14 @@ static u8 adpt_read_blink_led(adpt_hba* host)
  *============================================================================
  */
 
+#ifdef MODULE
 static struct pci_device_id dptids[] = {
 	{ PCI_DPT_VENDOR_ID, PCI_DPT_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
 	{ PCI_DPT_VENDOR_ID, PCI_DPT_RAPTOR_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
 	{ 0, }
 };
+#endif
+
 MODULE_DEVICE_TABLE(pci,dptids);
 
 static int adpt_detect(struct scsi_host_template* sht)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] md: avoid warning for 32-bit sector_t
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (443 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] dpt_i2o: fix build warning Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] mtd: ichxrom: maybe-uninitialized with gcc-4.9 Sasha Levin
                   ` (71 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, NeilBrown, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 3312c951efaba55080958974047414576b9e5d63 ]

When CONFIG_LBDAF is not set, sector_t is only 32-bits wide, which
means we cannot have devices with more than 2TB, and the code that
is trying to handle compatibility support for large devices in
md version 0.90 is meaningless but also causes a compile-time warning:

drivers/md/md.c: In function 'super_90_load':
drivers/md/md.c:1029:19: warning: large integer implicitly truncated to unsigned type [-Woverflow]
drivers/md/md.c: In function 'super_90_rdev_size_change':
drivers/md/md.c:1323:17: warning: large integer implicitly truncated to unsigned type [-Woverflow]

This adds a check for CONFIG_LBDAF to avoid even getting into this
code path, and also adds an explicit cast to let the compiler know
it doesn't have to warn about the truncation.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/md/md.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/md/md.c b/drivers/md/md.c
index 1fdcd5735418..03bcc1ab2e9d 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -1043,8 +1043,9 @@ static int super_90_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor
 	 * (not needed for Linear and RAID0 as metadata doesn't
 	 * record this size)
 	 */
-	if (rdev->sectors >= (2ULL << 32) && sb->level >= 1)
-		rdev->sectors = (2ULL << 32) - 2;
+	if (IS_ENABLED(CONFIG_LBDAF) && (u64)rdev->sectors >= (2ULL << 32) &&
+	    sb->level >= 1)
+		rdev->sectors = (sector_t)(2ULL << 32) - 2;
 
 	if (rdev->sectors < ((sector_t)sb->size) * 2 && sb->level >= 1)
 		/* "this cannot possibly happen" ... */
@@ -1337,8 +1338,9 @@ super_90_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors)
 	/* Limit to 4TB as metadata cannot record more than that.
 	 * 4TB == 2^32 KB, or 2*2^32 sectors.
 	 */
-	if (num_sectors >= (2ULL << 32) && rdev->mddev->level >= 1)
-		num_sectors = (2ULL << 32) - 2;
+	if (IS_ENABLED(CONFIG_LBDAF) && (u64)num_sectors >= (2ULL << 32) &&
+	    rdev->mddev->level >= 1)
+		num_sectors = (sector_t)(2ULL << 32) - 2;
 	md_super_write(rdev->mddev, rdev, rdev->sb_start, rdev->sb_size,
 		       rdev->sb_page);
 	md_super_wait(rdev->mddev);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mtd: ichxrom: maybe-uninitialized with gcc-4.9
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (444 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] md: avoid warning for 32-bit sector_t Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] mtd: maps: add __init attribute Sasha Levin
                   ` (70 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Brian Norris, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e70dda0868fad0f74c46df21f7f45fec24f29879 ]

pci_read_config_word() might fail and not initialize its output,
as pointed out by older versions of gcc when using the -Wmaybe-unintialized
flag:

drivers/mtd/maps/ichxrom.c: In function ‘ichxrom_cleanup’:
drivers/mtd/maps/ichxrom.c:63:2: error: ‘word’ is used uninitialized in this function [-Werror=uninitialized]

This is apparently a correct warning, though it does not show up
with newer compilers. Changing the code to not attempt to write
back uninitialized data into PCI config space is a correct
fix for the problem and avoids the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Marek Vasut <marex@denx.de>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/mtd/maps/ichxrom.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/maps/ichxrom.c b/drivers/mtd/maps/ichxrom.c
index c7478e18f485..2fb2d0ec3367 100644
--- a/drivers/mtd/maps/ichxrom.c
+++ b/drivers/mtd/maps/ichxrom.c
@@ -57,10 +57,12 @@ static void ichxrom_cleanup(struct ichxrom_window *window)
 {
 	struct ichxrom_map_info *map, *scratch;
 	u16 word;
+	int ret;
 
 	/* Disable writes through the rom window */
-	pci_read_config_word(window->pdev, BIOS_CNTL, &word);
-	pci_write_config_word(window->pdev, BIOS_CNTL, word & ~1);
+	ret = pci_read_config_word(window->pdev, BIOS_CNTL, &word);
+	if (!ret)
+		pci_write_config_word(window->pdev, BIOS_CNTL, word & ~1);
 	pci_dev_put(window->pdev);
 
 	/* Free all of the mtd devices */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mtd: maps: add __init attribute
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (445 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] mtd: ichxrom: maybe-uninitialized with gcc-4.9 Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] mptfusion: hide unused seq_mpt_print_ioc_summary function Sasha Levin
                   ` (69 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Julia Lawall, Julia Lawall, Brian Norris, Sasha Levin

From: Julia Lawall <julia.lawall@lip6.fr>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e4106a7c8236eb7b91686d36f3bf33ee43db94b4 ]

Add __init attribute on functions that are only called from other __init
functions and that are not inlined, at least with gcc version 4.8.4 on an
x86 machine with allyesconfig.  Currently, the functions are put in the
.text.unlikely segment.  Declaring them as __init will cause them to be
put in the .init.text and to disappear after initialization.

The result of objdump -x on the functions before the change is as follows:

00000000000001bc l     F .text.unlikely 00000000000006a2 ck804xrom_init_one.isra.1
00000000000001aa l     F .text.unlikely 0000000000000764 esb2rom_init_one.isra.1
00000000000001db l     F .text.unlikely 0000000000000716 ichxrom_init_one.isra.1

And after the change it is as follows:

0000000000000000 l     F .init.text	000000000000069d ck804xrom_init_one.isra.1
0000000000000000 l     F .init.text	000000000000075f esb2rom_init_one.isra.1
0000000000000000 l     F .init.text	0000000000000711 ichxrom_init_one.isra.1

Done with the help of Coccinelle.  The semantic patch checks for local
static non-init functions that are called from an __init function and are
not called from any other function.

Note that in each case, the function is stored in the probe field of a
pci_driver structure, but this code is under an #if 0.  The #if 0s have
been unchanged since 2009 at the latest.

Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/mtd/maps/ck804xrom.c | 4 ++--
 drivers/mtd/maps/esb2rom.c   | 4 ++--
 drivers/mtd/maps/ichxrom.c   | 4 ++--
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/mtd/maps/ck804xrom.c b/drivers/mtd/maps/ck804xrom.c
index 0455166f05fa..4f206a99164c 100644
--- a/drivers/mtd/maps/ck804xrom.c
+++ b/drivers/mtd/maps/ck804xrom.c
@@ -112,8 +112,8 @@ static void ck804xrom_cleanup(struct ck804xrom_window *window)
 }
 
 
-static int ck804xrom_init_one(struct pci_dev *pdev,
-			      const struct pci_device_id *ent)
+static int __init ck804xrom_init_one(struct pci_dev *pdev,
+				     const struct pci_device_id *ent)
 {
 	static char *rom_probe_types[] = { "cfi_probe", "jedec_probe", NULL };
 	u8 byte;
diff --git a/drivers/mtd/maps/esb2rom.c b/drivers/mtd/maps/esb2rom.c
index f784cf0caa13..a47b374b1b0c 100644
--- a/drivers/mtd/maps/esb2rom.c
+++ b/drivers/mtd/maps/esb2rom.c
@@ -144,8 +144,8 @@ static void esb2rom_cleanup(struct esb2rom_window *window)
 	pci_dev_put(window->pdev);
 }
 
-static int esb2rom_init_one(struct pci_dev *pdev,
-			    const struct pci_device_id *ent)
+static int __init esb2rom_init_one(struct pci_dev *pdev,
+				   const struct pci_device_id *ent)
 {
 	static char *rom_probe_types[] = { "cfi_probe", "jedec_probe", NULL };
 	struct esb2rom_window *window = &esb2rom_window;
diff --git a/drivers/mtd/maps/ichxrom.c b/drivers/mtd/maps/ichxrom.c
index 2fb2d0ec3367..aa83e7b87cfe 100644
--- a/drivers/mtd/maps/ichxrom.c
+++ b/drivers/mtd/maps/ichxrom.c
@@ -86,8 +86,8 @@ static void ichxrom_cleanup(struct ichxrom_window *window)
 }
 
 
-static int ichxrom_init_one(struct pci_dev *pdev,
-			    const struct pci_device_id *ent)
+static int __init ichxrom_init_one(struct pci_dev *pdev,
+				   const struct pci_device_id *ent)
 {
 	static char *rom_probe_types[] = { "cfi_probe", "jedec_probe", NULL };
 	struct ichxrom_window *window = &ichxrom_window;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] scsi: fdomain: drop fdomain_pci_tbl when built-in
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (447 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] mptfusion: hide unused seq_mpt_print_ioc_summary function Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] video: fbdev: sis: remove unused variable Sasha Levin
                   ` (67 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Martin K . Petersen, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 120f83f8d6f2e2e7dea3570646722c62ecee70b0 ]

The fdomain SCSI host driver is one of the last remaining drivers that
manually search the PCI bus using pci_get_device rather than registering
a pci_driver instance.

This means the module device table is unused when the driver is
built-in, and we get a warning about it:

drivers/scsi/fdomain.c:1773:29: warning: 'fdomain_pci_tbl' defined but not used [-Wunused-variable]

To avoid the warning, this adds another #ifdef around the table
definition.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/fdomain.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/fdomain.c b/drivers/scsi/fdomain.c
index fff682976c56..466d0a30aae7 100644
--- a/drivers/scsi/fdomain.c
+++ b/drivers/scsi/fdomain.c
@@ -1769,7 +1769,7 @@ struct scsi_host_template fdomain_driver_template = {
 };
 
 #ifndef PCMCIA
-#ifdef CONFIG_PCI
+#if defined(CONFIG_PCI) && defined(MODULE)
 
 static struct pci_device_id fdomain_pci_tbl[] = {
 	{ PCI_VENDOR_ID_FD, PCI_DEVICE_ID_FD_36C70,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mptfusion: hide unused seq_mpt_print_ioc_summary function
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (446 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] mtd: maps: add __init attribute Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: fdomain: drop fdomain_pci_tbl when built-in Sasha Levin
                   ` (68 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Martin K . Petersen, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 28558f5af50d8335cbbc8bc2726e0747553e29f5 ]

The seq_mpt_print_ioc_summary function is used for the
/proc/mpt/iocN/summary implementation and never gets called when
CONFIG_PROC_FS is disabled:

drivers/message/fusion/mptbase.c:6851:13: warning: 'seq_mpt_print_ioc_summary' defined but not used [-Wunused-function]
 static void seq_mpt_print_ioc_summary(MPT_ADAPTER *ioc, struct seq_file *m, int showlan)

This adds an #ifdef to hide the function definition in that case and
avoid the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/message/fusion/mptbase.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index 187f83629f7e..b1c5f02c3cab 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -6872,6 +6872,7 @@ mpt_print_ioc_summary(MPT_ADAPTER *ioc, char *buffer, int *size, int len, int sh
 	*size = y;
 }
 
+#ifdef CONFIG_PROC_FS
 static void seq_mpt_print_ioc_summary(MPT_ADAPTER *ioc, struct seq_file *m, int showlan)
 {
 	char expVer[32];
@@ -6903,6 +6904,7 @@ static void seq_mpt_print_ioc_summary(MPT_ADAPTER *ioc, struct seq_file *m, int
 
 	seq_putc(m, '\n');
 }
+#endif
 
 /**
  *	mpt_set_taskmgmt_in_progress_flag - set flags associated with task management
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] video: fbdev: sis: remove unused variable
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (448 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: fdomain: drop fdomain_pci_tbl when built-in Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] staging: ste_rmi4: avoid unused function warnings Sasha Levin
                   ` (66 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Sudip Mukherjee, Sudip Mukherjee, Tomi Valkeinen, Sasha Levin

From: Sudip Mukherjee <sudipm.mukherjee@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 32ad61951574d011d363694d6037592e99da9421 ]

The variables modeflag and resinfo were only assigned some value but
were never used.

Signed-off-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/video/fbdev/sis/init301.c | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/drivers/video/fbdev/sis/init301.c b/drivers/video/fbdev/sis/init301.c
index 295e0dedaf1f..20f7234e809e 100644
--- a/drivers/video/fbdev/sis/init301.c
+++ b/drivers/video/fbdev/sis/init301.c
@@ -2151,17 +2151,15 @@ SiS_GetVCLK2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned shor
 		unsigned short RefreshRateTableIndex)
 {
   unsigned short CRT2Index, VCLKIndex = 0, VCLKIndexGEN = 0, VCLKIndexGENCRT = 0;
-  unsigned short modeflag, resinfo, tempbx;
+  unsigned short resinfo, tempbx;
   const unsigned char *CHTVVCLKPtr = NULL;
 
   if(ModeNo <= 0x13) {
-     modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
      resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
      CRT2Index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
      VCLKIndexGEN = (SiS_GetRegByte((SiS_Pr->SiS_P3ca+0x02)) >> 2) & 0x03;
      VCLKIndexGENCRT = VCLKIndexGEN;
   } else {
-     modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
      resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
      CRT2Index = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
      VCLKIndexGEN = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
@@ -7270,7 +7268,7 @@ SiS_ShiftXPos(struct SiS_Private *SiS_Pr, int shift)
 static void
 SiS_SetGroup4_C_ELV(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
 {
-   unsigned short temp, temp1, resinfo = 0;
+   unsigned short temp, temp1;
    unsigned char  *ROMAddr = SiS_Pr->VirtualRomBase;
 
    if(!(SiS_Pr->SiS_VBType & VB_SIS30xCLV)) return;
@@ -7282,10 +7280,6 @@ SiS_SetGroup4_C_ELV(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned
       if(!(ROMAddr[0x61] & 0x04)) return;
    }
 
-   if(ModeNo > 0x13) {
-      resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-   }
-
    SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x3a,0x08);
    temp = SiS_GetReg(SiS_Pr->SiS_Part4Port,0x3a);
    if(!(temp & 0x01)) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] staging: ste_rmi4: avoid unused function warnings
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (449 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] video: fbdev: sis: remove unused variable Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] fbdev: sis: enforce selection of at least one backend Sasha Levin
                   ` (65 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Greg Kroah-Hartman, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9045a4a7e686a6316129d6d0b21b4fe2520968e4 ]

The rmi4 touchscreen driver encloses the power-management
functions in #ifdef CONFIG_PM, but the smtcfb_pci_suspend/resume
functions are only really used when CONFIG_PM_SLEEP is also
set, as a frequent gcc warning shows:

ste_rmi4/synaptics_i2c_rmi4.c:1050:12: warning: 'synaptics_rmi4_suspend' defined but not used
ste_rmi4/synaptics_i2c_rmi4.c:1084:12: warning: 'synaptics_rmi4_resume' defined but not used

This changes the driver to remove the #ifdef and instead mark
the functions as __maybe_unused, which is a nicer anyway, as it
provides build testing for all the code in all configurations
and is harder to get wrong.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/staging/ste_rmi4/synaptics_i2c_rmi4.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/ste_rmi4/synaptics_i2c_rmi4.c b/drivers/staging/ste_rmi4/synaptics_i2c_rmi4.c
index 0f524bb7b41d..daff4e76b6d6 100644
--- a/drivers/staging/ste_rmi4/synaptics_i2c_rmi4.c
+++ b/drivers/staging/ste_rmi4/synaptics_i2c_rmi4.c
@@ -1039,7 +1039,6 @@ static int synaptics_rmi4_remove(struct i2c_client *client)
 	return 0;
 }
 
-#ifdef CONFIG_PM
 /**
  * synaptics_rmi4_suspend() - suspend the touch screen controller
  * @dev: pointer to device structure
@@ -1047,7 +1046,7 @@ static int synaptics_rmi4_remove(struct i2c_client *client)
  * This function is used to suspend the
  * touch panel controller and returns integer
  */
-static int synaptics_rmi4_suspend(struct device *dev)
+static int __maybe_unused synaptics_rmi4_suspend(struct device *dev)
 {
 	/* Touch sleep mode */
 	int retval;
@@ -1081,7 +1080,7 @@ static int synaptics_rmi4_suspend(struct device *dev)
  * This function is used to resume the touch panel
  * controller and returns integer.
  */
-static int synaptics_rmi4_resume(struct device *dev)
+static int __maybe_unused synaptics_rmi4_resume(struct device *dev)
 {
 	int retval;
 	unsigned char intr_status;
@@ -1112,8 +1111,6 @@ static int synaptics_rmi4_resume(struct device *dev)
 	return 0;
 }
 
-#endif
-
 static SIMPLE_DEV_PM_OPS(synaptics_rmi4_dev_pm_ops, synaptics_rmi4_suspend,
 			 synaptics_rmi4_resume);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] fbdev: sis: enforce selection of at least one backend
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (450 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] staging: ste_rmi4: avoid unused function warnings Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: mvumi: use __maybe_unused to hide pm functions Sasha Levin
                   ` (64 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Tomi Valkeinen, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5b833fea4377577eafecb888141a05470922ef25 ]

The sis framebuffer driver complains with a compile-time warning
if neither the FB_SIS_300 nor FB_SIS_315 symbols are selected:

drivers/video/fbdev/sis/sis_main.c:61:2: warning: #warning Neither CONFIG_FB_SIS_300 nor CONFIG_FB_SIS_315 is se

This is reasonable because it doesn't work in that case, but it's
also annoying for randconfig builds and is one of the most common
warnings I'm seeing on ARM now.

This changes the Kconfig logic to prevent the silly configuration,
by always selecting the FB_SIS_300 variant if the other one is
not set.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/video/fbdev/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig
index 44eb7c737ea2..34af3a26472c 100644
--- a/drivers/video/fbdev/Kconfig
+++ b/drivers/video/fbdev/Kconfig
@@ -1506,6 +1506,7 @@ config FB_SIS
 	select FB_CFB_COPYAREA
 	select FB_CFB_IMAGEBLIT
 	select FB_BOOT_VESA_SUPPORT if FB_SIS = y
+	select FB_SIS_300 if !FB_SIS_315
 	help
 	  This is the frame buffer device driver for the SiS 300, 315, 330
 	  and 340 series as well as XGI V3XT, V5, V8, Z7 graphics chipsets.
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] video: Use bool instead int pointer for get_opt_bool() argument
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (452 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: mvumi: use __maybe_unused to hide pm functions Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] [media] pwc: hide unused label Sasha Levin
                   ` (62 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Daniel Wagner, Tomi Valkeinen, Sasha Levin

From: Daniel Wagner <daniel.wagner@bmw-carit.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 206fc20598157ce15597822cf01b94377e30075b ]

As the function name already indicates that get_opt_bool() parses
for a bool. It is not a surprise that compiler is complaining
about it when -Werror=incompatible-pointer-types is used:

drivers/video/fbdev/intelfb/intelfbdrv.c: In function ‘intelfb_setup’:
drivers/video/fbdev/intelfb/intelfbdrv.c:353:39: error: passing argument 3 of ‘get_opt_bool’ from incompatible pointer type [-Werror=incompatible-pointer-types]
   if (get_opt_bool(this_opt, "accel", &accel))

Signed-off-by: Daniel Wagner <daniel.wagner@bmw-carit.de>
Reported-by: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/video/fbdev/intelfb/intelfbdrv.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/video/fbdev/intelfb/intelfbdrv.c b/drivers/video/fbdev/intelfb/intelfbdrv.c
index b847d530471a..e8d1309ccefc 100644
--- a/drivers/video/fbdev/intelfb/intelfbdrv.c
+++ b/drivers/video/fbdev/intelfb/intelfbdrv.c
@@ -306,7 +306,7 @@ static __inline__ int get_opt_int(const char *this_opt, const char *name,
 }
 
 static __inline__ int get_opt_bool(const char *this_opt, const char *name,
-				   int *ret)
+				   bool *ret)
 {
 	if (!ret)
 		return 0;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] scsi: mvumi: use __maybe_unused to hide pm functions
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (451 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] fbdev: sis: enforce selection of at least one backend Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] video: Use bool instead int pointer for get_opt_bool() argument Sasha Levin
                   ` (63 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Martin K . Petersen, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fddbeb80a904aae41c84ed566e2b0d1de55907df ]

The mvumi scsi hides the references to its suspend/resume functions in
an #ifdef but does not hide the implementation the same way:

drivers/scsi/mvumi.c:2632:12: error: 'mvumi_suspend' defined but not used [-Werror=unused-function]
drivers/scsi/mvumi.c:2651:12: error: 'mvumi_resume' defined but not used [-Werror=unused-function]

This adds __maybe_unused annotations so the compiler knows it can
silently drop them instead of warning, while avoiding the addition of
another #ifdef.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/mvumi.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/mvumi.c b/drivers/scsi/mvumi.c
index 3e6b866759fe..c51e1537ed8e 100644
--- a/drivers/scsi/mvumi.c
+++ b/drivers/scsi/mvumi.c
@@ -2629,7 +2629,7 @@ static void mvumi_shutdown(struct pci_dev *pdev)
 	mvumi_flush_cache(mhba);
 }
 
-static int mvumi_suspend(struct pci_dev *pdev, pm_message_t state)
+static int __maybe_unused mvumi_suspend(struct pci_dev *pdev, pm_message_t state)
 {
 	struct mvumi_hba *mhba = NULL;
 
@@ -2648,7 +2648,7 @@ static int mvumi_suspend(struct pci_dev *pdev, pm_message_t state)
 	return 0;
 }
 
-static int mvumi_resume(struct pci_dev *pdev)
+static int __maybe_unused mvumi_resume(struct pci_dev *pdev)
 {
 	int ret;
 	struct mvumi_hba *mhba = NULL;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] SCSI: initio: remove duplicate module device table
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (454 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] [media] pwc: hide unused label Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] usb: musb/ux500: remove duplicate check for dma_is_compatible Sasha Levin
                   ` (60 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Martin K . Petersen, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d282e2b383e3f41a7758e8cbf3076091ef9d9447 ]

The initio driver has for many years had two copies of the
same module device table. One of them is also used for registering
the other driver, the other one is entirely useless after the
large scale cleanup that Alan Cox did back in 2007.

The compiler warns about this whenever the driver is built-in:

drivers/scsi/initio.c:131:29: warning: 'i91u_pci_devices' defined but not used [-Wunused-variable]

This removes the extraneous table and the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Fixes: 72d39fea901 ("[SCSI] initio: Convert into a real Linux driver and update to modern style")
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/initio.c | 16 ----------------
 1 file changed, 16 deletions(-)

diff --git a/drivers/scsi/initio.c b/drivers/scsi/initio.c
index e5dae7b54d9a..51063177f18e 100644
--- a/drivers/scsi/initio.c
+++ b/drivers/scsi/initio.c
@@ -110,11 +110,6 @@
 #define i91u_MAXQUEUE		2
 #define i91u_REVID "Initio INI-9X00U/UW SCSI device driver; Revision: 1.04a"
 
-#define I950_DEVICE_ID	0x9500	/* Initio's inic-950 product ID   */
-#define I940_DEVICE_ID	0x9400	/* Initio's inic-940 product ID   */
-#define I935_DEVICE_ID	0x9401	/* Initio's inic-935 product ID   */
-#define I920_DEVICE_ID	0x0002	/* Initio's other product ID      */
-
 #ifdef DEBUG_i91u
 static unsigned int i91u_debug = DEBUG_DEFAULT;
 #endif
@@ -127,17 +122,6 @@ static int setup_debug = 0;
 
 static void i91uSCBPost(u8 * pHcb, u8 * pScb);
 
-/* PCI Devices supported by this driver */
-static struct pci_device_id i91u_pci_devices[] = {
-	{ PCI_VENDOR_ID_INIT,  I950_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{ PCI_VENDOR_ID_INIT,  I940_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{ PCI_VENDOR_ID_INIT,  I935_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{ PCI_VENDOR_ID_INIT,  I920_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{ PCI_VENDOR_ID_DOMEX, I920_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{ }
-};
-MODULE_DEVICE_TABLE(pci, i91u_pci_devices);
-
 #define DEBUG_INTERRUPT 0
 #define DEBUG_QUEUE     0
 #define DEBUG_STATE     0
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] [media] pwc: hide unused label
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (453 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] video: Use bool instead int pointer for get_opt_bool() argument Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] SCSI: initio: remove duplicate module device table Sasha Levin
                   ` (61 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Arnd Bergmann, Hans Verkuil, Mauro Carvalho Chehab, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1f6bcd011464cb36059e2562f72baf75f98b732d ]

The pwc driver causes a warning when CONFIG_USB_PWC_INPUT_EVDEV is unset:

drivers/media/usb/pwc/pwc-if.c: In function 'usb_pwc_probe':
drivers/media/usb/pwc/pwc-if.c:1115:1: warning: label 'err_video_unreg' defined but not used [-Wunused-label]

This moves the unused label and code inside another #ifdef to
get rid of the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/usb/pwc/pwc-if.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/media/usb/pwc/pwc-if.c b/drivers/media/usb/pwc/pwc-if.c
index a7e1f6f37790..a8f265cee365 100644
--- a/drivers/media/usb/pwc/pwc-if.c
+++ b/drivers/media/usb/pwc/pwc-if.c
@@ -1110,8 +1110,10 @@ static int usb_pwc_probe(struct usb_interface *intf, const struct usb_device_id
 
 	return 0;
 
+#ifdef CONFIG_USB_PWC_INPUT_EVDEV
 err_video_unreg:
 	video_unregister_device(&pdev->vdev);
+#endif
 err_unregister_v4l2_dev:
 	v4l2_device_unregister(&pdev->v4l2_dev);
 err_free_controls:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: musb/ux500: remove duplicate check for dma_is_compatible
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (455 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] SCSI: initio: remove duplicate module device table Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] tty: hvc_xen: hide xen_console_remove when unused Sasha Levin
                   ` (59 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Felipe Balbi, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 62a6abdd427b5fc4d8aad5dac874904e96273e6d ]

When dma_addr_t is 64-bit, we get a warning about an invalid cast
in the call to ux500_dma_is_compatible() from ux500_dma_channel_program():

drivers/usb/musb/ux500_dma.c: In function 'ux500_dma_channel_program':
drivers/usb/musb/ux500_dma.c:210:51: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
  if (!ux500_dma_is_compatible(channel, packet_sz, (void *)dma_addr, len))

The problem is that ux500_dma_is_compatible() is called from the
main musb driver on the virtual address, but here we pass in a
DMA address, so the types are fundamentally different but it works
because the function only checks the alignment of the buffer and
that is the same.

We could work around this by adding another cast, but I have checked
that the buffer we get passed here is already checked before it
gets mapped, so the second check seems completely unnecessary
and removing it must be the cleanest solution.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Felipe Balbi <balbi@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/musb/ux500_dma.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/usb/musb/ux500_dma.c b/drivers/usb/musb/ux500_dma.c
index e93845c26bdb..c17495e7fcc5 100644
--- a/drivers/usb/musb/ux500_dma.c
+++ b/drivers/usb/musb/ux500_dma.c
@@ -207,9 +207,6 @@ static int ux500_dma_channel_program(struct dma_channel *channel,
 	BUG_ON(channel->status == MUSB_DMA_STATUS_UNKNOWN ||
 		channel->status == MUSB_DMA_STATUS_BUSY);
 
-	if (!ux500_dma_is_compatible(channel, packet_sz, (void *)dma_addr, len))
-		return false;
-
 	channel->status = MUSB_DMA_STATUS_BUSY;
 	channel->actual_len = 0;
 	ret = ux500_configure_channel(channel, packet_sz, mode, dma_addr, len);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] tty: hvc_xen: hide xen_console_remove when unused
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (456 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] usb: musb/ux500: remove duplicate check for dma_is_compatible Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] target/user: Fix cast from pointer to phys_addr_t Sasha Levin
                   ` (58 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Greg Kroah-Hartman, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e36ae3439936e13c33f5841c7c2c1a9875acbb6d ]

xencons_disconnect_backend() is only called from xen_console_remove(),
which is conditionally compiled, so we get a harmless warning when
CONFIG_HVC_XEN_FRONTEND is unset:

hvc/hvc_xen.c:350:12: error: 'xen_console_remove' defined but not used [-Werror=unused-function]

This moves the function down into the same #ifdef section to silence
the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/tty/hvc/hvc_xen.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
index 7a3d146a5f0e..5cc3ca1dd5c9 100644
--- a/drivers/tty/hvc/hvc_xen.c
+++ b/drivers/tty/hvc/hvc_xen.c
@@ -322,6 +322,7 @@ void xen_console_resume(void)
 	}
 }
 
+#ifdef CONFIG_HVC_XEN_FRONTEND
 static void xencons_disconnect_backend(struct xencons_info *info)
 {
 	if (info->irq > 0)
@@ -362,7 +363,6 @@ static int xen_console_remove(struct xencons_info *info)
 	return 0;
 }
 
-#ifdef CONFIG_HVC_XEN_FRONTEND
 static int xencons_remove(struct xenbus_device *dev)
 {
 	return xen_console_remove(dev_get_drvdata(&dev->dev));
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] target/user: Fix cast from pointer to phys_addr_t
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (457 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] tty: hvc_xen: hide xen_console_remove when unused Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] driver-core: use 'dev' argument in dev_dbg_ratelimited stub Sasha Levin
                   ` (57 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Nicholas Bellinger, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 0633e123465b61a12a262b742bebf2a9945f7964 ]

The uio_mem structure has a member that is a phys_addr_t, but can
be a number of other types too. The target core driver attempts
to assign a pointer from vmalloc() to it, by casting it to
phys_addr_t, but that causes a warning when phys_addr_t is longer
than a pointer:

drivers/target/target_core_user.c: In function 'tcmu_configure_device':
drivers/target/target_core_user.c:906:22: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]

This adds another cast to uintptr_t to shut up the warning.
A nicer fix might be to have additional fields in uio_mem
for the different purposes, so we can assign a pointer directly.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/target/target_core_user.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c
index 39e8f22be68b..b2edb5f6e6b9 100644
--- a/drivers/target/target_core_user.c
+++ b/drivers/target/target_core_user.c
@@ -860,7 +860,7 @@ static int tcmu_configure_device(struct se_device *dev)
 	info->version = xstr(TCMU_MAILBOX_VERSION);
 
 	info->mem[0].name = "tcm-user command & data buffer";
-	info->mem[0].addr = (phys_addr_t) udev->mb_addr;
+	info->mem[0].addr = (phys_addr_t)(uintptr_t)udev->mb_addr;
 	info->mem[0].size = TCMU_RING_SIZE;
 	info->mem[0].memtype = UIO_MEM_VIRTUAL;
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] driver-core: use 'dev' argument in dev_dbg_ratelimited stub
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (458 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] target/user: Fix cast from pointer to phys_addr_t Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] fbdev: auo_k190x: avoid unused function warnings Sasha Levin
                   ` (56 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Greg Kroah-Hartman, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1f62ff34a90471d1b735bac2c79e894afc7c59bc ]

dev_dbg_ratelimited() is a macro that ignores its first argument when DEBUG is
not set, which can lead to unused variable warnings:

ethernet/mellanox/mlxsw/pci.c: In function 'mlxsw_pci_cqe_sdq_handle':
ethernet/mellanox/mlxsw/pci.c:646:18: warning: unused variable 'pdev' [-Wunused-variable]
ethernet/mellanox/mlxsw/pci.c: In function 'mlxsw_pci_cqe_rdq_handle':
ethernet/mellanox/mlxsw/pci.c:671:18: warning: unused variable 'pdev' [-Wunused-variable]

The macro already ensures that all its other arguments are silently
ignored by the compiler without triggering a warning, through the
use of the no_printk() macro, but the dev argument is not passed into
that.

This changes the definition to use the same trick as no_printk() with
an if(0) that leads the compiler to not evaluate the side-effects but
still see that 'dev' might not be unused.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Suggested-by: Andrew Lunn <andrew@lunn.ch>
Fixes: 6f586e663e3b ("driver-core: Shut up dev_dbg_reatelimited() without DEBUG")
Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/linux/device.h | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/include/linux/device.h b/include/linux/device.h
index 98a1d9748eec..84a1c7e49c51 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -1208,8 +1208,11 @@ do {									\
 		dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__);	\
 } while (0)
 #else
-#define dev_dbg_ratelimited(dev, fmt, ...)			\
-	no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
+#define dev_dbg_ratelimited(dev, fmt, ...)				\
+do {									\
+	if (0)								\
+		dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__);	\
+} while (0)
 #endif
 
 #ifdef VERBOSE_DEBUG
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] fbdev: auo_k190x: avoid unused function warnings
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (459 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] driver-core: use 'dev' argument in dev_dbg_ratelimited stub Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] amd-xgbe: Fix unused suspend handlers build warning Sasha Levin
                   ` (55 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Tomi Valkeinen, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a8a31afad5ffa1c7de0cef1c4bc383b50f426bf8 ]

The auo_k190x framebuffer driver encloses the power-management
functions in #ifdef CONFIG_PM, but the auok190x_suspend/resume
functions are only really used when CONFIG_PM_SLEEP is also
set, as a frequent gcc warning shows:

drivers/video/fbdev/auo_k190x.c:859:12: warning: 'auok190x_suspend' defined but not used
drivers/video/fbdev/auo_k190x.c:899:12: warning: 'auok190x_resume' defined but not used

This changes the driver to remove the #ifdef and instead mark
the functions as __maybe_unused, which is a nicer anyway, as it
provides build testing for all the code in all configurations
and is harder to get wrong.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/video/fbdev/auo_k190x.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/drivers/video/fbdev/auo_k190x.c b/drivers/video/fbdev/auo_k190x.c
index 8d2499d1cafb..9580374667ba 100644
--- a/drivers/video/fbdev/auo_k190x.c
+++ b/drivers/video/fbdev/auo_k190x.c
@@ -773,9 +773,7 @@ static void auok190x_recover(struct auok190xfb_par *par)
 /*
  * Power-management
  */
-
-#ifdef CONFIG_PM
-static int auok190x_runtime_suspend(struct device *dev)
+static int __maybe_unused auok190x_runtime_suspend(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct fb_info *info = platform_get_drvdata(pdev);
@@ -822,7 +820,7 @@ static int auok190x_runtime_suspend(struct device *dev)
 	return 0;
 }
 
-static int auok190x_runtime_resume(struct device *dev)
+static int __maybe_unused auok190x_runtime_resume(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct fb_info *info = platform_get_drvdata(pdev);
@@ -856,7 +854,7 @@ static int auok190x_runtime_resume(struct device *dev)
 	return 0;
 }
 
-static int auok190x_suspend(struct device *dev)
+static int __maybe_unused auok190x_suspend(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct fb_info *info = platform_get_drvdata(pdev);
@@ -896,7 +894,7 @@ static int auok190x_suspend(struct device *dev)
 	return 0;
 }
 
-static int auok190x_resume(struct device *dev)
+static int __maybe_unused auok190x_resume(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct fb_info *info = platform_get_drvdata(pdev);
@@ -933,7 +931,6 @@ static int auok190x_resume(struct device *dev)
 
 	return 0;
 }
-#endif
 
 const struct dev_pm_ops auok190x_pm = {
 	SET_RUNTIME_PM_OPS(auok190x_runtime_suspend, auok190x_runtime_resume,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] amd-xgbe: Fix unused suspend handlers build warning
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (460 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] fbdev: auo_k190x: avoid unused function warnings Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] mtd: sh_flctl: pass FIFO as physical address Sasha Levin
                   ` (54 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Borislav Petkov, David S . Miller, Sasha Levin

From: Borislav Petkov <bp@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 91eefaabf102c539e6f5531e9a1e5ed46d2b41ca ]

Fix:

  drivers/net/ethernet/amd/xgbe/xgbe-main.c:835:12: warning: ‘xgbe_suspend’ defined
    but not used [-Wunused-function]
  drivers/net/ethernet/amd/xgbe/xgbe-main.c:855:12: warning: ‘xgbe_resume’ defined
    but not used [-Wunused-function]

I see it during randconfig builds here.

Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: netdev@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/amd/xgbe/xgbe-main.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-main.c b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
index 714905384900..5feddde71f18 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-main.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
@@ -553,7 +553,7 @@ static int xgbe_remove(struct platform_device *pdev)
 	return 0;
 }
 
-#ifdef CONFIG_PM
+#ifdef CONFIG_PM_SLEEP
 static int xgbe_suspend(struct device *dev)
 {
 	struct net_device *netdev = dev_get_drvdata(dev);
@@ -591,7 +591,7 @@ static int xgbe_resume(struct device *dev)
 
 	return ret;
 }
-#endif /* CONFIG_PM */
+#endif /* CONFIG_PM_SLEEP */
 
 #ifdef CONFIG_ACPI
 static const struct acpi_device_id xgbe_acpi_match[] = {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mtd: sh_flctl: pass FIFO as physical address
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (461 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] amd-xgbe: Fix unused suspend handlers build warning Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] mtd: cfi: enforce valid geometry configuration Sasha Levin
                   ` (53 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Brian Norris, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1873315fb156cbc8e46f28e8b128f17ff6c31728 ]

By convention, the FIFO address we pass using dmaengine_slave_config
is a physical address in the form that is understood by the DMA
engine, as a dma_addr_t, phys_addr_t or resource_size_t.

The sh_flctl driver however passes a virtual __iomem address that
gets cast to dma_addr_t in the slave driver. This happens to work
on shmobile because that platform sets up an identity mapping for
its MMIO regions, but such code is not portable to other platforms,
and prevents us from ever changing the platform mapping or reusing
the driver on other architectures like ARM64 that might not have the
mapping.

We also get a warning about a type mismatch for the case that
dma_addr_t is wider than a pointer, i.e. when CONFIG_LPAE is set:

drivers/mtd/nand/sh_flctl.c: In function 'flctl_setup_dma':
drivers/mtd/nand/sh_flctl.c:163:17: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  cfg.dst_addr = (dma_addr_t)FLDTFIFO(flctl);

This changes the driver to instead pass the physical address of
the FIFO that is extracted from the MMIO resource, making the
code more portable and avoiding the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/mtd/nand/sh_flctl.c  | 5 +++--
 include/linux/mtd/sh_flctl.h | 1 +
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c
index c3ce81c1a716..54cf6fce9877 100644
--- a/drivers/mtd/nand/sh_flctl.c
+++ b/drivers/mtd/nand/sh_flctl.c
@@ -160,7 +160,7 @@ static void flctl_setup_dma(struct sh_flctl *flctl)
 
 	memset(&cfg, 0, sizeof(cfg));
 	cfg.direction = DMA_MEM_TO_DEV;
-	cfg.dst_addr = (dma_addr_t)FLDTFIFO(flctl);
+	cfg.dst_addr = flctl->fifo;
 	cfg.src_addr = 0;
 	ret = dmaengine_slave_config(flctl->chan_fifo0_tx, &cfg);
 	if (ret < 0)
@@ -176,7 +176,7 @@ static void flctl_setup_dma(struct sh_flctl *flctl)
 
 	cfg.direction = DMA_DEV_TO_MEM;
 	cfg.dst_addr = 0;
-	cfg.src_addr = (dma_addr_t)FLDTFIFO(flctl);
+	cfg.src_addr = flctl->fifo;
 	ret = dmaengine_slave_config(flctl->chan_fifo0_rx, &cfg);
 	if (ret < 0)
 		goto err;
@@ -1095,6 +1095,7 @@ static int flctl_probe(struct platform_device *pdev)
 	flctl->reg = devm_ioremap_resource(&pdev->dev, res);
 	if (IS_ERR(flctl->reg))
 		return PTR_ERR(flctl->reg);
+	flctl->fifo = res->start + 0x24; /* FLDTFIFO */
 
 	irq = platform_get_irq(pdev, 0);
 	if (irq < 0) {
diff --git a/include/linux/mtd/sh_flctl.h b/include/linux/mtd/sh_flctl.h
index 1c28f8879b1c..067b37aff4a1 100644
--- a/include/linux/mtd/sh_flctl.h
+++ b/include/linux/mtd/sh_flctl.h
@@ -148,6 +148,7 @@ struct sh_flctl {
 	struct platform_device	*pdev;
 	struct dev_pm_qos_request pm_qos;
 	void __iomem		*reg;
+	resource_size_t		fifo;
 
 	uint8_t	done_buff[2048 + 64];	/* max size 2048 + 64 */
 	int	read_bytes;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] mtd: cfi: enforce valid geometry configuration
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (462 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] mtd: sh_flctl: pass FIFO as physical address Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] fbdev: s6e8ax0: avoid unused function warnings Sasha Levin
                   ` (52 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Brian Norris, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f5f92b36fbbb8ac7d70ff5fa39ec2637cce3094c ]

MTD allows compile-time configuration of the possible CFI geometry
settings that are allowed by the kernel, but that includes a couple of
invalid configurations, where no bank width or no interleave setting
is allowed. These are then caught with a compile-time warning:

include/linux/mtd/cfi.h:76:2: warning: #warning No CONFIG_MTD_CFI_Ix selected. No NOR chip support can work.
include/linux/mtd/map.h:145:2: warning: #warning "No CONFIG_MTD_MAP_BANK_WIDTH_xx selected. No NOR chip support can work"

This is a bit annoying for randconfig tests, and can be avoided if
we change the Kconfig logic to always select the simplest configuration
when no other one is enabled.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/mtd/chips/Kconfig | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/mtd/chips/Kconfig b/drivers/mtd/chips/Kconfig
index 6bc1f94333a5..e956231de30f 100644
--- a/drivers/mtd/chips/Kconfig
+++ b/drivers/mtd/chips/Kconfig
@@ -66,6 +66,10 @@ endchoice
 config MTD_CFI_GEOMETRY
 	bool "Specific CFI Flash geometry selection"
 	depends on MTD_CFI_ADV_OPTIONS
+	select MTD_MAP_BANK_WIDTH_1 if  !(MTD_MAP_BANK_WIDTH_2 || \
+		 MTD_MAP_BANK_WIDTH_4  || MTD_MAP_BANK_WIDTH_8 || \
+		 MTD_MAP_BANK_WIDTH_16 || MTD_MAP_BANK_WIDTH_32)
+	select MTD_CFI_I1 if !(MTD_CFI_I2 || MTD_CFI_I4 || MTD_CFI_I8)
 	help
 	  This option does not affect the code directly, but will enable
 	  some other configuration options which would allow you to reduce
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] fbdev: s6e8ax0: avoid unused function warnings
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (463 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] mtd: cfi: enforce valid geometry configuration Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] USB: cdc_subset: only build when one driver is enabled Sasha Levin
                   ` (51 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Tomi Valkeinen, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b54729b6cea7d1f46b1ed70cb7065c6bdefaa780 ]

The s6e8ax0 suspend/resume functions are hidden inside of an #ifdef
when CONFIG_PM is set to avoid unused function warnings, but they
call some other functions that nothing else calls, and we get warnings
about those:

drivers/video/fbdev/exynos/s6e8ax0.c:449:13: error: 's6e8ax0_sleep_in' defined but not used [-Werror=unused-function]
drivers/video/fbdev/exynos/s6e8ax0.c:485:13: error: 's6e8ax0_display_off' defined but not used [-Werror=unused-function]

This marks the PM functions as __maybe_unused so the compiler can
silently drop them when they are not referenced.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/video/fbdev/exynos/s6e8ax0.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/drivers/video/fbdev/exynos/s6e8ax0.c b/drivers/video/fbdev/exynos/s6e8ax0.c
index 95873f26e39c..de2f3e793786 100644
--- a/drivers/video/fbdev/exynos/s6e8ax0.c
+++ b/drivers/video/fbdev/exynos/s6e8ax0.c
@@ -829,8 +829,7 @@ static int s6e8ax0_probe(struct mipi_dsim_lcd_device *dsim_dev)
 	return 0;
 }
 
-#ifdef CONFIG_PM
-static int s6e8ax0_suspend(struct mipi_dsim_lcd_device *dsim_dev)
+static int __maybe_unused s6e8ax0_suspend(struct mipi_dsim_lcd_device *dsim_dev)
 {
 	struct s6e8ax0 *lcd = dev_get_drvdata(&dsim_dev->dev);
 
@@ -843,7 +842,7 @@ static int s6e8ax0_suspend(struct mipi_dsim_lcd_device *dsim_dev)
 	return 0;
 }
 
-static int s6e8ax0_resume(struct mipi_dsim_lcd_device *dsim_dev)
+static int __maybe_unused s6e8ax0_resume(struct mipi_dsim_lcd_device *dsim_dev)
 {
 	struct s6e8ax0 *lcd = dev_get_drvdata(&dsim_dev->dev);
 
@@ -855,10 +854,6 @@ static int s6e8ax0_resume(struct mipi_dsim_lcd_device *dsim_dev)
 
 	return 0;
 }
-#else
-#define s6e8ax0_suspend		NULL
-#define s6e8ax0_resume		NULL
-#endif
 
 static struct mipi_dsim_lcd_driver s6e8ax0_dsim_ddi_driver = {
 	.name = "s6e8ax0",
@@ -867,8 +862,8 @@ static struct mipi_dsim_lcd_driver s6e8ax0_dsim_ddi_driver = {
 	.power_on = s6e8ax0_power_on,
 	.set_sequence = s6e8ax0_set_sequence,
 	.probe = s6e8ax0_probe,
-	.suspend = s6e8ax0_suspend,
-	.resume = s6e8ax0_resume,
+	.suspend = IS_ENABLED(CONFIG_PM) ? s6e8ax0_suspend : NULL,
+	.resume = IS_ENABLED(CONFIG_PM) ? s6e8ax0_resume : NULL,
 };
 
 static int s6e8ax0_init(void)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] USB: cdc_subset: only build when one driver is enabled
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (464 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] fbdev: s6e8ax0: avoid unused function warnings Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/platform/olpc: Fix resume handler build warning Sasha Levin
                   ` (50 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, David S . Miller, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f3bb23764fac042d189129d485d3a9246cb777da ]

This avoids a harmless randconfig warning I get when USB_NET_CDC_SUBSET
is enabled, but all of the more specific drivers are not:

drivers/net/usb/cdc_subset.c:241:2: #warning You need to configure some hardware for this driver

The current behavior is clearly intentional, giving a warning when
a user picks a configuration that won't do anything good. The only
reason for even addressing this is that I'm getting close to
eliminating all 'randconfig' warnings on ARM, and this came up
a couple of times.

My workaround is to not even build the module when none of the
configurations are enable.

Alternatively we could simply remove the #warning (nothing wrong
for compile-testing), turn it into a runtime warning, or
change the Kconfig options into a menu to hide CONFIG_USB_NET_CDC_SUBSET.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/usb/Kconfig  | 10 ++++++++++
 drivers/net/usb/Makefile |  2 +-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 2b47cbae524c..9a9e0ea05a72 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -382,6 +382,10 @@ config USB_NET_RNDIS_HOST
 	  The protocol specification is incomplete, and is controlled by
 	  (and for) Microsoft; it isn't an "Open" ecosystem or market.
 
+config USB_NET_CDC_SUBSET_ENABLE
+	tristate
+	depends on USB_NET_CDC_SUBSET
+
 config USB_NET_CDC_SUBSET
 	tristate "Simple USB Network Links (CDC Ethernet subset)"
 	depends on USB_USBNET
@@ -400,6 +404,7 @@ config USB_NET_CDC_SUBSET
 config USB_ALI_M5632
 	bool "ALi M5632 based 'USB 2.0 Data Link' cables"
 	depends on USB_NET_CDC_SUBSET
+	select USB_NET_CDC_SUBSET_ENABLE
 	help
 	  Choose this option if you're using a host-to-host cable
 	  based on this design, which supports USB 2.0 high speed.
@@ -407,6 +412,7 @@ config USB_ALI_M5632
 config USB_AN2720
 	bool "AnchorChips 2720 based cables (Xircom PGUNET, ...)"
 	depends on USB_NET_CDC_SUBSET
+	select USB_NET_CDC_SUBSET_ENABLE
 	help
 	  Choose this option if you're using a host-to-host cable
 	  based on this design.  Note that AnchorChips is now a
@@ -415,6 +421,7 @@ config USB_AN2720
 config USB_BELKIN
 	bool "eTEK based host-to-host cables (Advance, Belkin, ...)"
 	depends on USB_NET_CDC_SUBSET
+	select USB_NET_CDC_SUBSET_ENABLE
 	default y
 	help
 	  Choose this option if you're using a host-to-host cable
@@ -424,6 +431,7 @@ config USB_BELKIN
 config USB_ARMLINUX
 	bool "Embedded ARM Linux links (iPaq, ...)"
 	depends on USB_NET_CDC_SUBSET
+	select USB_NET_CDC_SUBSET_ENABLE
 	default y
 	help
 	  Choose this option to support the "usb-eth" networking driver
@@ -441,6 +449,7 @@ config USB_ARMLINUX
 config USB_EPSON2888
 	bool "Epson 2888 based firmware (DEVELOPMENT)"
 	depends on USB_NET_CDC_SUBSET
+	select USB_NET_CDC_SUBSET_ENABLE
 	help
 	  Choose this option to support the usb networking links used
 	  by some sample firmware from Epson.
@@ -448,6 +457,7 @@ config USB_EPSON2888
 config USB_KC2190
 	bool "KT Technology KC2190 based cables (InstaNet)"
 	depends on USB_NET_CDC_SUBSET
+	select USB_NET_CDC_SUBSET_ENABLE
 	help
 	  Choose this option if you're using a host-to-host cable
 	  with one of these chips.
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index e2797f1e1b31..ed5a577c1a61 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -22,7 +22,7 @@ obj-$(CONFIG_USB_NET_GL620A)	+= gl620a.o
 obj-$(CONFIG_USB_NET_NET1080)	+= net1080.o
 obj-$(CONFIG_USB_NET_PLUSB)	+= plusb.o
 obj-$(CONFIG_USB_NET_RNDIS_HOST)	+= rndis_host.o
-obj-$(CONFIG_USB_NET_CDC_SUBSET)	+= cdc_subset.o
+obj-$(CONFIG_USB_NET_CDC_SUBSET_ENABLE)	+= cdc_subset.o
 obj-$(CONFIG_USB_NET_ZAURUS)	+= zaurus.o
 obj-$(CONFIG_USB_NET_MCS7830)	+= mcs7830.o
 obj-$(CONFIG_USB_USBNET)	+= usbnet.o
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/platform/olpc: Fix resume handler build warning
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (465 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] USB: cdc_subset: only build when one driver is enabled Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] ipv4: ipconfig: avoid unused ic_proto_used symbol Sasha Levin
                   ` (49 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Borislav Petkov, Ingo Molnar, Sasha Levin

From: Borislav Petkov <bp@suse.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 20ab6677716c7bbdcfd1cdb9aef296a0b3101f73 ]

Fix:

  arch/x86/platform/olpc/olpc-xo15-sci.c:199:12: warning: ‘xo15_sci_resume’
  defined but not used [-Wunused-function]
   static int xo15_sci_resume(struct device *dev)
              ^

which I see in randconfig builds here.

Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20161126142706.13602-1-bp@alien8.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/platform/olpc/olpc-xo15-sci.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/x86/platform/olpc/olpc-xo15-sci.c b/arch/x86/platform/olpc/olpc-xo15-sci.c
index 55130846ac87..c0533fbc39e3 100644
--- a/arch/x86/platform/olpc/olpc-xo15-sci.c
+++ b/arch/x86/platform/olpc/olpc-xo15-sci.c
@@ -196,6 +196,7 @@ static int xo15_sci_remove(struct acpi_device *device)
 	return 0;
 }
 
+#ifdef CONFIG_PM_SLEEP
 static int xo15_sci_resume(struct device *dev)
 {
 	/* Enable all EC events */
@@ -207,6 +208,7 @@ static int xo15_sci_resume(struct device *dev)
 
 	return 0;
 }
+#endif
 
 static SIMPLE_DEV_PM_OPS(xo15_sci_pm, NULL, xo15_sci_resume);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ipv4: ipconfig: avoid unused ic_proto_used symbol
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (466 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/platform/olpc: Fix resume handler build warning Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] tlan: avoid unused label with PCI=n Sasha Levin
                   ` (48 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, David S . Miller, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 52b79e2bdf92b07b37c805c50811eaf69a33683d ]

When CONFIG_PROC_FS, CONFIG_IP_PNP_BOOTP, CONFIG_IP_PNP_DHCP and
CONFIG_IP_PNP_RARP are all disabled, we get a warning about the
ic_proto_used variable being unused:

net/ipv4/ipconfig.c:146:12: error: 'ic_proto_used' defined but not used [-Werror=unused-variable]

This avoids the warning, by making the definition conditional on
whether a dynamic IP configuration protocol is configured. If not,
we know that the value is always zero, so we can optimize away the
variable and all code that depends on it.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv4/ipconfig.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
index 8e7328c6a390..6389616ccc3f 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
@@ -148,7 +148,11 @@ static char vendor_class_identifier[253] __initdata;
 
 /* Persistent data: */
 
+#ifdef IPCONFIG_DYNAMIC
 static int ic_proto_used;			/* Protocol used, if any */
+#else
+#define ic_proto_used 0
+#endif
 static __be32 ic_nameservers[CONF_NAMESERVERS_MAX]; /* DNS Server IP addresses */
 static u8 ic_domain[64];		/* DNS (not NIS) domain name */
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] tc1100-wmi: fix build warning when CONFIG_PM not enabled
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (468 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] tlan: avoid unused label with PCI=n Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] iio: adc: axp288: remove redundant duplicate const on axp288_adc_channels Sasha Levin
                   ` (46 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Colin Ian King, Darren Hart, Sasha Levin

From: Colin Ian King <colin.king@canonical.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 75d7e7d7a8f4966cb8b1da54a1c74fb2a97ae8fc ]

Conditionally declare suspend_data on CONFIG_PM to avoid
the following warning when CONFIG_OM is not enabled:

drivers/platform/x86/tc1100-wmi.c:55:27: warning:
  'suspend_data' defined but not used [-Wunused-variable]

Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/platform/x86/tc1100-wmi.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/platform/x86/tc1100-wmi.c b/drivers/platform/x86/tc1100-wmi.c
index e36542564131..e89ac8cd20e8 100644
--- a/drivers/platform/x86/tc1100-wmi.c
+++ b/drivers/platform/x86/tc1100-wmi.c
@@ -52,7 +52,9 @@ struct tc1100_data {
 	u32 jogdial;
 };
 
+#ifdef CONFIG_PM
 static struct tc1100_data suspend_data;
+#endif
 
 /* --------------------------------------------------------------------------
 				Device Management
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] tlan: avoid unused label with PCI=n
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (467 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] ipv4: ipconfig: avoid unused ic_proto_used symbol Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] tc1100-wmi: fix build warning when CONFIG_PM not enabled Sasha Levin
                   ` (47 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, David S . Miller, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1e09c106a44c2b2685a77a1ef27951381c9fcd23 ]

While build testing with randconfig on x86, I ran into this warning
that appears to have been around forever

drivers/net/ethernet/ti/tlan.c: In function ‘tlan_probe1’:
drivers/net/ethernet/ti/tlan.c:614:1: error: label ‘err_out’ defined but not used [-Werror=unused-label]

This can be trivially avoided by just moving the label into the
existing #ifdef.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/ti/tlan.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/ti/tlan.c b/drivers/net/ethernet/ti/tlan.c
index 691ec936e88d..a0f805142d42 100644
--- a/drivers/net/ethernet/ti/tlan.c
+++ b/drivers/net/ethernet/ti/tlan.c
@@ -610,8 +610,8 @@ static int tlan_probe1(struct pci_dev *pdev, long ioaddr, int irq, int rev,
 #ifdef CONFIG_PCI
 	if (pdev)
 		pci_release_regions(pdev);
-#endif
 err_out:
+#endif
 	if (pdev)
 		pci_disable_device(pdev);
 	return rc;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] iio: adc: axp288: remove redundant duplicate const on axp288_adc_channels
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (469 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] tc1100-wmi: fix build warning when CONFIG_PM not enabled Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] tty: cyclades: cyz_interrupt is only used for PCI Sasha Levin
                   ` (45 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Colin Ian King, Jonathan Cameron, Sasha Levin

From: Colin Ian King <colin.king@canonical.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7ca6574a7afb669b0b4b30dd63adeb310e97e250 ]

duplicate const can be removed, it is redundant. Found by static
analysis using smatch.

Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/iio/adc/axp288_adc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/iio/adc/axp288_adc.c b/drivers/iio/adc/axp288_adc.c
index 1c626a3cc7f2..f3a64a45c512 100644
--- a/drivers/iio/adc/axp288_adc.c
+++ b/drivers/iio/adc/axp288_adc.c
@@ -44,7 +44,7 @@ struct axp288_adc_info {
 	struct regmap *regmap;
 };
 
-static const struct iio_chan_spec const axp288_adc_channels[] = {
+static const struct iio_chan_spec axp288_adc_channels[] = {
 	{
 		.indexed = 1,
 		.type = IIO_TEMP,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] tty: cyclades: cyz_interrupt is only used for PCI
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (470 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] iio: adc: axp288: remove redundant duplicate const on axp288_adc_channels Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] i2c: remove __init from i2c_register_board_info() Sasha Levin
                   ` (44 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Greg Kroah-Hartman, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 05ead49691d245f67bdd1b30cab5d9af522ac884 ]

When CONFIG_PCI is not set, enabling CONFIG_CYZ_INTR has no
practical effect other than generating a warning about an
unused function:

drivers/tty/cyclades.c:1184:20: warning: 'cyz_interrupt' defined but not used [-Wunused-function]
 static irqreturn_t cyz_interrupt(int irq, void *dev_id)

This adds a dependency to avoid that warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/tty/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/tty/Kconfig b/drivers/tty/Kconfig
index c01f45095877..82c4d2e45319 100644
--- a/drivers/tty/Kconfig
+++ b/drivers/tty/Kconfig
@@ -226,7 +226,7 @@ config CYCLADES
 
 config CYZ_INTR
 	bool "Cyclades-Z interrupt mode operation"
-	depends on CYCLADES
+	depends on CYCLADES && PCI
 	help
 	  The Cyclades-Z family of multiport cards allows 2 (two) driver op
 	  modes: polling and interrupt. In polling mode, the driver will check
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] i2c: remove __init from i2c_register_board_info()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (471 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] tty: cyclades: cyz_interrupt is only used for PCI Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] Input: tca8418_keypad - hide gcc-4.9 -Wmaybe-uninitialized warning Sasha Levin
                   ` (43 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Luis R. Rodriguez, Wolfram Sang, Sasha Levin

From: "Luis R. Rodriguez" <mcgrof@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5abe9b26847c65a698f38744a52635b287514294 ]

As of next-20160607 with allyesconfig we get this linker failure:

  MODPOST vmlinux.o
WARNING: vmlinux.o(.text+0x21bc0d): Section mismatch in reference from
the function intel_scu_devices_create() to the function
.init.text:i2c_register_board_info()

This is caused by the fact that intel_scu_devices_create() calls
i2c_register_board_info() and intel_scu_devices_create() is not
annotated with __init. This typically involves manual code
inspection and if one is certain this is correct we would
just peg intel_scu_devices_create() with a __ref annotation.

In this case this would be wrong though as the
intel_scu_devices_create() call is exported, and used in
the ipc_probe() on drivers/platform/x86/intel_scu_ipc.c.
The issue is that even though builtin_pci_driver(ipc_driver)
is used this just exposes the probe routine, which can occur
at any point in time if this bus supports hotplug. A race
can happen between kernel_init_freeable() that calls the init
calls (in this case registeres the intel_scu_ipc.c driver, and
later free_initmem(), which would free the i2c_register_board_info().
If a probe happens later in boot i2c_register_board_info() would
not be present and we should get a page fault.

Signed-off-by: Luis R. Rodriguez <mcgrof@kernel.org>
[wsa: made function declaration a one-liner]
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/i2c/i2c-boardinfo.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/i2c/i2c-boardinfo.c b/drivers/i2c/i2c-boardinfo.c
index 90e322959303..42c25aed671d 100644
--- a/drivers/i2c/i2c-boardinfo.c
+++ b/drivers/i2c/i2c-boardinfo.c
@@ -56,9 +56,7 @@ EXPORT_SYMBOL_GPL(__i2c_first_dynamic_bus_num);
  * The board info passed can safely be __initdata, but be careful of embedded
  * pointers (for platform_data, functions, etc) since that won't be copied.
  */
-int __init
-i2c_register_board_info(int busnum,
-	struct i2c_board_info const *info, unsigned len)
+int i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned len)
 {
 	int status;
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] drm/nouveau: hide gcc-4.9 -Wmaybe-uninitialized
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (473 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] Input: tca8418_keypad - hide gcc-4.9 -Wmaybe-uninitialized warning Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] [media] go7007: add MEDIA_CAMERA_SUPPORT dependency Sasha Levin
                   ` (41 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Ben Skeggs, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b74c0a9969f25217a5e5bbcac56a11bee16718d3 ]

gcc-4.9 notices that the validate_init() function returns unintialized
data when called with a zero 'nr_buffers' argument, when called with the
-Wmaybe-uninitialized flag:

drivers/gpu/drm/nouveau/nouveau_gem.c: In function ‘validate_init.isra.6’:
drivers/gpu/drm/nouveau/nouveau_gem.c:457:5: error: ‘ret’ may be used uninitialized in this function [-Werror=maybe-uninitialized]

However, the only caller of this function always passes a nonzero
argument, and gcc-6 is clever enough to take this into account and
not warn about it any more.

Adding an explicit initialization to -EINVAL here is correct even if
the caller changed, and it avoids the warning on gcc-4.9 as well.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-By: Karol Herbst <karolherbst@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/gpu/drm/nouveau/nouveau_gem.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c
index 58c959265b1a..36000f76e31d 100644
--- a/drivers/gpu/drm/nouveau/nouveau_gem.c
+++ b/drivers/gpu/drm/nouveau/nouveau_gem.c
@@ -368,7 +368,7 @@ validate_init(struct nouveau_channel *chan, struct drm_file *file_priv,
 	struct nouveau_cli *cli = nouveau_cli(file_priv);
 	struct drm_device *dev = chan->drm->dev;
 	int trycnt = 0;
-	int ret, i;
+	int ret = -EINVAL, i;
 	struct nouveau_bo *res_bo = NULL;
 	LIST_HEAD(gart_list);
 	LIST_HEAD(vram_list);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Input: tca8418_keypad - hide gcc-4.9 -Wmaybe-uninitialized warning
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (472 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] i2c: remove __init from i2c_register_board_info() Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] drm/nouveau: hide gcc-4.9 -Wmaybe-uninitialized Sasha Levin
                   ` (42 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Dmitry Torokhov, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ea4348c8462a20e8b1b6455a7145d2b86f8a49b6 ]

Older versions of gcc warn about the tca8418_irq_handler function
as they can't keep track of the variable assignment inside of the
loop when using the -Wmaybe-unintialized flag:

drivers/input/keyboard/tca8418_keypad.c: In function ‘tca8418_irq_handler’:
drivers/input/keyboard/tca8418_keypad.c:172:9: error: ‘reg’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
drivers/input/keyboard/tca8418_keypad.c:165:5: note: ‘reg’ was declared here

This is fixed in gcc-6, but it's possible to rearrange the code
in a way that avoids the warning on older compilers as well.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/input/keyboard/tca8418_keypad.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/drivers/input/keyboard/tca8418_keypad.c b/drivers/input/keyboard/tca8418_keypad.c
index 4e491c1762cf..5c4f7f8f2c20 100644
--- a/drivers/input/keyboard/tca8418_keypad.c
+++ b/drivers/input/keyboard/tca8418_keypad.c
@@ -164,11 +164,18 @@ static void tca8418_read_keypad(struct tca8418_keypad *keypad_data)
 	int error, col, row;
 	u8 reg, state, code;
 
-	/* Initial read of the key event FIFO */
-	error = tca8418_read_byte(keypad_data, REG_KEY_EVENT_A, &reg);
+	do {
+		error = tca8418_read_byte(keypad_data, REG_KEY_EVENT_A, &reg);
+		if (error < 0) {
+			dev_err(&keypad_data->client->dev,
+				"unable to read REG_KEY_EVENT_A\n");
+			break;
+		}
+
+		/* Assume that key code 0 signifies empty FIFO */
+		if (reg <= 0)
+			break;
 
-	/* Assume that key code 0 signifies empty FIFO */
-	while (error >= 0 && reg > 0) {
 		state = reg & KEY_EVENT_VALUE;
 		code  = reg & KEY_EVENT_CODE;
 
@@ -184,11 +191,7 @@ static void tca8418_read_keypad(struct tca8418_keypad *keypad_data)
 
 		/* Read for next loop */
 		error = tca8418_read_byte(keypad_data, REG_KEY_EVENT_A, &reg);
-	}
-
-	if (error < 0)
-		dev_err(&keypad_data->client->dev,
-			"unable to read REG_KEY_EVENT_A\n");
+	} while (1);
 
 	input_sync(input);
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] [media] em28xx: only use mt9v011 if camera support is enabled
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (475 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] [media] go7007: add MEDIA_CAMERA_SUPPORT dependency Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] ISDN: eicon: reduce stack size of sig_ind function Sasha Levin
                   ` (39 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Mauro Carvalho Chehab, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 190b23b4eb997767afad186bd8c96badceabf39e ]

In randconfig builds that select VIDEO_EM28XX_V4L2 and
MEDIA_SUBDRV_AUTOSELECT, but not MEDIA_CAMERA_SUPPORT, we get
a Kconfig warning:

 warning: (VIDEO_EM28XX_V4L2) selects VIDEO_MT9V011 which has unmet direct dependencies (MEDIA_SUPPORT && I2C && VIDEO_V4L2 && MEDIA_CAMERA_SUPPORT)

This avoids the warning by making that 'select' conditional on
MEDIA_CAMERA_SUPPORT. Alternatively we could mark EM28XX as
'depends on MEDIA_CAMERA_SUPPORT', but it does not seem to
have any real dependency on that itself.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/usb/em28xx/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/usb/em28xx/Kconfig b/drivers/media/usb/em28xx/Kconfig
index e382210c4ada..75323f5efd0f 100644
--- a/drivers/media/usb/em28xx/Kconfig
+++ b/drivers/media/usb/em28xx/Kconfig
@@ -11,7 +11,7 @@ config VIDEO_EM28XX_V4L2
 	select VIDEO_SAA711X if MEDIA_SUBDRV_AUTOSELECT
 	select VIDEO_TVP5150 if MEDIA_SUBDRV_AUTOSELECT
 	select VIDEO_MSP3400 if MEDIA_SUBDRV_AUTOSELECT
-	select VIDEO_MT9V011 if MEDIA_SUBDRV_AUTOSELECT
+	select VIDEO_MT9V011 if MEDIA_SUBDRV_AUTOSELECT && MEDIA_CAMERA_SUPPORT
 
 	---help---
 	  This is a video4linux driver for Empia 28xx based TV cards.
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] [media] go7007: add MEDIA_CAMERA_SUPPORT dependency
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (474 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] drm/nouveau: hide gcc-4.9 -Wmaybe-uninitialized Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] [media] em28xx: only use mt9v011 if camera support is enabled Sasha Levin
                   ` (40 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Mauro Carvalho Chehab, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fa6317eedd6341f2144ed1097706d8c34f18b6e4 ]

If MEDIA_SUBDRV_AUTOSELECT and VIDEO_GO7007 are both set, we
automatically select VIDEO_OV7640, but that depends on MEDIA_CAMERA_SUPPORT,
so we get a Kconfig warning if that is disabled:

warning: (VIDEO_GO7007) selects VIDEO_OV7640 which has unmet direct dependencies (MEDIA_SUPPORT && I2C && VIDEO_V4L2 && MEDIA_CAMERA_SUPPORT)

This adds another dependency so we don't accidentally select
it when it is unavailable.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/usb/go7007/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/usb/go7007/Kconfig b/drivers/media/usb/go7007/Kconfig
index 95a3af644a92..af1d02430931 100644
--- a/drivers/media/usb/go7007/Kconfig
+++ b/drivers/media/usb/go7007/Kconfig
@@ -11,7 +11,7 @@ config VIDEO_GO7007
 	select VIDEO_TW2804 if MEDIA_SUBDRV_AUTOSELECT
 	select VIDEO_TW9903 if MEDIA_SUBDRV_AUTOSELECT
 	select VIDEO_TW9906 if MEDIA_SUBDRV_AUTOSELECT
-	select VIDEO_OV7640 if MEDIA_SUBDRV_AUTOSELECT
+	select VIDEO_OV7640 if MEDIA_SUBDRV_AUTOSELECT && MEDIA_CAMERA_SUPPORT
 	select VIDEO_UDA1342 if MEDIA_SUBDRV_AUTOSELECT
 	---help---
 	  This is a video4linux driver for the WIS GO7007 MPEG
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ISDN: eicon: reduce stack size of sig_ind function
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (476 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] [media] em28xx: only use mt9v011 if camera support is enabled Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] [media] hdpvr: hide unused variable Sasha Levin
                   ` (38 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, David S . Miller, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 27d807180ae0a9e50d90adf9b22573c21be904c2 ]

I noticed that this function uses a lot of kernel stack when the
"latent entropy" plugin is enabled:

drivers/isdn/hardware/eicon/message.c: In function 'sig_ind':
drivers/isdn/hardware/eicon/message.c:6113:1: error: the frame size of 1168 bytes is larger than 1152 bytes [-Werror=frame-larger-than=]

We currently don't warn about this, as we raise the warning limit
to 2048 bytes in mainline, but I'd like to lower that limit again
in the future, and this function can easily be changed to be more
efficient and avoid that warning, by making some of its local
variables 'const'.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/isdn/hardware/eicon/message.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/isdn/hardware/eicon/message.c b/drivers/isdn/hardware/eicon/message.c
index 7b4ddf0a39ec..2d28530b7e82 100644
--- a/drivers/isdn/hardware/eicon/message.c
+++ b/drivers/isdn/hardware/eicon/message.c
@@ -147,7 +147,7 @@ static word plci_remove_check(PLCI *);
 static void listen_check(DIVA_CAPI_ADAPTER *);
 static byte AddInfo(byte **, byte **, byte *, byte *);
 static byte getChannel(API_PARSE *);
-static void IndParse(PLCI *, word *, byte **, byte);
+static void IndParse(PLCI *, const word *, byte **, byte);
 static byte ie_compare(byte *, byte *);
 static word find_cip(DIVA_CAPI_ADAPTER *, byte *, byte *);
 static word CPN_filter_ok(byte *cpn, DIVA_CAPI_ADAPTER *, word);
@@ -4860,7 +4860,7 @@ static void sig_ind(PLCI *plci)
 	/* included before the ESC_MSGTYPE and MAXPARMSIDS has to be incremented */
 	/* SMSG is situated at the end because its 0 (for compatibility reasons */
 	/* (see Info_Mask Bit 4, first IE. then the message type)           */
-	word parms_id[] =
+	static const word parms_id[] =
 		{MAXPARMSIDS, CPN, 0xff, DSA, OSA, BC, LLC, HLC, ESC_CAUSE, DSP, DT, CHA,
 		 UUI, CONG_RR, CONG_RNR, ESC_CHI, KEY, CHI, CAU, ESC_LAW,
 		 RDN, RDX, CONN_NR, RIN, NI, CAI, ESC_CR,
@@ -4868,12 +4868,12 @@ static void sig_ind(PLCI *plci)
 	/* 14 FTY repl by ESC_CHI */
 	/* 18 PI  repl by ESC_LAW */
 	/* removed OAD changed to 0xff for future use, OAD is multiIE now */
-	word multi_fac_id[] = {1, FTY};
-	word multi_pi_id[]  = {1, PI};
-	word multi_CiPN_id[]  = {1, OAD};
-	word multi_ssext_id[]  = {1, ESC_SSEXT};
+	static const word multi_fac_id[] = {1, FTY};
+	static const word multi_pi_id[]  = {1, PI};
+	static const word multi_CiPN_id[]  = {1, OAD};
+	static const word multi_ssext_id[]  = {1, ESC_SSEXT};
 
-	word multi_vswitch_id[]  = {1, ESC_VSWITCH};
+	static const word multi_vswitch_id[]  = {1, ESC_VSWITCH};
 
 	byte *cau;
 	word ncci;
@@ -8926,7 +8926,7 @@ static void listen_check(DIVA_CAPI_ADAPTER *a)
 /* functions for all parameters sent in INDs                        */
 /*------------------------------------------------------------------*/
 
-static void IndParse(PLCI *plci, word *parms_id, byte **parms, byte multiIEsize)
+static void IndParse(PLCI *plci, const word *parms_id, byte **parms, byte multiIEsize)
 {
 	word ploc;            /* points to current location within packet */
 	byte w;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] drm/gma500: Sanity-check pipe index
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (478 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] [media] hdpvr: hide unused variable Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] [media] v4l: remove MEDIA_TUNER dependency for VIDEO_TUNER Sasha Levin
                   ` (36 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Thierry Reding, Boris Brezillon, Daniel Vetter, Sasha Levin

From: Thierry Reding <treding@nvidia.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4f250706211cdb949f7580d4fe4dd1fd646de693 ]

If the DSI output isn't connected, then mdfld_dsi_encoder_get_pipe()
will return -1. The mdfld_dsi_dp_mode_set() function doesn't properly
check for this condition and causes the following compiler warnings:

	  CC      drivers/gpu/drm/gma500/mdfld_dsi_dpi.o
	drivers/gpu/drm/gma500/mdfld_dsi_dpi.c: In function ‘mdfld_dsi_dpi_mode_set’:
	drivers/gpu/drm/gma500/mdfld_dsi_dpi.c:828:35: warning: array subscript is below array bounds [-Warray-bounds]
	  u32 pipeconf = dev_priv->pipeconf[pipe];
	                                   ^
	drivers/gpu/drm/gma500/mdfld_dsi_dpi.c:829:33: warning: array subscript is below array bounds [-Warray-bounds]
	  u32 dspcntr = dev_priv->dspcntr[pipe];
	                                 ^

Fix this by checking for a valid pipe before indexing the pipeconf and
dspcntr arrays.

Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Reviewed-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1450178476-26284-2-git-send-email-boris.brezillon@free-electrons.com
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/gpu/drm/gma500/mdfld_dsi_dpi.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
index d4813e03f5ee..00275c3856ce 100644
--- a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
+++ b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
@@ -821,14 +821,18 @@ void mdfld_dsi_dpi_mode_set(struct drm_encoder *encoder,
 	struct drm_device *dev = dsi_config->dev;
 	struct drm_psb_private *dev_priv = dev->dev_private;
 	int pipe = mdfld_dsi_encoder_get_pipe(dsi_encoder);
-
 	u32 pipeconf_reg = PIPEACONF;
 	u32 dspcntr_reg = DSPACNTR;
+	u32 pipeconf, dspcntr;
 
-	u32 pipeconf = dev_priv->pipeconf[pipe];
-	u32 dspcntr = dev_priv->dspcntr[pipe];
 	u32 mipi = MIPI_PORT_EN | PASS_FROM_SPHY_TO_AFE | SEL_FLOPPED_HSTX;
 
+	if (WARN_ON(pipe < 0))
+		return;
+
+	pipeconf = dev_priv->pipeconf[pipe];
+	dspcntr = dev_priv->dspcntr[pipe];
+
 	if (pipe) {
 		pipeconf_reg = PIPECCONF;
 		dspcntr_reg = DSPCCNTR;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] [media] hdpvr: hide unused variable
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (477 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] ISDN: eicon: reduce stack size of sig_ind function Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] drm/gma500: Sanity-check pipe index Sasha Levin
                   ` (37 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Mauro Carvalho Chehab, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b97baa3e22e18dac42001e665cf27ad1211bf878 ]

The i2c client pointer is only used when CONFIG_I2C is set, and
otherwise produces a compile-time warning:

drivers/media/usb/hdpvr/hdpvr-core.c: In function 'hdpvr_probe':
drivers/media/usb/hdpvr/hdpvr-core.c:276:21: error: unused variable 'client' [-Werror=unused-variable]

This uses the same #ifdef to hide the variable when the code using
it is hidden.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/usb/hdpvr/hdpvr-core.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/media/usb/hdpvr/hdpvr-core.c b/drivers/media/usb/hdpvr/hdpvr-core.c
index 3fc64197b4e6..08f0ca7aa012 100644
--- a/drivers/media/usb/hdpvr/hdpvr-core.c
+++ b/drivers/media/usb/hdpvr/hdpvr-core.c
@@ -273,7 +273,9 @@ static int hdpvr_probe(struct usb_interface *interface,
 	struct hdpvr_device *dev;
 	struct usb_host_interface *iface_desc;
 	struct usb_endpoint_descriptor *endpoint;
+#if IS_ENABLED(CONFIG_I2C)
 	struct i2c_client *client;
+#endif
 	size_t buffer_size;
 	int i;
 	int retval = -ENOMEM;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] cw1200: fix bogus maybe-uninitialized warning
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (480 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] [media] v4l: remove MEDIA_TUNER dependency for VIDEO_TUNER Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] perf/x86: Shut up false-positive -Wmaybe-uninitialized warning Sasha Levin
                   ` (34 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Kalle Valo, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7fc1503c906f0fac62d3506a6e993e49fb996248 ]

On x86, the cw1200 driver produces a rather silly warning about the
possible use of the 'ret' variable without an initialization
presumably after being confused by the architecture specific definition
of WARN_ON:

drivers/net/wireless/st/cw1200/wsm.c: In function ‘wsm_handle_rx’:
drivers/net/wireless/st/cw1200/wsm.c:1457:9: error: ‘ret’ may be used uninitialized in this function [-Werror=maybe-uninitialized]

We have already checked that 'count' is larger than 0 here, so
we know that 'ret' is initialized. Changing the 'for' loop
into do/while also makes this clear to the compiler.

Suggested-by: David Laight <David.Laight@ACULAB.COM>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/wireless/cw1200/wsm.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/cw1200/wsm.c b/drivers/net/wireless/cw1200/wsm.c
index 9e0ca3048657..3dd46c78c1cc 100644
--- a/drivers/net/wireless/cw1200/wsm.c
+++ b/drivers/net/wireless/cw1200/wsm.c
@@ -379,7 +379,6 @@ static int wsm_multi_tx_confirm(struct cw1200_common *priv,
 {
 	int ret;
 	int count;
-	int i;
 
 	count = WSM_GET32(buf);
 	if (WARN_ON(count <= 0))
@@ -395,11 +394,10 @@ static int wsm_multi_tx_confirm(struct cw1200_common *priv,
 	}
 
 	cw1200_debug_txed_multi(priv, count);
-	for (i = 0; i < count; ++i) {
+	do {
 		ret = wsm_tx_confirm(priv, buf, link_id);
-		if (ret)
-			return ret;
-	}
+	} while (!ret && --count);
+
 	return ret;
 
 underflow:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] [media] v4l: remove MEDIA_TUNER dependency for VIDEO_TUNER
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (479 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] drm/gma500: Sanity-check pipe index Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] cw1200: fix bogus maybe-uninitialized warning Sasha Levin
                   ` (35 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Mauro Carvalho Chehab, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7c8fe516bd81d991feb73ccd969ec29850af3013 ]

em28xx selects VIDEO_TUNER, which has a dependency on MEDIA_TUNER,
so we get a Kconfig warning if that is disabled:

warning: (VIDEO_PVRUSB2 && VIDEO_USBVISION && VIDEO_GO7007 && VIDEO_AU0828_V4L2 && VIDEO_CX231XX && VIDEO_TM6000 && VIDEO_EM28XX && VIDEO_IVTV && VIDEO_MXB && VIDEO_CX18 && VIDEO_CX23885 && VIDEO_CX88 && VIDEO_BT848 && VIDEO_SAA7134 && VIDEO_SAA7164) selects VIDEO_TUNER which has unmet direct dependencies (MEDIA_SUPPORT && MEDIA_TUNER)

VIDEO_TUNER does not actually depend on MEDIA_TUNER, and the
dependency does nothing except cause the above warning, so let's
remove it.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/media/v4l2-core/Kconfig | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/media/v4l2-core/Kconfig b/drivers/media/v4l2-core/Kconfig
index ba7e21a73023..b0372b1908f1 100644
--- a/drivers/media/v4l2-core/Kconfig
+++ b/drivers/media/v4l2-core/Kconfig
@@ -37,7 +37,6 @@ config VIDEO_PCI_SKELETON
 # Used by drivers that need tuner.ko
 config VIDEO_TUNER
 	tristate
-	depends on MEDIA_TUNER
 
 # Used by drivers that need v4l2-mem2mem.ko
 config V4L2_MEM2MEM_DEV
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] perf/x86: Shut up false-positive -Wmaybe-uninitialized warning
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (481 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] cw1200: fix bogus maybe-uninitialized warning Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] net: hp100: remove unnecessary #ifdefs Sasha Levin
                   ` (33 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Ingo Molnar, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 11d8b05855f3749bcb6c57e2c4052921b9605c77 ]

The intialization function checks for various failure scenarios, but
unfortunately the compiler gets a little confused about the possible
combinations, leading to a false-positive build warning when
-Wmaybe-uninitialized is set:

  arch/x86/events/core.c: In function ‘init_hw_perf_events’:
  arch/x86/events/core.c:264:3: warning: ‘reg_fail’ may be used uninitialized in this function [-Wmaybe-uninitialized]
  arch/x86/events/core.c:264:3: warning: ‘val_fail’ may be used uninitialized in this function [-Wmaybe-uninitialized]
     pr_err(FW_BUG "the BIOS has corrupted hw-PMU resources (MSR %x is %Lx)\n",

We can't actually run into this case, so this shuts up the warning
by initializing the variables to a known-invalid state.

Suggested-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20170719125310.2487451-2-arnd@arndb.de
Link: https://patchwork.kernel.org/patch/9392595/
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kernel/cpu/perf_event.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
index 83f33a2e662f..904b31ebc419 100644
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
@@ -187,8 +187,8 @@ static void release_pmc_hardware(void) {}
 
 static bool check_hw_exists(void)
 {
-	u64 val, val_fail, val_new= ~0;
-	int i, reg, reg_fail, ret = 0;
+	u64 val, val_fail = -1, val_new= ~0;
+	int i, reg, reg_fail = -1, ret = 0;
 	int bios_fail = 0;
 	int reg_safe = -1;
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] net: hp100: remove unnecessary #ifdefs
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (482 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] perf/x86: Shut up false-positive -Wmaybe-uninitialized warning Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] gpio: xgene: mark PM functions as __maybe_unused Sasha Levin
                   ` (32 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, David S . Miller, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 747a11279a442b913a57bf38934879babab3b58b ]

Building the hp100 ethernet driver causes warnings when both the PCI
and EISA drivers are disabled:

ethernet/hp/hp100.c: In function 'hp100_module_init':
ethernet/hp/hp100.c:3047:2: warning: label 'out3' defined but not used [-Wunused-label]
ethernet/hp/hp100.c: At top level:
ethernet/hp/hp100.c:2828:13: warning: 'cleanup_dev' defined but not used [-Wunused-function]

We can easily avoid the warnings and make the driver look slightly
nicer by removing the #ifdefs that check for the CONFIG_PCI and
CONFIG_EISA, as all the registration functions are designed to
have no effect when the buses are disabled.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/hp/hp100.c | 18 ------------------
 1 file changed, 18 deletions(-)

diff --git a/drivers/net/ethernet/hp/hp100.c b/drivers/net/ethernet/hp/hp100.c
index 1d5c3e16d8f4..3daf2d4a7ca0 100644
--- a/drivers/net/ethernet/hp/hp100.c
+++ b/drivers/net/ethernet/hp/hp100.c
@@ -194,7 +194,6 @@ static const char *hp100_isa_tbl[] = {
 };
 #endif
 
-#ifdef CONFIG_EISA
 static struct eisa_device_id hp100_eisa_tbl[] = {
 	{ "HWPF180" }, /* HP J2577 rev A */
 	{ "HWP1920" }, /* HP 27248B */
@@ -205,9 +204,7 @@ static struct eisa_device_id hp100_eisa_tbl[] = {
 	{ "" }	       /* Mandatory final entry ! */
 };
 MODULE_DEVICE_TABLE(eisa, hp100_eisa_tbl);
-#endif
 
-#ifdef CONFIG_PCI
 static const struct pci_device_id hp100_pci_tbl[] = {
 	{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_J2585A, PCI_ANY_ID, PCI_ANY_ID,},
 	{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_J2585B, PCI_ANY_ID, PCI_ANY_ID,},
@@ -219,7 +216,6 @@ static const struct pci_device_id hp100_pci_tbl[] = {
 	{}			/* Terminating entry */
 };
 MODULE_DEVICE_TABLE(pci, hp100_pci_tbl);
-#endif
 
 static int hp100_rx_ratio = HP100_DEFAULT_RX_RATIO;
 static int hp100_priority_tx = HP100_DEFAULT_PRIORITY_TX;
@@ -2842,7 +2838,6 @@ static void cleanup_dev(struct net_device *d)
 	free_netdev(d);
 }
 
-#ifdef CONFIG_EISA
 static int hp100_eisa_probe(struct device *gendev)
 {
 	struct net_device *dev = alloc_etherdev(sizeof(struct hp100_private));
@@ -2884,9 +2879,7 @@ static struct eisa_driver hp100_eisa_driver = {
 		.remove  = hp100_eisa_remove,
         }
 };
-#endif
 
-#ifdef CONFIG_PCI
 static int hp100_pci_probe(struct pci_dev *pdev,
 			   const struct pci_device_id *ent)
 {
@@ -2955,7 +2948,6 @@ static struct pci_driver hp100_pci_driver = {
 	.probe		= hp100_pci_probe,
 	.remove		= hp100_pci_remove,
 };
-#endif
 
 /*
  *  module section
@@ -3032,23 +3024,17 @@ static int __init hp100_module_init(void)
 	err = hp100_isa_init();
 	if (err && err != -ENODEV)
 		goto out;
-#ifdef CONFIG_EISA
 	err = eisa_driver_register(&hp100_eisa_driver);
 	if (err && err != -ENODEV)
 		goto out2;
-#endif
-#ifdef CONFIG_PCI
 	err = pci_register_driver(&hp100_pci_driver);
 	if (err && err != -ENODEV)
 		goto out3;
-#endif
  out:
 	return err;
  out3:
-#ifdef CONFIG_EISA
 	eisa_driver_unregister (&hp100_eisa_driver);
  out2:
-#endif
 	hp100_isa_cleanup();
 	goto out;
 }
@@ -3057,12 +3043,8 @@ static int __init hp100_module_init(void)
 static void __exit hp100_module_exit(void)
 {
 	hp100_isa_cleanup();
-#ifdef CONFIG_EISA
 	eisa_driver_unregister (&hp100_eisa_driver);
-#endif
-#ifdef CONFIG_PCI
 	pci_unregister_driver (&hp100_pci_driver);
-#endif
 }
 
 module_init(hp100_module_init)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] gpio: xgene: mark PM functions as __maybe_unused
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (483 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] net: hp100: remove unnecessary #ifdefs Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] ncpfs: fix unused variable warning Sasha Levin
                   ` (31 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Linus Walleij, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b115bebc07f282067eccc06fd5aa3060ab1426da ]

When CONFIG_PM_SLEEP is disabled, we get a warning about unused functions:

drivers/gpio/gpio-xgene.c:155:12: warning: 'xgene_gpio_resume' defined but not used [-Wunused-function]
 static int xgene_gpio_resume(struct device *dev)
            ^~~~~~~~~~~~~~~~~
drivers/gpio/gpio-xgene.c:142:12: warning: 'xgene_gpio_suspend' defined but not used [-Wunused-function]
 static int xgene_gpio_suspend(struct device *dev)

The warnings are harmless and can be avoided by simplifying the code and marking
the functions as __maybe_unused.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/gpio/gpio-xgene.c | 13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/drivers/gpio/gpio-xgene.c b/drivers/gpio/gpio-xgene.c
index 18a8182d4fec..7f1f32324504 100644
--- a/drivers/gpio/gpio-xgene.c
+++ b/drivers/gpio/gpio-xgene.c
@@ -42,9 +42,7 @@ struct xgene_gpio {
 	struct gpio_chip	chip;
 	void __iomem		*base;
 	spinlock_t		lock;
-#ifdef CONFIG_PM
 	u32			set_dr_val[XGENE_MAX_GPIO_BANKS];
-#endif
 };
 
 static inline struct xgene_gpio *to_xgene_gpio(struct gpio_chip *chip)
@@ -132,8 +130,7 @@ static int xgene_gpio_dir_out(struct gpio_chip *gc,
 	return 0;
 }
 
-#ifdef CONFIG_PM
-static int xgene_gpio_suspend(struct device *dev)
+static __maybe_unused int xgene_gpio_suspend(struct device *dev)
 {
 	struct xgene_gpio *gpio = dev_get_drvdata(dev);
 	unsigned long bank_offset;
@@ -146,7 +143,7 @@ static int xgene_gpio_suspend(struct device *dev)
 	return 0;
 }
 
-static int xgene_gpio_resume(struct device *dev)
+static __maybe_unused int xgene_gpio_resume(struct device *dev)
 {
 	struct xgene_gpio *gpio = dev_get_drvdata(dev);
 	unsigned long bank_offset;
@@ -160,10 +157,6 @@ static int xgene_gpio_resume(struct device *dev)
 }
 
 static SIMPLE_DEV_PM_OPS(xgene_gpio_pm, xgene_gpio_suspend, xgene_gpio_resume);
-#define XGENE_GPIO_PM_OPS	(&xgene_gpio_pm)
-#else
-#define XGENE_GPIO_PM_OPS	NULL
-#endif
 
 static int xgene_gpio_probe(struct platform_device *pdev)
 {
@@ -230,7 +223,7 @@ static struct platform_driver xgene_gpio_driver = {
 	.driver = {
 		.name = "xgene-gpio",
 		.of_match_table = xgene_gpio_of_match,
-		.pm     = XGENE_GPIO_PM_OPS,
+		.pm     = &xgene_gpio_pm,
 	},
 	.probe = xgene_gpio_probe,
 	.remove = xgene_gpio_remove,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netlink: fix nla_put_{u8,u16,u32} for KASAN
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (485 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] ncpfs: fix unused variable warning Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] drm/gma500: remove helper function Sasha Levin
                   ` (29 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, David S . Miller, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b4391db42308c9940944b5d7be5ca4b78fb88dd0 ]

When CONFIG_KASAN is enabled, the "--param asan-stack=1" causes rather large
stack frames in some functions. This goes unnoticed normally because
CONFIG_FRAME_WARN is disabled with CONFIG_KASAN by default as of commit
3f181b4d8652 ("lib/Kconfig.debug: disable -Wframe-larger-than warnings with
KASAN=y").

The kernelci.org build bot however has the warning enabled and that led
me to investigate it a little further, as every build produces these warnings:

net/wireless/nl80211.c:4389:1: warning: the frame size of 2240 bytes is larger than 2048 bytes [-Wframe-larger-than=]
net/wireless/nl80211.c:1895:1: warning: the frame size of 3776 bytes is larger than 2048 bytes [-Wframe-larger-than=]
net/wireless/nl80211.c:1410:1: warning: the frame size of 2208 bytes is larger than 2048 bytes [-Wframe-larger-than=]
net/bridge/br_netlink.c:1282:1: warning: the frame size of 2544 bytes is larger than 2048 bytes [-Wframe-larger-than=]

Most of this problem is now solved in gcc-8, which can consolidate
the stack slots for the inline function arguments. On older compilers
we can add a workaround by declaring a local variable in each function
to pass the inline function argument.

Cc: stable@vger.kernel.org
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81715
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/net/netlink.h | 73 ++++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 55 insertions(+), 18 deletions(-)

diff --git a/include/net/netlink.h b/include/net/netlink.h
index 2a5dbcc90d1c..9bb53469b704 100644
--- a/include/net/netlink.h
+++ b/include/net/netlink.h
@@ -745,7 +745,10 @@ static inline int nla_parse_nested(struct nlattr *tb[], int maxtype,
  */
 static inline int nla_put_u8(struct sk_buff *skb, int attrtype, u8 value)
 {
-	return nla_put(skb, attrtype, sizeof(u8), &value);
+	/* temporary variables to work around GCC PR81715 with asan-stack=1 */
+	u8 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(u8), &tmp);
 }
 
 /**
@@ -756,7 +759,9 @@ static inline int nla_put_u8(struct sk_buff *skb, int attrtype, u8 value)
  */
 static inline int nla_put_u16(struct sk_buff *skb, int attrtype, u16 value)
 {
-	return nla_put(skb, attrtype, sizeof(u16), &value);
+	u16 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(u16), &tmp);
 }
 
 /**
@@ -767,7 +772,9 @@ static inline int nla_put_u16(struct sk_buff *skb, int attrtype, u16 value)
  */
 static inline int nla_put_be16(struct sk_buff *skb, int attrtype, __be16 value)
 {
-	return nla_put(skb, attrtype, sizeof(__be16), &value);
+	__be16 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(__be16), &tmp);
 }
 
 /**
@@ -778,7 +785,9 @@ static inline int nla_put_be16(struct sk_buff *skb, int attrtype, __be16 value)
  */
 static inline int nla_put_net16(struct sk_buff *skb, int attrtype, __be16 value)
 {
-	return nla_put_be16(skb, attrtype | NLA_F_NET_BYTEORDER, value);
+	__be16 tmp = value;
+
+	return nla_put_be16(skb, attrtype | NLA_F_NET_BYTEORDER, tmp);
 }
 
 /**
@@ -789,7 +798,9 @@ static inline int nla_put_net16(struct sk_buff *skb, int attrtype, __be16 value)
  */
 static inline int nla_put_le16(struct sk_buff *skb, int attrtype, __le16 value)
 {
-	return nla_put(skb, attrtype, sizeof(__le16), &value);
+	__le16 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(__le16), &tmp);
 }
 
 /**
@@ -800,7 +811,9 @@ static inline int nla_put_le16(struct sk_buff *skb, int attrtype, __le16 value)
  */
 static inline int nla_put_u32(struct sk_buff *skb, int attrtype, u32 value)
 {
-	return nla_put(skb, attrtype, sizeof(u32), &value);
+	u32 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(u32), &tmp);
 }
 
 /**
@@ -811,7 +824,9 @@ static inline int nla_put_u32(struct sk_buff *skb, int attrtype, u32 value)
  */
 static inline int nla_put_be32(struct sk_buff *skb, int attrtype, __be32 value)
 {
-	return nla_put(skb, attrtype, sizeof(__be32), &value);
+	__be32 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(__be32), &tmp);
 }
 
 /**
@@ -822,7 +837,9 @@ static inline int nla_put_be32(struct sk_buff *skb, int attrtype, __be32 value)
  */
 static inline int nla_put_net32(struct sk_buff *skb, int attrtype, __be32 value)
 {
-	return nla_put_be32(skb, attrtype | NLA_F_NET_BYTEORDER, value);
+	__be32 tmp = value;
+
+	return nla_put_be32(skb, attrtype | NLA_F_NET_BYTEORDER, tmp);
 }
 
 /**
@@ -833,7 +850,9 @@ static inline int nla_put_net32(struct sk_buff *skb, int attrtype, __be32 value)
  */
 static inline int nla_put_le32(struct sk_buff *skb, int attrtype, __le32 value)
 {
-	return nla_put(skb, attrtype, sizeof(__le32), &value);
+	__le32 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(__le32), &tmp);
 }
 
 /**
@@ -844,7 +863,9 @@ static inline int nla_put_le32(struct sk_buff *skb, int attrtype, __le32 value)
  */
 static inline int nla_put_u64(struct sk_buff *skb, int attrtype, u64 value)
 {
-	return nla_put(skb, attrtype, sizeof(u64), &value);
+	u64 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(u64), &tmp);
 }
 
 /**
@@ -855,7 +876,9 @@ static inline int nla_put_u64(struct sk_buff *skb, int attrtype, u64 value)
  */
 static inline int nla_put_be64(struct sk_buff *skb, int attrtype, __be64 value)
 {
-	return nla_put(skb, attrtype, sizeof(__be64), &value);
+	__be64 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(__be64), &tmp);
 }
 
 /**
@@ -866,7 +889,9 @@ static inline int nla_put_be64(struct sk_buff *skb, int attrtype, __be64 value)
  */
 static inline int nla_put_net64(struct sk_buff *skb, int attrtype, __be64 value)
 {
-	return nla_put_be64(skb, attrtype | NLA_F_NET_BYTEORDER, value);
+	__be64 tmp = value;
+
+	return nla_put_be64(skb, attrtype | NLA_F_NET_BYTEORDER, tmp);
 }
 
 /**
@@ -877,7 +902,9 @@ static inline int nla_put_net64(struct sk_buff *skb, int attrtype, __be64 value)
  */
 static inline int nla_put_le64(struct sk_buff *skb, int attrtype, __le64 value)
 {
-	return nla_put(skb, attrtype, sizeof(__le64), &value);
+	__le64 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(__le64), &tmp);
 }
 
 /**
@@ -888,7 +915,9 @@ static inline int nla_put_le64(struct sk_buff *skb, int attrtype, __le64 value)
  */
 static inline int nla_put_s8(struct sk_buff *skb, int attrtype, s8 value)
 {
-	return nla_put(skb, attrtype, sizeof(s8), &value);
+	s8 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(s8), &tmp);
 }
 
 /**
@@ -899,7 +928,9 @@ static inline int nla_put_s8(struct sk_buff *skb, int attrtype, s8 value)
  */
 static inline int nla_put_s16(struct sk_buff *skb, int attrtype, s16 value)
 {
-	return nla_put(skb, attrtype, sizeof(s16), &value);
+	s16 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(s16), &tmp);
 }
 
 /**
@@ -910,7 +941,9 @@ static inline int nla_put_s16(struct sk_buff *skb, int attrtype, s16 value)
  */
 static inline int nla_put_s32(struct sk_buff *skb, int attrtype, s32 value)
 {
-	return nla_put(skb, attrtype, sizeof(s32), &value);
+	s32 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(s32), &tmp);
 }
 
 /**
@@ -921,7 +954,9 @@ static inline int nla_put_s32(struct sk_buff *skb, int attrtype, s32 value)
  */
 static inline int nla_put_s64(struct sk_buff *skb, int attrtype, s64 value)
 {
-	return nla_put(skb, attrtype, sizeof(s64), &value);
+	s64 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(s64), &tmp);
 }
 
 /**
@@ -969,7 +1004,9 @@ static inline int nla_put_msecs(struct sk_buff *skb, int attrtype,
 static inline int nla_put_in_addr(struct sk_buff *skb, int attrtype,
 				  __be32 addr)
 {
-	return nla_put_be32(skb, attrtype, addr);
+	__be32 tmp = addr;
+
+	return nla_put_be32(skb, attrtype, tmp);
 }
 
 /**
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] ncpfs: fix unused variable warning
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (484 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] gpio: xgene: mark PM functions as __maybe_unused Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] netlink: fix nla_put_{u8,u16,u32} for KASAN Sasha Levin
                   ` (30 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Miklos Szeredi, Sasha Levin

From: Miklos Szeredi <mszeredi@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9a232de4999666b2e8ea6775b2b0e3e4feb09b7a ]

Without CONFIG_NCPFS_NLS the following warning is seen:

fs/ncpfs/dir.c: In function 'ncp_hash_dentry':
fs/ncpfs/dir.c:136:23: warning: unused variable 'sb' [-Wunused-variable]
   struct super_block *sb = dentry->d_sb;

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/ncpfs/dir.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/fs/ncpfs/dir.c b/fs/ncpfs/dir.c
index 0c2632386f35..d2c969d1d9d2 100644
--- a/fs/ncpfs/dir.c
+++ b/fs/ncpfs/dir.c
@@ -133,12 +133,11 @@ ncp_hash_dentry(const struct dentry *dentry, struct qstr *this)
 		return 0;
 
 	if (!ncp_case_sensitive(inode)) {
-		struct super_block *sb = dentry->d_sb;
 		struct nls_table *t;
 		unsigned long hash;
 		int i;
 
-		t = NCP_IO_TABLE(sb);
+		t = NCP_IO_TABLE(dentry->d_sb);
 		hash = init_name_hash();
 		for (i=0; i<this->len ; i++)
 			hash = partial_name_hash(ncp_tolower(t, this->name[i]),
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] dell-wmi, dell-laptop: depends DMI
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (487 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] drm/gma500: remove helper function Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously Sasha Levin
                   ` (27 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Andy Lutomirski, Arnd Bergmann, Darren Hart, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a570af4850043260b87fb1b8aa27a4484e648878 ]

dell-wmi and dell-laptop will compile but won't work right if DMI
isn't selected.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Acked-by: Pali Rohár <pali.rohar@gmail.com>

[arnd: Use depends instead of selects to avoid recursive dependencies]

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/platform/x86/Kconfig | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index f9f205cb1f11..8becddcf130b 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -94,6 +94,7 @@ config DELL_LAPTOP
 	tristate "Dell Laptop Extras"
 	depends on X86
 	depends on DCDBAS
+	depends on DMI
 	depends on BACKLIGHT_CLASS_DEVICE
 	depends on RFKILL || RFKILL = n
 	depends on SERIO_I8042
@@ -108,6 +109,7 @@ config DELL_LAPTOP
 config DELL_WMI
 	tristate "Dell WMI extras"
 	depends on ACPI_WMI
+	depends on DMI
 	depends on INPUT
 	select INPUT_SPARSEKMAP
 	---help---
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] drm/gma500: remove helper function
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (486 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] netlink: fix nla_put_{u8,u16,u32} for KASAN Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] dell-wmi, dell-laptop: depends DMI Sasha Levin
                   ` (28 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Sudip Mukherjee, Sudip Mukherjee, Daniel Vetter, Sasha Levin

From: Sudip Mukherjee <sudipm.mukherjee@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit db9b60400f9253c25ae639797df2d0ff7a35d9d8 ]

We were getting build warning about:
drivers/gpu/drm/gma500/mdfld_dsi_output.c:407:2: warning: initialization
	from incompatible pointer type

The callback to dpms was pointing to a helper function which had a
return type of void, whereas the callback should point to a function
which has a return type of int.
On closer look it turned out that we do not need the helper function
since if we call drm_helper_connector_dpms() directly, the first check
that drm_helper_connector_dpms() does is: if (mode == connector->dpms)

Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
Link: http://patchwork.freedesktop.org/patch/msgid/1454393155-13142-1-git-send-email-sudipm.mukherjee@gmail.com
Acked-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/gpu/drm/gma500/mdfld_dsi_output.c | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_output.c b/drivers/gpu/drm/gma500/mdfld_dsi_output.c
index 89f705c3a5eb..910a2f253990 100644
--- a/drivers/gpu/drm/gma500/mdfld_dsi_output.c
+++ b/drivers/gpu/drm/gma500/mdfld_dsi_output.c
@@ -382,16 +382,6 @@ static int mdfld_dsi_connector_mode_valid(struct drm_connector *connector,
 	return MODE_OK;
 }
 
-static void mdfld_dsi_connector_dpms(struct drm_connector *connector, int mode)
-{
-	if (mode == connector->dpms)
-		return;
-
-	/*first, execute dpms*/
-
-	drm_helper_connector_dpms(connector, mode);
-}
-
 static struct drm_encoder *mdfld_dsi_connector_best_encoder(
 				struct drm_connector *connector)
 {
@@ -404,7 +394,7 @@ static struct drm_encoder *mdfld_dsi_connector_best_encoder(
 
 /*DSI connector funcs*/
 static const struct drm_connector_funcs mdfld_dsi_connector_funcs = {
-	.dpms = /*drm_helper_connector_dpms*/mdfld_dsi_connector_dpms,
+	.dpms = drm_helper_connector_dpms,
 	.save = mdfld_dsi_connector_save,
 	.restore = mdfld_dsi_connector_restore,
 	.detect = mdfld_dsi_connector_detect,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (488 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] dell-wmi, dell-laptop: depends DMI Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] array_index_nospec: Sanitize speculative array de-references Sasha Levin
                   ` (26 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Wanpeng Li, Radim Krčmář, Sasha Levin

From: Wanpeng Li <wanpeng.li@hotmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9a6e7c39810e4a8bc7fc95056cefb40583fe07ef ]

qemu-system-x86-8600  [004] d..1  7205.687530: kvm_entry: vcpu 2
qemu-system-x86-8600  [004] ....  7205.687532: kvm_exit: reason EXCEPTION_NMI rip 0xffffffffa921297d info ffffeb2c0e44e018 80000b0e
qemu-system-x86-8600  [004] ....  7205.687532: kvm_page_fault: address ffffeb2c0e44e018 error_code 0
qemu-system-x86-8600  [004] ....  7205.687620: kvm_try_async_get_page: gva = 0xffffeb2c0e44e018, gfn = 0x427e4e
qemu-system-x86-8600  [004] .N..  7205.687628: kvm_async_pf_not_present: token 0x8b002 gva 0xffffeb2c0e44e018
    kworker/4:2-7814  [004] ....  7205.687655: kvm_async_pf_completed: gva 0xffffeb2c0e44e018 address 0x7fcc30c4e000
qemu-system-x86-8600  [004] ....  7205.687703: kvm_async_pf_ready: token 0x8b002 gva 0xffffeb2c0e44e018
qemu-system-x86-8600  [004] d..1  7205.687711: kvm_entry: vcpu 2

After running some memory intensive workload in guest, I catch the kworker
which completes the GUP too quickly, and queues an "Page Ready" #PF exception
after the "Page not Present" exception before the next vmentry as the above
trace which will result in #DF injected to guest.

This patch fixes it by clearing the queue for "Page not Present" if "Page Ready"
occurs before the next vmentry since the GUP has already got the required page
and shadow page table has already been fixed by "Page Ready" handler.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
Fixes: 7c90705bf2a3 ("KVM: Inject asynchronous page fault into a PV guest if page is swapped out.")
[Changed indentation and added clearing of injected. - Radim]
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kvm/x86.c | 34 ++++++++++++++++++++++++++--------
 1 file changed, 26 insertions(+), 8 deletions(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 261b05711246..e05cb66b575b 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -7927,6 +7927,13 @@ static int apf_put_user(struct kvm_vcpu *vcpu, u32 val)
 				      sizeof(val));
 }
 
+static int apf_get_user(struct kvm_vcpu *vcpu, u32 *val)
+{
+
+	return kvm_read_guest_cached(vcpu->kvm, &vcpu->arch.apf.data, val,
+				      sizeof(u32));
+}
+
 void kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu,
 				     struct kvm_async_pf *work)
 {
@@ -7953,6 +7960,7 @@ void kvm_arch_async_page_present(struct kvm_vcpu *vcpu,
 				 struct kvm_async_pf *work)
 {
 	struct x86_exception fault;
+	u32 val;
 
 	if (work->wakeup_all)
 		work->arch.token = ~0; /* broadcast wakeup */
@@ -7960,14 +7968,24 @@ void kvm_arch_async_page_present(struct kvm_vcpu *vcpu,
 		kvm_del_async_pf_gfn(vcpu, work->arch.gfn);
 	trace_kvm_async_pf_ready(work->arch.token, work->gva);
 
-	if ((vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED) &&
-	    !apf_put_user(vcpu, KVM_PV_REASON_PAGE_READY)) {
-		fault.vector = PF_VECTOR;
-		fault.error_code_valid = true;
-		fault.error_code = 0;
-		fault.nested_page_fault = false;
-		fault.address = work->arch.token;
-		kvm_inject_page_fault(vcpu, &fault);
+	if (vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED &&
+	    !apf_get_user(vcpu, &val)) {
+		if (val == KVM_PV_REASON_PAGE_NOT_PRESENT &&
+		    vcpu->arch.exception.pending &&
+		    vcpu->arch.exception.nr == PF_VECTOR &&
+		    !apf_put_user(vcpu, 0)) {
+			vcpu->arch.exception.pending = false;
+			vcpu->arch.exception.nr = 0;
+			vcpu->arch.exception.has_error_code = false;
+			vcpu->arch.exception.error_code = 0;
+		} else if (!apf_put_user(vcpu, KVM_PV_REASON_PAGE_READY)) {
+			fault.vector = PF_VECTOR;
+			fault.error_code_valid = true;
+			fault.error_code = 0;
+			fault.nested_page_fault = false;
+			fault.address = work->arch.token;
+			kvm_inject_page_fault(vcpu, &fault);
+		}
 	}
 	vcpu->arch.apf.halted = false;
 	vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Documentation: Document array_index_nospec
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (490 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] array_index_nospec: Sanitize speculative array de-references Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86: Implement array_index_mask_nospec Sasha Levin
                   ` (24 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Mark Rutland, Will Deacon, Dan Williams, Thomas Gleixner, Sasha Levin

From: Mark Rutland <mark.rutland@arm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f84a56f73dddaeac1dba8045b007f742f61cd2da ]

Document the rationale and usage of the new array_index_nospec() helper.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Kees Cook <keescook@chromium.org>
Cc: linux-arch@vger.kernel.org
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: gregkh@linuxfoundation.org
Cc: kernel-hardening@lists.openwall.com
Cc: torvalds@linux-foundation.org
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727413645.33451.15878817161436755393.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 Documentation/speculation.txt | 90 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 90 insertions(+)
 create mode 100644 Documentation/speculation.txt

diff --git a/Documentation/speculation.txt b/Documentation/speculation.txt
new file mode 100644
index 000000000000..e9e6cbae2841
--- /dev/null
+++ b/Documentation/speculation.txt
@@ -0,0 +1,90 @@
+This document explains potential effects of speculation, and how undesirable
+effects can be mitigated portably using common APIs.
+
+===========
+Speculation
+===========
+
+To improve performance and minimize average latencies, many contemporary CPUs
+employ speculative execution techniques such as branch prediction, performing
+work which may be discarded at a later stage.
+
+Typically speculative execution cannot be observed from architectural state,
+such as the contents of registers. However, in some cases it is possible to
+observe its impact on microarchitectural state, such as the presence or
+absence of data in caches. Such state may form side-channels which can be
+observed to extract secret information.
+
+For example, in the presence of branch prediction, it is possible for bounds
+checks to be ignored by code which is speculatively executed. Consider the
+following code:
+
+	int load_array(int *array, unsigned int index)
+	{
+		if (index >= MAX_ARRAY_ELEMS)
+			return 0;
+		else
+			return array[index];
+	}
+
+Which, on arm64, may be compiled to an assembly sequence such as:
+
+	CMP	<index>, #MAX_ARRAY_ELEMS
+	B.LT	less
+	MOV	<returnval>, #0
+	RET
+  less:
+	LDR	<returnval>, [<array>, <index>]
+	RET
+
+It is possible that a CPU mis-predicts the conditional branch, and
+speculatively loads array[index], even if index >= MAX_ARRAY_ELEMS. This
+value will subsequently be discarded, but the speculated load may affect
+microarchitectural state which can be subsequently measured.
+
+More complex sequences involving multiple dependent memory accesses may
+result in sensitive information being leaked. Consider the following
+code, building on the prior example:
+
+	int load_dependent_arrays(int *arr1, int *arr2, int index)
+	{
+		int val1, val2,
+
+		val1 = load_array(arr1, index);
+		val2 = load_array(arr2, val1);
+
+		return val2;
+	}
+
+Under speculation, the first call to load_array() may return the value
+of an out-of-bounds address, while the second call will influence
+microarchitectural state dependent on this value. This may provide an
+arbitrary read primitive.
+
+====================================
+Mitigating speculation side-channels
+====================================
+
+The kernel provides a generic API to ensure that bounds checks are
+respected even under speculation. Architectures which are affected by
+speculation-based side-channels are expected to implement these
+primitives.
+
+The array_index_nospec() helper in <linux/nospec.h> can be used to
+prevent information from being leaked via side-channels.
+
+A call to array_index_nospec(index, size) returns a sanitized index
+value that is bounded to [0, size) even under cpu speculation
+conditions.
+
+This can be used to protect the earlier load_array() example:
+
+	int load_array(int *array, unsigned int index)
+	{
+		if (index >= MAX_ARRAY_ELEMS)
+			return 0;
+		else {
+			index = array_index_nospec(index, MAX_ARRAY_ELEMS);
+			return array[index];
+		}
+	}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] array_index_nospec: Sanitize speculative array de-references
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (489 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] Documentation: Document array_index_nospec Sasha Levin
                   ` (25 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Dan Williams, Thomas Gleixner, Sasha Levin

From: Dan Williams <dan.j.williams@intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f3804203306e098dae9ca51540fcd5eb700d7f40 ]

array_index_nospec() is proposed as a generic mechanism to mitigate
against Spectre-variant-1 attacks, i.e. an attack that bypasses boundary
checks via speculative execution. The array_index_nospec()
implementation is expected to be safe for current generation CPUs across
multiple architectures (ARM, x86).

Based on an original implementation by Linus Torvalds, tweaked to remove
speculative flows by Alexei Starovoitov, and tweaked again by Linus to
introduce an x86 assembly implementation for the mask generation.

Co-developed-by: Linus Torvalds <torvalds@linux-foundation.org>
Co-developed-by: Alexei Starovoitov <ast@kernel.org>
Suggested-by: Cyril Novikov <cnovikov@lynx.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: kernel-hardening@lists.openwall.com
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: gregkh@linuxfoundation.org
Cc: torvalds@linux-foundation.org
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727414229.33451.18411580953862676575.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/linux/nospec.h | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)
 create mode 100644 include/linux/nospec.h

diff --git a/include/linux/nospec.h b/include/linux/nospec.h
new file mode 100644
index 000000000000..b99bced39ac2
--- /dev/null
+++ b/include/linux/nospec.h
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright(c) 2018 Linus Torvalds. All rights reserved.
+// Copyright(c) 2018 Alexei Starovoitov. All rights reserved.
+// Copyright(c) 2018 Intel Corporation. All rights reserved.
+
+#ifndef _LINUX_NOSPEC_H
+#define _LINUX_NOSPEC_H
+
+/**
+ * array_index_mask_nospec() - generate a ~0 mask when index < size, 0 otherwise
+ * @index: array element index
+ * @size: number of elements in array
+ *
+ * When @index is out of bounds (@index >= @size), the sign bit will be
+ * set.  Extend the sign bit to all bits and invert, giving a result of
+ * zero for an out of bounds index, or ~0 if within bounds [0, @size).
+ */
+#ifndef array_index_mask_nospec
+static inline unsigned long array_index_mask_nospec(unsigned long index,
+						    unsigned long size)
+{
+	/*
+	 * Warn developers about inappropriate array_index_nospec() usage.
+	 *
+	 * Even if the CPU speculates past the WARN_ONCE branch, the
+	 * sign bit of @index is taken into account when generating the
+	 * mask.
+	 *
+	 * This warning is compiled out when the compiler can infer that
+	 * @index and @size are less than LONG_MAX.
+	 */
+	if (WARN_ONCE(index > LONG_MAX || size > LONG_MAX,
+			"array_index_nospec() limited to range of [0, LONG_MAX]\n"))
+		return 0;
+
+	/*
+	 * Always calculate and emit the mask even if the compiler
+	 * thinks the mask is not needed. The compiler does not take
+	 * into account the value of @index under speculation.
+	 */
+	OPTIMIZER_HIDE_VAR(index);
+	return ~(long)(index | (size - 1UL - index)) >> (BITS_PER_LONG - 1);
+}
+#endif
+
+/*
+ * array_index_nospec - sanitize an array index after a bounds check
+ *
+ * For a code sequence like:
+ *
+ *     if (index < size) {
+ *         index = array_index_nospec(index, size);
+ *         val = array[index];
+ *     }
+ *
+ * ...if the CPU speculates past the bounds check then
+ * array_index_nospec() will clamp the index within the range of [0,
+ * size).
+ */
+#define array_index_nospec(index, size)					\
+({									\
+	typeof(index) _i = (index);					\
+	typeof(size) _s = (size);					\
+	unsigned long _mask = array_index_mask_nospec(_i, _s);		\
+									\
+	BUILD_BUG_ON(sizeof(_i) > sizeof(long));			\
+	BUILD_BUG_ON(sizeof(_s) > sizeof(long));			\
+									\
+	_i &= _mask;							\
+	_i;								\
+})
+#endif /* _LINUX_NOSPEC_H */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86: Implement array_index_mask_nospec
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (491 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] Documentation: Document array_index_nospec Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/get_user: Use pointer masking to limit speculation Sasha Levin
                   ` (23 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Dan Williams, Thomas Gleixner, Sasha Levin

From: Dan Williams <dan.j.williams@intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit babdde2698d482b6c0de1eab4f697cf5856c5859 ]

array_index_nospec() uses a mask to sanitize user controllable array
indexes, i.e. generate a 0 mask if 'index' >= 'size', and a ~0 mask
otherwise. While the default array_index_mask_nospec() handles the
carry-bit from the (index - size) result in software.

The x86 array_index_mask_nospec() does the same, but the carry-bit is
handled in the processor CF flag without conditional instructions in the
control flow.

Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: kernel-hardening@lists.openwall.com
Cc: gregkh@linuxfoundation.org
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727414808.33451.1873237130672785331.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/barrier.h | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/arch/x86/include/asm/barrier.h b/arch/x86/include/asm/barrier.h
index 959e45b81fe2..0295dd893884 100644
--- a/arch/x86/include/asm/barrier.h
+++ b/arch/x86/include/asm/barrier.h
@@ -24,6 +24,30 @@
 #define wmb()	asm volatile("sfence" ::: "memory")
 #endif
 
+/**
+ * array_index_mask_nospec() - generate a mask that is ~0UL when the
+ * 	bounds check succeeds and 0 otherwise
+ * @index: array element index
+ * @size: number of elements in array
+ *
+ * Returns:
+ *     0 - (index < size)
+ */
+static inline unsigned long array_index_mask_nospec(unsigned long index,
+		unsigned long size)
+{
+	unsigned long mask;
+
+	asm ("cmp %1,%2; sbb %0,%0;"
+			:"=r" (mask)
+			:"r"(size),"r" (index)
+			:"cc");
+	return mask;
+}
+
+/* Override the default implementation from linux/nospec.h. */
+#define array_index_mask_nospec array_index_mask_nospec
+
 #ifdef CONFIG_X86_PPRO_FENCE
 #define dma_rmb()	rmb()
 #else
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] vfs, fdtable: Prevent bounds-check bypass via speculative execution
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (493 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/get_user: Use pointer masking to limit speculation Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] nl80211: Sanitize array index in parse_txq_params Sasha Levin
                   ` (21 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Dan Williams, Thomas Gleixner, Sasha Levin

From: Dan Williams <dan.j.williams@intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 56c30ba7b348b90484969054d561f711ba196507 ]

'fd' is a user controlled value that is used as a data dependency to
read from the 'fdt->fd' array.  In order to avoid potential leaks of
kernel memory values, block speculative execution of the instruction
stream that could issue reads based on an invalid 'file *' returned from
__fcheck_files.

Co-developed-by: Elena Reshetova <elena.reshetova@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: kernel-hardening@lists.openwall.com
Cc: gregkh@linuxfoundation.org
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: torvalds@linux-foundation.org
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727418500.33451.17392199002892248656.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/linux/fdtable.h | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/include/linux/fdtable.h b/include/linux/fdtable.h
index 230f87bdf5ad..2c084871e833 100644
--- a/include/linux/fdtable.h
+++ b/include/linux/fdtable.h
@@ -9,6 +9,7 @@
 #include <linux/compiler.h>
 #include <linux/spinlock.h>
 #include <linux/rcupdate.h>
+#include <linux/nospec.h>
 #include <linux/types.h>
 #include <linux/init.h>
 #include <linux/fs.h>
@@ -76,8 +77,10 @@ static inline struct file *__fcheck_files(struct files_struct *files, unsigned i
 {
 	struct fdtable *fdt = rcu_dereference_raw(files->fdt);
 
-	if (fd < fdt->max_fds)
+	if (fd < fdt->max_fds) {
+		fd = array_index_nospec(fd, fdt->max_fds);
 		return rcu_dereference_raw(fdt->fd[fd]);
+	}
 	return NULL;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/get_user: Use pointer masking to limit speculation
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (492 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86: Implement array_index_mask_nospec Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] vfs, fdtable: Prevent bounds-check bypass via speculative execution Sasha Levin
                   ` (22 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Dan Williams, Thomas Gleixner, Sasha Levin

From: Dan Williams <dan.j.williams@intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c7f631cb07e7da06ac1d231ca178452339e32a94 ]

Quoting Linus:

    I do think that it would be a good idea to very expressly document
    the fact that it's not that the user access itself is unsafe. I do
    agree that things like "get_user()" want to be protected, but not
    because of any direct bugs or problems with get_user() and friends,
    but simply because get_user() is an excellent source of a pointer
    that is obviously controlled from a potentially attacking user
    space. So it's a prime candidate for then finding _subsequent_
    accesses that can then be used to perturb the cache.

Unlike the __get_user() case get_user() includes the address limit check
near the pointer de-reference. With that locality the speculation can be
mitigated with pointer narrowing rather than a barrier, i.e.
array_index_nospec(). Where the narrowing is performed by:

	cmp %limit, %ptr
	sbb %mask, %mask
	and %mask, %ptr

With respect to speculation the value of %ptr is either less than %limit
or NULL.

Co-developed-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: Kees Cook <keescook@chromium.org>
Cc: kernel-hardening@lists.openwall.com
Cc: gregkh@linuxfoundation.org
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: torvalds@linux-foundation.org
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727417469.33451.11804043010080838495.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/lib/getuser.S | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/arch/x86/lib/getuser.S b/arch/x86/lib/getuser.S
index a4512359656a..3917307fca99 100644
--- a/arch/x86/lib/getuser.S
+++ b/arch/x86/lib/getuser.S
@@ -40,6 +40,8 @@ ENTRY(__get_user_1)
 	GET_THREAD_INFO(%_ASM_DX)
 	cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
 	jae bad_get_user
+	sbb %_ASM_DX, %_ASM_DX		/* array_index_mask_nospec() */
+	and %_ASM_DX, %_ASM_AX
 	ASM_STAC
 1:	movzbl (%_ASM_AX),%edx
 	xor %eax,%eax
@@ -55,6 +57,8 @@ ENTRY(__get_user_2)
 	GET_THREAD_INFO(%_ASM_DX)
 	cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
 	jae bad_get_user
+	sbb %_ASM_DX, %_ASM_DX		/* array_index_mask_nospec() */
+	and %_ASM_DX, %_ASM_AX
 	ASM_STAC
 2:	movzwl -1(%_ASM_AX),%edx
 	xor %eax,%eax
@@ -70,6 +74,8 @@ ENTRY(__get_user_4)
 	GET_THREAD_INFO(%_ASM_DX)
 	cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
 	jae bad_get_user
+	sbb %_ASM_DX, %_ASM_DX		/* array_index_mask_nospec() */
+	and %_ASM_DX, %_ASM_AX
 	ASM_STAC
 3:	movl -3(%_ASM_AX),%edx
 	xor %eax,%eax
@@ -86,6 +92,8 @@ ENTRY(__get_user_8)
 	GET_THREAD_INFO(%_ASM_DX)
 	cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
 	jae bad_get_user
+	sbb %_ASM_DX, %_ASM_DX		/* array_index_mask_nospec() */
+	and %_ASM_DX, %_ASM_AX
 	ASM_STAC
 4:	movq -7(%_ASM_AX),%rdx
 	xor %eax,%eax
@@ -97,6 +105,8 @@ ENTRY(__get_user_8)
 	GET_THREAD_INFO(%_ASM_DX)
 	cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
 	jae bad_get_user_8
+	sbb %_ASM_DX, %_ASM_DX		/* array_index_mask_nospec() */
+	and %_ASM_DX, %_ASM_AX
 	ASM_STAC
 4:	movl -7(%_ASM_AX),%edx
 5:	movl -3(%_ASM_AX),%ecx
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] nl80211: Sanitize array index in parse_txq_params
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (494 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] vfs, fdtable: Prevent bounds-check bypass via speculative execution Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/paravirt: Remove 'noreplace-paravirt' cmdline option Sasha Levin
                   ` (20 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Dan Williams, Thomas Gleixner, Sasha Levin

From: Dan Williams <dan.j.williams@intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 259d8c1e984318497c84eef547bbb6b1d9f4eb05 ]

Wireless drivers rely on parse_txq_params to validate that txq_params->ac
is less than NL80211_NUM_ACS by the time the low-level driver's ->conf_tx()
handler is called. Use a new helper, array_index_nospec(), to sanitize
txq_params->ac with respect to speculation. I.e. ensure that any
speculation into ->conf_tx() handlers is done with a value of
txq_params->ac that is within the bounds of [0, NL80211_NUM_ACS).

Reported-by: Christian Lamparter <chunkeey@gmail.com>
Reported-by: Elena Reshetova <elena.reshetova@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Johannes Berg <johannes@sipsolutions.net>
Cc: linux-arch@vger.kernel.org
Cc: kernel-hardening@lists.openwall.com
Cc: gregkh@linuxfoundation.org
Cc: linux-wireless@vger.kernel.org
Cc: torvalds@linux-foundation.org
Cc: "David S. Miller" <davem@davemloft.net>
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727419584.33451.7700736761686184303.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/wireless/nl80211.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index acb4ccf448ba..f96aa76865de 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -15,6 +15,7 @@
 #include <linux/nl80211.h>
 #include <linux/rtnetlink.h>
 #include <linux/netlink.h>
+#include <linux/nospec.h>
 #include <linux/etherdevice.h>
 #include <net/net_namespace.h>
 #include <net/genetlink.h>
@@ -1874,20 +1875,22 @@ static const struct nla_policy txq_params_policy[NL80211_TXQ_ATTR_MAX + 1] = {
 static int parse_txq_params(struct nlattr *tb[],
 			    struct ieee80211_txq_params *txq_params)
 {
+	u8 ac;
+
 	if (!tb[NL80211_TXQ_ATTR_AC] || !tb[NL80211_TXQ_ATTR_TXOP] ||
 	    !tb[NL80211_TXQ_ATTR_CWMIN] || !tb[NL80211_TXQ_ATTR_CWMAX] ||
 	    !tb[NL80211_TXQ_ATTR_AIFS])
 		return -EINVAL;
 
-	txq_params->ac = nla_get_u8(tb[NL80211_TXQ_ATTR_AC]);
+	ac = nla_get_u8(tb[NL80211_TXQ_ATTR_AC]);
 	txq_params->txop = nla_get_u16(tb[NL80211_TXQ_ATTR_TXOP]);
 	txq_params->cwmin = nla_get_u16(tb[NL80211_TXQ_ATTR_CWMIN]);
 	txq_params->cwmax = nla_get_u16(tb[NL80211_TXQ_ATTR_CWMAX]);
 	txq_params->aifs = nla_get_u8(tb[NL80211_TXQ_ATTR_AIFS]);
 
-	if (txq_params->ac >= NL80211_NUM_ACS)
+	if (ac >= NL80211_NUM_ACS)
 		return -EINVAL;
-
+	txq_params->ac = array_index_nospec(ac, NL80211_NUM_ACS);
 	return 0;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/paravirt: Remove 'noreplace-paravirt' cmdline option
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (495 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] nl80211: Sanitize array index in parse_txq_params Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/kvm: Update spectre-v1 mitigation Sasha Levin
                   ` (19 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Josh Poimboeuf, Thomas Gleixner, Sasha Levin

From: Josh Poimboeuf <jpoimboe@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 12c69f1e94c89d40696e83804dd2f0965b5250cd ]

The 'noreplace-paravirt' option disables paravirt patching, leaving the
original pv indirect calls in place.

That's highly incompatible with retpolines, unless we want to uglify
paravirt even further and convert the paravirt calls to retpolines.

As far as I can tell, the option doesn't seem to be useful for much
other than introducing surprising corner cases and making the kernel
vulnerable to Spectre v2.  It was probably a debug option from the early
paravirt days.  So just remove it.

Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ashok Raj <ashok.raj@intel.com>
Cc: Greg KH <gregkh@linuxfoundation.org>
Cc: Jun Nakajima <jun.nakajima@intel.com>
Cc: Tim Chen <tim.c.chen@linux.intel.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Asit Mallick <asit.k.mallick@intel.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Jason Baron <jbaron@akamai.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Alok Kataria <akataria@vmware.com>
Cc: Arjan Van De Ven <arjan.van.de.ven@intel.com>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Dan Williams <dan.j.williams@intel.com>
Link: https://lkml.kernel.org/r/20180131041333.2x6blhxirc2kclrq@treble
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 Documentation/kernel-parameters.txt |  2 --
 arch/x86/kernel/alternative.c       | 14 --------------
 2 files changed, 16 deletions(-)

diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 97bc24101896..19e9f2e77bdf 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -2476,8 +2476,6 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
 	norandmaps	Don't use address space randomization.  Equivalent to
 			echo 0 > /proc/sys/kernel/randomize_va_space
 
-	noreplace-paravirt	[X86,IA-64,PV_OPS] Don't patch paravirt_ops
-
 	noreplace-smp	[X86-32,SMP] Don't replace SMP instructions
 			with UP alternatives
 
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
index fb3d8ca0f0a2..9b5f8e6a9864 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -41,17 +41,6 @@ static int __init setup_noreplace_smp(char *str)
 }
 __setup("noreplace-smp", setup_noreplace_smp);
 
-#ifdef CONFIG_PARAVIRT
-static int __initdata_or_module noreplace_paravirt = 0;
-
-static int __init setup_noreplace_paravirt(char *str)
-{
-	noreplace_paravirt = 1;
-	return 1;
-}
-__setup("noreplace-paravirt", setup_noreplace_paravirt);
-#endif
-
 #define DPRINTK(fmt, args...)						\
 do {									\
 	if (debug_alternative)						\
@@ -574,9 +563,6 @@ void __init_or_module apply_paravirt(struct paravirt_patch_site *start,
 	struct paravirt_patch_site *p;
 	char insnbuf[MAX_PATCH_LEN];
 
-	if (noreplace_paravirt)
-		return;
-
 	for (p = start; p < end; p++) {
 		unsigned int used;
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/kvm: Update spectre-v1 mitigation
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (496 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/paravirt: Remove 'noreplace-paravirt' cmdline option Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/retpoline: Avoid retpolines for built-in __init functions Sasha Levin
                   ` (18 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Dan Williams, Thomas Gleixner, Sasha Levin

From: Dan Williams <dan.j.williams@intel.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 085331dfc6bbe3501fb936e657331ca943827600 ]

Commit 75f139aaf896 "KVM: x86: Add memory barrier on vmcs field lookup"
added a raw 'asm("lfence");' to prevent a bounds check bypass of
'vmcs_field_to_offset_table'.

The lfence can be avoided in this path by using the array_index_nospec()
helper designed for these types of fixes.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Cc: Andrew Honig <ahonig@google.com>
Cc: kvm@vger.kernel.org
Cc: Jim Mattson <jmattson@google.com>
Link: https://lkml.kernel.org/r/151744959670.6342.3001723920950249067.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kvm/vmx.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 6092e6c83de0..e8f34eaac2c8 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -32,6 +32,7 @@
 #include <linux/slab.h>
 #include <linux/tboot.h>
 #include <linux/hrtimer.h>
+#include <linux/nospec.h>
 #include "kvm_cache_regs.h"
 #include "x86.h"
 
@@ -770,21 +771,18 @@ static const unsigned short vmcs_field_to_offset_table[] = {
 
 static inline short vmcs_field_to_offset(unsigned long field)
 {
-	BUILD_BUG_ON(ARRAY_SIZE(vmcs_field_to_offset_table) > SHRT_MAX);
+	const size_t size = ARRAY_SIZE(vmcs_field_to_offset_table);
+	unsigned short offset;
 
-	if (field >= ARRAY_SIZE(vmcs_field_to_offset_table))
+	BUILD_BUG_ON(size > SHRT_MAX);
+	if (field >= size)
 		return -ENOENT;
 
-	/*
-	 * FIXME: Mitigation for CVE-2017-5753.  To be replaced with a
-	 * generic mechanism.
-	 */
-	asm("lfence");
-
-	if (vmcs_field_to_offset_table[field] == 0)
+	field = array_index_nospec(field, size);
+	offset = vmcs_field_to_offset_table[field];
+	if (offset == 0)
 		return -ENOENT;
-
-	return vmcs_field_to_offset_table[field];
+	return offset;
 }
 
 static inline struct vmcs12 *get_vmcs12(struct kvm_vcpu *vcpu)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] KVM: nVMX: kmap() can't fail
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (498 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/retpoline: Avoid retpolines for built-in __init functions Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] crypto: s5p-sss - Fix kernel Oops in AES-ECB mode Sasha Levin
                   ` (16 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: David Hildenbrand, Paolo Bonzini, Sasha Levin

From: David Hildenbrand <david@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 42cf014d38d8822cce63703a467e00f65d000952 ]

kmap() can't fail, therefore it will always return a valid pointer. Let's
just get rid of the unnecessary checks.

Signed-off-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kvm/vmx.c | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index e8f34eaac2c8..b76f9479b413 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -4382,10 +4382,6 @@ static int vmx_complete_nested_posted_interrupt(struct kvm_vcpu *vcpu)
 			return 0;
 
 		vapic_page = kmap(vmx->nested.virtual_apic_page);
-		if (!vapic_page) {
-			WARN_ON(1);
-			return -ENOMEM;
-		}
 		__kvm_apic_update_irr(vmx->nested.pi_desc->pir, vapic_page);
 		kunmap(vmx->nested.virtual_apic_page);
 
@@ -8825,11 +8821,6 @@ static inline bool nested_vmx_merge_msr_bitmap(struct kvm_vcpu *vcpu,
 		return false;
 	}
 	msr_bitmap = (unsigned long *)kmap(page);
-	if (!msr_bitmap) {
-		nested_release_page_clean(page);
-		WARN_ON(1);
-		return false;
-	}
 
 	if (nested_cpu_has_virt_x2apic_mode(vmcs12)) {
 		if (nested_cpu_has_apic_reg_virt(vmcs12))
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/retpoline: Avoid retpolines for built-in __init functions
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (497 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/kvm: Update spectre-v1 mitigation Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] KVM: nVMX: kmap() can't fail Sasha Levin
                   ` (17 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: David Woodhouse, Thomas Gleixner, Sasha Levin

From: David Woodhouse <dwmw@amazon.co.uk>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 66f793099a636862a71c59d4a6ba91387b155e0c ]

There's no point in building init code with retpolines, since it runs before
any potentially hostile userspace does. And before the retpoline is actually
ALTERNATIVEd into place, for much of it.

Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: karahmed@amazon.de
Cc: peterz@infradead.org
Cc: bp@alien8.de
Link: https://lkml.kernel.org/r/1517484441-1420-2-git-send-email-dwmw@amazon.co.uk
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/linux/init.h | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/include/linux/init.h b/include/linux/init.h
index 21b6d768edd7..5f4d931095ce 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -4,6 +4,13 @@
 #include <linux/compiler.h>
 #include <linux/types.h>
 
+/* Built-in __init functions needn't be compiled with retpoline */
+#if defined(RETPOLINE) && !defined(MODULE)
+#define __noretpoline __attribute__((indirect_branch("keep")))
+#else
+#define __noretpoline
+#endif
+
 /* These macros are used to mark some functions or 
  * initialized data (doesn't apply to uninitialized data)
  * as `initialization' functions. The kernel can take this
@@ -39,7 +46,7 @@
 
 /* These are for everybody (although not all archs will actually
    discard it in modules) */
-#define __init		__section(.init.text) __cold notrace
+#define __init		__section(.init.text) __cold notrace __noretpoline
 #define __initdata	__section(.init.data)
 #define __initconst	__constsection(.init.rodata)
 #define __exitdata	__section(.exit.data)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] crypto: s5p-sss - Fix kernel Oops in AES-ECB mode
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (499 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] KVM: nVMX: kmap() can't fail Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] KVM: nVMX: vmx_complete_nested_posted_interrupt() can't fail Sasha Levin
                   ` (15 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Kamil Konieczny, Herbert Xu, Sasha Levin

From: Kamil Konieczny <k.konieczny@partner.samsung.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c927b080c67e3e97193c81fc1d27f4251bf4e036 ]

In AES-ECB mode crypt is done with key only, so any use of IV
can cause kernel Oops. Use IV only in AES-CBC and AES-CTR.

Signed-off-by: Kamil Konieczny <k.konieczny@partner.samsung.com>
Reported-by: Anand Moon <linux.amoon@gmail.com>
Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>
Tested-by: Anand Moon <linux.amoon@gmail.com>
Cc: stable@vger.kernel.org # can be applied after commit 8f9702aad138
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/crypto/s5p-sss.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/crypto/s5p-sss.c b/drivers/crypto/s5p-sss.c
index 4f0c4a3cc5c5..89219806fd8e 100644
--- a/drivers/crypto/s5p-sss.c
+++ b/drivers/crypto/s5p-sss.c
@@ -419,16 +419,21 @@ static void s5p_aes_crypt_start(struct s5p_aes_dev *dev, unsigned long mode)
 	uint32_t                    aes_control;
 	int                         err;
 	unsigned long               flags;
+	u8 *iv;
 
 	aes_control = SSS_AES_KEY_CHANGE_MODE;
 	if (mode & FLAGS_AES_DECRYPT)
 		aes_control |= SSS_AES_MODE_DECRYPT;
 
-	if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CBC)
+	if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CBC) {
 		aes_control |= SSS_AES_CHAIN_MODE_CBC;
-	else if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CTR)
+		iv = req->info;
+	} else if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CTR) {
 		aes_control |= SSS_AES_CHAIN_MODE_CTR;
-
+		iv = req->info;
+	} else {
+		iv = NULL; /* AES_ECB */
+	}
 	if (dev->ctx->keylen == AES_KEYSIZE_192)
 		aes_control |= SSS_AES_KEY_SIZE_192;
 	else if (dev->ctx->keylen == AES_KEYSIZE_256)
@@ -458,7 +463,7 @@ static void s5p_aes_crypt_start(struct s5p_aes_dev *dev, unsigned long mode)
 		goto outdata_error;
 
 	SSS_AES_WRITE(dev, AES_CONTROL, aes_control);
-	s5p_set_aes(dev, dev->ctx->aes_key, req->info, dev->ctx->keylen);
+	s5p_set_aes(dev, dev->ctx->aes_key, iv, dev->ctx->keylen);
 
 	s5p_set_dma_indata(dev,  req->src);
 	s5p_set_dma_outdata(dev, req->dst);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] KVM: nVMX: vmx_complete_nested_posted_interrupt() can't fail
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (500 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] crypto: s5p-sss - Fix kernel Oops in AES-ECB mode Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] netfilter: drop outermost socket lock in getsockopt() Sasha Levin
                   ` (14 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: David Hildenbrand, Paolo Bonzini, Sasha Levin

From: David Hildenbrand <david@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6342c50ad12e8ce0736e722184a7dbdea4a3477f ]

vmx_complete_nested_posted_interrupt() can't fail, let's turn it into
a void function.

Signed-off-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kvm/vmx.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index b76f9479b413..ffd5502dd215 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -4362,7 +4362,7 @@ static int vmx_vm_has_apicv(struct kvm *kvm)
 	return enable_apicv && irqchip_in_kernel(kvm);
 }
 
-static int vmx_complete_nested_posted_interrupt(struct kvm_vcpu *vcpu)
+static void vmx_complete_nested_posted_interrupt(struct kvm_vcpu *vcpu)
 {
 	struct vcpu_vmx *vmx = to_vmx(vcpu);
 	int max_irr;
@@ -4373,13 +4373,13 @@ static int vmx_complete_nested_posted_interrupt(struct kvm_vcpu *vcpu)
 	    vmx->nested.pi_pending) {
 		vmx->nested.pi_pending = false;
 		if (!pi_test_and_clear_on(vmx->nested.pi_desc))
-			return 0;
+			return;
 
 		max_irr = find_last_bit(
 			(unsigned long *)vmx->nested.pi_desc->pir, 256);
 
 		if (max_irr == 256)
-			return 0;
+			return;
 
 		vapic_page = kmap(vmx->nested.virtual_apic_page);
 		__kvm_apic_update_irr(vmx->nested.pi_desc->pir, vapic_page);
@@ -4392,7 +4392,6 @@ static int vmx_complete_nested_posted_interrupt(struct kvm_vcpu *vcpu)
 			vmcs_write16(GUEST_INTR_STATUS, status);
 		}
 	}
-	return 0;
 }
 
 static inline bool kvm_vcpu_trigger_posted_interrupt(struct kvm_vcpu *vcpu)
@@ -9730,7 +9729,8 @@ static int vmx_check_nested_events(struct kvm_vcpu *vcpu, bool external_intr)
 		return 0;
 	}
 
-	return vmx_complete_nested_posted_interrupt(vcpu);
+	vmx_complete_nested_posted_interrupt(vcpu);
+	return 0;
 }
 
 static u32 vmx_get_preemption_timer_value(struct kvm_vcpu *vcpu)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] netfilter: drop outermost socket lock in getsockopt()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (501 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] KVM: nVMX: vmx_complete_nested_posted_interrupt() can't fail Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: ibmvfc: fix misdefined reserved field in ibmvfc_fcp_rsp_info Sasha Levin
                   ` (13 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Paolo Abeni, Pablo Neira Ayuso, Sasha Levin

From: Paolo Abeni <pabeni@redhat.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 01ea306f2ac2baff98d472da719193e738759d93 ]

The Syzbot reported a possible deadlock in the netfilter area caused by
rtnl lock, xt lock and socket lock being acquired with a different order
on different code paths, leading to the following backtrace:
Reviewed-by: Xin Long <lucien.xin@gmail.com>

======================================================
WARNING: possible circular locking dependency detected
4.15.0+ #301 Not tainted
------------------------------------------------------
syzkaller233489/4179 is trying to acquire lock:
  (rtnl_mutex){+.+.}, at: [<0000000048e996fd>] rtnl_lock+0x17/0x20
net/core/rtnetlink.c:74

but task is already holding lock:
  (&xt[i].mutex){+.+.}, at: [<00000000328553a2>]
xt_find_table_lock+0x3e/0x3e0 net/netfilter/x_tables.c:1041

which lock already depends on the new lock.
===

Since commit 3f34cfae1230 ("netfilter: on sockopt() acquire sock lock
only in the required scope"), we already acquire the socket lock in
the innermost scope, where needed. In such commit I forgot to remove
the outer-most socket lock from the getsockopt() path, this commit
addresses the issues dropping it now.

v1 -> v2: fix bad subj, added relavant 'fixes' tag

Fixes: 22265a5c3c10 ("netfilter: xt_TEE: resolve oif using netdevice notifiers")
Fixes: 202f59afd441 ("netfilter: ipt_CLUSTERIP: do not hold dev")
Fixes: 3f34cfae1230 ("netfilter: on sockopt() acquire sock lock only in the required scope")
Reported-by: syzbot+ddde1c7b7ff7442d7f2d@syzkaller.appspotmail.com
Suggested-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>

Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv4/ip_sockglue.c   |  7 +------
 net/ipv6/ipv6_sockglue.c | 10 ++--------
 2 files changed, 3 insertions(+), 14 deletions(-)

diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
index c32c3dd2f639..67c1333422a4 100644
--- a/net/ipv4/ip_sockglue.c
+++ b/net/ipv4/ip_sockglue.c
@@ -1491,10 +1491,7 @@ int ip_getsockopt(struct sock *sk, int level,
 		if (get_user(len, optlen))
 			return -EFAULT;
 
-		lock_sock(sk);
-		err = nf_getsockopt(sk, PF_INET, optname, optval,
-				&len);
-		release_sock(sk);
+		err = nf_getsockopt(sk, PF_INET, optname, optval, &len);
 		if (err >= 0)
 			err = put_user(len, optlen);
 		return err;
@@ -1526,9 +1523,7 @@ int compat_ip_getsockopt(struct sock *sk, int level, int optname,
 		if (get_user(len, optlen))
 			return -EFAULT;
 
-		lock_sock(sk);
 		err = compat_nf_getsockopt(sk, PF_INET, optname, optval, &len);
-		release_sock(sk);
 		if (err >= 0)
 			err = put_user(len, optlen);
 		return err;
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
index 0e2da9f8d6bb..2ad727bba3a5 100644
--- a/net/ipv6/ipv6_sockglue.c
+++ b/net/ipv6/ipv6_sockglue.c
@@ -1331,10 +1331,7 @@ int ipv6_getsockopt(struct sock *sk, int level, int optname,
 		if (get_user(len, optlen))
 			return -EFAULT;
 
-		lock_sock(sk);
-		err = nf_getsockopt(sk, PF_INET6, optname, optval,
-				&len);
-		release_sock(sk);
+		err = nf_getsockopt(sk, PF_INET6, optname, optval, &len);
 		if (err >= 0)
 			err = put_user(len, optlen);
 	}
@@ -1373,10 +1370,7 @@ int compat_ipv6_getsockopt(struct sock *sk, int level, int optname,
 		if (get_user(len, optlen))
 			return -EFAULT;
 
-		lock_sock(sk);
-		err = compat_nf_getsockopt(sk, PF_INET6,
-					   optname, optval, &len);
-		release_sock(sk);
+		err = compat_nf_getsockopt(sk, PF_INET6, optname, optval, &len);
 		if (err >= 0)
 			err = put_user(len, optlen);
 	}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] PCI: keystone: Fix interrupt-controller-node lookup
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (503 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: ibmvfc: fix misdefined reserved field in ibmvfc_fcp_rsp_info Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] cfg80211: fix cfg80211_beacon_dup Sasha Levin
                   ` (11 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Johan Hovold, Lorenzo Pieralisi, Sasha Levin

From: Johan Hovold <johan@kernel.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit eac56aa3bc8af3d9b9850345d0f2da9d83529134 ]

Fix child-node lookup during initialisation which was using the wrong
OF-helper and ended up searching the whole device tree depth-first
starting at the parent rather than just matching on its children.

To make things worse, the parent pci node could end up being prematurely
freed as of_find_node_by_name() drops a reference to its first argument.
Any matching child interrupt-controller node was also leaked.

Fixes: 0c4ffcfe1fbc ("PCI: keystone: Add TI Keystone PCIe driver")
Cc: stable <stable@vger.kernel.org>     # 3.18
Acked-by: Murali Karicheri <m-karicheri2@ti.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
[lorenzo.pieralisi@arm.com: updated commit subject]
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/pci/host/pci-keystone.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/host/pci-keystone.c b/drivers/pci/host/pci-keystone.c
index 75333b0c4f0a..29b018c4e7e4 100644
--- a/drivers/pci/host/pci-keystone.c
+++ b/drivers/pci/host/pci-keystone.c
@@ -179,14 +179,16 @@ static int ks_pcie_get_irq_controller_info(struct keystone_pcie *ks_pcie,
 	}
 
 	/* interrupt controller is in a child node */
-	*np_temp = of_find_node_by_name(np_pcie, controller);
+	*np_temp = of_get_child_by_name(np_pcie, controller);
 	if (!(*np_temp)) {
 		dev_err(dev, "Node for %s is absent\n", controller);
 		goto out;
 	}
 	temp = of_irq_count(*np_temp);
-	if (!temp)
+	if (!temp) {
+		of_node_put(*np_temp);
 		goto out;
+	}
 	if (temp > max_host_irqs)
 		dev_warn(dev, "Too many %s interrupts defined %u\n",
 			(legacy ? "legacy" : "MSI"), temp);
@@ -200,6 +202,9 @@ static int ks_pcie_get_irq_controller_info(struct keystone_pcie *ks_pcie,
 		if (!host_irqs[temp])
 			break;
 	}
+
+	of_node_put(*np_temp);
+
 	if (temp) {
 		*num_irqs = temp;
 		ret = 0;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] scsi: ibmvfc: fix misdefined reserved field in ibmvfc_fcp_rsp_info
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (502 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] netfilter: drop outermost socket lock in getsockopt() Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] PCI: keystone: Fix interrupt-controller-node lookup Sasha Levin
                   ` (12 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Tyrel Datwyler, Martin K . Petersen, Sasha Levin

From: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit c39813652700f3df552b6557530f1e5f782dbe2f ]

The fcp_rsp_info structure as defined in the FC spec has an initial 3
bytes reserved field. The ibmvfc driver mistakenly defined this field as
4 bytes resulting in the rsp_code field being defined in what should be
the start of the second reserved field and thus always being reported as
zero by the driver.

Ideally, we should wire ibmvfc up with libfc for the sake of code
deduplication, and ease of maintaining standardized structures in a
single place. However, for now simply fixup the definition in ibmvfc for
backporting to distros on older kernels. Wiring up with libfc will be
done in a followup patch.

Cc: <stable@vger.kernel.org>
Reported-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/ibmvscsi/ibmvfc.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/ibmvscsi/ibmvfc.h b/drivers/scsi/ibmvscsi/ibmvfc.h
index 8fae03215a85..543c10266984 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.h
+++ b/drivers/scsi/ibmvscsi/ibmvfc.h
@@ -366,7 +366,7 @@ enum ibmvfc_fcp_rsp_info_codes {
 };
 
 struct ibmvfc_fcp_rsp_info {
-	__be16 reserved;
+	u8 reserved[3];
 	u8 rsp_code;
 	u8 reserved2[4];
 }__attribute__((packed, aligned (2)));
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] cfg80211: fix cfg80211_beacon_dup
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (504 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] PCI: keystone: Fix interrupt-controller-node lookup Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] iio: buffer: check if a buffer has been set up when poll is called Sasha Levin
                   ` (10 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Johannes Berg, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit bee92d06157fc39d5d7836a061c7d41289a55797 ]

gcc-8 warns about some obviously incorrect code:

net/mac80211/cfg.c: In function 'cfg80211_beacon_dup':
net/mac80211/cfg.c:2896:3: error: 'memcpy' source argument is the same as destination [-Werror=restrict]

>From the context, I conclude that we want to copy from beacon into
new_beacon, as we do in the rest of the function.

Cc: stable@vger.kernel.org
Fixes: 73da7d5bab79 ("mac80211: add channel switch command and beacon callbacks")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/mac80211/cfg.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 37e0aa4891a2..cd85cbf9bf39 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -2857,7 +2857,7 @@ cfg80211_beacon_dup(struct cfg80211_beacon_data *beacon)
 	}
 	if (beacon->probe_resp_len) {
 		new_beacon->probe_resp_len = beacon->probe_resp_len;
-		beacon->probe_resp = pos;
+		new_beacon->probe_resp = pos;
 		memcpy(pos, beacon->probe_resp, beacon->probe_resp_len);
 		pos += beacon->probe_resp_len;
 	}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] iio: adis_lib: Initialize trigger before requesting interrupt
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (506 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] iio: buffer: check if a buffer has been set up when poll is called Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/oprofile: Fix bogus GCC-8 warning in nmi_setup() Sasha Levin
                   ` (8 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Lars-Peter Clausen, Jonathan Cameron, Sasha Levin

From: Lars-Peter Clausen <lars@metafoo.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f027e0b3a774e10302207e91d304bbf99e3a8b36 ]

The adis_probe_trigger() creates a new IIO trigger and requests an
interrupt associated with the trigger. The interrupt uses the generic
iio_trigger_generic_data_rdy_poll() function as its interrupt handler.

Currently the driver initializes some fields of the trigger structure after
the interrupt has been requested. But an interrupt can fire as soon as it
has been requested. This opens up a race condition.

iio_trigger_generic_data_rdy_poll() will access the trigger data structure
and dereference the ops field. If the ops field is not yet initialized this
will result in a NULL pointer deref.

It is not expected that the device generates an interrupt at this point, so
typically this issue did not surface unless e.g. due to a hardware
misconfiguration (wrong interrupt number, wrong polarity, etc.).

But some newer devices from the ADIS family start to generate periodic
interrupts in their power-on reset configuration and unfortunately the
interrupt can not be masked in the device.  This makes the race condition
much more visible and the following crash has been observed occasionally
when booting a system using the ADIS16460.

	Unable to handle kernel NULL pointer dereference at virtual address 00000008
	pgd = c0004000
	[00000008] *pgd=00000000
	Internal error: Oops: 5 [#1] PREEMPT SMP ARM
	Modules linked in:
	CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.9.0-04126-gf9739f0-dirty #257
	Hardware name: Xilinx Zynq Platform
	task: ef04f640 task.stack: ef050000
	PC is at iio_trigger_notify_done+0x30/0x68
	LR is at iio_trigger_generic_data_rdy_poll+0x18/0x20
	pc : [<c042d868>]    lr : [<c042d924>]    psr: 60000193
	sp : ef051bb8  ip : 00000000  fp : ef106400
	r10: c081d80a  r9 : ef3bfa00  r8 : 00000087
	r7 : ef051bec  r6 : 00000000  r5 : ef3bfa00  r4 : ee92ab00
	r3 : 00000000  r2 : 00000000  r1 : 00000000  r0 : ee97e400
	Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment none
	Control: 18c5387d  Table: 0000404a  DAC: 00000051
	Process swapper/0 (pid: 1, stack limit = 0xef050210)
	[<c042d868>] (iio_trigger_notify_done) from [<c0065b10>] (__handle_irq_event_percpu+0x88/0x118)
	[<c0065b10>] (__handle_irq_event_percpu) from [<c0065bbc>] (handle_irq_event_percpu+0x1c/0x58)
	[<c0065bbc>] (handle_irq_event_percpu) from [<c0065c30>] (handle_irq_event+0x38/0x5c)
	[<c0065c30>] (handle_irq_event) from [<c0068e28>] (handle_level_irq+0xa4/0x130)
	[<c0068e28>] (handle_level_irq) from [<c0064e74>] (generic_handle_irq+0x24/0x34)
	[<c0064e74>] (generic_handle_irq) from [<c021ab7c>] (zynq_gpio_irqhandler+0xb8/0x13c)
	[<c021ab7c>] (zynq_gpio_irqhandler) from [<c0064e74>] (generic_handle_irq+0x24/0x34)
	[<c0064e74>] (generic_handle_irq) from [<c0065370>] (__handle_domain_irq+0x5c/0xb4)
	[<c0065370>] (__handle_domain_irq) from [<c000940c>] (gic_handle_irq+0x48/0x8c)
	[<c000940c>] (gic_handle_irq) from [<c0013e8c>] (__irq_svc+0x6c/0xa8)

To fix this make sure that the trigger is fully initialized before
requesting the interrupt.

Fixes: ccd2b52f4ac6 ("staging:iio: Add common ADIS library")
Reported-by: Robin Getz <Robin.Getz@analog.com>
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/iio/imu/adis_trigger.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/iio/imu/adis_trigger.c b/drivers/iio/imu/adis_trigger.c
index f53e9a803a0e..93b99bd93738 100644
--- a/drivers/iio/imu/adis_trigger.c
+++ b/drivers/iio/imu/adis_trigger.c
@@ -47,6 +47,10 @@ int adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev)
 	if (adis->trig == NULL)
 		return -ENOMEM;
 
+	adis->trig->dev.parent = &adis->spi->dev;
+	adis->trig->ops = &adis_trigger_ops;
+	iio_trigger_set_drvdata(adis->trig, adis);
+
 	ret = request_irq(adis->spi->irq,
 			  &iio_trigger_generic_data_rdy_poll,
 			  IRQF_TRIGGER_RISING,
@@ -55,9 +59,6 @@ int adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev)
 	if (ret)
 		goto error_free_trig;
 
-	adis->trig->dev.parent = &adis->spi->dev;
-	adis->trig->ops = &adis_trigger_ops;
-	iio_trigger_set_drvdata(adis->trig, adis);
 	ret = iio_trigger_register(adis->trig);
 
 	indio_dev->trig = iio_trigger_get(adis->trig);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] iio: buffer: check if a buffer has been set up when poll is called
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (505 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] cfg80211: fix cfg80211_beacon_dup Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] iio: adis_lib: Initialize trigger before requesting interrupt Sasha Levin
                   ` (9 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Stefan Windfeldt-Prytz, Jonathan Cameron, Sasha Levin

From: Stefan Windfeldt-Prytz <stefan.windfeldt@axis.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4cd140bda6494543f1c1b0ccceceaa44b676eef6 ]

If no iio buffer has been set up and poll is called return 0.
Without this check there will be a null pointer dereference when
calling poll on a iio driver without an iio buffer.

Cc: stable@vger.kernel.org
Signed-off-by: Stefan Windfeldt-Prytz <stefan.windfeldt@axis.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/iio/industrialio-buffer.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c
index 7fa280b28ecb..ec6b26f008d9 100644
--- a/drivers/iio/industrialio-buffer.c
+++ b/drivers/iio/industrialio-buffer.c
@@ -150,7 +150,7 @@ unsigned int iio_buffer_poll(struct file *filp,
 	struct iio_dev *indio_dev = filp->private_data;
 	struct iio_buffer *rb = indio_dev->buffer;
 
-	if (!indio_dev->info)
+	if (!indio_dev->info || rb == NULL)
 		return 0;
 
 	poll_wait(filp, &rb->pollq, wait);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] x86/oprofile: Fix bogus GCC-8 warning in nmi_setup()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (507 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] iio: adis_lib: Initialize trigger before requesting interrupt Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] irqchip/gic-v3: Use wmb() instead of smb_wmb() in gic_raise_softirq() Sasha Levin
                   ` (7 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Ingo Molnar, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 85c615eb52222bc5fab6c7190d146bc59fac289e ]

GCC-8 shows a warning for the x86 oprofile code that copies per-CPU
data from CPU 0 to all other CPUs, which when building a non-SMP
kernel turns into a memcpy() with identical source and destination
pointers:

 arch/x86/oprofile/nmi_int.c: In function 'mux_clone':
 arch/x86/oprofile/nmi_int.c:285:2: error: 'memcpy' source argument is the same as destination [-Werror=restrict]
   memcpy(per_cpu(cpu_msrs, cpu).multiplex,
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          per_cpu(cpu_msrs, 0).multiplex,
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          sizeof(struct op_msr) * model->num_virt_counters);
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 arch/x86/oprofile/nmi_int.c: In function 'nmi_setup':
 arch/x86/oprofile/nmi_int.c:466:3: error: 'memcpy' source argument is the same as destination [-Werror=restrict]
 arch/x86/oprofile/nmi_int.c:470:3: error: 'memcpy' source argument is the same as destination [-Werror=restrict]

I have analyzed a number of such warnings now: some are valid and the
GCC warning is welcome. Others turned out to be false-positives, and
GCC was changed to not warn about those any more. This is a corner case
that is a false-positive but the GCC developers feel it's better to keep
warning about it.

In this case, it seems best to work around it by telling GCC
a little more clearly that this code path is never hit with
an IS_ENABLED() configuration check.

Cc:stable as we also want old kernels to build cleanly with GCC-8.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Jessica Yu <jeyu@kernel.org>
Cc: Kees Cook <keescook@chromium.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Martin Sebor <msebor@gcc.gnu.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Robert Richter <rric@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: oprofile-list@lists.sf.net
Cc: stable@vger.kernel.org
Link: http://lkml.kernel.org/r/20180220205826.2008875-1-arnd@arndb.de
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84095
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/oprofile/nmi_int.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c
index 1d2e6392f5fa..f24bd7249536 100644
--- a/arch/x86/oprofile/nmi_int.c
+++ b/arch/x86/oprofile/nmi_int.c
@@ -471,7 +471,7 @@ static int nmi_setup(void)
 		goto fail;
 
 	for_each_possible_cpu(cpu) {
-		if (!cpu)
+		if (!IS_ENABLED(CONFIG_SMP) || !cpu)
 			continue;
 
 		memcpy(per_cpu(cpu_msrs, cpu).counters,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] irqchip/gic-v3: Use wmb() instead of smb_wmb() in gic_raise_softirq()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (508 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/oprofile: Fix bogus GCC-8 warning in nmi_setup() Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] usb: ohci: Proper handling of ed_rm_list to handle race condition between usb_kill_urb() and finish_unlinks() Sasha Levin
                   ` (6 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Shanker Donthineni, Marc Zyngier, Sasha Levin

From: Shanker Donthineni <shankerd@codeaurora.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 21ec30c0ef5234fb1039cc7c7737d885bf875a9e ]

A DMB instruction can be used to ensure the relative order of only
memory accesses before and after the barrier. Since writes to system
registers are not memory operations, barrier DMB is not sufficient
for observability of memory accesses that occur before ICC_SGI1R_EL1
writes.

A DSB instruction ensures that no instructions that appear in program
order after the DSB instruction, can execute until the DSB instruction
has completed.

Cc: stable@vger.kernel.org
Acked-by: Will Deacon <will.deacon@arm.com>,
Signed-off-by: Shanker Donthineni <shankerd@codeaurora.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/irqchip/irq-gic-v3.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index 9976c37b9c64..f2b3a0152860 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -584,7 +584,7 @@ static void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
 	 * Ensure that stores to Normal memory are visible to the
 	 * other CPUs before issuing the IPI.
 	 */
-	smp_wmb();
+	wmb();
 
 	for_each_cpu(cpu, mask) {
 		u64 cluster_id = cpu_logical_map(cpu) & ~0xffUL;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: ohci: Proper handling of ed_rm_list to handle race condition between usb_kill_urb() and finish_unlinks()
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (509 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] irqchip/gic-v3: Use wmb() instead of smb_wmb() in gic_raise_softirq() Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] arm64: Disable unhandled signal log messages by default Sasha Levin
                   ` (5 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: AMAN DEEP, Jeffy Chen, Greg Kroah-Hartman, Sasha Levin

From: AMAN DEEP <aman.deep@samsung.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 46408ea558df13b110e0866b99624384a33bdeba ]

There is a race condition between finish_unlinks->finish_urb() function
and usb_kill_urb() in ohci controller case. The finish_urb calls
spin_unlock(&ohci->lock) before usb_hcd_giveback_urb() function call,
then if during this time, usb_kill_urb is called for another endpoint,
then new ed will be added to ed_rm_list at beginning for unlink, and
ed_rm_list will point to newly added.

When finish_urb() is completed in finish_unlinks() and ed->td_list
becomes empty as in below code (in finish_unlinks() function):

        if (list_empty(&ed->td_list)) {
                *last = ed->ed_next;
                ed->ed_next = NULL;
        } else if (ohci->rh_state == OHCI_RH_RUNNING) {
                *last = ed->ed_next;
                ed->ed_next = NULL;
                ed_schedule(ohci, ed);
        }

The *last = ed->ed_next will make ed_rm_list to point to ed->ed_next
and previously added ed by usb_kill_urb will be left unreferenced by
ed_rm_list. This causes usb_kill_urb() hang forever waiting for
finish_unlink to remove added ed from ed_rm_list.

The main reason for hang in this race condtion is addition and removal
of ed from ed_rm_list in the beginning during usb_kill_urb and later
last* is modified in finish_unlinks().

As suggested by Alan Stern, the solution for proper handling of
ohci->ed_rm_list is to remove ed from the ed_rm_list before finishing
any URBs. Then at the end, we can add ed back to the list if necessary.

This properly handle the updated ohci->ed_rm_list in usb_kill_urb().

Fixes: 977dcfdc6031 ("USB: OHCI: don't lose track of EDs when a controller dies")
Acked-by: Alan Stern <stern@rowland.harvard.edu>
CC: <stable@vger.kernel.org>
Signed-off-by: Aman Deep <aman.deep@samsung.com>
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/host/ohci-q.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c
index 47d2c09e4f35..5cd4b286b198 100644
--- a/drivers/usb/host/ohci-q.c
+++ b/drivers/usb/host/ohci-q.c
@@ -1017,6 +1017,8 @@ static void finish_unlinks(struct ohci_hcd *ohci)
 		 * have modified this list.  normally it's just prepending
 		 * entries (which we'd ignore), but paranoia won't hurt.
 		 */
+		*last = ed->ed_next;
+		ed->ed_next = NULL;
 		modified = 0;
 
 		/* unlink urbs as requested, but rescan the list after
@@ -1075,21 +1077,22 @@ static void finish_unlinks(struct ohci_hcd *ohci)
 			goto rescan_this;
 
 		/*
-		 * If no TDs are queued, take ED off the ed_rm_list.
+		 * If no TDs are queued, ED is now idle.
 		 * Otherwise, if the HC is running, reschedule.
-		 * If not, leave it on the list for further dequeues.
+		 * If the HC isn't running, add ED back to the
+		 * start of the list for later processing.
 		 */
 		if (list_empty(&ed->td_list)) {
-			*last = ed->ed_next;
-			ed->ed_next = NULL;
 			ed->state = ED_IDLE;
 			list_del(&ed->in_use_list);
 		} else if (ohci->rh_state == OHCI_RH_RUNNING) {
-			*last = ed->ed_next;
-			ed->ed_next = NULL;
 			ed_schedule(ohci, ed);
 		} else {
-			last = &ed->ed_next;
+			ed->ed_next = ohci->ed_rm_list;
+			ohci->ed_rm_list = ed;
+			/* Don't loop on the same ED */
+			if (last == &ohci->ed_rm_list)
+				last = &ed->ed_next;
 		}
 
 		if (modified)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] arm64: Disable unhandled signal log messages by default
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (510 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] usb: ohci: Proper handling of ed_rm_list to handle race condition between usb_kill_urb() and finish_unlinks() Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] Add delay-init quirk for Corsair K70 RGB keyboards Sasha Levin
                   ` (4 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Michael Weiser, Will Deacon, Sasha Levin

From: Michael Weiser <michael.weiser@gmx.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5ee39a71fd89ab7240c5339d04161c44a8e03269 ]

aarch64 unhandled signal kernel messages are very verbose, suggesting
them to be more of a debugging aid:

sigsegv[33]: unhandled level 2 translation fault (11) at 0x00000000, esr
0x92000046, in sigsegv[400000+71000]
CPU: 1 PID: 33 Comm: sigsegv Tainted: G        W        4.15.0-rc3+ #3
Hardware name: linux,dummy-virt (DT)
pstate: 60000000 (nZCv daif -PAN -UAO)
pc : 0x4003f4
lr : 0x4006bc
sp : 0000fffffe94a060
x29: 0000fffffe94a070 x28: 0000000000000000
x27: 0000000000000000 x26: 0000000000000000
x25: 0000000000000000 x24: 00000000004001b0
x23: 0000000000486ac8 x22: 00000000004001c8
x21: 0000000000000000 x20: 0000000000400be8
x19: 0000000000400b30 x18: 0000000000484728
x17: 000000000865ffc8 x16: 000000000000270f
x15: 00000000000000b0 x14: 0000000000000002
x13: 0000000000000001 x12: 0000000000000000
x11: 0000000000000000 x10: 0008000020008008
x9 : 000000000000000f x8 : ffffffffffffffff
x7 : 0004000000000000 x6 : ffffffffffffffff
x5 : 0000000000000000 x4 : 0000000000000000
x3 : 00000000004003e4 x2 : 0000fffffe94a1e8
x1 : 000000000000000a x0 : 0000000000000000

Disable them by default, so they can be enabled using
/proc/sys/debug/exception-trace.

Cc: <stable@vger.kernel.org>
Signed-off-by: Michael Weiser <michael.weiser@gmx.de>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm64/kernel/traps.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
index 8bbd57efae78..9322be69ca09 100644
--- a/arch/arm64/kernel/traps.c
+++ b/arch/arm64/kernel/traps.c
@@ -46,7 +46,7 @@ static const char *handler[]= {
 	"Error"
 };
 
-int show_unhandled_signals = 1;
+int show_unhandled_signals = 0;
 
 /*
  * Dump out the contents of some memory nicely...
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] Add delay-init quirk for Corsair K70 RGB keyboards
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (511 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] arm64: Disable unhandled signal log messages by default Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] usb: dwc3: gadget: Set maxpacket size for ep0 IN Sasha Levin
                   ` (3 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jack Stocker, Greg Kroah-Hartman, Sasha Levin

From: Jack Stocker <jackstocker.93@gmail.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7a1646d922577b5b48c0d222e03831141664bb59 ]

Following on from this patch: https://lkml.org/lkml/2017/11/3/516,
Corsair K70 RGB keyboards also require the DELAY_INIT quirk to
start correctly at boot.

Device ids found here:
usb 3-3: New USB device found, idVendor=1b1c, idProduct=1b13
usb 3-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 3-3: Product: Corsair K70 RGB Gaming Keyboard

Signed-off-by: Jack Stocker <jackstocker.93@gmail.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/core/quirks.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index c05c4f877750..774c97bb1c08 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -225,6 +225,9 @@ static const struct usb_device_id usb_quirk_list[] = {
 	{ USB_DEVICE(0x1a0a, 0x0200), .driver_info =
 			USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL },
 
+	/* Corsair K70 RGB */
+	{ USB_DEVICE(0x1b1c, 0x1b13), .driver_info = USB_QUIRK_DELAY_INIT },
+
 	/* Corsair Strafe RGB */
 	{ USB_DEVICE(0x1b1c, 0x1b20), .driver_info = USB_QUIRK_DELAY_INIT },
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: dwc3: gadget: Set maxpacket size for ep0 IN
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (512 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] Add delay-init quirk for Corsair K70 RGB keyboards Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:27 ` [added to the 4.1 stable tree] usb: ldusb: add PIDs for new CASSY devices supported by this driver Sasha Levin
                   ` (2 subsequent siblings)
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Thinh Nguyen, Thinh Nguyen, Felipe Balbi, Sasha Levin

From: Thinh Nguyen <Thinh.Nguyen@synopsys.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6180026341e852a250e1f97ebdcf71684a3c81b9 ]

There are 2 control endpoint structures for DWC3. However, the driver
only updates the OUT direction control endpoint structure during
ConnectDone event. DWC3 driver needs to update the endpoint max packet
size for control IN endpoint as well. If the max packet size is not
properly set, then the driver will incorrectly calculate the data
transfer size and fail to send ZLP for HS/FS 3-stage control read
transfer.

The fix is simply to update the max packet size for the ep0 IN direction
during ConnectDone event.

Cc: stable@vger.kernel.org
Fixes: 72246da40f37 ("usb: Introduce DesignWare USB3 DRD Driver")
Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/dwc3/gadget.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index ff56aaa00bf7..3ce30909cbe4 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2376,6 +2376,8 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
 		break;
 	}
 
+	dwc->eps[1]->endpoint.maxpacket = dwc->gadget.ep0->maxpacket;
+
 	/* Enable USB2 LPM Capability */
 
 	if ((dwc->revision > DWC3_REVISION_194A)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: ldusb: add PIDs for new CASSY devices supported by this driver
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (513 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] usb: dwc3: gadget: Set maxpacket size for ep0 IN Sasha Levin
@ 2018-03-01 15:27 ` Sasha Levin
  2018-03-01 15:28 ` [added to the 4.1 stable tree] usb: renesas_usbhs: missed the "running" flag in usb_dmac with rx path Sasha Levin
  2018-03-01 15:28 ` [added to the 4.1 stable tree] usb: gadget: f_fs: Process all descriptors during bind Sasha Levin
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:27 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Karsten Koop, Greg Kroah-Hartman, Sasha Levin

From: Karsten Koop <kkoop@ld-didactic.de>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 52ad2bd8918158266fc88a05f95429b56b6a33c5 ]

This patch adds support for new CASSY devices to the ldusb driver. The
PIDs are also added to the ignore list in hid-quirks.

Signed-off-by: Karsten Koop <kkoop@ld-didactic.de>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/hid/hid-core.c   | 3 +++
 drivers/hid/hid-ids.h    | 3 +++
 drivers/usb/misc/ldusb.c | 6 ++++++
 3 files changed, 12 insertions(+)

diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index bfa7caba6efc..d8638d8221ea 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -2350,6 +2350,9 @@ static const struct hid_device_id hid_ignore_list[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTIME) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTEMPERATURE) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYPH) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POWERANALYSERCASSY) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CONVERTERCONTROLLERCASSY) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MACHINETESTCASSY) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_JWM) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_DMMP) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIP) },
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index fffb1103eb95..62b337d61fe1 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -559,6 +559,9 @@
 #define USB_DEVICE_ID_LD_MICROCASSYTIME		0x1033
 #define USB_DEVICE_ID_LD_MICROCASSYTEMPERATURE	0x1035
 #define USB_DEVICE_ID_LD_MICROCASSYPH		0x1038
+#define USB_DEVICE_ID_LD_POWERANALYSERCASSY	0x1040
+#define USB_DEVICE_ID_LD_CONVERTERCONTROLLERCASSY	0x1042
+#define USB_DEVICE_ID_LD_MACHINETESTCASSY	0x1043
 #define USB_DEVICE_ID_LD_JWM		0x1080
 #define USB_DEVICE_ID_LD_DMMP		0x1081
 #define USB_DEVICE_ID_LD_UMIP		0x1090
diff --git a/drivers/usb/misc/ldusb.c b/drivers/usb/misc/ldusb.c
index 82503a7ff6c8..2bbca7d674d6 100644
--- a/drivers/usb/misc/ldusb.c
+++ b/drivers/usb/misc/ldusb.c
@@ -46,6 +46,9 @@
 #define USB_DEVICE_ID_LD_MICROCASSYTIME		0x1033	/* USB Product ID of Micro-CASSY Time (reserved) */
 #define USB_DEVICE_ID_LD_MICROCASSYTEMPERATURE	0x1035	/* USB Product ID of Micro-CASSY Temperature */
 #define USB_DEVICE_ID_LD_MICROCASSYPH		0x1038	/* USB Product ID of Micro-CASSY pH */
+#define USB_DEVICE_ID_LD_POWERANALYSERCASSY	0x1040	/* USB Product ID of Power Analyser CASSY */
+#define USB_DEVICE_ID_LD_CONVERTERCONTROLLERCASSY	0x1042	/* USB Product ID of Converter Controller CASSY */
+#define USB_DEVICE_ID_LD_MACHINETESTCASSY	0x1043	/* USB Product ID of Machine Test CASSY */
 #define USB_DEVICE_ID_LD_JWM		0x1080	/* USB Product ID of Joule and Wattmeter */
 #define USB_DEVICE_ID_LD_DMMP		0x1081	/* USB Product ID of Digital Multimeter P (reserved) */
 #define USB_DEVICE_ID_LD_UMIP		0x1090	/* USB Product ID of UMI P */
@@ -94,6 +97,9 @@ static const struct usb_device_id ld_usb_table[] = {
 	{ USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTIME) },
 	{ USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTEMPERATURE) },
 	{ USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYPH) },
+	{ USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POWERANALYSERCASSY) },
+	{ USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CONVERTERCONTROLLERCASSY) },
+	{ USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MACHINETESTCASSY) },
 	{ USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_JWM) },
 	{ USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_DMMP) },
 	{ USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIP) },
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: gadget: f_fs: Process all descriptors during bind
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (515 preceding siblings ...)
  2018-03-01 15:28 ` [added to the 4.1 stable tree] usb: renesas_usbhs: missed the "running" flag in usb_dmac with rx path Sasha Levin
@ 2018-03-01 15:28 ` Sasha Levin
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:28 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jack Pham, Mayank Rana, Felipe Balbi, Sasha Levin

From: Jack Pham <jackp@codeaurora.org>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6cf439e0d37463e42784271179c8a308fd7493c6 ]

During _ffs_func_bind(), the received descriptors are evaluated
to prepare for binding with the gadget in order to allocate
endpoints and optionally set up OS descriptors. However, the
high- and super-speed descriptors are only parsed based on
whether the gadget_is_dualspeed() and gadget_is_superspeed()
calls are true, respectively.

This is a problem in case a userspace program always provides
all of the {full,high,super,OS} descriptors when configuring a
function. Then, for example if a gadget device is not capable
of SuperSpeed, the call to ffs_do_descs() for the SS descriptors
is skipped, resulting in an incorrect offset calculation for
the vla_ptr when moving on to the OS descriptors that follow.
This causes ffs_do_os_descs() to fail as it is now looking at
the SS descriptors' offset within the raw_descs buffer instead.

_ffs_func_bind() should evaluate the descriptors unconditionally,
so remove the checks for gadget speed.

Fixes: f0175ab51993 ("usb: gadget: f_fs: OS descriptors support")
Cc: stable@vger.kernel.org
Co-Developed-by: Mayank Rana <mrana@codeaurora.org>
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
Signed-off-by: Jack Pham <jackp@codeaurora.org>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/gadget/function/f_fs.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
index d3fb7bd8e10d..6b62bb5c021c 100644
--- a/drivers/usb/gadget/function/f_fs.c
+++ b/drivers/usb/gadget/function/f_fs.c
@@ -2756,10 +2756,8 @@ static int _ffs_func_bind(struct usb_configuration *c,
 	struct ffs_data *ffs = func->ffs;
 
 	const int full = !!func->ffs->fs_descs_count;
-	const int high = gadget_is_dualspeed(func->gadget) &&
-		func->ffs->hs_descs_count;
-	const int super = gadget_is_superspeed(func->gadget) &&
-		func->ffs->ss_descs_count;
+	const int high = !!func->ffs->hs_descs_count;
+	const int super = !!func->ffs->ss_descs_count;
 
 	int fs_len, hs_len, ss_len, ret, i;
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* [added to the 4.1 stable tree] usb: renesas_usbhs: missed the "running" flag in usb_dmac with rx path
  2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (514 preceding siblings ...)
  2018-03-01 15:27 ` [added to the 4.1 stable tree] usb: ldusb: add PIDs for new CASSY devices supported by this driver Sasha Levin
@ 2018-03-01 15:28 ` Sasha Levin
  2018-03-01 15:28 ` [added to the 4.1 stable tree] usb: gadget: f_fs: Process all descriptors during bind Sasha Levin
  516 siblings, 0 replies; 520+ messages in thread
From: Sasha Levin @ 2018-03-01 15:28 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Yoshihiro Shimoda, Felipe Balbi, Sasha Levin

From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>

This patch has been added to the 4.1 stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 17aa31f13cad25daa19d3f923323f552e87bc874 ]

This fixes an issue that a gadget driver (usb_f_fs) is possible to
stop rx transactions after the usb-dmac is used because the following
functions missed to set/check the "running" flag.
 - usbhsf_dma_prepare_pop_with_usb_dmac()
 - usbhsf_dma_pop_done_with_usb_dmac()

So, if next transaction uses pio, the usbhsf_prepare_pop() can not
start the transaction because the "running" flag is 0.

Fixes: 8355b2b3082d ("usb: renesas_usbhs: fix the behavior of some usbhs_pkt_handle")
Cc: <stable@vger.kernel.org> # v3.19+
Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/renesas_usbhs/fifo.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/usb/renesas_usbhs/fifo.c b/drivers/usb/renesas_usbhs/fifo.c
index 8bb9367ada45..6f37966ea54b 100644
--- a/drivers/usb/renesas_usbhs/fifo.c
+++ b/drivers/usb/renesas_usbhs/fifo.c
@@ -999,6 +999,10 @@ static int usbhsf_dma_prepare_pop_with_usb_dmac(struct usbhs_pkt *pkt,
 	if ((uintptr_t)pkt->buf & (USBHS_USB_DMAC_XFER_SIZE - 1))
 		goto usbhsf_pio_prepare_pop;
 
+	/* return at this time if the pipe is running */
+	if (usbhs_pipe_is_running(pipe))
+		return 0;
+
 	usbhs_pipe_config_change_bfre(pipe, 1);
 
 	ret = usbhsf_fifo_select(pipe, fifo, 0);
@@ -1189,6 +1193,7 @@ static int usbhsf_dma_pop_done_with_usb_dmac(struct usbhs_pkt *pkt,
 	usbhsf_fifo_clear(pipe, fifo);
 	pkt->actual = usbhs_dma_calc_received_size(pkt, chan, rcv_len);
 
+	usbhs_pipe_running(pipe, 0);
 	usbhsf_dma_stop(pipe, fifo);
 	usbhsf_dma_unmap(pkt);
 	usbhsf_fifo_unselect(pipe, pipe->fifo);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 520+ messages in thread

* Re: [added to the 4.1 stable tree] powerpc/pseries: Add H_GET_CPU_CHARACTERISTICS flags & wrapper
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/pseries: Add H_GET_CPU_CHARACTERISTICS flags & wrapper Sasha Levin
@ 2018-03-02  3:08   ` Michael Ellerman
  0 siblings, 0 replies; 520+ messages in thread
From: Michael Ellerman @ 2018-03-02  3:08 UTC (permalink / raw)
  To: Sasha Levin, stable, stable-commits; +Cc: Michael Neuling, Sasha Levin

Sasha Levin <Alexander.Levin@microsoft.com> writes:

> From: Michael Neuling <mikey@neuling.org>
>
> This patch has been added to the 4.1 stable tree. If you have any
> objections, please let us know.

Hi Sasha,

I have done a back port of this series to 4.1, and there are a few
differences between my version and yours.

Do you mind dropping these for now and I'll send you my version?

That would be this patch and up to and including:
  powerpc/64s: Allow control of RFI flush via debugfs

cheers

> ===============
>
> [ Upstream commit 191eccb1580939fb0d47deb405b82a85b0379070 ]
>
> A new hypervisor call has been defined to communicate various
> characteristics of the CPU to guests. Add definitions for the hcall
> number, flags and a wrapper function.
>
> Signed-off-by: Michael Neuling <mikey@neuling.org>
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
> Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
> ---
>  arch/powerpc/include/asm/hvcall.h         | 17 +++++++++++++++++
>  arch/powerpc/include/asm/plpar_wrappers.h | 14 ++++++++++++++
>  2 files changed, 31 insertions(+)
>
> diff --git a/arch/powerpc/include/asm/hvcall.h b/arch/powerpc/include/asm/hvcall.h
> index 85bc8c0d257b..51adbde09845 100644
> --- a/arch/powerpc/include/asm/hvcall.h
> +++ b/arch/powerpc/include/asm/hvcall.h
> @@ -239,6 +239,7 @@
>  #define H_GET_HCA_INFO          0x1B8
>  #define H_GET_PERF_COUNT        0x1BC
>  #define H_MANAGE_TRACE          0x1C0
> +#define H_GET_CPU_CHARACTERISTICS 0x1C8
>  #define H_FREE_LOGICAL_LAN_BUFFER 0x1D4
>  #define H_QUERY_INT_STATE       0x1E4
>  #define H_POLL_PENDING		0x1D8
> @@ -285,6 +286,17 @@
>  #define H_SET_MODE_RESOURCE_ADDR_TRANS_MODE	3
>  #define H_SET_MODE_RESOURCE_LE			4
>  
> +/* H_GET_CPU_CHARACTERISTICS return values */
> +#define H_CPU_CHAR_SPEC_BAR_ORI31	(1ull << 63) // IBM bit 0
> +#define H_CPU_CHAR_BCCTRL_SERIALISED	(1ull << 62) // IBM bit 1
> +#define H_CPU_CHAR_L1D_FLUSH_ORI30	(1ull << 61) // IBM bit 2
> +#define H_CPU_CHAR_L1D_FLUSH_TRIG2	(1ull << 60) // IBM bit 3
> +#define H_CPU_CHAR_L1D_THREAD_PRIV	(1ull << 59) // IBM bit 4
> +
> +#define H_CPU_BEHAV_FAVOUR_SECURITY	(1ull << 63) // IBM bit 0
> +#define H_CPU_BEHAV_L1D_FLUSH_PR	(1ull << 62) // IBM bit 1
> +#define H_CPU_BEHAV_BNDS_CHK_SPEC_BAR	(1ull << 61) // IBM bit 2
> +
>  #ifndef __ASSEMBLY__
>  
>  /**
> @@ -423,6 +435,11 @@ extern long pseries_big_endian_exceptions(void);
>  
>  #endif /* CONFIG_PPC_PSERIES */
>  
> +struct h_cpu_char_result {
> +	u64 character;
> +	u64 behaviour;
> +};
> +
>  #endif /* __ASSEMBLY__ */
>  #endif /* __KERNEL__ */
>  #endif /* _ASM_POWERPC_HVCALL_H */
> diff --git a/arch/powerpc/include/asm/plpar_wrappers.h b/arch/powerpc/include/asm/plpar_wrappers.h
> index 67859edbf8fd..6e05cb397a5c 100644
> --- a/arch/powerpc/include/asm/plpar_wrappers.h
> +++ b/arch/powerpc/include/asm/plpar_wrappers.h
> @@ -323,4 +323,18 @@ static inline long plapr_set_watchpoint0(unsigned long dawr0, unsigned long dawr
>  	return plpar_set_mode(0, H_SET_MODE_RESOURCE_SET_DAWR, dawr0, dawrx0);
>  }
>  
> +static inline long plpar_get_cpu_characteristics(struct h_cpu_char_result *p)
> +{
> +	unsigned long retbuf[PLPAR_HCALL_BUFSIZE];
> +	long rc;
> +
> +	rc = plpar_hcall(H_GET_CPU_CHARACTERISTICS, retbuf);
> +	if (rc == H_SUCCESS) {
> +		p->character = retbuf[0];
> +		p->behaviour = retbuf[1];
> +	}
> +
> +	return rc;
> +}
> +
>  #endif /* _ASM_POWERPC_PLPAR_WRAPPERS_H */
> -- 
> 2.14.1

^ permalink raw reply	[flat|nested] 520+ messages in thread

* Re: [added to the 4.1 stable tree] powerpc/64s: Wire up cpu_show_meltdown()
  2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Wire up cpu_show_meltdown() Sasha Levin
@ 2018-03-02  3:20   ` Michael Ellerman
  0 siblings, 0 replies; 520+ messages in thread
From: Michael Ellerman @ 2018-03-02  3:20 UTC (permalink / raw)
  To: Sasha Levin, stable, stable-commits; +Cc: Sasha Levin

Sasha Levin <Alexander.Levin@microsoft.com> writes:

> From: Michael Ellerman <mpe@ellerman.id.au>
>
> This patch has been added to the 4.1 stable tree. If you have any
> objections, please let us know.

This commit back ports cleanly to v4.1 but doesn't actually work because
the generic support it depends on has not been back ported AFAICS.

We need at least this commit in v4.1:

  87590ce6e373 ("sysfs/cpu: Add vulnerability folder")

cheers

> ===============
>
> [ Upstream commit fd6e440f20b1a4304553775fc55938848ff617c9 ]
>
> The recent commit 87590ce6e373 ("sysfs/cpu: Add vulnerability folder")
> added a generic folder and set of files for reporting information on
> CPU vulnerabilities. One of those was for meltdown:
>
>   /sys/devices/system/cpu/vulnerabilities/meltdown
>
> This commit wires up that file for 64-bit Book3S powerpc.
>
> For now we default to "Vulnerable" unless the RFI flush is enabled.
> That may not actually be true on all hardware, further patches will
> refine the reporting based on the CPU/platform etc. But for now we
> default to being pessimists.
>
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
> Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
> ---
>  arch/powerpc/Kconfig           | 1 +
>  arch/powerpc/kernel/setup_64.c | 8 ++++++++
>  2 files changed, 9 insertions(+)
>
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index cffaeeee0d3e..a55a246fc784 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -133,6 +133,7 @@ config PPC
>  	select GENERIC_SMP_IDLE_THREAD
>  	select GENERIC_CMOS_UPDATE
>  	select GENERIC_TIME_VSYSCALL_OLD
> +	select GENERIC_CPU_VULNERABILITIES	if PPC_BOOK3S_64
>  	select GENERIC_CLOCKEVENTS
>  	select GENERIC_CLOCKEVENTS_BROADCAST if SMP
>  	select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
> diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
> index a3993ac21b50..1555778adb9c 100644
> --- a/arch/powerpc/kernel/setup_64.c
> +++ b/arch/powerpc/kernel/setup_64.c
> @@ -907,5 +907,13 @@ void __init setup_rfi_flush(enum l1d_flush_type types, bool enable)
>  	if (!no_rfi_flush)
>  		rfi_flush_enable(enable);
>  }
> +
> +ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, char *buf)
> +{
> +	if (rfi_flush)
> +		return sprintf(buf, "Mitigation: RFI Flush\n");
> +
> +	return sprintf(buf, "Vulnerable\n");
> +}
>  #endif /* CONFIG_PPC_BOOK3S_64 */
>  #endif
> -- 
> 2.14.1

^ permalink raw reply	[flat|nested] 520+ messages in thread

end of thread, other threads:[~2018-03-02  3:20 UTC | newest]

Thread overview: 520+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-01 15:22 [added to the 4.1 stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] more bio_map_user_iov() leak fixes Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] arm: KVM: Fix VTTBR_BADDR_MASK BUG_ON off-by-one Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] arm64: Initialise high_memory global variable earlier Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/mm: Fix INVPCID asm constraint Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/mm: Add INVPCID helpers Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/mm: Add a 'noinvpcid' boot option to turn off INVPCID Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/mm: If INVPCID is available, use it to flush global mappings Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] mm/mmu_context, sched/core: Fix mmu_context.h assumption Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] sched/core: Add switch_mm_irqs_off() and use it in the scheduler Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] ARM: Hide finish_arch_post_lock_switch() from modules Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/mm: Build arch/x86/mm/tlb.c even on !SMP Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] sched/core: Idle_task_exit() shouldn't use switch_mm_irqs_off() Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] x86/irq: Do not substract irq_tlb_count from irq_call_count Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] ALSA: hda - add support for docking station for HP 820 G2 Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] arm: kprobes: Align stack to 8-bytes in test code Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] arm: kprobes: Fix the return address of multiple kretprobes Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] cpuidle: Validate cpu_dev in cpuidle_add_sysfs() Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] r8152: fix the list rx_done may be used without initialization Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] net: qmi_wwan: Add USB IDs for MDM6600 modem on Motorola Droid 4 Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] crypto: deadlock between crypto_alg_sem/rtnl_mutex/genl_mutex Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] usb: gadget: f_uvc: Sanity check wMaxPacketSize for SuperSpeed Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] usb: gadget: udc: remove pointer dereference after free Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] netfilter: nfnl_cthelper: fix runtime expectation policy updates Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] netfilter: nfnl_cthelper: Fix memory leak Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] scsi: lpfc: Fix PT2PT PRLI reject Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] pinctrl: st: add irq_request/release_resources callbacks Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] ARM: dts: ti: fix PCI bus dtc warnings Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] KVM: x86: correct async page present tracepoint Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] hwmon: (asus_atk0110) fix uninitialized data access Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] s390/qeth: no ETH header for outbound AF_IUCV Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] HID: xinmo: fix for out of range for THT 2P arcade controller Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] bna: avoid writing uninitialized data into hw registers Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] net: Do not allow negative values for busy_read and busy_poll sysctl interfaces Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] i40e: Do not enable NAPI on q_vectors that have no rings Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] irda: vlsi_ir: fix check for DMA mapping errors Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] netfilter: nfnl_cthelper: fix a race when walk the nf_ct_helper_hash table Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] ARM: dts: am335x-evmsk: adjust mmc2 param to allow suspend Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] netfilter: nf_nat_snmp: Fix panic when snmp_trap_helper fails to register Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] xhci: plat: Register shutdown for xhci_plat Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] isdn: kcapi: avoid uninitialized data Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] cpuidle: powernv: Pass correct drv->cpumask for registration Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] ARM: dma-mapping: disallow dma_get_sgtable() for non-kernel managed memory Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] backlight: pwm_bl: Fix overflow condition Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] net: phy: at803x: Change error to EINVAL for invalid MAC Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] crypto: crypto4xx - increase context and scatter ring buffer elements Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] PCI: Avoid bus reset if bridge itself is broken Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] scsi: cxgb4i: fix Tx skb leak Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] PCI: Create SR-IOV virtfn/physfn links before attaching driver Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] igb: check memory allocation failure Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] ixgbe: fix use of uninitialized padding Sasha Levin
2018-03-01 15:22 ` [added to the 4.1 stable tree] PCI/AER: Report non-fatal errors only to the affected endpoint Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] scsi: lpfc: PLOGI failures during NPIV testing Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] scsi: lpfc: Fix secure firmware updates Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] fm10k: ensure we process SM mbx when processing VF mbx Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] tcp: fix under-evaluated ssthresh in TCP Vegas Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] rtc: set the alarm to the next expiring timer Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] alpha: fix build failures Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] ACPI: APEI / ERST: Fix missing error handling in erst_reader() Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] crypto: mcryptd - protect the per-CPU queue with a lock Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] mfd: twl4030-audio: Fix sibling-node lookup Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] mfd: twl6040: Fix child-node lookup Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: rawmidi: Avoid racy info ioctl via ctl device Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: usb-audio: Fix the missing ctl name suffix at parsing SU Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] PCI / PM: Force devices to D0 in pci_pm_thaw_noirq() Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] KVM: X86: Fix load RFLAGS w/o the fixed bit Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] parisc: Hide Diva-built-in serial aux and graphics card Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] powerpc/perf: Dereference BHRB entries safely Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] net: mvneta: clear interface link status on port disable Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] tracing: Remove extra zeroing out of the ring buffer page Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] tracing: Fix possible double free on failure of allocating trace buffer Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] tracing: Fix crash when it fails to alloc ring buffer Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] ring-buffer: Mask out the info bits when returning buffer page length Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] iw_cxgb4: Only validate the MSN for successful completions Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] ASoC: twl4030: fix child-node lookup Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/vm86/32: Switch to flush_tlb_mm_range() in mark_screen_rdonly() Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm: Remove flush_tlb() and flush_tlb_current_task() Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm: Make flush_tlb_mm_range() more predictable Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm: Disable PCID on 32-bit kernels Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm: Add the 'nopcid' boot option to turn off PCID Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm: Enable CR4.PCIDE on supported systems Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/mm/64: Fix reboot interaction with CR4.PCIDE Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] kbuild: add '-fno-stack-check' to kernel build options Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] ipv4: igmp: guard against silly MTU values Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] ipv6: mcast: better catch silly mtu values Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] net: igmp: Use correct source address on IGMPv3 reports Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] netlink: Add netns check on taps Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] tcp md5sig: Use skb's saddr when replying to an incoming segment Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] net: qmi_wwan: add Sierra EM7565 1199:9091 Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] tg3: Fix rx hang on MTU change with 5717/5719 Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] sctp: Replace use of sockets_allocated with specified macro Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] net: mvmdio: disable/unprepare clocks in EPROBE_DEFER case Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] ipv4: Fix use-after-free when flushing FIB tables Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] sock: free skb in skb_complete_tx_timestamp on error Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] usbip: fix usbip bind writing random string after command in match_busid Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] usbip: stub: stop printing kernel pointer addresses in messages Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] usbip: vhci: " Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] USB: serial: option: add support for Telit ME910 PID 0x1101 Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] usb: add RESET_RESUME for ELSA MicroLink 56K Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] usb: Add device quirk for Logitech HD Pro Webcam C925e Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] usb: xhci: Add XHCI_TRUST_TX_LENGTH for Renesas uPD720201 Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/smpboot: Remove stale TLB flush invocations Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/boot: Add early cmdline parsing for options with arguments Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] n_tty: fix EXTPROC vs ICANON interaction with TIOCINQ (aka FIONREAD) Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/paravirt: Dont patch flush_tlb_single Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] kernel/acct.c: fix the acct->needcheck check in check_free_space() Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] crypto: n2 - cure use after free Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] fscache: Fix the default for fscache_maybe_release_page() Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] kernel: make groups_sort calling a responsibility group_info allocators Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] kernel/signal.c: protect the SIGNAL_UNKILLABLE tasks from !sig_kernel_only() signals Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] kernel/signal.c: protect the traced SIGNAL_UNKILLABLE tasks from SIGKILL Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] kernel/signal.c: remove the no longer needed SIGNAL_UNKILLABLE check in complete_signal() Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] Input: elantech - add new icbody type 15 Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/microcode/AMD: Add support for fam17h microcode loading Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] x86/tlb: Drop the _GPL from the cpu_tlbstate export Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] parisc: Fix alignment of pa_tlb_lock in assembly on 32-bit SMP kernel Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] genksyms: Handle string literals with spaces in reference files Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] module: keep percpu symbols in module's symtab Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] proc: much faster /proc/vmstat Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] module: Issue warnings when tainting kernel Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] KVM: Fix stack-out-of-bounds read in write_mmio Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] dm bufio: fix shrinker scans when (nr_to_scan < retain_target) Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] can: gs_usb: fix return value of the "set_bittiming" callback Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] IB/srpt: Disable RDMA access by the initiator Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Validate PR_SET_FP_MODE prctl(2) requests against the ABI of the task Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Factor out NT_PRFPREG regset access helpers Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Guard against any partial write attempt with PTRACE_SETREGSET Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Consistently handle buffer counter " Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Fix an FCSR access API regression with NT_PRFPREG and MSA Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Also verify sizeof `elf_fpreg_t' with PTRACE_SETREGSET Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] kvm: vmx: Scrub hardware GPRs at VM-exit Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] MIPS: Disallow outsized PTRACE_SETREGSET NT_PRFPREG regset accesses Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: pcm: Remove incorrect snd_BUG_ON() usages Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: pcm: Add missing error checks in OSS emulation plugin builder Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: pcm: Abort properly at pending signal in OSS read/write loops Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: pcm: Allow aborting mutex lock at " Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: aloop: Release cable upon open error path Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: aloop: Fix inconsistent format due to incomplete rule Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] ALSA: aloop: Fix racy hw constraints adjustment Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] locks: don't check for race with close when setting OFD lock Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] mm/page-writeback: fix dirty_ratelimit calculation Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] futex: Replace barrier() in unqueue_me() with READ_ONCE() Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] r8152: use test_and_clear_bit Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] [media] usbvision fix overflow of interfaces array Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] sr9700: use skb_cow_head() to deal with cloned skbs Sasha Levin
2018-03-01 15:23 ` [added to the 4.1 stable tree] smsc75xx: " Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] cx82310_eth: " Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] sysrq: Fix warning in sysrq generated crash Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] hwrng: core - sleep interruptible in read Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] 8021q: fix a memory leak for VLAN 0 device Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] RDS: Heap OOB write in rds_message_alloc_sgs() Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] RDS: null pointer dereference in rds_atomic_free_op Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] sh_eth: fix TSU resource handling Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] sh_eth: fix SH7757 GEther initialization Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] crypto: algapi - fix NULL dereference in crypto_remove_spawns() Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] ipv6: fix possible mem leaks in ipv6_make_skb() Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] KVM: x86: Add memory barrier on vmcs field lookup Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/microcode/intel: Extend BDW late-loading with a revision check Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] USB: serial: cp210x: add IDs for LifeScan OneTouch Verio IQ Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] iscsi-target: Make TASK_REASSIGN use proper se_cmd->cmd_kref Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] USB: serial: cp210x: add new device ID ELV ALC 8xxx Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] usb: misc: usb3503: make sure reset is low for at least 100us Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] USB: fix usbmon BUG trigger Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: remove kernel addresses from usb device and urb debug msgs Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] staging: android: ashmem: fix a race condition in ASHMEM_SET_SIZE ioctl Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] Bluetooth: Prevent stack info leak from the EFS element Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] e1000e: Fix e1000_check_for_copper_link_ich8lan return value Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] uas: ignore UAS for Norelsys NS1068(X) chips Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/cpu: Factor out application of forced CPU caps Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/cpufeatures: Make CPU bugs sticky Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/alternatives: Fix optimize_nops() checking Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/alternatives: Add missing '\n' at end of ALTERNATIVE inline asm Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] gcov: disable for COMPILE_TEST Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/asm: Use register variable to get stack pointer value Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/kbuild: enable modversions for symbols exported from asm Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/asm: Make asm/alternative.h safe from assembly Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] EXPORT_SYMBOL() for asm Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] kconfig.h: use __is_defined() to check if MODULE is defined Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/retpoline/checksum32: Convert assembler indirect jumps Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] scsi: sg: disable SET_FORCE_LOW_DMA Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] futex: Prevent overflow by strengthen input validation Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] ALSA: pcm: Remove yet superfluous WARN_ON() Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] ALSA: hda - Apply headphone noise quirk for another Dell XPS 13 variant Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] af_key: fix buffer overread in verify_address_len() Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] ALSA: hda - Apply the existing quirk to iMac 14,1 Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] module: Add retpoline tag to VERMAGIC Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] af_key: fix buffer overread in parse_exthdrs() Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] pipe: avoid round_pipe_size() nr_pages overflow on 32-bit Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] Input: 88pm860x-ts - fix child-node lookup Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] Input: twl6040-vibra " Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] Input: twl6040-vibra - fix DT node memory management Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] tracing: Fix converting enum's from the map in trace_event_eval_update() Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] ARM: dts: kirkwood: fix pin-muxing of MPP7 on OpenBlocks A7 Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] can: peak: fix potential bug in packet fragmentation Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] libata: apply MAX_SEC_1024 to all LITEON EP1 series devices Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] dm btree: fix serious bug in btree_split_beneath() Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] dm thin metadata: THIN_MAX_CONCURRENT_LOCKS should be 6 Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] arm64: KVM: Fix SMCCC handling of unimplemented SMC/HVC calls Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] kbuild: modversions for EXPORT_SYMBOL() for asm Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] MIPS: AR7: ensure the port type's FCR value is used Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/asm/32: Make sync_core() handle missing CPUID on all 32-bit kernels Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: prevent vhci_hcd driver from leaking a socket pointer address Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: Fix implicit fallthrough warning Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: Fix potential format overflow in userspace tools Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/cpu/intel: Introduce macros for Intel family numbers Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] can: af_can: can_rcv(): replace WARN_ONCE by pr_warn_once Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] can: af_can: canfd_rcv(): " Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] PM / sleep: declare __tracedata symbols as char[] rather than char Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] time: Avoid undefined behaviour in ktime_add_safe() Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] drivers: base: cacheinfo: fix x86 with CONFIG_OF enabled Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] fs/select: add vmalloc fallback for select(2) Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] hwpoison, memcg: forcibly uncharge LRU pages Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] mm/mmap.c: do not blow on PROT_NONE MAP_FIXED holes in the stack Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] cma: fix calculation of aligned offset Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] ipc: msg, make msgrcv work with LONG_MIN Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] x86/ioapic: Fix incorrect pointers in ioapic_setup_resources() Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] ACPI / processor: Avoid reserving IO regions too early Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: arp_tables: fix invoking 32bit "iptable -P INPUT ACCEPT" failed in 64bit kernel Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: nf_ct_expect: remove the redundant slash when policy name is empty Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: restart search if moved to other chain Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: nf_conntrack_sip: extend request line validation Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: nfnetlink_cthelper: Add missing permission checks Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] ext2: Don't clear SGID when inheriting ACLs Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] netfilter: xt_osf: Add missing permission checks Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] reiserfs: fix race in prealloc discard Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] reiserfs: don't preallocate blocks for extended attributes Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] reiserfs: Don't clear SGID when inheriting ACLs Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] fs/fcntl: f_setown, avoid undefined behaviour Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] scsi: libiscsi: fix shifting of DID_REQUEUE host byte Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] Revert "module: Add retpoline tag to VERMAGIC" Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: fix stub_rx: get_pipe() to validate endpoint number Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] Input: trackpoint - force 3 buttons if 0 button is reported Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: fix stub_rx: harden CMD_SUBMIT path to handle malicious input Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] usbip: prevent leaking socket pointer address in messages Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] um: link vmlinux with -no-pie Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] eventpoll.h: add missing epoll event masks Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] dccp: don't restart ccid2_hc_tx_rto_expire() if sk in closed state Sasha Levin
2018-03-01 15:24 ` [added to the 4.1 stable tree] ipv6: fix udpv6 sendmsg crash caused by too small MTU Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] ipv6: ip6_make_skb() needs to clear cork.base.dst Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] net: igmp: fix source address check for IGMPv3 reports Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] net: qdisc_pkt_len_init() should be more robust Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] tcp: __tcp_hdrlen() helper Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] pppoe: take ->needed_headroom of lower device into account on xmit Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] sctp: do not allow the v4 socket to bind a v4mapped v6 address Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] sctp: return error if the asoc has been peeled off in sctp_wait_for_sndbuf Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] vmxnet3: repair memory leak Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] ipv4: Make neigh lookup keys for loopback/point-to-point devices be INADDR_ANY Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] net: Allow neigh contructor functions ability to modify the primary_key Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] net: tcp: close sock if net namespace is exiting Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] nfsd: auth: Fix gid sorting when rootsquash enabled Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] loop: fix concurrent lo_open/lo_release Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] bpf: fix divides by zero Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] bpf: arsh is not supported in 32 bit alu thus reject it Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] gpio: iop: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] ALSA: seq: Make ioctls race-free Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] igb: Free IRQs when device is hotplugged Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] KVM: x86: emulator: Return to user-mode on L1 CPL=0 emulation failure Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] KVM: x86: Don't re-execute instruction when not passing CR2 value Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] KVM: X86: Fix operand/address-size during instruction decoding Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] cpufreq: Add Loongson machine dependencies Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] bcache: check return value of register_shrinker Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] drm/amdkfd: Fix SDMA oversubsription handling Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] openvswitch: fix the incorrect flow action alloc size Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] mac80211: fix the update of path metric for RANN frame Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] btrfs: fix deadlock when writing out space cache Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] KVM: VMX: Fix rflags cache during vCPU reset Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] xen-netfront: remove warning when unloading module Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] nfsd: CLOSE SHOULD return the invalid special stateid for NFSv4.x (x>0) Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] grace: replace BUG_ON by WARN_ONCE in exit_net hook Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] nfsd: check for use of the closed special stateid Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] hwmon: (pmbus) Use 64bit math for DIRECT format values Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] net: ethernet: xilinx: Mark XILINX_LL_TEMAC broken on 64-bit Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] quota: Check for register_shrinker() failure Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] drm/omap: Fix error handling path in 'omap_dmm_probe()' Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] SUNRPC: Allow connect to return EHOSTUNREACH Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] scsi: ufs: ufshcd: fix potential NULL pointer dereference in ufshcd_config_vreg Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] xfs: ubsan fixes Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] media: usbtv: add a new usbid Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] staging: rtl8188eu: Fix incorrect response to SIOCGIWESSID Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] usb: gadget: don't dereference g until after it has been null checked Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] usb: option: Add support for FS040U modem Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] USB: serial: pl2303: new device id for Chilitag Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] CDC-ACM: apply quirk for card reader Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] USB: cdc-acm: Do not log urb submission errors on disconnect Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] USB: serial: io_edgeport: fix possible sleep-in-atomic Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] usbip: list: don't list devices attached to vhci_hcd Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] usbip: prevent bind loops on " Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] usb: f_fs: Prevent gadget unbind if it is already unbound Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] USB: serial: simple: add Motorola Tetra driver Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] spi: imx: do not access registers while clocks disabled Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] usb: uas: unconditionally bring back host after reset Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/bpf/jit: Disable classic BPF JIT on ppc64le Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64: Fix flush_(d|i)cache_range() called from modules Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc: Fix VSX enabling/flushing to also test MSR_FP and MSR_VEC Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc: Simplify module TOC handling Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64: Add macros for annotating the destination of rfid/hrfid Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/pseries: Add H_GET_CPU_CHARACTERISTICS flags & wrapper Sasha Levin
2018-03-02  3:08   ` Michael Ellerman
2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64: Convert the syscall exit path to use RFI_TO_USER/KERNEL Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64: Convert fast_exception_return " Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Convert slb_miss_common " Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Add support for RFI flush of L1-D cache Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Support disabling RFI flush with no_rfi_flush and nopti Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/pseries: Query hypervisor for RFI flush settings Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Wire up cpu_show_meltdown() Sasha Levin
2018-03-02  3:20   ` Michael Ellerman
2018-03-01 15:25 ` [added to the 4.1 stable tree] powerpc/64s: Allow control of RFI flush via debugfs Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] ASoC: pcm512x: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] drm: rcar-du: Use the VBK interrupt for vblank events Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] ip6mr: fix stale iterator Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] net: igmp: add a missing rcu locking section Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] qlcnic: fix deadlock bug Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] r8169: fix RTL8168EP take too long to complete driver initialization Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] tcp: release sk_frag.page in tcp_disconnect Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] vhost_net: stop device during reset owner Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] media: soc_camera: soc_scale_crop: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] KEYS: encrypted: fix buffer overread in valid_master_desc() Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] cifs: Fix autonegotiate security settings mismatch Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] cifs: Fix missing put_xid in cifs_file_strict_mmap Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] dmaengine: dmatest: fix container_of member in dmatest_callback Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] CIFS: zero sensitive data when freeing Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] posix-timer: Properly check sigevent->sigev_notify Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] dccp: CVE-2017-8824: use-after-free in DCCP code Sasha Levin
2018-03-01 15:25 ` [added to the 4.1 stable tree] media: dvb-usb-v2: lmedm04: Improve logic checking of warm start Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] mtd: cfi: convert inline functions to macros Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] media: dvb-usb-v2: lmedm04: move ts2020 attach to dm04_lme2510_tuner Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] mtd: nand: Fix nand_do_read_oob() return value Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] NFS: Add a cond_resched() to nfs_commit_release_pages() Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] mtd: nand: sunxi: Fix ECC strength choice Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] NFS: commit direct writes even if they fail partially Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] kernfs: fix regression in kernfs_fop_write caused by wrong type Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] NFS: reject request for id_legacy key without auxdata Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ahci: Add PCI ids for Intel Bay Trail, Cherry Trail and Apollo Lake AHCI Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ahci: Add Intel Cannon Lake PCH-H PCI ID Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] crypto: hash - introduce crypto_hash_alg_has_setkey() Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] crypto: cryptd - pass through absence of ->setkey() Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] nsfs: mark dentry with DCACHE_RCUACCESS Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] media: v4l2-ioctl.c: don't copy back the result for -ENOTTY Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: add missing VIDIOC_PREPARE_BUF Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: fix ctrl_is_pointer Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: make ctrl_is_pointer work for subdevs Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] arm: KVM: Fix SMCCC handling of unimplemented SMC/HVC calls Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] media: v4l2-compat-ioctl32.c: don't copy back the result for certain errors Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] media: cxusb, dib0700: ignore XC2028_I2C_FLUSH Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] KVM: nVMX: Fix races when sending nested PI while dest enters/leaves L2 Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] kernel/async.c: revert "async: simplify lowest_in_progress()" Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] Revert "Bluetooth: btusb: fix QCA Rome suspend/resume" Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] Bluetooth: btsdio: Do not bind to non-removable BCM43341 Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] signal/openrisc: Fix do_unaligned_access to send the proper signal Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] alpha: fix crash if pthread_create races with signal delivery Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] signal/sh: Ensure si_signo is initialized in do_divide_error Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] xtensa: fix futex_atomic_cmpxchg_inatomic Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] alpha: fix reboot on Avanti platform Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] EDAC, octeon: Fix an uninitialized variable warning Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] pktcdvd: Fix pkt_setup_dev() error path Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] btrfs: Handle btrfs_set_extent_delalloc failure in fixup worker Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ovl: fix failure to fsync lower dir Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ACPI: sbshc: remove raw pointer from printk() message Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] mn10300/misalignment: Use SIGSEGV SEGV_MAPERR to report a failed user copy Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] PM / devfreq: Propagate error from devfreq_add_device() Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] IB/mlx4: Fix incorrectly releasing steerable UD QPs when have only ETH ports Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] s390: fix handling of -1 in set{,fs}[gu]id16 syscalls Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] arm: spear13xx: Fix dmas cells Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] arm: spear600: Add missing interrupt-parent of rtc Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] arm: spear13xx: Fix spics gpio controller's warning Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] rtc-opal: Fix handling of firmware error codes, prevent busy loops Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] drm/radeon: adjust tested variable Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ext4: save error to disk in __ext4_grp_locked_error() Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] mm: hide a #warning for COMPILE_TEST Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ext4: correct documentation for grpid mount option Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] console/dummy: leave .con_font_get set to NULL Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] video: fbdev: atmel_lcdfb: fix display-timings lookup Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] Btrfs: fix deadlock in run_delalloc_nocow Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] Btrfs: fix crash due to not cleaning up tree log block's dirty bits Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] Btrfs: fix unexpected -EEXIST when creating new inode Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ALSA: usb-audio: Fix UAC2 get_ctl request with a RANGE attribute Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ALSA: usb-audio: add implicit fb quirk for Behringer UFX1204 Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ALSA: hda/realtek: PCI quirk for Fujitsu U7x7 Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ALSA: seq: Fix racy pool initializations Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] mvpp2: fix multicast address filter Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] vfs: don't do RCU lookup of empty pathnames Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] media: r820t: fix r820t_write_reg for KASAN Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ARM: dts: s5pv210: add interrupt-parent for ohci Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] mm,vmscan: Make unregister_shrinker() no-op if register_shrinker() failed Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] cfg80211: check dev_set_name() return value Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] xfrm: check id proto in validate_tmpl() Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] blktrace: fix unlocked registration of tracepoints Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] Provide a function to create a NUL-terminated string from unterminated data Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] selinux: skip bounded transition processing if the policy isn't loaded Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] selinux: ensure the context is NUL terminated in security_context_to_sid_core() Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] netfilter: x_tables: fix int overflow in xt_alloc_table_info() Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] crypto: x86/twofish-3way - Fix %rbp usage Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] netfilter: x_tables: avoid out-of-bounds reads in xt_request_find_{match|target} Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] netfilter: ipt_CLUSTERIP: fix out-of-bounds accesses in clusterip_tg_check() Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] netfilter: on sockopt() acquire sock lock only in the required scope Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] netfilter: xt_RATEEST: acquire xt_rateest_mutex for hash insert Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] net: avoid skb_warn_bad_offload on IS_ERR Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ASoC: ux500: add MODULE_LICENSE tag Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] dn_getsockoptdecnet: move nf_{get/set}sockopt outside sock lock Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] video: fbdev/mmp: add MODULE_LICENSE Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] usbip: keep usbip_device sockfd state in sync with tcp_socket Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] binder: check for binder_thread allocation failure in binder_poll() Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ARM: OMAP2+: Fix SRAM virt to phys translation for save_secure_ram_context Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] usb: build drivers/usb/common/ when USB_SUPPORT is set Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ARM: AM33xx: PRM: Remove am33xx_pwrdm_read_prev_pwrst function Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ARM: dts: am4372: Correct the interrupts_properties of McASP Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ARM: dts: Fix omap4 hang with GPS connected to USB by using wakeupgen Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] perf top: Fix window dimensions change handling Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] perf bench numa: Fixup discontiguous/sparse numa nodes Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] media: s5k6aa: describe some function parameters Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] pinctrl: sunxi: Fix A80 interrupt pin bank Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] scripts/kernel-doc: Don't fail with status != 0 if error encountered with -none Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] ipvlan: Add the skb->mark as flow4's member to lookup route Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] s390/dasd: prevent prefix I/O error Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] powerpc/perf: Fix oops when grouping different pmu events Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] gianfar: fix a flooded alignment reports because of padding issue Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] net_sched: red: Avoid illegal values Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] net_sched: red: Avoid devision by zero Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] 509: fix printing uninitialized stack memory when OID is empty Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] btrfs: Fix possible off-by-one in btrfs_search_path_in_tree Sasha Levin
2018-03-01 15:26 ` [added to the 4.1 stable tree] clk: fix a panic error caused by accessing NULL pointer Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] spi: sun4i: disable clocks in the remove function Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] xfrm: Fix stack-out-of-bounds with misconfigured transport mode policies Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] dmaengine: jz4740: disable/unprepare clk if probe fails Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] mm/early_ioremap: Fix boot hang with earlyprintk=efi,keep Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/mm/kmmio: Fix mmiotrace for page unaligned addresses Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] xen: XEN_ACPI_PROCESSOR is Dom0-only Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] hippi: Fix a Fix a possible sleep-in-atomic bug in rr_close Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] isdn: icn: remove a #warning Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] virtio_balloon: prevent uninitialized variable use Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] vmxnet3: prevent building with 64K pages Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] gpio: intel-mid: Fix build warning when !CONFIG_PM Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] platform/x86: intel_mid_thermal: Fix suspend handlers unused warning Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: advansys: fix build warning for PCI=n Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] video: fbdev: via: remove possibly unused variables Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/ras/inject: Make it depend on X86_LOCAL_APIC=y Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/build: Silence the build with "make -s" Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] x86: add MULTIUSER dependency for KVM Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: advansys: fix uninitialized data access Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] ALSA: hda/ca0132 - fix possible NULL pointer use Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] reiserfs: avoid a -Wmaybe-uninitialized warning Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] thermal: spear: use __maybe_unused for PM functions Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/boot: Avoid warning for zero-filling .bss Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: sim710: fix build warning Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] drivers/net: fix eisa_driver probe section mismatch Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] profile: hide unused functions when !CONFIG_PROC_FS Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] dpt_i2o: fix build warning Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] md: avoid warning for 32-bit sector_t Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] mtd: ichxrom: maybe-uninitialized with gcc-4.9 Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] mtd: maps: add __init attribute Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] mptfusion: hide unused seq_mpt_print_ioc_summary function Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: fdomain: drop fdomain_pci_tbl when built-in Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] video: fbdev: sis: remove unused variable Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] staging: ste_rmi4: avoid unused function warnings Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] fbdev: sis: enforce selection of at least one backend Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: mvumi: use __maybe_unused to hide pm functions Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] video: Use bool instead int pointer for get_opt_bool() argument Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] [media] pwc: hide unused label Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] SCSI: initio: remove duplicate module device table Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] usb: musb/ux500: remove duplicate check for dma_is_compatible Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] tty: hvc_xen: hide xen_console_remove when unused Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] target/user: Fix cast from pointer to phys_addr_t Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] driver-core: use 'dev' argument in dev_dbg_ratelimited stub Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] fbdev: auo_k190x: avoid unused function warnings Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] amd-xgbe: Fix unused suspend handlers build warning Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] mtd: sh_flctl: pass FIFO as physical address Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] mtd: cfi: enforce valid geometry configuration Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] fbdev: s6e8ax0: avoid unused function warnings Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] USB: cdc_subset: only build when one driver is enabled Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/platform/olpc: Fix resume handler build warning Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] ipv4: ipconfig: avoid unused ic_proto_used symbol Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] tlan: avoid unused label with PCI=n Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] tc1100-wmi: fix build warning when CONFIG_PM not enabled Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] iio: adc: axp288: remove redundant duplicate const on axp288_adc_channels Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] tty: cyclades: cyz_interrupt is only used for PCI Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] i2c: remove __init from i2c_register_board_info() Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] Input: tca8418_keypad - hide gcc-4.9 -Wmaybe-uninitialized warning Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] drm/nouveau: hide gcc-4.9 -Wmaybe-uninitialized Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] [media] go7007: add MEDIA_CAMERA_SUPPORT dependency Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] [media] em28xx: only use mt9v011 if camera support is enabled Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] ISDN: eicon: reduce stack size of sig_ind function Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] [media] hdpvr: hide unused variable Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] drm/gma500: Sanity-check pipe index Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] [media] v4l: remove MEDIA_TUNER dependency for VIDEO_TUNER Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] cw1200: fix bogus maybe-uninitialized warning Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] perf/x86: Shut up false-positive -Wmaybe-uninitialized warning Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] net: hp100: remove unnecessary #ifdefs Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] gpio: xgene: mark PM functions as __maybe_unused Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] ncpfs: fix unused variable warning Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] netlink: fix nla_put_{u8,u16,u32} for KASAN Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] drm/gma500: remove helper function Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] dell-wmi, dell-laptop: depends DMI Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] array_index_nospec: Sanitize speculative array de-references Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] Documentation: Document array_index_nospec Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] x86: Implement array_index_mask_nospec Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/get_user: Use pointer masking to limit speculation Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] vfs, fdtable: Prevent bounds-check bypass via speculative execution Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] nl80211: Sanitize array index in parse_txq_params Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/paravirt: Remove 'noreplace-paravirt' cmdline option Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/kvm: Update spectre-v1 mitigation Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/retpoline: Avoid retpolines for built-in __init functions Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] KVM: nVMX: kmap() can't fail Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] crypto: s5p-sss - Fix kernel Oops in AES-ECB mode Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] KVM: nVMX: vmx_complete_nested_posted_interrupt() can't fail Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] netfilter: drop outermost socket lock in getsockopt() Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] scsi: ibmvfc: fix misdefined reserved field in ibmvfc_fcp_rsp_info Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] PCI: keystone: Fix interrupt-controller-node lookup Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] cfg80211: fix cfg80211_beacon_dup Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] iio: buffer: check if a buffer has been set up when poll is called Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] iio: adis_lib: Initialize trigger before requesting interrupt Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] x86/oprofile: Fix bogus GCC-8 warning in nmi_setup() Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] irqchip/gic-v3: Use wmb() instead of smb_wmb() in gic_raise_softirq() Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] usb: ohci: Proper handling of ed_rm_list to handle race condition between usb_kill_urb() and finish_unlinks() Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] arm64: Disable unhandled signal log messages by default Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] Add delay-init quirk for Corsair K70 RGB keyboards Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] usb: dwc3: gadget: Set maxpacket size for ep0 IN Sasha Levin
2018-03-01 15:27 ` [added to the 4.1 stable tree] usb: ldusb: add PIDs for new CASSY devices supported by this driver Sasha Levin
2018-03-01 15:28 ` [added to the 4.1 stable tree] usb: renesas_usbhs: missed the "running" flag in usb_dmac with rx path Sasha Levin
2018-03-01 15:28 ` [added to the 4.1 stable tree] usb: gadget: f_fs: Process all descriptors during bind Sasha Levin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.