]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/3.18.95/kernfs-fix-regression-in-kernfs_fop_write-caused-by-wrong-type.patch
Linux 4.19.46
[thirdparty/kernel/stable-queue.git] / releases / 3.18.95 / kernfs-fix-regression-in-kernfs_fop_write-caused-by-wrong-type.patch
1 From ba87977a49913129962af8ac35b0e13e0fa4382d Mon Sep 17 00:00:00 2001
2 From: Ivan Vecera <ivecera@redhat.com>
3 Date: Fri, 19 Jan 2018 09:18:54 +0100
4 Subject: kernfs: fix regression in kernfs_fop_write caused by wrong type
5
6 From: Ivan Vecera <ivecera@redhat.com>
7
8 commit ba87977a49913129962af8ac35b0e13e0fa4382d upstream.
9
10 Commit b7ce40cff0b9 ("kernfs: cache atomic_write_len in
11 kernfs_open_file") changes type of local variable 'len' from ssize_t
12 to size_t. This change caused that the *ppos value is updated also
13 when the previous write callback failed.
14
15 Mentioned snippet:
16 ...
17 len = ops->write(...); <- return value can be negative
18 ...
19 if (len > 0) <- true here in this case
20 *ppos += len;
21 ...
22
23 Fixes: b7ce40cff0b9 ("kernfs: cache atomic_write_len in kernfs_open_file")
24 Acked-by: Tejun Heo <tj@kernel.org>
25 Signed-off-by: Ivan Vecera <ivecera@redhat.com>
26 Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
27 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
28
29 ---
30 fs/kernfs/file.c | 2 +-
31 1 file changed, 1 insertion(+), 1 deletion(-)
32
33 --- a/fs/kernfs/file.c
34 +++ b/fs/kernfs/file.c
35 @@ -267,7 +267,7 @@ static ssize_t kernfs_fop_write(struct f
36 {
37 struct kernfs_open_file *of = kernfs_of(file);
38 const struct kernfs_ops *ops;
39 - size_t len;
40 + ssize_t len;
41 char *buf;
42
43 if (of->atomic_write_len) {