The OpenNET Project / Index page

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



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

"wolfIP и passt - легковесные стеки TCP/IP, работающие без динамического выделения памяти"  +/
Сообщение от opennews (??), 14-Мрт-26, 12:54 
Разработчики криптографической библиотеки wolfSSL развивают TCP/IP стек wolfIP, оптимизированный для использования на встраиваемых устройствах, имеющих ограниченные ресурсы, а также для систем, работающих в режиме реального времени, и решений, требующих повышенной надёжности (Safety-Critical). Для предсказуемого потребления ресурсов в wolfIP не используется динамическое выделение памяти  - все буферы и таблицы сокетов имеют фиксированный размер и настраиваются на этапе компиляции. Код проекта написан на языке Си и распространяется под лицензией GPLv3...

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

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

Оглавление

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

1. Сообщение от Аноним (1), 14-Мрт-26, 12:54   +7 +/
Странно, почему весь критический код не пишется подобным образом. :)
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #8, #16, #18, #25, #72

2. Сообщение от Аноним (2), 14-Мрт-26, 12:56   –3 +/
> Использование при обработке сетевых пакетов предварительно выделенных в статической памяти буферов. Вызовы malloc и free не используются.

Жаль, что это не спасет от других тысячи способов получить UB на этом прекрасном языке.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #6, #32, #35, #61

6. Сообщение от Аноним (6), 14-Мрт-26, 13:31   –2 +/
> Жаль, что это не спасет от других тысячи способов получить UB на этом прекрасном языке.

На этом прекрасном языке написали легковесный TCP/IP стек, в отличие от...

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

8. Сообщение от шолб (?), 14-Мрт-26, 13:40   –3 +/
Тогда не получится делать важное табло с надутыми щоками, которое очень нужно для залезания на табурет и декламирования "посмотрите какую сложную уробору я сделяль, как мощны мои лапищи." Современное программирование с технической стороны не про практичность, а про самоутверждение. А если и условия потребуют практичности, то она будет уровня "от сохи". Зато с апломбом.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #29, #66

9. Сообщение от Аноним (54), 14-Мрт-26, 13:40   +1 +/
Кто-нибудь из этих проектов добавит, наконец, SCTP для микроконтроллеров?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #24, #31, #46

10. Сообщение от Аноним (2), 14-Мрт-26, 13:41   +2 +/
Плохая попытка.
https://github.com/smoltcp-rs/smoltcp
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #13, #54

11. Сообщение от Аноним (11), 14-Мрт-26, 13:56   +/
Правильно писать: на этом прекрасном языке написали вагон и маленькую тележку стеков которыми пользуются все, в отличие от... Ожидаемо что и UB в штуках которыми не пользуются никого не интересуют. А если начинают пользоваться, то там тоже всякого вылазит, но чаще всего "ну мы прост не реализовали эту штуку реализованную ВЕЗДЕ, во всех других ЯП, потому что нишмагли"
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6

12. Сообщение от Аноним (12), 14-Мрт-26, 14:13   +/
> оптимизации на базе инструкций AVX2

Наверняка в QEMU внедрят и дропнут кору дуба.

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

13. Сообщение от Аноним (13), 14-Мрт-26, 14:20   +/
ls -lh smoltcp/target/release/libsmoltcp.rlib
17M авг  1  2022
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10 Ответы: #15, #17

14. Сообщение от Аноним (29), 14-Мрт-26, 14:36   –2 +/
> требующих повышенной надёжности (Safety-Critical)
> написан на языке Си

Классика жанра. 🤦 Пишем софт для "повышенной надежности" с использованием языка, в котором эта надежность максимально скомпрометирована by design.

В их списке вулнов полно классических сишечных выходов за пределы буфера, но выводов такие ребята традиционно не делают:

https://www.wolfssl.com/docs/security-vulnerabilities/

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

15. Сообщение от Аноним (2), 14-Мрт-26, 14:48   +/
[profile.release]
debug = 2

и отсутствие LTO, так как ты собрал это как библиотеку.

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

16. Сообщение от Аноним (16), 14-Мрт-26, 14:48   +6 +/
Вопрос из серии "почему в Солярис не ставят кресла с катапультой". Потому что это дорого. Раньше, когда информатизация была на начальном уровне, мир готов был мириться с инцидентами ИБ, потому что "писать более надёжно" было дороже, чем принять риски ИБ. Сейчас не так, всеобщая информатизация ведёт к потере гигатонн бабла из-за взломов и атак. Поэтому мир и начал двигаться в сторону секурити, начал закачивать туда бабло. Потому что это стало дешевле, чем терять деньги на атаках.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

17. Сообщение от Аноним (29), 14-Мрт-26, 14:49   +/
И что ты хотел сказать размером промежуточного файла растового компилятора? Нужно финальный бинарь мерять.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #13 Ответы: #39

18. Сообщение от Jh (?), 14-Мрт-26, 14:56   +1 +/
не факт что так лучше для критического софта. Переполнение стека никто не отменял)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #65

19. Сообщение от Аноним (19), 14-Мрт-26, 14:56   +/
Реалисты же. Сейчас практически все нормальные сдк для микроконтроллеров - на C, хрен туда впихнешь библиотеку на расте.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14 Ответы: #26, #27, #36

23. Сообщение от Аноним (54), 14-Мрт-26, 15:57   +1 +/
Соберём с --without-avx2.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12 Ответы: #38

24. Сообщение от Аноним (24), 14-Мрт-26, 16:11   +/
В wolf даже IPv6 не завезли (хотя с IPv4 геморнее из-за де-факто необходимости пересобирать не влезающий в MTU пакет, если только не захардкодили бит выключающий это), какое там SCTP. Плюс у вас роутер, который в проде сегодня зачем-то будет использовать IPv4, натить ничего кроме TCP и UDP не умеет.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #45, #56

25. Сообщение от timur.davletshin (ok), 14-Мрт-26, 16:24   +/
В подобных стеках традиционно масса дыр.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

26. Сообщение от Аноним (29), 14-Мрт-26, 17:29   +1 +/
> Реалисты же.

В реальности safety-critical и С не очень сочетаются, о чем говорит уже более полувека не прекращающийся поток классических сишечных ошибок.

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

27. Сообщение от Аноним (29), 14-Мрт-26, 17:33   +/
> Сейчас практически все нормальные сдк для микроконтроллеров - на C, хрен туда впихнешь библиотеку на расте.

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

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

29. Сообщение от Аноним (29), 14-Мрт-26, 17:43   +/
> нужно для залезания на табурет и декламирования "посмотрите какую сложную уробору я сделяль, как мощны мои лапищи." Современное программирование с технической стороны не про практичность, а про самоутверждение

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

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

31. Сообщение от Аноним (31), 14-Мрт-26, 17:57   +/
https://github.com/richlegrand/usrsctp-esp32
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9

32. Сообщение от Аноним (-), 14-Мрт-26, 18:07   +/
Угу.

См. CVE-2009-1897.

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

34. Сообщение от Гуманоид (?), 14-Мрт-26, 18:12   +/
Почему сразу не было сделано таким образом?
Ответить | Правка | Наверх | Cообщить модератору

35. Сообщение от Аноним (-), 14-Мрт-26, 18:23   +1 +/
Ave Ada. Ave SPARK.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #55

36. Сообщение от Аноним (-), 14-Мрт-26, 18:33   +/
Rust: #[no_mangle] pub extern "C" fn my_func()

Ada: pragma Export (C, My_Func, "my_func")

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

37. Сообщение от Аноним (37), 14-Мрт-26, 19:09   +/
На C++ это не проблема.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15

38. Сообщение от Аноним (37), 14-Мрт-26, 19:12   –1 +/
Ну уберут `--without-avx2`, расскажут "неразумным" любителям "хлама" что "нужно двигаться дальше".
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #23 Ответы: #43

39. Сообщение от Аноним (37), 14-Мрт-26, 19:19   +/
Размер финального стрипнутого бинаря - 11M. Да, он всасывает всю функциональность smoltcp, и превращает её в cишную либу, кроме smoltcp и тонюсенькой обёртки вокруг неё в том бинаре ничего нет.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17 Ответы: #49

40. Сообщение от Аноним (40), 14-Мрт-26, 19:46   +/
>использоваться в качестве работающего в пользовательском пространстве TCP/IP-стека, подменяющего сетевой стек

Зачем охранять ключи, если в пользовательском пространстве доступен весь код.
>(bare-metal)

Привет, руткит.
>все буферы и таблицы сокетов имеют фиксированный размер и настраиваются на этапе компиляции.

Атакеру много сокетов не надо.

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

41. Сообщение от Аноним10084 и 1008465039 (?), 14-Мрт-26, 19:57   +/
Не использовать динамическую память - одно из десяти NASA'вских правил для критичного кода
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #73

42. Сообщение от Аноним (42), 14-Мрт-26, 20:20   +/
Странно, что не на Zig. Он как раз под такое и заточен.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #44, #53

43. Сообщение от Аноним (54), 14-Мрт-26, 20:24   +/
Попросим какого-нибудь чата заменить ассемблерные вставки с этими вашими AVX на generic код на Сишке.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #38 Ответы: #69

44. Сообщение от Аноним (54), 14-Мрт-26, 20:27   +1 +/
И не подерётесь с рaстаманaми, и не подерётесь ;)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #42

45. Сообщение от Аноним (54), 14-Мрт-26, 20:31   +/
Во-первых, мне это в серой зоне адресов.
Во-вторых, мой роутер на OpenWRT в IPv6 может.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #24

46. Сообщение от Страдивариус (?), 14-Мрт-26, 20:37   +1 +/
Можно. А смысл?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #57

47. Сообщение от Аноним (47), 14-Мрт-26, 20:50   +/
По описанию на удивление очень годно и вкусно
Ответить | Правка | Наверх | Cообщить модератору

48. Сообщение от Аноним (48), 14-Мрт-26, 20:55   +/
Можно ли его собрать с выключенной поддержкой IPv4 и прочего барахла? Нужен только IPv6 SLAAC.
Ответить | Правка | Наверх | Cообщить модератору

49. Сообщение от Аноним (29), 14-Мрт-26, 21:05   +/
> Размер финального стрипнутого бинаря - 11M
> в том бинаре

Бинаря какой именно программы/библиотеки? Давай ссылку на код и опции сборки.

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

50. Сообщение от Аноним (50), 14-Мрт-26, 21:11   –1 +/
> Код проекта написан на языке Си
> Safety-Critical

Ну смешно же.

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

51. Сообщение от Dmitry (??), 14-Мрт-26, 21:18   +/
А как с производительностью у такого стека?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #71

52. Сообщение от Сладкая булочка (?), 14-Мрт-26, 21:40   +/
> В реальности safety-critical и С не очень сочетаются

Если бы не сочетались, то никто бы не писал верифицированный компилятор для с.

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

53. Сообщение от Сладкая булочка (?), 14-Мрт-26, 21:53   +/
> Он как раз под такое и заточен.

Пока он заточен на то, чтобы в новых версиях ломать синтаксис.

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

54. Сообщение от Аноним (54), 14-Мрт-26, 21:58   +/
И многие знают про эту вашу "хорошую" попытку?  А тот же lwIP на Сишке знают многие микроконтроллерщики.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10

55. Сообщение от Аноним (-), 14-Мрт-26, 21:59   +/
> Ave Ada. Ave SPARK.

Rest in peace Arian V, rest in peace...

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

56. Сообщение от Аноним (-), 14-Мрт-26, 22:00   +/
> В wolf даже IPv6 не завезли (хотя с IPv4 геморнее из-за де-факто
> необходимости пересобирать не влезающий в MTU

Это как? В новости написано "Из особенностей passt можно отметить: поддержка IPv6 помимо IPv4" - врут чтоли?

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

57. Сообщение от Аноним (54), 14-Мрт-26, 22:01   +/
Не было бы смысла - не спрашивал бы.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #46

58. Сообщение от Аноним (54), 14-Мрт-26, 22:04   +/
Просмеёшься, потом приходи.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #50

59. Сообщение от Аноним (-), 14-Мрт-26, 22:32   –1 +/
> В реальности safety-critical и С не очень сочетаются, о чем говорит уже более
> полувека не прекращающийся поток классических сишечных ошибок.

В реальности большая часть safety critical систем написана на си. А для ваших пафосных языков - даже просто гайдлайнов как sefety critical делать по сути - нет. И сертификаций и тех кто головой бы за это отвечать - тоже еще поискать. Или вон там у господ тулчейн на основе LLVM - проприетарный в хлам. Лицензия позволяет. Так что если не заплатил проприетарщику - во тебе, а не safety critical. Не, panic в runtime - совсем не "safe" в том смысле что контроль над ситуацией полностью теряется и это упс.

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

60. Сообщение от Аноним (-), 14-Мрт-26, 22:34   –2 +/
> Rust: #[no_mangle] pub extern "C" fn my_func()

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

> Ada: pragma Export (C, My_Func, "my_func")

Как показал пример Arian V - продолбать ракету ценой несколько гигабаксов можно и без таких сложностей.

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

61. Сообщение от Аноним (61), 14-Мрт-26, 22:53   +2 +/
> Жаль, что это не спасет от других тысячи способов получить UB на этом прекрасном языке.

От тысяч способов получить UB спасает осведомлённость о возможности UB, которую программист может почерпнуть из документации.
Но это относится только к тем, кто понимает - UB в стандарте языка есть предупреждение, а не предписание.

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

62. Сообщение от Аноним (-), 14-Мрт-26, 23:07   +/
> См. CVE-2009-1897.

В 2009 сабж еще не релизнулся даже...

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

64. Сообщение от шолб (?), 14-Мрт-26, 23:49   –1 +/
Ты этот современный софт глазами видел, да? Да, именно что уровень хеллоуворлдов. И таки да, либо сумрачным (чайще всего ещё и упоротым) гением, либо толпой мартышек с сдвг. Нету у меня для вас других программистов, т-щ комментатор. И заказчиков тоже нету.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #29

65. Сообщение от senaemail (ok), 15-Мрт-26, 00:15   +/
Так смайлик в конце об этом и намекает :)

Задавать размеры буферов на этапе компиляции это очень странная идея, граничащая с глупостью. Чем это безопаснее, чем задать размеры буферов, например, в конфиге?

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

66. Сообщение от Аноним (66), 15-Мрт-26, 00:44   +/
" - Дядя, ты что - Арлекин-Петрушка?". В такой манере, как в сабже, на мой взгляд, значительно сложнее делать что-то нетривиальное - всё управление структурами внутри статически выделенной памяти, расчёт/запоминание их диапазонов и смещений и прочее ты ложишь на свои плечи, вместо, например, тупого динамического выделения нового куска памяти под очередной новый массив/структуру. Разве что реализация какого-нибудь кольцевого буфера там будет (почти) одинаковая. И в обоих случаях у тебя одинаковый шанс посчитать смещение неправильно и вылезти за пределы буфера.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8

67. Сообщение от Аноним (29), 15-Мрт-26, 00:46   +/
> От тысяч способов получить UB спасает осведомлённость о возможности UB, которую программист может почерпнуть из документации.

Каасика жанра: чтобы не было ошибок - просто не делай ошибок.

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

69. Сообщение от Аноним (69), 15-Мрт-26, 01:39   +/
Ну и будешь сам свой форк поддерживать, а дистры просто кору дуба дропнут, сначала в этом пакете, а потом скажут "многие пакеты на коре дуба неработоспособны, пора её совсем дропнуть".
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #43

70. Сообщение от Аноним (70), 15-Мрт-26, 01:46   +/
Ага, щщас.

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

А вот повседневный код — увы, нет. Раст выплёвывает копролитные погадки, слепленные из десятков, а то и сотен библиотек и весящие многие мегабайты, даже в релизном режиме.

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

71. Сообщение от Аноним83 (?), 15-Мрт-26, 03:13   +/
Да никак, он написан чтобы на всяком мусоре сеть появилась.
4200 строк нужно только для TCP, и то это мало если делать хорошую реализацию, со всеми фичами, которая сможет полностью канал утилизировать.

Авто написали минимально рабочий код, чтобы хоть как то работало.

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

72. Сообщение от Аноним (1), 15-Мрт-26, 07:24   +/
Забавно, что ни один эксперт который зашёл в этот тред не не написал, что работа с указателями тупо быстрее. А так как миром правят корпорации которым подавай все самое быстрое для высоконагруженных систем... Ну вы поняли. ;)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

73. Сообщение от Аноним (73), 15-Мрт-26, 08:51   +/
> Не использовать динамическую память - одно из десяти NASA'вских правил для критичного кода

Да и в MISRA насколько я помню сие весьма привествуется. Если вы не юзаете *alloc()/free и проч - вы и не облажаетесь в этом, соответственно. И из уравнения стабильности сиситемы вдолгую - выпадает "heap usage". Остается только стэк. Правда, отдельные таланты типа тойоты умудряются и с этим облажаться. Но от совсем идиотов - никакие measures не помогут.

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

74. Сообщение от Аноним (-), 15-Мрт-26, 09:46   +/
> Чем это безопаснее, чем задать размеры буферов, например, в конфиге?

Если ты задаешь такие вопросы - тебе рано в safety critical.

Например:
1) Это намного лучше подлежит статическому анализу, анализу потребления ресурсов и оценке worst cases. Нет, статический анализатор и проч - понятия не имеют - будет ли успешен этот вызов динамической аллокации в этой системе в этих конкретных условиях или где.

2) Если у тебя нет *alloc() и free() то ты в них не облажаешься.

3) Более того ты не облажаешься и в проверке того что *alloc() вернул null - ибо "never happens".

4) И вообще из уравнения выпадает "heap memory usage". Если вся остальная система следует тому же паттерну, это намного более надежный и предсказуемый софт, для которого намного проще оценивать долговременную надежность и стабильность. Потому что если ты alloc() а потом free() забыл - оно может месяцами подтекать память пока она не кончится окончательно, и отловить ВСЕ такие плюхи - упс.

Стэк это automatic mem management по сути. В простейшей форме. И требующий внимания к лайфтаймам, да. Но это работает. Еще можно заводить просто переменные в памяти с статичной аллокацией. Это не обязано быть в стеке. Но факт в том что heap можно из уравнения убрать. И динамическое управление памятью. Так намного надежнее: если на старте системе хватило памяти - она уже не закончится. Хоть как.

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


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

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




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

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