Warning: Missing argument 2 for wpdb::prepare(), called in /home/stromber/public_html/kryptoblog/wp-content/plugins/wp-super-edit/wp-super-edit.core.class.php on line 109 and defined in /home/stromber/public_html/kryptoblog/wp-includes/wp-db.php on line 1222
clang » Kryptoblog

Posts Tagged ‘clang’

Nya versioner av libssh2 och openSSL

June 13th, 2010

Det har kommit nya versioner av biblioteken libssh2 och openSSL.

libssh2

Version 1.2.6 av libssh2 inkluderar både en del nya funktioner och ett antal buggfixar, bland annat ett antal fixar av problem som fångats av statisk kodanalys med clang. Mer exakt innehåller den nya versionen följande förändringar:

Changes:

* Added libssh2_sftp_statvfs() and libssh2_sftp_fstatvfs()
* Added libssh2_knownhost_checkp()
* Added libssh2_scp_send64(


Bug fixes:

* wait_socket: make c89 compliant and use two fd_sets for select()
* OpenSSL AES-128-CTR detection
* proper keyboard-interactive user dialog in the sftp.c example
* build procedure for VMS
* fixed libssh2.dsw to use the generated libssh2.dsp
* several Windows-related build fixes
* fail to init SFTP if session isn’t already authenticated
* many tiny fixes that address clang-analyzer warnings
* sftp_open: deal with short channel_write calls
* libssh2_publickey_init: fixed to work better non-blocking
* sftp_close_handle: add precation to not access NULL pointer
* sftp_readdir: simplified and bugfixed
* channel_write: if data has been sent, don’t return EAGAIN

OpenSSL

Den nya versionen av OpenSSL heter 1.0.0a, vilker visar att man iaf än så länge inte övergett sin metod att namnge versioner. Den nya versionen innehåller dock bara en egentlig förändring kopplad till säkerhetsproblemet CVE-2010-1633:

RSA verification recovery in the EVP_PKEY_verify_recover function in OpenSSL 1.x before 1.0.0a, as used by pkeyutl and possibly other applications, returns uninitialized memory upon failure, which might allow context-dependent attackers to bypass intended key requirements or obtain sensitive information via unspecified vectors.

Statisk kodanalys på libssh2

April 21st, 2010

För några dagar sedan släpptes version 1.2.5 av SSH-biblioteket libssh2.

libssh2-logga.

Eftersom jag använder en Steve Jobs-maskin tänkte jag att det kunde vara kul att testa att bygga libssh2 för att se hur väl det funkar. Det korta svaret visade sig vara alldeles utmärkt. Eftersom libssh2 använder autoconf var det bara att köra ./configure och sedan make och biblioteket byggde utan problem.

MacOSXs utvecklingsmiljö Xcode inkluderar förutom kompilatorn gcc även den LLVM-baserade kompilatorn clang, ett projekt Apple aktivt driver utvecklingen av.

Jag har använt clang och tycker att den är bättre på att hitta problem, ger bättre varningar samt genererar något bättre kod än gcc. Jag testade därför att bygga libssh2 med clang. Genom att helt enkelt deklarera CC=clang som parameter till configure gick det sedan att bygga libssh2. Återigen utan varningar och problem.

En funktion som clang inkluderar är statisk kodanalys. Detta innebär att verktyget går igenom alla logiska vägar i programmet och kan detektera felaktig användning av variabler, ex att variabler blir lästa innan de definierats. Clang utför kodanalysen som en del av kompileringen och genererar sedan ett antal rapporter (webbsidor) som visar de vägar genom koden som leder fram till problem den detekterat. Så här kan en rapport se ut:

kodtrace1.

För att köra kodanalysatorn fristående (i ett terminalfönster) och inte genom Xcode finns det ett litet program kallat scan-build. Installationen av scan-build är så svår som att tanka ner och packa upp katalogen verktyget ligger i. Sedan får man se till att köra configure med CC=scan-build som kompilator och dessutom slå på generering av debuginformation vid kompilering.

Kompilering med scan-build to klart längre än med clang eller gcc, men gick igenom utan problem på libssh2. Resultatet blev att den hittade 67 problem. De flesta av dessa var Dead assignment och relaterade problem, dvs ställen i koden där en variabel uppdateras, men sedan aldrig mer blir läst.

Mer intressant var dock att det upp ett antal logiska fel av typen Dereference of undefined pointer value och Uninitialized argument, dvs ställen där en pekare blir läst som inte blivit definierad samt argument som blir använda men som inte blivit initierade. Dessa problem är mer problematiska och skulle kunna öppna för säkerhetsproblem.

Daniel Stenberg, pappa till libssh2 har nu satt upp ett cronjobb som kör clangs statiska analysator pÃ¥ kodbasen en gÃ¥ng per dygn och genererar rapporter. Här finns exempelvis Rapporterna för för dagens körning (2010-04-21) – och libssh2 är nu nere pÃ¥ 28 problem.

För den som vill se hur scan-build rapporterar olika fel är här en rapport för en död tilldelning och här är en rapport för en derefererad, men icke definierad pekare.

Jag tycker att clang och dess statiska kodanalysator är enkla och smidiga att arbeta med och ger bra återmatning vid kodutveckling. clang är BSD-licensierad och finns till ett flertal plattformar. Håller du på att knacka kod tycker jag att du skall testa clang.