| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| backport.sh | ||
| leaks.sh | ||
| release.py | ||
| sanitizers.supp | ||
| thread-sanitizer.supp | ||
| user_model.c | ||
| user_nodefs.h | ||
| valgrind.sh | ||
| valgrind.supp |
This change fixes a packfile heap corruption that can happen when interacting with multiple packfiles concurrently across multiple threads. This is exacerbated by setting a lower mwindow open file limit. This change: * Renames most of the internal methods in pack.c to clearly indicate that they expect to be called with a certain lock held, making reasoning about the state of locks a bit easier. * Splits the `git_pack_file` lock in two: the one in `git_pack_file` only protects the `index_map`. The protection to `git_mwindow_file` is now in that struct. * Explicitly checks for freshness of the `git_pack_file` in `git_packfile_unpack_header`: this allows the mwindow implementation to close files whenever there is enough cache pressure, and `git_packfile_unpack_header` will reopen the packfile if needed. * After a call to `p_munmap()`, the `data` and `len` fields are poisoned with `NULL` to make use-after-frees more evident and crash rather than being open to the possibility of heap corruption. * Adds a test case to prevent this from regressing in the future. Fixes: #5591
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| backport.sh | Loading commit data... | |
| leaks.sh | Loading commit data... | |
| release.py | Loading commit data... | |
| sanitizers.supp | Loading commit data... | |
| thread-sanitizer.supp | Loading commit data... | |
| user_model.c | Loading commit data... | |
| user_nodefs.h | Loading commit data... | |
| valgrind.sh | Loading commit data... | |
| valgrind.supp | Loading commit data... |