From patchwork Fri Oct 9 09:32:18 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrey Ryabinin X-Patchwork-Id: 7360241 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 7E359BEEA4 for ; Fri, 9 Oct 2015 09:34:16 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 8F446204DE for ; Fri, 9 Oct 2015 09:34:15 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 43222203C4 for ; Fri, 9 Oct 2015 09:34:14 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZkU2R-0008Ly-07; Fri, 09 Oct 2015 09:32:31 +0000 Received: from mail-lb0-x233.google.com ([2a00:1450:4010:c04::233]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZkU2N-0008Fd-Md for linux-arm-kernel@lists.infradead.org; Fri, 09 Oct 2015 09:32:28 +0000 Received: by lbwr8 with SMTP id r8so73959394lbw.2 for ; Fri, 09 Oct 2015 02:32:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=subject:to:references:cc:from:message-id:date:user-agent :mime-version:in-reply-to:content-type:content-transfer-encoding; bh=zIQHlTN7Vn0slDs6Y7GjYpqpkVe9b4qvoWR12EwxXoM=; b=mnUNl8dAfKBtCytNpASPGLmoYMAgJuMBmGoE5OdJo5YwkSEGSNg6SCbPDmjF8QQsUr NJAaobzbnKmASaCbMwX+JEAwJI3Y15GGI39ATFLJ2zWUVxtQyCN+tjHa8hRr/JGTC6q5 YqJgzEOirSFuMDeQFgYYhkqFBPDFR1j9k2gvsGpG5lKsofOXvEKMC2a2kI0mc8naeJpi WemfO/DtxIEMHYdjCBqnBZOdvJCB8gABq3lM6QfjP+GNkDytIENKUvchhnAjU2XqtEAl edgTWvUq9mUWY5TonIR4sBkFilN67ELdAnt2bIcOkEA1iPFoZt7vZz0oWPQ8xFOXA2eK o+qQ== X-Received: by 10.112.236.3 with SMTP id uq3mr6025443lbc.69.1444383125452; Fri, 09 Oct 2015 02:32:05 -0700 (PDT) Received: from [10.30.25.228] (swsoft-msk-nat.sw.ru. [195.214.232.10]) by smtp.gmail.com with ESMTPSA id bg6sm128594lbc.27.2015.10.09.02.32.03 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 09 Oct 2015 02:32:04 -0700 (PDT) Subject: Re: [PATCH v6 0/6] KASAN for arm64 To: Catalin Marinas References: <1442482692-6416-1-git-send-email-ryabinin.a.a@gmail.com> <20151007100411.GG3069@e104818-lin.cambridge.arm.com> <20151008111144.GC7275@leverpostej> <56165228.8060201@gmail.com> <20151008151144.GM17192@e104818-lin.cambridge.arm.com> From: Andrey Ryabinin Message-ID: <561789A2.5050601@gmail.com> Date: Fri, 9 Oct 2015 12:32:18 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20151009_023227_962398_F7952D0C X-CRM114-Status: GOOD ( 20.19 ) X-Spam-Score: -2.7 (--) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , "linux-efi@vger.kernel.org" , Arnd Bergmann , Yury , Ard Biesheuvel , Andrey Konovalov , Linus Walleij , Will Deacon , LKML , "linux-mm@kvack.org" , Matt Fleming , Alexander Potapenko , Alexey Klimov , Mark Salter , David Keitel , Dmitry Vyukov , "linux-arm-kernel@lists.infradead.org" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On 10/08/2015 07:07 PM, Andrey Ryabinin wrote: > 2015-10-08 18:11 GMT+03:00 Catalin Marinas : >> On Thu, Oct 08, 2015 at 02:09:26PM +0200, Ard Biesheuvel wrote: >>> On 8 October 2015 at 13:23, Andrey Ryabinin wrote: >>>> On 10/08/2015 02:11 PM, Mark Rutland wrote: >>>>> On Thu, Oct 08, 2015 at 01:36:09PM +0300, Andrey Ryabinin wrote: >>>>>> 2015-10-07 13:04 GMT+03:00 Catalin Marinas : >>>>>>> On Thu, Sep 17, 2015 at 12:38:06PM +0300, Andrey Ryabinin wrote: >>>>>>>> As usual patches available in git >>>>>>>> git://github.com/aryabinin/linux.git kasan/arm64v6 >>>>>>>> >>>>>>>> Changes since v5: >>>>>>>> - Rebase on top of 4.3-rc1 >>>>>>>> - Fixed EFI boot. >>>>>>>> - Updated Doc/features/KASAN. >>>>>>> >>>>>>> I tried to merge these patches (apart from the x86 one which is already >>>>>>> merged) but it still doesn't boot on Juno as an EFI application. >>>>>>> >>>>>> >>>>>> 4.3-rc1 was ok and 4.3-rc4 is not. Break caused by 0ce3cc008ec04 >>>>>> ("arm64/efi: Fix boot crash by not padding between EFI_MEMORY_RUNTIME >>>>>> regions") >>>>>> It introduced sort() call in efi_get_virtmap(). >>>>>> sort() is generic kernel function and it's instrumented, so we crash >>>>>> when KASAN tries to access shadow in sort(). >>>>> >>>>> I believe this is solved by Ard's stub isolation series [1,2], which >>>>> will build a stub-specific copy of sort() and various other functions >>>>> (see the arm-deps in [2]). >>>>> >>>>> So long as the stub is not built with ASAN, that should work. >>>> >>>> Thanks, this should help, as we already build the stub without ASAN instrumentation. >>> >>> Indeed. I did not mention instrumentation in the commit log for those >>> patches, but obviously, something like KASAN instrumentation cannot be >>> tolerated in the stub since it makes assumptions about the memory >>> layout >> >> I'll review your latest EFI stub isolation patches and try Kasan again >> on top (most likely tomorrow). > > You'd better wait for v7, because kasan patches will need some adjustment. > Since stub is isolated, we need to handle memcpy vs __memcpy stuff the same > way as we do in x86. Now we also need to #undef memset/memcpy/memmove in ARM64 > (just like this was done for x86). > Hm, I was wrong, we don't need that. I thought the EFI stub isolation patches create a copy of mem*() functions in the stub, but they are just create aliases with __efistub_ prefix. We only need to create some more aliases for KASAN. The following patch on top of the EFI stub isolation series works for me. Signed-off-by: Andrey Ryabinin --- arch/arm64/kernel/image.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/arm64/kernel/image.h b/arch/arm64/kernel/image.h index e083af0..6eb8fee 100644 --- a/arch/arm64/kernel/image.h +++ b/arch/arm64/kernel/image.h @@ -80,6 +80,12 @@ __efistub_strcmp = __pi_strcmp; __efistub_strncmp = __pi_strncmp; __efistub___flush_dcache_area = __pi___flush_dcache_area; +#ifdef CONFIG_KASAN +__efistub___memcpy = __pi_memcpy; +__efistub___memmove = __pi_memmove; +__efistub___memset = __pi_memset; +#endif + __efistub__text = _text; __efistub__end = _end; __efistub__edata = _edata;