From patchwork Tue Mar 28 14:00:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrey Konovalov X-Patchwork-Id: 744296 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3vssy7219Vz9s7M for ; Wed, 29 Mar 2017 01:01:35 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="jv6QdAYx"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753267AbdC1OBa (ORCPT ); Tue, 28 Mar 2017 10:01:30 -0400 Received: from mail-wr0-f170.google.com ([209.85.128.170]:35923 "EHLO mail-wr0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752667AbdC1OBV (ORCPT ); Tue, 28 Mar 2017 10:01:21 -0400 Received: by mail-wr0-f170.google.com with SMTP id w11so88284039wrc.3 for ; Tue, 28 Mar 2017 07:01:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=YzzYLMyUh5jbj0j9GU5UxVGvp8ttTavOC8zHWEO5R3E=; b=jv6QdAYxcuzMNL/+0NlUm3e3aOK4sczsQQWhVGGjKJUgW6fomtN3PvMSCbJ1rK8N2f x2mm6x/VweT3D6+DJOsjRjBVRLeNxDniDvH43JS+ketFa5tcnX9Ku7CzmHBdoT9MEKqn exBJQbJg8YdD4rOBZtLuMeRH+UraNqJY8okJljjYDouzsuovoUU1a6wVuaW5ON0LpuoI EMwr3YTqM7Vga2Z2Eev2L+mnPxBdnI2by1YyEl7d1dLk1rFKF5Z6M1xz4nZPIXmi1yRW C7T/t5OTrxFMVTQtcqBIqjtDFldi7S6U9IzzQKKPqi0iOntouyo24NDOLHUUczb22YEq lt/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=YzzYLMyUh5jbj0j9GU5UxVGvp8ttTavOC8zHWEO5R3E=; b=c40uyZygTrMbcUNLWMXsYjjuggSVIbZmRMbOmYU7KlCBXaSfmbFyZfIVPkyTEklhKP /QGlPXVJYMvJHNTnU6KkWSZjwW19DFnwEGbYBu6t7mF64wMjerDrtiCQ6omRHSsp99XJ kdHBuOsKWqRiTu9OEBvy3E6Gr/hQH2+3VsFMJGv7wWU3sdaSuYYx9kd8P5kV7uT/qyQ5 J7lRZyLWEhOmqzocPFf0G1w/ekzmLkNZ1R9un1Ve20kt8Yk0xDahJUEQzzs6m7oKVRqt 85zUeV/u+fIALaDgxjqDk2j94SjwwD9XXAj6WAsorz88c3A3NxQPnhmu0qFskAvbpG4V I5Bg== X-Gm-Message-State: AFeK/H220KvvCjfpFAm7QpLYBEz/jlfrMyv0L2PpVIALDz9YCURzU58qiWv6sYN7ETjC58YL X-Received: by 10.28.15.12 with SMTP id 12mr14667387wmp.22.1490709659875; Tue, 28 Mar 2017 07:00:59 -0700 (PDT) Received: from andreyknvl0.muc.corp.google.com ([100.105.12.17]) by smtp.gmail.com with ESMTPSA id 75sm4926977wmp.2.2017.03.28.07.00.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 28 Mar 2017 07:00:58 -0700 (PDT) Received: by andreyknvl0.muc.corp.google.com (Postfix, from userid 206546) id 3D363181A4C; Tue, 28 Mar 2017 16:00:55 +0200 (CEST) From: Andrey Konovalov To: "David S . Miller" , Eric Dumazet , Willem de Bruijn , Craig Gallek Cc: netdev@vger.kernel.org, Dmitry Vyukov , Kostya Serebryany , Andrey Konovalov Subject: [PATCH v4 1/9] kasan: introduce helper functions for determining bug type Date: Tue, 28 Mar 2017 16:00:41 +0200 Message-Id: <69485dff9439fca82343965d3746b52c36716d91.1490383597.git.andreyknvl@google.com> X-Mailer: git-send-email 2.12.2.564.g063fe858b8-goog In-Reply-To: References: In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Introduce get_shadow_bug_type() function, which determines bug type based on the shadow value for a particular kernel address. Introduce get_wild_bug_type() function, which determines bug type for addresses which don't have a corresponding shadow value. Signed-off-by: Andrey Konovalov --- mm/kasan/report.c | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/mm/kasan/report.c b/mm/kasan/report.c index f479365530b6..e3af37b7a74c 100644 --- a/mm/kasan/report.c +++ b/mm/kasan/report.c @@ -49,7 +49,13 @@ static const void *find_first_bad_addr(const void *addr, size_t size) return first_bad_addr; } -static void print_error_description(struct kasan_access_info *info) +static bool addr_has_shadow(struct kasan_access_info *info) +{ + return (info->access_addr >= + kasan_shadow_to_mem((void *)KASAN_SHADOW_START)); +} + +static const char *get_shadow_bug_type(struct kasan_access_info *info) { const char *bug_type = "unknown-crash"; u8 *shadow_addr; @@ -96,6 +102,27 @@ static void print_error_description(struct kasan_access_info *info) break; } + return bug_type; +} + +static const char *get_wild_bug_type(struct kasan_access_info *info) +{ + const char *bug_type; + + if ((unsigned long)info->access_addr < PAGE_SIZE) + bug_type = "null-ptr-deref"; + else if ((unsigned long)info->access_addr < TASK_SIZE) + bug_type = "user-memory-access"; + else + bug_type = "wild-memory-access"; + + return bug_type; +} + +static void print_error_description(struct kasan_access_info *info) +{ + const char *bug_type = get_shadow_bug_type(info); + pr_err("BUG: KASAN: %s in %pS at addr %p\n", bug_type, (void *)info->ip, info->access_addr); @@ -265,18 +292,11 @@ static void print_shadow_for_address(const void *addr) static void kasan_report_error(struct kasan_access_info *info) { unsigned long flags; - const char *bug_type; kasan_start_report(&flags); - if (info->access_addr < - kasan_shadow_to_mem((void *)KASAN_SHADOW_START)) { - if ((unsigned long)info->access_addr < PAGE_SIZE) - bug_type = "null-ptr-deref"; - else if ((unsigned long)info->access_addr < TASK_SIZE) - bug_type = "user-memory-access"; - else - bug_type = "wild-memory-access"; + if (!addr_has_shadow(info)) { + const char *bug_type = get_wild_bug_type(info); pr_err("BUG: KASAN: %s on address %p\n", bug_type, info->access_addr); pr_err("%s of size %zu by task %s/%d\n",