diff options
author | Jouni Roivas <jouni.roivas@tuxera.com> | 2020-09-30 18:42:42 +0200 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2020-09-30 19:52:06 +0200 |
commit | 65026da59cda16baf6c3e98b74ec439f366e468f (patch) | |
tree | af1f3541bd29d65b1219a383c8c184de10749f55 /kernel/cgroup | |
parent | cgroup: remove redundant kernfs_activate in cgroup_setup_root() (diff) | |
download | linux-65026da59cda16baf6c3e98b74ec439f366e468f.tar.xz linux-65026da59cda16baf6c3e98b74ec439f366e468f.zip |
cgroup: Zero sized write should be no-op
Do not report failure on zero sized writes, and handle them as no-op.
There's issues for example in case of writev() when there's iovec
containing zero buffer as a first one. It's expected writev() on below
example to successfully perform the write to specified writable cgroup
file expecting integer value, and to return 2. For now it's returning
value -1, and skipping the write:
int writetest(int fd) {
const char *buf1 = "";
const char *buf2 = "1\n";
struct iovec iov[2] = {
{ .iov_base = (void*)buf1, .iov_len = 0 },
{ .iov_base = (void*)buf2, .iov_len = 2 }
};
return writev(fd, iov, 2);
}
This patch fixes the issue by checking if there's nothing to write,
and handling the write as no-op by just returning 0.
Signed-off-by: Jouni Roivas <jouni.roivas@tuxera.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'kernel/cgroup')
-rw-r--r-- | kernel/cgroup/cgroup.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index 809b13588124..e41c21819ba0 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -3681,6 +3681,9 @@ static ssize_t cgroup_file_write(struct kernfs_open_file *of, char *buf, struct cgroup_subsys_state *css; int ret; + if (!nbytes) + return 0; + /* * If namespaces are delegation boundaries, disallow writes to * files in an non-init namespace root from inside the namespace |