summaryrefslogtreecommitdiffstats
path: root/libelf/note_xlate.h
diff options
context:
space:
mode:
Diffstat (limited to 'libelf/note_xlate.h')
-rw-r--r--libelf/note_xlate.h16
1 files changed, 14 insertions, 2 deletions
diff --git a/libelf/note_xlate.h b/libelf/note_xlate.h
index bc9950ff..7e2784b0 100644
--- a/libelf/note_xlate.h
+++ b/libelf/note_xlate.h
@@ -47,13 +47,25 @@ elf_cvt_note (void *dest, const void *src, size_t len, int encode,
note_len += n->n_namesz;
note_len = nhdr8 ? NOTE_ALIGN8 (note_len) : NOTE_ALIGN4 (note_len);
if (note_len > len || note_len < sizeof *n)
- break;
+ {
+ /* Header was translated, nothing else. */
+ len -= sizeof *n;
+ src += sizeof *n;
+ dest += sizeof *n;
+ break;
+ }
/* data as a whole needs to be aligned. */
note_len += n->n_descsz;
note_len = nhdr8 ? NOTE_ALIGN8 (note_len) : NOTE_ALIGN4 (note_len);
if (note_len > len || note_len < sizeof *n)
- break;
+ {
+ /* Header was translated, nothing else. */
+ len -= sizeof *n;
+ src += sizeof *n;
+ dest += sizeof *n;
+ break;
+ }
/* Copy or skip the note data. */
size_t note_data_len = note_len - sizeof *n;