From 65bae45b245d8d6dcf5d9a923a5bbd83a76c4f08 Mon Sep 17 00:00:00 2001 From: Stefan Reinauer Date: Mon, 5 Jun 2006 19:40:05 +0000 Subject: [PATCH] safe filedescriptors git-svn-id: svn://coreboot.org/openbios/openbios-devel@44 f158a5a8-5612-0410-a976-696ce0be7e32 --- arch/sparc32/aoutload.c | 1 + arch/sparc32/elfload.c | 2 ++ arch/sparc32/linux_load.c | 4 +++- arch/sparc32/loadfs.c | 9 +++++++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/arch/sparc32/aoutload.c b/arch/sparc32/aoutload.c index 625c390..4484c17 100644 --- a/arch/sparc32/aoutload.c +++ b/arch/sparc32/aoutload.c @@ -139,5 +139,6 @@ int aout_load(struct sys_info *info, const char *filename, const char *cmdline) retval = 0; out: + file_close(); return retval; } diff --git a/arch/sparc32/elfload.c b/arch/sparc32/elfload.c index 6a2c3ce..9553f26 100644 --- a/arch/sparc32/elfload.c +++ b/arch/sparc32/elfload.c @@ -127,6 +127,7 @@ static unsigned long process_image_notes(Elf_phdr *phdr, int phnum, } } out: + file_close(); if (buf) free(buf); return retval; @@ -402,6 +403,7 @@ int elf_load(struct sys_info *info, const char *filename, const char *cmdline) retval = 0; out: + file_close(); if (phdr) free(phdr); if (boot_notes) diff --git a/arch/sparc32/linux_load.c b/arch/sparc32/linux_load.c index 035dd3c..d64bd89 100644 --- a/arch/sparc32/linux_load.c +++ b/arch/sparc32/linux_load.c @@ -589,8 +589,10 @@ int linux_load(struct sys_info *info, const char *file, const char *cmdline) return -1; kern_addr = load_linux_header(&hdr); - if (kern_addr == 0) + if (kern_addr == 0) { + file_close(); return LOADER_NOT_SUPPORT; + } params = phys_to_virt(LINUX_PARAM_LOC); init_linux_params(params, &hdr); diff --git a/arch/sparc32/loadfs.c b/arch/sparc32/loadfs.c index 00fd093..d9bfbb4 100644 --- a/arch/sparc32/loadfs.c +++ b/arch/sparc32/loadfs.c @@ -13,6 +13,15 @@ int file_open(const char *filename) return load_fd>-1; } +void file_close(void) +{ + if(load_fd==-1) + return; + + close_io(load_fd); + load_fd=-1; +} + int lfile_read(void *buf, unsigned long len) { int ret = 0;