From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qk1-f176.google.com (mail-qk1-f176.google.com [209.85.222.176]) (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 BFE502931FF for ; Mon, 3 Aug 2026 01:29:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.176 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785720589; cv=none; b=BPr5R3UNayWnykCy4KN6RAkEYgg5Cmm3VlVu3efq0G4YbsF97FA8Z/flsZhT6w7MtBcoGCi6EbwzWDeq+Wh5+g9HzcU4mpEPxXTNZQN88M2xQUY8PbySqz6vOL+ld1knURfpp40qvwzDhboU9Kr23Ssn33Jh1gcpSiXJPeEF3LU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785720589; c=relaxed/simple; bh=AQqIFM0cEHWxdl6CexxZcDc//Jjz6VvOODplzoWGuC4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=bflsVVLYD7TnW0RUzbwdaqGdG4Cz9YUpKBjdCeqGmpmJ2dHdDnOWSD5G5UyvC5/GthYAtpO46wDT6bGguCOX+1cnEK4f6sOsPWnxue63kyvm7o7hJydET9iqVp1XqAdf0n9+k9ub/cMGa903X/bC/6jMLom0QHV9Iksiqe+r9qw= 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=Y9ryKDQ/; arc=none smtp.client-ip=209.85.222.176 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="Y9ryKDQ/" Received: by mail-qk1-f176.google.com with SMTP id af79cd13be357-934974844ffso133166485a.0 for ; Sun, 02 Aug 2026 18:29:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785720586; x=1786325386; 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:content-type; bh=U9TUfArfjzEKocxGG4TRFcc88SBwNw8ueUXsGddr+Ag=; b=Y9ryKDQ/WXmd050kBGHoRkzH4dycpZlCaxolL3vWELY3qOO7pPMAHdiv/5I3IXrAsL 3MRqlHbeFUtoG8NAFO/fwK3JvYSkyZDEuZpAsjtsK7x4LFIdNSu5FtTp8eDGwkFf9m/i DMoa28VoUT87suRRFlvR5nmj3Mw3XSkRhRzAsD9TM3JJVCqoHat9CJe0821IMTpgk7jn X+Kqsh9Fn9ntFzAewJQWttz94GmjvxMNYrTAL/dFxmrGwnMUsQE0Nw3XNjMOxDTqhtz6 8uLNS3OTbJcwjnR8ruVeIkuv/ac0rNuM8I57BXa+nJK5d/wDb93pSsc/NmDZ1NlzQvK0 3log== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785720586; x=1786325386; 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:content-type; bh=U9TUfArfjzEKocxGG4TRFcc88SBwNw8ueUXsGddr+Ag=; b=dXXIyB1jBEnKIRH8sg4x5YbZdMzfYLh2llDzizSM74jnLmTYhFTfDP3ASgupeeTlav sR3LLtng/aaf10GWHSjpSJ4B/iI7CYNrGSd0yX+X5BW46lHkVx/YYWE6+ClRlilsK+Uu xfQFyzbQBRNlHoqjLiTPz7MtV6BiDdSOmh6P5msWqZGl79VACZWhu6NLLVqbdcmLd97G QzDe1zAwP/AeOVHn9vXnMfT1SScq8xo4SoGeq4raeZtfDduzLP5+IOIWt+4hEIgfoXPB KNazvmUDJgqzHqq0WApmQO40bbsSclRLVYTDUlMkgjBrzsd3wtFZMaKzg26mnPb3Xsu+ HCKA== X-Forwarded-Encrypted: i=1; AHgh+RqaGfrxOSExv1NQD0qRH3yQBnYoJVFxl5wbRr7PXDlGQvxbd+LvohiWtaZ0xADt3FgYT2OfQ0djLncG7Jk=@vger.kernel.org X-Gm-Message-State: AOJu0YyfFGgOZT3d6U9PnfG4rZg/nhZZauqb4IRm+oS0dZvUp7GLk6jw mW3mXviojxu7IUcgk2kzjS963vMYdXw4TPmDp0FnDXVIXpD7qNVbd/il X-Gm-Gg: AR+sD11LlPG4pNvpYMxjwhptJ0kxXS+WdtTrr5bvTkXF5Jfe/C7NPUG6EFI1G36JfGd v5GiTEBlim2IwXMJMAx1TCQWX9lvXwv5AEDBFao4pXEixFqG2ij9m2TU7GkuU2sSP57Y20rV9cV f+/v50kQL2qw183P/qj7Jo8rC5wAuTMAz5y2GnOaCVNght6gwmNQSldHBbuRcV4crC4GU1ta0Lh dDqqjbvJdybDhFAX5Qk0TyyaYgwS1jsHiYML+kl1+6dURZAl4BbE/DTn8WX+8A+KwxmgPXurhiz avFmIylTeKpnh6gKv92m/CsfZZVGwMqgDuSZsEJcOXUHPcp080oI9ZpuEfs9aHlQDko/VoAtxD4 yUPyj8413wwb0Ytpnxo3/Sl1MAJC93G9nX5UAD73kXctEKi169M6H6LutmFc7SfdSsUr8EIxTLz aWyIbRkc2e8yhzYWWHOfhqMK+VlBnyJoE80Ipxr27VisDHrJvnksXN/wZXr1nO1rDfBknhgu9S4 LhE2JaERKsLJ2p77UDIurKvPP1sBUf7EdNI1ftf12TUmk5DAvfeTdhCU1yN/yc= X-Received: by 2002:a05:620a:1a15:b0:92e:57ae:3a53 with SMTP id af79cd13be357-934a06c37abmr1603649885a.9.1785720586525; Sun, 02 Aug 2026 18:29:46 -0700 (PDT) Received: from i4-gl-tmk5904.ad.psu.edu ([130.203.156.186]) by smtp.gmail.com with ESMTPSA id af79cd13be357-9349c1c1d0esm557031585a.33.2026.08.02.18.29.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Aug 2026 18:29:45 -0700 (PDT) From: Yuho Choi To: mcgrof@kernel.org, russ.weight@linux.dev, dakr@kernel.org, gregkh@linuxfoundation.org, rafael@kernel.org, nixiaoming@huawei.com Cc: driver-core@lists.linux.dev, linux-kernel@vger.kernel.org, Yuho Choi Subject: [PATCH v1] firmware_loader: Unwind initialization on sysfs failure Date: Sun, 2 Aug 2026 21:29:41 -0400 Message-ID: <20260803012941.610268-1-dbgh9129@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit firmware_class_init() leaves the firmware PM operations and reboot notifier registered when register_sysfs_loader() fails. In addition, the sysfs loader can leave the firmware class registered if its sysctl setup fails. Unwind the reboot notifier and firmware PM operations when sysfs loader registration fails. Make register_sysfs_loader() transactional by unregistering the firmware class if its sysctl registration fails. Fixes: 6bb9cf3aa3ed ("firmware: provide helpers for registering the syfs loader") Fixes: 6aad36d421d8 ("firmware_loader: move firmware sysctl to its own files") Signed-off-by: Yuho Choi --- drivers/base/firmware_loader/main.c | 8 +++++++- drivers/base/firmware_loader/sysfs.c | 7 ++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c index 24213a0ea831..c2f7825dfc4a 100644 --- a/drivers/base/firmware_loader/main.c +++ b/drivers/base/firmware_loader/main.c @@ -1727,8 +1727,14 @@ static int __init firmware_class_init(void) if (ret) goto out; - return register_sysfs_loader(); + ret = register_sysfs_loader(); + if (ret) + goto out_reboot; + + return 0; +out_reboot: + unregister_reboot_notifier(&fw_shutdown_nb); out: unregister_fw_pm_ops(); return ret; diff --git a/drivers/base/firmware_loader/sysfs.c b/drivers/base/firmware_loader/sysfs.c index 29a10d2ad537..d9deb0804f55 100644 --- a/drivers/base/firmware_loader/sysfs.c +++ b/drivers/base/firmware_loader/sysfs.c @@ -117,7 +117,12 @@ int register_sysfs_loader(void) if (ret != 0) return ret; - return register_firmware_config_sysctl(); + + ret = register_firmware_config_sysctl(); + if (ret) + class_unregister(&firmware_class); + + return ret; } void unregister_sysfs_loader(void) -- 2.43.0