diff options
author | Michael S. Tsirkin <mst@redhat.com> | 2016-04-03 08:22:08 -0400 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2016-04-07 08:16:39 -0400 |
commit | e8aabc64d7f5c8702e420c6fa478368f60718ae4 (patch) | |
tree | eae09e5ae7f60e8e2e375b6792639da64f71720f | |
parent | 9735a22799b9214d17d3c231fe377fc852f042e9 (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.c | 8 |
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 | ||
728 | static int __init fw_cfg_sysfs_init(void) | 728 | static 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 | ||
738 | static void __exit fw_cfg_sysfs_exit(void) | 744 | static void __exit fw_cfg_sysfs_exit(void) |