aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael S. Tsirkin <mst@redhat.com>2016-04-03 08:22:08 -0400
committerMichael S. Tsirkin <mst@redhat.com>2016-04-07 08:16:39 -0400
commite8aabc64d7f5c8702e420c6fa478368f60718ae4 (patch)
treeeae09e5ae7f60e8e2e375b6792639da64f71720f
parent9735a22799b9214d17d3c231fe377fc852f042e9 (diff)
qemu_fw_cfg: don't leak kobj on init error
If platform_driver_register fails, we should cleanup fw_cfg_top_ko before exiting. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Gabriel Somlo <somlo@cmu.edu>
-rw-r--r--drivers/firmware/qemu_fw_cfg.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/firmware/qemu_fw_cfg.c b/drivers/firmware/qemu_fw_cfg.c
index fedbff55a7f3..e4c471413d46 100644
--- a/drivers/firmware/qemu_fw_cfg.c
+++ b/drivers/firmware/qemu_fw_cfg.c
@@ -727,12 +727,18 @@ device_param_cb(mmio, &fw_cfg_cmdline_param_ops, NULL, S_IRUSR);
727 727
728static int __init fw_cfg_sysfs_init(void) 728static int __init fw_cfg_sysfs_init(void)
729{ 729{
730 int ret;
731
730 /* create /sys/firmware/qemu_fw_cfg/ top level directory */ 732 /* create /sys/firmware/qemu_fw_cfg/ top level directory */
731 fw_cfg_top_ko = kobject_create_and_add("qemu_fw_cfg", firmware_kobj); 733 fw_cfg_top_ko = kobject_create_and_add("qemu_fw_cfg", firmware_kobj);
732 if (!fw_cfg_top_ko) 734 if (!fw_cfg_top_ko)
733 return -ENOMEM; 735 return -ENOMEM;
734 736
735 return platform_driver_register(&fw_cfg_sysfs_driver); 737 ret = platform_driver_register(&fw_cfg_sysfs_driver);
738 if (ret)
739 fw_cfg_kobj_cleanup(fw_cfg_top_ko);
740
741 return ret;
736} 742}
737 743
738static void __exit fw_cfg_sysfs_exit(void) 744static void __exit fw_cfg_sysfs_exit(void)