A PVS-Studio statikus forráskód-elemező gyártója a FreeBSD kernelt elemezte

 ( trey | 2016. február 19., péntek - 12:00 )

FreeBSD vs. PVS

A FreeBSD projekt számolt be arról, hogy Svyatoslav Razmyslov, a PVS-Studio statikus forráskód-elemző szoftver mögött álló csapat egyik tagja egy cikket tett elérhetővé a FreeBSD kernel ellenőrzéséről. A cikkben számos olyan problémára mutatnak rá, amelyet a FreeBSD fejlesztőknek érdemes lenne szemügyre venniük és alkalmasint javítaniuk. A FreeBSD fejlesztők megkapták az elemzés nyomán született teljes warning listát, így amellett, hogy az elemző szoftver gyártója az elemzéssel reklámhoz jutott, a FreeBSD projekt is profitálhat belőle.

A cikk elérhető itt.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

az most komolyan egy darth vader egyszarvú? :D És az ördög van a jó oldalon?

Mindig az ördög van a jó oldalon (és nyilván az itt most nem is szereplő pingvin a rosszon). ;-)

Hű basszus, vannak benne meredek dolgok.

Nagyon beindultak a pvs csapatnál, nem először látok ilyen elemzést tőlük. A programot viszont nem ismerem. Mennyira tűnik korrektnek?


"Belépés díjtalan, kilépés bizonytalan."
"Vajon mit várok a sorstól, ha hányok az édestől, és izzadok a sóstól."

Nem néztem a programot, de a teljes listában elég sok a fals pozitív a FreeBSD-s visszajelzések alapján. Ennek ellenére érthetetlen, hogy a clang és gcc, meg a coverity (amivel szintén ellenőrzik folyamatosan a forráskódot) miért nem szúrt ki olyan meredek dolgokat, minthogy a kernel IPSEC kódjának PFKEYv2 feldolgozó függvényében olyan ellenőrzés van, amely mindig hamis eredményt ad... (vagy ha más is jelezte ezt, akkor miért nem javították?)


int
key_parse(struct mbuf *m, struct socket *so)
{
[...]
        if ((m->m_flags & M_PKTHDR) == 0 ||
            m->m_pkthdr.len != m->m_pkthdr.len)
                ipseclog((LOG_DEBUG, "%s: invalid message length.\n",__func__));
                PFKEYSTAT_INC(out_invlen);
                error = EINVAL;
                goto senderror;
        }

De van sok más szörnyűség is. Random seed általi tömb túlírás és más érdekességek. A blog post bemutat néhányat, érdemes elolvasni.

Köszi, megnézem.

Amit írtál példát, hibát nem ad, inkább fölösleges logikai vagy esetén. És még mindig jobb, mintha egy mindig igaz feltétel lenne ott... De gáz, ez tény.

Én is láttam, hogy sok a fals pozitív.


"Belépés díjtalan, kilépés bizonytalan."
"Vajon mit várok a sorstól, ha hányok az édestől, és izzadok a sóstól."

Nem fölösleges, mert ott egy normális csomag header hossz ellenőrzésnek kellene lennie, amely így hogy nincs megfelelően elvégezve akár biztonsági problémát is okozhat.

Lehet h a glibc-re kellett volna lefuttatni...

Meg a bind, meg az openssl, meg a... :)

Sokszemlapda

PVS-Studio-log-freebsd.txt
883

The bug reported can not happen, since the function is not really working as expected.
This is fixed in https://svnweb.freebsd.org/changeset/base/295771.

Szeretem az informatikusokat. :D

One more interesting moment. We detected the same error in the code of Haiku operating system (see the section "Warnings #17, #18") No idea, who borrowed the "if_ae.c" file, but this error appears after Copy-Paste.

--
trey @ gépház