* kern/dl.c (grub_dl_load_file): Close file immediately when

we are done using it.
This commit is contained in:
davem 2009-04-13 23:03:50 +00:00
parent 6a4737e5d8
commit 1d7a72fd8c
2 changed files with 22 additions and 9 deletions

View File

@ -49,6 +49,9 @@
* util/hostdisk.c (make_device_name): Do not make any assumptions
about the length of drive names.
* kern/dl.c (grub_dl_load_file): Close file immediately when
we are done using it.
2009-04-12 David S. Miller <davem@davemloft.net>
* kern/misc.c (grub_ltoa): Fix cast when handling negative

View File

@ -584,7 +584,7 @@ grub_dl_load_core (void *addr, grub_size_t size)
grub_dl_t
grub_dl_load_file (const char *filename)
{
grub_file_t file;
grub_file_t file = NULL;
grub_ssize_t size;
void *core = 0;
grub_dl_t mod = 0;
@ -596,21 +596,31 @@ grub_dl_load_file (const char *filename)
size = grub_file_size (file);
core = grub_malloc (size);
if (! core)
goto failed;
{
grub_file_close (file);
return 0;
}
if (grub_file_read (file, core, size) != (int) size)
goto failed;
{
grub_file_close (file);
grub_free (core);
return 0;
}
/* We must close this before we try to process dependencies.
Some disk backends do not handle gracefully multiple concurrent
opens of the same device. */
grub_file_close (file);
mod = grub_dl_load_core (core, size);
if (! mod)
goto failed;
{
grub_free (core);
return 0;
}
mod->ref_count = 0;
failed:
grub_file_close (file);
grub_free (core);
return mod;
}