From 16d0b426a32f9611278466ee4bb369241f55d74a Mon Sep 17 00:00:00 2001 From: Daichi Hirono Date: Thu, 10 Nov 2016 10:22:42 +0900 Subject: [PATCH] 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 --- sdcard/fuse.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/sdcard/fuse.cpp b/sdcard/fuse.cpp index d4c51fd74..9393846d3 100644 --- a/sdcard/fuse.cpp +++ b/sdcard/fuse.cpp @@ -1262,12 +1262,9 @@ static int handle_init(struct fuse* fuse, struct fuse_handler* handler, #if defined(FUSE_COMPAT_22_INIT_OUT_SIZE) /* FUSE_KERNEL_VERSION >= 23. */ - /* If the kernel only works on minor revs older than or equal to 22, - * then use the older structure size since this code only uses the 7.22 - * version of the structure. */ - if (req->minor <= 22) { - fuse_struct_size = FUSE_COMPAT_22_INIT_OUT_SIZE; - } + /* Since we return minor version 15, the kernel does not accept the latest + * fuse_init_out size. We need to use FUSE_COMPAT_22_INIT_OUT_SIZE always.*/ + fuse_struct_size = FUSE_COMPAT_22_INIT_OUT_SIZE; #endif out.major = FUSE_KERNEL_VERSION;