Változások az OpenBSD memória-kezelésében

Címkék

Theo de Raadt egy levelet küldött a misc@ listára, amelyben - a közelgő 3.8-as kiadásra való tekintettel - arra kérte a felhasználókat, hogy fokozott intenzitással teszteljék a -current-et. Az OpenBSD csapat olyan változtatásokat eszközölt az operációs rendszer memória-kezelésében (mmap, malloc, free), amely bizonyos alkalmazások használatát instabillá teszi.Theo szerint a változtatásoknak félelmetes előnyei vannak, de amíg néhány külső programban nem találnak meg és nem fixálnak néhány bugot, addig rizikót is hordoznak magukban. Szerinte néhány open source program minősége nem teszi lehetővé jelenleg, hogy ezekkel az új funkciókkal együtt működjön.



Theo azt várja, hogy az új malloc majd több programban is ``felfedez'' rejtett hibákat. Ő tudja, hogy az, ahogy a malloc-juk működik, az teljesen helyénvaló, a hibásan futó szoftverek a ``gyengék''. Arra kéri a felhasználókat, hogy segítsenek felfedezni és javítani ezeket a hibákat. Nem csak az OpenBSD felhasználók, hanem a többi felhasználó érdekében is. Példaként említette az X server és a X fb* bugjait.



Bővebben itt.

Hozzászólások

Nem kotekedeskeppen, de erdekes tag ez a Theo, minden interview-ban magabol kikelve mondja el hogy o _soha_ de _soha_ nem hasznalt Linuxot, meg ot az nem erdekli stb. Erre ebben az emlitett leveleben: "Our malloc implementation is a lot more resistant (than Linux) to" ...

Ez is jo: "I would bet money that the X fb* bug has crashed Linux (and other) X servers before."

Namost ha Linuxhoz hasonlitja az OpenBSD dolgait, akkor megis erdekli a dolog valamennyire? Jo, igaz, ahhoz nem kell Linuxot hasznalni hogy megnezze a forraskodjat :) Masreszt meg Linuxnak szigoruan veve nincs is malloc implementacioja, tekintve hogy a legtobb GNU/Linux disztrib GNU libc-t hasznal es abban a malloc ...

Most ez nem OpenBSD flame akart lenni (en is hasznalom) hanem inkabb Theo flame :)

Praktikusan tágranyílt szemekkel bambulok...

Mert ugye nem arról van szó, hogy összeomlanak a user-space szoftverek "csak úgy", hanem ez a malloc() implementáció szimplán azonnali SIGSEGV-el reagál az olyan disznóságokra, mint a memóriaterületen kívüli írás-olvasás illetve a felszabadítás utáni memóriahozzáférés, amely ténykedések ugye defaultból tiltva vannak a malloc() és free() manpage-ekben, de néhány programozó csak él ezekkel a gusztustalan módszerekkel.

Ráadásul az X-ben is előbányásztak így 3 ilyen hibát, az egyik már 10 év óta csücsült benn az Xlib-ben...

Úgyhogy nem történt semmi, csak az eddigi trehány munkák most bosszulják meg magukat. tartok attól, ha ezt az implementációt portolnák Linux alá is, ugyanígy elkezdenének összeomlani szoftverek, mert a programozójuk fifikásnak képzelte magát. Hát nem az volt.:-)))

Kernel malloc az nem tudom mi, ilyen syscall tudtommal nincs, legalabbis Linux kernelben. Olyan pl van hogy kmalloc() es hasonlok de semmi koze a user space-bol a libc szolgaltatasakent elerheto malloc()-hoz, max a nevuk hasonlo, de teljesen mas feladatra valo. A GNU libc altal implementalt malloc() fuggveny megvalostiasaban csak a brk/sbrk syscall-on erintkezik a kernellel, ami a process adat szegmensenek meretet allitja amugy. A GNU libc malloc() implementaciojaban mondjuk nem tudom azota volt-e valtozas, utoljara kb libc5 kornyeken neztem, de maga a Linux kernel tuti nem fog olyat csinalni hogy malloc syscall, I guess ilyen az OpenBSD-nek sincs, itt a cikkben is arrol volt szo hogy az OpenBSD libc-je az mmap-ot hasznalja fel. Vagy en ertettem rosszul?

amennyire én tudom a glibc (ie user-space-beli) malloc() amiről szó van ezt használja: http://gee.cs.oswego.edu/dl/html/malloc.html (lásd malloc/malloc.c), ennek értelmében pedig a brk()/sbrk() syscallok akkor kerülnek felhasználásra, ha egy adott méretnél kisebb helyet malloc()-olsz. ha nagyobbat, akkor az mmap() kerül meghívásra (a (belinkelt) doksi értelmében egyébként ez jóval lassabb).


a cikk értelmében egyébként azt hiszem arról beszél, hogy nem csak user-space de kernel-spacebeli változásokat is végrehajtottak.

a glibc-t természetesen a linuxos malloc() implementációra értettem. obsd féle libc-s malloc() nem tudom mit használ, bár theo írásának értelmében a brk()/sbrk()-t eddig, innentől pedig az mmap()-ot.


kíváncsi lennék egyébként a linuxon használt glibc-ben fognak e hasonlót implementálni. avval, hogy "törjön a gány kód" pedig egyetértek, még akkor is ha akkora projektekről van szó mint az X.

Nagyon örülök, hogy végre a malloc is mmap-et használ, mert így végre normálisabb heap randomizálás került OpenBSD-be. Az eddigi 0-4 bit entrópia helyett 10-16 bit körül lehet, meg kellene pontosan mérni.

Jo, de en nem is ezt a kerdest vitattam, hanem azt hogy mi az a "kernel malloc" amitre reagaltam hogy olyan nincs.

"Rosszul tudom, hogy a kernel malloc, meg a libc malloc az két dolog? :)". Mi az a kernel malloc? Erre mondtam hogy malloc() az Linux eseteben a libc-ben van termeszetesen implementalva, a kernelnek nincs olyan syscall-ja hogy malloc ...