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

Reply via email to