Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 16d0b426 authored by Daichi Hirono's avatar Daichi Hirono
Browse files

Use FUSE_COMPAT_22_INIT_OUT_SIZE always as the resopnse size of FUSE_INIT.

We return the minor version number 15 to FUSE_INIT since we don't handle
BATCH_FORGET. Thus the kernel does not accept the latest size of
fuse_init_out. Instead we need to use FUSE_COMPAT_22_INIT_OUT_SIZE.

Previously the code unintentionally used FUSE_COMPAT_22_INIT_OUT_SIZE always
because we override the minor version out->minor to 15. Because sdcard.c shares
the buffer for |in| and |out|, it overrides the version number of in->minnor as
well.

The if closure in the previous code "if (in->minor <= 22)" was always true. The
CL removes the if closure to explicitly use FUSE_COMPAT_22_INIT_OUT_SIZE always.

Bug: 32779923
Test: Manually boot Android and check if the storage shows up in Settings app.
Change-Id: Ibbc50da7fb82be148acfc5f1a3d46fefbe211f9d
parent b5ce6f02
Loading
Loading
Loading
Loading
+3 −6
Original line number Original line Diff line number Diff line
@@ -1262,12 +1262,9 @@ static int handle_init(struct fuse* fuse, struct fuse_handler* handler,
#if defined(FUSE_COMPAT_22_INIT_OUT_SIZE)
#if defined(FUSE_COMPAT_22_INIT_OUT_SIZE)
    /* FUSE_KERNEL_VERSION >= 23. */
    /* FUSE_KERNEL_VERSION >= 23. */


    /* If the kernel only works on minor revs older than or equal to 22,
    /* Since we return minor version 15, the kernel does not accept the latest
     * then use the older structure size since this code only uses the 7.22
     * fuse_init_out size. We need to use FUSE_COMPAT_22_INIT_OUT_SIZE always.*/
     * version of the structure. */
    if (req->minor <= 22) {
    fuse_struct_size = FUSE_COMPAT_22_INIT_OUT_SIZE;
    fuse_struct_size = FUSE_COMPAT_22_INIT_OUT_SIZE;
    }
#endif
#endif


    out.major = FUSE_KERNEL_VERSION;
    out.major = FUSE_KERNEL_VERSION;