提交 61b1d102 编写于 作者: R Rich Felker

fix failure of fchmodat to report EOPNOTSUPP in the race path

in the case where a non-symlink file was replaced by a symlink during
the fchmodat operation with AT_SYMLINK_NOFOLLOW, mode change on the
new symlink target was successfully suppressed, but the error was not
reported. instead, fchmodat simply returned 0.
上级 2736eb6c
...@@ -29,8 +29,10 @@ int fchmodat(int fd, const char *path, mode_t mode, int flag) ...@@ -29,8 +29,10 @@ int fchmodat(int fd, const char *path, mode_t mode, int flag)
__procfdname(proc, fd2); __procfdname(proc, fd2);
ret = __syscall(SYS_fstatat, AT_FDCWD, proc, &st, 0); ret = __syscall(SYS_fstatat, AT_FDCWD, proc, &st, 0);
if (!ret && !S_ISLNK(st.st_mode)) if (!ret) {
ret = __syscall(SYS_fchmodat, AT_FDCWD, proc, mode); if (S_ISLNK(st.st_mode)) ret = -EOPNOTSUPP;
else ret = __syscall(SYS_fchmodat, AT_FDCWD, proc, mode);
}
__syscall(SYS_close, fd2); __syscall(SYS_close, fd2);
return __syscall_ret(ret); return __syscall_ret(ret);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册