diff mbox series

efi: fix memory leak in krealloc failure handling

Message ID 20230924142633.1090000-1-visitorckw@gmail.com
State Accepted
Commit 0d3ad1917996839a5042d18f04e41915cfa1b74a
Headers show
Series efi: fix memory leak in krealloc failure handling | expand

Commit Message

Kuan-Wei Chiu Sept. 24, 2023, 2:26 p.m. UTC
In the previous code, there was a memory leak issue where the
previously allocated memory was not freed upon a failed krealloc
operation. This patch addresses the problem by releasing the old memory
before setting the pointer to NULL in case of a krealloc failure. This
ensures that memory is properly managed and avoids potential memory
leaks.

Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
---
 drivers/firmware/efi/efi.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Ard Biesheuvel Oct. 13, 2023, 10:32 a.m. UTC | #1
On Sun, 24 Sept 2023 at 16:26, Kuan-Wei Chiu <visitorckw@gmail.com> wrote:
>
> In the previous code, there was a memory leak issue where the
> previously allocated memory was not freed upon a failed krealloc
> operation. This patch addresses the problem by releasing the old memory
> before setting the pointer to NULL in case of a krealloc failure. This
> ensures that memory is properly managed and avoids potential memory
> leaks.
>
> Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
> ---
>  drivers/firmware/efi/efi.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
>

Queued as a fix

Thanks,

> diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
> index ce20a60676f0..1974f0ad32ba 100644
> --- a/drivers/firmware/efi/efi.c
> +++ b/drivers/firmware/efi/efi.c
> @@ -273,9 +273,13 @@ static __init int efivar_ssdt_load(void)
>                 if (status == EFI_NOT_FOUND) {
>                         break;
>                 } else if (status == EFI_BUFFER_TOO_SMALL) {
> -                       name = krealloc(name, name_size, GFP_KERNEL);
> -                       if (!name)
> +                       efi_char16_t *name_tmp =
> +                               krealloc(name, name_size, GFP_KERNEL);
> +                       if (!name_tmp) {
> +                               kfree(name);
>                                 return -ENOMEM;
> +                       }
> +                       name = name_tmp;
>                         continue;
>                 }
>
> --
> 2.25.1
>
diff mbox series

Patch

diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
index ce20a60676f0..1974f0ad32ba 100644
--- a/drivers/firmware/efi/efi.c
+++ b/drivers/firmware/efi/efi.c
@@ -273,9 +273,13 @@  static __init int efivar_ssdt_load(void)
 		if (status == EFI_NOT_FOUND) {
 			break;
 		} else if (status == EFI_BUFFER_TOO_SMALL) {
-			name = krealloc(name, name_size, GFP_KERNEL);
-			if (!name)
+			efi_char16_t *name_tmp =
+				krealloc(name, name_size, GFP_KERNEL);
+			if (!name_tmp) {
+				kfree(name);
 				return -ENOMEM;
+			}
+			name = name_tmp;
 			continue;
 		}