fix max_write update in do_init() (#926)
authorlegezywzh <94814730+legezywzh@users.noreply.github.com>
Tue, 16 Apr 2024 15:23:57 +0000 (23:23 +0800)
committerGitHub <noreply@github.com>
Tue, 16 Apr 2024 15:23:57 +0000 (17:23 +0200)
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>
lib/fuse_lowlevel.c

index d9844b01dbc5a1203fa801ba5323f4197f2efd4d..5129a3b21b386feb6b3c94f9c93caaede29a3c30 100644 (file)
@@ -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",