diff options
| author | Daichi Hirono <hirono@google.com> | 2016-11-10 10:22:42 +0900 |
|---|---|---|
| committer | Daichi Hirono <hirono@google.com> | 2016-11-16 01:58:28 +0000 |
| commit | 16d0b426a32f9611278466ee4bb369241f55d74a (patch) | |
| tree | 40f4afeb73ad93b031dc9c2be64d50a76bdc64ce /sdcard | |
| parent | b5ce6f02dd11b42c03884dd9531c6c8a80bcecda (diff) | |
| download | system_core-16d0b426a32f9611278466ee4bb369241f55d74a.tar.gz system_core-16d0b426a32f9611278466ee4bb369241f55d74a.tar.bz2 system_core-16d0b426a32f9611278466ee4bb369241f55d74a.zip | |
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
Diffstat (limited to 'sdcard')
| -rw-r--r-- | sdcard/fuse.cpp | 9 |
1 files 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; |
