mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: alexander.levin@verizon.com
To: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"stable@vger.kernel.org" <stable@vger.kernel.org>
Cc: Jon Medhurst <tixy@linaro.org>, alexander.levin@verizon.com
Subject: [PATCH AUTOSEL for 4.4 04/59] arm: kprobes: Align stack to 8-bytes in test code
Date: Wed, 13 Dec 2017 01:58:26 +0000	[thread overview]
Message-ID: <20171213015817.6950-4-alexander.levin@verizon.com> (raw)
In-Reply-To: <20171213015817.6950-1-alexander.levin@verizon.com>

From: Jon Medhurst <tixy@linaro.org>

[ 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@verizon.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.11.0

  parent reply	other threads:[~2017-12-13  2:01 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-13  1:58 [PATCH AUTOSEL for 4.4 01/59] ALSA: hda - add support for docking station for HP 820 G2 alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 02/59] ALSA: hda - add support for docking station for HP 840 G3 alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 06/59] r8152: fix the list rx_done may be used without initialization alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 03/59] arm: kprobes: Fix the return address of multiple kretprobes alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 05/59] cpuidle: Validate cpu_dev in cpuidle_add_sysfs() alexander.levin
2017-12-13  1:58 ` alexander.levin [this message]
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 10/59] net: qmi_wwan: Add USB IDs for MDM6600 modem on Motorola Droid 4 alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 08/59] sch_dsmark: fix invalid skb_cow() usage alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 09/59] bna: integer overflow bug in debugfs alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 07/59] crypto: deadlock between crypto_alg_sem/rtnl_mutex/genl_mutex alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 12/59] usb: gadget: udc: remove pointer dereference after free alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 13/59] netfilter: nfnl_cthelper: fix runtime expectation policy updates alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 14/59] netfilter: nfnl_cthelper: Fix memory leak alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 11/59] usb: gadget: f_uvc: Sanity check wMaxPacketSize for SuperSpeed alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 16/59] pinctrl: st: add irq_request/release_resources callbacks alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 17/59] scsi: lpfc: Fix PT2PT PRLI reject alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 15/59] inet: frag: release spinlock before calling icmp_send() alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 18/59] KVM: x86: correct async page present tracepoint alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 20/59] ARM: dts: ti: fix PCI bus dtc warnings alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 19/59] KVM: VMX: Fix enable VPID conditions alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 22/59] i2c: mux: pca954x: Add missing pca9546 definition to chip_desc alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 24/59] r8152: prevent the driver from transmitting packets with carrier off alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 21/59] hwmon: (asus_atk0110) fix uninitialized data access alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 23/59] HID: xinmo: fix for out of range for THT 2P arcade controller alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 25/59] s390/qeth: no ETH header for outbound AF_IUCV alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 28/59] i40e: Do not enable NAPI on q_vectors that have no rings alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 26/59] bna: avoid writing uninitialized data into hw registers alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 27/59] net: Do not allow negative values for busy_read and busy_poll sysctl interfaces alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 29/59] RDMA/iser: Fix possible mr leak on device removal event alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 31/59] netfilter: nfnl_cthelper: fix a race when walk the nf_ct_helper_hash table alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 30/59] irda: vlsi_ir: fix check for DMA mapping errors alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 32/59] netfilter: nf_nat_snmp: Fix panic when snmp_trap_helper fails to register alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 35/59] isdn: kcapi: avoid uninitialized data alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 33/59] ARM: dts: am335x-evmsk: adjust mmc2 param to allow suspend alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 34/59] KVM: pci-assign: do not map smm memory slot pages in vt-d page tables alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 36/59] xhci: plat: Register shutdown for xhci_plat alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 39/59] cpuidle: powernv: Pass correct drv->cpumask for registration alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 37/59] netfilter: nfnetlink_queue: fix secctx memory leak alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 38/59] ARM: dma-mapping: disallow dma_get_sgtable() for non-kernel managed memory alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 41/59] backlight: pwm_bl: Fix overflow condition alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 42/59] crypto: crypto4xx - increase context and scatter ring buffer elements alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 40/59] bnxt_en: Fix NULL pointer dereference in reopen failure path alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 43/59] rtc: pl031: make interrupt optional alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 45/59] PCI: Avoid bus reset if bridge itself is broken alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 46/59] scsi: cxgb4i: fix Tx skb leak alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 44/59] net: phy: at803x: Change error to EINVAL for invalid MAC alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 47/59] scsi: mpt3sas: Fix IO error occurs on pulling out a drive from RAID1 volume created on two SATA drive alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 48/59] PCI: Create SR-IOV virtfn/physfn links before attaching driver alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 49/59] igb: check memory allocation failure alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 50/59] ixgbe: fix use of uninitialized padding alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 51/59] PCI/AER: Report non-fatal errors only to the affected endpoint alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 52/59] percpu: don't forget to free the temporary struct pcpu_alloc_info alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 54/59] scsi: lpfc: Fix secure firmware updates alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 53/59] powerpc/xmon: Avoid tripping SMP hardlockup watchdog alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 55/59] scsi: lpfc: PLOGI failures during NPIV testing alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 57/59] tcp: fix under-evaluated ssthresh in TCP Vegas alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 59/59] cpuidle: fix broadcast control when broadcast can not be entered alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 56/59] fm10k: ensure we process SM mbx when processing VF mbx alexander.levin
2017-12-13  1:58 ` [PATCH AUTOSEL for 4.4 58/59] rtc: set the alarm to the next expiring timer alexander.levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171213015817.6950-4-alexander.levin@verizon.com \
    --to=alexander.levin@verizon.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=tixy@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®