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

Re: [JGIT PATCH 1/2] index-pack: Avoid disk corruption yielding a valid pack footer checksum

From
Nicolas Pitre <nico@cam.org>
Date
Aug 28, 2008, 00:09 UTC
Message-ID
<alpine.LFD.1.10.0808272007541.1624@xanadu.home>
In-Reply-To
<1219873724-13348-1-git-send-email-spearce@spearce.org>
On Wed, 27 Aug 2008, Shawn O. Pearce wrote:
Show 23 quoted lines
> When we are processing a thin pack and making it non-thin we need
> to update the header with a new object count.  That causes us to
> recompute the footer checksum for the entire pack, and the only
> way to do that is to re-read the data from disk.
> 
> If there was filesystem corruption in the process (e.g. a bad
> disk sector, or a kernel bug) we don't want to produce a valid
> pack at the end.  Instead we need to fail-fast with the error
> so the user is aware of the corruption.
> 
> We now keep track of where the end of the original data is and
> run two SHA-1 computations during the header-footer fixup.  If
> the original data region doesn't match the original footer we
> got over the network we know there was corruption and we just
> cannot trust this pack file.
> 
> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
> ---
> 
>   This was inspired by the data corruption thread started
>   by J. Bruce Fields.  At some point in the thread Linus
>   pointed out the C Git index-pack isn't as safe as it can
>   be, and offered a strategy to fix it.

I thought it was Nicolas Pitre who offered that strategy? Maybe I was mistaken. ;-)

Nicolas
Previous: Shawn O. PearceNext: Shawn O. Pearce
Message 3 of 5 in “index-pack: Avoid disk corruption yielding a valid pack footer checksum”
  1. 1/2 index-pack: Avoid disk corruption yielding a valid pack footer checksumShawn O. Pearce, Aug 27, 2008
  2. 2/2 index-pack: Use fsync to ensure received pack data is on diskShawn O. Pearce, Aug 27, 2008
  3. Nicolas PitreAug 28, 2008
  4. Shawn O. PearceAug 28, 2008
  5. Nicolas PitreAug 28, 2008

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.