diff mbox

ACPICA: Don't leak next_walk_state in acpi_ds_call_control_method()

Message ID alpine.LNX.2.00.1210212233180.26319@swampdragon.chaosbits.net (mailing list archive)
State Accepted, archived
Headers show

Commit Message

Jesper Juhl Oct. 21, 2012, 8:35 p.m. UTC
If acpi_ds_create_walk_state() succeeds, but the call to
ACPI_ALLOCATE_ZEROED() fails, then we'll return from the function
without properly freeing 'next_walk_state'.

Signed-off-by: Jesper Juhl <jj@chaosbits.net>
---
 drivers/acpi/acpica/dsmethod.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

Comments

Jesper Juhl Nov. 25, 2008, 1:42 p.m. UTC | #1
On Thu, 25 Oct 2012, Rafael J. Wysocki wrote:

> On Sunday 21 of October 2012 22:35:46 Jesper Juhl wrote:
> > If acpi_ds_create_walk_state() succeeds, but the call to
> > ACPI_ALLOCATE_ZEROED() fails, then we'll return from the function
> > without properly freeing 'next_walk_state'.
> > 
> > Signed-off-by: Jesper Juhl <jj@chaosbits.net>
> 
> This has to go through ACPICA upstream, but we'll get it from there eventually.
> 

Ok. I haven't heard any response to this other than yours, so I guess I'll 
just re-send it in a few days if I still hear nothing.

Can I add your ACK when I re-send?

/Jesper


> Thanks,
> Rafael
> 
> 
> > ---
> >  drivers/acpi/acpica/dsmethod.c |    3 ++-
> >  1 files changed, 2 insertions(+), 1 deletions(-)
> > 
> > diff --git a/drivers/acpi/acpica/dsmethod.c b/drivers/acpi/acpica/dsmethod.c
> > index aa9a5d4..ade59a3 100644
> > --- a/drivers/acpi/acpica/dsmethod.c
> > +++ b/drivers/acpi/acpica/dsmethod.c
> > @@ -378,7 +378,8 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
> >  	 */
> >  	info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
> >  	if (!info) {
> > -		return_ACPI_STATUS(AE_NO_MEMORY);
> > +		status = AE_NO_MEMORY;
> > +		goto cleanup;
> >  	}
> >  
> >  	info->parameters = &this_walk_state->operands[0];
> > 
>
Rafael Wysocki Oct. 24, 2012, 10:15 p.m. UTC | #2
On Sunday 21 of October 2012 22:35:46 Jesper Juhl wrote:
> If acpi_ds_create_walk_state() succeeds, but the call to
> ACPI_ALLOCATE_ZEROED() fails, then we'll return from the function
> without properly freeing 'next_walk_state'.
> 
> Signed-off-by: Jesper Juhl <jj@chaosbits.net>

This has to go through ACPICA upstream, but we'll get it from there eventually.

Thanks,
Rafael


> ---
>  drivers/acpi/acpica/dsmethod.c |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/acpi/acpica/dsmethod.c b/drivers/acpi/acpica/dsmethod.c
> index aa9a5d4..ade59a3 100644
> --- a/drivers/acpi/acpica/dsmethod.c
> +++ b/drivers/acpi/acpica/dsmethod.c
> @@ -378,7 +378,8 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
>  	 */
>  	info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
>  	if (!info) {
> -		return_ACPI_STATUS(AE_NO_MEMORY);
> +		status = AE_NO_MEMORY;
> +		goto cleanup;
>  	}
>  
>  	info->parameters = &this_walk_state->operands[0];
>
Rafael Wysocki Oct. 28, 2012, 9:08 p.m. UTC | #3
On Tuesday, November 25, 2008 02:42:09 PM Jesper Juhl wrote:
> On Thu, 25 Oct 2012, Rafael J. Wysocki wrote:
> 
> > On Sunday 21 of October 2012 22:35:46 Jesper Juhl wrote:
> > > If acpi_ds_create_walk_state() succeeds, but the call to
> > > ACPI_ALLOCATE_ZEROED() fails, then we'll return from the function
> > > without properly freeing 'next_walk_state'.
> > > 
> > > Signed-off-by: Jesper Juhl <jj@chaosbits.net>
> > 
> > This has to go through ACPICA upstream, but we'll get it from there eventually.
> > 
> 
> Ok. I haven't heard any response to this other than yours, so I guess I'll 
> just re-send it in a few days if I still hear nothing.
> 
> Can I add your ACK when I re-send?

You don't need to resend, it's been taken.

Thanks,
Rafael


> > > ---
> > >  drivers/acpi/acpica/dsmethod.c |    3 ++-
> > >  1 files changed, 2 insertions(+), 1 deletions(-)
> > > 
> > > diff --git a/drivers/acpi/acpica/dsmethod.c b/drivers/acpi/acpica/dsmethod.c
> > > index aa9a5d4..ade59a3 100644
> > > --- a/drivers/acpi/acpica/dsmethod.c
> > > +++ b/drivers/acpi/acpica/dsmethod.c
> > > @@ -378,7 +378,8 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
> > >  	 */
> > >  	info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
> > >  	if (!info) {
> > > -		return_ACPI_STATUS(AE_NO_MEMORY);
> > > +		status = AE_NO_MEMORY;
> > > +		goto cleanup;
> > >  	}
> > >  
> > >  	info->parameters = &this_walk_state->operands[0];
> > > 
> > 
> 
>
diff mbox

Patch

diff --git a/drivers/acpi/acpica/dsmethod.c b/drivers/acpi/acpica/dsmethod.c
index aa9a5d4..ade59a3 100644
--- a/drivers/acpi/acpica/dsmethod.c
+++ b/drivers/acpi/acpica/dsmethod.c
@@ -378,7 +378,8 @@  acpi_ds_call_control_method(struct acpi_thread_state *thread,
 	 */
 	info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
 	if (!info) {
-		return_ACPI_STATUS(AE_NO_MEMORY);
+		status = AE_NO_MEMORY;
+		goto cleanup;
 	}
 
 	info->parameters = &this_walk_state->operands[0];