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=-13.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable 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 5C08FC4346E for ; Thu, 24 Sep 2020 23:08:10 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E3FD623899 for ; Thu, 24 Sep 2020 23:08:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="lKDl63HS"; 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 E3FD623899 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:From:Subject:References:Mime-Version:Message-Id: In-Reply-To:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=ITPK5yGCr2R8wy6pOMOBPgJOUdbWL70uQOEaXKu0+CA=; b=lKDl63HSP9gnEWnXoigonHuPp wOALX/Od0O65FRfqbHTvuuTFrk6BNV6NKdl273yBM47HZvcTeS8SX8qtdZGXYFPJ+ks01M8Kf6wTu yz7zixBfLUEIXZ6R1Ee1RxG72fH4X9OnVBiNH6vW9uUQog00klVgDwLaUmVyXLG4P4dAohllYkuTK MHdTMxJ2qBxz8msBRup6zHwww7XTquhEJHQX0iUOnhlLWjbm/rRJMPSQi8+NN0DdwkO8Ak98PZvLs IfZTjiwAPniLRph5gve0uJvudJTeeyptgyjTdWXveXlovMzkz2lDUbZV6EI+F7UBbZOCwXYY8OtFj g7xJ7bU0g==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kLaJE-0000B3-HP; Thu, 24 Sep 2020 23:05:52 +0000 Received: from mail-qk1-x749.google.com ([2607:f8b0:4864:20::749]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kLa6B-0002ek-AX for linux-arm-kernel@lists.infradead.org; Thu, 24 Sep 2020 22:52:26 +0000 Received: by mail-qk1-x749.google.com with SMTP id y17so684648qkf.15 for ; Thu, 24 Sep 2020 15:52:21 -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=qcpcOMC6m1U0jVTNLuBtmKe5dzkk6ZMXbesDWzvBPP0uyY22yqqIMGa+Foc2tcSxAe jmS8/A+SBh3uSHRuT7pz97zZYqoS9kvTkrmRoaMmRWCKtsk3KLOPfpLYrXnM1NgxabWM uIvuE0k1JYt++2yHISlOxFzyDvS1DixNinTCVu4zFjYTi0n8MiLpPfOn0DhqormPcfUT zt6wzZUOnZ/jMMQYuwmtZJ/63hcWXPVYOsSwS66k+YT63ol5mzrU7oH9lsny3W6FoLdF 4cMTbK4+x4ioc/MvGcZMqVxZPdiTNJBaoq6nXBOrEpQ8PS3VcuBYMfLSnOgwEpbaUoLS lkzw== X-Gm-Message-State: AOAM530m57cmL2AGf7gv3RqqgP7UA6VwoJBGCvAspZNftgUlW/nBsWA5 3vNEGr29IxzYoiA+8j7nDO+wFNLHjZidUf5H 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200924_185223_434333_2C7A4866 X-CRM114-Status: GOOD ( 15.50 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Marco Elver , Elena Petrova , Andrey Konovalov , Kevin Brodsky , Will Deacon , Branislav Rankov , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Alexander Potapenko , linux-arm-kernel@lists.infradead.org, Andrey Ryabinin , Andrew Morton , Evgenii Stepanov Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.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 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel