В подсистеме Netfilter выявлена уязвимость (CVE-2023-6817), потенциально позволяющая локальному пользователю повысить свои привилегии в системе. Проблема вызвана обращением к памяти после её освобождения (use-after-free) в модуле nf_tables, обеспечивающем работу пакетного фильтра nftables. Уязвимость проявляется начиная с версии ядра Linux 5.6. Исправление уязвимости предложено в тестовом выпуске ядра Linux 6.7-rc5 и перенесено в актуальные стабильные ветки 5.10.204, 5.15.143, 6.1.68 и 6.6.7...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=60338
опять китайцы...
Китайцы нашили, а добавили дыру европейцы> author Stefano Brivio <sbrivio@redhat.com>
> Китайцы нашили, а добавили дыру европейцы
>> author Stefano Brivio <sbrivio@redhat.com>
>а в импортозамещённой например астре есть такая?
Разумеется, думаете там аудит каждого коммита делают?
Вполне возможно. Вот только там, получив рута через эксплоит, не сильно легче станет. На ютубе есть ролик про расщепление рута на астре, чтоб понятнее стало.
Астра базируется на более старом ядре, поэтому именно в данном случае она безопасна :D
Сишники опять в указателях запутались. Да что ж такое то?
Безопастный обладает искусственным интеллектом, чтобы догадаться, что имеются дублирующиеся данные?
когда ты чуть-чуть почитпешь про раст, ты поймешь, что тебн не нежно вручную освобождать память. и дабл фри - это картошка в мак-дональдсе.
> нежно вручную освобождать память
> дабл фри - это картошка в мак-дональдсеИ что ты забыл на техническом ресурсе, болезный? Иди в свой мак, не забудь взять с собой мак.
Мак на минуточку корнями уходит в BSD, да и apple постоянно выкладывает код в открытый доступ.
Вот недавно выложила ядро для macOS 14.2.
opennet ru/opennews/art.shtml?num=60324В общем уважаемая часть опенсорс сообщества!
а что, у них была опция не выкладывать?
Конечно. Там же не раковая гпл - которая тебя заставляет, а свободная APSL - с которой у тебя есть свобода выкладывать.
Поэтому они не были обязаны, но все равно выложили. Какие они молодцы))
Просто вынесли мусор. Хорошее дело, да.
Конечно хорошее! Я когда макулатуру выношу к мусорке, то на кульке так маркером и пишу.
И бомжи ее забирают и сдают куда нужно.
Я забочусь о экологии и бомжах.
В принципе, можно увидеть в этой истории поучительную притчу о "дружбе" корпораций и *BSD-дистрибутивов.
И не только BSD.
У меня под окном живут бездомные котики. Я их подкармливаю, некоторых даже лечил и на стерилизацию возил.
Так вот, котики кушают то, что я им приготовлю, и даже если они захотят мраморную говядину, то они ее не получат. И будут кушать, "что дали".Пусть это будет притча про "сообщество линукс, которое в большинстве потребляет и тех кто им корм в миску насыпает".
С разницей в том, что котики мне всегда благодарны, они милые и благодарно мурчат.
В отличии от других которые только ноют, требуют и их, к сожалению, нельзя стерелизовать.
Вот только "сообщество линукс" вместо мурлыканья производит кое-что помасштабней, в частности, серверную систему №1 в мире :)
Сообщество? Серверную систему №1?
Ты наверное хотел сказать "корпы и погромисты на их зп". Что само ядро на 80+%, что всё остальное.
А "сообщество" только производит только метан и проклятья в сторону тех, кто действительно делает линукс.
> Ты наверное хотел сказать "корпы и погромисты на их зп". Что само ядро на 80+%, что всё остальное.Не хотел. Не было бы одного финского студента и кучи других чуваков, которые кодили just4fun — не было бы Linux.
Не было бы корпов и их денег - поделка финского студента и других чуваков осталась бы на уровне Хурда, TempleOS, или, упаси боже, ReactOS. И все что они бы делали - пытались бы написать рабочий драйвер для имеющегося оборудования.
> Не было бы корпов и их денегА было бы планирование, и мы бы уже жили на Марсе в автономных городах. Linux (или Hurd) занял бы достойное место в проведении экономических расчетов, влияющих на судьбу человечества. А не маршрутизировал рекламу по интернет-помойке для скучающих офисных уеб-погромистов.
Это было 32 года назад. С тех пор много воды утекло.
Покажи, пожалуйста, на что сейчас влияет "сообщество" в развитии линукса?
Что оно такого написало в последние лет 5-10?
Может приведешь примеры как "сообщество" сказало свое "жесткое нет!" и корпы пошли на уступки?
Может Линус решил не добавлять системд, потому что "сообщество" было против? Или отказался добавлять раст?
Или может "сообщество" сейчас как соберется и как начнет поддерживать дропающиеся иксы?Сейчас на "сообщество" всем нас##ть. Оно где-то там копошится, громогласно пищит, что-то требует, вспоминает былые заслуги уже ушедших людей, всячески пытаясь сообщить о свой значимости и огромном вкладе в разработку линукса. Но его что-то не слышно и не видно))
Подожди массовых сокращений и снижения ЗП. И ты услышишь голос сообщества, брюки потеряешь.
>ы наверное хотел сказать "корпы и погромисты на их зп"А корпы и погромисты на их зп не люди что-ли? И эти тоже часть "сообщества линукс". Участие всяких оракелов, айбиемов и прочих hpe дает линуксу очень много, и потом я это юзаю на своих серверах и десктопах. Вот что дадут бздям те отрыжки, которые выкидывает в мусорку яблоко, мне совершенно непонятно.
Таких как ты меньшенство.
Большая часть будет кричать, что "корпы портят их линукс", рассказывать про какиров одиночек которые двигают индустрию.
Достаточно зайти в любую тему про wayland или системмд.> Вот что дадут бздям те отрыжки, которые выкидывает в мусорку яблоко, мне совершенно непонятно.
Что дает без понятия, но тут сам факт что они выкладывают код, который не обязаны выкладывать.
А корпы специалистов с Нибиру набирают? Или, может, там один плейбой-мультимиллиардер в суперкостюме за всех отдувается?
Конечно нет, но как только программер идет на работу к корпам, то, если судить по этому форуму, его из сообщества вычеркивают.
Давненько новость была о том, как мейнтейнер дров, решил сложить полномочия.
И в комментах зубоскалили, что он просто пойдет на зарплату корпам.
Говорят, Китай запустил ракету на метане первым?
Проекту FreeBSD сильно помогло это выложенное? Такое впечатление, что это выложение на от-сь. Чтоб на любую критику о зажиливании показать пальцем, дескать, мы вон там что-то выложили.38
> Проекту FreeBSD сильно помогло это выложенное?Не знаю. Но что мешает FreeBSDшникам взять эти кода и использовать? Лицензия позволяет.
Или яблоко еще и в FreeBSD патчи должно писать? И почему именно Free? А OpenBSD тебе не важно??> мы вон там что-то выложили
Не что-то, а исходные кода. Кто хочет - пусть берет и пользуется.
Лицензия не покрывает патенты. После использования кода Mac можно неслабо отгрести потом в судах.
Свободненько, ничего не скажешь.Но вообще было бы полезно создать прецедент "Apple против *BSD", чтобы все врунишки, рассказывающие про "хорошую" Apple, дружно обтекли.
Можно, делай!
Создай свой проект, тащу туда маоквский код, создай прецедент.
Сообщество тебе будет благодарно (но это не точно)
Apple против фри или опенка — было бы куда более показательно, чем против noname васянского проекта.Но их разрабы хорошо знают своё место и не будут сердить своих корпоративных покровителей.
> Но их разрабы хорошо знают своё место и не будут сердить своих корпоративных покровителей.Ну да, ни кода, ни донатов, но с какого-то перепугу - "покровители" (ну, ведь анонимы на опеннете дружно повторяют - "а значит, это правда!") ...
И конечно же, MS c ораклой, IBM, гуглом и сони из платиново-золотых спонсоров - "это другое, понимать надо!".
- Кода, кода, вчера.
> Проекту FreeBSD сильно помогло это выложенное?А проект FreeBSD сильно нуждается в этой помощи?
Судя по тому, как он стагнирует — весьма.
Просто они уже достигли совершенства, поэтому им не надо развиваться дальше.
Заканчивай уже далдонить эту мантру. Я тебе про Фому, а ты мне про Ерёму.
> что тебн не нежно вручную освобождать памятьА вот расту память освобождать нужно, так и скажите: "придумали сборщик мусора, но признать победу паскаля не можем -- стыдно."
Только в Расте нет сборщика мусора в классическом его понимании. В Паскале его, кстати, тоже нет.
> Только в Расте нет сборщика мусора в классическом его понимании.есть и ещё какой - весь мусор на раст побежал!
Мусор не может бегать, поэтому остался на сишке.
Мусор обычно ветром носит. Так что таки раст.
Мы тут не в Париже, у нас мусор в баках (*.c & *.h) лежит.
В Паскале нет, только если это не его урезанный диалект Оберон.
Во-первых, иногда нужно, Во-вторых, совсем не понимаешь что произошло выше. Это как раз случай оптимизации использования ресурсов, где нужно руками управлять памятью.
> дабл фри - это картошка в мак-дональдсеБезопасно - и точка.
> Безопастный обладает искусственным интеллектом, чтобы догадаться, что имеются дублирующиеся данные?Он обладает borrow checker, котооый не даст тебе дважды удалить один и тот же кусок памяти. Как бы в этом весь смысл "безопастного".
Зато они добавили goto!
Теперь код еще ближе приблизился к лапше, а применение статических анализаторов стало еще сложнее.
В общем... у меня нет слов за которые не забанят)
Предложи вариант без goto, для которого не надо будет шариться по файлу в поисках, что же он делает.
Предлагаю использовать defer. Хотя стоп, в эту убогость defer еще не завезли...
Может nested function с каким-то нормальным названием вроде finalize, где будет анлочится все что было залочено и чиститься память если нужно?
Не кажется вам, что всё это извращение?
Переход - это нормальная в т.ч. низкоуровневая инструкция, и весь этот блуд по отмене переходов в угоду неосиляторам - ну такое.
Ого, оказывается те кто не хочет, чтобы этой фигней пользовались - неосиляторы?
Записываю туда себя, Дейкстру, Кернигана, Ритчи...
Да я просто в отличной компании!Это нормальная низкоуровневая инструкция, но не в случае "мне лениво добавлять переменную в цикл", "я не понимаю что такое нестед функция", "дефер... а что это?"
По хорошему каждый такой прыжок должен быть обоснован.. если бы мы говорили не про программеров ядро.
> Записываю туда себя, Дейкстру, Кернигана, Ритчи...Кто все эти люди? Судя по тому, что goto не любят — смузи-растаманы какие-нибудь.
[сарказм]
Дейкстру - да ... А Керниган с Ритчи тут при чём ?.Goto выпилили фанаты ООП и диаграмм Несси-Шнейдермана ...
Хотя, надо признаться, выпилили не просто так. Выпилили по поводу математического доказательства правильности алгоритма (чем сейчас никто не занимается).Ну а по поводу дыры ... Начинается жатва подсистемы nftables... И это только цветочки.
Они в своей книге (еще 88 года) пишут что гото плохо, приводят пример где его вроде как можно использовать, а потом пример, как можно переделать на без-гото.
И делают вердикт "нужно использовать редко, если вообще стоит использовать"В теме ниже приводили цитаты
opennet ru/openforum/vsluhforumID3/132420.html#103> Выпилили по поводу математического доказательства правильности алгоритма (чем сейчас никто не занимается).
Что-то мне подсказывает, что даже алгоритмы проверки кода могут страдать от случайных прыжков.
Так это уже 88 год ... Тогда goto было совершенно неприличным словом (хотя практически во всех языках оператор такой был ... даже в Perl). Конец 80х - это были годы фанатов ООП, и всех несогласных выпиливали ...
> Предложи вариант без goto, для которого не надо будет шариться по файлу в поисках, что же он делает.C goto не надо шариться? Ясно, понятно...
Ага, видишь goto — можно закрывать код и удалять его нафик.
Вот так, добрых полвека прошло, а проклятие Дейкстры владеет умами.Вбитая со студенчества инстинктивная неприязнь к goto — это уродливая деформация, точно так же ухудшающая код, как и полное отсутствие структуры (бывшее нормой во времена Дейкстры). Каждая строчка кода должна быть обдумана и оправдана. Даже goto. Если такой подход позволяет реализовать что–либо эффективнее, проще и лаконичнее — правильным будет использовать goto, а не городить многоэтажные баррикады из скобочек и макросов, ссылаясь на затрёпанную догму: «общеизвестно (sic!) что goto — дурной тон».
> применение статических анализаторов стало еще сложнееНисколько не стало. Как был статичный граф, так и остался. Или это так, случайно высосанный из пальца аргумент, ради нездоровой дискуссии?
Керниган и Ритчи в книге Kernighan & Ritchie 1988 глава 3.8 Goto and Labels пишут следущееC provides the infinitely-abusable goto statement, and labels to branch to. Formally, the goto
statement is never necessary, and in practice it is almost always easy to write code without it.
We have not used goto in this book.Приводят один пример где его можно использовать, кстати таки цикл, но добавляют "This organization is handy if the error-handling code is non-trivial, and if errors can occur in several places."
А резуюмируют это "it does seem that goto statements should be used rarely, if at all"
Так что даже создатели СИ считают, что goto это плохо.
> Так что даже создатели СИ считают, что goto это плохо.Но тем не менее добавили его в C. Наговорив всяких слов, которые звучат больше как извинение перед Дейкстрой, чем как запрет goto во всех случаях, кроме тех когда без него не обойтись.
Без goto _всегда_ можно обойтись, если поставить перед собой такую цель. И Керниган с Ритчи об этом знали. Но добавили goto в C, и пробормотали что-то вроде "ну goto типа плохо, но типа удобно иногда".
Именно!
Они даже написали пример как из
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
if (a[i] == b[j])
goto found;
/* didn't find any common element */
...
found:
/* got one: a[i] == b[j] */можно сделать
found = 0;
for (i = 0; i < n && !found; i++)
for (j = 0; j < m && !found; j++)
if (a[i] == b[j])
found = 1;
if (found)
/* got one: a[i-1] == b[j-1] */
...
else
/* didn't find any common element */Выше написали несколько вариантов начиная от defer, заканчивая nested функциями.
То что они оставили гото в С - может это была необходимость, чтобы фанатики не воняли.
А может уже написанный код перестал бы работать.
А может это ошибка ценой в лямы долларов, как один сэкономленный байт в null-terminated string.Но они однозначно осуждают его использование, а не "пробормотали что-то вроде "ну goto типа плохо""
Что и требовалось доказать без goto получилась дурацкая лапша с флажочками. Зато гоутофобы довольны.
Ну так запиши Керниган и Ритчи в Готофобы.
Ты наверняка умнее и лучше разбираешься в тонкостях СИ, не то что эти дилетанты.
Вы можете как угодно лепить.
Другие будут делать, как удобнее им.
Не нравится - не пользуйтесь :)
Полностью согласен, тут я могу просто бухтеть или скрипеть зубами, в зависиммости от того насколько ужасный овнокод в ядре снова делает уязвимость.Но все веселье в том, что через пару версий ядра, по той же самой причине вам понадобится раст для его сборки. И я просто процитирую твое сообщение)
> насколько ужасный овнокод в ядре снова делает уязвимость.
> через пару версий ядра, по той же самой причине вам понадобится раст для его сборкиПо какой "той же самой"? По "ужасный овнокод в ядре снова делает уязвимость" но теперь уже на расте?
Если такое каким-то образом произойдёт - мне уже будет почти фиолетово, потому что в планах будет полный перенос сервиса на винду :D
Ну да, ещё goto прерывает циклы СРАЗУ а не ждёт, пока ты ВСЁ просмотришь. А вдруг там не просто 2*3 а что то долгое, файлы на сети перебирать сто тыщ о как красиво, зато без goto.
Туплю, в этом примере прервётся сразу :facepalm:
Ах ты ж! Я думал, он троллит, а он СЕРЬЁЗНО предлагает избавиться от goto ТАКИМ способом! Тогда понятно, почему нормальные программисты стараются вести себя с готофобами спокойно, дружелюбно, во всём с ними соглашаются, но к коду не подпускают.
И вот зачем всё это извращение, когда достаточно просто goto и метки?
Аргумент уровня "зачем вообще делать какой-то cleanup, если достаточно простого ((void(*)(void))0)() (после которого cleanup не понадобится, инфа 100%)"
Мне не платят за количество строк кода, поэтому делать из одного goto портянку мне лениво.
> Мне не платят за количество строк кода,Думаю за качественный и поддерживаемый код тебе тоже не платят)
> поэтому делать из одного goto портянку мне лениво.
... и так подумал каждый разработчик проекта.
А потом "а почему у нас макаронная фабрика вместо кода?! как это случилось? кто это сделал?"
Почти угадал. Мне платят за то, чтобы я определял, как всё это делается (архитектор, ога). Т.е. сие видение транспонируется на то, что в итоге делается другими людьми. И чтобы код в принципе был поддерживаемый не только вот этой вот текущей командой, но и при возникшей суровой необходимости - вообще кем-то в одну мордочку, без эксцессов. Периодически сам берусь за код, софт, железо и т.п., в основном в "тонких местах", чтобы мнение иметь, ну и когда народ в силу изначально заложенных ложных концептов "гото плохо" и т.п. - не осиляет.
О, это уже интереснее.
Если ты работаешь с тем "что в итоге делается другими людьми" то неужели тебя так сильно парит как будет реализована одна из функций через гото или через if (flag) ?
Работать оно будет практически одинаково.Из того что видел, как работали архитекторы - максимум они писали протоколы и иногда скелет будущих файлов. Наполняли содержимыми другие люди.
Думаю ты как архитектор сталкивался тем что иногда меняются требования, и части проекта приходится перепиливать. Хотя я не уверен бывает ли такое в "FreePBX и обвязки до управления роутерам". Может у вас планирование лучше.
Так вот, если приходится перепиливать проект, то с чем легче разобраться - с мелкими функциями принятыми как стандарт для проекта (я не знаю на чем вы пишите и доступны ли вам всякие defer/nested) или в множестве goto?
Я сталкиваля с чудовищным кодом на гото, с функциями разобраться было на порядок легче.
Возможно твой опыт противоположный моему, что абсолютно нормально.
Разница может быть в том, что тебя зовут когда "все совсем плохо", а мне доводилось подчищать за другими очень часто)> Поэтому видение от "code only" может отличаться сильно, приходится жить в реальном мире, который идеализма не прощает.
Возможно. Мысль интересная.
Мой опыт говорит, что поддерживаемость кода и единообразие очень сильно упрощает разработку.
А шишки на лбу - то что, фанат использования гото, в моих проектах обычно все портил)
Но да, есть момент - у нас не чистый проект из чистого кода, а в силу характера деятельности - связь кода, стороннего железа, стороннего софта. По целому множеству профилей и проектов. Не эмбедовка, нет. От FreePBX и обвязки до управления роутерами. Поэтому видение от "code only" может отличаться сильно, приходится жить в реальном мире, который идеализма не прощает.
Единственный недостаток гото - неочевидная местами раскрутка стека.
Но если оно всё в пределах одного контекста - совершенно беспроблемная вещь.
Другое дело, что да, для снежинок уже слишком сложно.
Бедные снежинки, то ли дело диды, наделали столько CVE, что выгребать будем еще лет 10.Это напоминает разговоры про ремни безопасности... обязательно попадется упоротый который начнет песню "я так всегда делаю"
Да, диды CVE наделали. Потому что хоть что-то делали, да и npm и лефтпадов тоже не было.
А вот от снежинок я пока ни одной вменяемой софтины не увидел, всё больше как-то дедовские монстры работают.
Можно например и без switch обойтись, а еще можно на Brainfack писать.
> Зато они добавили 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;
Ну, и что мешает по-человечески разбить это на функции?struct Context {
struct myfoo* foo;
struct mybar* bar;
};...
struct Context context = {0};
if (!initContext(&context))
return -ENOMEM;...
freeContext(&context);
Но нет, блждад, надо свалить управление ресурсами, обработку ошибок и основную логику в одну портянку, и потом всем рассказывать, что "goto - нормальная практика".
Читаемость хуже, если клинап требует определенного порядка вызовов еще и ошибиться легче.Но нам же главное goto не использовать.
> Читаемость хуже, если клинап требует определенного порядка вызовов еще и ошибиться легче.Ты же о коде с goto говоришь?
> Ну, и что мешает по-человечески разбить это на функции?Во-первых, у них так приятно (где кушать там и гадить)
Во-вторых, диды писали и мы так же будем
В третих, это же надо:
а) подумать
б) сделать целую структуру! а как же скорость! а если я буду запускать это на умном туалете с STM32 на борту!111
в) им плевать на резуьтат
г) я бы даже сказал Г с большой буквы - они так делают себе доп работу на будущее
Сам какую ОС разрабатываешь? Свой код покажешь? Ляпы есть? А если найду?
Мешает то, что у тебя этих функций на каждый чих станет 100500, и ты будешь по ним бегать.
Нет, пока у тебя проект уровня 50 строк над "чёрными ящиками" таких же писателей - всё нормально.
Но как станет посложнее, придётся менять подходы.
> Мешает то, что у тебя этих функций на каждый чих станет 100500, и ты будешь по ним бегать.Почему это проблема? Или по goto-портянке бегать не надо?
У функции как бы есть имя, которое говорит, что внутри происходит.
> Но как станет посложнее, придётся менять подходы.
Как менять? Начать писать портянки с goto? О да, это очень поможет в сложном проекте эдак на 2-6 миллиона строк.
Я вот правда не пойму: для тебя идеальный вариант - это весь код прямо в main()? Или как ты себе представляешь?
Дай угадаю: ты ведь в жизни не работал над чем-либо, кроме embedded помоек, так ведь? И теперь несешь свет в массы в виде лучших практик из тех мест.
>> Но как станет посложнее, придётся менять подходы.
> Как менять?В самую первую очередь - начинать вместо кормления розовых пони в голове дружить с реальным миром.
> начинать вместо кормления розовых пони в голове дружить с реальным миром.Ну, понятно: начинаем лить делевый пафос, ибо ничего конкретного ни на один из моих вопросов мы ответить не можем.
Извини, привык на иррациональные вопросы просто забивать.
Потому что есть определённая семантика у кода, и пытаться его разбить вне семантики - это гарантия того, что потом во всём этом следующий за тобой просто запутается.
Или просто потому что завтра надо подправить вон тот драйвер, а в нём - гото во все поля.
Чтобы другие могли понять, что именно вы хотели продемонстрировать, пожалуйста,
1. увеличьте число переменных контекста с двух до трёх (пусть будет foo, bar, baz),
2. приведите реализацию функций initContext() и freeContext()
> Ну, и что мешает по-человечески разбить это на функции?Тот факт, что нечеловеческий вариант освобождает foo, если не удалось выделить bar. А человеческий просто возвращает ENOMEM в надежде, что пользователь докупит ещё памяти для хранения всех foo, для которых не удалось выделить bar (или в надежде, что можно просто падать в панику, когда память кончается/файл не открывается/устройство недоступно/коннект к сайту не происходит - мы ведь не только память таким образом выделяем/освобождаем). С человеческой точки зрения это, конечно, более простое решение. Но мы же тут об инженерной стороне дела говорим.
> Но нет, блждад, надо свалить управление ресурсами, обработку ошибок и основную логику в одну портянку, и потом всем рассказывать, что "goto - нормальная практика".Ты сейчас на серьезных щас мне будешь утверждать что в одной функции можно только один раз память выделять, или что?
> Но нет, блждад, надо свалить управление ресурсами, обработку ошибок и основную логику в одну портянку, и потом всем рассказывать, что "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;Здесь ты тоже предлагаешь контексты на каждый чих делать? :)))
s/do_stuff_with_bar/do_stuff_with_foo/
"netfilter" "уязвимость" Это уже база, redhat не может писать нормально код
В последнее время наметилась тенденция тому, что в разработку приходят психически здоровые и нормально социализированные люди, в то время как чтобы писать более-менее рабочий код на Си, надо быть как минимум аутистом.
Это относится к гораздо большему числу областей (по крайней мере, для людей интеллектуального труда), нежели только программирование на Си. Редко где можно сделать что-то хорошее, когда твоя единственная способность - нормально социализироваться. Тот же Эйнштейн был аутистом.
> Редко где можно сделать что-то хорошее, когда твоя единственная способность - нормально социализироваться.Знаете, далеко не все люди ограничены в прокачке только одним навыком.
> Тот же Эйнштейн был аутистом.
И девочкой?
> далеко не все люди ограничены в прокачке только одним навыком.Прокачивать можно сколько угодно навыков. Но вместе с навыком "социализация" редко идёт что-то типа "способность погружаться в задачу", "способность концентрироваться".
Какие же бедные нормальные люди!
Они даже не могут социализироваться, потому что у них не получается сконцентрироваться на этой задаче, потому что они соц... Погодите-ка, что за фигня?
То-то поналезло в IT "нормальных людей" социализируются целыми днями, работать только некому.
Ну, если "работать" == "программировать на сишке", то тут чем меньше работающих, тем лучше.
Ядро уже на жабоскрипте переписал, хейтер?
Не, он явно не про яваскрипт. Недавно ковырялся в js-коде, где автор тоже "в указателях запутался". Там объекты передаются по ссылке, и при их модификации в многопоточном коде возникали разные интересные ситуации.
Именно. JS — такая же гадость, как и сишка.
Так логика создания одинакова!
Сишка создавался как максимально простой язык (относительно ассемблера и всяких Ада и прочих).
В нем можно быстренько х-к-х-к и в продакшн, да еще и под разные платфорнмы.
Ну вот толпы приматов ринулись писать на "простом" язычке.
Это просто пыха, но времен 70х.
+ if (!nft_set_elem_active(&e->ext, iter->genmask))
+ goto cont;Типичный Си...
Тут и goto, и use-after-free, и локальное повышение привилегий.
Впрочем, я совсем не удивлен.
Нет, блджад, вместо гото будем while (true) { if ... break; } городить.
Или целую процедурку с целым стеком вызова. Ладно, можно заинлайнить, но иди потом разберись что вот весь этот ворох из 100500 процедур делает.
Какой ещё while? Один из таких спецалистов однажды на кодревью заменил мои goto чем-то типаf = openResource();На замечание о дублировании кода блеял что-то невнятное, что лучше так, чем goto.
if (!f)
{
return false;
}g = openAnotherResource();
if (!g)
{
closeResource(f);
return false;
}h = openThirdResource();
if (!h)
{
closeAnotherResource(g);
closeResource(f);
return false;
}doSomeJob(f, g, h);
closeThirdResource(h);
closeAnotherResource(g);
closeResource(f);
return true;
Я бы тоже спросил зачем он дублирует. Можно написать и без goto и без дубляжа.
Потому что индусам платят за строчки?
Можно пример?
f = openResource();
if (f)
{
g = openAnotherResource();
if (g)
{
h = openThirdResource();
if (h)
{
doSomeJob(f, g, h);
closeThirdResource(h);
rc = true;
}
else
{
rc = false;
}
closeAnotherResource(g);
}
closeResource(f);
}
else
{
rc = false;
}
return rc;
1. Читабельность вашего решения насктолько хороша, что вы же сами запутались, где надо возвращать true, а где false. Оно и понятно, лесенка из else-ов в конце функции не слишком читабельна.
2. Основной код функции (в данном случае вызов doSomeJob) находится на четвёртом уровне вложенности. То есть с нормальной настройкой отступов левая половина окна редактирования будет пустовать. То есть всё то, с чем люди боролись десятилетиями, чтобы код не разъезжался в стороны, вы одним махом обнулили.
3. В реальном коде вместо doSomeJob() будет пара десятков строк кода. Это ОСНОВНОЙ код функции, ради которого всё и затевалось, но у вас оно почему-то спрятано за 4 уровнем отступа. Кроме того, дойдя до завершающих else, читающему код придётся поворачивать монитор на 90 градусов и прикладывать к нему линейку, чтоб понять, какой из else какую развилку завершает. Кстати, ваш способ используется в Битриксе (российская система управления сайтами), и могу вас заверить, такой вариант, когда основной код имеет глубокую вложенности, а потом ещё завершается мутными rc = false, не шибко читаем.
4. Вы пишете, что код без повторов, но с завидным упорством повторяете else { rc = false; } .
В приведённом мной примере есть куда более серьёзная проблема, но вы её почему-то не упомянули.Вы написали много слов про форматирование, хотя можно было сказать кратче: "Мне так не нравится". Ваши претензии к форматированию интересны... Вы пишете свой код в Notepad? Да, и с чего вы взяли, что это мой стиль? Отформатировано в стиле автора примера кода с повторами.
Вам не нравятся мои повторы "rc = <boolean>;", но вы почему-то не против своих повторов "goto ...;". Нестыковочка.
Хорошо структурированный код подталкивает к переносу повторяющихся паттернов в макросы, это значительно уплотняет код.
P.S. Ваш апломб, да в мирных бы целях...
P.P.S. Мне не совсем интересен этот спор, да и времени жалко. Успехов!
Это да, вот такие вот перлы обычно и получаются...
Зачем ворох процедур? Делаешь в каждой функции одну nested inline функцию с каким-то стандартным названием для всего проекта - defer, finalize, finish - как договоритесь.
И в ней чистишь все что должно быть почищено. И стека нет, и код аккуратный.
Напишите на своих гoвнoязыкax Хелло Ворлд, чтоб банарь весил 27 байт.
Иль сервак держащий лям коннектов... при этом load average всей системы 0.8
Ваши гoвнopасты, пидoны, пыхыпы, гошки, и прочее смузихлёбное деpьмo
весь стек засрут, всю оперативку высосет, ядра проца затраxyють...
А потом ваш сервак поимеют и начнут майнить, так что LA улетит за миллионы.
Так что _в среднем_ нормальный язык более экономичен по ресурсам, чем сишка.
> А потом ваш сервак поимеют и начнутПока вы дpoчите за безопасность, 97% взломов/хаков/краж/итп исходит от сотрудников,
а не от кульхацкеров с майдана и пентагона
Статистику в студию, образорванный ты наш.
А то языком болтать - не мешки ворочать.Даже по мнению гос помойки касперского только 11% случаев "произошло из-за использования неразрешённых в компании цифровых инструментов".
www.kaspersky.ru/about/press-releases/2023_laboratoriya-kasperskogo-kazhdaya-desyataya-kompaniya-v-mire-stalkivalas-s-kiberincidentami-iz-za-tenevyh-it
> 97% взломов/хаков/краж/итп исходит от сотрудников,Ну, если у вас числятся сотрудниками китайские боты, то да.
В общем случае инсайдеры вас трахнут гораздо быстрее, чем кулхацкеры.
Исключения есть, но это вряд ли вы.
> В общем случае инсайдеры вас трахнут гораздо быстрее, чем кулхацкеры.Это если бизнес-критичные сервисы на Go или Java.
А если на сишке — тогда всё очень печально.
Threesome?
> всю оперативку высосетВот это особенно смешно. Память надо измерять не на старте, а через неделю работы хотя бы, а потом вам С-шникам надо идти и еще пол года чинить утечки.
Не забудьте после этого инвойс выставить, чтоб работодатель оплатил последствия вашего фетиша на гиперэффективный код. Хотя, думаю, к этому моменту он уже поймет СКОЛЬКО стоит бинарь на 27 байт и золотой сервак со стразами держащий лям коннектов с 0.8 load average.
> иди потом разберись что вот весь этот ворох из 100500 процедур делает.То ли дело лапша на несколько тысяч строк с goto. В ней разобраться легче, да?
Если у вас функции по тыще строк вы делаете что-то не так, неважно с goto или без.
> потенциально позволяющая локальному пользователю повысить свои привилегии в системео5 очень опасная уязвимость для всех PC на которых всегда один пользователь. Бгг.
Хорошо, что на всех этих компах не используются всякие sandbox типа firejail или snap, из которых эта штука потенциально позволяет рутануть хост.
Да как-то нет доверия ко всем этим фуфлобоксам, посмотрим появится ли решение микрософта в ядре
Ну да, так все и побежали заворачивать сторонний софт в виртуалки.Точнее, побежала только Рутковская, но в qubes Xen, а не KVM.
> Ну да, так все и побежали заворачивать сторонний софт в виртуалки.тут гипервизор защищает только память ядра, незаметно её портить ты уже не сможешь
Тем не менее, чтобы виртуализация — веьсма неудобный и непопулярный инструмент sandboxing-а десктопных приложении.
> виртуализация — веьсма неудобный и непопулярный инструмент sandboxing-а десктопных приложениида вообще пофиг, смысл в том что память ядра на современных процессорах ты не испортишь, используешь ли при этом что-то в юзерспейс для изоляции роли не играет
А тут новость как раз об порче памяти на современных процессорах ...
OH SHI~~~~
> А тут новость как раз об порче памяти на современных процессорахновость про старые процессоры
Короче налетели в основном снова любители конь-тейнеров.
Ну и чёрт бы с ними.
Любители сишки, которые пытаются доказать, что это полноценный ЯП.Хотя нормально на сишке смогли написать только переполнение буфера, а остальное выходит так себе.
Зато мало в каком языке такое кол-во UB прямо в той зловноной куче которую по ошибке назвали стандартом!
Так что не принижай их достижения)
Говорят, сишные стандарты, начиная с C89, писали злокозненные фанаты раста, угнавшие машину времени из будущего.
Жаль свой собственный стандарт они не осилили...
Стандарт СИ вида "колбаса делается из мяса, может содержать добавки в виде сала, туал.бумаги или овна, в зависимости от желания компилятора рецепта - повара"?
Спасибо не надо, нам пока и так хорошо.
Ждём, когда на смену gcc и clang придут gcc-gpt и clanggpt. Вот это будет эра абсолютного UB, потому что добрые нейронки добавят его даже там, где в стандарте что-то прописано.
А что в твоем понимании
"полонецнный ЯП" ?
А почему весь новый софт тормознее старого? Хотя по сути делает все то же самое? Просто новый софт пишут на новых, безопасных, высокоуровневых ЯП.Вот зачем GNU в свое время подобрали Linux, у них же было свое, новое безопасное микро ядро! Помните такое? GNU Hurd? И чего вы сами не используете? Оно же безопасное, в отличии от монолита Linux, да к тому же на Си, фу!
Да потому что вам всем наплевать на безопасность, а вот на скорость нет!
Т.е тебе важнее скорость чем безопасность?
Типичный ответ любителя double-free)
> А почему весь новый софт тормознее старого?Но ведь KDE2 намного быстрее KDE4 (по мнению местных ###) и новое ядро тормознее старого ядра, а там та же самая сишечка. Как же так - язык не менялся, а оно тормозит?!
А чего тут удивительного? Прям Америку открыл, на сишечке тож можно писать по разному, если по делу и без дела проверочки всякие делать, то конечно же так же тормознуто получится!К тому же, такты процессора траться не только на проверки “безопасности”, но и на новые модные и круты фичи! Вот например, раньше в Linux не было всех этих cgroups, namespaces и прочего, а теперь оно там есть, а еще оно работает, тратя драгоценное процессорное время! А сколько там в ядре всякого нужного и не очень, страшно представить, советую поинтересоваться насколько выросла кодовая база ядра за последние лет 10.
С динамикой роста кодовой базы ядра линукс можно ознакомится тут:
https://www.opennet.dev/opennews/art.shtml?num=57675
> на сишечке тож можно писать по разномуМожно по разному, но почему-то пишут одинаково. Некачественные сишники, наверное. А то и вовсе растоманы прокрались и намеренно в проект нагадили, чтобы дискредитировать дидов.
Всё больше начинаю убеждаться, что существование этих самых "настоящих сишных программистов" — городская легенда, а на сишке пишут исключительно фанаты раста и исключительно с целью дискредитации.
Причем некоторые умудрились оставить в Х.org уязвимости аж 88 году (CVE-2023-43786) !
Наверное это попаданцы из будущего.
> выросла кодовая база ядраТам же макросы и модули. Охват поддерживаемого оборудования за последние 10 лет вырос. Факт.
Но далеко не всё, что в кодовой базе компилируется в готовое ядро, далеко не все модули загружаются при работе на конкретном оборудовании.
Для тех кто не умеет читать и переходит на личности! Если безопасность это прям оооочень важна для каждого, так какого фига вы не выбираете безопасные решения! Сидеть под виндовс и убунтой и ныть про безопасность? Ну камон! Вот когда с убунты переедешь хотя бы на Qubes, вот тогда хоть какое-то моральное право ныть про безопасность появиться!
Кстати, нытики, с праздником! Сегодня Ваш день!
А толку от Кюбикса если ядро то жеLinux kernel PV driver issues and LVM misconfiguration
https://github.com/QubesOS/qubes-secpack/blob/master/QSBs/qs...Или типичная ошибка СИ с памятью
https://github.com/QubesOS/qubes-secpack/blob/master/QSBs/qs...
а в моем свежем дебиане 4.19
Нужна безопасность - пишите на Java, проверено десятилетиями корпорациями с оборотом в миллиарды.
КОБОЛ всяко старше. Да и денег, вероятно, прокрутил гораздо больше.
Проверено корпорациями и ещё тысячами скрипт-киддис с log4j в руках.
Ну, с оборотами в миллиарды, можно в сервер и слона запихнуть.. Была бы такая блажь.
Джава - хороший выбор, но Ада и Оберон лучше подходят для подобных целей.
> проверено десятилетиями корпорациями с оборотом в миллиардыИми же проверено использования линукса :D
А чего вы хотите от монолитного ядра? Кстати авторы systemd намекают что линукс нужно менять напровление в сторону микро ядра.
Впихнув комбайн который полностью поглотит Linux ?> авторы systemd
У Поттеринга шизофрению всё же обнаружили ?