summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJouni Roivas <jouni.roivas@tuxera.com>2020-09-30 19:42:42 +0300
committerTejun Heo <tj@kernel.org>2020-09-30 20:52:06 +0300
commit65026da59cda16baf6c3e98b74ec439f366e468f (patch)
treeaf1f3541bd29d65b1219a383c8c184de10749f55
parent95d325185c06cbef1c5be97825265a7129a03512 (diff)
downloadlinux-65026da59cda16baf6c3e98b74ec439f366e468f.tar.xz
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>
-rw-r--r--kernel/cgroup/cgroup.c3
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