Skip to content

Commit 65026da

Browse files
jroivashtejun
authored andcommitted
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 <[email protected]> Signed-off-by: Tejun Heo <[email protected]>
1 parent 95d3251 commit 65026da

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

kernel/cgroup/cgroup.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3681,6 +3681,9 @@ static ssize_t cgroup_file_write(struct kernfs_open_file *of, char *buf,
36813681
struct cgroup_subsys_state *css;
36823682
int ret;
36833683

3684+
if (!nbytes)
3685+
return 0;
3686+
36843687
/*
36853688
* If namespaces are delegation boundaries, disallow writes to
36863689
* files in an non-init namespace root from inside the namespace

0 commit comments

Comments
 (0)