Module Name: src
Committed By: maxv
Date: Sat Feb 22 07:53:16 UTC 2014
Modified Files:
src/sys/kern: exec_elf.c
Log Message:
Simplify error path.
ok christos@
To generate a diff of this commit:
cvs rdiff -u -r1.60 -r1.61 src/sys/kern/exec_elf.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/kern/exec_elf.c
diff -u src/sys/kern/exec_elf.c:1.60 src/sys/kern/exec_elf.c:1.61
--- src/sys/kern/exec_elf.c:1.60 Fri Feb 21 07:47:02 2014
+++ src/sys/kern/exec_elf.c Sat Feb 22 07:53:16 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: exec_elf.c,v 1.60 2014/02/21 07:47:02 maxv Exp $ */
+/* $NetBSD: exec_elf.c,v 1.61 2014/02/22 07:53:16 maxv Exp $ */
/*-
* Copyright (c) 1994, 2000, 2005 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: exec_elf.c,v 1.60 2014/02/21 07:47:02 maxv Exp $");
+__KERNEL_RCSID(1, "$NetBSD: exec_elf.c,v 1.61 2014/02/22 07:53:16 maxv Exp $");
#ifdef _KERNEL_OPT
#include "opt_pax.h"
@@ -921,9 +921,7 @@ netbsd_elf_signature(struct lwp *l, stru
switch (np->n_type) {
case ELF_NOTE_TYPE_NETBSD_TAG:
- /*
- * It is us
- */
+ /* It is us */
if (np->n_namesz == ELF_NOTE_NETBSD_NAMESZ &&
np->n_descsz == ELF_NOTE_NETBSD_DESCSZ &&
memcmp(ndata, ELF_NOTE_NETBSD_NAME,
@@ -934,52 +932,32 @@ netbsd_elf_signature(struct lwp *l, stru
isnetbsd = 1;
break;
}
+
/*
- * Ignore SuSE tags
+ * Ignore SuSE tags; SuSE's n_type is the same as NetBSD's
+ * one.
*/
if (np->n_namesz == ELF_NOTE_SUSE_NAMESZ &&
memcmp(ndata, ELF_NOTE_SUSE_NAME,
ELF_NOTE_SUSE_NAMESZ) == 0)
break;
- /*
- * Dunno, warn for diagnostic
- */
+
goto bad;
case ELF_NOTE_TYPE_PAX_TAG:
- if (np->n_namesz != ELF_NOTE_PAX_NAMESZ ||
- np->n_descsz != ELF_NOTE_PAX_DESCSZ ||
+ if (np->n_namesz == ELF_NOTE_PAX_NAMESZ &&
+ np->n_descsz == ELF_NOTE_PAX_DESCSZ &&
memcmp(ndata, ELF_NOTE_PAX_NAME,
- ELF_NOTE_PAX_NAMESZ)) {
-bad:
-#ifdef DIAGNOSTIC
- {
- /*
- * Ignore GNU tags
- */
- if (np->n_namesz == ELF_NOTE_GNU_NAMESZ &&
- memcmp(ndata, ELF_NOTE_GNU_NAME,
- ELF_NOTE_GNU_NAMESZ) == 0)
- break;
-
- int ns = MIN(np->n_namesz, shp->sh_size - sizeof(*np));
- printf("%s: Unknown elf note type %d: "
- "[namesz=%d, descsz=%d name=%*.*s]\n",
- epp->ep_kname, np->n_type, np->n_namesz,
- np->n_descsz, ns, ns, ndata);
- }
-#endif
- continue;
+ ELF_NOTE_PAX_NAMESZ) == 0) {
+ memcpy(&epp->ep_pax_flags,
+ ndata + roundup(ELF_NOTE_PAX_NAMESZ, 4),
+ sizeof(epp->ep_pax_flags));
+ break;
}
- (void)memcpy(&epp->ep_pax_flags,
- ndata + roundup(ELF_NOTE_PAX_NAMESZ, 4),
- sizeof(epp->ep_pax_flags));
- break;
+ goto bad;
case ELF_NOTE_TYPE_MARCH_TAG:
- /*
- * Copy the machine arch into the package.
- */
+ /* Copy the machine arch into the package. */
if (np->n_namesz == ELF_NOTE_MARCH_NAMESZ
&& memcmp(ndata, ELF_NOTE_MARCH_NAME,
ELF_NOTE_MARCH_NAMESZ) == 0) {
@@ -988,10 +966,10 @@ bad:
sizeof(epp->ep_machine_arch));
break;
}
+ goto bad;
+
case ELF_NOTE_TYPE_MCMODEL_TAG:
- /*
- * arch specific check for code model
- */
+ /* arch specific check for code model */
#ifdef ELF_MD_MCMODEL_CHECK
if (np->n_namesz == ELF_NOTE_MCMODEL_NAMESZ
&& memcmp(ndata, ELF_NOTE_MCMODEL_NAME,
@@ -1001,6 +979,7 @@ bad:
np->n_descsz);
break;
}
+ goto bad;
#endif
break;
@@ -1008,9 +987,19 @@ bad:
break;
default:
+bad:
#ifdef DIAGNOSTIC
- printf("%s: unknown note type %d\n", epp->ep_kname,
- np->n_type);
+ /* Ignore GNU tags */
+ if (np->n_namesz == ELF_NOTE_GNU_NAMESZ &&
+ memcmp(ndata, ELF_NOTE_GNU_NAME,
+ ELF_NOTE_GNU_NAMESZ) == 0)
+ break;
+
+ int ns = MIN(np->n_namesz, shp->sh_size - sizeof(*np));
+ printf("%s: Unknown elf note type %d: "
+ "[namesz=%d, descsz=%d name=%*.*s]\n",
+ epp->ep_kname, np->n_type, np->n_namesz,
+ np->n_descsz, ns, ns, ndata);
#endif
break;
}