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>
next prev parent 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: linkBe 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.