Add af_alg errors to the error queue

If the kernel operation failed the EVP functions
just returned without any error message.

This commit adds them.

Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/19289)
This commit is contained in:
ramin 2022-09-28 11:41:29 +02:00 committed by Tomas Mraz
parent 6ca4bd2e4c
commit bd19999b39
4 changed files with 29 additions and 3 deletions

View File

@ -355,6 +355,18 @@ static int afalg_fin_cipher_aio(afalg_aio *aio, int sfd, unsigned char *buf,
}
continue;
} else {
char strbuf[32];
/*
* sometimes __s64 is defined as long long int
* but on some archs ( like mips64 or powerpc64 ) it's just long int
*
* to be able to use BIO_snprintf() with %lld without warnings
* copy events[0].res to an long long int variable
*
* because long long int should always be at least 64 bit this should work
*/
long long int op_ret = events[0].res;
/*
* Retries exceed for -EBUSY or unrecoverable error
* condition for this instance of operation.
@ -362,6 +374,17 @@ static int afalg_fin_cipher_aio(afalg_aio *aio, int sfd, unsigned char *buf,
ALG_WARN
("%s(%d): Crypto Operation failed with code %lld\n",
__FILE__, __LINE__, events[0].res);
BIO_snprintf(strbuf, sizeof(strbuf), "%lld", op_ret);
switch (events[0].res) {
case -ENOMEM:
AFALGerr(0, AFALG_R_KERNEL_OP_FAILED);
ERR_add_error_data(3, "-ENOMEM ( code ", strbuf, " )");
break;
default:
AFALGerr(0, AFALG_R_KERNEL_OP_FAILED);
ERR_add_error_data(2, "code ", strbuf);
break;
}
return 0;
}
}

View File

@ -1,4 +1,4 @@
# Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved.
# Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved.
#
# Licensed under the Apache License 2.0 (the "License"). You may not use
# this file except in compliance with the License. You can obtain a copy
@ -13,6 +13,7 @@ AFALG_R_IO_SETUP_FAILED:105:io setup failed
AFALG_R_KERNEL_DOES_NOT_SUPPORT_AFALG:101:kernel does not support afalg
AFALG_R_KERNEL_DOES_NOT_SUPPORT_ASYNC_AFALG:107:\
kernel does not support async afalg
AFALG_R_KERNEL_OP_FAILED:112:kernel op failed
AFALG_R_MEM_ALLOC_FAILED:102:mem alloc failed
AFALG_R_SOCKET_ACCEPT_FAILED:110:socket accept failed
AFALG_R_SOCKET_BIND_FAILED:103:socket bind failed

View File

@ -1,6 +1,6 @@
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
* Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the Apache License 2.0 (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@ -23,6 +23,7 @@ static ERR_STRING_DATA AFALG_str_reasons[] = {
"kernel does not support afalg"},
{ERR_PACK(0, 0, AFALG_R_KERNEL_DOES_NOT_SUPPORT_ASYNC_AFALG),
"kernel does not support async afalg"},
{ERR_PACK(0, 0, AFALG_R_KERNEL_OP_FAILED), "kernel op failed"},
{ERR_PACK(0, 0, AFALG_R_MEM_ALLOC_FAILED), "mem alloc failed"},
{ERR_PACK(0, 0, AFALG_R_SOCKET_ACCEPT_FAILED), "socket accept failed"},
{ERR_PACK(0, 0, AFALG_R_SOCKET_BIND_FAILED), "socket bind failed"},

View File

@ -1,6 +1,6 @@
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
* Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the Apache License 2.0 (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@ -28,6 +28,7 @@
# define AFALG_R_IO_SETUP_FAILED 105
# define AFALG_R_KERNEL_DOES_NOT_SUPPORT_AFALG 101
# define AFALG_R_KERNEL_DOES_NOT_SUPPORT_ASYNC_AFALG 107
# define AFALG_R_KERNEL_OP_FAILED 112
# define AFALG_R_MEM_ALLOC_FAILED 102
# define AFALG_R_SOCKET_ACCEPT_FAILED 110
# define AFALG_R_SOCKET_BIND_FAILED 103