1.2, Stax (ok), 19:43, 22/03/2019 [ответить] [﹢﹢﹢] [ · · · ]
| +14 +/– |
> Взломы ядра Linux и большинства открытых проектов (nginx, OpenSSL, Apache httpd) в этом году исключены из призовых номинаций
А это почему? Стесняются? Хотят сделать вид, что проблемы только в коммерческих продуктах?
Нужно платить и за уязвимости в открытых продуктах, так их будут (собственно) показывать публике и исправлять, а не эксплуатировать втихую. А с такой политикой интерес к этому уходит.
| |
|
2.5, Аноним84701 (ok), 20:03, 22/03/2019 [^] [^^] [^^^] [ответить]
| +5 +/– |
>> Взломы ядра Linux и большинства открытых проектов (nginx, OpenSSL, Apache httpd) в этом году исключены из призовых номинаций
> А это почему? Стесняются? Хотят сделать вид, что проблемы только в коммерческих продуктах?
> Нужно платить и за уязвимости в открытых продуктах, так их будут (собственно) показывать публике и исправлять, а не эксплуатировать втихую.
Возможно, нет спроса у клиентов главного организатора - Trend Micro, возможно бюджет не позволяет, возможно (хотя конечно вряд ли) им лучше виднее, как тратить свои деньги?
Вот если бы Вы связались и предложили профинансировать, а они бы начали юлить и отказываться …
| |
2.9, Аноним (9), 21:18, 22/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
Дырки там и так находят в большем количестве и латают. Смысл хлеб у людей ядра отнимать?
| |
|
1.10, Аноним (9), 21:21, 22/03/2019 [ответить] [﹢﹢﹢] [ · · · ]
| +3 +/– |
Блин, ребята. Ладно еще race condition, многопоточность - это очень сложно и трудно воспроизводимо. Но! Целочисленное переполнение. Переполнение буфера. Двойное освобождение. Как нам уже избавиться от этих проклятий? Как в NASA умудряются писать, что 40 лет работают космические аппараты (те же Вояджеры, например)?
| |
|
2.11, segesg (?), 21:57, 22/03/2019 [^] [^^] [^^^] [ответить]
| +2 +/– |
c++20, статический анализ, санитейзеры, новые тесты, улучшения компиляторов, постепенное переписывание кода на rust
| |
|
3.36, Аноним (9), 07:44, 23/03/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
Rust нас спасёт? Если да, то почему на него льют ушаты критики?
| |
|
4.52, Аноним (-), 13:02, 23/03/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
Критику на что угодно льют, не знал? Это нормально.
И особенно на то, что меняет положение дел и заставляет что-то учить или переписывать, даже если в итоге это убирает бардак, устаканивает апи и сообщество выигрывает. См. системд.
| |
|
5.68, Аноним (68), 21:22, 23/03/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
Так системд же вносит бардак и сообщество проигрывает, давно доказали. Не?
| |
|
|
|
2.12, AS (??), 21:57, 22/03/2019 [^] [^^] [^^^] [ответить]
| +2 +/– |
так аппараты то далеко и не в инете.. и там юзверь 1 - админ. поэтому и не ломает никто.
| |
|
3.29, Аноним (9), 00:30, 23/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
В том и дело, что далеко. Если у сервака ты можешь в случае чего нажать кнопочку Reset, то там если ошиьочка какая - то уже есть риск вообще потерять корабль
Хотя, к слову, факапы были у NASA, читал на хабре перевод о том, как они дебажили New Horizons после сбоя, причём было 5 дней на это, а сигнал до аппарата летит 9 часов в одну сторону. Жесть, конечно, не позавидуешь ребятам, но спасли миссию, молодцы!
| |
|
4.44, microcoder (ok), 09:32, 23/03/2019 [^] [^^] [^^^] [ответить]
| –3 +/– |
> Если у сервака ты можешь в случае чего нажать кнопочку Reset
Ну прилепить реле по триггеру которое будет дергать кнопочку Reset на аппарате не сложно наверное. Например, расположить в основном компутере какой-нибудь модуль вайфай. Если он не отвечает, файлик ОС которая его обслуживает не принимает - включаем на дополнительном устройстве "механическую руку" и жмём кнопочку "Reset".
Т.е. резервирование, дублирование - основные методы борьбы с "багами". Вот и все секреты.
| |
|
5.51, Аноним (9), 12:58, 23/03/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
Ну да, там есть обычно резервный бортовой компьютер и всякие watchdog-таймеры. Хотя потерянные корабли были таки
| |
|
|
|
2.14, Аноним84701 (ok), 22:41, 22/03/2019 [^] [^^] [^^^] [ответить]
| +3 +/– |
> Целочисленное переполнение
Там не все так просто, простенькая демка:
% cat overflow.c
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(int argc , char* argv[argc +1]) {
if (argc < 2) return EXIT_FAILURE;
int32_t x = strtol(argv[1], NULL, 10); // это чтобы нам компилятор еще на начальной стадии не соптимизировал все до return 0
while (x > 0) x++;
printf("result %dl\n",x);
return EXIT_SUCCESS;
}
% gcc8 -Wall -Wextra -std=c11 -S -g overflow.c
.L5:
.loc 1 8 20 discriminator 2
addl $1, -4(%rbp)
.L4:
.loc 1 8 11 discriminator 1
cmpl $0, -4(%rbp)
jg .L5
Вроде как все ожидаемо, но:
% gcc8 -Wall -Wextra -std=c11 -g -O2 overflow.c
.L4:
.loc 1 8 19 is_stmt 1 discriminator 2 view .LVU10
.loc 1 8 19 discriminator 2 view .LVU11
.loc 1 8 19 is_stmt 0 discriminator 2 view .LVU12
jmp .L4
Компилятор здорово "оптимизнул" UB (если мне не изменяет память - лезть в спеки сейчас совсем неохота), т.е. без всяких варнингов мы поймали вечный цикл "на ровном" месте.
Ну и классическое (не)знание, это ж типа "Дорогая (даже на x86, угу) проверка! Мы точно знаем! Без нее в 100500 раз быстрее" ;)
> Как в NASA умудряются писать, что 40 лет работают космические аппараты (те же Вояджеры,
> например)?
Mariner1, Delta 3, Mars Lander, Mars Orbiter :)
| |
|
3.15, Аноним84701 (ok), 22:47, 22/03/2019 [^] [^^] [^^^] [ответить]
| –1 +/– |
Так как пятница, да и самому стало интересно, наовноко^W набросал по быстрому макет:
% gcc8 -Wall -Wextra -std=c11 -g -O3 overflow.c -o overflow
% cat overflow.c
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(int argc , char* argv[argc +1]) {
if (argc < 3) return EXIT_FAILURE;
int64_t x = strtol(argv[1], NULL, 10);
int64_t y = strtol(argv[2], NULL, 10);
while (x > y) {x += 0xFFFFFFF;}
printf("result %ld\n",x);
return EXIT_SUCCESS;
}
% time ./overflow 4 2
result -9223372036586340477
./overflow 4 2 30,27s user 0,01s system 99% cpu 30,295 total
% time ./overflow 4 2
result -9223372036586340477
./overflow 4 2 30,00s user 0,00s system 99% cpu 30,041 total
и
% cat overflow_checked.c
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(int argc , char* argv[argc +1]) {
if (argc < 3) return EXIT_FAILURE;
int64_t x = strtol(argv[1], NULL, 10);
int64_t y = strtol(argv[2], NULL, 10);
while (x > y) {
if (__builtin_add_overflow(x, 0xFFFFFFF, &x)){
printf("overflow detected %ld\n", x);
break;
}
}
printf("result %ld\n",x);
return EXIT_SUCCESS;
}
% gcc8 -Wall -Wextra -std=c11 -g -O3 overflow_checked.c -o overflow_checked
% time ./overflow_checked 4 2
overflow detected -9223372036586340477
result -9223372036586340477
./overflow_checked 4 2 30,63s user 0,00s system 99% cpu 30,662 total
% time ./overflow_checked 4 2
overflow detected -9223372036586340477
result -9223372036586340477
./overflow_checked 4 2 29,79s user 0,00s system 99% cpu 29,835 total
| |
|
4.17, Michael Shigorin (ok), 22:50, 22/03/2019 [^] [^^] [^^^] [ответить]
| –17 +/– |
> Так как пятница, да и самому стало интересно
Слушайте, а черкните мне на mike@altlinux.org -- нам нужны такие люди. :)
| |
|
|
6.45, microcoder (ok), 09:42, 23/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
> Люди нужны всем, не все могут себе это позволить.
А Вы почему за него решили, может он позволить или нет? Мне интересно, а что Вы видите плохого в прямых предложениях которое сделал "альтлинуксовец" выше?
| |
6.65, Michael Shigorin (ok), 19:32, 23/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
> Люди нужны всем, не все могут себе это позволить.
А у нас как раз и есть атмосфера, в которой обычно приживаются люди с подобными особенностями характера и поведения. Да, _мы_ можем себе это позволить, плюс ещё и хорошие зарплаты как для продуктовых контор, а не телогрузов.
| |
|
7.75, анон (?), 00:10, 25/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
> с подобными особенностями характера
типа тебя? кто тебе заплатил за антипиар?
| |
|
|
|
4.35, Аноним (35), 07:20, 23/03/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
> if (__builtin_add_overflow(x, 0xFFFFFFF, &x)){
Зато портабельно. "Ассемблер никому не нужен" (с) Carry Flag
| |
|
5.53, Аноним84701 (ok), 13:57, 23/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
>> if (__builtin_add_overflow(x, 0xFFFFFFF, &x)){
> Зато портабельно. "Ассемблер никому не нужен" (с) Carry Flag
Э-э … и куда VB уже успели с х86 портировать?
Скорее, исторически сложившиеся костылики и священная корова обратной совместимости.
А сказка о "портабельности" – для всего, что чуть больше привета миру обычно не выдерживает столкновения с реальностью, зато последствия проявляются чуть ли не каждый день …
| |
|
6.64, Michael Shigorin (ok), 19:27, 23/03/2019 [^] [^^] [^^^] [ответить]
| –1 +/– |
> А сказка о "портабельности" – для всего, что чуть больше привета миру
> обычно не выдерживает столкновения с реальностью, зато последствия
> проявляются чуть ли не каждый день …
Сгущаете краски, судя по e2k (не-x86, не-RISC, да ещё и не-gcc). Не то чтоб "всё не так", но всё-таки далеко не так плохо, по моим наблюдениям до сих пор :-)
| |
|
7.71, Аноним (71), 08:57, 24/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
В случае e2k есть такое слово "надо", а вот на "x32" как-то не очень портируется с amd64, при том что разница лишь в размере указателей.
| |
|
6.70, Аноним (71), 08:52, 24/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
На "х86" ассемблере проверка переполнения естественна и производится одной командой. На Сях приходится городить огород (который компилятор ещё должен суметь редуцировать до проверки флага), либо применять интринсик. Похоже, немножко через чур "абстрагировались".
| |
|
|
|
3.27, Аноним (9), 00:21, 23/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
Да, с целочиселкой хороший пример. На хабре, помню, был перевод статьи, которая, кажись, называлась "UB is so undefined" или как-то так, там про это было.
И спрашивается, а кто тут виноват? Компилятор, который оптимизирует такое и не предупреждает? Стандарт, который не мог сделать переполнение не-UB? Программист, который посмел надеяться на переполнение?
| |
3.30, Аноним (30), 00:39, 23/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
> while (x > 0) x++;
Этот цикл либо вечный, либо не выполняется в соответствии с правилами C/C++.
| |
|
4.33, Аноним84701 (ok), 01:24, 23/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
>> while (x > 0) x++;
> Этот цикл либо вечный,
см. выхлоп -S для -O2
> либо не выполняется в соответствии с правилами C/C++.
Вообще-то это UB. Причем "вроде работает как задуманно" (т.е. выполняется) для -On, n<2, c -O2 "оптимизируется" в вечный цикл.
"Четкие правила" - это про unsigned:
> A computation involving unsigned operands can never overflow
Вот другая демка (не мое -- когда-то наткнулся):
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(int argc , char* argv[argc +1]) {
if (argc < 2) return EXIT_FAILURE;
int32_t x = strtol(argv[1], NULL, 16);
int32_t y = x + 1;
if (y < x) {
printf("overflow detected %d\n",x);
} else {
puts("no overflow");
}
return EXIT_SUCCESS;
}
% gcc8 -Wall -Wextra -Woverflow -std=c99 -g -O0 over.c && ./a.out 0x7fffffff [1]
overflow detected 2147483647
% gcc8 -Wall -Wextra -Woverflow -std=c99 -g -O1 over.c && ./a.out 0x7fffffff
no overflow
| |
|
5.47, Аноним (30), 12:07, 23/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
> Вообще-то это UB. Причем "вроде работает как задуманно" (т.е. выполняется) для -On, n<2, c -O2 "оптимизируется" в вечный цикл.
Да, UB, так и есть. Я имел ввиду что цикл вечный в том плане, что по правилам языка переполнение знаковых целых в корректной программе не происходит, а значит компилятор вправе считать, что этот цикл вечный. Т.к. модификация x в этом цикле не приводит к наблюдаемому поведению, его можно попросту исключить и оставить "while (true);".
| |
5.77, Аноним (77), 23:31, 26/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
Что-то я не понял открытий.
Результат следующих строк секрет что-ли был?
int32_t i = INT_MAX, j = i++;
printf("i: %" PRIi32 " j: %" PRIi32 "\n", i, j);
uint32_t ui = UINT_MAX, uj = ui++;
printf("ui: %" PRIu32 " uj: %" PRIu32 "\n", ui, uj);
А это "argv[argc +1]" какое-то расширение в gcc8?
Что sizeof argv показывает?
| |
|
6.78, Аноним84701 (ok), 00:29, 27/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
> Что-то я не понял открытий.
> Результат следующих строк секрет что-ли был?
Демка неочевидности UB, очевидно же.
Если не подводит память, то видел в блоге PVS-иков "частые неочевидные факапы-ошибки" (как-то так по смыслу)
> А это "argv[argc +1]" какое-то расширение в gcc8?
Угу. "Расширение". Жуется gcc5 -std=c89
Обычный синтактический выверт ушами "читабельная запись для человеков" (т.е. никаких стат. проверок компилятора - хотя оно и понятно, т.к. тут нужен libastral наисвежей версии)
Из ModernC, Jens Gustedt, если что.
> Что sizeof argv показывает?
то же самое, что и sizeof(char**), что же еще :)
| |
|
7.79, Аноним (79), 00:12, 29/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
> Обычный синтактический выверт ушами
Я уж подумал - массивы переменной длины в параметрах функций.
Что-то типа:
gcc -x c -std=c99 - -o opennet << EOF
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char arr[ atoi(argv[1]) ];
printf("sizeof arr: %u\n", sizeof arr);
return 0;
}
EOF
| |
|
|
|
|
|
2.16, Michael Shigorin (ok), 22:48, 22/03/2019 [^] [^^] [^^^] [ответить]
| –11 +/– |
> Как нам уже избавиться от этих проклятий?
Возможно, поздно.
> Как в NASA умудряются писать, что 40 лет работают космические аппараты
> (те же Вояджеры, например)?
Слетайте в семидесятые и спросите...
А так http://drakon.su и сейчас доступен.
| |
|
3.28, Аноним (9), 00:24, 23/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
> Возможно, поздно?
Почему?
> Слетайте в семидесятые и спросите
Ну вообще, видел у NASA сишний стайлгайд из 10 правил. Очень хардкорный: динамическую память нельзя, рекурсию нельзя, циклы без жёстко заданной верхней границы нельзя. Но и условия работы обязывают
| |
3.32, ffirefox (?), 00:56, 23/03/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
ДРАКОН это не NASA. ;)
Просто программы создавали не программисты, а инженеры. Соответственные требования предъявлялись к ПО как к любому изделию. Там к каждой строчке различной документации по несколько страниц.
| |
|
2.31, ffirefox (?), 00:49, 23/03/2019 [^] [^^] [^^^] [ответить]
| –1 +/– |
Так они писали на Ada. Когда этот язык приняли, то он считался очень сложным и перегруженным. Но, суде по последним стандартам C++ и развитию Rust, разработчики языков не успокоются пока всё оттуда не перетаскают. Интересно, стандарт C++ уже обогнал по объему Ada?
| |
2.46, Аноним (46), 11:37, 23/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
>Как в NASA умудряются писать, что 40 лет работают космические аппараты (те же Вояджеры, например)?
На Fortran писали.
И таки, по крайней мере, один раз косяк случился, препод рассказывал. Вместо точки-разделителя целой-дробной части поставили запятую. Транслятор Фортрана воспринял это как два числа. В результате аппарат пролетел мимо Венеры.
Но, всё же, это не то, что сплошные проблемы с указателями.
| |
|
3.50, Аноним (9), 12:57, 23/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
Ну не всегда же на Фортране. Там были потом и Ада, и Си (поныне там)
| |
|
|
3.66, Аноним (9), 20:11, 23/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
Причём здесь соревнования? С ними все как раз нормально - нужное мероприятие, демонстрирующее наше несовершенство в кодинге. Ну и непосредственно полезное, ибо ошибки исправляются
| |
|
2.67, MINIX (?), 20:18, 23/03/2019 [^] [^^] [^^^] [ответить]
| +1 +/– |
Поставить Assert-ов на все входные/выходные данные (не обязательно контракты полностью реализовывать). Весь код покрыт самыми изощренными тестыми. Каждое принятое решение взвешивается и перевешивается, потом рефакторинг и по новой. Без исключений. Каждый метод, каждую строчку, каждый объект. Полная статистика всех созданных "обеъктов" (на что, когда и для каких целей выделена память).
Запретить работать с памятью напрямую, полностью задействовать все фичи прав доступа на современных процессорах (многопоточность и состояние гонки).
И...
Что и? Нифига не поможет в некоторых случаях, если имбицилы пишут код.
| |
|
1.13, Аноним (13), 22:20, 22/03/2019 [ответить] [﹢﹢﹢] [ · · · ]
| +1 +/– |
Не зря так долго коробку не обновляют. Страшенные баги месяцами висят, реактось от дополнений 6.0.4 синюшит сразу на установке ещё...Если даже после этого не обновят, то я не знаю куда .
| |
|
|
3.41, пох (?), 09:12, 23/03/2019 [^] [^^] [^^^] [ответить]
| –5 +/– |
о чем вы там думаете? Вызубрить командную строчку из миллиона закорючек (и менять раз в неделю, потому что авторы никак не успокоятся, меняя синтаксис в каждой версии) - это у вас "думать"?
А об эффективности (и надежности) этого (по первоначальной задумке)_эмулятора_, в сочетании с kvm/libvirt (в виде спагетти взаимозавязанных механизмов, запутанных так что вообще не разберешь, кто там на ком стоял) - вам явно думать нечем.
| |
|
|
|
|
3.43, пох (?), 09:18, 23/03/2019 [^] [^^] [^^^] [ответить]
| –4 +/– |
бросьте, и нужно, и ломают только в путь (благо векторов у непохаканной на корню - мильен). Но деньги за это платить - действительно, ненужно. Во-первых, у ломающих и так все в шоколаде - там от финорганизаций до инфраструктурных компаний ;-) во-вторых, лучше от этого бубунточка не станет - потому что там для начала надо уволить всю команду, и нанять вменяемых (а где их взять, если наверху - тот-кого-нельзя-тут-называть?)
потом выкинуть на помойку зависимость от инфраструктуры и разработчиков дебиllian, заодно заменив невменяемый apt-десять-лет-unstable-cli чем-то вроде zypper, а потом окажется что вы обратно suse изобрели, только не на базе шлак-вари, а на базе дебиана.
А она у нас и так есть. Ну, пока еще есть, завтра, небось, банкрот, не зря ж ее выкинули.
| |
|
4.73, Аноним (9), 20:35, 24/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
А я-то думал, что старый-добрый apt и дебиан - нерушимы как скалы
| |
|
5.76, пох (?), 17:48, 25/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
ну так вам - головой биться, или в работе применять?
По факту убунте дебиан уже давно тормоз, а не источник вкусного и полезного мьяса халявных майнтейнеров. Но и спугнуть их нельзя, новые с неба не понападают. Поэтому все будет идти как идет.
| |
|
|
|
2.37, An (??), 08:18, 23/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
Видимо пришло время отдельное соревнование для опенсорса делать
| |
|
1.56, Аноним (56), 15:09, 23/03/2019 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Молодцы. Но много бесполезных проектов вроде Edge и Safari. Только деньги на ветер!
| |
|
2.69, НяшМяш (ok), 22:24, 23/03/2019 [^] [^^] [^^^] [ответить]
| +/– |
Почему же? Всякие бизнесьмены пользуют вышеназванные продукты. А денежки как раз у них и эти браузеры приходится знать, чтобы и себе пенсию обеспечить. Одно непонятно - где хромиум и его поделия.
| |
|
|