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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Роман кислухин  
#1 Оставлено : 29 ноября 2016 г. 15:05:23(UTC)
Роман кислухин

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

Группы: Участники
Зарегистрирован: 29.03.2011(UTC)
Сообщений: 163
Мужчина
Откуда: Москва

Сказал «Спасибо»: 8 раз
Поблагодарили: 3 раз в 3 постах
При вызове функции InitializeSecurityContext вылетает эта ошибка: The buffers supplied to a function was too small. (0x80090321)
В документации ничего пр эту ошибку не говорится. В интернете ничего не нагуглил. Есть идеи, откуда эта ошибка и как с ней бороться?

Ошибка воспроизводится только на одной машине у заказчика.
CSP (Type:75) v3.6.5365 KC1 Release Ver:3.6.7777 OS:Linux CPU:AMD64 FastCode:READY:AVX.
Offline Евгений Пономаренко  
#2 Оставлено : 29 ноября 2016 г. 16:33:26(UTC)
Евгений Пономаренко

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

Группы: Участники
Зарегистрирован: 03.05.2012(UTC)
Сообщений: 176
Откуда: Екатеринбург

Сказал(а) «Спасибо»: 48 раз
Поблагодарили: 23 раз в 19 постах
Автор: Роман кислухин Перейти к цитате
При вызове функции InitializeSecurityContext вылетает эта ошибка: The buffers supplied to a function was too small. (0x80090321)
В документации ничего пр эту ошибку не говорится. В интернете ничего не нагуглил. Есть идеи, откуда эта ошибка и как с ней бороться?

Ошибка воспроизводится только на одной машине у заказчика.
CSP (Type:75) v3.6.5365 KC1 Release Ver:3.6.7777 OS:Linux CPU:AMD64 FastCode:READY:AVX.


Это уже в процессе хэндшейка?
Там примерно так-
char *client_buffer=new char[CLIENT_BUFSIZE];
int client_ptr=0;
DWORD request_flags;
DWORD response_flags;
TimeStamp expiration;
SecBufferDesc in_buffer_desc;
PSecBuffer in_buffers=new SecBuffer[2];
SecBufferDesc out_buffer_desc;
PSecBuffer out_buffers=new SecBuffer;
request_flags=ISC_REQ_SEQUENCE_DETECT | ISC_REQ_REPLAY_DETECT | ISC_REQ_CONFIDENTIALITY |
ISC_RET_EXTENDED_ERROR | ISC_REQ_ALLOCATE_MEMORY | ISC_REQ_STREAM;
while(result==SEC_I_CONTINUE_NEEDED || result == SEC_E_INCOMPLETE_MESSAGE)
...
bytes_rcvd=serverConnection->Recv(&client_buffer[client_ptr],CLIENT_BUFSIZE-client_ptr);
...
//// input
in_buffers[0].pvBuffer=client_buffer;
in_buffers[0].cbBuffer=client_ptr;
in_buffers[0].BufferType=SECBUFFER_TOKEN;
in_buffers[1].pvBuffer=NULL;
in_buffers[1].cbBuffer=0;
in_buffers[1].BufferType=SECBUFFER_EMPTY;
in_buffer_desc.cBuffers=2;
in_buffer_desc.pBuffers=in_buffers;
in_buffer_desc.ulVersion=SECBUFFER_VERSION;
//// output
out_buffers->pvBuffer=NULL;
out_buffers->BufferType=SECBUFFER_TOKEN;
out_buffers->cbBuffer=0;
out_buffer_desc.cBuffers=1;
out_buffer_desc.pBuffers=out_buffers;
out_buffer_desc.ulVersion=SECBUFFER_VERSION;

result=InitializeSecurityContext(clientCredentials,clientContext,NULL,request_flags,0,
SECURITY_NATIVE_DREP,&in_buffer_desc,0,NULL/*clientContext*/,&out_buffer_desc,&response_flags,&expiration);

CLIENT_BUFSIZE в 32к достаточно.
Ошибка обычно появляется, когда пакет не помещается во входной буфер.
Offline Роман кислухин  
#3 Оставлено : 29 ноября 2016 г. 19:07:39(UTC)
Роман кислухин

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

Группы: Участники
Зарегистрирован: 29.03.2011(UTC)
Сообщений: 163
Мужчина
Откуда: Москва

Сказал «Спасибо»: 8 раз
Поблагодарили: 3 раз в 3 постах
Буфер 4к, но обрабатывается ошибка SEC_E_INSUFFICIENT_MEMORY, при возникновении которой размер буфера удваивается (пока не достигнет 1 мб) и запрос повторяется. Но тут ошибка другая возвращается.
Offline Максим Коллегин  
#4 Оставлено : 30 ноября 2016 г. 8:47:13(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 38 раз
Поблагодарили: 736 раз в 633 постах
Некорректный код:
Код:
//// output
out_buffers->pvBuffer=NULL;
out_buffers->BufferType=SECBUFFER_TOKEN;
out_buffers->cbBuffer=0;


Должно быть
Код:
out_buffers->BufferType == SECBUFFER_EMPTY
Знания в базе знаний, поддержка в центре поддержки
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
Евгений Пономаренко оставлено 30.11.2016(UTC)
Offline Евгений Пономаренко  
#5 Оставлено : 30 ноября 2016 г. 9:13:04(UTC)
Евгений Пономаренко

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

Группы: Участники
Зарегистрирован: 03.05.2012(UTC)
Сообщений: 176
Откуда: Екатеринбург

Сказал(а) «Спасибо»: 48 раз
Поблагодарили: 23 раз в 19 постах
Автор: Роман кислухин Перейти к цитате
Буфер 4к, но обрабатывается ошибка SEC_E_INSUFFICIENT_MEMORY, при возникновении которой размер буфера удваивается (пока не достигнет 1 мб) и запрос повторяется. Но тут ошибка другая возвращается.


флаг ISC_REQ_ALLOCATE_MEMORY не используется?
насколько помню, у меня такая ошибка возникала уже при обмене данными, в случае, если канал до сервера очень быстрый-буферизовалось много данных сразу.
был такой же алгоритм с удвоением буфера-переделал. ошибка ушла
Offline Роман кислухин  
#6 Оставлено : 30 ноября 2016 г. 12:41:38(UTC)
Роман кислухин

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

Группы: Участники
Зарегистрирован: 29.03.2011(UTC)
Сообщений: 163
Мужчина
Откуда: Москва

Сказал «Спасибо»: 8 раз
Поблагодарили: 3 раз в 3 постах
ISC_REQ_ALLOCATE_MEMORY не используется. И тут хэндшейк.
Offline Максим Коллегин  
#7 Оставлено : 30 ноября 2016 г. 13:04:17(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 38 раз
Поблагодарили: 736 раз в 633 постах
Если не используете ISC_REQ_ALLOCATE_MEMORY - инициализируйте выходной буфер, иначе куда писать?
Знания в базе знаний, поддержка в центре поддержки
Offline Роман кислухин  
#8 Оставлено : 30 ноября 2016 г. 14:21:03(UTC)
Роман кислухин

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

Группы: Участники
Зарегистрирован: 29.03.2011(UTC)
Сообщений: 163
Мужчина
Откуда: Москва

Сказал «Спасибо»: 8 раз
Поблагодарили: 3 раз в 3 постах
Выходной буфер инициализирован. Попробуем увеличить стартовый размер. Повторяется ошибка не везде. Из нескольких сотен внедрений только на одном и сегодня на втором. Есть подозрение, что сертификаты там особенные - как раз обновляли сертификаты.
Offline Роман кислухин  
#9 Оставлено : 30 ноября 2016 г. 17:52:58(UTC)
Роман кислухин

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

Группы: Участники
Зарегистрирован: 29.03.2011(UTC)
Сообщений: 163
Мужчина
Откуда: Москва

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