summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorab196087 <none@none>2007-05-01 09:05:43 -0700
committerab196087 <none@none>2007-05-01 09:05:43 -0700
commitc22c4bcbc84edc468c452180619bf77fdee93726 (patch)
treee713d61fff2e40199a88c4c9fe005d2e05208c2e /usr/src
parentf4da9be01648d6afa604495d9b9956dddeb92a8c (diff)
downloadillumos-gate-c22c4bcbc84edc468c452180619bf77fdee93726.tar.gz
6341667 elfdump should check alignments of ELF header elements
6387860 elfdump cores, when processing linux built ELF file
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/cmd/sgs/elfdump/common/elfdump.c13
-rw-r--r--usr/src/cmd/sgs/elfdump/common/elfdump.msg2
-rw-r--r--usr/src/cmd/sgs/packages/common/SUNWonld-README2
3 files changed, 16 insertions, 1 deletions
diff --git a/usr/src/cmd/sgs/elfdump/common/elfdump.c b/usr/src/cmd/sgs/elfdump/common/elfdump.c
index ce03a0f556..66897fc87e 100644
--- a/usr/src/cmd/sgs/elfdump/common/elfdump.c
+++ b/usr/src/cmd/sgs/elfdump/common/elfdump.c
@@ -2584,7 +2584,7 @@ got(Cache *cache, Word shnum, Ehdr *ehdr, const char *file, uint_t flags)
/*
* Only pay attention to relocations against the GOT.
*/
- if ((offset < gotbgn) || (offset > gotend))
+ if ((offset < gotbgn) || (offset >= gotend))
continue;
/* LINTED */
@@ -2697,6 +2697,17 @@ regular(const char *file, Elf *elf, uint_t flags, char *Nname, int wfd)
Elf_ehdr(0, ehdr, shdr);
/*
+ * If the section headers or program headers have inadequate
+ * alignment for the class of object, print a warning. libelf
+ * can handle such files, but programs that use them can crash
+ * when they dereference unaligned items.
+ */
+ if (ehdr->e_phoff & (sizeof (Addr) - 1))
+ (void) fprintf(stderr, MSG_INTL(MSG_ERR_BADPHDRALIGN), file);
+ if (ehdr->e_shoff & (sizeof (Addr) - 1))
+ (void) fprintf(stderr, MSG_INTL(MSG_ERR_BADSHDRALIGN), file);
+
+ /*
* Print the program headers.
*/
if ((flags & FLG_PHDR) && (phnum != 0)) {
diff --git a/usr/src/cmd/sgs/elfdump/common/elfdump.msg b/usr/src/cmd/sgs/elfdump/common/elfdump.msg
index f8adc9cab2..998aa416e2 100644
--- a/usr/src/cmd/sgs/elfdump/common/elfdump.msg
+++ b/usr/src/cmd/sgs/elfdump/common/elfdump.msg
@@ -73,6 +73,8 @@
@ MSG_ERR_BADREL1 "%s: bad relocation entry: %s: relocation requires symbol\n"
@ MSG_ERR_SHSTRNULL "%s: zero size section header string table (shstrtab)\n"
@ MSG_ERR_FAILURE "%s: %s failed: %s\n"
+@ MSG_ERR_BADSHDRALIGN "%s: bad section header array alignment\n"
+@ MSG_ERR_BADPHDRALIGN "%s: bad program header array alignment\n"
@ MSG_ERR_BADSHNAME "%s: section[%d]: invalid sh_name: %lld\n"
@ MSG_ERR_BADSHLINK "%s: %s: invalid sh_link: %d\n"
@ MSG_ERR_BADSHINFO "%s: %s: invalid sh_info: %d\n"
diff --git a/usr/src/cmd/sgs/packages/common/SUNWonld-README b/usr/src/cmd/sgs/packages/common/SUNWonld-README
index 939f727235..65aa2ff620 100644
--- a/usr/src/cmd/sgs/packages/common/SUNWonld-README
+++ b/usr/src/cmd/sgs/packages/common/SUNWonld-README
@@ -1229,3 +1229,5 @@ Bugid Risk Synopsis
6541004 hwcap filter processing can leak memory
5108874 elfdump SEGVs on bad object file
6547441 Uninitialized variable causes ld.so.1 to crash on object cleanup
+6341667 elfdump should check alignments of ELF header elements
+6387860 elfdump cores, when processing linux built ELF file