Помогите устранить неуловимую утечку дескриптора файла

Это просто ошибка в 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.]

1
06.10.2020, 12:49
1 ответ

Это было вызвано наличием всего 4096 обработчиков inotify. Я увеличил лимиты и проблема исчезла.

fs.file-max = 131070
fs.inotify.max_user_watches = 65536
1
18.03.2021, 22:59

Теги

Похожие вопросы