Skip to content

Commit 338ec07

Browse files
bsdimpgregkh
authored andcommitted
tools/nolibc: Fix S_ISxxx macros
[ Upstream commit 16f5cea ] The mode field has the type encoded as an value in a field, not as a bit mask. Mask the mode with S_IFMT instead of each type to test. Otherwise, false positives are possible: eg S_ISDIR will return true for block devices because S_IFDIR = 0040000 and S_IFBLK = 0060000 since mode is masked with S_IFDIR instead of S_IFMT. These macros now match the similar definitions in tools/include/uapi/linux/stat.h. Signed-off-by: Warner Losh <[email protected]> Signed-off-by: Willy Tarreau <[email protected]> Signed-off-by: Paul E. McKenney <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
1 parent 99dd344 commit 338ec07

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

tools/include/nolibc/types.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@
2626
#define S_IFSOCK 0140000
2727
#define S_IFMT 0170000
2828

29-
#define S_ISDIR(mode) (((mode) & S_IFDIR) == S_IFDIR)
30-
#define S_ISCHR(mode) (((mode) & S_IFCHR) == S_IFCHR)
31-
#define S_ISBLK(mode) (((mode) & S_IFBLK) == S_IFBLK)
32-
#define S_ISREG(mode) (((mode) & S_IFREG) == S_IFREG)
33-
#define S_ISFIFO(mode) (((mode) & S_IFIFO) == S_IFIFO)
34-
#define S_ISLNK(mode) (((mode) & S_IFLNK) == S_IFLNK)
35-
#define S_ISSOCK(mode) (((mode) & S_IFSOCK) == S_IFSOCK)
29+
#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
30+
#define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
31+
#define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK)
32+
#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
33+
#define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
34+
#define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)
35+
#define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
3636

3737
/* dirent types */
3838
#define DT_UNKNOWN 0x0

0 commit comments

Comments
 (0)