All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] reftable/writer: fix memory leak when `padded_write()` fails
@ 2025-05-10  3:50 Lidong Yan via GitGitGadget
  2025-05-11 16:16 ` [PATCH v2] reftable/writer: fix memory leak if write fails Lidong Yan via GitGitGadget
  0 siblings, 1 reply; 8+ messages in thread
From: Lidong Yan via GitGitGadget @ 2025-05-10  3:50 UTC (permalink / raw)
  To: git; +Cc: Lidong Yan, Lidong Yan

From: Lidong Yan <502024330056@smail.nju.edu.cn>

In reftable/writer.c:padded_write(), if w->writer failed, zeroed
allocated in `reftable_calloc` will leak. w->writer could be
`reftable_write_data` in reftable/stack.c, and could fail due to
some write error. Simply add reftable_free(zeroed) will solve this
problem.

Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
---
    reftable/writer: fix memory leak when padded_write() fails
    
    In reftable/writer.c:padded_write(), if w->writer failed, zeroed
    allocated in reftable_calloc will leak. w->writer could be
    reftable_write_data in reftable/stack.c, and could fail due to some
    write error. Simply add reftable_free(zeroed) will solve this problem.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1958%2Fbrandb97%2Ffix-reftable-padded-write-leak-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1958/brandb97/fix-reftable-padded-write-leak-v1
Pull-Request: https://github.com/git/git/pull/1958

 reftable/writer.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/reftable/writer.c b/reftable/writer.c
index cb16f71be49..3ceb3742888 100644
--- a/reftable/writer.c
+++ b/reftable/writer.c
@@ -57,8 +57,10 @@ static int padded_write(struct reftable_writer *w, uint8_t *data, size_t len,
 			return -1;
 
 		n = w->write(w->write_arg, zeroed, w->pending_padding);
-		if (n < 0)
+		if (n < 0) {
+			reftable_free(zeroed);
 			return n;
+		}
 
 		w->pending_padding = 0;
 		reftable_free(zeroed);

base-commit: 6f84262c44a89851c3ae5a6e4c1a9d06b2068d75
-- 
gitgitgadget

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2] reftable/writer: fix memory leak if write fails
  2025-05-10  3:50 [PATCH] reftable/writer: fix memory leak when `padded_write()` fails Lidong Yan via GitGitGadget
@ 2025-05-11 16:16 ` Lidong Yan via GitGitGadget
  2025-05-12  8:25   ` Patrick Steinhardt
  2025-05-12 12:49   ` [PATCH v3 0/2] reftable/writer: fix memory leak when " Lidong Yan via GitGitGadget
  0 siblings, 2 replies; 8+ messages in thread
From: Lidong Yan via GitGitGadget @ 2025-05-11 16:16 UTC (permalink / raw)
  To: git; +Cc: Lidong Yan, Lidong Yan

From: Lidong Yan <502024330056@smail.nju.edu.cn>

In reftable/writer.c:padded_write(), if w->writer failed, zeroed
allocated in `reftable_calloc` will leak. w->writer could be
`reftable_write_data` in reftable/stack.c, and could fail due to
some write error. Simply add reftable_free(zeroed) will solve this
problem.

In reftable/writer.c:writer_index_hash(), if `reftable_buf_add` failed,
key allocated by `reftable_malloc` will not be insert into `obj_index_tree`
thus leaks. Simple add reftable_free(key) will solve this problem.

Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
---
    reftable/writer: fix memory leak when padded_write() fails
    
    In reftable/writer.c:padded_write(), if w->writer failed, zeroed
    allocated in reftable_calloc will leak. w->writer could be
    reftable_write_data in reftable/stack.c, and could fail due to some
    write error. Simply add reftable_free(zeroed) will solve this problem.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1958%2Fbrandb97%2Ffix-reftable-padded-write-leak-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1958/brandb97/fix-reftable-padded-write-leak-v2
Pull-Request: https://github.com/git/git/pull/1958

Range-diff vs v1:

 1:  2023d6791ef ! 1:  9329ae2d478 reftable/writer: fix memory leak when `padded_write()` fails
     @@ Metadata
      Author: Lidong Yan <502024330056@smail.nju.edu.cn>
      
       ## Commit message ##
     -    reftable/writer: fix memory leak when `padded_write()` fails
     +    reftable/writer: fix memory leak if write fails
      
          In reftable/writer.c:padded_write(), if w->writer failed, zeroed
          allocated in `reftable_calloc` will leak. w->writer could be
     @@ Commit message
          some write error. Simply add reftable_free(zeroed) will solve this
          problem.
      
     +    In reftable/writer.c:writer_index_hash(), if `reftable_buf_add` failed,
     +    key allocated by `reftable_malloc` will not be insert into `obj_index_tree`
     +    thus leaks. Simple add reftable_free(key) will solve this problem.
     +
          Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
      
       ## reftable/writer.c ##
     @@ reftable/writer.c: static int padded_write(struct reftable_writer *w, uint8_t *d
       
       		w->pending_padding = 0;
       		reftable_free(zeroed);
     +@@ reftable/writer.c: static int writer_index_hash(struct reftable_writer *w, struct reftable_buf *has
     + 
     + 		reftable_buf_reset(&key->hash);
     + 		err = reftable_buf_add(&key->hash, hash->buf, hash->len);
     +-		if (err < 0)
     ++		if (err < 0) {
     ++			reftable_free(key);
     + 			return err;
     ++		}
     + 		tree_insert(&w->obj_index_tree, key,
     + 			    &obj_index_tree_node_compare);
     + 	} else {


 reftable/writer.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/reftable/writer.c b/reftable/writer.c
index cb16f71be49..3b4ebdd6dce 100644
--- a/reftable/writer.c
+++ b/reftable/writer.c
@@ -57,8 +57,10 @@ static int padded_write(struct reftable_writer *w, uint8_t *data, size_t len,
 			return -1;
 
 		n = w->write(w->write_arg, zeroed, w->pending_padding);
-		if (n < 0)
+		if (n < 0) {
+			reftable_free(zeroed);
 			return n;
+		}
 
 		w->pending_padding = 0;
 		reftable_free(zeroed);
@@ -256,8 +258,10 @@ static int writer_index_hash(struct reftable_writer *w, struct reftable_buf *has
 
 		reftable_buf_reset(&key->hash);
 		err = reftable_buf_add(&key->hash, hash->buf, hash->len);
-		if (err < 0)
+		if (err < 0) {
+			reftable_free(key);
 			return err;
+		}
 		tree_insert(&w->obj_index_tree, key,
 			    &obj_index_tree_node_compare);
 	} else {

base-commit: 6f84262c44a89851c3ae5a6e4c1a9d06b2068d75
-- 
gitgitgadget

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] reftable/writer: fix memory leak if write fails
  2025-05-11 16:16 ` [PATCH v2] reftable/writer: fix memory leak if write fails Lidong Yan via GitGitGadget
@ 2025-05-12  8:25   ` Patrick Steinhardt
  2025-05-12 10:54     ` lidongyan
  2025-05-12 12:49   ` [PATCH v3 0/2] reftable/writer: fix memory leak when " Lidong Yan via GitGitGadget
  1 sibling, 1 reply; 8+ messages in thread
From: Patrick Steinhardt @ 2025-05-12  8:25 UTC (permalink / raw)
  To: Lidong Yan via GitGitGadget; +Cc: git, Lidong Yan

On Sun, May 11, 2025 at 04:16:04PM +0000, Lidong Yan via GitGitGadget wrote:
> From: Lidong Yan <502024330056@smail.nju.edu.cn>
> 
> In reftable/writer.c:padded_write(), if w->writer failed, zeroed
> allocated in `reftable_calloc` will leak. w->writer could be
> `reftable_write_data` in reftable/stack.c, and could fail due to
> some write error. Simply add reftable_free(zeroed) will solve this
> problem.
> 
> In reftable/writer.c:writer_index_hash(), if `reftable_buf_add` failed,
> key allocated by `reftable_malloc` will not be insert into `obj_index_tree`
> thus leaks. Simple add reftable_free(key) will solve this problem.

Nit: I think it would be sensible to split these up into two commits, as
they touch different areas of the code.

> diff --git a/reftable/writer.c b/reftable/writer.c
> index cb16f71be49..3b4ebdd6dce 100644
> --- a/reftable/writer.c
> +++ b/reftable/writer.c
> @@ -57,8 +57,10 @@ static int padded_write(struct reftable_writer *w, uint8_t *data, size_t len,
>  			return -1;
>  
>  		n = w->write(w->write_arg, zeroed, w->pending_padding);
> -		if (n < 0)
> +		if (n < 0) {
> +			reftable_free(zeroed);
>  			return n;
> +		}
>  
>  		w->pending_padding = 0;
>  		reftable_free(zeroed);

Makes sense.

> @@ -256,8 +258,10 @@ static int writer_index_hash(struct reftable_writer *w, struct reftable_buf *has
>  
>  		reftable_buf_reset(&key->hash);
>  		err = reftable_buf_add(&key->hash, hash->buf, hash->len);
> -		if (err < 0)
> +		if (err < 0) {
> +			reftable_free(key);
>  			return err;
> +		}
>  		tree_insert(&w->obj_index_tree, key,
>  			    &obj_index_tree_node_compare);
>  	} else {

Makes sense, as well. We want to add the node to the object index tree,
but if a step before fails then we naturally want to free the node.

Patrick

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] reftable/writer: fix memory leak if write fails
  2025-05-12  8:25   ` Patrick Steinhardt
@ 2025-05-12 10:54     ` lidongyan
  0 siblings, 0 replies; 8+ messages in thread
From: lidongyan @ 2025-05-12 10:54 UTC (permalink / raw)
  To: Patrick Steinhardt; +Cc: Lidong Yan via GitGitGadget, git

On 12/5/2025 at 16:25,Patrick Steinhardt <ps@pks.im> wrote:
> Nit: I think it would be sensible to split these up into two commits, as
> they touch different areas of the code.
I will split them in the next patch.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v3 0/2] reftable/writer: fix memory leak when write fails
  2025-05-11 16:16 ` [PATCH v2] reftable/writer: fix memory leak if write fails Lidong Yan via GitGitGadget
  2025-05-12  8:25   ` Patrick Steinhardt
@ 2025-05-12 12:49   ` Lidong Yan via GitGitGadget
  2025-05-12 12:49     ` [PATCH v3 1/2] reftable/writer: fix memory leak when `padded_write()` fails Lidong Yan via GitGitGadget
                       ` (2 more replies)
  1 sibling, 3 replies; 8+ messages in thread
From: Lidong Yan via GitGitGadget @ 2025-05-12 12:49 UTC (permalink / raw)
  To: git; +Cc: Patrick Steinhardt, Lidong Yan

Lidong Yan (2):
  reftable/writer: fix memory leak when `padded_write()` fails
  reftable/writer: fix memory leak when `writer_index_hash()` fails

 reftable/writer.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)


base-commit: 6f84262c44a89851c3ae5a6e4c1a9d06b2068d75
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1958%2Fbrandb97%2Ffix-reftable-padded-write-leak-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1958/brandb97/fix-reftable-padded-write-leak-v3
Pull-Request: https://github.com/git/git/pull/1958

Range-diff vs v2:

 1:  9329ae2d478 ! 1:  13ebdd672ff reftable/writer: fix memory leak if write fails
     @@ Metadata
      Author: Lidong Yan <502024330056@smail.nju.edu.cn>
      
       ## Commit message ##
     -    reftable/writer: fix memory leak if write fails
     +    reftable/writer: fix memory leak when `padded_write()` fails
      
          In reftable/writer.c:padded_write(), if w->writer failed, zeroed
          allocated in `reftable_calloc` will leak. w->writer could be
     @@ Commit message
          some write error. Simply add reftable_free(zeroed) will solve this
          problem.
      
     -    In reftable/writer.c:writer_index_hash(), if `reftable_buf_add` failed,
     -    key allocated by `reftable_malloc` will not be insert into `obj_index_tree`
     -    thus leaks. Simple add reftable_free(key) will solve this problem.
     -
          Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
      
       ## reftable/writer.c ##
     @@ reftable/writer.c: static int padded_write(struct reftable_writer *w, uint8_t *d
       
       		w->pending_padding = 0;
       		reftable_free(zeroed);
     -@@ reftable/writer.c: static int writer_index_hash(struct reftable_writer *w, struct reftable_buf *has
     - 
     - 		reftable_buf_reset(&key->hash);
     - 		err = reftable_buf_add(&key->hash, hash->buf, hash->len);
     --		if (err < 0)
     -+		if (err < 0) {
     -+			reftable_free(key);
     - 			return err;
     -+		}
     - 		tree_insert(&w->obj_index_tree, key,
     - 			    &obj_index_tree_node_compare);
     - 	} else {
 -:  ----------- > 2:  64f778ce2ba reftable/writer: fix memory leak when `writer_index_hash()` fails

-- 
gitgitgadget

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v3 1/2] reftable/writer: fix memory leak when `padded_write()` fails
  2025-05-12 12:49   ` [PATCH v3 0/2] reftable/writer: fix memory leak when " Lidong Yan via GitGitGadget
@ 2025-05-12 12:49     ` Lidong Yan via GitGitGadget
  2025-05-12 12:49     ` [PATCH v3 2/2] reftable/writer: fix memory leak when `writer_index_hash()` fails Lidong Yan via GitGitGadget
  2025-05-12 14:34     ` [PATCH v3 0/2] reftable/writer: fix memory leak when write fails Patrick Steinhardt
  2 siblings, 0 replies; 8+ messages in thread
From: Lidong Yan via GitGitGadget @ 2025-05-12 12:49 UTC (permalink / raw)
  To: git; +Cc: Patrick Steinhardt, Lidong Yan, Lidong Yan

From: Lidong Yan <502024330056@smail.nju.edu.cn>

In reftable/writer.c:padded_write(), if w->writer failed, zeroed
allocated in `reftable_calloc` will leak. w->writer could be
`reftable_write_data` in reftable/stack.c, and could fail due to
some write error. Simply add reftable_free(zeroed) will solve this
problem.

Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
---
 reftable/writer.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/reftable/writer.c b/reftable/writer.c
index cb16f71be49e..3ceb37428887 100644
--- a/reftable/writer.c
+++ b/reftable/writer.c
@@ -57,8 +57,10 @@ static int padded_write(struct reftable_writer *w, uint8_t *data, size_t len,
 			return -1;
 
 		n = w->write(w->write_arg, zeroed, w->pending_padding);
-		if (n < 0)
+		if (n < 0) {
+			reftable_free(zeroed);
 			return n;
+		}
 
 		w->pending_padding = 0;
 		reftable_free(zeroed);
-- 
gitgitgadget


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v3 2/2] reftable/writer: fix memory leak when `writer_index_hash()` fails
  2025-05-12 12:49   ` [PATCH v3 0/2] reftable/writer: fix memory leak when " Lidong Yan via GitGitGadget
  2025-05-12 12:49     ` [PATCH v3 1/2] reftable/writer: fix memory leak when `padded_write()` fails Lidong Yan via GitGitGadget
@ 2025-05-12 12:49     ` Lidong Yan via GitGitGadget
  2025-05-12 14:34     ` [PATCH v3 0/2] reftable/writer: fix memory leak when write fails Patrick Steinhardt
  2 siblings, 0 replies; 8+ messages in thread
From: Lidong Yan via GitGitGadget @ 2025-05-12 12:49 UTC (permalink / raw)
  To: git; +Cc: Patrick Steinhardt, Lidong Yan, Lidong Yan

From: Lidong Yan <502024330056@smail.nju.edu.cn>

In reftable/writer.c:writer_index_hash(), if `reftable_buf_add` failed,
key allocated by `reftable_malloc` will not be insert into `obj_index_tree`
thus leaks. Simple add reftable_free(key) will solve this problem.

Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
---
 reftable/writer.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/reftable/writer.c b/reftable/writer.c
index 3ceb37428887..3b4ebdd6dced 100644
--- a/reftable/writer.c
+++ b/reftable/writer.c
@@ -258,8 +258,10 @@ static int writer_index_hash(struct reftable_writer *w, struct reftable_buf *has
 
 		reftable_buf_reset(&key->hash);
 		err = reftable_buf_add(&key->hash, hash->buf, hash->len);
-		if (err < 0)
+		if (err < 0) {
+			reftable_free(key);
 			return err;
+		}
 		tree_insert(&w->obj_index_tree, key,
 			    &obj_index_tree_node_compare);
 	} else {
-- 
gitgitgadget

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v3 0/2] reftable/writer: fix memory leak when write fails
  2025-05-12 12:49   ` [PATCH v3 0/2] reftable/writer: fix memory leak when " Lidong Yan via GitGitGadget
  2025-05-12 12:49     ` [PATCH v3 1/2] reftable/writer: fix memory leak when `padded_write()` fails Lidong Yan via GitGitGadget
  2025-05-12 12:49     ` [PATCH v3 2/2] reftable/writer: fix memory leak when `writer_index_hash()` fails Lidong Yan via GitGitGadget
@ 2025-05-12 14:34     ` Patrick Steinhardt
  2 siblings, 0 replies; 8+ messages in thread
From: Patrick Steinhardt @ 2025-05-12 14:34 UTC (permalink / raw)
  To: Lidong Yan via GitGitGadget; +Cc: git, Lidong Yan

On Mon, May 12, 2025 at 12:49:02PM +0000, Lidong Yan via GitGitGadget wrote:
> Lidong Yan (2):
>   reftable/writer: fix memory leak when `padded_write()` fails
>   reftable/writer: fix memory leak when `writer_index_hash()` fails
> 
>  reftable/writer.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)

Thanks, these look good to me.

Patrick

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-05-12 14:34 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-10  3:50 [PATCH] reftable/writer: fix memory leak when `padded_write()` fails Lidong Yan via GitGitGadget
2025-05-11 16:16 ` [PATCH v2] reftable/writer: fix memory leak if write fails Lidong Yan via GitGitGadget
2025-05-12  8:25   ` Patrick Steinhardt
2025-05-12 10:54     ` lidongyan
2025-05-12 12:49   ` [PATCH v3 0/2] reftable/writer: fix memory leak when " Lidong Yan via GitGitGadget
2025-05-12 12:49     ` [PATCH v3 1/2] reftable/writer: fix memory leak when `padded_write()` fails Lidong Yan via GitGitGadget
2025-05-12 12:49     ` [PATCH v3 2/2] reftable/writer: fix memory leak when `writer_index_hash()` fails Lidong Yan via GitGitGadget
2025-05-12 14:34     ` [PATCH v3 0/2] reftable/writer: fix memory leak when write fails Patrick Steinhardt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.