From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753567AbcJNL0b (ORCPT ); Fri, 14 Oct 2016 07:26:31 -0400 Received: from foss.arm.com ([217.140.101.70]:35030 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751582AbcJNL0X (ORCPT ); Fri, 14 Oct 2016 07:26:23 -0400 Date: Fri, 14 Oct 2016 12:25:57 +0100 From: Will Deacon To: Dmitry Vyukov Cc: rostedt@goodmis.org, mingo@redhat.com, akpm@linux-foundation.org, linux-kernel@vger.kernel.org, ryabinin.a.a@gmail.com, surovegin@google.com, Mark Rutland , Catalin Marinas , Lorenzo Pieralisi , Alexander Potapenko , Ingo Molnar , Thomas Gleixner , "H. Peter Anvin" , Ananth N Mavinakayanahalli , Anil S Keshavamurthy , "David S. Miller" , Masami Hiramatsu , x86@kernel.org, kasan-dev@googlegroups.com Subject: Re: [PATCH v3] kprobes: unpoison stack in jprobe_return() for KASAN Message-ID: <20161014112557.GE8197@arm.com> References: <1476442436-97553-1-git-send-email-dvyukov@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1476442436-97553-1-git-send-email-dvyukov@google.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Oct 14, 2016 at 12:53:56PM +0200, Dmitry Vyukov wrote: > KASAN stack instrumentation poisons stack redzones on function entry > and unpoisons them on function exit. If a function exits abnormally > (e.g. with a longjmp like jprobe_return()), stack redzones are left > poisoned. Later this leads to random KASAN false reports. > > Unpoison stack redzones in the frames we are going to jump over > before doing actual longjmp in jprobe_return(). > > Signed-off-by: Dmitry Vyukov > Cc: Mark Rutland > Cc: Catalin Marinas > Cc: Andrey Ryabinin > Cc: Lorenzo Pieralisi > Cc: Alexander Potapenko > Cc: Will Deacon > Cc: Ingo Molnar > Cc: Andrew Morton > Cc: Thomas Gleixner > Cc: "H. Peter Anvin" > Cc: Ananth N Mavinakayanahalli > Cc: Anil S Keshavamurthy > Cc: "David S. Miller" > Cc: Masami Hiramatsu > Cc: x86@kernel.org > Cc: kasan-dev@googlegroups.com > > -- > > Changes since v1: > - leave kasan_unpoison_remaining_stack() intact > - instead add kasan_unpoison_stack_above_sp_to() > - rename kasan_unpoison_remaining_stack() to kasan_unpoison_task_stack_below() > > Changes since v2: > - fix build by adding return type to kasan_unpoison_stack_above_sp_to > (tested v2 with it, but forgot to git add) I get build warnings with this patch applied and KASAN enabled: mm/kasan/kasan.c: In function ‘kasan_unpoison_task_stack_below’: mm/kasan/kasan.c:82:34: warning: passing argument 2 of ‘__kasan_unpoison_stack’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] __kasan_unpoison_stack(current, watermark); ^~~~~~~~~ mm/kasan/kasan.c:65:13: note: expected ‘void *’ but argument is of type ‘const void *’ static void __kasan_unpoison_stack(struct task_struct *task, void *sp) ^~~~~~~~~~~~~~~~~~~~~~ mm/kasan/kasan.c: In function ‘kasan_unpoison_stack_above_sp_to’: mm/kasan/kasan.c:92:27: error: called object ‘current_stack_pointer’ is not a function or function pointer const void *sp = (void *)current_stack_pointer(); ^~~~~~~~~~~~~~~~~~~~~ In file included from ./include/linux/thread_info.h:54:0, from ./include/asm-generic/preempt.h:4, from ./arch/arm64/include/generated/asm/preempt.h:1, from ./include/linux/preempt.h:59, from ./include/linux/interrupt.h:8, from mm/kasan/kasan.c:20: ./arch/arm64/include/asm/thread_info.h:69:24: note: declared here register unsigned long current_stack_pointer asm ("sp"); Will