From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E79992505B2 for ; Sun, 26 Apr 2026 22:02:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777240936; cv=none; b=Mz5ezxEpjS6hEyf2kvKzMGdNBZ2aTOukEN52acUXGtSZR5vipDuJE2xid7q8ittnlotf8BTpYe+ljAO3vLUpWER5AWUeHc7ZJ/xSZ3jQG+yyjJt1Cof2Bss6qnZgtwheWmX4VeEPfdeMFwvxNenfXxAq2rxEYOEWEmvTlz9SAJ8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777240936; c=relaxed/simple; bh=61AByAzdyXxdXcjubOg+g6KLsE5j7msf7Vxat0e/c2s=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=eczCfcqj9f1NKQnI7NQ1Z+TEOQ9BSbr7ahhZl4zKSsDspRY7qBcCocIoe++TKnx3puPjOacyRQ25Wot/EqsTsnrY0Lx3RLgKn17j0dd9IzfS5Iv3ouZDq91kjhAvdH3/4Pi0z4tmw65qfXvnxJp/DwDzpWrUwBVR0Vlj1+nnipw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GC8kX0jT; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GC8kX0jT" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-488a9033b2cso102322645e9.2 for ; Sun, 26 Apr 2026 15:02:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777240933; x=1777845733; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=L/enPYJp1PIF5WBCrf4Mz0OhaMTY9ptocz//j8JgOEs=; b=GC8kX0jTGmh+UOPD3eUILtq22Go1msfnJYxMJwGMxS4WxQqOb+fjukhtRyYrNwpuPc 7VRfctzv08S9ExMc6U8zOQejFwVS9+xsNct8KBmbXKq5AgYS5CmJYxOnCGp2xmOaoDbg nlQJ+UEXtjkATodh72holXXaCjed7xrlaxUpmebYXEtBZWDcMt7NX0bqQnhAbt3H2KbJ WaWt1r53IdS+FzKKocghwmdxLi8TaMBKDBuQXfzOR1dNxf8EQ/PovIxScVo8oWZD9Ov9 /PI0rM8D5dVLAXsPilZx8nxQGh/6K7iVurBNib0rSCs7fPpDgP2SWq5X4EaFdR/j2MhP DkXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777240933; x=1777845733; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=L/enPYJp1PIF5WBCrf4Mz0OhaMTY9ptocz//j8JgOEs=; b=S0X2/wNGNWYHk2tgPwP1Lieqsuo9X2nGGwr1DFdlo3JgGhTPigvMHUdvIDDl8wNVMe q2WpVzyeRynXtD43NXVRW46a3RIP90UIDX57UTBphfcQekATmg4wseLcYid0FJ7Fyqd1 FL/Kh7f19W0VI7h+zkqgI8572LByXdPq/8ahigxjfzo3mxCOU4Ay9gWduttXAvpXV/7Q jNEyer6j81iZKsgL4A5nrIU/PTxmpbHvrcMVknbofEvvIUSmA8e3PBUXrnWATQpTKH/O /peHRs9YIVMf7p0/mrNXvrmncouFeroczVhaiu4v3YcXkeClJ+A0jLh0V/iTbS40VPvV EYuA== X-Forwarded-Encrypted: i=1; AFNElJ/aCOTu+EGlS5xXXSS63hw8qOmE9G26D59IE2YuzwnL1cUt5cpRs/On+sLj2yr8pUS6KZ7D877E8+N5dCk=@vger.kernel.org X-Gm-Message-State: AOJu0YxpOJ7nsN4SVYT4fOT0iaT4M0qgVBTAcAVqAZ81F6gZzgIHxxxl VmdIm6PBCfclgssxSWBahoao6zCnZ4cKg0c5nlnaBsiyPg41tRHakS9L X-Gm-Gg: AeBDieupplJOEowE9v4ZtTdwGJwDHMLdjO1qy6DsWHUnpVH22mS30WO17u2FHvw5DDz SR7O5QA9LO3wN+7D8cPpCbqx+R6PLQyAloTgE6wSsDOrt3bmw4vTSpKRoXkKeXpZg+1RiEvqUO4 fjB815oKkzOdeuYkYgaQrFK7cq5ljNfpe8kNqYcShYtbd5uV81XwRp+Pk6/yL6S3pIIJGOiUXYi oWcLRP4xIZPUGfx09kcPmVOXj5U6a62g1I2ZVjIz1xQXDugiyYQdFNMbVlJ1y8dccG0xiWLdq8S 15kLXIHfd33L/vrN2rwyEUErZkAJYay5+fUjUVAolAUVQoPIZRbJxPJQu/Nc7jw3rkSOxb3MlZM GmPEs8vrUG1WGKFPyDpOQ9BLLIYG35+bqMrMpo/1G2mqX4XvDwqjuMDjulyzPS3hn1dhAUt8pM4 H/kr9q6ysWs76LnlpSHsV2vMrmiH6xjfPiTzEFK5pCm0PpdsIbGlnQN6sqmuHOo0auHzR+ X-Received: by 2002:a05:600c:4e4c:b0:48a:58ae:9938 with SMTP id 5b1f17b1804b1-48a58ae9f69mr375668595e9.19.1777240933036; Sun, 26 Apr 2026 15:02:13 -0700 (PDT) Received: from nixos.numericable.fr (38.42.3.89.rev.sfr.net. [89.3.42.38]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a5c4b9e8dsm104272615e9.7.2026.04.26.15.02.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Apr 2026 15:02:12 -0700 (PDT) From: Titouan Ameline de Cadeville To: tzungbi@kernel.org Cc: briannorris@chromium.org, jwerner@chromium.org, chrome-platform@lists.linux.dev, linux-kernel@vger.kernel.org, Titouan Ameline de Cadeville Subject: [PATCH] firmware: google: fix orphaned devices on partial populate failure Date: Mon, 27 Apr 2026 00:02:04 +0200 Message-ID: <20260426220204.118399-1-titouan.ameline@gmail.com> X-Mailer: git-send-email 2.44.2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit coreboot_table_populate() registers devices one by one. If device_register() fails mid-loop, the function returns an error to coreboot_table_probe(), which returns it to the platform driver core. The platform driver core does not call remove() on probe failure, so devices registered before the failure are left orphaned on the coreboot bus with no cleanup path. Call bus_for_each_dev() to unregister all devices when populate fails. Signed-off-by: Titouan Ameline de Cadeville --- drivers/firmware/google/coreboot_table.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/firmware/google/coreboot_table.c b/drivers/firmware/google/coreboot_table.c index 233939e548b4..2ebf1497f60c 100644 --- a/drivers/firmware/google/coreboot_table.c +++ b/drivers/firmware/google/coreboot_table.c @@ -167,6 +167,12 @@ static int coreboot_table_populate(struct device *dev, void *ptr, resource_size_ return 0; } +static int __cb_dev_unregister(struct device *dev, void *dummy) +{ + device_unregister(dev); + return 0; +} + static int coreboot_table_probe(struct platform_device *pdev) { resource_size_t len; @@ -203,17 +209,14 @@ static int coreboot_table_probe(struct platform_device *pdev) ret = coreboot_table_populate(dev, ptr, len); + if (ret) + bus_for_each_dev(&coreboot_bus_type, NULL, NULL, + __cb_dev_unregister); memunmap(ptr); return ret; } -static int __cb_dev_unregister(struct device *dev, void *dummy) -{ - device_unregister(dev); - return 0; -} - static void coreboot_table_remove(struct platform_device *pdev) { bus_for_each_dev(&coreboot_bus_type, NULL, NULL, __cb_dev_unregister); -- 2.44.2