Commit 6663cae7 authored by Stanislav Kinsburskiy's avatar Stanislav Kinsburskiy Committed by Pavel Emelyanov

files: check fd flags after restore

System call sys_fcntl() in _some_ kernels can silently drop some flags during
set and return success code.
This patch adds double check, that all the fd flags were really set.
Signed-off-by: 's avatarStanislav Kinsburskiy <skinsbursky@virtuozzo.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 8b04551c
...@@ -736,6 +736,17 @@ int set_fd_flags(int fd, int flags) ...@@ -736,6 +736,17 @@ int set_fd_flags(int fd, int flags)
ret = fcntl(fd, F_SETFL, flags); ret = fcntl(fd, F_SETFL, flags);
if (ret < 0) if (ret < 0)
goto err; goto err;
/* Let's check, that now actual flags contains those we need */
ret = fcntl(fd, F_GETFL, 0);
if (ret < 0)
goto err;
if (ret != flags) {
pr_err("fcntl call on fd %d (flags %#o) succeeded, "
"but some flags were dropped: %#o\n", fd, flags, ret);
return -1;
}
return 0; return 0;
err: err:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment