From: Randy Dunlap <randy.dunlap@oracle.com> For kernel bugzilla #11425: http://bugzilla.kernel.org/show_bug.cgi?id=11425 Release memory on init failure. Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com> Reported-by: Daniel Marjamäki <danielm77@spray.se> cc: tpmdd-devel@lists.sourceforge.net --- drivers/char/tpm/tpm.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) --- linux-next-20080905.orig/drivers/char/tpm/tpm.c +++ linux-next-20080905/drivers/char/tpm/tpm.c @@ -1183,11 +1183,8 @@ struct tpm_chip *tpm_register_hardware(s chip = kzalloc(sizeof(*chip), GFP_KERNEL); devname = kmalloc(DEVNAME_SIZE, GFP_KERNEL); - if (chip == NULL || devname == NULL) { - kfree(chip); - kfree(devname); - return NULL; - } + if (chip == NULL || devname == NULL) + goto fail; mutex_init(&chip->buffer_mutex); mutex_init(&chip->tpm_mutex); @@ -1204,8 +1201,7 @@ struct tpm_chip *tpm_register_hardware(s if (chip->dev_num >= TPM_NUM_DEVICES) { dev_err(dev, "No available tpm device numbers\n"); - kfree(chip); - return NULL; + goto fail; } else if (chip->dev_num == 0) chip->vendor.miscdev.minor = TPM_MINOR; else @@ -1228,7 +1224,7 @@ struct tpm_chip *tpm_register_hardware(s chip->vendor.miscdev.name, chip->vendor.miscdev.minor); put_device(chip->dev); - return NULL; + goto fail; } spin_lock(&driver_lock); @@ -1241,12 +1237,17 @@ struct tpm_chip *tpm_register_hardware(s list_del(&chip->list); misc_deregister(&chip->vendor.miscdev); put_device(chip->dev); - return NULL; + goto fail; } chip->bios_dir = tpm_bios_log_setup(devname); return chip; + +fail: + kfree(chip); + kfree(devname); + return NULL; } EXPORT_SYMBOL_GPL(tpm_register_hardware); --- ~Randy Linux Plumbers Conference, 17-19 September 2008, Portland, Oregon USA http://linuxplumbersconf.org/ --
| Peter Zijlstra | [RFC][PATCH 7/7] lockdep: spin_lock_nest_lock() |
| Gabriel C | Re: 2.6.24-rc2-mm1 |
| Andrew Morton | Re: [PATCH 2.6.21] cramfs: add cramfs Linear XIP |
| Jiri Kosina | Re: 2.6.21-rc5-mm4 |
git: | |
| Gregory Haskins | [RFC PATCH 00/17] virtual-bus |
| Jarek Poplawski | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| David Miller | [GIT]: Networking |
| Gerrit Renker | [PATCH 0/37] dccp: Feature negotiation - last call for comments |
