Glibc 2.41 breaks loading fmodstudio libraries in standalone Linux builds

I’m discovering this issue suddenly after getting it reported on a game I recently released, with users no longer able to ‘launch’ the game. Basically on launch all the FMOD libraries fail to load, and subsequently put the game into a bad state.

Unable to preload the following plugins:
libfmod.so
libfmodL.so
libfmodstudio.so

DllNotFoundException: Unable to load DLL ‘fmodstudio’: The specified module could not be found.
at FMOD.Memory.GetStats (System.Int32& currentalloced, System.Int32& maxalloced, System.Boolean blocking) [0x00000] in <00000000000000000000000000000000>:0
at FMODUnity.RuntimeUtils.EnforceLibraryOrder () [0x00000] in <00000000000000000000000000000000>:0
at FMODUnity.StudioListener.OnEnable () [0x00000] in <00000000000000000000000000000000>:0

This appears to be directly related to the new glibc update which has broken backwards compatibility on a rather big scale, (it’s broken Portal 2, CS2GO, Celeste, Discord on Linux for example)

In the Celeste Steam forum, it was realized that running execstack -c on the fmod libraries would allow the game to run correctly again. I tried it on my own game and achieved similar success.

There’s a bug report for glibc discussing the issue, FMOD is mentioned there.

I uh, am mostly posting this for awareness. I have NO IDEA what the ‘correct’ solution here is. I am using Unity 2019 + FMOD 2.01.15 for this project, so I’m unclear exactly on if this is a thing I need to fix, FMOD needs to fix, Unity needs to fix, or glibc needs to break down and add compatibility for again. I only know execstack -c on the fmod linux libraries solves the problem, but I don’t know if that introduces possible other problems either.

Thanks for bringing this to our attention.

With the release of glibc 2.41, many old software packages are failing to load. The changes from glibc were to plug a security hole with dynamic libraries that mark themselves as requiring an executable stack. FMOD libraries from 2.02.00 and newer correctly mark themselves as not requiring an executable stack and should be immune from this issue.

For version of FMOD from 2.01.xx and older, they are marked as needing an executable stack. Thankfully the code has never required this functionality, and it was enabled implicitly by our compiler. This means it’s safe to use execstack -c fmod.so and execstack -c fmodstudio.so to clear the executable stack flag from our binaries.

Anyone experiencing this issue going forward, whether that is game developers using FMOD or players unable to play their games that use FMOD, we recommend using execstack -c on the FMOD libraries to resolve this issue.

All currently maintained versions of FMOD should work fine out-of-the-box, if anyone experiences otherwise, please let us know.

1 Like

THANK YOU @mathew for getting back to me on this, giving the breakdown, and confirming using execstack should be safe. I was about to do that in an update for my Linux build and just cross my fingers, but it’s significantly more assuring now to know it should be cool.