switchbrew / libnx

Library for Switch Homebrew
https://switchbrew.github.io/libnx/
ISC License
1.26k stars 167 forks source link

Socket crash #159

Closed WerWolv closed 5 years ago

WerWolv commented 6 years ago

If around 398MB of heap data got allocated after initializing the socket service using socketInitializeDefault() and then either socketExit() got called or the homebrew exits and tries to return to the hbmenu, the Switch crashes with an error code of 2168-0002 (Segmentation Fault).

Here's the source code of a PoC homebrew app to demonstrate the issue: https://gist.github.com/WerWolv98/2f57359e72634e33be7d64a07009aa35

It's using libnx version 1.3.2. The issue was NOT present on earlier versions (prior to 1.3.0)

yellows8 commented 6 years ago

What was the previous libnx version you tested, exactly? Did you try freeing that buffer? And you're sure the buffer was allocated successfully?

WerWolv commented 6 years ago

When compiling EdiZon with libnx 1.3.0-1, I don't have the issue. Sorry for that misinformation. Freeing the buffer doesn't help either. How can I check if it got allocated correctly? Also, is it possible to see the memory usage of a homebrew app?

Edit: Code with deallocation https://gist.github.com/WerWolv98/f67971f1340c08a466af75cc4d6aefcd

yellows8 commented 6 years ago

Did you use the same devkitA64 version for current/{previously working}?

Can you get a crash-report?

EDIT: "How can I check if it got allocated correctly?" std::nothrow "memory usage" mallinfo()

WerWolv commented 6 years ago

DevkitA64 are both on version r12-2 and libcurl is on 7.58.0-1 on the working setup and 7.61.0-2 on the not working one. This is the latest crash log: https://gist.github.com/WerWolv98/fc2d329ef5a6d1f0da1e42ef1c054603

Also I'm not sure if I'm doing this correctly but

    u8* data = new(std::nothrow) u8[1024*1024*398];
    (void)data;
    printf("%lx\n", mallinfo().uordblks);

returns 144101F8

yellows8 commented 6 years ago

Upload elf for that crash-report?

WerWolv commented 6 years ago

https://transfer.sh/Gw5mN/SocketCrash.elf

yellows8 commented 6 years ago

Are you sure that elf is from the same build as the crash-report?(.text offsets don't make sense)

WerWolv commented 6 years ago

Oh no sorry. Here is a zip with the latest elf and a crash report from it https://transfer.sh/kZURV/SocketCrash.zip

yellows8 commented 6 years ago

Still doesn't make sense, are you using latest atmo creport?

WerWolv commented 6 years ago

Pretty sure. I'm using tomGER's files right now

WerWolv commented 5 years ago

I'm sorry for this, I made a really stupid mistake in my code and misinterpreted it as a libnx error. The error was caused by me trying to delete a nullptr in a destructor. Issue being, this object is global and therefore deleted by libnx once the homebrew exits.