aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlegezywzh <94814730+legezywzh@users.noreply.github.com>2024-04-16 23:23:57 +0800
committerGitHub <noreply@github.com>2024-04-16 17:23:57 +0200
commit080077369e7fa740da7d9813e6766c308e4e555c (patch)
tree5dabf1f28a8ae1b8a6d4a9c070e1d80d3736bf94
parent20de66dc898002b9315192a5095a3dcd4f6ec248 (diff)
downloadlibfuse-080077369e7fa740da7d9813e6766c308e4e555c.tar.gz
fix max_write update in do_init() (#926)
If user updates conn->max_write in fuse_lowlevel_ops' init() method, do_init() will miss the "conn.max_write > bufsize - FUSE_BUFFER_HEADER_SIZE" judgment, and ->init method will be called after it, which obviously is a bug. Signed-off-by: Xiaoguang Wang <lege.wang@jaguarmicro.com> Co-authored-by: Xiaoguang Wang <lege.wang@jaguarmicro.com>
-rw-r--r--lib/fuse_lowlevel.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c
index d9844b0..5129a3b 100644
--- a/lib/fuse_lowlevel.c
+++ b/lib/fuse_lowlevel.c
@@ -2079,13 +2079,13 @@ void do_init(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
}
se->bufsize = bufsize;
- if (se->conn.max_write > bufsize - FUSE_BUFFER_HEADER_SIZE)
- se->conn.max_write = bufsize - FUSE_BUFFER_HEADER_SIZE;
-
se->got_init = 1;
if (se->op.init)
se->op.init(se->userdata, &se->conn);
+ if (se->conn.max_write > bufsize - FUSE_BUFFER_HEADER_SIZE)
+ se->conn.max_write = bufsize - FUSE_BUFFER_HEADER_SIZE;
+
if (se->conn.want & (~se->conn.capable)) {
fuse_log(FUSE_LOG_ERR, "fuse: error: filesystem requested capabilities "
"0x%x that are not supported by kernel, aborting.\n",