LINUX.ORG.RU

Удаленный отказ в обслуживании в linux


0

0

Уязвимость позволяет удаленному пользователю с помощью специального ICMP пакета(содержащего опции record-route или timestamp) вызвать отказ в обслуживании.

>>> Подробности

★★

Проверено: Shaman007 ()
Ответ на: комментарий от MYMUR

> Могу сказать, что я вообще не знаю такого оператора =)

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

anonymous
()
Ответ на: комментарий от anonymous

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

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

void some_func(int foo_handle, int bar_handle) {
  int frob_value = INVALID_FROB;
  lock(foo_handle);
  if (!really_work(bar_handle)) {
     goto release_foo;
  }
  lock(bar_handle);
  if (turbo_murbo_activate(bar_handle) != RC_OK) {
     goto release_locks;
  }
  if ((frob_value frobnicate_murbu_active(bar_handle)) == INVALID_FROB) {
     goto desactivate_bar;
  }

  // do smth with frob_value;

desactivate_bar:
  turbo_murbo_desactivate(bar_handle);
release_locks:
  unlock(bar);
release_foo:
  unlock(foo);
}

anonymous
()
Ответ на: комментарий от anonymous

> Вообще, это такая обработка ошибок/обслуживание ресурсов

вот иманна, это, примерно, тоже самое, что try/catch. иначе пришлось бы лепить кучу if-ов, а зачастую еще и нехилой вложенностью. вот где мозги свернуть можно.

anonymous
()
Ответ на: комментарий от anonymous

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

goto пользуются программисты низкого уровня, когда язык программирования третьего поколения, типа си, используется ими, как высокоуровневый, "кроссплатформенный" ассемблер. :) Разумеется, среди таких будет много программеров дровов.

atrus ★★★★★
()
Ответ на: комментарий от anonymous

>иначе пришлось бы лепить кучу if-ов, а зачастую еще и нехилой вложенностью.

Если в методе много вложенных if-ов, значит метод спроектирован неправильно.

MYMUR ★★★★
()
Ответ на: комментарий от MYMUR

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

Ну смотри. В той же винде. Чтобы скачать что-то с интернета через wininet, надо сначала WSAStartup, в случае удачи - InternetOpen, в случае удачи - InternetConnect, в случае удачи - InternetOpenUrl, в случае удачи - InternetReadFile. А потом ещё в обратной последовательности закрывать хэндлы. Ну что, делаем вложенные if, goto или что-то ещё? Предложи вариант. И не говори, что при программировании под линукс такого не бывает.

anonymous
()
Ответ на: комментарий от Sun-ch

> assert(предикат, указатель на функцию(параметры))

И чем это хуже goto??? Лично мне goto понятнее и нагляднее, чем такие извраты.

anonymous
()
Ответ на: комментарий от anonymous

>Ну смотри. В той же винде. Чтобы скачать что-то с интернета через wininet, надо сначала WSAStartup, в случае удачи - InternetOpen, в случае удачи - InternetConnect, в случае удачи - InternetOpenUrl, в случае удачи - InternetReadFile.

Как вариант: if(WSAStartup && InternetOpen && InternetConnect && InternetOpenUrl && InternetReadFile){ ... }

Условие раскручивается последовательно слева направо, если хоть одно выражение даст false, следующие вызваны не будут.

MYMUR ★★★★
()
Ответ на: комментарий от MYMUR

> Как вариант: if(WSAStartup && InternetOpen && InternetConnect && InternetOpenUrl && InternetReadFile){ ... }

Да-да. А в качестве сообщения об ошибке писать "Что-то не получилось, а что - хер знает. Кто-то из пяти". И потом, если не сработал InternetConnect, надо убить хендлы от WSAStartup и InternetOpen, но не убивать от остальных. И т.д.

anonymous
()
Ответ на: комментарий от anonymous

>Это не оправдание например ping linux.org.ru работает и что волков >боятся в лес не ходить давайте вообще тагда сервер из электричейкой >розтки выключим так на всякий случай


chto to ya ne ponial , eto ping (icmp code 0 i 8 ) ili drugie icmp paketi ? nenado putat' odno s drugim , ping vesh' poleznaya , kak i nekotorie drugie vidi icmp messagev .

j262 ★★
()
Ответ на: комментарий от anonymous

А что, в винде уже нельзя получить код ошибки? Или там если закроешь неоткрытый хендл случится что-то ужасное? И хендлы на открытость конечно не проверяются, я правильно понимаю?

В любом случае можно все нормально разрулить.

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

MYMUR ★★★★
()
Ответ на: комментарий от MYMUR

> А что, в винде уже нельзя получить код ошибки? Или там если закроешь неоткрытый хендл случится что-то ужасное?

Не знаю, как в винде - а в ядре наверняка. Особенно если это не opaque хендл, а указатель на структ функций, каковых полно. NULL->close() - это нихрена не хорошо. В низкоуровневом программировании (в ядре) задача управления ресурсами всегда падает на использователя этих ресурсов.

поэтому вместо if(get(a)) { if(get(b) { work(); release(b);} release(a);} пишут с goto. Потому как если ресурсов не 2, а, скажем, 4 или 6 - то само тело программы может уехать за правый край терминала...

> И хендлы на открытость конечно не проверяются, я правильно понимаю?

В ядре - нет.

> В любом случае можно все нормально разрулить.

Да. С использованием goto.

anonymous
()
Ответ на: комментарий от MYMUR

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

>off: мозги под вечер не варят....

У тебя они вообще не варят, в C методов нету, учи матчасть.

Ubnormal
()
Ответ на: комментарий от Sun-ch

> А тем, что манипулируя указателем можно менять реакцию на ошибки в runtime.

и эти люди запрещают мне ковырять в носу (с)

anonymous
()
Ответ на: комментарий от Sun-ch

> Надо писать макрос типа

assert существует только при с борке с поддержкой режима отладки. Учим матчасть.

> А тем, что манипулируя указателем можно менять реакцию на ошибки в runtime.

Много непонятных букв.

За такое нетривиальное использование макросов расплачиваются втридорого при отладке и аудите кода.

P.S: Был патч для одного из 2.6.x ядер, который включал поддержку C++ exeptions, но его не приняли в ванильное ядро.

mutronix ★★★★
()
Ответ на: комментарий от anonymous

>Не знаю, как в винде - а в ядре наверняка.

Ну-у-у, понеслось....

Сначала пример из винды, когда кончились аргументы --- переключились на ядро....

Лана, закрыли.... :)

MYMUR ★★★★
()
Ответ на: комментарий от Ubnormal

>У тебя они вообще не варят, в C методов нету, учи матчасть.

Глянь в зеркало, умник. Где в моей фразе "я не знаю такого оператора" ты увидел, что я пишу на С?

MYMUR ★★★★
()
Ответ на: комментарий от MYMUR

>>У тебя они вообще не варят, в C методов нету, учи матчасть.

>Глянь в зеркало, умник. Где в моей фразе "я не знаю такого оператора" ты увидел, что я пишу на С?

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

anonymous
()
Ответ на: комментарий от anonymous

2 anonymous (*) (10.02.2006 18:15:38)

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

MiracleMan ★★★★★
()
Ответ на: комментарий от MiracleMan

iptables -t mangle -N icmp-drops
iptables -t mangle -I INPUT  -p icmp -j icmp-drops
iptables -t mangle -I OUTPUT -p icmp -j icmp-drops
iptables -t mangle -A icmp-drops -p icmp --icmp-type echo-request -j ACCEPT
iptables -t mangle -A icmp-drops -j DROP




anonymous
()
Ответ на: комментарий от anonymous

Ой мля, запарили анонимные "експерты"....

Писал я на С, писал.... и все равно goto нужен нечасто, если нормально проектировать функции.

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

Хотя нет. Был бы ты адекватен --- можно было бы поговорить, а так....

MYMUR ★★★★
()
Ответ на: комментарий от MYMUR

> Писал я на С, писал.... и все равно goto нужен нечасто, если нормально проектировать функции.

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

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

А в каком еще более-менее популярном языке программирования нет функций, но есть методы? Или мсье дот-нет-программер?

> Хотя нет. Был бы ты адекватен --- можно было бы поговорить, а так....

Неадекватен - ты. Тебе уже показали, что во _всех_ ядрах используется похожий стиль управления ресурсами, с goto. И любой альтернативный вариант (вложенные if, try/catch на макросах, "освобождаем все подряд, проверяем валидность в функции освобождения") не выигрывает ни в компактности, ни в читабельности, ни в надежности. А ты - как попугай: "goto - ненужен, goto - костыль".

anonymous
()
Ответ на: комментарий от anonymous

Ой дурик....

>А в каком еще более-менее популярном языке программирования нет функций, но есть методы? Или мсье дот-нет-программер?

Итить.... Откуда взято "нет функций, но есть методы?" Откуда приплелся дотнет?

Или мсье не знает, что методы есть в C++? Или мсье думает, что "метод" --- это термин определенного языка, а не парадигмы программирования? Или мсье не подозревает, что C и C++ --- разные языки программирования?

Короче, разговаривать дальше смысла нет....

>А ты - как попугай: "goto - ненужен, goto - костыль"

Приведи хоть один пример, 3.14здобол....

MYMUR ★★★★
()
Ответ на: комментарий от MYMUR

> >А в каком еще более-менее популярном языке программирования нет функций, но есть методы? Или мсье дот-нет-программер?

> Итить.... Откуда взято "нет функций, но есть методы?" Откуда приплелся дотнет?

Упомянуть "проектирование методов" в контексте программирования в ядре может либо дурачок типа тебя, либо человек, отравленый Жавой. Ну либо шарпом.

> Или мсье не знает, что методы есть в C++? Или мсье думает, что "метод" --- это термин определенного языка, а не парадигмы программирования? Или мсье не подозревает, что C и C++ --- разные языки программирования?

Ты не поверишь, но я знаю еще и перл, JS, CL (плохо, учил-но-не-писал), и Haskell (см. common lisp). И термины знаю.

А вообще, изначальное мое сообщение имело смысл лишь "чувак, ты, видимо, слишком долго программировал не неправильных языках".

> > А ты - как попугай: "goto - ненужен, goto - костыль"

> Приведи хоть один пример, 3.14здобол....

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

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.