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; }