From: glider@google.com
To: Jens Axboe <axboe@kernel.dk>, Andy Lutomirski <luto@kernel.org>,
Vegard Nossum <vegard.nossum@oracle.com>,
Dmitry Vyukov <dvyukov@google.com>,
Marco Elver <elver@google.com>,
Andrey Konovalov <andreyknvl@google.com>,
Christoph Hellwig <hch@lst.de>,
linux-mm@kvack.org
Cc: glider@google.com, viro@zeniv.linux.org.uk,
adilger.kernel@dilger.ca, akpm@linux-foundation.org,
aryabinin@virtuozzo.com, ard.biesheuvel@linaro.org,
arnd@arndb.de, hch@infradead.org, darrick.wong@oracle.com,
davem@davemloft.net, dmitry.torokhov@gmail.com,
ebiggers@google.com, edumazet@google.com, ericvh@gmail.com,
gregkh@linuxfoundation.org, harry.wentland@amd.com,
herbert@gondor.apana.org.au, iii@linux.ibm.com, mingo@elte.hu,
jasowang@redhat.com, m.szyprowski@samsung.com,
mark.rutland@arm.com, martin.petersen@oracle.com,
schwidefsky@de.ibm.com, willy@infradead.org, mst@redhat.com,
mhocko@suse.com, monstr@monstr.eu, pmladek@suse.com, cai@lca.pw,
rdunlap@infradead.org, robin.murphy@arm.com,
sergey.senozhatsky@gmail.com, rostedt@goodmis.org,
tiwai@suse.com, tytso@mit.edu, tglx@linutronix.de,
gor@linux.ibm.com, wsa@the-dreams.de
Subject: [PATCH v5 16/38] kmsan: x86/asm: softirq: add KMSAN IRQ entry hooks
Date: Wed, 25 Mar 2020 17:12:27 +0100 [thread overview]
Message-ID: <20200325161249.55095-17-glider@google.com> (raw)
In-Reply-To: <20200325161249.55095-1-glider@google.com>
Add assembly helpers to entry_64.S that invoke hooks from kmsan_entry.c and
notify KMSAN about interrupts.
Also call these hooks from kernel/softirq.c
This is needed to switch between several KMSAN contexts holding function
parameter metadata.
Signed-off-by: Alexander Potapenko <glider@google.com>
To: Alexander Potapenko <glider@google.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Vegard Nossum <vegard.nossum@oracle.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Marco Elver <elver@google.com>
Cc: Andrey Konovalov <andreyknvl@google.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: linux-mm@kvack.org
---
v4:
- moved softirq changes to this patch
Change-Id: I3037d51672fe69d09e588b27adb2d9fdc6ad3a7d
---
arch/x86/entry/entry_64.S | 16 ++++++++++++++++
kernel/softirq.c | 5 +++++
2 files changed, 21 insertions(+)
diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
index 0e9504fabe526..03f5a32b0af4d 100644
--- a/arch/x86/entry/entry_64.S
+++ b/arch/x86/entry/entry_64.S
@@ -35,6 +35,7 @@
#include <asm/asm.h>
#include <asm/smap.h>
#include <asm/pgtable_types.h>
+#include <asm/kmsan.h>
#include <asm/export.h>
#include <asm/frame.h>
#include <asm/nospec-branch.h>
@@ -575,6 +576,7 @@ SYM_CODE_START(interrupt_entry)
1:
ENTER_IRQ_STACK old_rsp=%rdi save_ret=1
+ KMSAN_INTERRUPT_ENTER
/* We entered an interrupt context - irqs are off: */
TRACE_IRQS_OFF
@@ -604,12 +606,14 @@ SYM_CODE_START_LOCAL(common_interrupt)
addq $-0x80, (%rsp) /* Adjust vector to [-256, -1] range */
call interrupt_entry
UNWIND_HINT_REGS indirect=1
+ KMSAN_UNPOISON_PT_REGS
call do_IRQ /* rdi points to pt_regs */
/* 0(%rsp): old RSP */
ret_from_intr:
DISABLE_INTERRUPTS(CLBR_ANY)
TRACE_IRQS_OFF
+ KMSAN_INTERRUPT_EXIT
LEAVE_IRQ_STACK
testb $3, CS(%rsp)
@@ -801,6 +805,7 @@ SYM_CODE_START(\sym)
.Lcommon_\sym:
call interrupt_entry
UNWIND_HINT_REGS indirect=1
+ KMSAN_UNPOISON_PT_REGS
call \do_sym /* rdi points to pt_regs */
jmp ret_from_intr
SYM_CODE_END(\sym)
@@ -908,15 +913,18 @@ apicinterrupt IRQ_WORK_VECTOR irq_work_interrupt smp_irq_work_interrupt
.if \shift_ist != -1
subq $\ist_offset, CPU_TSS_IST(\shift_ist)
+ KMSAN_IST_ENTER(\shift_ist)
.endif
.if \read_cr2
movq %r12, %rdx /* Move CR2 into 3rd argument */
.endif
+ KMSAN_UNPOISON_PT_REGS
call \do_sym
.if \shift_ist != -1
+ KMSAN_IST_EXIT(\shift_ist)
addq $\ist_offset, CPU_TSS_IST(\shift_ist)
.endif
@@ -1079,7 +1087,9 @@ SYM_FUNC_START(do_softirq_own_stack)
pushq %rbp
mov %rsp, %rbp
ENTER_IRQ_STACK regs=0 old_rsp=%r11
+ KMSAN_SOFTIRQ_ENTER
call __do_softirq
+ KMSAN_SOFTIRQ_EXIT
LEAVE_IRQ_STACK regs=0
leaveq
ret
@@ -1466,9 +1476,12 @@ SYM_CODE_START(nmi)
* done with the NMI stack.
*/
+ KMSAN_NMI_ENTER
movq %rsp, %rdi
movq $-1, %rsi
+ KMSAN_UNPOISON_PT_REGS
call do_nmi
+ KMSAN_NMI_EXIT
/*
* Return back to user mode. We must *not* do the normal exit
@@ -1678,10 +1691,13 @@ end_repeat_nmi:
call paranoid_entry
UNWIND_HINT_REGS
+ KMSAN_NMI_ENTER
/* paranoidentry do_nmi, 0; without TRACE_IRQS_OFF */
movq %rsp, %rdi
movq $-1, %rsi
+ KMSAN_UNPOISON_PT_REGS
call do_nmi
+ KMSAN_NMI_EXIT
/* Always restore stashed CR3 value (see paranoid_entry) */
RESTORE_CR3 scratch_reg=%r15 save_reg=%r14
diff --git a/kernel/softirq.c b/kernel/softirq.c
index 0427a86743a46..98c5f4062cbfe 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -11,6 +11,7 @@
#include <linux/export.h>
#include <linux/kernel_stat.h>
+#include <linux/kmsan.h>
#include <linux/interrupt.h>
#include <linux/init.h>
#include <linux/mm.h>
@@ -370,7 +371,9 @@ static inline void invoke_softirq(void)
* it is the irq stack, because it should be near empty
* at this stage.
*/
+ kmsan_context_enter();
__do_softirq();
+ kmsan_context_exit();
#else
/*
* Otherwise, irq_exit() is called on the task stack that can
@@ -600,7 +603,9 @@ static void run_ksoftirqd(unsigned int cpu)
* We can safely run softirq on inline stack, as we are not deep
* in the task stack here.
*/
+ kmsan_context_enter();
__do_softirq();
+ kmsan_context_exit();
local_irq_enable();
cond_resched();
return;
--
2.25.1.696.g5e7596f4ac-goog
next prev parent reply other threads:[~2020-03-25 16:13 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-25 16:12 [PATCH v5 00/38] Add KernelMemorySanitizer infrastructure glider
2020-03-25 16:12 ` [PATCH v5 01/38] stackdepot: reserve 5 extra bits in depot_stack_handle_t glider
2020-03-30 13:36 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 02/38] kmsan: add ReST documentation glider
2020-03-30 14:32 ` Andrey Konovalov
2020-04-13 14:45 ` Alexander Potapenko
2020-03-25 16:12 ` [PATCH v5 03/38] kmsan: gfp: introduce __GFP_NO_KMSAN_SHADOW glider
2020-03-25 16:19 ` Michal Hocko
2020-03-25 17:26 ` Alexander Potapenko
2020-03-25 17:40 ` Alexander Potapenko
2020-03-25 17:49 ` Matthew Wilcox
2020-03-25 18:03 ` Alexander Potapenko
2020-03-25 18:09 ` Matthew Wilcox
2020-03-25 18:30 ` Alexander Potapenko
2020-03-25 18:43 ` Michal Hocko
2020-03-25 18:40 ` Michal Hocko
2020-03-25 18:38 ` Michal Hocko
2020-03-27 12:20 ` Alexander Potapenko
2020-04-25 9:45 ` Alexander Potapenko
2020-03-25 17:43 ` Michal Hocko
2020-03-25 16:12 ` [PATCH v5 04/38] kmsan: introduce __no_sanitize_memory and __SANITIZE_MEMORY__ glider
2020-03-30 13:37 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 05/38] kmsan: reduce vmalloc space glider
2020-03-30 13:48 ` Andrey Konovalov
2020-04-14 14:21 ` Alexander Potapenko
2020-04-23 19:14 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 06/38] kmsan: add KMSAN runtime core glider
2020-03-25 16:12 ` [PATCH v5 07/38] kmsan: KMSAN compiler API implementation glider
2020-03-25 16:12 ` [PATCH v5 08/38] kmsan: add KMSAN hooks for kernel subsystems glider
2020-03-25 16:12 ` [PATCH v5 09/38] kmsan: stackdepot: don't allocate KMSAN metadata for stackdepot glider
2020-04-23 19:22 ` Andrey Konovalov
2020-04-25 9:46 ` Alexander Potapenko
2020-03-25 16:12 ` [PATCH v5 10/38] kmsan: define READ_ONCE_NOCHECK() glider
2020-04-23 19:20 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 11/38] kmsan: make READ_ONCE_TASK_STACK() return initialized values glider
2020-04-23 19:15 ` Andrey Konovalov
2020-04-23 19:18 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 12/38] kmsan: x86: sync metadata pages on page fault glider
2020-04-23 19:15 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 13/38] kmsan: add tests for KMSAN glider
2020-04-23 19:02 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 14/38] crypto: kmsan: disable accelerated configs under KMSAN glider
2020-04-23 18:50 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 15/38] kmsan: x86: disable UNWINDER_ORC " glider
2020-04-14 17:52 ` Andrey Konovalov
2020-03-25 16:12 ` glider [this message]
2020-04-14 17:54 ` [PATCH v5 16/38] kmsan: x86/asm: softirq: add KMSAN IRQ entry hooks Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 17/38] kmsan: disable KMSAN instrumentation for certain kernel parts glider
2020-04-14 17:56 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 18/38] kmsan: mm: call KMSAN hooks from SLUB code glider
2020-03-25 16:12 ` [PATCH v5 19/38] kmsan: mm: maintain KMSAN metadata for page operations glider
2020-03-25 16:12 ` [PATCH v5 20/38] kmsan: handle memory sent to/from USB glider
2020-04-14 14:46 ` Andrey Konovalov
2020-04-14 15:50 ` Alan Stern
2020-04-14 17:48 ` Andrey Konovalov
2020-04-14 20:45 ` Alan Stern
2020-04-27 13:59 ` Alexander Potapenko
2020-03-25 16:12 ` [PATCH v5 21/38] kmsan: handle task creation and exiting glider
2020-03-25 16:12 ` [PATCH v5 22/38] kmsan: net: check the value of skb before sending it to the network glider
2020-04-27 14:02 ` Alexander Potapenko
2020-03-25 16:12 ` [PATCH v5 23/38] kmsan: printk: treat the result of vscnprintf() as initialized glider
2020-04-14 14:37 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 24/38] kmsan: disable instrumentation of certain functions glider
2020-04-14 15:04 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 25/38] kmsan: unpoison |tlb| in arch_tlb_gather_mmu() glider
2020-04-08 16:07 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 26/38] kmsan: use __msan_ string functions where possible glider
2020-03-25 16:12 ` [PATCH v5 27/38] kmsan: hooks for copy_to_user() and friends glider
2020-03-25 16:12 ` [PATCH v5 28/38] kmsan: init: call KMSAN initialization routines glider
2020-04-08 16:04 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 29/38] kmsan: enable KMSAN builds glider
2020-04-14 14:56 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 30/38] kmsan: handle /dev/[u]random glider
2020-04-08 16:03 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 31/38] kmsan: virtio: check/unpoison scatterlist in vring_map_one_sg() glider
2020-03-25 16:12 ` [PATCH v5 32/38] kmsan: disable strscpy() optimization under KMSAN glider
2020-04-08 16:00 ` Andrey Konovalov
2020-04-13 14:19 ` Alexander Potapenko
2020-04-13 15:32 ` Steven Rostedt
2020-04-13 16:16 ` Alexander Potapenko
2020-03-25 16:12 ` [PATCH v5 33/38] kmsan: add iomap support glider
2020-04-08 15:57 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 34/38] kmsan: dma: unpoison memory mapped by dma_direct_map_page() glider
2020-03-25 16:19 ` Christoph Hellwig
2020-03-27 17:03 ` Alexander Potapenko
2020-03-27 17:06 ` Christoph Hellwig
2020-03-27 18:46 ` Alexander Potapenko
2020-03-28 8:52 ` Christoph Hellwig
2020-04-14 15:26 ` Alexander Potapenko
2020-03-25 16:12 ` [PATCH v5 35/38] kmsan: disable physical page merging in biovec glider
2020-03-25 16:12 ` [PATCH v5 36/38] x86: kasan: kmsan: support CONFIG_GENERIC_CSUM on x86, enable it for KASAN/KMSAN glider
2020-04-08 15:53 ` Andrey Konovalov
2020-03-25 16:12 ` [PATCH v5 37/38] kmsan: x86/uprobes: unpoison regs in arch_uprobe_exception_notify() glider
2020-03-25 16:12 ` [PATCH v5 38/38] kmsan: block: skip bio block merging logic for KMSAN glider
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=20200325161249.55095-17-glider@google.com \
--to=glider@google.com \
--cc=adilger.kernel@dilger.ca \
--cc=akpm@linux-foundation.org \
--cc=andreyknvl@google.com \
--cc=ard.biesheuvel@linaro.org \
--cc=arnd@arndb.de \
--cc=aryabinin@virtuozzo.com \
--cc=axboe@kernel.dk \
--cc=cai@lca.pw \
--cc=darrick.wong@oracle.com \
--cc=davem@davemloft.net \
--cc=dmitry.torokhov@gmail.com \
--cc=dvyukov@google.com \
--cc=ebiggers@google.com \
--cc=edumazet@google.com \
--cc=elver@google.com \
--cc=ericvh@gmail.com \
--cc=gor@linux.ibm.com \
--cc=gregkh@linuxfoundation.org \
--cc=harry.wentland@amd.com \
--cc=hch@infradead.org \
--cc=hch@lst.de \
--cc=herbert@gondor.apana.org.au \
--cc=iii@linux.ibm.com \
--cc=jasowang@redhat.com \
--cc=linux-mm@kvack.org \
--cc=luto@kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=mark.rutland@arm.com \
--cc=martin.petersen@oracle.com \
--cc=mhocko@suse.com \
--cc=mingo@elte.hu \
--cc=monstr@monstr.eu \
--cc=mst@redhat.com \
--cc=pmladek@suse.com \
--cc=rdunlap@infradead.org \
--cc=robin.murphy@arm.com \
--cc=rostedt@goodmis.org \
--cc=schwidefsky@de.ibm.com \
--cc=sergey.senozhatsky@gmail.com \
--cc=tglx@linutronix.de \
--cc=tiwai@suse.com \
--cc=tytso@mit.edu \
--cc=vegard.nossum@oracle.com \
--cc=viro@zeniv.linux.org.uk \
--cc=willy@infradead.org \
--cc=wsa@the-dreams.de \
/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 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.