If any data is left then the data is likely part of the truncated note name/desc. This probably means the note is corrupted, but it is better to have the actual data in dest instead of random uninitialized memory.
Signed-off-by: Mark Wielaard <m...@redhat.com> --- libelf/ChangeLog | 5 +++++ libelf/note_xlate.h | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index b21714e..8a11563 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,8 @@ +2014-11-23 Mark Wielaard <m...@redhat.com> + + * note_xlate.h (elf_cvt_note): Copy over any leftover data if + src != dest. The data is probably part of truncated name/desc. + 2014-11-22 Mark Wielaard <m...@redhat.com> * elf_getphdrnum.c (elf_getphdrnum): Sanity check the diff --git a/libelf/note_xlate.h b/libelf/note_xlate.h index 8187e88..aa730bc 100644 --- a/libelf/note_xlate.h +++ b/libelf/note_xlate.h @@ -1,5 +1,5 @@ /* Conversion functions for notes. - Copyright (C) 2007, 2009 Red Hat, Inc. + Copyright (C) 2007, 2009, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -56,4 +56,9 @@ elf_cvt_note (void *dest, const void *src, size_t len, int encode) src += namesz + descsz; dest += namesz + descsz; } + + /* Copy opver any leftover data unconcerted. Probably part of + truncated name/desc data. */ + if (len > 0 && src != dest) + memcpy (dest, src, len); } -- 1.9.3