From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.5 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 73CBFC43457 for ; Mon, 12 Oct 2020 20:46:22 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 0AFD22074F for ; Mon, 12 Oct 2020 20:46:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=google.com header.i=@google.com header.b="tK2nFqlN" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0AFD22074F Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id C2D6B940026; Mon, 12 Oct 2020 16:46:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B89D9900002; Mon, 12 Oct 2020 16:46:20 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9DCEA940026; Mon, 12 Oct 2020 16:46:20 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0211.hostedemail.com [216.40.44.211]) by kanga.kvack.org (Postfix) with ESMTP id 6E162900002 for ; Mon, 12 Oct 2020 16:46:20 -0400 (EDT) Received: from smtpin20.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id E4D7F180AD807 for ; Mon, 12 Oct 2020 20:46:19 +0000 (UTC) X-FDA: 77364456078.20.mom50_0700ffa271fd Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin20.hostedemail.com (Postfix) with ESMTP id C4D98180C07AB for ; Mon, 12 Oct 2020 20:46:19 +0000 (UTC) X-HE-Tag: mom50_0700ffa271fd X-Filterd-Recvd-Size: 6249 Received: from mail-qv1-f74.google.com (mail-qv1-f74.google.com [209.85.219.74]) by imf12.hostedemail.com (Postfix) with ESMTP for ; Mon, 12 Oct 2020 20:46:19 +0000 (UTC) Received: by mail-qv1-f74.google.com with SMTP id y45so11521712qve.15 for ; Mon, 12 Oct 2020 13:46:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:date:in-reply-to:message-id:mime-version:references:subject :from:to:cc; bh=4P0nIsUWr4hug9uTHV4YbGNkHcxo9uGG3eroRt4rLtQ=; b=tK2nFqlN57/q71Tot88KthjVsgp3ftylfLLdqBnRG5+1mHcgjCLO7yEozlYm/HGAzF u0T1T8+6O/jAGiiOdff2OL13p/fvCzhmemS5M5WOLXtnqclFoxVh9BoKG4MYDsv1efJf ZsitIrLaug+l0v4LIv7Iy5zhvhrHmsANIYyA7UH4HvkvZicF/hxY76glhGOYHi4WLBae FRwSWk9yaH9yu3NuuowqoVK7V0Yaz7/rT3Oa/pGHSIkn0GZCGa9VS2XuyPXdlqI4huoa 2Y6oCMJdSjlXFwTHyBp7kpYVxMdLDO3j58PXc97yv2iiO3wx3nBYt8JNMvr3st2uePSy VkIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=4P0nIsUWr4hug9uTHV4YbGNkHcxo9uGG3eroRt4rLtQ=; b=ZKyXZVeYXbfRwsHlV6NRv9wNT35b1Bbhwym+jai7W8IZIXXiUTlyGw6lPTU+NG7BAo ISju4MdDaBhh0lxYWB0ycab1IWzjBA6wA3JJfADD0JRd9doXxNzg8Qeqv55zhNLrorla uCIqyEHOheJZ5X8QCR69NukmHkjIVXiakKTQIspj1TmmeAtv5/IZu+9+gAduQbVGMhU7 /SsDFesp+qP7DUo9bgeCZ1X98Ogzq1luaeump7Spp07ScOssmHw64iEf61oWdiGt2W5p A8GMck2TfrT2MR1Gt8H8r+Sp3sGWOjm0o+NerjslSAdMIWoj5DujcuerIMcQK/4Kzhbj iU6w== X-Gm-Message-State: AOAM532HrecLyZA2xhv8IfHC3iTj4qqWRxfAkTiVD0y6GYFO//BCCrqH dhLOBP/AN+9OJiIwgQvMFIFoTsg6bqmDgUKa X-Google-Smtp-Source: ABdhPJz77TKrsxVAoOnXQO0jvWsuPcjw3BjnjrDnfdxih5v5g1MOG1VkqmdyD3DmVZGH0OxARZCVtuug9rxwjQLW X-Received: from andreyknvl3.muc.corp.google.com ([2a00:79e0:15:13:7220:84ff:fe09:7e9d]) (user=andreyknvl job=sendgmr) by 2002:ad4:59cf:: with SMTP id el15mr27782436qvb.17.1602535578726; Mon, 12 Oct 2020 13:46:18 -0700 (PDT) Date: Mon, 12 Oct 2020 22:44:42 +0200 In-Reply-To: Message-Id: <7c8b0dcdf1cebeb0a596c7aa4be48863cc8b2c9b.1602535397.git.andreyknvl@google.com> Mime-Version: 1.0 References: X-Mailer: git-send-email 2.28.0.1011.ga647a8990f-goog Subject: [PATCH v5 36/40] kasan, arm64: print report from tag fault handler From: Andrey Konovalov To: Catalin Marinas , Will Deacon Cc: Vincenzo Frascino , kasan-dev@googlegroups.com, Dmitry Vyukov , Andrey Ryabinin , Alexander Potapenko , Marco Elver , Evgenii Stepanov , Elena Petrova , Branislav Rankov , Kevin Brodsky , Andrew Morton , linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Andrey Konovalov Content-Type: text/plain; charset="UTF-8" X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Add error reporting for hardware tag-based KASAN. When CONFIG_KASAN_HW_TAGS is enabled, print KASAN report from the arm64 tag fault handler. SAS bits aren't set in ESR for all faults reported in EL1, so it's impossible to find out the size of the access the caused the fault. Adapt KASAN reporting code to handle this case. Signed-off-by: Andrey Konovalov Co-developed-by: Vincenzo Frascino Signed-off-by: Vincenzo Frascino Reviewed-by: Catalin Marinas --- Change-Id: I3780fe7db6e075dff2937d3d8508f55c9322b095 --- arch/arm64/mm/fault.c | 14 ++++++++++++++ mm/kasan/report.c | 11 ++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c index d110f382dacf..1c314e6f7918 100644 --- a/arch/arm64/mm/fault.c +++ b/arch/arm64/mm/fault.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -295,10 +296,23 @@ static void die_kernel_fault(const char *msg, unsigned long addr, do_exit(SIGKILL); } +#ifdef CONFIG_KASAN_HW_TAGS static void report_tag_fault(unsigned long addr, unsigned int esr, struct pt_regs *regs) { + bool is_write = ((esr & ESR_ELx_WNR) >> ESR_ELx_WNR_SHIFT) != 0; + + /* + * SAS bits aren't set for all faults reported in EL1, so we can't + * find out access size. + */ + kasan_report(addr, 0, is_write, regs->pc); } +#else +/* Tag faults aren't enabled without CONFIG_KASAN_HW_TAGS. */ +static inline void report_tag_fault(unsigned long addr, unsigned int esr, + struct pt_regs *regs) { } +#endif static void __do_kernel_fault(unsigned long addr, unsigned int esr, struct pt_regs *regs) diff --git a/mm/kasan/report.c b/mm/kasan/report.c index 3924127b4786..f8817d5685a7 100644 --- a/mm/kasan/report.c +++ b/mm/kasan/report.c @@ -60,9 +60,14 @@ static void print_error_description(struct kasan_access_info *info) { pr_err("BUG: KASAN: %s in %pS\n", get_bug_type(info), (void *)info->ip); - pr_err("%s of size %zu at addr %px by task %s/%d\n", - info->is_write ? "Write" : "Read", info->access_size, - info->access_addr, current->comm, task_pid_nr(current)); + if (info->access_size) + pr_err("%s of size %zu at addr %px by task %s/%d\n", + info->is_write ? "Write" : "Read", info->access_size, + info->access_addr, current->comm, task_pid_nr(current)); + else + pr_err("%s at addr %px by task %s/%d\n", + info->is_write ? "Write" : "Read", + info->access_addr, current->comm, task_pid_nr(current)); } static DEFINE_SPINLOCK(report_lock); -- 2.28.0.1011.ga647a8990f-goog