From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1MTPzs-00044b-26 for mharc-grub-devel@gnu.org; Tue, 21 Jul 2009 20:47:52 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MTPzr-00044W-CB for grub-devel@gnu.org; Tue, 21 Jul 2009 20:47:51 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MTPzm-00044K-Uj for grub-devel@gnu.org; Tue, 21 Jul 2009 20:47:50 -0400 Received: from [199.232.76.173] (port=36304 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MTPzm-00044H-Ou for grub-devel@gnu.org; Tue, 21 Jul 2009 20:47:46 -0400 Received: from c60.cesmail.net ([216.154.195.49]:60303) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.60) (envelope-from ) id 1MTPzm-0008MX-8I for grub-devel@gnu.org; Tue, 21 Jul 2009 20:47:46 -0400 Received: from unknown (HELO smtprelay2.cesmail.net) ([192.168.1.112]) by c60.cesmail.net with ESMTP; 21 Jul 2009 20:47:45 -0400 Received: from mj.roinet.com (static-72-92-88-10.phlapa.fios.verizon.net [72.92.88.10]) by smtprelay2.cesmail.net (Postfix) with ESMTPSA id 06BDA34C6A for ; Tue, 21 Jul 2009 20:58:11 -0400 (EDT) To: grub-devel@gnu.org From: Pavel Roskin Date: Tue, 21 Jul 2009 20:47:43 -0400 Message-ID: <20090722004743.22269.56117.stgit@mj.roinet.com> User-Agent: StGit/0.15-rc1-9-gd8846 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Subject: [PATCH 1/3] Don't initialize module before grub_dl_add() succeeds X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Jul 2009 00:47:51 -0000 ChangeLog: * kern/dl.c (grub_dl_load_core): Call grub_dl_call_init() only after grub_dl_add() succeeds. Set mod->ref_count to 1 later to allow grub_dl_unload() to work. Original patch by Joe Auricchio --- kern/dl.c | 14 +++++--------- 1 files changed, 5 insertions(+), 9 deletions(-) diff --git a/kern/dl.c b/kern/dl.c index 78ebc1e..ebde547 100644 --- a/kern/dl.c +++ b/kern/dl.c @@ -539,14 +539,13 @@ grub_dl_load_core (void *addr, grub_size_t size) if (! mod) return 0; - mod->ref_count = 1; - grub_dprintf ("modules", "relocating to %p\n", mod); if (grub_dl_resolve_name (mod, e) || grub_dl_resolve_dependencies (mod, e) || grub_dl_load_segments (mod, e) || grub_dl_resolve_symbols (mod, e) - || grub_arch_dl_relocate_symbols (mod, e)) + || grub_arch_dl_relocate_symbols (mod, e) + || grub_dl_add (mod)) { mod->fini = 0; grub_dl_unload (mod); @@ -557,13 +556,10 @@ grub_dl_load_core (void *addr, grub_size_t size) grub_dprintf ("modules", "module name: %s\n", mod->name); grub_dprintf ("modules", "init function: %p\n", mod->init); - grub_dl_call_init (mod); - if (grub_dl_add (mod)) - { - grub_dl_unload (mod); - return 0; - } + mod->ref_count = 1; + + grub_dl_call_init (mod); return mod; }