From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Mon, 24 Aug 2026 14:01:36 +0200 Received: from mx1.white.stw.pengutronix.de ([185.203.200.13]) by lore.white.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wyTMt-006gps-16 for lore@lore.pengutronix.de; Mon, 24 Aug 2026 14:01:36 +0200 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPS id E8D3C200062 for ; Mon, 24 Aug 2026 14:01:35 +0200 (CEST) Authentication-Results: mx1.white.stw.pengutronix.de; dkim=pass header.d=lists.infradead.org header.s=bombadil.20210309 header.b="Xbq/zfsM"; dmarc=none; spf=pass (mx1.white.stw.pengutronix.de: domain of "barebox-bounces+lore=pengutronix.de@lists.infradead.org" designates 2607:7c80:54:3::133 as permitted sender) smtp.mailfrom="barebox-bounces+lore=pengutronix.de@lists.infradead.org" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=Zs+BWnPksLb9kCdR6Ii+VqVuiaD0ugcrlCo5nj7qwgs=; b=Xbq/zfsMD1xKuaEZG/rIbIOins AIPgJjAjWk7pP0/4gYkjxxpaVT0b/SAjb8xgvi6zJ6Otq/KwZxD6+7vnObSRjlGNNNp+1hyibaFRS CXwClK0js35AE2J4pE/9sTJBTmqnCLCj0hJE4XFwGK4Pd7H9T2bldffsuPX2AIacxr6PPh5SFLfLs fpz2Cehlhc2TISZHsq546BvmjYu+CC8x+1yQbpbfalMUXFjcOKY4M29lpWDqreSzBc31lNaNX8SJD XUGe5qpCX87QA7mOe7awUDAd8Hji1qkPlDxe+Sxlnc0d/zZXiZfyjmdOyDn3h3s4r2f+sx1Z33OjS goKqlhng==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wyTLo-0000000GZ2b-3ipp; Mon, 24 Aug 2026 12:00:28 +0000 Received: from mx1.white.stw.pengutronix.de ([2a0a:edc0:0:b01:1d::107]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wyTLl-0000000GZ1G-0wic for barebox@lists.infradead.org; Mon, 24 Aug 2026 12:00:27 +0000 Received: from drehscheibe.grey.stw.pengutronix.de (drehscheibe.grey.stw.pengutronix.de [IPv6:2a0a:edc0:0:c01:1d::a2]) (Authenticated sender: relay-from-drehscheibe.grey.stw.pengutronix.de) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPSA id 5D7EE200393; Mon, 24 Aug 2026 14:00:23 +0200 (CEST) Received: from dude05.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::54]) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wyTLj-00368U-0y; Mon, 24 Aug 2026 14:00:23 +0200 Received: from [::1] (helo=dude05.red.stw.pengutronix.de) by dude05.red.stw.pengutronix.de with esmtp (Exim 4.98.2) (envelope-from ) id 1wyTLj-0000000DyeC-0jLt; Mon, 24 Aug 2026 14:00:23 +0200 From: Ahmad Fatoum To: barebox@lists.infradead.org Cc: Ahmad Fatoum Subject: [PATCH master 1/4] of: only replace a device tree that is actually tentative Date: Mon, 24 Aug 2026 13:59:55 +0200 Message-ID: <20260824120022.3299742-1-a.fatoum@pengutronix.de> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260824_050026_225133_FDFBB39B X-CRM114-Status: GOOD ( 13.27 ) X-Spam-Score: -1.9 (-) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: barebox_register_of() is called a second time when the EFI payload registers a device tree read from the EFI system partition on top of the tentative empty device tree registered earlier at core_initc [...] Content analysis details: (-1.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_PASS SPF: sender matches SPF record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] 0.0 DMARC_MISSING Missing DMARC policy X-BeenThere: barebox@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "barebox" X-Rspamd-Action: no action X-Rspamd-Server: mx1 X-Stat-Signature: t8rp5deicdfjzwf7wo69g3xhrztp7yme X-Spamd-Result: default: False [-6.21 / 15.00]; BAYES_HAM(-3.00)[100.00%]; DWL_DNSWL_MED(-2.00)[infradead.org:dkim]; KNOWN_LIST_ID(-1.00)[barebox.lists.infradead.org]; MID_CONTAINS_FROM(1.00)[]; RCVD_DKIM_ARC_DNSWL_MED(-0.50)[]; R_MISSING_CHARSET(0.50)[]; RCVD_IN_DNSWL_MED(-0.40)[2a0a:edc0:0:1101:1d::54:received,2607:7c80:54:3::133:from]; R_SPF_ALLOW(-0.20)[+mx:c]; R_DKIM_ALLOW(-0.20)[lists.infradead.org:s=bombadil.20210309]; MAILLIST(-0.20)[mailman]; MIME_GOOD(-0.10)[text/plain]; RCVD_IN_DNSWL_LOW(-0.10)[2a0a:edc0:0:c01:1d::a2:received]; HAS_LIST_UNSUB(-0.01)[]; RCPT_COUNT_TWO(0.00)[2]; TO_DN_SOME(0.00)[]; MIME_TRACE(0.00)[0:+]; FROM_HAS_DN(0.00)[]; ARC_NA(0.00)[]; DMARC_NA(0.00)[pengutronix.de]; RECEIVED_HELO_LOCALHOST(0.00)[]; RCVD_TLS_LAST(0.00)[]; FROM_NEQ_ENVFROM(0.00)[a.fatoum@pengutronix.de,barebox-bounces@lists.infradead.org]; RCVD_VIA_SMTP_AUTH(0.00)[]; NEURAL_HAM(-0.00)[-1.000]; TAGGED_FROM(0.00)[lore=pengutronix.de]; ASN(0.00)[asn:7247, ipnet:2607:7c80:54::/48, country:US]; RCVD_COUNT_FIVE(0.00)[5]; DKIM_TRACE(0.00)[lists.infradead.org:+]; FORGED_SENDER_MAILLIST(0.00)[] X-Rspamd-Queue-Id: E8D3C200062 barebox_register_of() is called a second time when the EFI payload registers a device tree read from the EFI system partition on top of the tentative empty device tree registered earlier at core_initcall. The check that is meant to allow this looks at the children of the newly passed device tree instead of those of the already registered one, so it rejects exactly the case it was added for: registering a populated device tree over the empty placeholder returns -EBUSY, while an empty device tree may silently replace a fully populated one. Look at the registered root node instead. Fixes: 10922345fbcc ("efi: payload: register dummy device tree") Assisted-by: Claude:opus-5 Signed-off-by: Ahmad Fatoum --- drivers/of/base.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/of/base.c b/drivers/of/base.c index 62d452907a57..2a2edc167cc6 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -2151,7 +2151,11 @@ of_populate_initcall(barebox_of_populate); int barebox_register_of(struct device_node *root) { if (root_node) { - if (!list_empty(&root->children)) + /* + * Only a tentative device tree, i.e. one without any nodes, + * may be replaced by a real one. + */ + if (!list_empty(&root_node->children)) return -EBUSY; /* Not necessarily safe to free, so leak it.. */ root_node = NULL; -- 2.47.3