Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline idtks  
#1 Оставлено : 23 октября 2020 г. 11:39:48(UTC)
idtks

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.07.2014(UTC)
Сообщений: 97
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 21 раз
Здравствуйте.

При проведении нагрузочного тестирования нашего ПО, которое использует КриптоПРО CSP, я обнаружил утечку памяти. Посылаю вам небольшой тестовый пример на "С++" демонстрирующий как это происходит. Если в примере закомментировать строку № 89:

ret = CryptSignHash(h_hash, key_usage, NULL, 0, signature, &signature_len);

--- то утечка памяти исчезает. Если же строка есть, то память "течет" настолько явно, что в "Диспетчере задач" для этого процесса видно монотонный рост занимаемой памяти - где-то по 100Кб в секунду.

В архиве _CPP.zip (50kb) загружен 18 раз(а). есть контейнер с приватным ключом и сертификатом на котором я запускаю тестовую утилиту (пароль "123456"). Так же есть два исполняемых модуля: "TestCryptSignHash-bad.exe" - с утечкой памяти (строка № 89 не закомментирована) и "TestCryptSignHash-good.exe" - без утечки памяти (строка № 89 закомментирована). Версия CSP - 4.0.9842. Версия ОС - "Windows 7 Профессиональная".

Что делать, чтобы утечки памяти не было? Нам важно подписывать много сообщений и делать это "быстро". Пересоздавать провайдер для каждой подписи не хочется (тогда, вроде бы утечек нет - расход памяти в "Диспетчере задач" не такой стремительный). Но если пересоздавать провайдер, то все начинает работать чуть ли не в 30 раз медленнее.

Тестовый пример я собирал "надергивая" из боевых исходников куски кода и максимально их упрощая, поэтому он выглядит несколько коряво. Основной вопрос на который хотелось бы получить ответ - почему в большом цикле на 1000000000 итераций течет память в функции "CryptSignHash".

С уважением, Константин Ткачук.
Offline Максим Коллегин  
#2 Оставлено : 26 октября 2020 г. 10:04:38(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,374
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 704 раз в 613 постах
Возможно это та же самая проблема: https://www.cryptopro.ru...&m=100502#post100502
Знания в базе знаний, поддержка в техподдержке
Offline Агафьин Сергей  
#3 Оставлено : 26 октября 2020 г. 16:32:57(UTC)
Grey

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 12.08.2013(UTC)
Сообщений: 834
Мужчина
Российская Федерация
Откуда: Москва

Сказал «Спасибо»: 5 раз
Поблагодарили: 215 раз в 174 постах
Добрый день.
Пустил ваш пример на свежей сборке CSP - память утекает крайне медленно (12 КБ / минуту примерно). Профилировщик VisualStudio показывает, что это не связанные с нашим кодом аллокации внутри ntdll.dll. В целом, мы непрерывно проверяем код на утечки с помощью valgrind и ASAN(LSAN), так что что-то настолько явное как утечка на функции подписи, точно бы поймали.

Предлагаю для начала поставить более актуальную версию CSP.
С уважением,
Сергей
Техническую поддержку оказываем здесь.
Наша база знаний.
Offline idtks  
#4 Оставлено : 26 октября 2020 г. 17:09:39(UTC)
idtks

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.07.2014(UTC)
Сообщений: 97
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 21 раз
Здравствуйте.

Действительно, под CSP 5.0 утечек памяти не наблюдаю.

С уважением, Константин Ткачук.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.