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().
| 02 * Returns NULL on memory allocation failure,otherwise returns a pointer to |
| 03 * a newly malloc()'d output buffer. |
| 06 printfmt(char *msgverb, long class, const char *label, int sev, |
| 07 const char *text, const char *act, const char *tag) |
| 15 if (text != MM_NULLTXT) |
| 17 if (text != MM_NULLACT) |
| 20 if ((output = malloc(size)) == NULL) |
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 :
3 | int main(int argc, char * argv[]) |
5 | fmtmsg(MM_UTIL | MM_PRINT, "BSD:ls", MM_ERROR, |
6 | "illegal option -- z", MM_NULLACT, "BSD:ls:001"); |
dan hasilnya…
1 | # gcc -o fmtbugs fmtbugs.c |
3 | Segmentation 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