Minggu, 08 Mei 2011

Typo bugs fmtmsg() di FreeBSD

FreeBSD hacker juga manusia :P.. Hal tersebut terbukti pada sebuah kesalahan kecil yang dibuat oleh developer FreeBSD pada file /usr/src/lib/libc/gen/fmtmsg.c, khususnya yang ada pada fungsi printfmt().

01    /*

02     * Returns NULL on memory allocation failure,otherwise returns a   pointer to
03     * a newly malloc()'d output buffer.
04     */

05    static char *

06    printfmt(char *msgverb, long class, const char *label, int sev,

07        const char *text, const char *act, const char *tag)

08    {
09            size_t size;

10            char *comp, *output;

11            const char *sevname;

12

13            size = 32;

14        ...

15            if (text != MM_NULLTXT)
16                    size += strlen(text);

17            if (text != MM_NULLACT)

18                    size += strlen(act);

19       ...

20            if ((output = malloc(size)) == NULL)

21       ...

22            return (output);

23    }
Seperti diketahui,, fmtmsg adalah sebuah sebuah routines yang menghandle display message pada standard error dan atau system console. Berdasarkan manual page dari fmtmsg itu sendiri,, kita bisa men-trigger bugs yang dimaksud dengan code sederhana kaya gini misal nya :

1#include <fmtmsg.h>
2
3int main(int argc, char * argv[])
4{
5fmtmsg(MM_UTIL | MM_PRINT, "BSD:ls", MM_ERROR,
6"illegal option -- z", MM_NULLACT, "BSD:ls:001");
7return 0;
8}</fmtmsg.h>
dan hasilnya…

1# gcc -o fmtbugs fmtbugs.c
2# ./fmtbugs
3Segmentation fault (core dumped)
Ok, kenapa bisa kondisi Segfault terjadi ??.
Jadi hal tersebut terjadi karena pada saat variable “MM_NULLACT” di check apakah bernilai NULL atau tidak,, developer FreeBSD ‘tidak sengaja’ mengambil argument ‘text’ yang pada contoh code diatas bernilai “illegal option — z” dan tentunya akan terjadi segmentation fault karena mengambil nilai yang salah. Seharusnya nilai yang diambil adalah argument ‘act’ yang pada contoh code diatas bernilai MM_NULLACT.


Info bugs ini ane ambil dari  XORL blog dan FreeBSD Official site.

sumber kecoak-E

Tidak ada komentar:

Posting Komentar