fs: enforce filetypes in open_file
authorH. Peter Anvin <hpa@zytor.com>
Wed, 23 Jun 2010 19:11:49 +0000 (12:11 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Wed, 23 Jun 2010 19:11:49 +0000 (12:11 -0700)
Enforce that the file type in open_file is a plain file.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
core/fs/fs.c

index 3ae12ec..c16f955 100644 (file)
@@ -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;
 }