diff options
author | legezywzh <94814730+legezywzh@users.noreply.github.com> | 2024-04-16 23:23:57 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-16 17:23:57 +0200 |
commit | 080077369e7fa740da7d9813e6766c308e4e555c (patch) | |
tree | 5dabf1f28a8ae1b8a6d4a9c070e1d80d3736bf94 /lib/fuse_lowlevel.c | |
parent | 20de66dc898002b9315192a5095a3dcd4f6ec248 (diff) | |
download | libfuse-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>
Diffstat (limited to 'lib/fuse_lowlevel.c')
-rw-r--r-- | lib/fuse_lowlevel.c | 6 |
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", |