Module Name:    src
Committed By:   dholland
Date:           Sat Oct 13 21:13:07 UTC 2012

Modified Files:
        src/libexec/ld.elf_so: map_object.c

Log Message:
Improve the diagnostic messages for invalid/non-ELF files. Proposed a
while back; I forget the context. Has been sitting in one of my trees
awaiting a test run since, apparently, August 2011.


To generate a diff of this commit:
cvs rdiff -u -r1.44 -r1.45 src/libexec/ld.elf_so/map_object.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/libexec/ld.elf_so/map_object.c
diff -u src/libexec/ld.elf_so/map_object.c:1.44 src/libexec/ld.elf_so/map_object.c:1.45
--- src/libexec/ld.elf_so/map_object.c:1.44	Wed Jul 25 22:51:04 2012
+++ src/libexec/ld.elf_so/map_object.c	Sat Oct 13 21:13:07 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: map_object.c,v 1.44 2012/07/25 22:51:04 martin Exp $	 */
+/*	$NetBSD: map_object.c,v 1.45 2012/10/13 21:13:07 dholland Exp $	 */
 
 /*
  * Copyright 1996 John D. Polstra.
@@ -34,7 +34,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: map_object.c,v 1.44 2012/07/25 22:51:04 martin Exp $");
+__RCSID("$NetBSD: map_object.c,v 1.45 2012/10/13 21:13:07 dholland Exp $");
 #endif /* not lint */
 
 #include <errno.h>
@@ -105,7 +105,7 @@ _rtld_map_object(const char *path, int f
 #endif
 
 	if (sb != NULL && sb->st_size < (off_t)sizeof (Elf_Ehdr)) {
-		_rtld_error("%s: unrecognized file format1", path);
+		_rtld_error("%s: not ELF file (too short)", path);
 		return NULL;
 	}
 
@@ -125,9 +125,12 @@ _rtld_map_object(const char *path, int f
 		goto bad;
 	}
 	/* Make sure the file is valid */
-	if (memcmp(ELFMAG, ehdr->e_ident, SELFMAG) != 0 ||
-	    ehdr->e_ident[EI_CLASS] != ELFCLASS) {
-		_rtld_error("%s: unrecognized file format2 [%x != %x]", path,
+	if (memcmp(ELFMAG, ehdr->e_ident, SELFMAG) != 0) {
+		_rtld_error("%s: not ELF file (magic number bad)", path);
+		goto bad;
+	}
+	if (ehdr->e_ident[EI_CLASS] != ELFCLASS) {
+		_rtld_error("%s: invalid ELF class %x; expected %x", path,
 		    ehdr->e_ident[EI_CLASS], ELFCLASS);
 		goto bad;
 	}

Reply via email to