[devel] IA: destination buffer overflow - ppp

Хихин Руслан =?iso-8859-1?q?hihin_=CE=C1_yandex=2Eru?=
Чт Ноя 29 09:28:53 MSK 2007


Здравствуйте Денис Смирнов
  В сообщении от 29 ноября 2007 Денис Смирнов написал(a):
 > On Wed, Nov 28, 2007 at 02:33:28PM +0300, Dmitry V. Levin wrote:
 > > > >> -     strncat(ttyname, name, sizeof(ttyname));
 > >>
 > >> + strncat(ttyname, name, sizeof(ttyname)-1);
 > >>
 > > >> Автор этого кода не справился с функцией strncat.
 > > >> Исправление тривиально.
 > >> Фикс должен быть таким (см. выше)? Или нет?
 > DVL> Да, таким.
 >
 >
 >
 > Правильно ли я понял, что:
 > strlcat(ttyname, name, sizeof(ttyname));
 > будет лучшим решением?
 >
 > А также изменить размер ttyname с PATH_MAX на PATH_MAX + 1 (с учетом
 > '\0'
 > на конце)?
В принципе да.

Тут ещё стоит обратить внимание на сам размер PATH_MAX.
В 90% случаях этот размер излишний. А так-как массив символов создаётся 
внутри функции, то идут излишние действия по его созданию. Возможно, 
его-бы следовало сделать глобальным (вернее указатель на строку) и 
создавать динамически по реальному размеру строки, насколько я помню 
(если не путаю), getline это позволяет, плюс можно посчитать сколько 
реально  нужно с случае, если оператор ввёл вместо /dev/ttyS0 просто 
ttyS0.
Впрочем это надо смотреть код всей программы - возможно там можно как-то 
это обойти. Как я понимаю, такие большие массивы появляются из желания 
программиста не допустить переполнения буфера при вводе строки 
оператором, так что, тут надо быть внимательным, и действия по 
переделыванию кода делать осмысленные :)

-- 
С  уважением Хихин Руслан
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: This is a digitally signed message part.
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20071129/2d838053/attachment-0002.bin>


Подробная информация о списке рассылки Devel