git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 06/11] pack-redundant: avoid using uninitialized memory

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 16, 2022, 04:53 UTC
Message-ID
<xmqqilp1w6oi.fsf@gitster.g>
In-Reply-To
<bc29a9710e3a22e6d660098c4f201f3bfecc54ea.1655336146.git.gitgitgadget@gmail.com>

"Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com> writes:

Show 24 quoted lines
> From: Johannes Schindelin <johannes.schindelin@gmx.de>
>
> In the `add_pack()` function, we forgot to initialize the field `next`,
> which could potentially lead to readin uninitialized memory later.
>
> Reported by Coverity.
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
>  builtin/pack-redundant.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/builtin/pack-redundant.c b/builtin/pack-redundant.c
> index ed9b9013a5f..1f7da1f68b6 100644
> --- a/builtin/pack-redundant.c
> +++ b/builtin/pack-redundant.c
> @@ -526,6 +526,7 @@ static struct pack_list * add_pack(struct packed_git *p)
>  	}
>  	l.all_objects_size = l.remaining_objects->size;
>  	l.unique_objects = NULL;
> +	l.next = NULL;
>  	if (p->pack_local)
>  		return pack_list_insert(&local_packs, &l);
>  	else
		return pack_list_insert(&altodb_packs, &l);
The pack_list_insert reads like so:
static inline struct pack_list * pack_list_insert(struct pack_list **pl,
					   struct pack_list *entry)
{
	struct pack_list *p = xmalloc(sizeof(struct pack_list));
	memcpy(p, entry, sizeof(struct pack_list));
	p->next = *pl;
	*pl = p;
	return p;
}

IOW, we prepare members of "l", pass it as "entry" to pack_list_insert(), but the helper function allocates a new piece of memory, copies "l" to it, and then sets the .next member of it to a reasonable value.

And after that, the "l" that was merely used as a template goes out of scope.

So I think this is a false positive. memcpy(p) does copy the uninitialized garbage that is held in entry->next to p->next, but it is overwritten with a reasonable address immediately after that.

Previous: Johannes Schindelin via GitGitGadgetNext: Johannes Schindelin via GitGitGadget
Message 18 of 38 in “Coverity fixes”
  1. 00/11 Coverity fixesJohannes Schindelin via GitGitGadget, Jun 15, 2022
  2. 01/11 mingw: avoid accessing uninitialized memory in `is_executable()`Johannes Schindelin via GitGitGadget, Jun 15, 2022
  3. Junio C HamanoJun 16, 2022
  4. René ScharfeJun 16, 2022
  5. Junio C HamanoJun 16, 2022
  6. Junio C HamanoJun 16, 2022
  7. 02/11 fsmonitor: avoid memory leak in `fsm_settings__get_incompatible_msg()`Johannes Schindelin via GitGitGadget, Jun 15, 2022
  8. Junio C HamanoJun 16, 2022
  9. 03/11 submodule--helper: avoid memory leak in `update_submodule()`Johannes Schindelin via GitGitGadget, Jun 15, 2022
  10. Junio C HamanoJun 16, 2022
  11. Glen ChooJun 16, 2022
  12. 04/11 get_oid_with_context_1(): avoid use-after-freeJohannes Schindelin via GitGitGadget, Jun 15, 2022
  13. Junio C HamanoJun 16, 2022
  14. 05/11 submodule-config: avoid memory leakJohannes Schindelin via GitGitGadget, Jun 15, 2022
  15. Junio C HamanoJun 16, 2022
  16. Glen ChooJun 16, 2022
  17. 06/11 pack-redundant: avoid using uninitialized memoryJohannes Schindelin via GitGitGadget, Jun 15, 2022
  18. Junio C HamanoJun 16, 2022
  19. 07/11 submodule--helper: avoid memory leak when fetching submodulesJohannes Schindelin via GitGitGadget, Jun 15, 2022
  20. Junio C HamanoJun 16, 2022
  21. 08/11 read_index_from(): avoid memory leakJohannes Schindelin via GitGitGadget, Jun 15, 2022
  22. 08/11 read_index_from(): avoid memory leakTom Levy, Jun 17, 2022
  23. 09/11 pack-mtimes: avoid closing a bogus file descriptorJohannes Schindelin via GitGitGadget, Jun 15, 2022
  24. Taylor BlauJun 16, 2022
  25. 10/11 relative_url(): fix incorrect conditionJohannes Schindelin via GitGitGadget, Jun 15, 2022
  26. Junio C HamanoJun 16, 2022
  27. Ævar Arnfjörð BjarmasonJun 16, 2022
  28. Junio C HamanoJun 16, 2022
  29. Junio C HamanoJun 16, 2022
  30. 11/11 bug_fl(): add missing `va_end()` callJohannes Schindelin via GitGitGadget, Jun 15, 2022
  31. Jeff KingJun 16, 2022
  32. Junio C HamanoJun 16, 2022
  33. Ævar Arnfjörð BjarmasonJun 16, 2022
  34. Junio C HamanoJun 16, 2022
  35. Jeff KingJun 16, 2022
  36. bug_fl(): correctly initialize trace2 va_listJeff King, Jun 16, 2022
  37. Junio C HamanoJun 16, 2022
  38. Junio C HamanoJun 16, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.