Как исправить ошибку сбоя malloc openssl? - PullRequest
0 голосов
/ 17 октября 2018

Я использую openssl для шифрования файла и получаю ошибку malloc, как показано ниже.

openssl version
OpenSSL 1.0.2j-fips  26 Sep 2016

openssl command
openssl cms -sign -in infile -signer file.crt.pem -inkey file.key.pem -CAfile CAfile -out outfile -keyopt rsa_padding_mode:pss -certfile by_hash/81908841

Errors
1435735688:error:2E0A40AF:CMS routines:CMS_add0_cert:certificate already present:cms_lib.c:462:
1435735688:error:2E094041:CMS routines:CMS_sign:malloc failure:cms_smime.c:461:

Обратите внимание, что я на 100% уверен, что предоставленные мной параметры верны на 100%, (т.е. infile, outfile, certfile, keyfile, cafile и hash_file)

Заранее спасибо

1 Ответ

0 голосов
/ 17 октября 2018

Как исправить ошибку сбоя malloc в openssl?

Если я правильно разбираю что-то, похоже, CMS_add1_cert не работает.Это может быть не ошибка памяти (или это может быть связано с ошибкой синтаксического анализа, вызывающей чрезвычайно большой размер параметра).

OpenSSL 1.0.2.j is Commit e216bf9d7ca7 .Здесь cms.c, а функция на cms_smime.c:461 показана ниже.

Строка 461 - это код:

merr:
    CMSerr(CMS_F_CMS_SIGN, ERR_R_MALLOC_FAILURE);

Я предполагаю, что это происходит из-за этого:

for (i = 0; i < sk_X509_num(certs); i++) {
    X509 *x = sk_X509_value(certs, i);
    if (!CMS_add1_cert(cms, x))
        goto merr;
}

Мы не можем сказать больше, потому что не хватает информации, такой как сертификаты и другие параметры.Следующим шагом будет установка символов, а затем добавление кода в отладчике.


Вот CMS_sign, который предоставляет функцию, возвращающую ошибку.

CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey,
                          STACK_OF(X509) *certs, BIO *data,
                          unsigned int flags)
{
    CMS_ContentInfo *cms;
    int i;

    cms = CMS_ContentInfo_new();
    if (!cms || !CMS_SignedData_init(cms))
        goto merr;

    if (pkey && !CMS_add1_signer(cms, signcert, pkey, NULL, flags)) {
        CMSerr(CMS_F_CMS_SIGN, CMS_R_ADD_SIGNER_ERROR);
        goto err;
    }

    for (i = 0; i < sk_X509_num(certs); i++) {
        X509 *x = sk_X509_value(certs, i);
        if (!CMS_add1_cert(cms, x))
            goto merr;
    }

    if (!(flags & CMS_DETACHED))
        CMS_set_detached(cms, 0);

    if ((flags & (CMS_STREAM | CMS_PARTIAL))
        || CMS_final(cms, data, NULL, flags))
        return cms;
    else
        goto err;

 merr:
    CMSerr(CMS_F_CMS_SIGN, ERR_R_MALLOC_FAILURE);

 err:
    if (cms)
        CMS_ContentInfo_free(cms);
    return NULL;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...