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

[PATCH] revision.c: set-up "index_state.repo", don't segfault in pack-objects

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Aug 5, 2022, 14:24 UTC
Message-ID
<patch-1.1-3ff17707481-20220805T141816Z-avarab@gmail.com>
In-Reply-To
<CAKvVO18RVye=PkBRv=trj2GHh8ccGKL5j0mMq2eHQ1SX=wsr8A@mail.gmail.com>

Narrowly fix a segfault that's been reported against pack-objects at [1] and [2].

This fixes a segfault in "git pack-objects", see a reports at [1] and [2]. In that case we'd go through the add_index_objects_to_pending() codepath being modified here, and eventually call into new_untracked_cache().

We'd then segfault in new_untracked_cache_flags() as we tried to use a NULL "repo" extracted from the "struct index_state".

The segfault we ran into there is only a symptom of a much bigger problem, namely that we have various "struct index_state" variables constructed in various places, and then call into functions that might expect to have a non-NULL "repo" member. In follow-up work we'll fix that more general problem, but let's just fix the segfault for now.

1. https://lore.kernel.org/git/977a6e0e-251c-4fa5-8b3b-fa3e2a761926@www.fastmail.com/
2. https://lore.kernel.org/git/ecb6fa27-b918-4234-8e44-13c2a3e76e07@gmail.com/
Reported-by: Paul Horn <git@knutwalker.engineer>
Reported-by: Emily Noneman <emily.noneman@gmail.com>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
On Thu, Aug 04 2022, Emily Noneman wrote:
> Ævar Arnfjörð Bjarmason, your patch fixed the issue for me! Thank you!

Thanks, would you mind testing this more narrow fix, I think it should fix the segfault too, but let's be sure & confirm it.

I haven't (and haven't really tried) to come up with a regression fix for this. I have changes that come after this which extensively test the same issue elsewhere, so maybe it's not needed...

 revision.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/revision.c b/revision.c
index 87f1c117d13..48c2f1b91a8 100644
--- a/revision.c
+++ b/revision.c
@@ -1775,7 +1775,7 @@ void add_index_objects_to_pending(struct rev_info *revs, unsigned int flags)
 	worktrees = get_worktrees();
 	for (p = worktrees; *p; p++) {
 		struct worktree *wt = *p;
-		struct index_state istate = { NULL };
+		struct index_state istate = { .repo = revs->repo };
 
 		if (wt->is_current)
 			continue; /* current index already taken care of */
-- 
2.37.1.1283.g2c56c4202c5
Previous: Emily NonemanNext: Derrick Stolee
Message 7 of 15 in “Bugreport: pack-objects died of signal 11”
  1. Paul HornJul 12, 2022
  2. Jeff KingJul 14, 2022
  3. Emily NonemanAug 4, 2022
  4. Derrick StoleeAug 4, 2022
  5. Ævar Arnfjörð BjarmasonAug 4, 2022
  6. Emily NonemanAug 4, 2022
  7. revision.c: set-up "index_state.repo", don't segfault in pack-objectsÆvar Arnfjörð Bjarmason, Aug 5, 2022
  8. Derrick StoleeAug 5, 2022
  9. Jeff KingAug 5, 2022
  10. Junio C HamanoAug 5, 2022
  11. Emily NonemanAug 8, 2022
  12. Jeff KingAug 9, 2022
  13. Junio C HamanoAug 9, 2022
  14. Jeff KingAug 9, 2022
  15. Junio C HamanoAug 9, 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.