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=-20.6 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL 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 C5866C433E3 for ; Fri, 14 Aug 2020 17:28:51 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 834D520708 for ; Fri, 14 Aug 2020 17:28:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ku0irwum" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 834D520708 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 B94C26B0008; Fri, 14 Aug 2020 13:28:41 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AF9826B0087; Fri, 14 Aug 2020 13:28:41 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9228E6B0089; Fri, 14 Aug 2020 13:28:41 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0023.hostedemail.com [216.40.44.23]) by kanga.kvack.org (Postfix) with ESMTP id 6D1FE6B0008 for ; Fri, 14 Aug 2020 13:28:41 -0400 (EDT) Received: from smtpin30.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 3693475BA for ; Fri, 14 Aug 2020 17:28:41 +0000 (UTC) X-FDA: 77149858842.30.crown47_0d0f69d26ffe Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin30.hostedemail.com (Postfix) with ESMTP id E5FB5180B3C83 for ; Fri, 14 Aug 2020 17:28:40 +0000 (UTC) X-HE-Tag: crown47_0d0f69d26ffe X-Filterd-Recvd-Size: 5730 Received: from mail-qt1-f201.google.com (mail-qt1-f201.google.com [209.85.160.201]) by imf01.hostedemail.com (Postfix) with ESMTP for ; Fri, 14 Aug 2020 17:28:40 +0000 (UTC) Received: by mail-qt1-f201.google.com with SMTP id u17so7475049qtq.13 for ; Fri, 14 Aug 2020 10:28:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=q24QkMKZO6T4dOo8z/uPgVahsCI2M3nldwxAJ8Cpi0Y=; b=ku0irwumRN6Ip49VSreq9f2tsq3r4WWyUSZtTgT8ZfbqcamgfahfJv6gpuKCz5H6gy Q2EQk2cVD2v4NT1Ndg/ERBlP8Mgblb3K+/EoQ0OaVHn92co8FyMN4gM6NFFNb/tcKxjn Chs+FedkWOcYI+GgaEaP+culABQRUNCY66Cfnp7MkT41IEgPXFAcRnWVRitd5Cf27eWM fzIiG7nA/mXCk86tQkqB4dpoZomH7hfjiyqs6xYKrhnfdK1btBGZGw0MSLjRiPEUI+UR CJ9Sj6V3KiwOY8URNLAZ4vHQO2revQtUcwm4pEV1kgvvn62rjIw734f9oWX9GBeblCSl lpzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=q24QkMKZO6T4dOo8z/uPgVahsCI2M3nldwxAJ8Cpi0Y=; b=DcCmQ6WxW4gxpANhX/TDC2h/fuxdmgr7z+UwUEPS9KvYMJidNPubRUxXg/FRG+sdVs qwytFl3W1sJXK8gguKBjX5K/XILOiMQrioRILJTm61ElngBkS3YvMz7oLux5vXA718hx 7YmWAOj8aYWIsC0qNxGpkfSGfLfdFZTnf2haX1DCuHrH2zUf+84Rjb0sK4Os55uDTqMQ 43apfWqi9UQQjZziMRWLBFM6TEsqiYGOk2WEr1Cwo3qlnLY8tXz4R8rwcH6n1W8f7U5A /NYUjFt1mAkQzNmSRCXUXG+67FCHO4krIBS/qlNFtzokSHZoLr7zD0i78MKq0M89Rcv0 dKdw== X-Gm-Message-State: AOAM531c0xKOUhUCVT0Weltl2FMiY2eaaDIbf7LduiF1W57NnUDwxuZq csY501Y5PBuBulGLLo1mw6LyHzd2q/k/f3PB X-Google-Smtp-Source: ABdhPJw4HoEDexHBBMUv3XZU8fBSAnmUvYtM/53KDfmikkTGWUkMCsOZ+SysTqaaaZvlv5gyrbE1cTAASfH+tBvs X-Received: by 2002:a0c:b895:: with SMTP id y21mr3726762qvf.87.1597426119355; Fri, 14 Aug 2020 10:28:39 -0700 (PDT) Date: Fri, 14 Aug 2020 19:27:14 +0200 In-Reply-To: Message-Id: <4691d6019ef00c11007787f5190841b47ba576c4.1597425745.git.andreyknvl@google.com> Mime-Version: 1.0 References: X-Mailer: git-send-email 2.28.0.220.ged08abb693-goog Subject: [PATCH 32/35] kasan, arm64: print report from tag fault handler From: Andrey Konovalov To: Dmitry Vyukov , Vincenzo Frascino , Catalin Marinas , kasan-dev@googlegroups.com Cc: Andrey Ryabinin , Alexander Potapenko , Marco Elver , Evgenii Stepanov , Elena Petrova , Branislav Rankov , Kevin Brodsky , Will Deacon , 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-Rspamd-Queue-Id: E5FB5180B3C83 X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam04 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 --- arch/arm64/mm/fault.c | 9 +++++++++ mm/kasan/report.c | 11 ++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c index c62c8ba85c0e..cf00b3942564 100644 --- a/arch/arm64/mm/fault.c +++ b/arch/arm64/mm/fault.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -314,11 +315,19 @@ static void report_tag_fault(unsigned long addr, unsigned int esr, { bool is_write = ((esr & ESR_ELx_WNR) >> ESR_ELx_WNR_SHIFT) != 0; +#ifdef CONFIG_KASAN_HW_TAGS + /* + * 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 pr_alert("Memory Tagging Extension Fault in %pS\n", (void *)regs->pc); pr_alert(" %s at address %lx\n", is_write ? "Write" : "Read", addr); pr_alert(" Pointer tag: [%02x], memory tag: [%02x]\n", mte_get_ptr_tag(addr), mte_get_mem_tag((void *)addr)); +#endif } static void __do_kernel_fault(unsigned long addr, unsigned int esr, diff --git a/mm/kasan/report.c b/mm/kasan/report.c index c904edab33b8..34ef81736d73 100644 --- a/mm/kasan/report.c +++ b/mm/kasan/report.c @@ -65,9 +65,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.220.ged08abb693-goog