The OpenNET Project / Index page

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



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

Оглавление

Локальная уязвимость в ядре Linux, эксплуатируемая через nftables , opennews (??), 26-Дек-23, (0) [смотреть все]

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


22. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Анонимусс (?), 26-Дек-23, 13:19 
Зато они добавили goto!
Теперь код еще ближе приблизился к лапше, а применение статических анализаторов стало еще сложнее.
В общем... у меня нет слов за которые не забанят)
Ответить | Правка | К родителю #4 | Наверх | Cообщить модератору

76. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Tron is Whistling (?), 26-Дек-23, 15:32 
Предложи вариант без goto, для которого не надо будет шариться по файлу в поисках, что же он делает.
Ответить | Правка | Наверх | Cообщить модератору

87. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Анонимусс (?), 26-Дек-23, 16:00 
Предлагаю использовать defer. Хотя стоп, в эту убогость defer еще не завезли...
Может nested function с каким-то нормальным названием вроде finalize, где будет анлочится все что было залочено и чиститься память если нужно?
Ответить | Правка | Наверх | Cообщить модератору

179. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Tron is Whistling (?), 26-Дек-23, 22:54 
Не кажется вам, что всё это извращение?
Переход - это нормальная в т.ч. низкоуровневая инструкция, и весь этот блуд по отмене переходов в угоду неосиляторам - ну такое.
Ответить | Правка | Наверх | Cообщить модератору

201. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (-), 27-Дек-23, 00:46 
Ого, оказывается те кто не хочет, чтобы этой фигней пользовались - неосиляторы?
Записываю туда себя, Дейкстру, Кернигана, Ритчи...
Да я просто в отличной компании!

Это нормальная низкоуровневая инструкция, но не в случае "мне лениво добавлять переменную в цикл", "я не понимаю что такое нестед функция", "дефер... а что это?"
По хорошему каждый такой прыжок должен быть обоснован.. если бы мы говорили не про программеров ядро.

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

212. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (3), 27-Дек-23, 02:39 
> Записываю туда себя, Дейкстру, Кернигана, Ритчи...

Кто все эти люди? Судя по тому, что goto не любят — смузи-растаманы какие-нибудь.

[сарказм]

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

227. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от 1 (??), 27-Дек-23, 10:53 
Дейкстру - да ... А Керниган с Ритчи тут при чём ?.

Goto выпилили фанаты ООП и диаграмм Несси-Шнейдермана ...
Хотя, надо признаться, выпилили не просто так. Выпилили по поводу математического доказательства правильности алгоритма (чем сейчас никто не занимается).

Ну а по поводу дыры ... Начинается жатва подсистемы nftables... И это только цветочки.

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

231. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (-), 27-Дек-23, 12:21 
Они в своей книге (еще 88 года) пишут что гото плохо, приводят пример где его вроде как можно использовать, а потом пример, как можно переделать на без-гото.
И делают вердикт "нужно использовать редко, если вообще стоит использовать"

В теме ниже приводили цитаты
opennet ru/openforum/vsluhforumID3/132420.html#103

> Выпилили по поводу математического доказательства правильности алгоритма (чем сейчас никто не занимается).

Что-то мне подсказывает, что даже алгоритмы проверки кода могут страдать от случайных прыжков.

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

236. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от 1 (??), 27-Дек-23, 17:09 
Так это уже 88 год ... Тогда goto было совершенно неприличным словом (хотя практически во всех языках оператор такой был ... даже в Perl). Конец 80х - это были годы фанатов ООП, и всех несогласных выпиливали ...
Ответить | Правка | Наверх | Cообщить модератору

165. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (96), 26-Дек-23, 21:10 
> Предложи вариант без goto, для которого не надо будет шариться по файлу в поисках, что же он делает.

C goto не надо шариться? Ясно, понятно...

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

211. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +1 +/
Сообщение от Аноним (3), 27-Дек-23, 02:36 
Ага, видишь goto — можно закрывать код и удалять его нафик.
Ответить | Правка | Наверх | Cообщить модератору

82. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +3 +/
Сообщение от Аноним (82), 26-Дек-23, 15:47 
Вот так, добрых полвека прошло, а проклятие Дейкстры владеет умами.

Вбитая со студенчества инстинктивная неприязнь к goto — это уродливая деформация, точно так же ухудшающая код, как и полное отсутствие структуры (бывшее нормой во времена Дейкстры). Каждая строчка кода должна быть обдумана и оправдана. Даже goto. Если такой подход позволяет реализовать что–либо эффективнее, проще и лаконичнее — правильным будет использовать goto, а не городить многоэтажные баррикады из скобочек и макросов, ссылаясь на затрёпанную догму: «общеизвестно (sic!) что goto — дурной тон».


> применение статических анализаторов стало еще сложнее

Нисколько не стало. Как был статичный граф, так и остался. Или это так, случайно высосанный из пальца аргумент, ради нездоровой дискуссии?

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

103. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  –1 +/
Сообщение от анонин (?), 26-Дек-23, 16:57 
Керниган и Ритчи в книге Kernighan & Ritchie 1988 глава 3.8 Goto and Labels пишут следущее

C provides the infinitely-abusable goto statement, and labels to branch to. Formally, the goto
statement is never necessary, and in practice it is almost always easy to write code without it.
We have not used goto in this book.

Приводят один пример где его можно использовать, кстати таки цикл, но добавляют "This organization is handy if the error-handling code is non-trivial, and if errors can occur in several places."

А резуюмируют это "it does seem that goto statements should be used rarely, if at all"

Так что даже создатели СИ считают, что goto это плохо.

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

127. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (-), 26-Дек-23, 18:08 
> Так что даже создатели СИ считают, что goto это плохо.

Но тем не менее добавили его в C. Наговорив всяких слов, которые звучат больше как извинение перед Дейкстрой, чем как запрет goto во всех случаях, кроме тех когда без него не обойтись.

Без goto _всегда_ можно обойтись, если поставить перед собой такую цель. И Керниган с Ритчи об этом знали. Но добавили goto в C, и пробормотали что-то вроде "ну goto типа плохо, но типа удобно иногда".

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

135. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от фнон (?), 26-Дек-23, 18:42 
Именно!
Они даже написали пример как из

for (i = 0; i < n; i++)
   for (j = 0; j < m; j++)
      if (a[i] == b[j])
      goto found;
/* didn't find any common element */
...
found:
/* got one: a[i] == b[j] */

можно сделать


found = 0;
for (i = 0; i < n && !found; i++)
   for (j = 0; j < m && !found; j++)
      if (a[i] == b[j])
      found = 1;
if (found)
/* got one: a[i-1] == b[j-1] */
...
else
/* didn't find any common element */

Выше написали несколько вариантов начиная от defer, заканчивая nested функциями.
То что они оставили гото в С - может это была необходимость, чтобы фанатики не воняли.
А может уже написанный код перестал бы работать.
А может это ошибка ценой в лямы долларов, как один сэкономленный байт в null-terminated string.

Но они однозначно осуждают его использование, а не "пробормотали что-то вроде "ну goto типа плохо""

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

144. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +5 +/
Сообщение от anonymous (??), 26-Дек-23, 18:55 
Что и требовалось доказать без goto получилась дурацкая лапша с флажочками. Зато гоутофобы довольны.
Ответить | Правка | Наверх | Cообщить модератору

149. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Анонимусс (?), 26-Дек-23, 19:06 
Ну так запиши Керниган и Ритчи в Готофобы.
Ты наверняка умнее и лучше разбираешься в тонкостях СИ, не то что эти дилетанты.
Ответить | Правка | Наверх | Cообщить модератору

182. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Tron is Whistling (?), 26-Дек-23, 22:56 
Вы можете как угодно лепить.
Другие будут делать, как удобнее им.
Не нравится - не пользуйтесь :)
Ответить | Правка | Наверх | Cообщить модератору

202. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (-), 27-Дек-23, 00:49 
Полностью согласен, тут я могу просто бухтеть или скрипеть зубами, в зависиммости от того насколько ужасный овнокод в ядре снова делает уязвимость.

Но все веселье в том, что через пару версий ядра, по той же самой причине вам понадобится раст для его сборки. И я просто процитирую твое сообщение)

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

210. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (210), 27-Дек-23, 02:30 
> насколько ужасный овнокод в ядре снова делает уязвимость.
> через пару версий ядра, по той же самой причине вам понадобится раст для его сборки

По какой "той же самой"? По "ужасный овнокод в ядре снова делает уязвимость" но теперь уже на расте?

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

222. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Tron is Whistling (?), 27-Дек-23, 09:58 
Если такое каким-то образом произойдёт - мне уже будет почти фиолетово, потому что в планах будет полный перенос сервиса на винду :D
Ответить | Правка | К родителю #202 | Наверх | Cообщить модератору

197. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Dont Ask (?), 27-Дек-23, 00:01 
Ну да, ещё goto прерывает циклы СРАЗУ а не ждёт, пока ты ВСЁ просмотришь. А вдруг там не просто 2*3 а что то долгое, файлы на сети перебирать сто тыщ о как красиво, зато без goto.

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

199. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Dont Ask (?), 27-Дек-23, 00:04 
Туплю, в этом примере прервётся сразу :facepalm:
Ответить | Правка | Наверх | Cообщить модератору

207. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (210), 27-Дек-23, 02:15 
Ах ты ж! Я думал, он троллит, а он СЕРЬЁЗНО предлагает избавиться от goto ТАКИМ способом! Тогда понятно, почему нормальные программисты стараются вести себя с готофобами спокойно, дружелюбно, во всём с ними соглашаются, но к коду не подпускают.
Ответить | Правка | К родителю #144 | Наверх | Cообщить модератору

181. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +2 +/
Сообщение от Tron is Whistling (?), 26-Дек-23, 22:56 
И вот зачем всё это извращение, когда достаточно просто goto и метки?
Ответить | Правка | К родителю #135 | Наверх | Cообщить модератору

213. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (3), 27-Дек-23, 02:43 
Аргумент уровня "зачем вообще делать какой-то cleanup, если достаточно простого ((void(*)(void))0)() (после которого cleanup не понадобится, инфа 100%)"
Ответить | Правка | Наверх | Cообщить модератору

223. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Tron is Whistling (?), 27-Дек-23, 10:00 
Мне не платят за количество строк кода, поэтому делать из одного goto портянку мне лениво.
Ответить | Правка | Наверх | Cообщить модератору

232. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (-), 27-Дек-23, 12:44 
> Мне не платят за количество строк кода,

Думаю за качественный и поддерживаемый код тебе тоже не платят)

> поэтому делать из одного goto портянку мне лениво.

... и так подумал каждый разработчик проекта.
А потом "а почему у нас макаронная фабрика вместо кода?! как это случилось? кто это сделал?"

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

233. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Tron is Whistling (?), 27-Дек-23, 14:43 
Почти угадал. Мне платят за то, чтобы я определял, как всё это делается (архитектор, ога). Т.е. сие видение транспонируется на то, что в итоге делается другими людьми. И чтобы код в принципе был поддерживаемый не только вот этой вот текущей командой, но и при возникшей суровой необходимости - вообще кем-то в одну мордочку, без эксцессов. Периодически сам берусь за код, софт, железо и т.п., в основном в "тонких местах", чтобы мнение иметь, ну и когда народ в силу изначально заложенных ложных концептов "гото плохо" и т.п. - не осиляет.
Ответить | Правка | Наверх | Cообщить модератору

237. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (-), 27-Дек-23, 18:11 
О, это уже интереснее.
Если ты работаешь с тем "что в итоге делается другими людьми" то неужели тебя так сильно парит как будет реализована одна из функций через гото или через if (flag) ?
Работать оно будет практически одинаково.

Из того что видел, как работали архитекторы - максимум они писали протоколы и иногда скелет будущих файлов. Наполняли содержимыми другие люди.

Думаю ты как архитектор сталкивался тем что иногда меняются требования, и части проекта приходится перепиливать. Хотя я не уверен бывает ли такое в "FreePBX и обвязки до управления роутерам". Может у вас планирование лучше.
Так вот, если приходится перепиливать проект, то с чем легче разобраться - с мелкими функциями принятыми как стандарт для проекта (я не знаю на чем вы пишите и доступны ли вам всякие defer/nested) или в множестве goto?
Я сталкиваля с чудовищным кодом на гото, с функциями разобраться было на порядок легче.
Возможно твой опыт противоположный моему, что абсолютно нормально.
Разница может быть в том, что тебя зовут когда "все совсем плохо", а мне доводилось подчищать за другими очень часто)

> Поэтому видение от "code only" может отличаться сильно, приходится жить в реальном мире, который идеализма не прощает.

Возможно. Мысль интересная.
Мой опыт говорит, что поддерживаемость кода и единообразие очень сильно упрощает разработку.
А шишки на лбу - то что, фанат использования гото, в моих проектах обычно все портил)

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

234. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Tron is Whistling (?), 27-Дек-23, 14:46 
Но да, есть момент - у нас не чистый проект из чистого кода, а в силу характера деятельности - связь кода, стороннего железа, стороннего софта. По целому множеству профилей и проектов. Не эмбедовка, нет. От FreePBX и обвязки до управления роутерами. Поэтому видение от "code only" может отличаться сильно, приходится жить в реальном мире, который идеализма не прощает.
Ответить | Правка | К родителю #232 | Наверх | Cообщить модератору

180. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Tron is Whistling (?), 26-Дек-23, 22:55 
Единственный недостаток гото - неочевидная местами раскрутка стека.
Но если оно всё в пределах одного контекста - совершенно беспроблемная вещь.
Другое дело, что да, для снежинок уже слишком сложно.
Ответить | Правка | К родителю #127 | Наверх | Cообщить модератору

203. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +1 +/
Сообщение от Аноним (-), 27-Дек-23, 00:51 
Бедные снежинки, то ли дело диды, наделали столько CVE, что выгребать будем еще лет 10.

Это напоминает разговоры про ремни безопасности... обязательно попадется упоротый который начнет песню "я так всегда делаю"

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

224. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +1 +/
Сообщение от Tron is Whistling (?), 27-Дек-23, 10:01 
Да, диды CVE наделали. Потому что хоть что-то делали, да и npm и лефтпадов тоже не было.
А вот от снежинок я пока ни одной вменяемой софтины не увидел, всё больше как-то дедовские монстры работают.
Ответить | Правка | Наверх | Cообщить модератору

134. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (134), 26-Дек-23, 18:41 
Можно например и без switch обойтись, а еще можно на Brainfack писать.
Ответить | Правка | К родителю #103 | Наверх | Cообщить модератору

97. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Ананимус (?), 26-Дек-23, 16:28 
>  Зато они добавили goto!

goto в ядре нормальная практика для клинапа.

    struct myfoo *foo = NULL;
    struct mybar *bar = NULL;

    foo = kmalloc(sizeof(*foo), GFP_KERNEL);
    if (!foo)
        goto err;

    bar = kmalloc(sizeof(*bar), GFP_KERNEL);
    if (!bar)
        goto err;

    [...]

    return 0;

err:
    kfree(foo);
    kfree(bar);
    return -ENOMEM;

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

130. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  –2 +/
Сообщение от Аноним (96), 26-Дек-23, 18:29 
Ну, и что мешает по-человечески разбить это на функции?

struct Context {
  struct myfoo* foo;
  struct mybar* bar;
};

...

struct Context context = {0};

if (!initContext(&context))
  return -ENOMEM;

...

freeContext(&context);

Но нет, блждад, надо свалить управление ресурсами, обработку ошибок и основную логику в одну портянку, и потом всем рассказывать, что "goto - нормальная практика".

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

136. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +1 +/
Сообщение от anonymous (??), 26-Дек-23, 18:42 
Читаемость хуже, если клинап требует определенного порядка вызовов еще и ошибиться легче.

Но нам же главное goto не использовать.

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

157. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  –2 +/
Сообщение от Аноним (96), 26-Дек-23, 19:53 
> Читаемость хуже, если клинап требует определенного порядка вызовов еще и ошибиться легче.

Ты же о коде с goto говоришь?

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

139. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Анонимусс (?), 26-Дек-23, 18:45 
> Ну, и что мешает по-человечески разбить это на функции?

Во-первых, у них так приятно (где кушать там и гадить)
Во-вторых, диды писали и мы так же будем
В третих, это же надо:
а) подумать
б) сделать целую структуру! а как же скорость! а если я буду запускать это на умном туалете с STM32 на борту!111
в) им плевать на резуьтат
г) я бы даже сказал Г с большой буквы - они так делают себе доп работу на будущее

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

172. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (171), 26-Дек-23, 22:22 
Сам какую ОС разрабатываешь? Свой код покажешь? Ляпы есть? А если найду?
Ответить | Правка | Наверх | Cообщить модератору

183. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Tron is Whistling (?), 26-Дек-23, 22:57 
Мешает то, что у тебя этих функций на каждый чих станет 100500, и ты будешь по ним бегать.
Нет, пока у тебя проект уровня 50 строк над "чёрными ящиками" таких же писателей - всё нормально.
Но как станет посложнее, придётся менять подходы.
Ответить | Правка | К родителю #130 | Наверх | Cообщить модератору

192. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (96), 26-Дек-23, 23:35 
> Мешает то, что у тебя этих функций на каждый чих станет 100500, и ты будешь по ним бегать.

Почему это проблема? Или по goto-портянке бегать не надо?

У функции как бы есть имя, которое говорит, что внутри происходит.

> Но как станет посложнее, придётся менять подходы.

Как менять? Начать писать портянки с goto? О да, это очень поможет в сложном проекте эдак на 2-6 миллиона строк.

Я вот правда не пойму: для тебя идеальный вариант - это весь код прямо в main()? Или как ты себе представляешь?

Дай угадаю: ты ведь в жизни не работал над чем-либо, кроме embedded помоек, так ведь? И теперь несешь свет в массы в виде лучших практик из тех мест.

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

225. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Tron is Whistling (?), 27-Дек-23, 10:04 
>> Но как станет посложнее, придётся менять подходы.
> Как менять?

В самую первую очередь - начинать вместо кормления розовых пони в голове дружить с реальным миром.

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

229. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (96), 27-Дек-23, 11:07 
> начинать вместо кормления розовых пони в голове дружить с реальным миром.

Ну, понятно: начинаем лить делевый пафос, ибо ничего конкретного ни на один из моих вопросов мы ответить не можем.

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

235. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Tron is Whistling (?), 27-Дек-23, 14:50 
Извини, привык на иррациональные вопросы просто забивать.
Потому что есть определённая семантика у кода, и пытаться его разбить вне семантики - это гарантия того, что потом во всём этом следующий за тобой просто запутается.
Или просто потому что завтра надо подправить вон тот драйвер, а в нём - гото во все поля.
Ответить | Правка | Наверх | Cообщить модератору

206. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (210), 27-Дек-23, 02:13 
Чтобы другие могли понять, что именно вы хотели продемонстрировать, пожалуйста,
1. увеличьте число переменных контекста с двух до трёх (пусть будет foo, bar, baz),
2. приведите реализацию функций initContext() и freeContext()
Ответить | Правка | К родителю #130 | Наверх | Cообщить модератору

209. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Аноним (210), 27-Дек-23, 02:26 
> Ну, и что мешает по-человечески разбить это на функции?

Тот факт, что нечеловеческий вариант освобождает foo, если не удалось выделить bar. А человеческий просто возвращает ENOMEM в надежде, что пользователь докупит ещё памяти для хранения всех foo, для которых не удалось выделить bar (или в надежде, что можно просто падать в панику, когда память кончается/файл не открывается/устройство недоступно/коннект к сайту не происходит - мы ведь не только память таким образом выделяем/освобождаем). С человеческой точки зрения это, конечно, более простое решение. Но мы же тут об инженерной стороне дела говорим.

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

242. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Ананимус (?), 02-Янв-24, 20:23 
> Но нет, блждад, надо свалить управление ресурсами, обработку ошибок и основную логику в одну портянку, и потом всем рассказывать, что "goto - нормальная практика".

Ты сейчас на серьезных щас мне будешь утверждать что в одной функции можно только один раз память выделять, или что?

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

243. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Ананимус (?), 02-Янв-24, 20:32 
> Но нет, блждад, надо свалить управление ресурсами, обработку ошибок и основную логику в одну портянку, и потом всем рассказывать, что "goto - нормальная практика".

Ох лол...

    if (kref_get_unless_zero(&foo->ref)) {
        ret = -ENODEV;
        goto out;
    }

    ret = do_stuff_with_bar(bar);
    if (ret != 0)
        goto out_unlock;

    bar = kmalloc(...);
    if (!bar) {
        ret = -ENOMEM;
        goto out_unlock;
    }

out_unlock:
    kref_put(&bar->ref);

out:
    return ret;

Здесь ты тоже предлагаешь контексты на каждый чих делать? :)))

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

244. "Локальная уязвимость в ядре Linux, эксплуатируемая через nft..."  +/
Сообщение от Ананимус (?), 02-Янв-24, 20:32 
s/do_stuff_with_bar/do_stuff_with_foo/
Ответить | Правка | Наверх | Cообщить модератору

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

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




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

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