Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756181AbcKVVOG (ORCPT ); Tue, 22 Nov 2016 16:14:06 -0500 Received: from mail-io0-f177.google.com ([209.85.223.177]:36622 "EHLO mail-io0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753523AbcKVVOE (ORCPT ); Tue, 22 Nov 2016 16:14:04 -0500 MIME-Version: 1.0 In-Reply-To: <20161122142829.1776129-1-arnd@arndb.de> References: <20161122142829.1776129-1-arnd@arndb.de> From: Kees Cook Date: Tue, 22 Nov 2016 13:14:02 -0800 X-Google-Sender-Auth: wbWntG1XjkP0BEMJCoLnZTpeskM Message-ID: Subject: Re: [PATCH] ARM: fix kmemleak for XIP_KERNEL To: Arnd Bergmann Cc: Russell King , Jakub Kicinski , Catalin Marinas , "linux-s390@vger.kernel.org" , Martin Schwidefsky , Heiko Carstens , Andrew Morton , Chris Brandt , Nicolas Pitre , Chris Metcalf , "linux-arm-kernel@lists.infradead.org" , LKML Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1861 Lines: 55 On Tue, Nov 22, 2016 at 6:28 AM, Arnd Bergmann wrote: > The newly added check for RO_AFTER_INIT_DATA in kmemleak breaks ARM whenever > XIP_KERNEL is enabled: > > mm/kmemleak.o: In function `kmemleak_scan': > kmemleak.c:(.text.kmemleak_scan+0x2e4): undefined reference to `__end_data_ro_after_init' > kmemleak.c:(.text.kmemleak_scan+0x2e8): undefined reference to `__start_data_ro_after_init' > > This adds the start/end symbols for the section even in the case of having > no data in the section, to make the check work while keeping the architecture > specific override in one place. > > Fixes: d7c19b066dcf ("mm: kmemleak: scan .data.ro_after_init") > Signed-off-by: Arnd Bergmann Acked-by: Kees Cook -Kees > --- > The patch causing this was merged late into v4.9-rc, this one should > probably go there as well. > > I assume the same problem exists on s390, but I have not checked that. > --- > arch/arm/kernel/vmlinux-xip.lds.S | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/kernel/vmlinux-xip.lds.S b/arch/arm/kernel/vmlinux-xip.lds.S > index 06c178214629..bf900f5421a1 100644 > --- a/arch/arm/kernel/vmlinux-xip.lds.S > +++ b/arch/arm/kernel/vmlinux-xip.lds.S > @@ -3,8 +3,11 @@ > * Written by Martin Mares > */ > > -/* No __ro_after_init data in the .rodata section - which will always be ro */ > -#define RO_AFTER_INIT_DATA > +/* empty __ro_after_init data in the .rodata section - it will always be ro */ > +#define RO_AFTER_INIT_DATA \ > + __start_data_ro_after_init = .; \ > + __end_data_ro_after_init = .; > + > > #include > #include > -- > 2.9.0 > -- Kees Cook Nexus Security