Conversation

It's _FORTIFY_SOURCE. I think that particular symbol is actually something I landed upstream. Bionic is both forwards and backwards compatible (unlike glibc) by versioning symbols based on target API level. Maybe the library was built with a different target API than the app?
1
2
That's fascinating :O However I built this library myself, from the same cmake build that built the rest of the apk so's, and UBSAN definitely should not be on. I'm not familiar with FORTIFY_SOURCE… :(
2
_FORTIFY_SOURCE uses __builtin_object_size to do bounds checking for writes (in glibc) or both reads and writes (in Bionic) based on compiler detection of object sizes. I think you have some kind of issue where the code is being built for a newer API than you're using it with.
2
2
I'm building for min sdk 21 target sdk 26, which I should go back and double check but I believe is the recommended numbers for the hardware platform I'm targeting. I haven't upgraded the ndk in a while, I'll try that. Thanks.
1
It's a security feature. It generally hardly adds any overhead since the detected size is always a compile-time constant and if it can't detect one at compile-time it doesn't use it. Generally only enabled when optimization is enabled since it depends on that to detect the sizes.
2
1
So basically, the way Bionic is supposed to work is that it has proper version checks for all newly added stuff and has versioned symbol export lists for the NDK. It hides symbols for newer version for an app that's not supposed to see them. Presumably why the symbol isn't there.
1
Show replies