summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2011-03-03 06:22:48 +0000
committerChris Johns <chrisj@rtems.org>2011-03-03 06:22:48 +0000
commit9a65833c1ea0471e5c39826fe117b9072007515a (patch)
treed22248d4dce4fd03d2bc994bc6d2094e80b905b2 /cpukit/libcsupport
parent2011-03-02 Ralf Corsépius <ralf.corsepius@rtems.org> (diff)
downloadrtems-9a65833c1ea0471e5c39826fe117b9072007515a.tar.bz2
2011-03-03 Chris Johns <chrisj@rtems.org>
* libcsupport/src/mknod.c, libfs/src/rfs/rtems-rfs-inode.c: PR 1749. Fix the incorrect handling of the file type in the mode value to reject invalid types as per the standard.
Diffstat (limited to 'cpukit/libcsupport')
-rw-r--r--cpukit/libcsupport/src/mknod.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/cpukit/libcsupport/src/mknod.c b/cpukit/libcsupport/src/mknod.c
index f4673b3275..29aff43c31 100644
--- a/cpukit/libcsupport/src/mknod.c
+++ b/cpukit/libcsupport/src/mknod.c
@@ -40,9 +40,21 @@ int mknod(
const char *name_start;
int result;
- if ( !(mode & (S_IFREG|S_IFCHR|S_IFBLK|S_IFIFO) ) )
- rtems_set_errno_and_return_minus_one( EINVAL );
-
+ /*
+ * The file type is field within the mode. Check we have a sane mode set.
+ */
+ switch (mode & S_IFMT)
+ {
+ case S_IFDIR:
+ case S_IFCHR:
+ case S_IFBLK:
+ case S_IFREG:
+ case S_IFIFO:
+ break;
+ default:
+ rtems_set_errno_and_return_minus_one( EINVAL );
+ }
+
rtems_filesystem_get_start_loc( pathname, &i, &temp_loc );
result = (*temp_loc.ops->evalformake_h)(