summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs/src/rfs/rtems-rfs-inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libfs/src/rfs/rtems-rfs-inode.c')
-rw-r--r--cpukit/libfs/src/rfs/rtems-rfs-inode.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/cpukit/libfs/src/rfs/rtems-rfs-inode.c b/cpukit/libfs/src/rfs/rtems-rfs-inode.c
index 608048e84b..ab3f4b7e65 100644
--- a/cpukit/libfs/src/rfs/rtems-rfs-inode.c
+++ b/cpukit/libfs/src/rfs/rtems-rfs-inode.c
@@ -211,6 +211,21 @@ rtems_rfs_inode_create (rtems_rfs_file_system* fs,
printf (" type:%s mode:%04x (%03o)\n", type, mode, mode & ((1 << 10) - 1));
}
+ /*
+ * The file type is field within the mode. Check we have a sane mode set.
+ */
+ switch (mode & RTEMS_RFS_S_IFMT)
+ {
+ case RTEMS_RFS_S_IFDIR:
+ case RTEMS_RFS_S_IFCHR:
+ case RTEMS_RFS_S_IFBLK:
+ case RTEMS_RFS_S_IFREG:
+ case RTEMS_RFS_S_IFLNK:
+ break;
+ default:
+ return EINVAL;
+ }
+
rc = rtems_rfs_inode_alloc (fs, parent, ino);
if (rc > 0)
return rc;