Это просто ошибка в echoping(1)
, и вы должны сообщить о ней (после проверки, не исправили ли они ее уже в последней версии ).
В файле util.c
из его исходного кода у них есть это маленькое c -x -er:
char *
to_upper(char *input)
{
int c;
char *result;
result = (char *) malloc(strlen(input));
for (c = 0; c < strlen(input); c++)
result[c] = toupper((int)input[c]);
result[strlen(input)] = '\0';
return result;
}
Обратите внимание, как result[strlen(input)]
будет записывать 1 байт сверх длины буфера, выделенного с помощью malloc()
.
Но это еще не все; вместо того, чтобы объявить правильный прототип to_upper()
(, который возвращает 64-битный указатель на x86 -64 ), они позволяют компилятору предположить, что он возвращает 32-битное целое и принудительно приводит его возвращаемое значение. до (char*)
вplugins/dns/dns.c
:
char *
init(const int argc, const char **argv)
{
...
upper_type_name = (char *) to_upper(type_name);
Последнее действительно убивает его, и я не думаю, что когда-либо работал на x86 -64; ваша единственная надежда — настроить вашу систему как мультиархивную и установить echoping
как 32-битный двоичный файл; пример (не тестировался )для debian:
apt-get remove echoping
dpkg --add-architecture i386
apt-get update
apt-get install echoping:i386
[Я использовал исходники эха -6.0.2, которые я получил с apt-get source echoping
в Debian 9.]
Это было вызвано наличием всего 4096 обработчиков inotify. Я увеличил лимиты и проблема исчезла.
fs.file-max = 131070
fs.inotify.max_user_watches = 65536