The OpenNET Project / Index page

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



"Удалённо эксплуатируемая язвимость в драйвере NVMe-oF/TCP из состава ядра Linux"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Удалённо эксплуатируемая язвимость в драйвере NVMe-oF/TCP из состава ядра Linux"  +/
Сообщение от opennews (??), 16-Окт-23, 11:31 
В Linux-подсистеме nvmet-tcp (NVMe-oF/TCP), позволяющей обращаться к NVMe-накопителям по сети (NVM Express over Fabrics), используя протокол TCP, выявлена уязвимость (CVE-2023-5178), потенциально позволяющая удалённо выполнить свой код на уровне ядра или, при наличии локального доступа, поднять свои привилегии в системе. Исправление пока доступно в виде патча. Проблема проявляется с самой первой версии драйвера NVMe-oF/TCP (в отчёте об уязвимости упоминается ядро Linux 5.15, но поддержка  NVMe-oF/TCP была добавлена в ядро 5.0). Уязвимости подвержены систем с включённым сервером...

Подробнее: https://www.opennet.ru/opennews/art.shtml?num=59940

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

Оглавление

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

1. Сообщение от Аноним (1), 16-Окт-23, 11:31   +2 +/
освободил память? - присвой указателю нулл
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #2, #24, #50, #71

2. Сообщение от morphe (?), 16-Окт-23, 11:33   +10 +/
Используешь C? - перестань
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #3, #4, #8

3. Сообщение от EULA (?), 16-Окт-23, 11:37   +5 +/
Переходи на С++?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #10

4. Сообщение от svsd_val (ok), 16-Окт-23, 11:38   –1 +/
Используешь не С - перестань, с чего это такие глупые призывы. ХОТЯ ДА, нынче если Ваше ПО не жрёт фигову тучу ресурсов - это не гууд... нужно по 2-3гб и по 100% нагрузке на проц на всякую бессмыслицу что бы быть в тренде ... так получается ?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #9

5. Сообщение от Анонин (?), 16-Окт-23, 11:44   +4 +/
Haha, classic.
"Прошло 5 дней с последней сишной дырени"
Ответить | Правка | Наверх | Cообщить модератору

6. Сообщение от ryoken (ok), 16-Окт-23, 11:46   +1 +/
Подскажите, с целью повышения уровня образованности. А какой "use case" у этой технологии? Уже есть сети, быстрее оперативы? Честно, не троллю, хотелось бы получше разобраться.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #7, #11, #16, #21, #34, #104, #160

7. Сообщение от Анонин (?), 16-Окт-23, 11:51   +/
> Уже есть сети, быстрее оперативы

Нет. Просто в оперативу всё не влазит(( Даже в стойку нужное кол-во nмme не влазит.
Приходится ставить рядом еще одну, читать оттуда и терпеть просадки по перформансу.
Вот такая вот печалька. Но что поделать.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #103

8. Сообщение от An (??), 16-Окт-23, 11:51   +1 +/
Того, что сказано выше - достаточно.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #17

9. Сообщение от Аноним (9), 16-Окт-23, 11:51   +7 +/
> нужно по 2-3гб и по 100% нагрузке на проц на всякую бессмыслицу

Нет чувак. Это даже не проблема языка программирования, а лично разраба.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #85

10. Сообщение от Анонин (?), 16-Окт-23, 11:55   +2 +/
Хотя бы. Уже станет лучше.
Но только если на современные плюсы, а не на сишку с классами.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #12, #83, #137

11. Сообщение от wWolfemail (?), 16-Окт-23, 11:58   +/
Да.
https://ru.wikipedia.org/wiki/DDR_SDRAM#%D0%A1...

https://en.wikipedia.org/wiki/Fibre_Channel#History

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #13, #14

12. Сообщение от morphe (?), 16-Окт-23, 12:05   +6 +/
В плюсах при низкоуровневой разработке способов прострелить себе колено пожалуй даже больше чем в C
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10 Ответы: #15, #47, #66, #82

13. Сообщение от voiceofreason (?), 16-Окт-23, 12:06   +/
SSD уже догнали ддр4?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11

14. Сообщение от Анонимусс (?), 16-Окт-23, 12:11   +/
Ты в пример привел какое-то старье. Даже у уже устаревшей DDR4-2400 - bandwidth 19200 MB/s.
А у DDR5 - 38400 для стандартной 4800 и 57600 для 7200.
А у фибры - максимум 25600 MB/s, и то - только на самой распоследней.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11 Ответы: #152

15. Сообщение от Аноним (15), 16-Окт-23, 12:14   +2 +/
т.е мы приходим к теореме г-на Эскобара?
Что С плохо (как видим из новости), что С++ не лучше.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12 Ответы: #97, #122

16. Сообщение от Аноним (16), 16-Окт-23, 12:16   +1 +/
Как более современная замена iSCSI.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6

17. Сообщение от Анонин (?), 16-Окт-23, 12:18   +/
Осталось всего-лишь как-то заставить всех выполнять выполнять это элементарное действие.
Всего-лишь...
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8 Ответы: #28

19. Сообщение от Аноним (15), 16-Окт-23, 12:22   –3 +/
Фикс просто шедеврален
-    goto free_crypto;
+    return ret; /* queue removal will cleanup */

-free_crypto:
-    if (queue->hdr_digest || queue->data_digest)
-        nvmet_tcp_free_crypto(queue);
-    return ret;

За использование goto просто так, без реальной причины надо бить по рукам.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #20, #23, #27, #32, #138

20. Сообщение от Аноним (20), 16-Окт-23, 12:26   +/
Ты бредишь. goto не для обезьян-кодеришек. А для системных программистов.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19 Ответы: #22

21. Сообщение от OpenEcho (?), 16-Окт-23, 12:29   +2 +/
> Подскажите, с целью повышения уровня образованности. А какой "use case" у этой технологии?

Это тоже самое что и iSCSCI, только позволяющее гигантские очереди и пути, и как результат увеличение пропускной способности и уменьшение задержек и при всем этом не надо какого-то специфического железа

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

22. Сообщение от Аноним (15), 16-Окт-23, 12:30   +6 +/
Угу, заметно какой качественный код, навыпрограммировали эти самые "ылитные системные пограммисты"™.

Каждую неделю можно наблюдать картину 'это не плохой иструмент' это разработчик неправильный.
Уже 30 лет, а дыры одни и те же.

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

23. Сообщение от OpenEcho (?), 16-Окт-23, 12:38   +2 +/
> За использование goto просто так, без реальной причины надо бить по рукам.

Причина надо сказать была и довольно веская, выскочить на метку обработки ошибок без оверхэда, в одну команду (в отличии от вызова другой функции, выделением памяти, потом сворачиванием) это самое эффективное и простое решение где в кернеле применяется очень активно

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19 Ответы: #25, #29, #79, #172

24. Сообщение от Аноним (24), 16-Окт-23, 12:39   +/
Ну и будет локальный указатель внутри функции указывать на NULL, ок. А тысячи других указателей, которые не в курсе, что ты один локальный указатель обнулил, что делать будут? Или ты предлагаешь всё переписать на двойной указатель или вообще не безопасТный язык?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #67, #96

25. Сообщение от Аноним (15), 16-Окт-23, 12:40   +/
Угу, ценой получения уязвимости, зато как сэкономили!
А потом это гото удалили и ничего ужасного не произошло!
Может оно там было ненужно?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #23 Ответы: #31

27. Сообщение от Аноним (24), 16-Окт-23, 12:41   +2 +/
> За использование goto просто так, без реальной причины надо бить по рукам.

Ты походу не то что ни одного модуля для ядра не написал, ты походу вообще с эмбедовкой никогда не работал.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19 Ответы: #36

28. Сообщение от An (??), 16-Окт-23, 12:42   +/
А еще - программы надо проектировать. Тогда и на си можно будет норм. писать(и даже без зануления указателей).
Везде так, сначала проектируют, потом реализовывают и только в программировании "самодокументируемый код".
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17 Ответы: #63, #127

29. Сообщение от Анонин (?), 16-Окт-23, 12:43   +2 +/
> самое эффективное и простое решение

... отстрелить себе ногу
И у них таки получилось! Впрочем, не впервой.
Вот если бы в языке был какой механизм для таких вещей... типа Defer, то такой проблемы бы не было.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #23 Ответы: #37

31. Сообщение от OpenEcho (?), 16-Окт-23, 12:45   +2 +/
> Угу, ценой получения уязвимости, зато как сэкономили!

А причем здесь логическая ошибка и goto?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #25 Ответы: #33

32. Сообщение от Аноним (68), 16-Окт-23, 12:46   +1 +/
goto тут при чём? Это вполне себе адекватный defer, чтобы не прописывать как придурок if else с кучей копипаста. Задолбали эти свидетели обучения сишке тех, кто сишку знает лучше.

Баг в том, что внутри функции освобождается память, функция возвращается и хендлер очереди освобождает память второй раз, что может привести к RCE.

Чёртовы любители прочитать две строчки без остального контекста и выдать мнение о том, как кто что должен писать.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19 Ответы: #35, #90, #98

33. Сообщение от Аноним (15), 16-Окт-23, 12:47   +2 +/
При том, что лапшекод с goto как раз приводит к логическим ошибкам.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #31

34. Сообщение от Хохлоним (?), 16-Окт-23, 12:47   +/
https://gist.github.com/jigi-33/5cca0dac52da6a39a63d9546fb69...

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

https://proglib.io/p/computer-networking

Протокол управления передачей (англ. TCP - Transmission Control Protocol) обеспечивает надежную доставку данных. Сервис TCP так и называется: reliable byte stream (надежная передача потока байт). Этот протокол отвечает за доставку данных и сохранение порядка передаваемых сообщений.
...
Разбираемся с HTTP
...
Он использует протокол TCP и порт сервера 80 (для клиента порт генерируется операционной системой).

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #40, #46, #56

35. Сообщение от Анонин (?), 16-Окт-23, 12:48   +1 +/
Спасибо, мы вот прям сейчас видим как прекрасно они знают сишку)))
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #32 Ответы: #75

36. Сообщение от Аноним (15), 16-Окт-23, 12:54   +2 +/
Что тебе не ясно во фразе "просто так, без реальной причины"?
Из кода гото удалили, и... мир не рухнул, код не перестал работать, а наоборот стал лучше.
Значит ли это, что в данном случае гото не было жизненно необходимо? Думаю да
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #27 Ответы: #41, #131

37. Сообщение от OpenEcho (?), 16-Окт-23, 12:54   +/
Чувак, это кернел ! какой нахер defer когда там все должно летать, ты реализацию defer смотрел? правда все в одну команду ЦПУ укладывается?

> Вот если бы в языке был какой механизм для таких вещей...

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

Я тебе секрет открою, что умники с "безопасными" языками, как ни странно забывают очень часто ставить то самый defer... со всеми вытекающими

полной защиты от "дураков" - не существует

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #29 Ответы: #43, #80

40. Сообщение от Хохлоним (?), 16-Окт-23, 12:58   +/
И вот в итоге: https://hwp.ru/articles/chto_takoe_nvme_of_i_kak_rabotaet_sa...

Чтобы полностью реализовать потенциал твердотельных накопителей, нам нужна технология, которая сможет осуществлять обмен данными на более высокой скорости. NVMe — вот та спецификация, которая позволяет твердотельным накопителям реализовать потенциал флэш-памяти. Эта технология была представлена в 2014 г, и её основными задачами стали повышение скорости работы приложений (сокращение времени отклика) и внедрение новых и улучшенных возможностей. Существует множество форм-факторов твердотельных накопителей на базе NVMe, и наиболее известные — это AIC (карта расширения), U.2, U.3 и M.2. Твердотельный накопитель на базе NVMe соединяется с компьютером или сервером посредством высокоскоростной шины Peripheral Component Interconnector Express (PCIe), к которой он подключается напрямую. NVMe снижает дополнительную работу центрального процессора и сокращает время между операциями, увеличивая количество операций ввода-вывода в секунду и пропускную способность. К примеру, NVMe SSD предлагает скорость записи свыше 3000 МБ/с, что в 5 раз выше в сравнении с твердотельным накопителем, оборудованным интерфейсом SATA, это в 5 раз выше и в 30 раз выше по сравнению с жестким диском.

NVMe поддерживает множество операций ввода-вывода (!), выполняемых одновременно, это означает, что масштабные задачи могут быть разбиты на более мелкие, которые будут обрабатываться независимо друг от друга. Это чем-то напоминает работу многоядерного процессора, который обрабатывает несколько потоков команд одновременно. Каждое ядро процессора может работать независимо от других ядер и решать индивидуальные задачи.

...

На SATA так не сделаешь

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #34 Ответы: #168

41. Сообщение от OpenEcho (?), 16-Окт-23, 13:01   –1 +/
> Значит ли это, что в данном случае гото не было жизненно необходимо? Думаю да

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #36 Ответы: #48, #91, #173

43. Сообщение от Анонин (?), 16-Окт-23, 13:03   +1 +/
Чувак, это кернел! Он должен быть надежен как бетонная стена, а не ср*ное сито из овна и костылей.
Вот в фиксе убрали goto и что? Тормоза начались?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37 Ответы: #49

46. Сообщение от Хохлоним (?), 16-Окт-23, 13:06   +/
https://nvme.smb-solution.ru/nvme-tcp/

Редакция спецификации NVMe-oF 1.1, включает поддержку транспортной привязки TCP. Добавление NVMe поверх TCP (NVMe/TCP) позволяет использовать NVMe-oF в стандартной сети Ethernet. Отпадает необходимость изменения конфигурации или использования специального оборудования.

Транспортная привязка TCP в NVMe-oF определяет методологию, используемую для инкапсуляции и доставки данных между хостом и подсистемой NVMe. Cпецификация NVMe/TCP ориентирована, главным образом, на программные реализации, использующие интерфейсы приложений TCP. Но спецификация не исключает использование NVMe/TCP для аппаратных реализаций.
...
Поставщики готовы к NVMe/TCP

Производители готовы поставлять компоненты и решения на базе NVMe/TCP.
— Упоминавшаяся уже Chelsio Communications предлагает сетевые адаптеры на скорости до 100 Гб/с.
— Mellanox в пресс-релизе указал на совместимость с NVMe/TCP сетевых адаптеров и коммутаторов, работающих на скоростях до 200 Гб/с. Теперь сетевые адаптеры ConnectX Mellanox одновременно поддерживают оба протокола NVMe-oF — и TCP и RoCE. Это позволяет внедрять NVMe платформы, работающие по TCP и RoCE.
Ряд поставщиков уже предлагает решения на NVMe/TCP в своих предложениях. В частности, LightbitsLabs.com и Solarflare Communications Inc.
— Платформа хранения Lightbits включает NVMe/TCP в составное блочное хранилище, которое может быть реализовано без ущерба для сетевой инфраструктуры или клиентов центра обработки данных.
— Solarflare также предлагает композитное хранилище на основе NVMe/TCP. Оно позволяет центрам обработки данных использовать существующие сетевые инфраструктуры. Поставщик работает с SuperMicro Computer Inc. В решениях используются системы Supermicro Ultra SuperServer и TCP-оптимизированные сетевые карты Solarflare.

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

47. Сообщение от EULA (?), 16-Окт-23, 13:09   +1 +/
> В плюсах при низкоуровневой разработке способов прострелить себе колено пожалуй даже больше
> чем в C

Чтобы не прострелить себе ногу достаточно не направлять на нее ружье, не?

=====================
Учитель, почему, когда я делаю так
int *a;
a = new int;
char *b;
*a=1000;
b=a;
*b='0';
cout<< 1000/a <<"\n";
Получается фигня?

- Не делай так!

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12 Ответы: #148

48. Сообщение от Аноним (15), 16-Окт-23, 13:09   +1 +/
Все возможно.
Наверное те гореписаки, т.е, простите, уважаемые пограммисты системщики этих самых унтеверситетов не заканчивали, и им профессора не рассказывали о том что "после выделения памяти, ее нужно очищать, желательно всего один раз".
Вот так и живем.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #41 Ответы: #52, #53

49. Сообщение от OpenEcho (?), 16-Окт-23, 13:11   –1 +/
> Вот в фиксе убрали goto и что?

ну так сделай s/goto//g по всему кернелу, очисть от нечести, вот ведь оказывется где собака зарыта

Мне жаль тебя... если ты и правда не догнал суть проблемы и едиственное что увидел goto.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #43 Ответы: #117

50. Сообщение от Аноним (96), 16-Окт-23, 13:14   +2 +/
Среди сишников бытует мнение, что "ptr = NULL" — это очень долгая операция, и нужно экономить такты.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #78

52. Сообщение от Аноним (15), 16-Окт-23, 13:18   +/
Чувак, посмотр на мисру (тот самый С котрый ипользуется для надежности)
а именно на правило
15.1 которое объясняется "Unconstrained use of goto can lead to programs that are unstructured and extremely difficult to understand"

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #48 Ответы: #68, #139

53. Сообщение от Аноним (15), 16-Окт-23, 13:22   +/
Rule.15.1 "The goto statement should not be used"
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #48

56. Сообщение от Хохлоним (?), 16-Окт-23, 13:52   +/
https://www.kingston.com/ru/ssd/what-is-nvme-ssd-technology

По поводу железа: Технология NVMe обеспечивает превосходное хранение данных, превосходную скорость и превосходную совместимость. Поскольку в технологии NVMe используются разъемы PCIe, она обеспечивает передачу в 25 раз большего объема данных по сравнению с аналогичными устройствами SATA. Наряду с большим объемом данных команды NVMe выполняются в 2 раза быстрее, чем в накопителях AHCI. Кроме того, количество операций ввода-вывода в секунду (IOPS) в устройствах NVMe превышает 1 миллион, и операции выполняются до 900% быстрее по сравнению с накопителями AHCI. NVMe также напрямую связывается с ЦП системы, обеспечивая невероятную скорость благодаря своей совместимости. Накопители NVMe работают со всеми основными операционными системами независимо от форм-фактора.

NVME (Non-Volatile Memory Express) — это интерфейс связи и драйвер, который использует преимущества увеличенной полосы пропускания, обеспечиваемой PCIe. Он разработан для повышения производительности и эффективности, обеспечивая при этом совместимость с широким спектром корпоративных и клиентских систем. Технология NVMe была разработан для твердотельных накопителей и обменивается данными между интерфейсом хранилища и процессором системы, используя высокоскоростные разъемы PCIe без ограничений форм-фактора.

Протокол NVMe использует параллельные пути передачи данных с малой задержкой к базовому носителю, подобно архитектурам высокопроизводительных процессоров. Это обеспечивает значительно более высокую производительность и меньшие задержки по сравнению с протоколами SAS и SATA. NVMe может поддерживать множество очередей ввода-вывода — до 64 тыс. очередей глубиной 64 тыс. записей каждая. В результате задачи ввода/вывода могут передавать больший объем данных быстрее, чем старые модели хранения данных с использованием устаревших драйверов, таких как AHCI (Advanced Host Controller Interface). Поскольку протокол NVMe разработан специально для твердотельных накопителей, он неизбежно станет новым отраслевым стандартом.

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

61. Сообщение от Sw00p aka Jerom (?), 16-Окт-23, 14:11   +/
NVMe TCP какой ща век ?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #70

63. Сообщение от Аноним (15), 16-Окт-23, 14:17   +/
А как вообще можно проэктирвоать архитектуру опенсорса?
Без шуток, я понимаю как оно делается в проприетарных проектах, но в распределнном проекте на тысячи человек.
Ну т.е даже если есть архитектор который придумал как оно должно быть и как нужно реализовывать.
А потом приходит кто-то с уже готовым кодом, который... ну не влазит в архитектуру.
И есть выбор: попросить переделать или ждать пока кто-то другой реализует, но это может быть долго. (а может и никогда)

Может кто-то сталкивался как решают такие диллемы?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #28 Ответы: #65

64. Сообщение от Аноним (64), 16-Окт-23, 14:25   +1 +/
Интересно, когда pull request'ы в ядро проходят review, есть ли принудительное использование статических анализаторов?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #76, #170

65. Сообщение от Аноним (1), 16-Окт-23, 14:55   +/
тысячи человек, приходит с кодом.. ну ты и фантазёр (тут я не шучу, ты явно никогда в ОС движении не был) - почему-то вспоминаются постановочные скриншоты слака:

- Кто может взять этот баг?
- Конечно я!

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #63 Ответы: #69, #73

66. Сообщение от Советский инженер (ok), 16-Окт-23, 14:58   +/
ето потому что к malloc/free добавили еще new/delete или что?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12

67. Сообщение от Аноним (1), 16-Окт-23, 15:01   +1 +/
уязвимость в новости - дабл фри
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #24

68. Сообщение от Аноним (68), 16-Окт-23, 15:11   +/
Замени goto на что-то другое, умник. goto + label - это просто прыжок в конкретный кусок кода (и, внимание) внутри одной функции. Это не longjmp. В этом случае goto выполняет функцию defer, чтобы сразу прыгнуть в один и тот же кусок кода, который и так бы исполнился в конце или при другом условии внутри той же самой функции, и программа просто продолжает исполнятся с места, где определён label.
goto убрали в патче, потому что этот defer вообще не нужен внутри функции, она по задумке теперь должна просто return делать. Прыгать в этом случае в label смысла нету никакого.
Почитайте исходники, попробуйте написать что-то, что не превращается в 10 вложенных друг в друга циклов и if else стейтментов, после этого приплетайте правила, которые кто-то придумал и выложил в интернет. В Си есть только одно правило - стандарт Си.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #52 Ответы: #81

69. Сообщение от Аноним (15), 16-Окт-23, 15:13   +/
> ты явно никогда в ОС движении не был

Конечно не был, поэтому и спрашиваю)

Просто пример ехФАТ дров - был драйвер самсунг, но он был устаревший и требовал допиливания (насколь понимаю сама самсунг на него уже давно забила).
И тут приходит Paragon и приносит на блюдечке драйвер.

Как согласовывали требования к драйверу и что бы было если бы они на них забили, но драйвер все равно работает. Взяли бы его в ядро или нет?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #65 Ответы: #72

70. Сообщение от Аноним (70), 16-Окт-23, 15:20   +/
А что не так: TCP не актуален или даже NVMe?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #61 Ответы: #123

71. Сообщение от Tron is Whistling (?), 16-Окт-23, 15:21   +/
Какому именно указателю? Их может быть несколько в совершенно разных структурах.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #74

72. Сообщение от Аноним (1), 16-Окт-23, 15:24   +/
эти люди делают это за деньги - они сразу знают как, в "эти люди" включены и менеджеры, которые знают о рисках.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #69

73. Сообщение от Анонин (?), 16-Окт-23, 15:26   +/
Ну почему сразу постановочные? У меня такое было и не раз.
Смотришь в борду - а там все такое унылое и муторное... а тут кто-то находит интересную критику!
И да, пишу, что с удовольствием займусь этим багом))
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #65

74. Сообщение от Аноним (96), 16-Окт-23, 15:39   +2 +/
А, ну да, тогда никак. Придется дважды освобождать память. А иногда и десятижды.

^ ты же к этому выводу всех склоняешь?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #71 Ответы: #125

75. Сообщение от Аноним (20), 16-Окт-23, 15:40   –1 +/
Да получше тебя, мы это вот прям сейчас видим. Ты рельно уверовал, что узвимость в наличи goto? Рукалицо...
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #35

76. Сообщение от Аноним (96), 16-Окт-23, 15:41   +/
Сишка не поддается статическому анализу. Корректность кода нельзя математически доказать.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #64 Ответы: #87

77. Сообщение от Аноним (77), 16-Окт-23, 15:46   +/
>В Linux-подсистеме nvmet-tcp (NVMe-oF/TCP), позволяющей обращаться к NVMe-накопителям по сети (NVM Express over Fabrics), используя протокол TCP

А просто к оперативной памяти так обращаться можно? Как такое настроить? Хочу поиграться с протоколом и написать свою реализацию клиента.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #93, #94, #95

78. Сообщение от Аноним (24), 16-Окт-23, 15:58   +/
Ничего тут не медленно, просто бесполезно, потому что это никак не влияет на другие указатели.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #50 Ответы: #92

79. Сообщение от Аноним (82), 16-Окт-23, 15:59   +2 +/
>  довольно веская, выскочить на метку обработки ошибок без оверхэда,

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

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

80. Сообщение от Аноним (82), 16-Окт-23, 16:02   +/
> ты реализацию defer смотрел? правда все в одну команду ЦПУ укладывается?

Ты не поверишь, но да. Даже банальный деструктор в C++ (RAII) инлайниться компилятором прямо в место вызова.

Ты бы хоть когда-нибудь вылазил из своего сишного танка...

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37 Ответы: #84

81. Сообщение от Аноним (82), 16-Окт-23, 16:05   +/
> Почитайте исходники, попробуйте написать что-то, что не превращается в 10 вложенных друг в друга циклов и if else стейтментов, после этого приплетайте правила, которые кто-то придумал и выложил в интерне

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #68 Ответы: #118

82. Сообщение от Аноним (82), 16-Окт-23, 16:08   +/
> В плюсах при низкоуровневой разработке способов прострелить себе колено пожалуй даже больше чем в C

Хоть один пример приведете?

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

83. Сообщение от Аноним (82), 16-Окт-23, 16:15   +/
> Но только если на современные плюсы, а не на сишку с классами.

Да даже если и на сишку с классам: наличие RAII уже само по себе избавило бы от этого убогого цирка с ручным управлением ресурсами и соответствующих CVE.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10 Ответы: #156, #171

84. Сообщение от Аноним (15), 16-Окт-23, 16:18   +/
Спарведливости ради речь идет не о продвинутых С++, а о древнем и унылом С.
Более того можно вспомнить, что на с11 в ядре преешли аж в 2022 году, а до него был копролитический С89.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #80 Ответы: #86

85. Сообщение от svsd_val (ok), 16-Окт-23, 16:21   –1 +/
Согласен, но ... только при одних и тех же обстоятельствах производительность и потребление ресурсов у разных языков разное. И как бы ты не старался для оптимизации работы некоторые вещи лучше писать на асме.... увы знаю о чём говорю... и Си и С++ в этом плане шибко проигрывают чистой асме.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #124

86. Сообщение от Советский инженер (ok), 16-Окт-23, 16:33   +1 +/
>Спарведливости ради речь идет не о продвинутых С++, а о древнем и унылом С.

Спарведливости ради ядро разрабатывают на gcc с кучей gnu extensions. уж и дефер какой никакой могли бы прилепить.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #84 Ответы: #88

87. Сообщение от Аноним (15), 16-Окт-23, 16:39   +/
Не совсем правда.
Вот есть seL4, не просто статистически проверено, но даже формально верифицировано.
Оно на 73% написана на С, https://github.com/seL4/seL4

Правда есть 2 существенных НО:
1. оно маленькое - там оклоло 36к строк на С, из которых 11к это пустые и комментарии (что уже намекает на сложность).
(с другой стороны микроядро и должно быть маленьким)
2. его писали руками, сразу думая о том как они будут его верифицировать.
Пришлось потрудиться и использовать Isabelle и Haskell.
Кол-во строк скриптов только первой было больше 200к строк.

И это было довольно дорого
The abstract spec took about 4 person months (pm) to develop. About 2 person years (py) went into the Haskell prototype (over all project phases), including design, documentation, coding, and testing.
The executable spec only required setting up the translator; this took 3 pm. The initial C translation was done in 3 weeks, in total the C implementation took about 2 pm, for a total cost of 2.2 py including the Haskell effort.
(статья https://cseweb.ucsd.edu/~dstefan/cse227-spring20/papers/sel4...)

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #76 Ответы: #102

88. Сообщение от Аноним (15), 16-Окт-23, 16:42   +/
Ты хотел сказать "написать свой велосипед как в истории со split для строк"?
О да, это они могли бы!

на гитхабе видел даже деферы для СИшки в виде макросов, но наверное оно никому не нужно.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #86 Ответы: #121

90. Сообщение от Аноним (-), 16-Окт-23, 16:54   –1 +/
Не тебе судить салага. Вердикт о goto вынес Э. Дейкстра, ещё в те времена, когда ты ещё не родился на свет со своим "оверхедом". Дейкстра в своё время нажрался кода FORTRAN, в котором изобиловали GOTO. Это было бичём тех времён.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #32

91. Сообщение от Аноним (91), 16-Окт-23, 17:01   +/
goto, jmp - ну ты, блд, сопоставил. Это разный уровень абстракций. Компилятор с языков высокого уровня однозначно нагенерит кучу jmp даже там, где goto и а помине нет. Ну не может машинный код в фигурные скобочки или begin/end.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #41

92. Сообщение от Аноним (96), 16-Окт-23, 17:05   +2 +/
чувак, если у тебя один и тот же кусок памяти используется многими структурами, следует наконец ввести ref/unref или прочие техники управления памятью. Указатели у него, видите ли, "не влияются". Твоя претензия смехотворна, ибо double-free возникает при НЕиспользовании техник типа подсчета ссылок -- то есть как раз там, где такие техники и не нужны, ибо памятью владеет кто-то один. Кто-то один, кто забыл обнулить единственный указатель на память.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #78 Ответы: #100

93. Сообщение от Менеджер Антона Алексеевича (?), 16-Окт-23, 17:06   +/
Можно, но не «просто». Гугли RoCE v2.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #77

94. Сообщение от Аноним (91), 16-Окт-23, 17:06   +/
"Для использования NVMe over RoCE в фабрике, технологию Converged Ethernet должны поддерживать сетевая карта, коммутатор и флэш-массив. Кроме того, сетевая карта и флэш-массив должны поддерживать RoCE (такие сетевые карты сокращенно называются R-NIC)."
Наверное, если только написать эмуляцию всего этого.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #77

95. Сообщение от Аноним (95), 16-Окт-23, 17:07   +/
>  Хочу поиграться с протоколом и написать свою реализацию клиента.

что мешает эмулировать nvme на имимдже в памяти

https://qemu-project.gitlab.io/qemu/system/devices/nvme.html

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

96. Сообщение от Аноним (96), 16-Окт-23, 17:09   +/
> тысячи других указателей

Если ты присвоил один и тот же указатель тысяче разных мест, а затем без всякой координации освобождаешь в каком-то одном месте, а затем получаешь double-free, то это в первую очередь характеризует тебя. Как человека, которого к сям подпускать нельзя. (ЧСХ, именно такие на сях и пишут.)

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

97. Сообщение от all_glory_to_the_hypnotoad (ok), 16-Окт-23, 17:15   +2 +/
Такие ошибки предотвращать относительно просто, это указатели с экслюзивным владением и счётчики ссылок. Автор модуля банально не осилил сделать корректное управление указателем, здесь нет никакой сложной низкоуровщены. В этой же дичи всё ещё goto используют. Если в этот долбанутый Си добавили хотя бы RAII, и научили несчастных им пользоваться, то значительной части уязвимостей просто бы не было.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15 Ответы: #105, #133

98. Сообщение от Аноним (82), 16-Окт-23, 17:20   +1 +/
> чтобы не прописывать как придурок if else с кучей копипаста

У вас какая-то особая сишка, где нет функций?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #32 Ответы: #99, #101

99. Сообщение от Анонин (?), 16-Окт-23, 17:40   +4 +/
Ты что! Функция же жрет стек и процессорное время!
А компилятора, который умеет инлайнить еще не изобрели!
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #98

100. Сообщение от Аноним (100), 16-Окт-23, 17:41   +3 +/
Не нужон нам ваш ref/unref.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #92

101. Сообщение от Аноним (15), 16-Окт-23, 17:42   +3 +/
Сейчас, тебе навалят кучу объяснений:
"Код должен быть быстрым, про инлайн мы ничего не знаем,
про nested func в гнутых раширениях С, тоже ничего не знаем,
пусть в ядре будут дырочки удалённо эксплуатируемые, зато как быстро!
Мы тебе уже говорили, что код должен быть быстрым?"
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #98 Ответы: #126

102. Сообщение от Аноним (102), 16-Окт-23, 17:43   –1 +/
Формальная верификация - это из области бреда учёных-грантоедов. Отличная теория, которая далека от реалий нашей вселенной.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #87 Ответы: #119

103. Сообщение от all_glory_to_the_hypnotoad (ok), 16-Окт-23, 17:44   +/
Тогда нужен RDMA, а не поделие из топика
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7 Ответы: #167

104. Сообщение от all_glory_to_the_hypnotoad (ok), 16-Окт-23, 17:52   +/
Если даже и есть быстрее, то работать с ними всё равно будешь на скорости памяти, в лучшем случае на скорости какого-нибдуь кеша L3. Любой слой увеличивает задержки доступа к памяти и хоп вроде сети точно не делает жизнь лучше.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #145

105. Сообщение от Аноним (15), 16-Окт-23, 18:06   +2 +/
Так каждый раз когда приходит кто-то с предложениями улучшить процессы (я уже молчу про большие изменения, вроде 'добавить Раст') типа "а давайте сделаем стат. анадизатор обязательным, или добавим линтер", то начинается нытье "будет медленно, не хочу ждать 10 минут пока тесты пробегут" в перемежку с пафосными рассуждениями об ылитных пограммитах который этот код наделали, что ядро пишут только профи, которым это не нужно.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #97 Ответы: #132

117. Сообщение от Аноним (82), 16-Окт-23, 18:42   +1 +/
> Мне жаль тебя... если ты и правда не догнал суть проблемы и едиственное что увидел goto.

Лол, сишники рассказывают про "не догнал суть проблемы". Порода кодерв, которая стабильно из десятилетия в десятилетие наступает на одни и те же грабли, плодит те же CVE, тот же лапшекод - и при этом не делает при этом никаких выводов. И даже наоборот: с упорством барана защищает эту всю дичь.

Даже Торвальдс - и тот что то понял и принял в ядро Раст. А на Опеннете от местных экспертов вопли "ты что, это же кэээрнэээл111".

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

118. Сообщение от Серб (ok), 16-Окт-23, 18:46   +/
Почитай хотя бы Прешерн "Язык С. Мастерство программирования. Принципы, практики и паттерны".

Глава 1. Обработка ошибок.

Подраздел: "Переход к обработке ошибки".

У него там есть замечание, что при работе в команде могут попастся неадекваты и тогда, возможно, придётся изворачиваться. Ну и варианты изворотов приводит.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #81 Ответы: #130

119. Сообщение от Аноним (82), 16-Окт-23, 19:26   +/
> Формальная верификация - это из области бреда учёных-грантоедов. Отличная теория, которая далека от реалий нашей вселенной.

- Поздраляем, вы приняты в команду разработчиков ядра!

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #102 Ответы: #120

120. Сообщение от Аноним (91), 16-Окт-23, 19:50   +1 +/
Ядра Minix.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #119 Ответы: #161

121. Сообщение от Советский инженер (ok), 16-Окт-23, 19:51   +/
>на гитхабе видел даже деферы для СИшки в виде макросов, но наверное оно никому не нужно.

да, в виде макросов это отстой. надо именно на уровне компилятора.

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

122. Сообщение от анон (?), 16-Окт-23, 20:07   –1 +/
На ночь через крон ставить не?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15

123. Сообщение от Sw00p aka Jerom (?), 16-Окт-23, 20:12   +/
>А что не так

эт файлзилла на уровне ядра?

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

124. Сообщение от Анонин (?), 16-Окт-23, 20:19   –1 +/
> Си и С++ в этом плане шибко проигрывают чистой асме

Вот только сколько такого "горячего" кода в приложении? 20%? 10%? Еще меньше?
Предварительная оптимизация - это зло.
А пару маленьких кусков можно и на асме переписать потом, когда уже будут результаты работы профайлера.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #85 Ответы: #150

125. Сообщение от Tron is Whistling (?), 16-Окт-23, 20:51   +/
Склоняю к тому, что use-after-free и double free возникают по другим причинам.
Можно занулить _свой_ указатель - но надо ещё убедиться, что другие структуры уничтожены либо сделаны то же самое.
То есть просто зануление не спасёт.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #74

126. Сообщение от Аноним (20), 16-Окт-23, 21:41   +/
Ну да, код должен быть быстрым. Слоупоки не тянут только как и суть спора. Понимаешь же? Или я зря стараюсь?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #101 Ответы: #128, #129, #142

127. Сообщение от Аноним (82), 16-Окт-23, 22:05   +/
> А еще - программы надо проектировать. Тогда и на си можно будет норм. писать(и даже без зануления указателей).

Не смешите... Сишные кудесники, бедненькие, в одной функции запутались: то память дважды освободят, то за пределы буфера вылезут - а вы им проектирование хотите поручить? Бракоделам, которые без goto и сотни строк не в состоянии написать?

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

128. Сообщение от Аноним (15), 16-Окт-23, 22:38   +/
Если твоими стараниями по коду CVEшки расползаются, то лучше не надо)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #126

129. Сообщение от Аноним (15), 16-Окт-23, 22:42   +/
Стараешься? И это ты называешь "старанием"?
А ну начинай стараться в два раза сильнее!
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #126

130. Сообщение от Аноним (15), 16-Окт-23, 22:45   +1 +/
Да, и он приводит вполне адекватные решения, например "Поместите инициализацию и очистку в разные функции, как это делается в конструкторах и деструкторах в объектно ориентированном программировании." и примеры проектов где это применяется OpenSSL, OpenWrt, Git.

И даже говорит про производительность:
"Вместо одной функции мы теперь имеем несколько. Это может снизить производительность, но обычно снижение настолько незначительно, что в большинстве приложений им можно пренебречь."

Т.е пока не сделаны замеры профайлера, то делать ранние оптимизации бесполезно.

Более того финальный код, который "Оцените, насколько элегантнее стал код по сравнению с первоначальной версией." вообще не содержит goto.

Впрочем, я сомневаюсь что писатели этого драйвера, читали такие книги)

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #118 Ответы: #155

131. Сообщение от Аноним (131), 16-Окт-23, 23:15   +/
А ты не заметил, что после goto там еще куски кода были?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #36

132. Сообщение от Аноним (132), 16-Окт-23, 23:22   –1 +/
Ядро с сопредельным софтом сначала придётся переписать полностью. Для смены языка.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #105 Ответы: #143, #164

133. Сообщение от fidoman (ok), 16-Окт-23, 23:51   +/
уж вы-то лучше всех бы накодировали, без единой ошибки
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #97

136. Сообщение от X86 (ok), 17-Окт-23, 07:50   +2 +/
> обращаться к NVMe-накопителям по сети

Это какая-то небезопасная штука, которая не должна быть в ядре у всех. Кому надо пускай отдельно устанавливают.

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

137. Сообщение от penetrator (?), 17-Окт-23, 08:13   +/
если не с классами то с чем?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10

138. Сообщение от Хейтер С (?), 17-Окт-23, 08:40   +/
Нет, goto для ошибок в С хорошо, проще за ресурсами следить, меньше вложенность, меньше кода под ифами. Тут ничего бы не помогло, не дефер, ни если бы

ret = kernel_sendmsg(queue->sock, &msg, &iov, 1, iov.iov_len);
if (ret < 0) {
    if (queue->hdr_digest || queue->data_digest)
        nvmet_tcp_free_crypto(queue);
    return ret;
}

так без goto бы было. По сути, тут не было владения ресурсом, поэтому и освобождать его не надо было.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19 Ответы: #165

139. Сообщение от Хейтер С (?), 17-Окт-23, 09:34   +/
Rule 15.2 The goto statement shall jump to a label declared later in the same
function

И? MISRA разрешает goto вперед.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #52 Ответы: #140

140. Сообщение от Аноним (15), 17-Окт-23, 09:48   +/
Это для тех кто не осилил пункт 15.1)

Там есть еще 15.3 и 15.4, но и в них есть ремарка
Rationale - Unconstrained use of goto can lead to programs that are unstructured and extremely
difficult to understand.
Что собственно и видим - получили удалённо эксплуатируемую CVE на ровном месте.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #139 Ответы: #141

141. Сообщение от Хейтер С (?), 17-Окт-23, 09:59   +/
CVE не из-за goto. В данном конкретном случае неиспользование goto ничего бы не поменяло.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #140 Ответы: #144

142. Сообщение от Аноним (142), 17-Окт-23, 10:12   +/
> код должен быть быстрым

В общем случае — нет, это не главное требование к коду. Обычно ему достаточно не быть тормозным, но квалифицированный прогер такого и не допустит.

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

143. Сообщение от Аноним (15), 17-Окт-23, 10:52   +/
Для смены языка - да. Это очень сложный путь.

А обязательные стат. анализаторы?
Ты думаешь, что их добавление приведет к нерешаемым проблемам?
Да, наверное придется месяц-два потратить на исправление всех проблем, но лучше это чем такие уязвимости.

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

144. Сообщение от Аноним (15), 17-Окт-23, 10:58   +/
CVE из-за наплевательского отношения к работе с памятью и спагетти-кода
В хаосе трудно найти какие-то проблемы.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #141 Ответы: #149

145. Сообщение от Хохлоним (?), 17-Окт-23, 12:50   +/
Нет,  скорости кеша и оперативной памяти явно больше, а вот чипсет влияет на передачу данных по сети. И мне лично кажется что передача данных параллельно даёт некоторым задачам преимущество перед SATA. Я когда-то давно работал над виртуальной файловой системой, клиентом для гибридного облака и о параллельной передачи данных от жёсткого диска мог только мечтать. Множество параллельных запросов можно сделать, пусть они даже и псевдопаралельные, но они быстрее SATA все-равно оказались и выигрыш скорости не получился. Да и в статьях выше же написано что их используют не только на высоконагруженных серверах, но и в сетевых устройствах для высокой скорости передачи данных, что логично — много информации нужно содержать, правда смотря что за информация. Маршрутизацию все же лучше в оперативной памяти держать.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #104 Ответы: #146, #157

146. Сообщение от Хохлоним (?), 17-Окт-23, 13:00   +/
Хотя, впрочем у меня были определённые претензии к разработчикам серверного API. Мне туда доступ не дали, может и на SATA все получилось. Не удалось договориться об изменении API, другим путём пошли.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #145

148. Сообщение от name (??), 17-Окт-23, 15:02   +/
а это точно соберётся? там присвоение немного неодинаковых типов может вывести компилятор из себя
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #47 Ответы: #158

149. Сообщение от Хейтер С (?), 17-Окт-23, 16:27   +/
Суть в том, что код на С без goto для обработки ошибок хуже, RAII-то нет и приходится обмазываться флагами состояний, освобождать ресурсы перед каждым return'ом итп. Да, С хреновый ЯП, но нет, это не спагетти-код.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #144

150. Сообщение от svsd_val (ok), 17-Окт-23, 18:37   +/
> Вот только сколько такого "горячего" кода в приложении? 20%? 10%? Еще меньше?

Да, всё зависит от конкретных задач и конкретного приложения, тупейший пример: рендеринг, расчёт физики и т.п. (там где много ветвлений и циклов) производительность будет падать в разы а не каких то 10/20%.
А теперь что касается реальных задач и конкретной темы в ядре падение скорости даже 2-3% уже сказывается на работу всего софта который был затронут зависимостями... там эти 2-3% могут как снежный ком расти... и в итоге ты будешь к примеру играть не 60fps а 45-48 потому что в коде оказался код который "тормозит" на 2-3%. вот это круто да.... понимаю всего 2-3% а не 10 и не 20%...

> Предварительная оптимизация - это зло.

Конечно, легче говно код написать и сказать что сейчас делать софт можно и нужно который и озу и проц жрут из расчёта что "У ВСЕХ ЕСТЬ ВОЗМОЖНОСТЬ КУПИТЬ НОВЫЙ КОМ" или новый сервер.... %)

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

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

p.s.
Можете кидаться какахами но увы... % на % и на % уже водном месте , в другом в и в третьем ... они же зачастую суммируются...

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

Увы но Я в корпоративной среде много такого кода видел из этого расчёта написанного ))), да можно работать но иногда просто офигиваешь от того что не шибко сложные вещи могут давать такие нагрузки....

мб просто я уже старый пердун, но в МОЁ ВРЕМЯ все старались писать оптимизированный код сразу а не после того как жаренный петух клюнет...

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #124 Ответы: #162

151. Сообщение от Вы забыли заполнить поле Name (?), 17-Окт-23, 19:43   +/
Ну уязвимость и уязвимость. Что бухтеть-то? Пофиксили - это главное. Пофикшеная уязвимость лучше чем не существующий код на безопасном языке. Древние люди с дубинами не могли быть сбитыми автомобилем, а значит жили более безопасно.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #163

152. Сообщение от Аноним (152), 17-Окт-23, 21:24   +1 +/
Оптика уже 600 гигабит умеет. Ну нафиг ненужно распределенную базу данных при распределенных вычислениях гонять через цпу который офигеет.
Не просто же так начали жпу натаскивать на чтение из накопителя напрямую. Это даже при локальном использовании желательно.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14 Ответы: #175

155. Сообщение от Аноним (155), 17-Окт-23, 21:55   +/
> Впрочем, я сомневаюсь что писатели этого драйвера, читали такие книги)

Очевидно, что ты высокого мнения о себе.

В том варианте, что ты привел есть существенный недостаток. Это хорошо работает пока ресурсов мало и разработчик один.

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

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

156. Сообщение от morphe (?), 17-Окт-23, 22:20   +/
RAII уже включили в ядро... В Rust.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #83

157. Сообщение от Аноним (152), 18-Окт-23, 02:59   +/
Тут может сработал эффект локов ядра. Поищи про китайцев с их протоколом в пространстве пользователя.
А звук на звуковой карте со своей памятью, да еще и аппаратный мог бы быть нормой.
Так что если контроллер сетевой на мипсе скажем быстрее делает именно маршрутизацию и передачу данных, то рулить потоками в памяти не очень то и нужно.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #145

158. Сообщение от EULA (?), 18-Окт-23, 05:40   +/
> а это точно соберётся? там присвоение немного неодинаковых типов может вывести компилятор
> из себя

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

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

159. Сообщение от Аноним (159), 18-Окт-23, 09:00   +/
А оно по умолчанию не у всех, нужны дополнительные телодвижения, чтобы экспортировать nvme по сети. Кстати, накопитель может быть любой, хоть usb, nvme это просто протокол, просто у некоторых накопителей он реализован "в железе".
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #136

160. Сообщение от Аноним (160), 18-Окт-23, 15:58   +/
Вообще это хороший вопрос, если он без троллинга, потому что лично я, например, не видел NVMe-oF/TCP и не понимал в нем смысла.

Когда люди настраивают NVMe over Fabriс, они понимают что им нужны 2 вещи:
1) Скорость обращения к диску от внешнего сервера, особенно когда речь идёт о низких задержках
2) Снижение требований к центральному процессору, опять это влияет на задержки
Дело не в пропускной способности, короче.

Тут нужно понять несколько вещей про специфику NVMe и про его подачу через сеть:
1. NVMe контроллер не может быть собран в "аппаратный RAID"
Я беру это в кавычки, потому что что называть аппаратным рейдом в 2023 году - тот еще вопрос. NVMe-диск прицепляется напрямую к процессору через PCI Express, в то время как обычные решения про RAID через HBA берут несколько lane-ов и имеют на себе прошивку, чип-сопроцессор и отдельный RAM и подключают диски на себя. Нельзя просто так взять NVMe-диск и воткнуть в "RAID-контроллер", в плату RAID, потому что дело именно в наличии контроллера и прошивки на стороне самого диска (бомжовые берут Generic-прошивку от производителя матплаты, но она всё равно нужна). Ожидается, что вы подключаете NVMe напрямую к соответствующему процессору, поэтому любая блочная абстракция по этим дискам всегда будет программной.
2. В NVMe нет смысла делать RAID 0
Блоки памяти внутри самого диска распараллеливаются. Этот самый RAID0 у вас всегда включен и всегда применяется средствами контроллера NVMe внутри диска. Из-за этого у вас получится так, что программный RAID1 и программный RAID10 на NVMe дисках отличаются по скорости в пределах погрешности, опять же если у вас однопроцессорный сервер и они подключены в рамках одного узла NUMA. Чтобы у вас там все не ломалось есть механизмы коррекции ощибок средствами контроллера по аналогии с Patrol Scrub для RAM.
3. NVMe контроллер не является SCSI-совместимым контроллером
Из-за этого у него всё свое в том числе сетевой стек. Ради обратной совместимости поддерживается подача NVMe-дисков через традиционные протоколы впроде iSCSI или FCP (Fiber Channel Protocol), но это не рекомендуется делать.
Основные варианты сетевого транспорта NVMe-oF:
- NVMe over InfiniBand
- NVMe over Fiber Channel
- NVMe over Ethernet (имеет несколько вариантов):
   - NVMe over RoCE
   - NVMe over iWarp
   - NVMe over TCP (про него речь в новости)
Для обратной совместимости можно подать диски через:
- iSCSI
- FCoE
Из-за технических ограничений API SCSI возникают накладные расходы по работе с командами, поэтому не рекомендуется использовать чистый FC и тем более FCoE, а также iSCSI средствами ОС для работы с этими дисками.

Если вы не покупали выделенную Storage-сеть средствами InfiniBand или Fiber Channel (который медленнее и дороже чем даже Infiniband), а пользуетесь Ethernet сетями для организации сети хронения, то вы можете использовать RDMA для подачи этого диска. В зависимости от того, кто производитель вашего сетевого адаптера у вас будет либо RoCE (это по сути RDMA over UDP) или iWarp (это RDMA over TCP).
RDMA убирает нагрузку с процессора по работе с сетевым стеком для стораджа и снижает задержки. Протоколы гуглятся.

В общем вы уже начали понимать, к чему я клоню...

> А какой "use case" у этой технологии?

NVMe over TCP будет работать быстрее чем iSCSI, спору нет, но может просто настроить iWarp?

Просто RDMA снизит задержки и при правильной конфигурации RoCE выдаст вам прекрасную производительность. В случае с применением 100GB адаптеров Ethernet вы переплюнете абсолютно всё что только можно. Но я могу понять, почему люди этого не делают:
- Вам нужны сетевые карты, которые его умеют (Nvidia/Mellanox, Cavium/QLogic, Broadcom)
- Вам нужно обратиться к сетевому администратору для настройки сети, потому что вам требуется расширения Ethernet DCB на сети, чтобы это работало правильно

Альтернативой является iWarp, который снижает нагрузку на CPU и поддерживается на сетевых адаптерах Chelsio, Intel, Cavium/QLogic. Его настраивать слегка проще, но вам все равно потребуется настроить DCB и lossless-сеть для того чтобы приблизиться к тем низким задержкам, которые даёт RoCEv2. И да, у вас будет TCP.

По моему скромному мнению, NVMe over TCP существует для специфического юзкейса, когда вы понакупили себе дисков NVMe в сервера, а на нормальную сетевку вам денег не хватило, поэтому у вас не поддерживается RDMA.
Опять же, те кто так производит закуп серверного оборудования скорее всего и про NVMe over TCP не в курсе, поэтому будет настраивать iSCSI себе везде... в общем на ваш вопрос про "use case" у меня нет однозначного ответа.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #169

161. Сообщение от Аноним (-), 18-Окт-23, 18:21   +/
Да так. Эндрю Танненбаум брал грант на усовершенствование Миникса3.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #120

162. Сообщение от Анонин (?), 18-Окт-23, 21:49   +/
> легче говно код написать

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

> я уже старый пердун, но в МОЁ ВРЕМЯ

возможно в то время средний погромист был умнее компилятора
но увы, те времена прошли, и слава богу))

> все старались писать оптимизированный код сразу

Похвально, вот только сколько времени ты будешь писать оптимизированный код на асме?
Пока ты будешь это делать, Вася на си уже напишет не такой оптимальный и он уже будет решать задачу.
Потому Васю попросят (или не попросят) ускорить свой код, а твой.. ну, останется у тебя.


Ответить | Правка | Наверх | Cообщить модератору
Родитель: #150 Ответы: #166

163. Сообщение от Анонин (?), 18-Окт-23, 21:52   +/
Угу, жили безопасно до глубокой старости, ну... лет до 25-30 в лучше случае))
Зато их мог сожрать саблезубый тигр, или медведь, или просто помереть с голоду... Зато все натуральное было!
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #151 Ответы: #174

164. Сообщение от bOOster (ok), 19-Окт-23, 07:38   +/
Очередной раз придурки не знают что такое Компоновщик/Линковщик?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #132

165. Сообщение от PnD (??), 19-Окт-23, 16:11   +/
В сях через goto реализуется аналог "try…finally" (или "defer") из ЯВУ.
Тут большинство народа постоянно путает C с ЯВУ и требует чего-то странного ("переписать на …").

* Я вот, когда для задачи таки нужен C, прямо так и пишу (там где нужен финализатор с зачисткой):
goto finally;

finally:

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

166. Сообщение от svsd_val (ok), 19-Окт-23, 16:40   +/
> прикольно ты в противовес супер-оптимизированному асму ставишь сразу говнокод))

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

> современные компиляторы прекрасно оптимизируют код, при этом нужно тратить время на те
> места, где компилятор не справился

Да, но даже они проигрывают в рациональности и пониманию целей и оптимизации человека.

> возможно в то время средний погромист был умнее компилятора
> но увы, те времена прошли, и слава богу))

Через чур уверенное заявление ...

> Похвально, вот только сколько времени ты будешь писать оптимизированный код на асме?

И так я буду писать на 10-30% дольше, в зависимости от задачи, так как есть понимание где и какой подход в каких обстоятельствах лучше использовать.

Далее, речь шла не только об асме (чего до него докопались то ?) но и о простых оптимизациях в коде, брутфорс наше всё и конечно он хорошо справляется, маленький легко понятный код ))).... На примере строки, как ты будешь производить поиск в огромном объёме ? На удивление простой перебор циклом не очень хорошая идея )))

> Пока ты будешь это делать, Вася на си уже напишет не такой
> оптимальный и он уже будет решать задачу.

Пока у Васи код будет выполняться 10 часов мой выполнится за 10 минут. Пока это разовое задача/действие - да подход Васи предпочтителен, но стоит запустить его больше раз... Хотя мб в этом и цель, что бы оправдания найти или выполнять одну и туже работу дважды ?

> Потому Васю попросят (или не попросят) ускорить свой код, а твой.. ну,
> останется у тебя.

Если Вася не умеет писать более менее оптимальный код и не может структурировать его в голове, то и оптимизация у него будет на уровне ...

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

167. Сообщение от edo (ok), 19-Окт-23, 22:07   +/
RDMA сам по себе не решает проблему доступа к удалённому блочному устройству.
А оффлоады nvmeo* уже есть в сетевых картах, кстати
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #103

168. Сообщение от edo (ok), 19-Окт-23, 22:18   +/
Очереди и в sata есть, гораздо более жиденькие, конечно, но для большинства задач достаточные
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #40

169. Сообщение от edo (ok), 19-Окт-23, 22:23   +/
> 1. NVMe контроллер не может быть собран в "аппаратный RAID"

Все современные raid от lsi и adaptec (или как они там сейчас называются) умеют nvme-накопители.
Или вы про то, что массивы уже не будет nvme-устройством?

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

170. Сообщение от edo (ok), 19-Окт-23, 22:42   +/
> Интересно, когда pull request'ы в ядро проходят review,

Да. Все патчи публикуются в списках рассылки, где могут высказать свои замечания все желающие. В первую очередь, конечно, высказываются мейнтейнеры этого участка ядра.
Потом, если мейнтейнера патч устраивает, он его принимает.
Потом мейнтейнеры крупных блоков сбрасывают уже консолидированные патчи Линусу, и он принимает их в основную ветку.

Теоретически на каждом шаге после начального принятия кода может происходить отказ/требование доработки, но это уже аварийный механизм, на тот случай, если первый мейнтейнер что-то просмотрел

> есть ли принудительное использование статических анализаторов?

В описанном выше пути принятия кода статические анализаторы не участвуют. Как и регрессионные тесты. Но есть сторонние команды, которые этим занимаются. За счёт того, что перед каждым релизом ядра код на некоторое время замораживается (принимаются только исправления), у таких проблем есть большие шансы быть замечененными и не попасть в релиз

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

171. Сообщение от Аноним (171), 20-Окт-23, 14:55   +/
> Да даже если и на сишку с классам: наличие RAII уже само по себе избавило бы от этого убогого цирка с ручным управлением ресурсами и соответствующих CVE.

Не избавило бы. Сишникам только дай волю, они сразу полезут делать malloc'и и хранить строки в char*. У них квадратно-гнездовое мышление, переучить очень сложно. Типа "я 30 лет так делал и менять свои привычки не собираюсь, компилятор подвинься". Ну а потом естественно всё это феерично взрывается.

Комитету C++ нужно отправить весь этот сишный треш в утиль.

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

172. Сообщение от Аноним (171), 20-Окт-23, 15:00   +/
> без оверхэда, в одну команду

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

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

173. Сообщение от Аноним (171), 20-Окт-23, 15:07   +/
> Возьми дизассемблер и посмотри как много jmp в реальности

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

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

174. Сообщение от Вы забыли заполнить поле Name (?), 21-Окт-23, 15:25   +/
> Угу, жили безопасно до глубокой старости, ну... лет до 25-30 в лучше
> случае))
> Зато их мог сожрать саблезубый тигр, или медведь, или просто помереть с
> голоду... Зато все натуральное было!

Именно. Эволюционно человек расчитан максимум лет на 40 бесперебойной работы. Теперь же умирают не от медведей или тигров (хотя и такое бывает), а от сердечно-сосудистых заболеваний (на первом месте), онкологий и прочего. Об Альцгеймере древние люди и не думали.

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

175. Сообщение от space (?), 22-Окт-23, 14:55   +/
Подскажите лучше, как контролировать все что работает на gpu, а то проц молчит, а gpu дает доступ ко всему что на компе без вашего согласия :)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #152

176. Сообщение от Анонин (?), 25-Окт-23, 07:22   +/
Очередное доказательство того, что микроядра лучше
Ответить | Правка | Наверх | Cообщить модератору


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

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




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

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