2024-05-06 14:19:23

by Kemeng Shi

[permalink] [raw]
Subject: [PATCH 1/9] jbd2: avoid memleak in jbd2_journal_write_metadata_buffer

The new_bh is from alloc_buffer_head, we should call free_buffer_head to
free it in error case.

Signed-off-by: Kemeng Shi <[email protected]>
---
fs/jbd2/journal.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
index b6c114c11b97..207b24e12ce9 100644
--- a/fs/jbd2/journal.c
+++ b/fs/jbd2/journal.c
@@ -399,6 +399,7 @@ int jbd2_journal_write_metadata_buffer(transaction_t *transaction,
tmp = jbd2_alloc(bh_in->b_size, GFP_NOFS);
if (!tmp) {
brelse(new_bh);
+ free_buffer_head(new_bh);
return -ENOMEM;
}
spin_lock(&jh_in->b_state_lock);
--
2.30.0



2024-05-06 14:43:57

by Zhang Yi

[permalink] [raw]
Subject: Re: [PATCH 1/9] jbd2: avoid memleak in jbd2_journal_write_metadata_buffer

On 2024/5/6 22:17, Kemeng Shi wrote:
> The new_bh is from alloc_buffer_head, we should call free_buffer_head to
> free it in error case.

Oh, yeah, this is a separate bh, so it should be freed explicitly, it
looks good to me.

Reviewed-by: Zhang Yi <[email protected]>

>
> Signed-off-by: Kemeng Shi <[email protected]>
> ---
> fs/jbd2/journal.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
> index b6c114c11b97..207b24e12ce9 100644
> --- a/fs/jbd2/journal.c
> +++ b/fs/jbd2/journal.c
> @@ -399,6 +399,7 @@ int jbd2_journal_write_metadata_buffer(transaction_t *transaction,
> tmp = jbd2_alloc(bh_in->b_size, GFP_NOFS);
> if (!tmp) {
> brelse(new_bh);
> + free_buffer_head(new_bh);
> return -ENOMEM;
> }
> spin_lock(&jh_in->b_state_lock);
>


2024-05-13 13:42:30

by Jan Kara

[permalink] [raw]
Subject: Re: [PATCH 1/9] jbd2: avoid memleak in jbd2_journal_write_metadata_buffer

On Mon 06-05-24 22:17:53, Kemeng Shi wrote:
> The new_bh is from alloc_buffer_head, we should call free_buffer_head to
> free it in error case.
>
> Signed-off-by: Kemeng Shi <[email protected]>

Looks good. Feel free to add:

Reviewed-by: Jan Kara <[email protected]>

Honza

> ---
> fs/jbd2/journal.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
> index b6c114c11b97..207b24e12ce9 100644
> --- a/fs/jbd2/journal.c
> +++ b/fs/jbd2/journal.c
> @@ -399,6 +399,7 @@ int jbd2_journal_write_metadata_buffer(transaction_t *transaction,
> tmp = jbd2_alloc(bh_in->b_size, GFP_NOFS);
> if (!tmp) {
> brelse(new_bh);
> + free_buffer_head(new_bh);
> return -ENOMEM;
> }
> spin_lock(&jh_in->b_state_lock);
> --
> 2.30.0
>
--
Jan Kara <[email protected]>
SUSE Labs, CR