linux: Fix leak when the offset of memory_mapped_file is greater than 0

Breakpad should only map the file content after the offset instead of
the whole file. Mapping the whole file while only unmap 'file_len - offset'
would leak 'offset' bytes of mapping in virtual memory.

Change-Id: I10be4f929d969703a6a02c1f709d2a4ca86a6e9e
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/2393468
Reviewed-by: Mike Frysinger <vapier@chromium.org>
This commit is contained in:
Sim Sun 2020-09-04 17:59:14 -07:00 committed by Mike Frysinger
parent 039c4c9bbb
commit c6d49c47a0

View file

@ -87,13 +87,14 @@ bool MemoryMappedFile::Map(const char* path, size_t offset) {
return true; return true;
} }
void* data = sys_mmap(NULL, file_len, PROT_READ, MAP_PRIVATE, fd, offset); size_t content_len = file_len - offset;
void* data = sys_mmap(NULL, content_len, PROT_READ, MAP_PRIVATE, fd, offset);
sys_close(fd); sys_close(fd);
if (data == MAP_FAILED) { if (data == MAP_FAILED) {
return false; return false;
} }
content_.Set(data, file_len - offset); content_.Set(data, content_len);
return true; return true;
} }