Module Name: src Committed By: maxv Date: Wed Jul 16 13:26:33 UTC 2014
Modified Files: src/sys/kern: subr_kobj.c Log Message: Keep setting 'error' as appropriate (even if this place is broken enough to crash in many other ways...) To generate a diff of this commit: cvs rdiff -u -r1.49 -r1.50 src/sys/kern/subr_kobj.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/subr_kobj.c diff -u src/sys/kern/subr_kobj.c:1.49 src/sys/kern/subr_kobj.c:1.50 --- src/sys/kern/subr_kobj.c:1.49 Wed Jul 9 05:50:51 2014 +++ src/sys/kern/subr_kobj.c Wed Jul 16 13:26:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_kobj.c,v 1.49 2014/07/09 05:50:51 maxv Exp $ */ +/* $NetBSD: subr_kobj.c,v 1.50 2014/07/16 13:26:33 maxv Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -63,7 +63,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: subr_kobj.c,v 1.49 2014/07/09 05:50:51 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_kobj.c,v 1.50 2014/07/16 13:26:33 maxv Exp $"); #include "opt_modular.h" @@ -173,7 +173,6 @@ kobj_load(kobj_t ko) KASSERT(ko->ko_source != NULL); shdr = NULL; - mapsize = 0; error = 0; hdr = NULL; @@ -361,8 +360,7 @@ kobj_load(kobj_t ko) error = kobj_renamespace(ko->ko_symtab, ko->ko_symcnt, &ko->ko_strtab, &ko->ko_strtabsz); if (error != 0) { - kobj_error(ko, "renamespace failed %d", - error); + kobj_error(ko, "renamespace failed %d", error); goto out; } @@ -393,6 +391,7 @@ kobj_load(kobj_t ko) */ alignmask = 0; mapbase = 0; + mapsize = 0; for (i = 0; i < hdr->e_shnum; i++) { switch (shdr[i].sh_type) { case SHT_PROGBITS: @@ -414,6 +413,7 @@ kobj_load(kobj_t ko) */ if (mapsize == 0) { kobj_error(ko, "no text/data/bss"); + error = ENOEXEC; goto out; } if (ko->ko_type == KT_MEMORY) { @@ -449,6 +449,7 @@ kobj_load(kobj_t ko) if (((vaddr_t)addr & alignmask) != 0) { kobj_error(ko, "section %d not aligned", i); + error = ENOEXEC; goto out; } } else { @@ -463,16 +464,15 @@ kobj_load(kobj_t ko) error = ko->ko_read(ko, &addr, shdr[i].sh_size, shdr[i].sh_offset, false); if (error != 0) { - kobj_error(ko, "read failed %d", - error); + kobj_error(ko, "read failed %d", error); goto out; } } else if (ko->ko_type == KT_MEMORY && shdr[i].sh_size != 0) { - kobj_error(ko, "non-loadable BSS " + kobj_error(ko, "non-loadable BSS " "section in pre-loaded module"); - error = EINVAL; - goto out; + error = ENOEXEC; + goto out; } else { ko->ko_progtab[pb].name = "<<NOBITS>>"; memset(addr, 0, shdr[i].sh_size); @@ -531,8 +531,7 @@ kobj_load(kobj_t ko) shdr[i].sh_size, shdr[i].sh_offset, true); if (error != 0) { - kobj_error(ko, "read failed %d", - error); + kobj_error(ko, "read failed %d", error); goto out; } }