|
Takashi Iwai |
2a9a10 |
From a57ac7acdcc1665662e369993898194def56e888 Mon Sep 17 00:00:00 2001
|
|
Takashi Iwai |
2a9a10 |
From: Johan Hovold <johan@kernel.org>
|
|
Takashi Iwai |
2a9a10 |
Date: Wed, 1 Dec 2021 14:25:25 +0100
|
|
Takashi Iwai |
2a9a10 |
Subject: [PATCH] firmware: qemu_fw_cfg: fix NULL-pointer deref on duplicate entries
|
|
Takashi Iwai |
2a9a10 |
Git-commit: a57ac7acdcc1665662e369993898194def56e888
|
|
Takashi Iwai |
8f947a |
Alt-commit: d3e305592d69e21e36b76d24ca3c01971a2d09be
|
|
Takashi Iwai |
2a9a10 |
Patch-mainline: v5.17-rc1
|
|
Takashi Iwai |
2a9a10 |
References: git-fixes
|
|
Takashi Iwai |
2a9a10 |
|
|
Takashi Iwai |
2a9a10 |
Commit fe3c60684377 ("firmware: Fix a reference count leak.") "fixed"
|
|
Takashi Iwai |
2a9a10 |
a kobject leak in the file registration helper by properly calling
|
|
Takashi Iwai |
2a9a10 |
kobject_put() for the entry in case registration of the object fails
|
|
Takashi Iwai |
2a9a10 |
(e.g. due to a name collision).
|
|
Takashi Iwai |
2a9a10 |
|
|
Takashi Iwai |
2a9a10 |
This would however result in a NULL pointer dereference when the
|
|
Takashi Iwai |
2a9a10 |
release function tries to remove the never added entry from the
|
|
Takashi Iwai |
2a9a10 |
fw_cfg_entry_cache list.
|
|
Takashi Iwai |
2a9a10 |
|
|
Takashi Iwai |
2a9a10 |
Fix this by moving the list-removal out of the release function.
|
|
Takashi Iwai |
2a9a10 |
|
|
Takashi Iwai |
2a9a10 |
Note that the offending commit was one of the benign looking umn.edu
|
|
Takashi Iwai |
2a9a10 |
fixes which was reviewed but not reverted. [1][2]
|
|
Takashi Iwai |
2a9a10 |
|
|
Takashi Iwai |
2a9a10 |
[1] https://lore.kernel.org/r/202105051005.49BFABCE@keescook
|
|
Takashi Iwai |
2a9a10 |
[2] https://lore.kernel.org/all/YIg7ZOZvS3a8LjSv@kroah.com
|
|
Takashi Iwai |
2a9a10 |
|
|
Takashi Iwai |
2a9a10 |
Fixes: fe3c60684377 ("firmware: Fix a reference count leak.")
|
|
Takashi Iwai |
2a9a10 |
Cc: stable@vger.kernel.org # 5.8
|
|
Takashi Iwai |
2a9a10 |
Cc: Qiushi Wu <wu000273@umn.edu>
|
|
Takashi Iwai |
2a9a10 |
Cc: Kees Cook <keescook@chromium.org>
|
|
Takashi Iwai |
2a9a10 |
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
Takashi Iwai |
2a9a10 |
Signed-off-by: Johan Hovold <johan@kernel.org>
|
|
Takashi Iwai |
2a9a10 |
Link: https://lore.kernel.org/r/20211201132528.30025-2-johan@kernel.org
|
|
Takashi Iwai |
2a9a10 |
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
Takashi Iwai |
2a9a10 |
Acked-by: Takashi Iwai <tiwai@suse.de>
|
|
Takashi Iwai |
2a9a10 |
|
|
Takashi Iwai |
2a9a10 |
---
|
|
Takashi Iwai |
2a9a10 |
drivers/firmware/qemu_fw_cfg.c | 5 +----
|
|
Takashi Iwai |
2a9a10 |
1 file changed, 1 insertion(+), 4 deletions(-)
|
|
Takashi Iwai |
2a9a10 |
|
|
Takashi Iwai |
2a9a10 |
diff --git a/drivers/firmware/qemu_fw_cfg.c b/drivers/firmware/qemu_fw_cfg.c
|
|
Takashi Iwai |
2a9a10 |
index 172c751a4f6c..a9c64ebfc49a 100644
|
|
Takashi Iwai |
2a9a10 |
--- a/drivers/firmware/qemu_fw_cfg.c
|
|
Takashi Iwai |
2a9a10 |
+++ b/drivers/firmware/qemu_fw_cfg.c
|
|
Takashi Iwai |
2a9a10 |
@@ -388,9 +388,7 @@ static void fw_cfg_sysfs_cache_cleanup(void)
|
|
Takashi Iwai |
2a9a10 |
struct fw_cfg_sysfs_entry *entry, *next;
|
|
Takashi Iwai |
2a9a10 |
|
|
Takashi Iwai |
2a9a10 |
list_for_each_entry_safe(entry, next, &fw_cfg_entry_cache, list) {
|
|
Takashi Iwai |
2a9a10 |
- /* will end up invoking fw_cfg_sysfs_cache_delist()
|
|
Takashi Iwai |
2a9a10 |
- * via each object's release() method (i.e. destructor)
|
|
Takashi Iwai |
2a9a10 |
- */
|
|
Takashi Iwai |
2a9a10 |
+ fw_cfg_sysfs_cache_delist(entry);
|
|
Takashi Iwai |
2a9a10 |
kobject_put(&entry->kobj);
|
|
Takashi Iwai |
2a9a10 |
}
|
|
Takashi Iwai |
2a9a10 |
}
|
|
Takashi Iwai |
2a9a10 |
@@ -448,7 +446,6 @@ static void fw_cfg_sysfs_release_entry(struct kobject *kobj)
|
|
Takashi Iwai |
2a9a10 |
{
|
|
Takashi Iwai |
2a9a10 |
struct fw_cfg_sysfs_entry *entry = to_entry(kobj);
|
|
Takashi Iwai |
2a9a10 |
|
|
Takashi Iwai |
2a9a10 |
- fw_cfg_sysfs_cache_delist(entry);
|
|
Takashi Iwai |
2a9a10 |
kfree(entry);
|
|
Takashi Iwai |
2a9a10 |
}
|
|
Takashi Iwai |
2a9a10 |
|
|
Takashi Iwai |
2a9a10 |
--
|
|
Takashi Iwai |
2a9a10 |
2.31.1
|
|
Takashi Iwai |
2a9a10 |
|