diff options
author | H. Peter Anvin <hpa@zytor.com> | 2010-06-23 12:11:49 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2010-06-23 12:11:49 -0700 |
commit | 3ee5120d0795b361c3548e9bb13cadf33802f73a (patch) | |
tree | fda95014f0c23eb55fba504012e9a1155bb6e901 /core | |
parent | f91320f6834ad7f00ff827531780462965ac4acb (diff) | |
download | syslinux-3ee5120d0795b361c3548e9bb13cadf33802f73a.tar.gz |
fs: enforce filetypes in open_file
Enforce that the file type in open_file is a plain file.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'core')
-rw-r--r-- | core/fs/fs.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/core/fs/fs.c b/core/fs/fs.c index 3ae12ec9..c16f9550 100644 --- a/core/fs/fs.c +++ b/core/fs/fs.c @@ -330,12 +330,20 @@ int open_file(const char *name, struct com32_filedata *filedata) mangle_name(mangled_name, name); rv = searchdir(mangled_name); - if (rv >= 0) { - file = handle_to_file(rv); - filedata->size = file->inode->size; - filedata->blocklg2 = SECTOR_SHIFT(file->fs); - filedata->handle = rv; + if (rv < 0) + return rv; + + file = handle_to_file(rv); + + if (file->inode->mode != DT_REG) { + _close_file(file); + return -1; } + + filedata->size = file->inode->size; + filedata->blocklg2 = SECTOR_SHIFT(file->fs); + filedata->handle = rv; + return rv; } |