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

[PATCH] read-cache: avoid git_path() race in freshen_shared_index()

From
Christian Couder <christian.couder@gmail.com>
Date
Mar 29, 2017, 08:08 UTC
Message-ID
<20170329080820.8084-1-chriscool@tuxfamily.org>

When performing an interactive rebase in split-index mode, the commit message that one should rework when squashing commits can contain some garbage instead of the usual concatenation of both of the commit messages.

When bisecting it appears that 94c9b5af70 (Merge branch 'cc/split-index-config', 2017-03-17) is the first bad commit.

But when rebasing cc/split-index-config on top of the commit it was merged with, the first bad commit is then c3a0082502 (read-cache: use freshen_shared_index() in read_index_from(), 2017-03-06).

This shows that we should be careful not to use git_path() in freshen_shared_index(). It is using a shared buffer that can too easily lead to races.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
 read-cache.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/read-cache.c b/read-cache.c
index e447751823..2f10242c24 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -1682,9 +1682,10 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist)
  */
 static void freshen_shared_index(char *base_sha1_hex, int warn)
 {
-	const char *shared_index = git_path("sharedindex.%s", base_sha1_hex);
+	char *shared_index = git_pathdup("sharedindex.%s", base_sha1_hex);
 	if (!check_and_freshen_file(shared_index, 1) && warn)
 		warning("could not freshen shared index '%s'", shared_index);
+	free(shared_index);
 }
 
 int read_index_from(struct index_state *istate, const char *path)
-- 
2.12.0.339.g3df8399f7e.dirty
Next: Junio C Hamano
Message 1 of 7 in “read-cache: avoid git_path() race in freshen_shared_index()”
  1. read-cache: avoid git_path() race in freshen_shared_index()Christian Couder, Mar 29, 2017
  2. Junio C HamanoMar 29, 2017
  3. Jeff KingMar 29, 2017
  4. Christian CouderMar 30, 2017
  5. Junio C HamanoMar 30, 2017
  6. Duy NguyenMar 30, 2017
  7. Jeff KingApr 1, 2017

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.