From: Julian Seward Date: Thu, 4 Sep 2014 11:28:11 +0000 (+0000) Subject: Fix off-by-one error in size of coredumps. Patch from Ivo Raisr X-Git-Tag: svn/VALGRIND_3_10_0~52 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ff66667024b6e8cc0faf84e258863b9c1453e923;p=thirdparty%2Fvalgrind.git Fix off-by-one error in size of coredumps. Patch from Ivo Raisr (ivosh@ivosh.net). Fixes #338300. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14457 --- diff --git a/coregrind/m_coredump/coredump-elf.c b/coregrind/m_coredump/coredump-elf.c index b125e7c1c9..61a1ce04d8 100644 --- a/coregrind/m_coredump/coredump-elf.c +++ b/coregrind/m_coredump/coredump-elf.c @@ -112,7 +112,7 @@ static void fill_ehdr(ESZ(Ehdr) *ehdr, Int num_phdrs) static void fill_phdr(ESZ(Phdr) *phdr, const NSegment *seg, UInt off, Bool write) { - SizeT len = seg->end - seg->start; + SizeT len = seg->end - seg->start + 1; write = write && should_dump(seg); @@ -700,7 +700,7 @@ void make_elf_coredump(ThreadId tid, const vki_siginfo_t *si, ULong max_size) continue; fill_phdr(&phdrs[idx], seg, off, - (seg->end - seg->start + off) < max_size); + (seg->end - seg->start + 1 + off) < max_size); off += phdrs[idx].p_filesz; @@ -725,7 +725,7 @@ void make_elf_coredump(ThreadId tid, const vki_siginfo_t *si, ULong max_size) if (phdrs[idx].p_filesz > 0) { vg_assert(VG_(lseek)(core_fd, phdrs[idx].p_offset, VKI_SEEK_SET) == phdrs[idx].p_offset); - vg_assert(seg->end - seg->start >= phdrs[idx].p_filesz); + vg_assert(seg->end - seg->start + 1 >= phdrs[idx].p_filesz); (void)VG_(write)(core_fd, (void *)seg->start, phdrs[idx].p_filesz); }