Bug Summary

File:src/stat/fchmodat.c
Location:line 21, column 6
Description:The left operand of '&' is a garbage value

Annotated Source Code

1#include <sys/stat.h>
2#include <fcntl.h>
3#include <errno(*__errno_location()).h>
4#include "syscall.h"
5
6void __procfdname(char *, unsigned);
7
8int fchmodat(int fd, const char *path, mode_t mode, int flag)
9{
10 if (!flag) return syscall(SYS_fchmodat, fd, path, mode, flag)__syscall_ret(__syscall4(333,((long) (fd)),((long) (path)),((
long) (mode)),((long) (flag))))
;
1
Assuming 'flag' is not equal to 0
2
Taking false branch
11
12 if (flag != AT_SYMLINK_NOFOLLOW0x100)
3
Assuming 'flag' is equal to 256
4
Taking false branch
13 return __syscall_ret(-EINVAL22);
14
15 struct stat st;
16 int ret, fd2;
17 char proc[15+3*sizeof(int)];
18
19 if ((ret = __syscall(SYS_fstatat, fd, path, &st, flag)__syscall4(327,((long) (fd)),((long) (path)),((long) (&st
)),((long) (flag)))
))
5
Assuming 'ret' is zero
6
Taking false branch
20 return __syscall_ret(ret);
21 if (S_ISLNK(st.st_mode)(((st.st_mode) & 0170000) == 0120000))
7
Within the expansion of the macro 'S_ISLNK':
a
The left operand of '&' is a garbage value
22 return __syscall_ret(-EOPNOTSUPP95);
23
24 if ((fd2 = __syscall(SYS_openat, fd, path, O_RDONLY|O_PATH|O_NOFOLLOW|O_NOCTTY|O_CLOEXEC)__syscall3(322,((long) (fd)),((long) (path)),((long) (00|010000000
|0100000|0400|02000000)))
) < 0) {
25 if (fd2 == -ELOOP40)
26 return __syscall_ret(-EOPNOTSUPP95);
27 return __syscall_ret(fd2);
28 }
29
30 __procfdname(proc, fd2);
31 ret = __syscall(SYS_fstatat, AT_FDCWD, proc, &st, 0)__syscall4(327,((long) ((-100))),((long) (proc)),((long) (&
st)),((long) (0)))
;
32 if (!ret) {
33 if (S_ISLNK(st.st_mode)(((st.st_mode) & 0170000) == 0120000)) ret = -EOPNOTSUPP95;
34 else ret = __syscall(SYS_fchmodat, AT_FDCWD, proc, mode)__syscall3(333,((long) ((-100))),((long) (proc)),((long) (mode
)))
;
35 }
36
37 __syscall(SYS_close, fd2)__syscall1(6,((long) (fd2)));
38 return __syscall_ret(ret);
39}