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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id BB3D1C6FA82 for ; Mon, 12 Sep 2022 17:17:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C0E906B0071; Mon, 12 Sep 2022 13:17:58 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BBBD36B0073; Mon, 12 Sep 2022 13:17:58 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A5C388D0001; Mon, 12 Sep 2022 13:17:58 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 932836B0071 for ; Mon, 12 Sep 2022 13:17:58 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 646F71205F0 for ; Mon, 12 Sep 2022 17:17:58 +0000 (UTC) X-FDA: 79904091036.08.71FCD03 Received: from mail-yw1-f173.google.com (mail-yw1-f173.google.com [209.85.128.173]) by imf17.hostedemail.com (Postfix) with ESMTP id 143694008F for ; Mon, 12 Sep 2022 17:17:57 +0000 (UTC) Received: by mail-yw1-f173.google.com with SMTP id 00721157ae682-3452214cec6so109578057b3.1 for ; Mon, 12 Sep 2022 10:17:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date; bh=+KtF588ZPlxi3VVUd2CaBCEItNHS+QL93SWbYzWuiuM=; b=OXLJnC7mayQ65WmxSisAIogqRcQ50y/kjx+5g26ONLzrrq2Q/jiDnXAT1KKWCbb8Jf +nuzmKjbrNq/nfKapg0jgxPf9zBCcHv3QqluUL2kRFnfXbKMcES7rrJTLbVLaa35AkI9 0YeJFc6cXyL3uHLQzu4t1U/kIeslqkMpdO4M20Dk5G7xCGWp+Q0kW53IQTdzSN2XNTaw 974o1kVfqaCiLZGJih2NzdMoFSFsSSLRiZYb/2/ExqrXspaRyi050tBMEuqFqCq5Itld YUO+bw9RTg/N5dbFZhxDIUJLsXFm0T0ueEuWkw2lfrW7hjnMsLlcQ4VHSoudFqN0gP/9 H4QA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date; bh=+KtF588ZPlxi3VVUd2CaBCEItNHS+QL93SWbYzWuiuM=; b=gI1XGC3fhRBo2relDaLfKyLyLQTBZsSBX2cjMcvQ4F6yoWCHRdwF/V3FsxjVrqliwZ Y6BA3XSsZhXzxWfy+Lxq1RFvaCBWV+lq4uA4m9+b92Mo+jn++p6fyejKQjXdw9NZQBFz SCHFdc20C6+iW8nG8aZ5REG1HJZIoKh4HWfDwjB2wncucGg0JAutTRmpDHHp3PpbJKIE eupktkJ/F3nuKIrJlpBOyAYbKD9S1z8Gy1LbGeEHIXmlT++D27IxYNGIpNs8hY1RqiK4 pa6LQVFfjB/rXTXNM/nR+avy0ViXq6J4oDg6PZeg76NcH39vuXZcXcWfHZTfU5t/JDYp cQVA== X-Gm-Message-State: ACgBeo2TVMFd9trIGC+ONwVYhC3QwqdcLgzlJcaUw0C/zYwwcVuZ+uEq 2ZeI/sMB5ldu7Pa5QaOiBGplj6K1p2U+qHaoux0mag== X-Google-Smtp-Source: AA6agR4D5ASo5SV687PploeOcD7X9IAMGVcRbK0zz96aMG1YV0rcPMcRo8kCdUAPctMbIU9aYVRA6+WzU4spKVB/8ZA= X-Received: by 2002:a81:9c2:0:b0:345:4830:1943 with SMTP id 185-20020a8109c2000000b0034548301943mr23749159ywj.86.1663003077193; Mon, 12 Sep 2022 10:17:57 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Marco Elver Date: Mon, 12 Sep 2022 19:17:20 +0200 Message-ID: Subject: Re: [PATCH] kasan: better invalid/double-free report header To: andrey.konovalov@linux.dev Cc: Alexander Potapenko , Andrew Morton , Andrey Konovalov , Dmitry Vyukov , Andrey Ryabinin , kasan-dev@googlegroups.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Andrey Konovalov Content-Type: text/plain; charset="UTF-8" ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1663003078; a=rsa-sha256; cv=none; b=l8OA4Z9iDFAK+CAvR6MoiTkdWTAnGHdecjBK2a+iBiIp6GKBQ9X33B3JEq1C+TrGhWTOoO 4BiesQ7G7J9A5PeEI2j6JoGTTtmHF0fpiX8UpLyNyoBTThyEyvTTtnX2NQgQC6ePH5I434 ydLOZrFQs84VN+HZNwtpDCtwv3E1Dls= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=OXLJnC7m; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf17.hostedemail.com: domain of elver@google.com designates 209.85.128.173 as permitted sender) smtp.mailfrom=elver@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1663003078; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=+KtF588ZPlxi3VVUd2CaBCEItNHS+QL93SWbYzWuiuM=; b=wKV/rrnQkezzTi5ISEDbEVS226eEn62D0aOkqFab3KyX8zI+5JOeW4U/1qlsSrSYaadElV BycMmkWaFKRQM7+Rwyrx4I7F7tcji7Bb5pI5d45nFdKBgIjEC2TkNh3CarYfIOEBI91KTH +jrfPW5jdICbLl8D3dz/qCXhKCW2cxg= Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=OXLJnC7m; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf17.hostedemail.com: domain of elver@google.com designates 209.85.128.173 as permitted sender) smtp.mailfrom=elver@google.com X-Rspam-User: X-Rspamd-Server: rspam06 X-Stat-Signature: iwfbwcif1w977tcrn9h3k7q6ecbe1eeq X-Rspamd-Queue-Id: 143694008F X-HE-Tag: 1663003077-140447 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: On Sun, 11 Sept 2022 at 01:25, wrote: > > From: Andrey Konovalov > > Update the report header for invalid- and double-free bugs to contain > the address being freed: > > BUG: KASAN: invalid-free in kfree+0x280/0x2a8 > Free of addr ffff00000beac001 by task kunit_try_catch/99 It wouldn't hurt showing a full before vs. after report here in the commit message for ease of reviewing. > Signed-off-by: Andrey Konovalov Reviewed-by: Marco Elver > --- > mm/kasan/report.c | 23 ++++++++++++++++------- > mm/kasan/report_generic.c | 3 ++- > mm/kasan/report_tags.c | 2 +- > 3 files changed, 19 insertions(+), 9 deletions(-) > > diff --git a/mm/kasan/report.c b/mm/kasan/report.c > index 39e8e5a80b82..df3602062bfd 100644 > --- a/mm/kasan/report.c > +++ b/mm/kasan/report.c > @@ -175,17 +175,14 @@ static void end_report(unsigned long *flags, void *addr) > > static void print_error_description(struct kasan_report_info *info) > { > - if (info->type == KASAN_REPORT_INVALID_FREE) { > - pr_err("BUG: KASAN: invalid-free in %pS\n", (void *)info->ip); > - return; > - } > + pr_err("BUG: KASAN: %s in %pS\n", info->bug_type, (void *)info->ip); > > - if (info->type == KASAN_REPORT_DOUBLE_FREE) { > - pr_err("BUG: KASAN: double-free in %pS\n", (void *)info->ip); > + if (info->type != KASAN_REPORT_ACCESS) { > + pr_err("Free of addr %px by task %s/%d\n", > + info->access_addr, current->comm, task_pid_nr(current)); > return; > } > > - pr_err("BUG: KASAN: %s in %pS\n", info->bug_type, (void *)info->ip); > 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, > @@ -420,6 +417,18 @@ static void complete_report_info(struct kasan_report_info *info) > } else > info->cache = info->object = NULL; > > + switch (info->type) { > + case KASAN_REPORT_INVALID_FREE: > + info->bug_type = "invalid-free"; > + break; > + case KASAN_REPORT_DOUBLE_FREE: > + info->bug_type = "double-free"; > + break; > + default: > + /* bug_type filled in by kasan_complete_mode_report_info. */ > + break; > + } > + > /* Fill in mode-specific report info fields. */ > kasan_complete_mode_report_info(info); > } > diff --git a/mm/kasan/report_generic.c b/mm/kasan/report_generic.c > index 087c1d8c8145..043c94b04605 100644 > --- a/mm/kasan/report_generic.c > +++ b/mm/kasan/report_generic.c > @@ -132,7 +132,8 @@ void kasan_complete_mode_report_info(struct kasan_report_info *info) > struct kasan_alloc_meta *alloc_meta; > struct kasan_free_meta *free_meta; > > - info->bug_type = get_bug_type(info); > + if (!info->bug_type) > + info->bug_type = get_bug_type(info); > > if (!info->cache || !info->object) > return; > diff --git a/mm/kasan/report_tags.c b/mm/kasan/report_tags.c > index d3510424d29b..ecede06ef374 100644 > --- a/mm/kasan/report_tags.c > +++ b/mm/kasan/report_tags.c > @@ -37,7 +37,7 @@ void kasan_complete_mode_report_info(struct kasan_report_info *info) > bool is_free; > bool alloc_found = false, free_found = false; > > - if (!info->cache || !info->object) { > + if ((!info->cache || !info->object) && !info->bug_type) { > info->bug_type = get_common_bug_type(info); > return; > } > -- > 2.25.1 >