[devel] Buffer overflow - help needed
Sergey Vlasov
=?iso-8859-1?q?vsu_=CE=C1_altlinux=2Eru?=
Вт Апр 22 17:11:45 MSD 2008
On Tue, Apr 22, 2008 at 04:19:12PM +0400, Vitaly Ostanin wrote:
> Есть такая проблема:
> https://bugzilla.altlinux.org/show_bug.cgi?id=15284
>
> Моего кунфу на неё пока не хватает. Если знатоки C посмотрят и
> скажут, как исправить, будет очень здорово. Посмотреть можно для
> скорости здесь:
>
> http://git.altlinux.org/people/bga/packages/?p=amanda.git;a=blob;f=amanda/common-src/match.c;h=dba15c802c28add576135af2f4a85476a2ccfd57;hb=c7308c105b84b606039fb617cc7fe2bd7799f1a9#l533
Во-первых, тот, кто вызвал amfetchdump таким образом, не дочитал
amanda(8) в части DATESTAMP EXPRESSION - дата должна записываться без
'-', этот символ используется как разделитель при указании диапазона.
Во-вторых, функция match_datestamp() написана отвратительно -
например, код вида
strncpy(mydateexp, dateexp, strlen(dateexp));
наводит на мысли, что писавший его не понимал, что делает strncpy() и
зачем нужна эта функция. Дальше есть условие, которое никогда не
может выполниться:
if(mydateexp[strlen(mydateexp)] == '$') {
(очевидно, тут нужно strlen(mydateexp)-1 и перед ним проверка на
пустую строку).
Наконец, дальше находится вот такой кусок:
if((dash = strchr(mydateexp,'-'))) {
if(match_exact == 1) {
error("Illegal datestamp expression %s",dateexp);
/*NOTREACHED*/
}
len = (size_t)(dash - mydateexp);
len_suffix = strlen(dash) - 1;
len_prefix = len - len_suffix;
При передаче недопустимого параметра вида "2008-04-09" получается
len_suffix > len, однако это не проверяется, в результате последующий
вызов strncpy(lastdate, mydateexp, len_prefix) приводит к переполнению
буфера.
Те же самые ошибки повторяются дальше в функции match_level() (и
вообще эти функции отличаются только текстом сообщения об ошибке).
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: Digital signature
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20080422/647f8e99/attachment-0002.bin>
Подробная информация о списке рассылки Devel