From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 From: Keith Seitz Date: Fri, 11 Jan 2019 17:02:13 -0500 Subject: gdb-rhbz1187581-power8-regs-not-in-8.2-03of15.patch ;; Zero-initialize linux note sections ;; Pedro Franco de Carvalho, RH BZ 1187581 Zero-initialize linux note sections This patches changes linux-tdep.c so that the buffer used to write note sections when generating a core file is zero-initialized. This way, bytes that are not collected won't contain random data (e.g. padding bytes). gdb/ChangeLog: 2018-10-26 Pedro Franco de Carvalho * linux-tdep.c (linux_collect_regset_section_cb): Use std::vector instead of char * and malloc for buf. Remove xfree. diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c --- a/gdb/linux-tdep.c +++ b/gdb/linux-tdep.c @@ -1584,7 +1584,6 @@ linux_collect_regset_section_cb (const char *sect_name, int supply_size, int collect_size, const struct regset *regset, const char *human_name, void *cb_data) { - char *buf; struct linux_collect_regset_section_cb_data *data = (struct linux_collect_regset_section_cb_data *) cb_data; bool variable_size_section = (regset != NULL @@ -1598,19 +1597,22 @@ linux_collect_regset_section_cb (const char *sect_name, int supply_size, gdb_assert (regset && regset->collect_regset); - buf = (char *) xmalloc (collect_size); - regset->collect_regset (regset, data->regcache, -1, buf, collect_size); + /* This is intentionally zero-initialized by using std::vector, so + that any padding bytes in the core file will show as 0. */ + std::vector buf (collect_size); + + regset->collect_regset (regset, data->regcache, -1, buf.data (), + collect_size); /* PRSTATUS still needs to be treated specially. */ if (strcmp (sect_name, ".reg") == 0) data->note_data = (char *) elfcore_write_prstatus (data->obfd, data->note_data, data->note_size, data->lwp, - gdb_signal_to_host (data->stop_signal), buf); + gdb_signal_to_host (data->stop_signal), buf.data ()); else data->note_data = (char *) elfcore_write_register_note (data->obfd, data->note_data, data->note_size, - sect_name, buf, collect_size); - xfree (buf); + sect_name, buf.data (), collect_size); if (data->note_data == NULL) data->abort_iteration = 1;