$ rpm -qf /bin/netstat net-tools-1.60-alt13 igor@breeze ~ $ sudo netstat -I eth0 zsh: segmentation fault sudo netstat -I eth0 igor@breeze ~ $ uname -a Linux breeze.localdomain 2.6.18-ovz-smp-alt14 #1 SMP Wed May 2 15:41:34 MSD 2007 x86_64 GNU/Linux
confirmed; who wants to update net-tools patchset from FC?
(In reply to comment #1) > confirmed; who wants to update net-tools patchset from FC? i will sync with patches with F and report about this.
(In reply to comment #2) > i will sync with patches with F and report about this. *ping*
Как netstat -I (без аргумента) тоже падает.
Ошибка в этом куске кода (файл netstat.c): 1787 case 'I': 1788 if (optarg && strcmp(optarg, "(null)")) 1789 if (optarg[0] == '=') optarg++; 1790 flag_int_name = strdup(optarg); 1791 flag_int++; 1792 break; Первый if проверяет, чтобы optarg не была NULL, проверяет довольно странно (я бы проверял как otarg != NULL или просто optarg), но идея в этом. Второй if проверяет случай когда опция укзаана как -I=eth0. Если аргумент знак равно, то переходим к следующему аргументу строки. И наконец третья строка пытается сохранить в flag_int_name копию аргумента (eth0). Падает всё в случае, когда optarg == NULL. Судя по отступам можно понять чего автор хотел, вот только он забыл добавить скобок. Он хотел, чтобы строка 1789 и 1790 выполнялись, только если первый if вернул истину. Но получилось, что строка 1790 выполняется всегда, т.к. не принадлежит телу первого if-а. Кстати, в оригинальном коде программы этого куска кода нет. Он привнесен патчами net-tools-1.60-rh-netstat-ifaceopt.patch и net-tools-1.60-rh-netstat-I.patch (кстати, патчи добавляют опцию -I но не патчат man, в итоге а мане этой опции нет, что тоже баг).
А, ну всё понятно. Вот каким должен быть код: 1787 case 'I': 1788 if (optarg != NULL) { 1789 if (optarg[0] == '=') { 1790 optarg++; 1791 } 1792 flag_int_name = strdup(optarg); 1793 } 1794 flag_int++; 1795 break; Обратите внимание, что вызывать netstat -I eth0 -- НЕ правильно. Надо: netstat -I=eth0 Вот валидные опции: - I - --interfaces - I=eth0 - --interfaces=eth0 Вот так с приведенным выше кодом всё будет работать. А на -I eth0 будет выдавать usage.
Created attachment 2708 [details] Updated patch version Для исправления этой баги нужно: - поравить спек (не прикладывать патч net-tools-1.60-rh-netstat-I.patch) - удалить патч net-tools-1.60-rh-netstat-I.patch - заменить патч net-tools-1.60-rh-netstat-ifaceopt.patch на тот, который я сейчас прикладываю После этого всё работает.
Вроде бы fixed in 1.60-alt14