Recent gits corrupts repository

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Something really weird is happening to a repository I'm working on, and
it's only a problem in recent Gits. A bisect shows that from
v1.7.6-1-g2548183 ("fix phantom untracked files when core.ignorecase is
set") and newer, this happens:

  $ git clone git://gitorious.org/tz/tzfiles.git
  Cloning into tzfiles...
  remote: Counting objects: 358, done.
  remote: Compressing objects: 100% (352/352), done.
  remote: Total 358 (delta 8), reused 343 (delta 3)
  Receiving objects: 100% (358/358), 44.15 MiB | 3.76 MiB/s, done.
  Resolving deltas: 100% (8/8), done.

  $ cd tzfiles/

  $ git status
  git: malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr)
(((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct
malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size)
>= (unsigned long)((((__builtin_offsetof (struct malloc_chunk,
fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t)))
- 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end &
pagemask) == 0)' failed.
  Aborted

  $ git status
  *** glibc detected *** git: free(): invalid next size (normal): 0x089f5588 ***
  ======= Backtrace: =========
  /lib/tls/i686/cmov/libc.so.6(+0x6b591)[0xb74d3591]
  /lib/tls/i686/cmov/libc.so.6(+0x6cde8)[0xb74d4de8]
  /lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0xb74d7ecd]
  /lib/tls/i686/cmov/libc.so.6(+0x5c410)[0xb74c4410]
  /lib/tls/i686/cmov/libc.so.6(fopen64+0x2c)[0xb74c69ec]
  git[0x80c1fdd]
  git[0x811b82b]
  git[0x80637ea]
  git[0x804bc87]
  git[0x804be93]
  /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xb747ebd6]
  git[0x804b521]
  ======= Memory map: ========
  08048000-08160000 r-xp 00000000 ca:00 2474445
/usr/local/varprg/git.master.v1.7.7-419-g87009ed/bin/git
  08160000-08161000 r--p 00117000 ca:00 2474445
/usr/local/varprg/git.master.v1.7.7-419-g87009ed/bin/git
  08161000-08166000 rw-p 00118000 ca:00 2474445
/usr/local/varprg/git.master.v1.7.7-419-g87009ed/bin/git
  08166000-081b0000 rw-p 00000000 00:00 0
  089ec000-08a0d000 rw-p 00000000 00:00 0          [heap]
  b7300000-b7321000 rw-p 00000000 00:00 0
  b7321000-b7400000 ---p 00000000 00:00 0
  b7444000-b7461000 r-xp 00000000 ca:00 24591      /lib/libgcc_s.so.1
  b7461000-b7462000 r--p 0001c000 ca:00 24591      /lib/libgcc_s.so.1
  b7462000-b7463000 rw-p 0001d000 ca:00 24591      /lib/libgcc_s.so.1
  b7463000-b7464000 rw-p 00000000 00:00 0
  b7464000-b7466000 r-xp 00000000 ca:00 1679643
/lib/tls/i686/cmov/libdl-2.11.1.so
  b7466000-b7467000 r--p 00001000 ca:00 1679643
/lib/tls/i686/cmov/libdl-2.11.1.so
  b7467000-b7468000 rw-p 00002000 ca:00 1679643
/lib/tls/i686/cmov/libdl-2.11.1.so
  b7468000-b75bb000 r-xp 00000000 ca:00 25961
/lib/tls/i686/cmov/libc-2.11.1.so
  b75bb000-b75bc000 ---p 00153000 ca:00 25961
/lib/tls/i686/cmov/libc-2.11.1.so
  b75bc000-b75be000 r--p 00153000 ca:00 25961
/lib/tls/i686/cmov/libc-2.11.1.so
  b75be000-b75bf000 rw-p 00155000 ca:00 25961
/lib/tls/i686/cmov/libc-2.11.1.so
  b75bf000-b75c3000 rw-p 00000000 00:00 0
  b75c3000-b75d8000 r-xp 00000000 ca:00 1679654
/lib/tls/i686/cmov/libpthread-2.11.1.so
  b75d8000-b75d9000 r--p 00014000 ca:00 1679654
/lib/tls/i686/cmov/libpthread-2.11.1.so
  b75d9000-b75da000 rw-p 00015000 ca:00 1679654
/lib/tls/i686/cmov/libpthread-2.11.1.so
  b75da000-b75dc000 rw-p 00000000 00:00 0
  b75dc000-b7714000 r-xp 00000000 ca:00 2007508
/lib/i686/cmov/libcrypto.so.0.9.8
  b7714000-b771c000 r--p 00137000 ca:00 2007508
/lib/i686/cmov/libcrypto.so.0.9.8
  b771c000-b772a000 rw-p 0013f000 ca:00 2007508
/lib/i686/cmov/libcrypto.so.0.9.8
  b772a000-b772e000 rw-p 00000000 00:00 0
  b772e000-b7741000 r-xp 00000000 ca:00 24635      /lib/libz.so.1.2.3.3
  b7741000-b7742000 r--p 00012000 ca:00 24635      /lib/libz.so.1.2.3.3
  b7742000-b7743000 rw-p 00013000 ca:00 24635      /lib/libz.so.1.2.3.3
  b774b000-b774f000 rw-p 00000000 00:00 0
  b774f000-b776a000 r-xp 00000000 ca:00 25083      /lib/ld-2.11.1.so
  b776a000-b776b000 r--p 0001a000 ca:00 25083      /lib/ld-2.11.1.so
  b776b000-b776c000 rw-p 0001b000 ca:00 25083      /lib/ld-2.11.1.so
  bfc1b000-bfc3c000 rw-p 00000000 00:00 0          [stack]
  f57fe000-f57ff000 r-xp 00000000 00:00 0          [vdso]
  Aborted

  $

Reverting 2548183 fixes the problem.

It also seems that the behaviour is not consistent. Sometimes, after
running the second "git status", this happens:

  $ git st
  error: index uses  extension, which we do not understand
  fatal: index file corrupt

And no, this is not memory corruption or something like that, the same
thing happens on my laptop.

Another curious thing: When using an earlier git (for example v1.7.6 in
the example below) on this repo after a "git status" with a recent git,
it segfaults. This indicates that recents Gits messes up something so
even old gits won't work in that repo anymore. This is the last lines of
an strace:

  open(".git/objects/pack",
O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
  getdents64(3, /* 4 entries */, 32768)   = 192
  access(".git/objects/pack/pack-b9b05d1e8fed49138c1ffda8f0f2b7d7a8d31c6a.keep",
F_OK) = -1 ENOENT (No such file or directory)
  stat64(".git/objects/pack/pack-b9b05d1e8fed49138c1ffda8f0f2b7d7a8d31c6a.pack",
{st_mode=S_IFREG|0444, st_size=46297839, ...}) = 0
  getdents64(3, /* 0 entries */, 32768)   = 0
  close(3)                                = 0
  open(".git/objects/info/alternates", O_RDONLY|O_LARGEFILE|O_NOATIME)
= -1 ENOENT (No such file or directory)
  open(".git/objects/pack/pack-b9b05d1e8fed49138c1ffda8f0f2b7d7a8d31c6a.idx",
O_RDONLY|O_LARGEFILE|O_NOATIME) = 3
  fstat64(3, {st_mode=S_IFREG|0444, st_size=11096, ...}) = 0
  mmap2(NULL, 11096, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb76e1000
  close(3)                                = 0
  getrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=1024}) = 0
  open(".git/objects/pack/pack-b9b05d1e8fed49138c1ffda8f0f2b7d7a8d31c6a.pack",
O_RDONLY|O_LARGEFILE|O_NOATIME) = 3
  fstat64(3, {st_mode=S_IFREG|0444, st_size=46297839, ...}) = 0
  fcntl64(3, F_GETFD)                     = 0
  fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
  read(3, "PACK\0\0\0\2\0\0\1f", 12)      = 12
  _llseek(3, 46297819, [46297819], SEEK_SET) = 0
  read(3, ",j\212\0375c\335\0k\244)\256\376\24\v\344\6]0\230", 20) = 20
  mmap2(NULL, 33554432, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb53fc000
  open(".git/info/grafts", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such
file or directory)
  open(".git/shallow", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file
or directory)
  brk(0x977e000)                          = 0x977e000
  open("/proc/meminfo", O_RDONLY)         = 4
  fstat64(4, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
  mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0xb76e0000
  read(4, "MemTotal:        1028684 kB\nMemF"..., 1024) = 1024
  close(4)                                = 0
  munmap(0xb76e0000, 4096)                = 0
  access(".git/info/exclude", R_OK)       = 0
  open(".git/info/exclude", O_RDONLY|O_LARGEFILE) = 4
  fstat64(4, {st_mode=S_IFREG|0644, st_size=240, ...}) = 0
  read(4, "# git ls-files --others --exclud"..., 240) = 240
  close(4)                                = 0
  access("/home/sunny/src/git/home-sunny/.gitexclude", R_OK) = 0
  open("/home/sunny/src/git/home-sunny/.gitexclude", O_RDONLY|O_LARGEFILE) = 4
  fstat64(4, {st_mode=S_IFREG|0644, st_size=86, ...}) = 0
  read(4, "\n# ~/.gitexclude\n# File ID: bcf6"..., 86) = 86
  close(4)                                = 0
  open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 4
  getdents64(4, /* 7 entries */, 32768)   = 216
  open(".gitignore", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file
or directory)
  --- SIGSEGV (Segmentation fault) @ 0 (0) ---
  +++ killed by SIGSEGV +++

Complete strace dump is stored at https://gist.github.com/1318830 .

I'm currently using 1.7.7.419.g87009 , compiled with a regular "make"
from the master branch. A quick test with newest master
(v1.7.7.1-475-g997a194) shows the same error. Not installed properly,
though, as I haven't run the test suite yet.

System info:

  Ubuntu 10.04.3 LTS
  gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
  GNU ld (GNU Binutils for Ubuntu) 2.20.1-system.20100303

Same thing happens with Ubuntu 10.10 on my laptop.

Even when creating a bundle and recloning, this happens. Also when
initialising a new, clean repo and fetching from the original local
clone, same story.

The repository was created on 2011-10-08 06:54:00 +0200, and because I
create a tag everytime I compile (using
<https://github.com/sunny256/utils/blob/master/build-git>), I know the
repository was created with git v1.7.7-138-g7f41b6b.

Because Gmail probably will wrap long lines, a copy of this message is
stored at <https://gist.github.com/1318935>.

Regards,
Øyvind
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]