The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Уязвимости в драйвере к GPU ARM, уже применяемые для совершения атак, opennews (??), 03-Окт-23, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


130. "Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."  +/
Сообщение от Аноним (130), 04-Окт-23, 11:52 
> Раз уж речь зашла о Си, то недавно обнаружил весьма люботный факт,
> - может кто-нибудь знает почему создатели функции fgets() решили что бесконечный
> цикл это круто, если второй аргумент будет равен единице?

Какие создатели и чего именно?

The fgets function reads at most one less than the number of characters specified by n from the
stream pointed to by stream into the array pointed to by s. No additional characters are read after a
new-line character (which is retained) or after end-of-file. A null character is written immediately
after the last character read into the array.

char *
__fgets_unlocked (char *buf, int n, FILE *fp)
{
  size_t count;
  char *result;
  int old_error;
  CHECK_FILE (fp, NULL);
  if (n <= 0)
    return NULL;
  if (__glibc_unlikely (n == 1))
    {
      /* Another irregular case: since we have to store a NUL byte and
     there is only room for exactly one byte, we don't have to
     read anything.  */
      buf[0] = '\0';
      return buf;
    }

Ответить | Правка | К родителю #82 | Наверх | Cообщить модератору

133. "Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."  +/
Сообщение от Аноним (82), 04-Окт-23, 15:18 
Т.е вы считаете, что если пользователь получает бесконечный цикл, при n равным единице, то это нормально? Или вы считаете нормальным не указать об этом в документации (в тексте, который вы привели, - нет ни  слова об этом!)?? Т.е по вашему, я должен лезть в исходники чтобы понять, почему происходит такой бред???
Ответить | Правка | Наверх | Cообщить модератору

135. "Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."  +/
Сообщение от Аноним (130), 04-Окт-23, 15:34 
Я не вижу ни цикла в вышеприведённом коде, ни требований в стандарте зацикливать при n == 1. Если хочешь, что бы я перестал считать тебя троллем, потрудись привести минимальный пример, а так же укажи версию компилятора и библиотеки.
Ответить | Правка | Наверх | Cообщить модератору

139. "Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."  +/
Сообщение от Аноним (82), 04-Окт-23, 16:55 
>>> Я не вижу ни цикла в вышеприведённом коде <<<

Смысл в том что, скорее всего вы будете использовать fgets таким образом:

while (fgets(buff, bsize, stdin) != NULL)
    puts("WTF?");

А теперь, внимание, что случится если buff это динамический массив, а его размер bsize будет равен единице?

Ответить | Правка | Наверх | Cообщить модератору

141. "Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."  +/
Сообщение от Аноним (82), 04-Окт-23, 17:02 
ПС: для наглядной иллюстрации для простоты просто возьмите статический массив размером 1.

#include <stdio.h>
#define BSIZE 1

int main(void)
{
    char buff[BSIZE];

    while (fgets(buff, BSIZE, stdin) != NULL)
        puts("WTF?");
    return 0;
}

Ответить | Правка | Наверх | Cообщить модератору

160. "Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."  +1 +/
Сообщение от Совершенно другой аноним (?), 05-Окт-23, 12:31 
Ну, как-бы, Вы сами функцию зациклили. Аналогичное поведение будет, если Вы укажите вместо stdin, например, NULL.
Ответить | Правка | Наверх | Cообщить модератору

163. "Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."  +1 +/
Сообщение от Аноним (130), 05-Окт-23, 13:19 
Показательный пример, кстати. Если fgets заменить на true - тогда виновата во всём окажется истина. :)
Ответить | Правка | Наверх | Cообщить модератору

168. "Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."  +/
Сообщение от Аноним (82), 05-Окт-23, 15:15 
>>> Ну, как-бы, Вы сами функцию зациклили <<<

Моя претензия в том, что о такой дичи нужно писать в документации, как это сделали в проекте OpenBSD!!!

ПС: В общем, не удивительно, что в мире Си такой лютый треш творится, если великие гуру не могут просто взять и сделать нормальынй API.

Ответить | Правка | К родителю #160 | Наверх | Cообщить модератору

187. "Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."  +/
Сообщение от Совершенно другой аноним (?), 06-Окт-23, 08:41 
>>>> Ну, как-бы, Вы сами функцию зациклили <<<
> Моя претензия в том, что о такой дичи нужно писать в документации,
> как это сделали в проекте OpenBSD!!!
> ПС: В общем, не удивительно, что в мире Си такой лютый треш
> творится, если великие гуру не могут просто взять и сделать нормальынй
> API.

Честно говоря, за около 20-ти летний опыт использования языка С, как-то ниразу не приходилось читать в однобайтовый буфер данные при помощи функции fgets().

Ответить | Правка | Наверх | Cообщить модератору

188. "Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."  +/
Сообщение от Аноним (82), 06-Окт-23, 10:13 
Я сам был мягко говоря удивлён! Проблема в том, что там использовался динамический массив, а не статический, размер которого задаётся пользователем! Уж не спрашивайте кто и зачем такое придумал, для меня это тоже загадка:)
Ответить | Правка | Наверх | Cообщить модератору

164. "Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."  +/
Сообщение от Совершенно другой аноним (?), 05-Окт-23, 13:23 
В том плане - фунция fgets() ожидает буфер, имеющий возможность хранить как минимум один введённый символ и признак окончания строки '\0'. В стандарте про значение n написано явно, что оно должно быть на 1 меньше, чем хотят ввести данных. Может "диды" не догадывались, что потомки будут хотеть, по факту, ввести 0 символов. Как Вам привели выше, в glibc от этой ситуации явно защитились, даже комментарий написали, и в таком случае говорят, что ввод прошел нормально, и в буфер записывают символ с кодом '\0'. Формально они поступают правильно - ошибки именно ввода-вывода не было, попросили ввести 0 символов - получите. NULL они вернуть не могут, потом-как его возвращают ТОЛЬКО по ошибке ввода, которого небыло. Как в том анекдоте:
- Товарищ полковник, Ваше приказание выполнено!
- Так я ничего не приказывал!!
- Так мы ничего и не делали!!!
Ответить | Правка | К родителю #141 | Наверх | Cообщить модератору

189. "Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."  +/
Сообщение от Аноним (82), 06-Окт-23, 10:29 
что потомки будут хотеть, по факту, ввести 0 символов.

Дьявол кроется в деталях! Обработка ошибок это вообще целая наука; лично я сторонник того, что не надо делать никаких предположений; именно из-за такого рода мелочей и получаем кучу уязвимостей и крики о том что Си это дырень и нытьё о том что его пора закопать;

ПС: проблема не в языке Си как таковом (хотя они там есть), а в том что большинство функции, даже в стандартной библиотеке, НЕнадёжны и являются откровенным куском говна (чего только стоят strncpy и strncat - кто вообще в здравом уме мог такое придумать?), - может в бородатые 80-е этого и было достаточно, - но времена изменились!

Ответить | Правка | Наверх | Cообщить модератору

162. "Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."  +1 +/
Сообщение от Аноним (130), 05-Окт-23, 13:07 
>>>> Я не вижу ни цикла в вышеприведённом коде <<<
> Смысл в том что, скорее всего вы будете использовать fgets таким образом:
> while (fgets(buff, bsize, stdin) != NULL)
>     puts("WTF?");

Не буду.

> А теперь, внимание, что случится если buff это динамический массив, а его
> размер bsize будет равен единице?

Случилось:
1. выдумывание глупости;
2. приписывание её оппоненту;
3. ненавязчивое предложение с этой глупостью поспорить.

Ответить | Правка | К родителю #139 | Наверх | Cообщить модератору

170. "Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."  +/
Сообщение от Аноним (82), 05-Окт-23, 15:20 
>> Не буду. <<<

Да я и сам выкинул это гумно на помойку и написал свою версию c нормальным API, где нет никакого неопределённого поведения.

Ответить | Правка | Наверх | Cообщить модератору

172. "Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."  +/
Сообщение от Аноним (82), 05-Окт-23, 15:24 
>>> выдумывание глупости; <<<

это не моя глупость:), а реальность с которой мне пришлось недавно столкнуться в продакте:(

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру