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 778FCC7618D for ; Tue, 4 Apr 2023 07:43:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E81A36B0071; Tue, 4 Apr 2023 03:43:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E2FB56B0074; Tue, 4 Apr 2023 03:43:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CF72A6B0075; Tue, 4 Apr 2023 03:43:22 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id BE6DF6B0071 for ; Tue, 4 Apr 2023 03:43:22 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 7EE9DA08A3 for ; Tue, 4 Apr 2023 07:43:22 +0000 (UTC) X-FDA: 80642918244.28.B717F59 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by imf11.hostedemail.com (Postfix) with ESMTP id 8E53C40019 for ; Tue, 4 Apr 2023 07:43:20 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=suse.com header.s=susede1 header.b=BZCtEWP6; spf=pass (imf11.hostedemail.com: domain of pmladek@suse.com designates 195.135.220.28 as permitted sender) smtp.mailfrom=pmladek@suse.com; dmarc=pass (policy=quarantine) header.from=suse.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1680594200; 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=nELInLd1R6pUDXClNVa7pqWUKHYy66YC++qJXRoR1eg=; b=konhR6/pDeNNIjKAcwU2yBsGowcBNt1J7jBd5vLvlw9zOfHVJJACE5jsCbOoR3Dm1MBTjs r6999BAFLIiwC9E8jxqbnbXJlcyATForMVIxnjDOdlZg2bRphtHTZkxRen3kOVDHAOYLRa vmF7506g3AhNsADNEek+3F0slP52qSU= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=suse.com header.s=susede1 header.b=BZCtEWP6; spf=pass (imf11.hostedemail.com: domain of pmladek@suse.com designates 195.135.220.28 as permitted sender) smtp.mailfrom=pmladek@suse.com; dmarc=pass (policy=quarantine) header.from=suse.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1680594200; a=rsa-sha256; cv=none; b=OUhp1PaOcfOWKVhh08/UvyqLLi43Oa+BJYXLU108zjY2HS8gTL7iFjUc16sShJPAxnNSuP 0zVM1dHX20BhRCowjbrhBNXIDZXG6qScZEk0zSbIHEnuZSacgS3BQ/14sN6vr6yJkvGGGh v1cyyc32nwWG2EGE5PH/5il1F3//CyI= Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out1.suse.de (Postfix) with ESMTP id E16B62273C; Tue, 4 Apr 2023 07:43:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1680594198; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=nELInLd1R6pUDXClNVa7pqWUKHYy66YC++qJXRoR1eg=; b=BZCtEWP6govg0JFrMIb4YXXdy/DjkgdRX3x23ZA4hTOBDB79sUigTJwRWzIKeXKD2U2gTM GwSiQLvOyEGTfRxsk6vo2iAhavsM0RjwMWEkc6wbi/g40dtc+HQUDcAWx+Li0DdKaOpabx pLT0XbZO6gsUd9wCIffHyAi2Jl3IKoA= Received: from suse.cz (unknown [10.100.201.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by relay2.suse.de (Postfix) with ESMTPS id 332D82C141; Tue, 4 Apr 2023 07:43:17 +0000 (UTC) Date: Tue, 4 Apr 2023 09:43:17 +0200 From: Petr Mladek To: Tetsuo Handa Cc: Michal Hocko , Patrick Daly , Mel Gorman , David Hildenbrand , Andrew Morton , Sergey Senozhatsky , Steven Rostedt , John Ogness , syzkaller-bugs@googlegroups.com, Ilpo =?iso-8859-1?Q?J=E4rvinen?= , syzbot , linux-mm Subject: Re: [PATCH] mm/page_alloc: fix potential deadlock on zonelist_update_seq seqlock Message-ID: References: <000000000000b21f0a05e9ec310d@google.com> <78ff6e70-e986-1fcb-eafb-3edd5f2bceae@I-love.SAKURA.ne.jp> <6266b161-e4c3-7d65-6590-da6cc04d93ec@I-love.SAKURA.ne.jp> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <6266b161-e4c3-7d65-6590-da6cc04d93ec@I-love.SAKURA.ne.jp> X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 8E53C40019 X-Stat-Signature: kj8796okgw7gutsw6rbf4wzj88i9kkoa X-Rspam-User: X-HE-Tag: 1680594200-508016 X-HE-Meta: U2FsdGVkX19lB2sicqAnk9JKn4r42YXDMBRnGOYCWdl4HeVqx/R/Stf0stnxJPsBKxfzzyEejhN2dJxKAM8tDGcQ64NmDS65CPxyGSFJRDqsOpZ8DrSJz1lAVmnvmaByFsci2P+eGUhc/xgx+Efuc7EZo12mBKrEKlpDmlsEvFx+0Nj62OzSvHeTQf7N9lXsCleAg42RAJUgqIRp/eSTfrKSPY9uI3YrO+3wj89BoIjMcV79dZWr+YKiHZYSo4aLPd2mNmm1DrkQQw/4EnG/nd1/VActoyTVaZdNibgV3aO8/KN+62O5XtKDQdaIW1N32knGHnwI0m1Y36H83V51/nuMHvZTvgm9c4xNM4zFclGVlM9XMeqHanZE1W16AK7xq27D65eLRMs8BJeMg3S3Txv7pUgHJUp8pH2OWoBvxigUCO/NprhJZfyHY1JEzs7CUQTbvuSvfi9XBq09NU+qxkUTAoZcL7sm2IRGR2qJ35qPPnDsKrROA0xHcPzycZDdVHua7gkvlz4mJ2QZQV0uQgZIaBKUf4Fopd3Wn71HKGjmQPxL9+OxxRKDFo4+Bl7Ce8itY3LENhLo9qHac4beRq9FS4edUz5jpm2WLtZYoNjHopTyIQkxg2XQoDr8WXys1cgAvgWTNzDHrJCetoanzgeLdfodG2khpzD2oos9g6qB5l6R5BJgm/8STjuxFu+lHLK5wCzG177Mfjr2cCWg1S7komTsagT0i/+pLtpuGFncZ39fPm3vTCg+XIqDYUUTn4vMzyOMF/4dg74R7LVzsbLhsVPSG9F2n+H3XzQZkFObqKxZX6V5N2tENDiipB1rMEQF2VK1wTeeSbWGIicxx4dla57cwMJlgzFpaXxIdSKN1Km4FdtXy+KTr73s/FHxB56gkztVqY/wxQSIp1j2cWt7AGUYxxQqJVrjVtqLsVxduKqOBMB90FABRb3LZkvYhNoxvfuhQsZho1cvZYR G6CNaT34 FIWGNV7An9zKPNk4UpCWtQPwSdwDfWy+Ufsn3gJN4yb4hzvkKAcgFWvJQfZMWgXHOHYFWTG0IpYWaJmeHRLy0UofWzQkI1VLaXGdgUs4rrLJXNC4LkSvJb8RhPZRTYuqgMwuWHa/viLW3t7aHgNjZpWjeDsGBJy1yPZolQv5yB+dOwK5EMo72XLUeL7dUl9t9gpW0i8Z/hTz4/W8BZITCTN4jGu2hDtRpaPytdWd19OCkHr7CRCW1KjSrB/PiJ9JSvycS0+9HaDaA57Aa4HmQ9G2x1Se6/kzUXXBlJBDIc0UqT+Pv5wDqUE+S+Whz5iogqprC74FW+sQ6x9IJ6MOSpiSAsYDhG9bLX22g/2699dRhQpjvk8cer+dHDTdg7HID5xBGdx+4KuFg2/3Ju0MdJFPpDWBdvR6i4b/Nt/9bDq2lkMUMTkZLr8zY6x3gHEvahgG/wsZvIA+QAap6dPV/t0ZINMXiEoBDTB+jz8XG3E8+1ik= 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 Tue 2023-04-04 09:37:25, Tetsuo Handa wrote: > syzbot is reporting circular locking dependency which involves > zonelist_update_seq seqlock [1], for this lock is checked by memory > allocation requests which do not need to be retried. > > We somehow need to prevent __alloc_pages_slowpath() from checking > this lock. Since Petr Mladek thinks that __build_all_zonelists() can > become a candidate for deferring printk() [2], let's make sure that > current CPU/thread won't reach __alloc_pages_slowpath() while this lock > is in use. > > Reported-by: syzbot > Link: https://syzkaller.appspot.com/bug?extid=223c7461c58c58a4cb10 [1] > Fixes: 3d36424b3b58 ("mm/page_alloc: fix race condition between build_all_zonelists and page allocation") > Link: https://lkml.kernel.org/r/ZCrs+1cDqPWTDFNM@alley [2] >From the description is far from obvious how printk() is involved. It might make sense to paste the entire lockdep splat. The links are not guaranteed to stay around. > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -6632,7 +6632,21 @@ static void __build_all_zonelists(void *data) > int nid; > int __maybe_unused cpu; > pg_data_t *self = data; > + unsigned long flags; > > + /* > + * Since __alloc_pages_slowpath() spins if zonelist_update_seq.seqcount > + * is odd, any memory allocation while zonelist_update_seq.seqcount is > + * odd have to be avoided. > + * > + * Explicitly disable local irqs in order to avoid calling > + * kmalloc(GFP_ATOMIC) from e.g. timer interrupt handler. > + * Also, explicitly prevent printk() from synchronously waiting for > + * port->lock because tty_insert_flip_string_and_push_buffer() might > + * call kmalloc(GFP_ATOMIC | __GFP_NOWARN) while holding port->lock. > + */ > + local_irq_save(flags); The comment above printk_deferred_enter definition in include/linux/printk.h says that interrupts need to be disabled. But strictly speaking, it should be enough to disable preemption there days. The reason is that is uses per-CPU reference counter. Note that it used to be really important to disable interrupts in the past. The messages were temporary stored in a per-CPU buffer and the lockless algorithm was not safe for reentrancy. > + printk_deferred_enter(); > write_seqlock(&zonelist_update_seq); > > #ifdef CONFIG_NUMA > @@ -6671,6 +6685,8 @@ static void __build_all_zonelists(void *data) > } > > write_sequnlock(&zonelist_update_seq); > + printk_deferred_exit(); > + local_irq_restore(flags); > } > > static noinline void __init Otherwise, it looks fine from the printk() POV. Best Regards, Petr