Szerteszana²

grin agymenései
Archívum Június 2023

Crash and illegal instruction in Electron, Chromium and friends

2023-06-21 12:47 írta grin

This post is a - hopefully - searchable note about a very ugly effect, where Chrome, Chromium, and everything based on its Electron backend just crash in various ways, and one possible cause, with the suggestion what to do (spoiler: panic!).

I was updating my system, which is Debian/unstable, so there was a good chance that some library is broken, or the display driver, or the Xserver, or maybe libc6 herself, because various parts were just upgraded.

Funny that I rarely have the time to play games, but today I needed to stay up so decided to check Skyrim again (which runs flawlessly under Linux+Steam, mind you; how technology have advanced…), and had to realise that the Steam UI just crash. Beta too. Then Chromium crashed. Then Signal desktop client, and I started dot the t's, cross the i's and connect them with lines… I mean, I started to be suspicious about Chrome/Electron, and indeed, most of the other stuff worked. So, I started looking.

The effect

First, Steam crashed[1]:

kernel: traps: steamwebhelper[16276] trap invalid opcode ip:7f454b9db794 sp:7ffe71c9afa0 error:0 in libcef.so[7f45490ef000+7770000]
kernel: traps: Compositor[31480] trap invalid opcode ip:7fc275ddb794 sp:7fc269df70c0 error:0 in libcef.so[7fc2734ef000+7770000]
kernel: traps: steamwebhelper[31009] trap invalid opcode ip:7f81b37db794 sp:7ffcc9e43520 error:0 in libcef.so[7f81b0eef000+7770000]
kernel: traps: Compositor[3035] trap invalid opcode ip:7f92c03db794 sp:7f92b43f73f0 error:0 in libcef.so[7f92bdaef000+7770000]
kernel: traps: Compositor[3522] trap invalid opcode ip:7f92c03db794 sp:7f92b43f7290 error:0 in libcef.so[7f92bdaef000+7770000]
kernel: traps: Compositor[3680] trap invalid opcode ip:7f92c03db794 sp:7f92b43f7290 error:0 in libcef.so[7f92bdaef000+7770000]
kernel: traps: Compositor[3856] trap invalid opcode ip:7f92c03db794 sp:7f92b43f73f0 error:0 in libcef.so[7f92bdaef000+7770000]
kernel: traps: Compositor[4029] trap invalid opcode ip:7f92c03db794 sp:7f92b43f73f0 error:0 in libcef.so[7f92bdaef000+7770000]
Then Chromium followed soon:
kernel: traps: ThreadPoolForeg[11069] trap invalid opcode ip:55579b3e2cdd sp:7f9f021fb6b0 error:0
kernel: traps: ThreadPoolForeg[11067] trap invalid opcode ip:55579b3e2cdd sp:7f9f029fc6b0 error:0
error:0
kernel:  in chromium[555796f53000+a30b000]
kernel:  in chromium[555796f53000+a30b000]
kernel:  in chromium[555796f53000+a30b000]
kernel: 
kernel: 
kernel: 
Nice!

Fiddle-fiddle

The first was trying to disable the Chrome sandbox (CEF) since the net wisdom mentioned that Chrome sandbox is very picky about library updates, and may react with a crash to an unknown library call. Turned out that Steam already did that by itself since this was an already "worked around" bug (in clone3() call if anyone interested). Anyway, disabling CEF didn't help (since it was already partially disabled).

The next was upgrading libraries, since it may have been caused by any incompatible library, but after updating everything Electron depends it still crashed. So I have updated the display driver, since the previous update may have partially done that and the closed-source nvidia driver sometimes make funky things when the kernel driver mismatches the xwindow libs; restarted X, to no avail though. Still crashing. After that I was worried that any library may cause this since I have only upgraded some code instead of the whole system and some libs may become incompatible with some other libs. It took a while to upgrade the system, but the effect was the same.

I was worried that the machine needed a reboot, mainly because these modern mainboards have the ugly habit of not booting MBR in various circumstances and grub mentioned in a deadpan voice that "there was no BIOS partition in sda so the boot wasn't updated", which means that if BIOS is happy with sdb then the system boots, if not then the system needs magic. So I really don't want to reboot right now.

Then went to sleep.

You did what?

So I was in the general unhappy mood, since I really didn't want to reboot, and a lot of stuff uses Electron, and since the libs were upgraded I was thinking that it's either a lib I need to downgrade, but it's a bit hard to point to one among the 5000 present, or I have to reboot the machine which may or may not work. I was also doing my work, and tried to start something (some compiler, actually, but that's not important), which failed in a way suggested that a disk is full and the temp files were not possible to save. Sometimes happens (the stuff always fills any storage, no matter the size), and I started looking. No, the disk is not full. None of them, in fact. But… what is this?!

# df
Filesystem   1K-blocks       Used   Available   Use% Mounted on
tmpfs          6662240    6662240           0   100% /dev/shm

You may not know /dev/shm. It is a cute temporary storage in shared memory, kind of /tmp/, which is fast, comparable in size to the total memory and usually quite empty.

Well not today! It is in memory, so it gets forgotten throughout reboots, but betwen them it is fairly stable: if someone puts a file there then it shall remove when it's not needed anymore. If specific someones create bazillions of gigantic clutter and ignore to remove then the storage (along with some of the available memory) is gone. Full. To the brim.

And of course it was… [drum roll] Steam+Electron!

Steam likes to crash, not badly, but since it juggles with various black magic stuff (including lot of shell scripts, an electron based UI, a patched-to-death WINE called Proton, various Vulkan shader pre-, post- and nobody-know-why-compiling, apart from weird updates) it sometimes throws in the towel and faints. However, as it turned out, it leaves its stuff behind. And not small stuff, mind you. Hundreds of megabytes per crash. And it takes only 5-6 of those to fill the poor storage. And it did.

And from then on nothing which uses the storage (and smart enough to notice that it's full, I'm looking at you, Electron!) was able to operate, and have been crashed in various absolutely meaningless and non-deterministic way. Call that impossibe to debug.

I see the tough life of the maintainers of Electron based stuff: they get these invalid opcode error reports and it may have been caused by absolutely anything.

Cleared /dev/shm (everything older than 2 days, minus /dev/shm/.tmpfs). Everything works. Damn.

Summary

Chrome/Electron crashes, illegal instructions in libcef.so or in ThreadPoolForeg(round) caused by the temporary storage /dev/shm being full; filled by crashed Electron-based code (Steam).


1. the visuals of the crash log superimposed on the keyword list on the side is part of the dramatic effect! :-)

Apukám, a szuperhős

2023-06-06 11:01 írta grin

– Légy szíves told arrébb Gödöllőt! – kérte anyukám apukámat. – szeretnék egy könyvet kihozni.

Premontrei gimnázium, Gödöllő

De apukám épp számolt, és bizonyosan nem ér rá ilyen földhöz ragadt problémák megoldására, így segítőkészen Gödöllő külvárosát óvatosan felszedtem, és arrébb tettem (akkor még nem tudtam, hogy valószínűleg a Kastélypark közelébe mozgattam a fél Alvéget), hogy anyukám – feltehetően átlépve a Rákos-patak pici tavacskáját – odajusson a könyvespolchoz.

Természetesen a Gödöllőiekkel nem szúrunk ki, így utána visszatettem őket szépen a helyükre. Talán észre sem vették, maximum a buszvezetők csodálkozhattak, hogy az utcák egyszer csak… de aztán már megint nem. Nem került be az újságba, és a nyolcvanas évek tévéhíradója sem tett róla említést.

Amúgy mindig óvatosan jártam Gödöllő utcáit. Az ember igyekszik nem rálépni a házakra, de hát egy 8-9 éves láb már elég nagy, az utcák pedig parányiak, szinte lehetetlen úgy lépni, hogy a házakat elkerülje az ember. Persze csak zokniban lépünk rájuk, mert az puha, és nem tapad a pucér talphoz minden utca. Az kellemetlen, amikor az ember lábához minden odaragad aztán hurcolja magával a szomszédságot is! Nyilván apukám sem szerette, amikor átrendezem a várost, és a jól kidolgozott zoknis közlekedési módszernek köszönhetően a helyiek relatív biztonságban voltak.

De még ők sem látták azt, amit én láttam. A csöveket. Mindenfelé mentek, az utcák alatt, a házak felé, de még a réten is. Pici csövecskék a házaktól, bele a nagyobb csövekbe, majd a mégnagyobbakba, és közben időnként kicsi és nagy dobozok, nyilakkal meg körökkel! És színes ceruzás vonalak is, ami egy 8 éves számára teljesen logikus, hiszen minek legyen az embernek csöve, ha az nem színes?!

Persze én nem tudtam volna a csöveket odarajzolni nekik. Ez egy tényleg nagy város, sok-sok csővel. Azokat apukám rajzolta oda.

Persze nem úgy, ahogy te rajzolnád! Csak fogni egy ceruzát és firkálni! Ugyan! Ne nevettess, kac-kac!

Az én apukámnak ilyen nagy rajztáblája volt, és vonalzók voltak benne! Meg szögmérő is! Meg olyan, na, izék, azokat nem tudom mire valók, de azok is. Természetesen én is tudok vele rajzolni, mert apukám megmutatta, én pedig rajzoltam vele, mondjuk nem csöveket, hanem házat meg utcát, mert a csöveket nem csak úgy odacsapod! A csöveket ki kell számolni!

Ó, ezt te nem is tudod, persze, mert elfelejtettem mondani. Ne haragudj! A csövek a legfontosabbak!

A csövek még nem léteznek. Apukám tervezi őket.

A csövekben gáz megy. Földgáz. Hogy-hogy honnan, hát a földből, te gyagya! Mert ott is voltam már, kiskunakárhol, ahol a bólogató olajkutak is vannak (fúú, az is tök érdekes, meg nagy és büdös, és ott apukám legjobb barátja csinál csodákat); de persze nem mindegyik onnan jön, mert ott nincs olyan sok, de a többi meg messziről jön ilyen bazi csöveken! Nagyobb a cső mint én vagyok! És ha felmászol rá akkor a bácsik nevetgélnek és azt mondják, hogy ha a főnökük ezt meglátná akkor se—— … fenéken rúgna mindenkit, és nehogy leessek mert akkor el is fenekelnek.

Na és a gáz az ugye az, amivel anyukám is főz, meg ami a konvektorban fűt. Amúgy mivel gáz, nem lehet látni, csak érezni, hogy büdös (de apukám azt is elmondta, hogy a gáz nem is büdös, hanem egy iszonyú büdösséget fújnak bele[1], amivel egyszer megviccelték egy munkatársát akire mérgesek voltak, és egy majdnem üres fiolát bedobtak az autójába, és hónapokig „gázszag” volt még a környékén is, ezen nagyon sokat nevettünk, de azt hiszem hogy a munkatársa nevetése nem lehetett teljesen őszinte, bár én úgy képzeltem, hogy mérges volt de az én apukám mindenkinél erősebb volt, ezért nem verekedtek csak morogtak egymás felé, gondolom, mint a dühös kutyák).

De nem lehet csak úgy csöveket odatenni. Apukám elmagyarázta. Ha figyelsz, elmagyarázom neked, majdnem úgy, mintha ő mondta volna, már amennyire persze értettem, de majd ha nagy leszek, akkor én is fogom úgy tudni mint ő, és akkor majd gyere vissza és elmagyarázom jól!

Szóval te azt gondolod, hogy a csőbe belefújják a gázt, és az kijön a végén, de nem! A gáz ugyanazt csinálja, mintha folyékony lenne, mintha vizet öntenél a csövön át. Ó, te azt gondolod, hogy a víz is csak úgy folyik a csőben! De nem!

Laminal and turbulent gas flow

A cső fala ilyen recés, mint a beton, ami felkarcolja a térdemet. És ezekbe a recékbe beleakad a víznek, meg a gáznak a belseje, és lelassítja. De a gáz közepe nem ér hozzá, a széle meg igen, és elkezdenek az oldalán pici örvények születni! És az egész széle egy csomó kis örvény, ami lassítja a gázt! Amikor bemegy a csőbe, akkor jó erősen bele kell pumpálni (nagy nyomással, mint a porszívó amikor fordítva szereled össze és fújja a levegőt a csövön, mert az is gáz!), hogy amikor ezek az örvények lelassítják akkor is kijusson a másik oldalon. Vagy ilyesmi.

Texas TI-59

És apukám ezeket az örvényeket ki tudta számolni. Meg hogy milyen vastag a cső, és milyen vastag az örvény. Meg hogy áramlik benne a gáz. Meg hogy a gáz milyen gyors itt és amott, milyen a nyomása az elején meg a végén, és hogy mekkora cső kell az elején hogy a végén még lehessen vele főzni! Ilyen nagy képletekkel, meg a Texas számológéppel, aminek piros a kijelzője és szalag jön belőle, ha épp nem fogyott el.

A dobozok, amiket mondtam, azok meg a nyomást változtatják, hogy visszategyék, ami elfogyott, vagy éppen lecsökkentsék, mielőtt bemegy a házba, hogy ne repüljön el a gáztűzhelyről az edény vagy ne fújja ki az embereket az ablakon! A papíron ezek kicsik, de van olyan baazinagy meg egészen picike is.

És ezekből kijött, hogy melyik cső milyen vastag, meg hogy kanyarodik-e, meg hogy hol kell neki doboz. És hogy hogyan jut el mindenhova, onnan, ahol már van oda, ahol még nincs. Nyilván!

Egyre több cső volt a térképen, amin járkáltam a nagy szobában, és amiket időnként apukám felszedett, majd időnként visszapakolt. Amikor már nem fért rá több cső sehova, akkor készen volt a város, és a papírok elindultak azokhoz a bácsikhoz, akik a gödröket ásták a csöveknek, akik odavitték, hegesztették (nem szabad nézni! van nekik ilyen szemüvegük, de nekem adtak egy fekete üveglapot, azon át szabad), meg akik majd végig összerakják az egészet.

Amiből majd az emberek házaiba megy a gáz, amivel fűteni fognak télen, és főzni (akár nyáron is).

A rajzolt csövekből igazi csövek leszenek! Amit apukám odarajzolt.

Mert apukám mérnök!

Gervai István (1939-2020)


Etil-merkaptán, modern nevén Etántiol

Archívum Június 2023

Szerteszana²

grin agymenései