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=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 0BBEEC43461 for ; Tue, 15 Sep 2020 21:55:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B04622078E for ; Tue, 15 Sep 2020 21:55:20 +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="JLHBY9Ag" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728111AbgIOVyr (ORCPT ); Tue, 15 Sep 2020 17:54:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728050AbgIOVaQ (ORCPT ); Tue, 15 Sep 2020 17:30:16 -0400 Received: from mail-qk1-x749.google.com (mail-qk1-x749.google.com [IPv6:2607:f8b0:4864:20::749]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 69858C0611BD for ; Tue, 15 Sep 2020 14:17:46 -0700 (PDT) Received: by mail-qk1-x749.google.com with SMTP id 125so4109398qkh.4 for ; Tue, 15 Sep 2020 14:17:46 -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=D8sG/cEP7djDLTapvipoPil4TaVPwtS1uBYZ8/rqMfU=; b=JLHBY9AgkNxAqLTKFWQdxcgJcgqdPUV3TxpRVzNYHFqfab1asZTfQTMH+AqvVnwgCH BnUUjUz0j3cp5q50TzevAEZDIAJ0lOMhBCpOnwtBSEh0VnSduULw/f/WRSJ73y/PSR3g wAtqSI76OkKjfWf3WP25K5JUjRztC3SdAV4hoFEGhsvOomwFaXZfyUboATVZWnH9zU6D TQIjujxm5SaToqhiVOXT9DXzAt8rmJsm0fOCCNW7HoJrb4YrW0Q0m8CDIdPkQBW+HfF8 vXzn130goo1cQM6GpPk5iZ4YGlPC9oVunx0rEnt4NZEdRJcb4DVF1GJSyIHZDe5/ruiQ l/jQ== 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=D8sG/cEP7djDLTapvipoPil4TaVPwtS1uBYZ8/rqMfU=; b=hgJN2qiuxeUmZV+jcQaHxCfnypBKUxAQal3apLuHBJmjpOFK3lH7LQTLg44tR7QCyx KJErUcaN8okKonz1AyArm1P97vZCecQQwS3cfPv+BF9hBYNe/Sv6eMg4nn7unkUJG72Z zRaLTFu1akXX34BNdIplN2HwTjSoh99Z+1YJU0oJLSn+UBEv867fdt5k4YvA6dbifDPp n6wxOe5jBg6GWlzUzsQG2UxXQtGjw95aZEsajlDxXhwwchfn9KNH9WRY4jLJg4v+uq3w h+V1P1O/0Gw2qCLtoa717ab/K5AO8DI15R4sHTRvMCelMtBLMWOQoWt31M0VV1kDq5nM kCLw== X-Gm-Message-State: AOAM531mHiBp9NWtSb6ntXB6wYC4fB6dEdL4X+8Iw0Uyw3+rxpyvy7XU ViqCjNHioZ3tJwqZgqAjggwx9QLGikDXLUmC X-Google-Smtp-Source: ABdhPJzlRX414ae6dY3KcWoPCkTBwkZK3ld5YB1kdMEENNAIrBphNAvoJTIWKdIYK4+jfcGWQyTwv8zsQNqqfSmk X-Received: from andreyknvl3.muc.corp.google.com ([2a00:79e0:15:13:7220:84ff:fe09:7e9d]) (user=andreyknvl job=sendgmr) by 2002:ad4:58e3:: with SMTP id di3mr3798476qvb.54.1600204665622; Tue, 15 Sep 2020 14:17:45 -0700 (PDT) Date: Tue, 15 Sep 2020 23:16:16 +0200 In-Reply-To: Message-Id: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.28.0.618.gf4bc123cb7-goog Subject: [PATCH v2 34/37] 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" Sender: linux-kernel-owner@vger.kernel.org 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 | 19 +++++++++++++------ mm/kasan/report.c | 11 ++++++++--- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c index cdc23662691c..ac79819317f2 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,17 +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; + bool is_write = ((esr & ESR_ELx_WNR) >> ESR_ELx_WNR_SHIFT) != 0; - pr_alert("Memory Tagging Extension Fault in %pS\n", (void *)regs->pc); - pr_alert(" %s at address %lx\n", is_write ? "Write" : "Read", addr); - pr_alert(" Pointer tag: [%02x], memory tag: [%02x]\n", - mte_get_ptr_tag(addr), - mte_get_mem_tag((void *)addr)); + /* + * 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 c904edab33b8..34ef81736d73 100644 --- a/mm/kasan/report.c +++ b/mm/kasan/report.c @@ -65,9 +65,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.618.gf4bc123cb7-goog 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 A2740C2D0E3 for ; Tue, 15 Sep 2020 21:17:49 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 3725620770 for ; Tue, 15 Sep 2020 21:17:49 +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="JLHBY9Ag" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3725620770 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 591DE900095; Tue, 15 Sep 2020 17:17:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4F5FA900070; Tue, 15 Sep 2020 17:17:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3BAB8900095; Tue, 15 Sep 2020 17:17:47 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0076.hostedemail.com [216.40.44.76]) by kanga.kvack.org (Postfix) with ESMTP id 2130F900070 for ; Tue, 15 Sep 2020 17:17:47 -0400 (EDT) Received: from smtpin06.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id DE3491F1A for ; Tue, 15 Sep 2020 21:17:46 +0000 (UTC) X-FDA: 77266557732.06.wash51_4506bb027114 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin06.hostedemail.com (Postfix) with ESMTP id ABFB01005F0A5 for ; Tue, 15 Sep 2020 21:17:46 +0000 (UTC) X-HE-Tag: wash51_4506bb027114 X-Filterd-Recvd-Size: 6535 Received: from mail-qt1-f202.google.com (mail-qt1-f202.google.com [209.85.160.202]) by imf49.hostedemail.com (Postfix) with ESMTP for ; Tue, 15 Sep 2020 21:17:46 +0000 (UTC) Received: by mail-qt1-f202.google.com with SMTP id g10so4041122qto.1 for ; Tue, 15 Sep 2020 14:17:46 -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=D8sG/cEP7djDLTapvipoPil4TaVPwtS1uBYZ8/rqMfU=; b=JLHBY9AgkNxAqLTKFWQdxcgJcgqdPUV3TxpRVzNYHFqfab1asZTfQTMH+AqvVnwgCH BnUUjUz0j3cp5q50TzevAEZDIAJ0lOMhBCpOnwtBSEh0VnSduULw/f/WRSJ73y/PSR3g wAtqSI76OkKjfWf3WP25K5JUjRztC3SdAV4hoFEGhsvOomwFaXZfyUboATVZWnH9zU6D TQIjujxm5SaToqhiVOXT9DXzAt8rmJsm0fOCCNW7HoJrb4YrW0Q0m8CDIdPkQBW+HfF8 vXzn130goo1cQM6GpPk5iZ4YGlPC9oVunx0rEnt4NZEdRJcb4DVF1GJSyIHZDe5/ruiQ l/jQ== 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=D8sG/cEP7djDLTapvipoPil4TaVPwtS1uBYZ8/rqMfU=; b=EiFd882Is9KjuGv5+qc8R4oTgr7SomEiCJwd+D1oocCytsyNAnviUknqlcsWkfLeiB BS9vZodvciDjgEFRQGMPUk1UUMp2voG4QrVVUqxrGRPHewcgg/6cS9qkoUj8RyLoADLK VVOqEGX6OkQ0C2PQQ6vZmPmaQ+yEDmTD55BECHdRLCXFRUFHXFDdFODlh/2x6KxPpo8b QKTC7ELgK8yW46GQJXbbD7BC3bxvz10d+cEj1qbovsF5mZOzGARkFH6CD8ZlNWGa0S/p OriK6ksQovc5obqrt823yfB6zemyssKwDQRJfEJ9tPhMPrbv9CmI/pFuCOwwPTj0NJ1p xHaA== X-Gm-Message-State: AOAM530Uplrweq4glSTWfGSEM3rxmQO9BRxbkhknyzlDtjNljIdj/Gjn nrJ3/ahBWffNXb7BEouK1aTox+r1n1oaGBhY X-Google-Smtp-Source: ABdhPJzlRX414ae6dY3KcWoPCkTBwkZK3ld5YB1kdMEENNAIrBphNAvoJTIWKdIYK4+jfcGWQyTwv8zsQNqqfSmk X-Received: from andreyknvl3.muc.corp.google.com ([2a00:79e0:15:13:7220:84ff:fe09:7e9d]) (user=andreyknvl job=sendgmr) by 2002:ad4:58e3:: with SMTP id di3mr3798476qvb.54.1600204665622; Tue, 15 Sep 2020 14:17:45 -0700 (PDT) Date: Tue, 15 Sep 2020 23:16:16 +0200 In-Reply-To: Message-Id: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.28.0.618.gf4bc123cb7-goog Subject: [PATCH v2 34/37] 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-Rspamd-Queue-Id: ABFB01005F0A5 X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam04 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 | 19 +++++++++++++------ mm/kasan/report.c | 11 ++++++++--- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c index cdc23662691c..ac79819317f2 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,17 +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; + bool is_write = ((esr & ESR_ELx_WNR) >> ESR_ELx_WNR_SHIFT) != 0; - pr_alert("Memory Tagging Extension Fault in %pS\n", (void *)regs->pc); - pr_alert(" %s at address %lx\n", is_write ? "Write" : "Read", addr); - pr_alert(" Pointer tag: [%02x], memory tag: [%02x]\n", - mte_get_ptr_tag(addr), - mte_get_mem_tag((void *)addr)); + /* + * 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 c904edab33b8..34ef81736d73 100644 --- a/mm/kasan/report.c +++ b/mm/kasan/report.c @@ -65,9 +65,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.618.gf4bc123cb7-goog 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=-15.7 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 7D08FC433E2 for ; Tue, 15 Sep 2020 21:32:21 +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 E09942078E for ; Tue, 15 Sep 2020 21:32:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="KJkFFik9"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=google.com header.i=@google.com header.b="JLHBY9Ag" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E09942078E 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=ISv+UEnRpnWflaf9MF3W90l49nNicBUqX4wdmDKxFc4=; b=KJkFFik9In3Ie/Jfwv6liywBn ClUnVxXg2R8oG4zbedGCJrAwn9DuyAL2kbSPFpeOWKDvfIYl6OR/RJa2ghN902mq/HbThVbecGN+i UeOTZTgOSgdJDCVOc3diLrMKgS2db8jpgH5LXRdZ0UjC6bpA0dT4Lvcqs+HW7gSaWxiW9uQJncugq 5OP+iuFyyfNqBXhi0/z33PgvdyouIwYj8KEqaJYQH9+Ye8Ym3TNhBuacbo0YX9FFyl5bIoNd8D+CY sVA523MsvTwZEokc/4T9iZTkHMkTw5Y3ZRGqbNwtJvTS/eBl4u0PeFR7frWqY0N2dp3FyH/Xg3Rhf AOkijmUWg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kIIWr-00053N-Pf; Tue, 15 Sep 2020 21:30:21 +0000 Received: from mail-qt1-x84a.google.com ([2607:f8b0:4864:20::84a]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kIIKj-0007Md-PG for linux-arm-kernel@lists.infradead.org; Tue, 15 Sep 2020 21:17:52 +0000 Received: by mail-qt1-x84a.google.com with SMTP id b18so4028775qto.4 for ; Tue, 15 Sep 2020 14:17:46 -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=D8sG/cEP7djDLTapvipoPil4TaVPwtS1uBYZ8/rqMfU=; b=JLHBY9AgkNxAqLTKFWQdxcgJcgqdPUV3TxpRVzNYHFqfab1asZTfQTMH+AqvVnwgCH BnUUjUz0j3cp5q50TzevAEZDIAJ0lOMhBCpOnwtBSEh0VnSduULw/f/WRSJ73y/PSR3g wAtqSI76OkKjfWf3WP25K5JUjRztC3SdAV4hoFEGhsvOomwFaXZfyUboATVZWnH9zU6D TQIjujxm5SaToqhiVOXT9DXzAt8rmJsm0fOCCNW7HoJrb4YrW0Q0m8CDIdPkQBW+HfF8 vXzn130goo1cQM6GpPk5iZ4YGlPC9oVunx0rEnt4NZEdRJcb4DVF1GJSyIHZDe5/ruiQ l/jQ== 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=D8sG/cEP7djDLTapvipoPil4TaVPwtS1uBYZ8/rqMfU=; b=IcQd4Be5XKIevxWd6zNNKvdTX6XMdrD7HrBEsO54fFQa/BzxMPdJD5bl0JLITwHoej aRp5x76jDUvYcHwEeC0iUzdIJCvag1CgzC/7L/WypgxJzsYnkDIXg5+ZjyutwoFIajOq RkDAi5g4bUAIl225nr8UZzkIBJbeXeSom7n3iOCLnoj2nSX4SZ/wKwrxcDyExtD2hzxZ L1VKEkjoOWq9hjwzp3WmdX9QhscawykxyJUIZLshAqFnXNwO54cBJUCp5bH8F32L7EZF avhTJHFhWiXb6ce3uzE61ML7ZYB74f+C5r+Yq8L54TFPvoTOwjCPu3j5/4tSzTKosGI8 mBJQ== X-Gm-Message-State: AOAM531vfd0CmMmD3O6XCUSQ5DGqGDO3lfhRUhgFo0n17v86dilvXYL8 W1Z/sopVImTwVK9FxrTgB/pwo3JjgS3d1WJM X-Google-Smtp-Source: ABdhPJzlRX414ae6dY3KcWoPCkTBwkZK3ld5YB1kdMEENNAIrBphNAvoJTIWKdIYK4+jfcGWQyTwv8zsQNqqfSmk X-Received: from andreyknvl3.muc.corp.google.com ([2a00:79e0:15:13:7220:84ff:fe09:7e9d]) (user=andreyknvl job=sendgmr) by 2002:ad4:58e3:: with SMTP id di3mr3798476qvb.54.1600204665622; Tue, 15 Sep 2020 14:17:45 -0700 (PDT) Date: Tue, 15 Sep 2020 23:16:16 +0200 In-Reply-To: Message-Id: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.28.0.618.gf4bc123cb7-goog Subject: [PATCH v2 34/37] 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-20200915_171749_865525_5B55B15B X-CRM114-Status: GOOD ( 15.87 ) 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 | 19 +++++++++++++------ mm/kasan/report.c | 11 ++++++++--- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c index cdc23662691c..ac79819317f2 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,17 +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; + bool is_write = ((esr & ESR_ELx_WNR) >> ESR_ELx_WNR_SHIFT) != 0; - pr_alert("Memory Tagging Extension Fault in %pS\n", (void *)regs->pc); - pr_alert(" %s at address %lx\n", is_write ? "Write" : "Read", addr); - pr_alert(" Pointer tag: [%02x], memory tag: [%02x]\n", - mte_get_ptr_tag(addr), - mte_get_mem_tag((void *)addr)); + /* + * 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 c904edab33b8..34ef81736d73 100644 --- a/mm/kasan/report.c +++ b/mm/kasan/report.c @@ -65,9 +65,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.618.gf4bc123cb7-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel