summaryrefslogtreecommitdiff
path: root/arch/arm/mach-ixp4xx
diff options
context:
space:
mode:
authorFredrik Strupe <fredrik@strupe.net>2020-05-18 21:41:11 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-06-20 11:24:08 +0300
commitd95c626d0b89ddbd223d210cafa07b38e53d9898 (patch)
tree06016134105fd22b807d0d8f8868415b352656ce /arch/arm/mach-ixp4xx
parentadbbd088ab97077fa0529740ec43185c7fb7cdd5 (diff)
downloadlinux-d95c626d0b89ddbd223d210cafa07b38e53d9898.tar.xz
ARM: 8977/1: ptrace: Fix mask for thumb breakpoint hook
[ 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>
Diffstat (limited to 'arch/arm/mach-ixp4xx')
0 files changed, 0 insertions, 0 deletions