Module Name: src Committed By: ad Date: Sat May 23 15:13:57 UTC 2009
Modified Files: src/sys/kern: subr_kobj.c Log Message: Fix a crash observed when trying to load a corrupted ELF image. To generate a diff of this commit: cvs rdiff -u -r1.34 -r1.35 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.34 src/sys/kern/subr_kobj.c:1.35 --- src/sys/kern/subr_kobj.c:1.34 Fri Feb 13 22:41:04 2009 +++ src/sys/kern/subr_kobj.c Sat May 23 15:13:57 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_kobj.c,v 1.34 2009/02/13 22:41:04 apb Exp $ */ +/* $NetBSD: subr_kobj.c,v 1.35 2009/05/23 15:13:57 ad 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.34 2009/02/13 22:41:04 apb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_kobj.c,v 1.35 2009/05/23 15:13:57 ad Exp $"); #include "opt_modular.h" @@ -807,25 +807,25 @@ { int i; - for (i = 0; i < ko->ko_nrel; i++) { - if (ko->ko_reltab[i].rel) { - kobj_free(ko, ko->ko_reltab[i].rel, - ko->ko_reltab[i].size); - } - } - for (i = 0; i < ko->ko_nrela; i++) { - if (ko->ko_relatab[i].rela) { - kobj_free(ko, ko->ko_relatab[i].rela, - ko->ko_relatab[i].size); - } - } if (ko->ko_reltab != NULL) { + for (i = 0; i < ko->ko_nrel; i++) { + if (ko->ko_reltab[i].rel) { + kobj_free(ko, ko->ko_reltab[i].rel, + ko->ko_reltab[i].size); + } + } kobj_free(ko, ko->ko_reltab, ko->ko_nrel * sizeof(*ko->ko_reltab)); ko->ko_reltab = NULL; ko->ko_nrel = 0; } if (ko->ko_relatab != NULL) { + for (i = 0; i < ko->ko_nrela; i++) { + if (ko->ko_relatab[i].rela) { + kobj_free(ko, ko->ko_relatab[i].rela, + ko->ko_relatab[i].size); + } + } kobj_free(ko, ko->ko_relatab, ko->ko_nrela * sizeof(*ko->ko_relatab)); ko->ko_relatab = NULL;