Summary: | buffer overflow detected | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | enp <enp> | ||||||||
Component: | tftp | Assignee: | Sergey Bolshakov <sbolshakov> | ||||||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||||||
Severity: | normal | ||||||||||
Priority: | P3 | CC: | sbolshakov | ||||||||
Version: | unstable | ||||||||||
Hardware: | all | ||||||||||
OS: | Linux | ||||||||||
Attachments: |
|
Description
enp
2011-07-27 11:23:16 MSK
Попробуйте поставить tftp-debuginfo и повторить попытку (а еще лучше запустить через valgrind). Created attachment 5025 [details]
вывод valgrind
в аттаче вывод valgrind -v tftp 10.7.1.1 -c get pxelinux.0 &> tftp.log
А tftp-debuginfo был установлен? Created attachment 5027 [details]
вывод valgrind
вот с установленным tftp-debuginfo
Ага, вот теперь уже понятно. Вот сама функция makerequest (ftp.c): static int makerequest(int request, const char *name, struct tftphdr *tp, const char *mode) { char *cp; tp->th_opcode = htons((u_short) request); cp = (char *)&(tp->th_stuff); strcpy(cp, name); cp += strlen(name); *cp++ = '\0'; strcpy(cp, mode); cp += strlen(mode); *cp++ = '\0'; return (cp - (char *)tp); } В качестве указателя tp передается указатель на ackbuf (размером 516 байт). Видимо, из-за слишком длинного имени происходит переполнение (с strcpy это как два байта переслать). Возможно, это даже тянет на CVE. Исправить можно, но скорее всего работать на этом файле все равно не будет, но хоть переполнения буфера не будет. Точнее так - ошибка тут безусловно есть, и переполнение буфера в принципе возможно. А ругается компилятор на то, что делается попытка strcpy в поле tu_stuff структуры tftphdr, а это поле определено как char tu_stuff[1]; (см. /usr/include/arpa/tftp.h) При попытке скопировать более 1 байта в tu_stuff, объявленную как char[1], и возникает сообщение. Created attachment 5029 [details]
Вот такой патч вроде бы решает проблему
Приложил патч, который в принципе должен решить проблему.
tftp с приложенным патчем можно взять в задании #50813 http://git.altlinux.org/tasks/50813/ Проверьте пожалуйста, исчезла ли проблема. Все работает. Спасибо огромное. Как будете собирать в Сизиф - скопируйте, пожалуйста, еще и в t6 |