All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrey Konovalov <andreyknvl@google.com>
To: Andrey Ryabinin <aryabinin@virtuozzo.com>,
	Alexander Potapenko <glider@google.com>,
	Dmitry Vyukov <dvyukov@google.com>,
	kasan-dev@googlegroups.com, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Cc: Andrey Konovalov <andreyknvl@google.com>
Subject: [PATCH v4 1/9] kasan: introduce helper functions for determining bug type
Date: Fri, 24 Mar 2017 20:32:27 +0100	[thread overview]
Message-ID: <69485dff9439fca82343965d3746b52c36716d91.1490383597.git.andreyknvl@google.com> (raw)
In-Reply-To: <cover.1490383597.git.andreyknvl@google.com>
In-Reply-To: <cover.1490383597.git.andreyknvl@google.com>

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 <andreyknvl@google.com>
---
 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",
-- 
2.12.1.578.ge9c3154ca4-goog

WARNING: multiple messages have this Message-ID (diff)
From: Andrey Konovalov <andreyknvl@google.com>
To: Andrey Ryabinin <aryabinin@virtuozzo.com>,
	Alexander Potapenko <glider@google.com>,
	Dmitry Vyukov <dvyukov@google.com>,
	kasan-dev@googlegroups.com, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Cc: Andrey Konovalov <andreyknvl@google.com>
Subject: [PATCH v4 1/9] kasan: introduce helper functions for determining bug type
Date: Fri, 24 Mar 2017 20:32:27 +0100	[thread overview]
Message-ID: <69485dff9439fca82343965d3746b52c36716d91.1490383597.git.andreyknvl@google.com> (raw)
In-Reply-To: <cover.1490383597.git.andreyknvl@google.com>
In-Reply-To: <cover.1490383597.git.andreyknvl@google.com>

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 <andreyknvl@google.com>
---
 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",
-- 
2.12.1.578.ge9c3154ca4-goog

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2017-03-24 19:36 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-28 14:00 [PATCH 0/5] net/packet: fix multiple overflow issues in ring buffers Andrey Konovalov
2017-03-24 19:32 ` [PATCH v4 0/9] kasan: improve error reports Andrey Konovalov
2017-03-24 19:32   ` Andrey Konovalov
2017-03-24 19:32   ` Andrey Konovalov [this message]
2017-03-24 19:32     ` [PATCH v4 1/9] kasan: introduce helper functions for determining bug type Andrey Konovalov
2017-03-28 14:03     ` Andrey Konovalov
2017-03-24 19:32   ` [PATCH v4 2/9] kasan: unify report headers Andrey Konovalov
2017-03-24 19:32     ` Andrey Konovalov
2017-03-24 19:32   ` [PATCH v4 3/9] kasan: change allocation and freeing stack traces headers Andrey Konovalov
2017-03-24 19:32     ` Andrey Konovalov
2017-03-24 19:32   ` [PATCH v4 4/9] kasan: simplify address description logic Andrey Konovalov
2017-03-24 19:32     ` Andrey Konovalov
2017-03-24 19:32   ` [PATCH v4 5/9] kasan: change report header Andrey Konovalov
2017-03-24 19:32     ` Andrey Konovalov
2017-03-24 19:32   ` [PATCH v4 6/9] kasan: improve slab object description Andrey Konovalov
2017-03-24 19:32     ` Andrey Konovalov
2017-03-24 19:32   ` [PATCH v4 7/9] kasan: print page description after stacks Andrey Konovalov
2017-03-24 19:32     ` Andrey Konovalov
2017-03-24 19:32   ` [PATCH v4 8/9] kasan: improve double-free report format Andrey Konovalov
2017-03-24 19:32     ` Andrey Konovalov
2017-03-24 19:32   ` [PATCH v4 9/9] kasan: separate report parts by empty lines Andrey Konovalov
2017-03-24 19:32     ` Andrey Konovalov
2017-03-28 14:00   ` [PATCH v4 1/9] kasan: introduce helper functions for determining bug type Andrey Konovalov
2017-03-28 14:00   ` [PATCH v4 2/9] kasan: unify report headers Andrey Konovalov
2017-03-28 14:00   ` [PATCH v4 3/9] kasan: change allocation and freeing stack traces headers Andrey Konovalov
2017-03-28 14:00   ` [PATCH v4 4/9] kasan: simplify address description logic Andrey Konovalov
2017-03-28 14:00   ` [PATCH v4 5/9] kasan: change report header Andrey Konovalov
2017-03-28 14:00   ` [PATCH v4 6/9] kasan: improve slab object description Andrey Konovalov
2017-03-28 14:00   ` [PATCH v4 7/9] kasan: print page description after stacks Andrey Konovalov
2017-03-28 14:00   ` [PATCH v4 8/9] kasan: improve double-free report format Andrey Konovalov
2017-03-28 14:00   ` [PATCH v4 9/9] kasan: separate report parts by empty lines Andrey Konovalov
2017-03-29 13:33   ` [PATCH v4 0/9] kasan: improve error reports Andrey Ryabinin
2017-03-29 13:33     ` Andrey Ryabinin
2017-03-28 14:00 ` [PATCH 1/5] net/packet: fix overflow in check for priv area size Andrey Konovalov
2017-03-28 14:00 ` [PATCH 2/5] net/packet: add explicit checks for tp_frame_size Andrey Konovalov
2017-03-28 14:00 ` [PATCH 3/5] net/packet: fix overflow in check for tp_frame_nr Andrey Konovalov
2017-03-28 14:00 ` [PATCH 4/5] net/packet: fix overflow in check for tp_reserve Andrey Konovalov
2017-03-28 15:00   ` Willem de Bruijn
2017-03-28 15:11     ` Andrey Konovalov
2017-03-28 15:21       ` Willem de Bruijn
2017-03-28 14:00 ` [PATCH 5/5] net/packet: reorder checks for ring buffer parameters Andrey Konovalov
2017-03-28 15:06 ` [PATCH 0/5] net/packet: fix multiple overflow issues in ring buffers Willem de Bruijn
2017-03-28 15:15   ` Andrey Konovalov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=69485dff9439fca82343965d3746b52c36716d91.1490383597.git.andreyknvl@google.com \
    --to=andreyknvl@google.com \
    --cc=aryabinin@virtuozzo.com \
    --cc=dvyukov@google.com \
    --cc=glider@google.com \
    --cc=kasan-dev@googlegroups.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.