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... |