The OpenNET Project / Index page

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



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

Оглавление

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

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


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
Добавить, Поддержать, Вебмастеру