[gdal-dev] Memory allocation issues on Android 11+ and scudo

Even Rouault even.rouault at spatialys.com
Mon Mar 28 06:24:02 PDT 2022


Hi,

didn't hear about Scudo before, but it seems it is a LLVM side project: 
https://llvm.org/docs/ScudoHardenedAllocator.html

So perhaps you could build and use it on Linux as shown in 
https://llvm.org/docs/ScudoHardenedAllocator.html#library

Besides a potential bug in the allocator, it might be that the S57 
driver has a memory allocation pattern that doesn't please Scudo.

Assuming that the problematic memory allocations are done using GDAL's 
VSIMalloc() (and not C++ new/delete), then have a look at the various 
#define that you can set at the top of port/cpl_vsisimple.cpp and can be 
used to trace memory allocations

// Uncomment to check consistent usage of VSIMalloc(), VSIRealloc(),
// VSICalloc(), VSIFree(), VSIStrdup().
// #define DEBUG_VSIMALLOC

// Uncomment to compute memory usage statistics.
// DEBUG_VSIMALLOC must also be defined.
// #define DEBUG_VSIMALLOC_STATS

// Uncomment to print every memory allocation or deallocation.
// DEBUG_VSIMALLOC must also be defined.
// #define DEBUG_VSIMALLOC_VERBOSE

// Number of bytes of the malloc/calloc/free that triggers a debug trace.
// Can be 0 for all allocs.
#define THRESHOLD_PRINT 10000

Even


Le 28/03/2022 à 14:58, Philippe Lelong a écrit :
>
> Hi,
>
>
> I am searching for this issue for months now, and cannot find any 
> solution.
>
>
> To make a long story short, we are using GDAL to decode OGR/S57 charts 
> for years now. We are facing numerous crashes under Android 11 and up 
> if and only if this Android 11 implementation is using SCUDO as a 
> memory allocator (if jemalloc is used no problems). We face this 
> problem with an old GDAL2.1.3 version, so we updated to GDAL 3.4.1 but 
> the issue is the same.
>
>
> What I can see is that the memory grows exponentially until no more 
> memory is available and crash, even on systems with huge memory 
> available while an Android device without SCUDO and very limited 
> memory (let's say 4Gb) in the same exact conditions, with the same 
> apk, runs perfectly. The logcat command show this:
>
> 03-28 12:40:34.255  4959  5005 W libc    : malloc(264196) failed: 
> returning null pointer
> 03-28 12:40:34.255  4959  5005 W libc    : malloc(264196) failed: 
> returning null pointer
> 03-28 12:40:34.256  4959  5005 W libc    : malloc(264196) failed: 
> returning null pointer
> 03-28 12:40:34.256  4959  5005 W libc    : malloc(264196) failed: 
> returning null pointer
> 03-28 12:40:34.612   630   630 D io_stats: !@ Write_top(KB): 
> kworker/u16:1(32583) 8
> 03-28 12:40:34.820  4959  5041 I scudo   : Scudo ERROR: out of memory 
> trying to allocate 64 bytes
> 03-28 12:40:34.820  4959  5042 I scudo   : Scudo ERROR: out of memory 
> trying to allocate 64 bytes
> 03-28 12:40:34.820  4959  5033 I scudo   : Scudo ERROR: out of memory 
> trying to allocate 64 bytes
> 03-28 12:40:34.820  4959  5031 I scudo   : Scudo ERROR: out of memory 
> trying to allocate 64 bytes
> 03-28 12:40:34.820  4959  5038 I scudo   : Scudo ERROR: out of memory 
> trying to allocate 64 bytes
> 03-28 12:40:34.820  4959  5040 I scudo   : Scudo ERROR: out of memory 
> trying to allocate 64 bytes
>
> and then crash
>
> Any help on how to debug and eventually fix this would be highly 
> appreciated.
>
> Best regards,
> Philippe from qtVlm development team.
>
>
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/gdal-dev

-- 
http://www.spatialys.com
My software is free, but my time generally not.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20220328/7b5f56e9/attachment.html>


More information about the gdal-dev mailing list