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

[PATCH] credential: cred helper fast exit can cause SIGPIPE, crash

From
EBErik E Brady <brady@cisco.com>
Date
Mar 28, 2018, 22:20 UTC
Message-ID
<20180328222051.23684-1-brady@cisco.com>

credential.c, run_credential_helper(): now ignores SIGPIPE when writing to credential helper. Avoids problem with race where cred helper exits very quickly and, after, git tries to write to it, generating SIGPIPE and crashing git. To reproduce this the cred helper must not read from STDIN.

This was seen with a custom credential helper, written in
Go, which ignored the store command (STDIN not read) and
then did a quick exit.  Even with this fast helper the race
was pretty rare, ie: was only seen on some of our older VM's
running 2.6.18-416.el5 #1 SMP linux for whatever reason.  On
these VM's it occurred only once every few hundred git cmds.
---
 credential.c | 3 +++
 1 file changed, 3 insertions(+)
diff --git a/credential.c b/credential.c
index 9747f47b1..62be651b0 100644
--- a/credential.c
+++ b/credential.c
@@ -5,6 +5,7 @@
 #include "run-command.h"
 #include "url.h"
 #include "prompt.h"
+#include "sigchain.h"
 
 void credential_init(struct credential *c)
 {
@@ -227,8 +228,10 @@ static int run_credential_helper(struct credential *c,
 		return -1;
 
 	fp = xfdopen(helper.in, "w");
+	sigchain_push(SIGPIPE, SIG_IGN);
 	credential_write(c, fp);
 	fclose(fp);
+	sigchain_pop(SIGPIPE);
 
 	if (want_output) {
 		int r;
-- 
2.16.3.dirty
Next: Jeff King
Message 1 of 9 in “credential: cred helper fast exit can cause SIGPIPE, crash”
  1. credential: cred helper fast exit can cause SIGPIPE, crashErik E Brady, Mar 28, 2018
  2. Jeff KingMar 29, 2018
  3. Erik Brady -X (brady - ROBERT HALF INTERNATIONAL INC at Cisco)Mar 29, 2018
  4. Jeff KingMar 29, 2018
  5. credential: ignore SIGPIPE when writing to credential helpersErik E Brady, Mar 29, 2018
  6. Jeff KingMar 29, 2018
  7. Erik Brady -X (brady - ROBERT HALF INTERNATIONAL INC at Cisco)Mar 29, 2018
  8. Jeff KingMar 29, 2018
  9. Junio C HamanoMar 29, 2018

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.