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.6 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 3648EC4363D for ; Thu, 24 Sep 2020 22:52:23 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id C917C2344C for ; Thu, 24 Sep 2020 22:52: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="jrGnJ+BL" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C917C2344C 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 2749F90000C; Thu, 24 Sep 2020 18:52:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1FDDD8E0001; Thu, 24 Sep 2020 18:52:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0A2F090000C; Thu, 24 Sep 2020 18:52:21 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0049.hostedemail.com [216.40.44.49]) by kanga.kvack.org (Postfix) with ESMTP id E3D078E0001 for ; Thu, 24 Sep 2020 18:52:20 -0400 (EDT) Received: from smtpin16.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id B8A432DFA for ; Thu, 24 Sep 2020 22:52:20 +0000 (UTC) X-FDA: 77299455240.16.rate61_19179ce27162 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin16.hostedemail.com (Postfix) with ESMTP id 7FC3B1018ADDF for ; Thu, 24 Sep 2020 22:52:20 +0000 (UTC) X-HE-Tag: rate61_19179ce27162 X-Filterd-Recvd-Size: 6188 Received: from mail-qv1-f74.google.com (mail-qv1-f74.google.com [209.85.219.74]) by imf29.hostedemail.com (Postfix) with ESMTP for ; Thu, 24 Sep 2020 22:52:19 +0000 (UTC) Received: by mail-qv1-f74.google.com with SMTP id de12so475984qvb.12 for ; Thu, 24 Sep 2020 15:52: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=IS9ZsYB9v/N3vPDTIy5S5K93CUEmQWaPqYVbAcaV4Fc=; b=jrGnJ+BLVX2DGeyV3v1JNQNDzlUC17f3kY9X6E5RpjLJaLydCEzWkmgMXL0NsSaMxB PmjpePhqkc8O7JGOg7a6NQfB+IZDPSQ4LD9CwPpS3FkXgq5v/znChPI7qtlIDxJeSvje OuwMKk7NReJsxwEya6goAAcsIlJ+lsHec36JjNazWenTOBEDg+uh+fWkCiuPwpA8LiFR Odc+DD6rIi564nxV49JjESGZrSsVEeMyEejB4zM5z25sWjiRA6GYBQBsVjvdl0L7TcCN bX43rDpoYpxL3H84n4MF1/YUy1L/snlCH+tnLhbk6z2FiIMZdW/TTLOit2etkMZiDdws ehoQ== 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=IS9ZsYB9v/N3vPDTIy5S5K93CUEmQWaPqYVbAcaV4Fc=; b=P2pcJZN1uVrpiZk1/2ZjfSZWK+lpz67l6B7eLlX6cGjg3mAWPHrw7K6nSzsvf7p2TT IKgYZCIV19XH6fawAwTp4nIt4Xt0IVslg2596xt67GM8Or0tZq/Z7QGAnndJEQcsqlgg 2H8a537+YQuWeIqbLaaxtvKLvaHOJLwTg568HYZ1J9GseQyvA5iumJJG9fXzEq0i3zI7 buwz8MTyCb2tAJYvt5vTCqJvKNsGWrtY3tSeDoIeXeITTUdsQ2opc+MWFynE1L+vCbE7 ge8+WA+vuFdZ8B+X0cpRyNJbQntFfECwIan7lqS3ogUE3QWcrV9C6sirU346qQGHcCUC LQ4g== X-Gm-Message-State: AOAM530e1hMBrzmtWMBDGylWIjf6ohV7lWP6Ctpj7s4XggniDQDSYLFI od0m1Vj0NZcv8hIkxzY5I2cbdE83ktHSQS/D X-Google-Smtp-Source: ABdhPJxQ/I/jNcEo109DKYg6gHkYf5VlZZ9VYPUndBBhET15221vHySVXVhrSGq40bJcQH8Myf9ofF95KOD8rC3a X-Received: from andreyknvl3.muc.corp.google.com ([2a00:79e0:15:13:7220:84ff:fe09:7e9d]) (user=andreyknvl job=sendgmr) by 2002:a0c:b31c:: with SMTP id s28mr1643871qve.17.1600987939311; Thu, 24 Sep 2020 15:52:19 -0700 (PDT) Date: Fri, 25 Sep 2020 00:50:43 +0200 In-Reply-To: Message-Id: <6296d106e480eed388f86e3c8fce10a14bead75a.1600987622.git.andreyknvl@google.com> Mime-Version: 1.0 References: X-Mailer: git-send-email 2.28.0.681.g6f77f65b4e-goog Subject: [PATCH v3 36/39] 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-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 --- 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.681.g6f77f65b4e-goog