Add af_alg errors to the error queue
authorramin <lordrasmus@gmail.com>
Wed, 28 Sep 2022 09:41:29 +0000 (11:41 +0200)
committerTomas Mraz <tomas@openssl.org>
Fri, 21 Oct 2022 10:59:14 +0000 (12:59 +0200)
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)

engines/e_afalg.c
engines/e_afalg.txt
engines/e_afalg_err.c
engines/e_afalg_err.h

index 193508430afbf4b224220f91ccd378cbfa4235b4..c0189951e6cd381dc101c09af12057bec30df3fc 100644 (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;
                     }
                 }
index 37f023b87ed1251c014dc477f826865de800bc55..9b5fee8475278495e3e054c012d175c68e1fecfa 100644 (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
index 47a3d034e50d7109c81c564986fa54e67137207e..fa38678e9e77f8906eec0b1634cabdddba86a987 100644 (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"},
index 2070c04a1c11456d5a7bc284259c165d284625d7..8328b21e8eaa43c4afdc5309f7622954e9adb6b9 100644 (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