Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp1492877pxb; Fri, 13 Nov 2020 14:22:35 -0800 (PST) X-Google-Smtp-Source: ABdhPJzJ/V0wTNAVPDRHoCvacbz4o97Ja9JA7S+oGoQG0/KiSub1jBR6eAWlFPRxykq7IZJqO+ap X-Received: by 2002:aa7:d34e:: with SMTP id m14mr4713679edr.42.1605306155686; Fri, 13 Nov 2020 14:22:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605306155; cv=none; d=google.com; s=arc-20160816; b=WlWVjgExHVCfb8lo/eXUUjVdwHMT8DWk0KJdVPQWMw53ycxEkmrHzs3bWG1cPMf4Bt KOgCwWU4zegMxBZnw6IQ3TZFEPuz45kLFRpn8npqVVlBM6A0P+vLaSfpmSJoCoJ3QLbY CAaWZ7/LgQ3Mf7J2MvRki7tGtH8BAQwCUEm2J4HX0+gNPKyBl+j0MVd69dFzHlOVcda7 Wn1GgYIDS2jfYYzwCWd/KNVEfQAWFCFF0kauaI2srzoz6uP8mhklQBQJOzyy2nf0arYO T/4utBfjH1rlT9QxAHs8+YdWKV+2CLQ90tc7SYB7VAukarhAfSQ5VJ/MKkNgVGDGHLPC BUDA== 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=xaa+VV69xly6NtD9oDw0a4fgTp58XYd2+h3RtuHf6eE=; b=Ddv29rqWxQvwSJCAh9nCi4k0ZwA54Yx7zEW4dmqS9KQC32raCY2i3xouX+ynSdbhfT Rg6Y4PnCQArb0zI8fg/xFEKd2eLUo6MaKuBaFCDkIG6Gss+MAPpMig+G+XQCVaFnaMlB 7V2QjKRoPi+B0kM6UUmrZr6sG9s6+6wWRRyRN/XS4pnEbZ+EL6fwydrO7GyZZEj6Pkrw KFLH5b75+vgcNXRip3y8o2YqBnhsqktUpoqsg+/2CeDqXM2wTULRezs22wOogPMPPBGN CPn8MAo1vkWVdNiE2Hcm4oPKrvUvOHPlP6d7+wtGLJrqFdPjliHlAhQs0A5c5hPs2phJ BDOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=CWWbP+Cr; 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 t17si7819383ejs.13.2020.11.13.14.22.13; Fri, 13 Nov 2020 14:22:35 -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=CWWbP+Cr; 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 S1726685AbgKMWSK (ORCPT + 99 others); Fri, 13 Nov 2020 17:18:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48630 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726606AbgKMWRy (ORCPT ); Fri, 13 Nov 2020 17:17:54 -0500 Received: from mail-wm1-x349.google.com (mail-wm1-x349.google.com [IPv6:2a00:1450:4864:20::349]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 07F02C061A4B for ; Fri, 13 Nov 2020 14:17:48 -0800 (PST) Received: by mail-wm1-x349.google.com with SMTP id y1so4709428wma.5 for ; Fri, 13 Nov 2020 14:17:47 -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=xaa+VV69xly6NtD9oDw0a4fgTp58XYd2+h3RtuHf6eE=; b=CWWbP+CrzKArtLZOHT697dIqhABlh9KFuDkDt6jVUfI1BP70ptWt0ekQM0OeYO5m0S APNUU1m1/gJ8g/NqB4fVaTWBJfhdHkuzJsJ0FMlinYFq13lLmMVFEpw2oDF8wrpOzib0 19ofn1SgHBRtrBHUpRlY0C4w79GZ3dG1m38JQNg3Cv9D3s+EWna3qcOaI9s0fDJexrs7 kS5gHTAxCc8BvY4GnZyUEHmoFS/r5JKyTGOt3B3cQJ/xIYGs3FD3L8SWeMvE5NqX9V+e 48AGiSiZKTgy8sK2/RnKMaHHfA3Kn+O6Ee9oqk9knT16CM65kb46rHJ4KVr3X5GmxA5R 3K0g== 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=xaa+VV69xly6NtD9oDw0a4fgTp58XYd2+h3RtuHf6eE=; b=BvcOXqkrpEXks+BN1UXXVshFDCg2ITqgC9vUnKzNiRVfme+vN7QxigVGRi7Cr7E1xB duuf4x1yND4RJ7ppWTnVama3vS4wvhKHl61luPHFSzC+cC+hkZgJ13DCCsAQz8zFjTV3 QQ29SXylz85w8lR1KBD1i36jtCINlr4neeimjLQYqdqYErory0y2ohRV0UDzEB1XNia2 E6NQ2Lf2pJ30lbLYtk2dnv2ukfAeAHhe0aw8Kr3Ypy06VoWgVavN5LKGCZOOg3hQ0g1V Pd1vnq+OglN6tcGChq6fvQ9IHt2W3x44HFPQQ847RVi1id2CxR16QabfMpvKI6v0nna7 4+2A== X-Gm-Message-State: AOAM531/FI1Ln3Kqk0I5HAU4IAS3sHURrgMZa9tLCQ5DCIiLO+mAC8sr a06x0nIiFRKi+xIFbQJYYbjqC7TpJyHY9MKZ 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:adf:e983:: with SMTP id h3mr5834862wrm.382.1605305866774; Fri, 13 Nov 2020 14:17:46 -0800 (PST) Date: Fri, 13 Nov 2020 23:16:06 +0100 In-Reply-To: Message-Id: <53055673bff17607e42bc518dd31b56cb3e2a3af.1605305705.git.andreyknvl@google.com> Mime-Version: 1.0 References: X-Mailer: git-send-email 2.29.2.299.gdc1121823c-goog Subject: [PATCH mm v10 38/42] kasan, arm64: print report from tag fault handler From: Andrey Konovalov To: Andrew Morton Cc: Catalin Marinas , Will Deacon , Vincenzo Frascino , Dmitry Vyukov , Andrey Ryabinin , Alexander Potapenko , Marco Elver , Evgenii Stepanov , Branislav Rankov , Kevin Brodsky , 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 Reviewed-by: Alexander Potapenko --- 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 1e4b9353c68a..3aac2e72f81e 100644 --- a/arch/arm64/mm/fault.c +++ b/arch/arm64/mm/fault.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -298,10 +299,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 2c503b667413..a69c2827a125 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.299.gdc1121823c-goog