]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.4
authorSasha Levin <sashal@kernel.org>
Thu, 11 Jun 2020 17:42:10 +0000 (13:42 -0400)
committerSasha Levin <sashal@kernel.org>
Thu, 11 Jun 2020 17:44:40 +0000 (13:44 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.4/arm-8977-1-ptrace-fix-mask-for-thumb-breakpoint-hook.patch [new file with mode: 0644]
queue-4.4/sched-fair-don-t-numa-balance-for-kthreads.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/arm-8977-1-ptrace-fix-mask-for-thumb-breakpoint-hook.patch b/queue-4.4/arm-8977-1-ptrace-fix-mask-for-thumb-breakpoint-hook.patch
new file mode 100644 (file)
index 0000000..e030889
--- /dev/null
@@ -0,0 +1,53 @@
+From df8da5ef75bcd586cd7ee5c2c7ef0b5564661bca Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 May 2020 19:41:11 +0100
+Subject: ARM: 8977/1: ptrace: Fix mask for thumb breakpoint hook
+
+From: Fredrik Strupe <fredrik@strupe.net>
+
+[ Upstream commit 3866f217aaa81bf7165c7f27362eee5d7919c496 ]
+
+call_undef_hook() in traps.c applies the same instr_mask for both 16-bit
+and 32-bit thumb instructions. If instr_mask then is only 16 bits wide
+(0xffff as opposed to 0xffffffff), the first half-word of 32-bit thumb
+instructions will be masked out. This makes the function match 32-bit
+thumb instructions where the second half-word is equal to instr_val,
+regardless of the first half-word.
+
+The result in this case is that all undefined 32-bit thumb instructions
+with the second half-word equal to 0xde01 (udf #1) work as breakpoints
+and will raise a SIGTRAP instead of a SIGILL, instead of just the one
+intended 16-bit instruction. An example of such an instruction is
+0xeaa0de01, which is unallocated according to Arm ARM and should raise a
+SIGILL, but instead raises a SIGTRAP.
+
+This patch fixes the issue by setting all the bits in instr_mask, which
+will still match the intended 16-bit thumb instruction (where the
+upper half is always 0), but not any 32-bit thumb instructions.
+
+Cc: Oleg Nesterov <oleg@redhat.com>
+Signed-off-by: Fredrik Strupe <fredrik@strupe.net>
+Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/kernel/ptrace.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c
+index d54c53b7ab63..711d854ea13a 100644
+--- a/arch/arm/kernel/ptrace.c
++++ b/arch/arm/kernel/ptrace.c
+@@ -227,8 +227,8 @@ static struct undef_hook arm_break_hook = {
+ };
+ static struct undef_hook thumb_break_hook = {
+-      .instr_mask     = 0xffff,
+-      .instr_val      = 0xde01,
++      .instr_mask     = 0xffffffff,
++      .instr_val      = 0x0000de01,
+       .cpsr_mask      = PSR_T_BIT,
+       .cpsr_val       = PSR_T_BIT,
+       .fn             = break_trap,
+-- 
+2.25.1
+
diff --git a/queue-4.4/sched-fair-don-t-numa-balance-for-kthreads.patch b/queue-4.4/sched-fair-don-t-numa-balance-for-kthreads.patch
new file mode 100644 (file)
index 0000000..181f71f
--- /dev/null
@@ -0,0 +1,55 @@
+From 8f0805566f6f795c3ba0f267eba78d200dc88ecb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 26 May 2020 09:38:31 -0600
+Subject: sched/fair: Don't NUMA balance for kthreads
+
+From: Jens Axboe <axboe@kernel.dk>
+
+[ Upstream commit 18f855e574d9799a0e7489f8ae6fd8447d0dd74a ]
+
+Stefano reported a crash with using SQPOLL with io_uring:
+
+  BUG: kernel NULL pointer dereference, address: 00000000000003b0
+  CPU: 2 PID: 1307 Comm: io_uring-sq Not tainted 5.7.0-rc7 #11
+  RIP: 0010:task_numa_work+0x4f/0x2c0
+  Call Trace:
+   task_work_run+0x68/0xa0
+   io_sq_thread+0x252/0x3d0
+   kthread+0xf9/0x130
+   ret_from_fork+0x35/0x40
+
+which is task_numa_work() oopsing on current->mm being NULL.
+
+The task work is queued by task_tick_numa(), which checks if current->mm is
+NULL at the time of the call. But this state isn't necessarily persistent,
+if the kthread is using use_mm() to temporarily adopt the mm of a task.
+
+Change the task_tick_numa() check to exclude kernel threads in general,
+as it doesn't make sense to attempt ot balance for kthreads anyway.
+
+Reported-by: Stefano Garzarella <sgarzare@redhat.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Acked-by: Peter Zijlstra <peterz@infradead.org>
+Link: https://lore.kernel.org/r/865de121-8190-5d30-ece5-3b097dc74431@kernel.dk
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/sched/fair.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
+index 0daf4a40a985..971e31e47bfd 100644
+--- a/kernel/sched/fair.c
++++ b/kernel/sched/fair.c
+@@ -2325,7 +2325,7 @@ void task_tick_numa(struct rq *rq, struct task_struct *curr)
+       /*
+        * We don't care about NUMA placement if we don't have memory.
+        */
+-      if (!curr->mm || (curr->flags & PF_EXITING) || work->next != work)
++      if ((curr->flags & (PF_EXITING | PF_KTHREAD)) || work->next != work)
+               return;
+       /*
+-- 
+2.25.1
+
index 115a5c2ec78b0d0ffb7b956ec110c8ffec95b637..4b4c39fcf3df33e5e4e4b1951accfebab80eb6f5 100644 (file)
@@ -4,3 +4,5 @@ scsi-return-correct-blkprep-status-code-in-case-scsi_init_io-fails.patch
 net-phy-marvell-limit-88m1101-autoneg-errata-to-88e1145-as-well.patch
 pwm-fsl-ftm-use-flat-regmap-cache.patch
 igb-improve-handling-of-disconnected-adapters.patch
+arm-8977-1-ptrace-fix-mask-for-thumb-breakpoint-hook.patch
+sched-fair-don-t-numa-balance-for-kthreads.patch