Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp4348936pxb; Tue, 10 Nov 2020 14:15:47 -0800 (PST) X-Google-Smtp-Source: ABdhPJx1vRmwfcGl4Cdit1ySp07z0tXDN31wfyFAuOa4vjG9DpE1Wu4kCDnAut5304KeylHMHXgh X-Received: by 2002:a17:906:34c3:: with SMTP id h3mr22392421ejb.132.1605046547560; Tue, 10 Nov 2020 14:15:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605046547; cv=none; d=google.com; s=arc-20160816; b=j7ftpMdWCaAY4NEAIgWYDj1FfaeKLPcz/A/5wHieisQHXlq1xMyBKKGSaB1Gmj+v1A 5Zd2kw2rS8z+/YeNHtc5jCFWCPwtQhEP5WdB7M7eiL2A97taKZmcjRwm1hIVK7yDPEzR 5qZXAoDaBDWKcsRja8fIM3Hgyd9ikM7ZpZATOSBTrb7JsmSRpRP+syKUz8Ch+w4/MAY6 TKkTYrFWAXCMmwSwj2Tvb++hnmaJ7w/nDVlGFvpaRubviChUrKNpD22jgROuCwm/s6on nTPQ4g5ifAfU1/T34p1jFz9asN84lUbEnpq4wjDW9rqJhkg5+DZ787T5jrjZwTDuYwZn rjrQ== 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=/sxzdyvi8KkfW5gspThP8KvseoTY7ROsnu5nrXDzCag=; b=MgAwRPdtaxApWvHR7QjiSiOzt2XV9FfhvYTOT0/jisri2UMnkbKQiMLxF7pFWSHwq0 vvKOVrPM7wnWCekOzapNZGfNJN+8+sTjzOII3HIVohHpUgD3yfr0F6GtYJGpNPoE3Ug2 Tq8UEtdkZBELPRtt9cntF9KVv/JKPCvXpFj1AXFCoSQapUMqKfuSosQkC5XnaZ2S7XtB hhf54DXIg9djJGwMxfnUNbN5e16yEHlrl3fFVtAYpf/VVYlem1Ov1CUomC+h6qGzYMO7 EmU1U4IHwd93UypdZBO/gK/46ZGhtRSnnqYRSX7lU2hX5U32DOEFB5pJa+/WPRVcrrzi +EaA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="Y/jR1dsz"; 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 lf27si9926072ejb.400.2020.11.10.14.15.24; Tue, 10 Nov 2020 14:15:47 -0800 (PST) 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="Y/jR1dsz"; 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 S1733069AbgKJWNI (ORCPT + 99 others); Tue, 10 Nov 2020 17:13:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48606 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733008AbgKJWMq (ORCPT ); Tue, 10 Nov 2020 17:12:46 -0500 Received: from mail-wr1-x449.google.com (mail-wr1-x449.google.com [IPv6:2a00:1450:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2FB10C0613D1 for ; Tue, 10 Nov 2020 14:12:44 -0800 (PST) Received: by mail-wr1-x449.google.com with SMTP id z13so240797wrm.19 for ; Tue, 10 Nov 2020 14:12:44 -0800 (PST) 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=/sxzdyvi8KkfW5gspThP8KvseoTY7ROsnu5nrXDzCag=; b=Y/jR1dsz3MoDl81vp14eGReV4TFu4RPTWCiE9VTJYP+0EekPQ8C5H9S7rFJJO/fXaO kOEoYEtNVzGjZJ4o6dPnzIdEY9RHhVrMNRMZ8WclGzjHjFziL+WhwREtWD5faj2mztzV X2AYk88MyNLjRHStKHJ1brWfHeQVj36mZeXFNHZ3Cq0LnArt1MkCynqe9pXOSy1/VH3y dBPasok/sdJerOrwJ/8YpnPoeknOs1o6yh9zC/hc5bpWNoNbxC+FBZ7y4J8+WWeCId1h CNPgzY93DllUdq5tiTBubK5vlT9b4hHaVAW8RooWas7C7NM4PwE6e3mm3K8sD8Vck1mc vwsw== 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=/sxzdyvi8KkfW5gspThP8KvseoTY7ROsnu5nrXDzCag=; b=j4Sj/eiPJ+YAfvxbDMpVBSGeyAHKpsZ2NKezk3C7o5bo+wH0RNcUqMnkHJ9Xda8DhU xXF9dX1y2FEoE9l3boKtK1mcL0AQm/uMvCduGrBFsFVwPcJLH/iOnUe1kvnlQYNQSYPD gNIoAhst3U7mMbFE0IzNbXiID+Q6qK2DoXHh5u4hZvUIxiMhNSHRU7wvSNRfq7FgDB55 oeh4qxckCjL3RO9pmZ5ZClAc44J11XFfxm3LxNwoLCwIg3isPdGP2lNrCU6r7kX9XqGd S2ZIO/pdMbehe7bpNV37r5szCanAv/M0WHEGoAbc2X8XECc40TiKQhWLvlKSnD9j5+/F TW7w== X-Gm-Message-State: AOAM531w22Qzp4BZ8NDLvjSFIGWCBeWSjDkImNShBSOn+bQqVmJaQWq0 4f36F2XaMmwhZwSHHymg64nXr3zA8ua6BSUa 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:a05:6000:109:: with SMTP id o9mr25232534wrx.240.1605046362785; Tue, 10 Nov 2020 14:12:42 -0800 (PST) Date: Tue, 10 Nov 2020 23:10:37 +0100 In-Reply-To: Message-Id: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.29.2.222.g5d2a92d10f8-goog Subject: [PATCH v9 40/44] kasan, arm64: print report from tag fault handler From: Andrey Konovalov To: Catalin Marinas Cc: Will Deacon , Vincenzo Frascino , Dmitry Vyukov , Andrey Ryabinin , Alexander Potapenko , Marco Elver , Evgenii Stepanov , Branislav Rankov , Kevin Brodsky , Andrew Morton , kasan-dev@googlegroups.com, 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 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 fbceb14d93b1..7370e822e588 100644 --- a/arch/arm64/mm/fault.c +++ b/arch/arm64/mm/fault.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -297,10 +298,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_tag_recovery(unsigned long addr, unsigned int esr, struct pt_regs *regs) diff --git a/mm/kasan/report.c b/mm/kasan/report.c index 8afc1a6ab202..ce06005d4052 100644 --- a/mm/kasan/report.c +++ b/mm/kasan/report.c @@ -62,9 +62,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.29.2.222.g5d2a92d10f8-goog