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 A1BEFC4727E for ; Thu, 1 Oct 2020 23:12:13 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 34E8D20739 for ; Thu, 1 Oct 2020 23:12:13 +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="XXVH4kQG" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 34E8D20739 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 67D9D6B00D7; Thu, 1 Oct 2020 19:12:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 60AA36B00D8; Thu, 1 Oct 2020 19:12:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4574F6B00D9; Thu, 1 Oct 2020 19:12:12 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0216.hostedemail.com [216.40.44.216]) by kanga.kvack.org (Postfix) with ESMTP id 19D8C6B00D7 for ; Thu, 1 Oct 2020 19:12:12 -0400 (EDT) Received: from smtpin08.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id AB1448249980 for ; Thu, 1 Oct 2020 23:12:11 +0000 (UTC) X-FDA: 77324906862.08.rate71_0a180692719f Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin08.hostedemail.com (Postfix) with ESMTP id 8EF511819E621 for ; Thu, 1 Oct 2020 23:12:11 +0000 (UTC) X-HE-Tag: rate71_0a180692719f X-Filterd-Recvd-Size: 6250 Received: from mail-qv1-f74.google.com (mail-qv1-f74.google.com [209.85.219.74]) by imf36.hostedemail.com (Postfix) with ESMTP for ; Thu, 1 Oct 2020 23:12:11 +0000 (UTC) Received: by mail-qv1-f74.google.com with SMTP id de12so238537qvb.12 for ; Thu, 01 Oct 2020 16:12:11 -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=C+iBtL4ZEIj4wTVvYUlhj1NgYSWcn9LosnxdDa1AU0o=; b=XXVH4kQG55Khi2Z7jL9kW2Fdqip0R4t0cH/RnmwrPuJyOQikLRcY12Day24OAyiT/m 5h/ZlINyy6z+lqFF5JyfSJVEG0jppJvkE7JW+22pMjbR6lz2HvZDp9lzsyofaymXppjJ QbHFZ4HWdzdZ7eqEXmBEyBFcsy6jAY16pwKJ/6f5Ktx+cknzjH/MDl53I4mdl7lci8xX ZP01U3F/pGbdvBtUWxsw5Czmc/mX7XSr8WCrqmxSFqDwCnqTUPbiPxhenx77r5QC/a2x B2TTEWcUZ+O1DRB7zQuZfRJTKbtqPed78yy+aijDc7OYHUxMb31FAcrD6JqC6EWk9tbE P0mw== 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=C+iBtL4ZEIj4wTVvYUlhj1NgYSWcn9LosnxdDa1AU0o=; b=na6XRs+BRxIeM7z5PnaENcuK48dfb0xovwa4mPqopQBZ7rNinK9fCQL+k5MCpjmTql qKFxaZ8d0qCjp9VIn6QYvW4mHfPBvt9bMJijwk30eiH9nizjCaCxh7LWVvEqmDoO+cig CB3cPZB3QlUmptEW0g+ABHZRyOn4hc6badiLnjzUJ6i1Bhsh4PF0oB/5atSMXNAw/wDV bSJOkKUJokmg6kWEWZlKU9x4yyNKj63LbUOoNePO8g8c7ORrYN9m1at2RMXpnjfsF8sZ KltwOm1BGEzU6xVh/PJPWGPYAtpsmYA8PB5TSt/u4lBBslxbTwKWoCEUOHR4DLNsLZZq brNw== X-Gm-Message-State: AOAM530ylRB4M2ITqxGjed5bolnxSVH37ouHpSjRW9SZZiur5mHhHC4z 3yiAwMDGVfiIKeOg7+MgerkIYit1Jc1ccbcC X-Google-Smtp-Source: ABdhPJyg885EXfX3ouWrDZ3tzzRkhHvwow5BEJWu4RDHIMFNE96T5+bOe2UvHHZj/o2vT0rg7CrqANiTCXY4pz99 X-Received: from andreyknvl3.muc.corp.google.com ([2a00:79e0:15:13:7220:84ff:fe09:7e9d]) (user=andreyknvl job=sendgmr) by 2002:a05:6214:8f2:: with SMTP id dr18mr10070980qvb.49.1601593930474; Thu, 01 Oct 2020 16:12:10 -0700 (PDT) Date: Fri, 2 Oct 2020 01:10:37 +0200 In-Reply-To: Message-Id: <10120a10ca12074ff3172c90e63678c27224b024.1601593784.git.andreyknvl@google.com> Mime-Version: 1.0 References: X-Mailer: git-send-email 2.28.0.709.gb0816b6eb0-goog Subject: [PATCH v4 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 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.709.gb0816b6eb0-goog