Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp676725pxk; Thu, 24 Sep 2020 15:54:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwssmFRbLUXGdqDG/ioNFqPZkqeaxJOI4LS+aFbGWGjnCT72sXXLQyBm99f48KIeG6OAMc4 X-Received: by 2002:a17:906:2b83:: with SMTP id m3mr869934ejg.456.1600988090400; Thu, 24 Sep 2020 15:54:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1600988090; cv=none; d=google.com; s=arc-20160816; b=aRYjVGbwl/ez7yYzu8knhjPRA6+E/WvSftTFDnbvB+6C1sF8uJ62YhTty+j2LvgI9m A0xAk7H5WqDsvbg6ERhBzrSe4ISosacsZ5YFe7Y4PIshuuRZTDDG0ynBsOsjC0njUUbO vqSfVUjPESaZGZBvHLGY/Pv2eeofPvxVT5CTcq6UJzVsPy1Jan/uTSky3QHcVxN1/E42 zQQvvkzsMUSPA50rz7Nq1Durq9aElA+785D2LKz1bzH5Ok43o04Xrnf7TBUolyYpjOa9 IYIuEtuyrjI5ippL2OflshSJn1H4z4ckpxZdi2Cs2Kox90xMKbszp7L9wGf77uI6g5O2 G5rg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:sender:dkim-signature; bh=IS9ZsYB9v/N3vPDTIy5S5K93CUEmQWaPqYVbAcaV4Fc=; b=KJQ+tcItvoVH3ib6skNDK43Y3qWRgfiUGfVlWvpmoBUscqBKf8BNsHSrL5qXc23KVz szgdh2yE5pYyy7hvF1kIa7QZCQf8wg3AeqSJV17Y5l51v7uO5iA+f1DoXmZfPgihkR1+ A2VVH9BJv1LFUUs4FTTFi7YjiPDDftrw+BjIfz+WaTx90KSQU/7NgtnEqLDhmganQgen i/GxjUJLVpt/w8tZK1ouJT6J02yfPC366bixPrSdnquXlnH5PBqA6rl06KBszY+yd6t7 6i+Gum7DYwREyNZy0H63YowvleiiX8tMnw6YM9pB3H5j40TvoIQsMKbfuOR+hEo5h6kK wsKw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=jrGnJ+BL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h19si569941edv.301.2020.09.24.15.54.27; Thu, 24 Sep 2020 15:54:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=jrGnJ+BL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727160AbgIXWwn (ORCPT + 99 others); Thu, 24 Sep 2020 18:52:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727068AbgIXWwU (ORCPT ); Thu, 24 Sep 2020 18:52:20 -0400 Received: from mail-qt1-x849.google.com (mail-qt1-x849.google.com [IPv6:2607:f8b0:4864:20::849]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 35CEEC0613CE for ; Thu, 24 Sep 2020 15:52:20 -0700 (PDT) Received: by mail-qt1-x849.google.com with SMTP id b18so525246qto.4 for ; Thu, 24 Sep 2020 15:52:20 -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=Wek5oC1oXyUnM8Jrq39EeJpGThBMt1Agx6Lw8F5eNGGlNfUHQ4VgJEj/ondo2NzsFD 5g/ldWHK9cDTRuzm7+bizn7XE8R3iV3syudcTk0M0/niJPdFlmdS1gMZOHpqMHU9+R62 Q4rQ23Xx088qdG3RMcr+oKj238Ah9sxl/pcGMifetWRcZ2lhDMXQjLI0WuU39dLU0D90 wUK9aXf1+ptGEeMhfDySyKES1SoPzW87afD8og7uyXqxoYNUvK1IaA4rKvDXVaXYgh3m UiOJyksexn+iB74ZflLvXY1dRs8+7EE0nlmBpv9x0zRM7wFUPhkP7qlytDDX82WSW5Gi +wUw== X-Gm-Message-State: AOAM531QWWkEAxXgcGeiwOxUYnOW5jRTETBvSdRlsCOnrKK2bxHeVqXs alu7YkNSDdrvaPtFrUmgmAObOvw9REaXnYtk Sender: "andreyknvl via sendgmr" 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" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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