• Łukasz Szymczyk's avatar
    Reserve space on disk using fallocate · e1d5a6aa
    Łukasz Szymczyk authored
    There were crashes when android failed to extract
    zip archives due to out of free space on disk, with stacks like:
    
      #00 pc 00000000000156b0 /system/lib64/libc.so (memcpy+176)
      #01 pc 000000000002e5b8 /system/lib64/libandroidfw.so
      #02 pc 000000000002f488 /system/lib64/libandroidfw.so (ExtractToMemory+328)
      #03 pc 000000000002f5c8 /system/lib64/libandroidfw.so (ExtractEntryToFile+268)
      #04 pc 00000000000287d8 /system/lib64/libandroidfw.so (android::ZipFileRO::\
      uncompressEntry(void*, int) const+12)
    
    Space for the file is now allocated using fallocate rather than
    ftruncate, since ftruncate dont actually reserve space on disk. When writes
    to the mmaped pointer fails to be realized due to out of space SIGBUS
    is the result. With this change we make sure that there is space available
    before mmaping the pointer.
    
    Change-Id: Ic5e8c33dbe729edb57919dacff73811b34cc2dc2
    e1d5a6aa
zip_archive.cc 39.3 KB