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 91CECC61DA4 for ; Thu, 9 Feb 2023 08:55:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 017DE6B0071; Thu, 9 Feb 2023 03:55:57 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id F09946B0072; Thu, 9 Feb 2023 03:55:56 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DD1216B0074; Thu, 9 Feb 2023 03:55:56 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id CEAB96B0071 for ; Thu, 9 Feb 2023 03:55:56 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 922B91A01E2 for ; Thu, 9 Feb 2023 08:55:56 +0000 (UTC) X-FDA: 80447145912.25.E3C9A8C Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) by imf20.hostedemail.com (Postfix) with ESMTP id B7DBB1C0004 for ; Thu, 9 Feb 2023 08:55:54 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=EwK6fYrk; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf20.hostedemail.com: domain of dvyukov@google.com designates 209.85.208.171 as permitted sender) smtp.mailfrom=dvyukov@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1675932954; 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=j/nTYGgZ1XHRzJPT8H8qfStrWDflyDZ6TSwRAnls8wY=; b=ETm69NQn/NSxR3fUSfGed1NV2Oux+eNKzEXd0znv11R5TA8HIMvRGeEz7kujubNYprUBz1 g6WvWHSg+SuVGJpxGEwnWCdkFPnYYZPXDknLB7pvUPvI2odNnZAdY7ZmoOfWB00o/+UK4d rbAN7fe89V4RUMk9tILgDchQMVSs8ds= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=EwK6fYrk; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf20.hostedemail.com: domain of dvyukov@google.com designates 209.85.208.171 as permitted sender) smtp.mailfrom=dvyukov@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1675932954; a=rsa-sha256; cv=none; b=Hl+PpJXVOlpGI8zIwpoYhlvYBfYYLHqe6doiinCLIqBxYXYT0hQ3suguJOOun8x4mctduL 0Vv8B/42rHBm3QSa4Ss9pVFyPeQftrtkcYpMQm/aPzcl1ndGKRM0ky6WeU5iR93yRtvuV5 Hz7Vze5/mV73F9KCG03u/r80ZpKUwn8= Received: by mail-lj1-f171.google.com with SMTP id b13so1253359ljf.8 for ; Thu, 09 Feb 2023 00:55:54 -0800 (PST) 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:message-id:reply-to; bh=j/nTYGgZ1XHRzJPT8H8qfStrWDflyDZ6TSwRAnls8wY=; b=EwK6fYrkbaY11TxD8La7TSPkBhTJXzAaRcqe2koKaQ4ftSuYE4HvFeHBpaevRd22At nzkg5y5yTZXhDSdEiy02CqKU0kcwWDJ+5g2nEaPIzVvCHLiA2DN+Uttv262LlydVfk8A Mlc5HAcENMsxP4oZDWhTt0ZZ2JYL3NlIAMQXyxkigLUbRQkU8ObTcLwPmrUgXkXYHyb9 JIMcd1HGIV2p/ASRiKDOamVn7+Opq40c4w4Td++dES3321l3vKbVbEEeGNVxaZN/PMKu YOIp55T1ZIacR92YVFZgOci/ZXC8ZJLS/ICJPXoO3rIcS/8mcUCK2Fd6j+MZ1b8An+s2 PKQw== 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:message-id :reply-to; bh=j/nTYGgZ1XHRzJPT8H8qfStrWDflyDZ6TSwRAnls8wY=; b=iHKFsbDTYq1tMuTt7adtdo5hosb51tfIEg5P5JlOAjHQLXcl2BM7+7Z4v3YgjvHPxv 270RKc7/vyYLNAzd/36E5zewS1JVdjci6NORaWWM9pYOdmCtyEPMFnux0psOOnjZfszj x6XQZKH5IwMJAX585Ov7GseQZS1Hi7F0c8ooNlBEKn5ft/6u+imqDCuJsTba2XuaSmCe BQy/ANnURFEzvavbXZwDClE/BU7YZRrRzI6HGDXFHvaq6o9TA+BOov26nNBRL97Dta0e G28vFo63aKSJzYX9dH+LGskl2hSLIosG/E7oS3bIYFU+uYoFGv9i4lHOvslqx/DKaHFY lV2g== X-Gm-Message-State: AO0yUKXQjj5BkUybQF4yyxDCI620pCEwtM6tB/XWB6hA3p/NCc6kmd3K QqZVxFc9ZSifSrX9T1wRMf/LNwXtrxhkftnUbW5cYw== X-Google-Smtp-Source: AK7set/nGmuNrCLdSZY/fa2Ckq+YgbShiO8RbfWjafqP8Ay+nNy1XXH8TEsvtFlnxU7tpvowJhm4lwF1ubdBSZCMJPY= X-Received: by 2002:a05:651c:2cb:b0:28b:7bae:65de with SMTP id f11-20020a05651c02cb00b0028b7bae65demr1615983ljo.124.1675932952903; Thu, 09 Feb 2023 00:55:52 -0800 (PST) MIME-Version: 1.0 References: <20230209031159.2337445-1-ouyangweizhao@zeku.com> In-Reply-To: <20230209031159.2337445-1-ouyangweizhao@zeku.com> From: Dmitry Vyukov Date: Thu, 9 Feb 2023 09:55:39 +0100 Message-ID: Subject: Re: [PATCH v2] kasan: fix deadlock in start_report() To: Weizhao Ouyang Cc: Andrey Ryabinin , Alexander Potapenko , Andrey Konovalov , Vincenzo Frascino , Andrew Morton , kasan-dev@googlegroups.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Weizhao Ouyang , Shuai Yuan , Peng Ren Content-Type: text/plain; charset="UTF-8" X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: B7DBB1C0004 X-Stat-Signature: 9f7izawwwqs96dwyb5zmgke5b96rgkq1 X-HE-Tag: 1675932954-349472 X-HE-Meta: U2FsdGVkX18DonS5SALRIxmyyJgC6H/b9yu05tch5xLbdED8Jd9v1XRUGWGxJAndU1MiNbEmOnRVCu1Srsg6LFRzJOR+iBcGGmWbEsRx0pT4Gzdyz+9tAzU+aO0JtfLMCjv0DsMw/blk8H6t5+7HqGF64xwSl1fScX8bWFX+YsxwhDNdRiK4pgDT7B3RzJXA4Su13CFo9PDWc7Cz9rN27AZ2BNYFoHSkdNFrIrQ5y0NOasDCesVaVjJAqt2Jkim5A4cfTq2m23oo/RKvhccUpZYxJW2qNWijnwONtBzPiGsbulMA1HXRwJsrEaEflR4BR6sarUFLf9q4raHIsrw9oxy2jCd91QcXjhP/6WcmfBJPkFPOI3IL0ku+a+7ILteFRBJWtveNCLcOBRzyqYBWRhPnPuMT0m5vV+x832km3gsMtkZeCAvLUu8GEq4HHC1lqrC7zv6wMfRhrdl5B+HFXKLwSdEqmbQi9qFOBwCeH8gRoFkfwWDRh2q4QcQ0aqrD2WZfVFrJjIWOGcw6L4BT4dpAvBKYGLlfphM46KQmr5V7p3TkFg2HNt/3jdrIO7cEP2nCBYlnfHHsS1c93DttMawGuGKWcsVJQo9YDnrKscLT5VR/Dcdhd0jmu1UQK7pgk5r5mAa+Zp1RvpD26MVYs0RWpQJ1s2tX30qxvTDRXUp63TyE9e2d0IUzpU+UMMBaWsxEv6nCP6zSYB+rX4+M992V6jPvS/iRWat4ylFFWU77fvhlIgyNw5P6brjs9Y/tJbpqlxmEK9xNSztCfnneKplU5MbHOgGBXsgLuEl5ToH6pbFNpeig3iuDk4YvQ5wTFztumjvdYdEZC8zqwo8gJclkGwkfUHOX0GwSTyhs6oPuGSJ/vp67LNzfg0z36B73pKw+F42h2B7O9Bm4VR6Z0VCAI1gzN7b8amYYVOuGFkaq0TbjvTjhdmxKIxqgOkNfxm/+PWq8BmkgfaylsDw oVlTyXF3 RYt4Vf4LKPQy/6L2oNjguPYe2ZDZ6CcopsVERzGuY+jHieXqjUwJaYIq2lV+0hvc4k1mt81HKP6t4Vb+D4ELpno54Zyvigzv/l/QtRQHlpA9dJbM3K/GTI1Va2FzN57LGuwe0Q9j8V8H9gNsNBZw5SOhUVbLULWxgu4d1v6/N1Xr+aRs/vXW9In75Id66KiotRZGhScMLFTX/DE3tfIahQfRrEjOYUWJ5D1WZDWDPRsvCzKlbDowaBIWpJEpStmX8AG0Um3uG4Ca7OMn1FOv129xSKAKsm/RsuoftVwLQ4If/OBGCeI1IM9iRSfq52NiBLWU51/YQFbJagej2QFOb3mxMWBsGTAJSuZkB6+b8i5yP1hUoKLmtD71zJmop0ZuqGzKQYDHd97Q+URP+XOz8RCSaB89dzLkZbyzeyaPdPs/hXxtl51r2rtHfYWuvOIo39nT0qHX4Rc3EjeLFPMH9htVU4BqE3zVTb06doXMdRKXwnYVwapvw6xZO2Ak1JO3t9/j/9eH8SkH2PM+r2ggnlCMsNtpTv0KCltqbaYnk/kD+OcA= 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 Thu, 9 Feb 2023 at 04:27, Weizhao Ouyang wrote: > > From: Weizhao Ouyang > > From: Shuai Yuan > > Calling start_report() again between start_report() and end_report() > will result in a race issue for the report_lock. In extreme cases this > problem arose in Kunit tests in the hardware tag-based Kasan mode. > > For example, when an invalid memory release problem is found, > kasan_report_invalid_free() will print error log, but if an MTE exception > is raised during the output log, the kasan_report() is called, resulting > in a deadlock problem. The kasan_depth not protect it in hardware > tag-based Kasan mode. I think checking report_suppressed() would be cleaner and simpler than ignoring all trylock failures. If trylock fails, it does not mean that the current thread is holding it. We of course could do a custom lock which stores current->tid in the lock word, but it looks effectively equivalent to checking report_suppressed(). > Signed-off-by: Shuai Yuan > Reviewed-by: Weizhao Ouyang > Reviewed-by: Peng Ren > --- > Changes in v2: > -- remove redundant log > > mm/kasan/report.c | 25 ++++++++++++++++++++----- > 1 file changed, 20 insertions(+), 5 deletions(-) > > diff --git a/mm/kasan/report.c b/mm/kasan/report.c > index 22598b20c7b7..aa39aa8b1855 100644 > --- a/mm/kasan/report.c > +++ b/mm/kasan/report.c > @@ -166,7 +166,7 @@ static inline void fail_non_kasan_kunit_test(void) { } > > static DEFINE_SPINLOCK(report_lock); > > -static void start_report(unsigned long *flags, bool sync) > +static bool start_report(unsigned long *flags, bool sync) > { > fail_non_kasan_kunit_test(); > /* Respect the /proc/sys/kernel/traceoff_on_warning interface. */ > @@ -175,8 +175,13 @@ static void start_report(unsigned long *flags, bool sync) > lockdep_off(); > /* Make sure we don't end up in loop. */ > kasan_disable_current(); > - spin_lock_irqsave(&report_lock, *flags); > + if (!spin_trylock_irqsave(&report_lock, *flags)) { > + lockdep_on(); > + kasan_enable_current(); > + return false; > + } > pr_err("==================================================================\n"); > + return true; > } > > static void end_report(unsigned long *flags, void *addr) > @@ -468,7 +473,10 @@ void kasan_report_invalid_free(void *ptr, unsigned long ip, enum kasan_report_ty > if (unlikely(!report_enabled())) > return; > > - start_report(&flags, true); > + if (!start_report(&flags, true)) { > + pr_err("%s: report ignore\n", __func__); > + return; > + } > > memset(&info, 0, sizeof(info)); > info.type = type; > @@ -503,7 +511,11 @@ bool kasan_report(unsigned long addr, size_t size, bool is_write, > goto out; > } > > - start_report(&irq_flags, true); > + if (!start_report(&irq_flags, true)) { > + ret = false; > + pr_err("%s: report ignore\n", __func__); > + goto out; > + } > > memset(&info, 0, sizeof(info)); > info.type = KASAN_REPORT_ACCESS; > @@ -536,7 +548,10 @@ void kasan_report_async(void) > if (unlikely(!report_enabled())) > return; > > - start_report(&flags, false); > + if (!start_report(&flags, false)) { > + pr_err("%s: report ignore\n", __func__); > + return; > + } > pr_err("BUG: KASAN: invalid-access\n"); > pr_err("Asynchronous fault: no details available\n"); > pr_err("\n"); > -- > 2.25.1 > > -- > You received this message because you are subscribed to the Google Groups "kasan-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an email to kasan-dev+unsubscribe@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/msgid/kasan-dev/20230209031159.2337445-1-ouyangweizhao%40zeku.com.