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 088D2C6FA83 for ; Sun, 11 Sep 2022 11:48:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0F0D86B0073; Sun, 11 Sep 2022 07:48:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0A0786B0074; Sun, 11 Sep 2022 07:48:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EA9BA80008; Sun, 11 Sep 2022 07:48:56 -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 DAEF06B0073 for ; Sun, 11 Sep 2022 07:48:56 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id B3DEA80C11 for ; Sun, 11 Sep 2022 11:48:56 +0000 (UTC) X-FDA: 79899633072.23.A629101 Received: from mail-qt1-f174.google.com (mail-qt1-f174.google.com [209.85.160.174]) by imf10.hostedemail.com (Postfix) with ESMTP id 51519C007E for ; Sun, 11 Sep 2022 11:48:56 +0000 (UTC) Received: by mail-qt1-f174.google.com with SMTP id z18so4409687qts.7 for ; Sun, 11 Sep 2022 04:48:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date; bh=f3KWsKgAEFkYsTG0akgEuS+HAh1aYxDAn4WpE5Ns8zA=; b=GQyUfzr0qn9l1B1gRLnzR/F5Sfuss4HGg93KeBu84RPSKCiIyCcVDuQRbpIOqnHRNa 7hgdkmoeEqbUWdIz19LnGbiwUqIt5BI8W7agKxfK6pGYJA4M2xknml4+zgLGRbTxWhfu I75iEIyLleW5WuRS85vFNXDOXvhbSTaF39AT7/TTp2Iox1+mSecUjqqWGWcK9D8Eo89I SA/CAl+LOC1QCQKhguDtWN9jv4y4PVo4SXclU+OgpAJaMpQHl6Pim9gbso+mO5zH28nS jLAKvVWrmi82/Sirnrnz78R6NuhwbhVA999GWRscIaHu/mol4/GPc7A9UyrNzsE0O8JZ mmPA== 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=f3KWsKgAEFkYsTG0akgEuS+HAh1aYxDAn4WpE5Ns8zA=; b=BpUa19cobtyb2yyMG04JERUo2fXEOwIXzeDgtJQM8Bvs0+kHYqlqavwigERjranzUu kalpZLgVUeQp1glhAiJXpkGBI4zOU/KQYvraeu20CUjN5SBMM+qOx2M28iMWnyyUnoVV j7C5Wty3Wwmg1pjYquiaiFa/jUdIFFYx2IcG2TWVkl6AxpfwpN78LvNb2H73CEa3xrFp DuE76//ETZaODFmcFCOgfm5/pAwjQ4gGzOo6AYscCifvcgdR3yYA6EitUVPngzEflV3n aKTK7tmpTTdEqc3048Gz/Z4TNw82kWUX3o3q/mJAsZfTG6F5zaxhpHB1khYMZhhLlwKq Hyvw== X-Gm-Message-State: ACgBeo11dCDIoPtoGmy6iYknKO0bCJuC2tYfhFLC0SsXuYgMcuE2RQFN Kdu4pFmEzyGimNJ9TZEyQMH2MI2eiVutxgA5LbU= X-Google-Smtp-Source: AA6agR56gHjB5ue3TrbJmvLzBB5HQbmuzY2YMQEVmbx75ESdHCJ96FI7V9cH/K3X3JyvKI8dZbDxhztVacQte/+lngU= X-Received: by 2002:ac8:7d85:0:b0:35b:acfc:f3a1 with SMTP id c5-20020ac87d85000000b0035bacfcf3a1mr4031933qtd.106.1662896935625; Sun, 11 Sep 2022 04:48:55 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Andrey Konovalov Date: Sun, 11 Sep 2022 13:48:45 +0200 Message-ID: Subject: Re: [PATCH] kasan: better invalid/double-free report header To: andrey.konovalov@linux.dev Cc: Marco Elver , Alexander Potapenko , Andrew Morton , Dmitry Vyukov , Andrey Ryabinin , kasan-dev , Linux Memory Management List , LKML , Andrey Konovalov Content-Type: text/plain; charset="UTF-8" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1662896936; 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=f3KWsKgAEFkYsTG0akgEuS+HAh1aYxDAn4WpE5Ns8zA=; b=ng7Z2hLdlz0tghdZJNps0/86pOVf3X89tkaAj5z6oFCwNCtxOh4p6at811uvOXnbL/FBAb xrOw1X88p9VrAoTTqa3K3ah3O36u7zv7h/yabd1H16NZ2dbBmmKymIJccNW32B/FriByUX jjgOCAXuxfuNdh3rrb+hDa1dCzxEoMQ= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=GQyUfzr0; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf10.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.160.174 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1662896936; a=rsa-sha256; cv=none; b=uHaMf/85BSPUNjx6wKl80P6mZwNeq77PHtnwJnpXdaRGwWYBqFckNOKF3ML1Yb3g6tznPb zhV/6wxGkFeky6krLRPC5Qobh/WkNCJ7GLYOgqCQ9EQCLgVIEvDahik6xybtKEJSCvstr5 WT+NnE6EJnAkle/UdrG6BSgTI0hBKOQ= X-Rspam-User: X-Stat-Signature: ox3xhbxaqsxi5j8s6agd1e74pprwb1qg X-Rspamd-Queue-Id: 51519C007E Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=GQyUfzr0; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf10.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.160.174 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com X-Rspamd-Server: rspam12 X-HE-Tag: 1662896936-52833 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, Sep 11, 2022 at 1:25 AM 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 > > Signed-off-by: Andrey Konovalov Forgot to mention: this goes on top of the "kasan: switch tag-based modes to stack ring from per-object metadata" series. > --- > 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 >