Message ID | 20211227125154.3145-1-linmq006@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ARM: pxa: Fix error handling in viper_tpm_init | expand |
Hi, On 27/12/2021 13:51, Miaoqian Lin wrote: > tpm_device get by platform_device_alloc(), which calls device_initialize. > Call platform_device_put(tpm_device) instead of kfree(tmp_device) to > prevent memory leak. While this seems correct, I don't think we should make any effort to maintain legacy board support files but rather move to DTS instead. Robert and I laid the foundation and ported a few machines a while ago, but I was reluctant to touch the board support code I can't test on real hardware. As you seem to have access to a Viper board, could you have a look at the existing device-tree ported PXA machines and see if you can follow suit here please? Thanks, Daniel > > Fixes: 352699a ("Basic support for the Arcom/Eurotech Viper SBC.") > Signed-off-by: Miaoqian Lin <linmq006@gmail.com> > --- > arch/arm/mach-pxa/viper.c | 9 ++++----- > 1 file changed, 4 insertions(+), 5 deletions(-) > > diff --git a/arch/arm/mach-pxa/viper.c b/arch/arm/mach-pxa/viper.c > index 3aa34e9a15d3..9a0f184dbecb 100644 > --- a/arch/arm/mach-pxa/viper.c > +++ b/arch/arm/mach-pxa/viper.c > @@ -815,11 +815,11 @@ static void __init viper_tpm_init(void) > sizeof(i2c_tpm_data))) { > if (platform_device_add(tpm_device)) { > errstr = "register TPM i2c bus"; > - goto error_free_tpm; > + goto exit_put_device; > } > } else { > errstr = "allocate TPM i2c bus data"; > - goto error_free_tpm; > + goto exit_put_device; > } > } else { > errstr = "allocate TPM i2c device"; > @@ -827,9 +827,8 @@ static void __init viper_tpm_init(void) > } > > return; > - > -error_free_tpm: > - kfree(tpm_device); > +exit_put_device: > + platform_device_put(tpm_device); > error_tpm: > pr_err("viper: Couldn't %s, giving up\n", errstr); > }
diff --git a/arch/arm/mach-pxa/viper.c b/arch/arm/mach-pxa/viper.c index 3aa34e9a15d3..9a0f184dbecb 100644 --- a/arch/arm/mach-pxa/viper.c +++ b/arch/arm/mach-pxa/viper.c @@ -815,11 +815,11 @@ static void __init viper_tpm_init(void) sizeof(i2c_tpm_data))) { if (platform_device_add(tpm_device)) { errstr = "register TPM i2c bus"; - goto error_free_tpm; + goto exit_put_device; } } else { errstr = "allocate TPM i2c bus data"; - goto error_free_tpm; + goto exit_put_device; } } else { errstr = "allocate TPM i2c device"; @@ -827,9 +827,8 @@ static void __init viper_tpm_init(void) } return; - -error_free_tpm: - kfree(tpm_device); +exit_put_device: + platform_device_put(tpm_device); error_tpm: pr_err("viper: Couldn't %s, giving up\n", errstr); }
tpm_device get by platform_device_alloc(), which calls device_initialize. Call platform_device_put(tpm_device) instead of kfree(tmp_device) to prevent memory leak. Fixes: 352699a ("Basic support for the Arcom/Eurotech Viper SBC.") Signed-off-by: Miaoqian Lin <linmq006@gmail.com> --- arch/arm/mach-pxa/viper.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)