Replace FUNCerr with ERR_raise_data Reviewed-by: Paul Dale <paul.dale@oracle.com> Reviewed-by: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/9496)
diff --git a/CHANGES b/CHANGES index 6fbfe0d..0b692cd 100644 --- a/CHANGES +++ b/CHANGES
@@ -37,10 +37,6 @@ private key for those. This avoids leaking bit 0 of the private key. [Bernd Edlinger] - *) Added a new FUNCerr() macro that takes a function name. - The macro SYSerr() is deprecated. - [Rich Salz] - *) Significantly reduce secure memory usage by the randomness pools. [Paul Dale]
diff --git a/apps/apps.c b/apps/apps.c index 79d6bec..274a387 100644 --- a/apps/apps.c +++ b/apps/apps.c
@@ -1395,8 +1395,8 @@ #ifndef OPENSSL_NO_POSIX_IO BIO_get_fp(in, &dbfp); if (fstat(fileno(dbfp), &dbst) == -1) { - FUNCerr("fstat", errno); - ERR_add_error_data(1, dbfile); + ERR_raise_data(ERR_LIB_SYS, errno, + "calling fstat(%s)", dbfile); ERR_print_errors(bio_err); goto err; }
diff --git a/crypto/bio/b_addr.c b/crypto/bio/b_addr.c index e2354e3..4736633 100644 --- a/crypto/bio/b_addr.c +++ b/crypto/bio/b_addr.c
@@ -207,7 +207,8 @@ flags)) != 0) { # ifdef EAI_SYSTEM if (ret == EAI_SYSTEM) { - FUNCerr("getnameinfo", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling getnameinfo()"); BIOerr(BIO_F_ADDR_STRINGS, ERR_R_SYS_LIB); } else # endif @@ -700,7 +701,8 @@ switch ((gai_ret = getaddrinfo(host, service, &hints, res))) { # ifdef EAI_SYSTEM case EAI_SYSTEM: - FUNCerr("getaddrinfo", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling getaddrinfo()"); BIOerr(BIO_F_BIO_LOOKUP_EX, ERR_R_SYS_LIB); break; # endif @@ -804,12 +806,15 @@ */ # if defined(OPENSSL_SYS_VXWORKS) /* h_errno doesn't exist on VxWorks */ - FUNCerr("gethostbyname", 1000 ); + ERR_raise_data(ERR_LIB_SYS, 1000, + "calling gethostbyname()"); # else - FUNCerr("gethostbyname", 1000 + h_errno); + ERR_raise_data(ERR_LIB_SYS, 1000 + h_errno, + "calling gethostbyname()"); # endif #else - FUNCerr("gethostbyname", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling gethostbyname()"); #endif ret = 0; goto err; @@ -855,7 +860,8 @@ se = getservbyname(service, proto); if (se == NULL) { - FUNCerr("getservbyname", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling getservbyname()"); goto err; } } else {
diff --git a/crypto/bio/b_sock.c b/crypto/bio/b_sock.c index 46a2ff7..1747cce 100644 --- a/crypto/bio/b_sock.c +++ b/crypto/bio/b_sock.c
@@ -129,7 +129,8 @@ * probed at run-time with DSO_global_lookup. */ if (WSAStartup(0x0202, &wsa_state) != 0) { - FUNCerr("wsastartup", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling wsastartup()"); BIOerr(BIO_F_BIO_SOCK_INIT, BIO_R_WSASTARTUP); return -1; } @@ -189,7 +190,8 @@ i = ioctlsocket(fd, type, ARG); # endif /* __DJGPP__ */ if (i < 0) - FUNCerr("ioctlsocket", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling ioctlsocket()"); return i; } @@ -240,7 +242,8 @@ ret = -2; goto end; } - FUNCerr("accept", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling accept()"); BIOerr(BIO_F_BIO_ACCEPT, BIO_R_ACCEPT_ERROR); goto end; } @@ -305,7 +308,8 @@ l = fcntl(s, F_GETFL, 0); if (l == -1) { - FUNCerr("fcntl", get_last_sys_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(), + "calling fcntl()"); ret = -1; } else { # if defined(O_NONBLOCK) @@ -323,7 +327,8 @@ ret = fcntl(s, F_SETFL, l); if (ret < 0) { - FUNCerr("fcntl", get_last_sys_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(), + "calling fcntl()"); } } # else @@ -346,7 +351,8 @@ ret = getsockname(sock, BIO_ADDR_sockaddr_noconst(info->addr), &addr_len); if (ret == -1) { - FUNCerr("getsockname", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling getsockname()"); BIOerr(BIO_F_BIO_SOCK_INFO, BIO_R_GETSOCKNAME_ERROR); return 0; }
diff --git a/crypto/bio/b_sock2.c b/crypto/bio/b_sock2.c index ee26951..abfd704 100644 --- a/crypto/bio/b_sock2.c +++ b/crypto/bio/b_sock2.c
@@ -46,7 +46,8 @@ sock = socket(domain, socktype, protocol); if (sock == -1) { - FUNCerr("socket", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling socket()"); BIOerr(BIO_F_BIO_SOCKET, BIO_R_UNABLE_TO_CREATE_SOCKET); return INVALID_SOCKET; } @@ -89,7 +90,8 @@ if (options & BIO_SOCK_KEEPALIVE) { if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, (const void *)&on, sizeof(on)) != 0) { - FUNCerr("setsockopt", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling setsockopt()"); BIOerr(BIO_F_BIO_CONNECT, BIO_R_UNABLE_TO_KEEPALIVE); return 0; } @@ -98,7 +100,8 @@ if (options & BIO_SOCK_NODELAY) { if (setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (const void *)&on, sizeof(on)) != 0) { - FUNCerr("setsockopt", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling setsockopt()"); BIOerr(BIO_F_BIO_CONNECT, BIO_R_UNABLE_TO_NODELAY); return 0; } @@ -107,7 +110,8 @@ if (connect(sock, BIO_ADDR_sockaddr(addr), BIO_ADDR_sockaddr_size(addr)) == -1) { if (!BIO_sock_should_retry(-1)) { - FUNCerr("connect", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling connect()"); BIOerr(BIO_F_BIO_CONNECT, BIO_R_CONNECT_ERROR); } return 0; @@ -150,7 +154,8 @@ if (options & BIO_SOCK_REUSEADDR) { if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const void *)&on, sizeof(on)) != 0) { - FUNCerr("setsockopt", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling setsockopt()"); BIOerr(BIO_F_BIO_BIND, BIO_R_UNABLE_TO_REUSEADDR); return 0; } @@ -158,7 +163,8 @@ # endif if (bind(sock, BIO_ADDR_sockaddr(addr), BIO_ADDR_sockaddr_size(addr)) != 0) { - FUNCerr("bind", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling bind()"); BIOerr(BIO_F_BIO_BIND, BIO_R_UNABLE_TO_BIND_SOCKET); return 0; } @@ -217,7 +223,8 @@ if (getsockopt(sock, SOL_SOCKET, SO_TYPE, (void *)&socktype, &socktype_len) != 0 || socktype_len != sizeof(socktype)) { - FUNCerr("getsockopt", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling getsockopt()"); BIOerr(BIO_F_BIO_LISTEN, BIO_R_GETTING_SOCKTYPE); return 0; } @@ -228,7 +235,8 @@ if (options & BIO_SOCK_KEEPALIVE) { if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, (const void *)&on, sizeof(on)) != 0) { - FUNCerr("setsockopt", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling setsockopt()"); BIOerr(BIO_F_BIO_LISTEN, BIO_R_UNABLE_TO_KEEPALIVE); return 0; } @@ -237,7 +245,8 @@ if (options & BIO_SOCK_NODELAY) { if (setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (const void *)&on, sizeof(on)) != 0) { - FUNCerr("setsockopt", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling setsockopt()"); BIOerr(BIO_F_BIO_LISTEN, BIO_R_UNABLE_TO_NODELAY); return 0; } @@ -252,7 +261,8 @@ on = options & BIO_SOCK_V6_ONLY ? 1 : 0; if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (const void *)&on, sizeof(on)) != 0) { - FUNCerr("setsockopt", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling setsockopt()"); BIOerr(BIO_F_BIO_LISTEN, BIO_R_LISTEN_V6_ONLY); return 0; } @@ -263,7 +273,8 @@ return 0; if (socktype != SOCK_DGRAM && listen(sock, MAX_LISTEN) == -1) { - FUNCerr("listen", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling listen()"); BIOerr(BIO_F_BIO_LISTEN, BIO_R_UNABLE_TO_LISTEN_SOCKET); return 0; } @@ -290,7 +301,8 @@ BIO_ADDR_sockaddr_noconst(addr), &len); if (accepted_sock == -1) { if (!BIO_sock_should_retry(accepted_sock)) { - FUNCerr("accept", get_last_socket_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling accept()"); BIOerr(BIO_F_BIO_ACCEPT_EX, BIO_R_ACCEPT_ERROR); } return INVALID_SOCKET;
diff --git a/crypto/bio/bss_acpt.c b/crypto/bio/bss_acpt.c index c47b750..830c1b9 100644 --- a/crypto/bio/bss_acpt.c +++ b/crypto/bio/bss_acpt.c
@@ -226,10 +226,9 @@ BIO_ADDRINFO_socktype(c->addr_iter), BIO_ADDRINFO_protocol(c->addr_iter), 0); if (ret == (int)INVALID_SOCKET) { - FUNCerr("socket", get_last_socket_error()); - ERR_add_error_data(4, - "hostname=", c->param_addr, - " service=", c->param_serv); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling socket(%s, %s)", + c->param_addr, c->param_serv); BIOerr(BIO_F_ACPT_STATE, BIO_R_UNABLE_TO_CREATE_SOCKET); goto exit_loop; }
diff --git a/crypto/bio/bss_conn.c b/crypto/bio/bss_conn.c index 330c64f..56fb392 100644 --- a/crypto/bio/bss_conn.c +++ b/crypto/bio/bss_conn.c
@@ -138,10 +138,9 @@ BIO_ADDRINFO_socktype(c->addr_iter), BIO_ADDRINFO_protocol(c->addr_iter), 0); if (ret == (int)INVALID_SOCKET) { - FUNCerr("socket", get_last_socket_error()); - ERR_add_error_data(4, - "hostname=", c->param_hostname, - " service=", c->param_service); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling socket(%s, %s)", + c->param_hostname, c->param_service); BIOerr(BIO_F_CONN_STATE, BIO_R_UNABLE_TO_CREATE_SOCKET); goto exit_loop; } @@ -170,10 +169,9 @@ ERR_clear_error(); break; } else { - FUNCerr("connect", get_last_socket_error()); - ERR_add_error_data(4, - "hostname=", c->param_hostname, - " service=", c->param_service); + ERR_raise_data(ERR_LIB_SYS, get_last_socket_error(), + "calling connect(%s, %s)", + c->param_hostname, c->param_service); BIOerr(BIO_F_CONN_STATE, BIO_R_CONNECT_ERROR); } goto exit_loop; @@ -186,10 +184,9 @@ i = BIO_sock_error(b->num); if (i) { BIO_clear_retry_flags(b); - FUNCerr("connect", i); - ERR_add_error_data(4, - "hostname=", c->param_hostname, - " service=", c->param_service); + ERR_raise_data(ERR_LIB_SYS, i, + "calling connect(%s, %s)", + c->param_hostname, c->param_service); BIOerr(BIO_F_CONN_STATE, BIO_R_NBIO_CONNECT_ERROR); ret = 0; goto exit_loop;
diff --git a/crypto/bio/bss_file.c b/crypto/bio/bss_file.c index 0aa6b71..c1acad9 100644 --- a/crypto/bio/bss_file.c +++ b/crypto/bio/bss_file.c
@@ -66,8 +66,9 @@ fp_flags |= BIO_FP_TEXT; if (file == NULL) { - FUNCerr("fopen", get_last_sys_error()); - ERR_add_error_data(5, "fopen('", filename, "','", mode, "')"); + ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(), + "calling fopen(%s, %s)", + filename, mode); if (errno == ENOENT #ifdef ENXIO || errno == ENXIO @@ -146,7 +147,8 @@ if (ret == 0 && (b->flags & BIO_FLAGS_UPLINK_INTERNAL ? UP_ferror((FILE *)b->ptr) : ferror((FILE *)b->ptr))) { - FUNCerr("fread", get_last_sys_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(), + "calling fread()"); BIOerr(BIO_F_FILE_READ, ERR_R_SYS_LIB); ret = -1; } @@ -285,8 +287,9 @@ # endif fp = openssl_fopen(ptr, p); if (fp == NULL) { - FUNCerr("fopen", get_last_sys_error()); - ERR_add_error_data(5, "fopen('", ptr, "','", p, "')"); + ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(), + "calling fopen(%s, %s)", + ptr, p); BIOerr(BIO_F_FILE_CTRL, ERR_R_SYS_LIB); ret = 0; break; @@ -313,8 +316,8 @@ st = b->flags & BIO_FLAGS_UPLINK_INTERNAL ? UP_fflush(b->ptr) : fflush((FILE *)b->ptr); if (st == EOF) { - FUNCerr("fflush", get_last_sys_error()); - ERR_add_error_data(1, "fflush()"); + ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(), + "calling fflush()"); BIOerr(BIO_F_FILE_CTRL, ERR_R_SYS_LIB); ret = 0; }
diff --git a/crypto/conf/conf_def.c b/crypto/conf/conf_def.c index d6cd315..cbf0b2b 100644 --- a/crypto/conf/conf_def.c +++ b/crypto/conf/conf_def.c
@@ -673,8 +673,9 @@ BIO *next; if (stat(include, &st) < 0) { - FUNCerr("stat", errno); - ERR_add_error_data(1, include); + ERR_raise_data(ERR_LIB_SYS, errno, + "calling stat(%s)", + include); /* missing include file is not fatal error */ return NULL; }
diff --git a/crypto/store/loader_file.c b/crypto/store/loader_file.c index ab59fab..206af12 100644 --- a/crypto/store/loader_file.c +++ b/crypto/store/loader_file.c
@@ -824,8 +824,9 @@ } if (stat(path_data[i].path, &st) < 0) { - FUNCerr("stat", errno); - ERR_add_error_data(1, path_data[i].path); + ERR_raise_data(ERR_LIB_SYS, errno, + "calling stat(%s)", + path_data[i].path); } else { path = path_data[i].path; }
diff --git a/engines/e_devcrypto.c b/engines/e_devcrypto.c index aa5c1a6..489109a 100644 --- a/engines/e_devcrypto.c +++ b/engines/e_devcrypto.c
@@ -72,7 +72,7 @@ static int clean_devcrypto_session(struct session_op *sess) { if (ioctl(cfd, CIOCFSESSION, &sess->ses) < 0) { - FUNCerr("ioctl", errno); + ERR_raise_data(ERR_LIB_SYS, errno, "calling ioctl()"); return 0; } memset(sess, 0, sizeof(struct session_op)); @@ -208,7 +208,7 @@ cipher_ctx->mode = cipher_d->flags & EVP_CIPH_MODE; cipher_ctx->blocksize = cipher_d->blocksize; if (ioctl(cfd, CIOCGSESSION, &cipher_ctx->sess) < 0) { - FUNCerr("ioctl", errno); + ERR_raise_data(ERR_LIB_SYS, errno, "calling ioctl()"); return 0; } @@ -260,7 +260,7 @@ #endif if (ioctl(cfd, CIOCCRYPT, &cryp) < 0) { - FUNCerr("ioctl", errno); + ERR_raise_data(ERR_LIB_SYS, errno, "calling ioctl()"); return 0; } @@ -704,7 +704,7 @@ memset(&digest_ctx->sess, 0, sizeof(digest_ctx->sess)); digest_ctx->sess.mac = digest_d->devcryptoid; if (ioctl(cfd, CIOCGSESSION, &digest_ctx->sess) < 0) { - FUNCerr("ioctl", errno); + ERR_raise_data(ERR_LIB_SYS, errno, "calling ioctl()"); return 0; } return 1; @@ -743,7 +743,7 @@ return 1; } - FUNCerr("ioctl", errno); + ERR_raise_data(ERR_LIB_SYS, errno, "calling ioctl()"); return 0; } @@ -758,7 +758,7 @@ if (EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_ONESHOT)) { memcpy(md, digest_ctx->digest_res, EVP_MD_CTX_size(ctx)); } else if (digest_op(digest_ctx, NULL, 0, md, COP_FLAG_FINAL) < 0) { - FUNCerr("ioctl", errno); + ERR_raise_data(ERR_LIB_SYS, errno, "calling ioctl()"); return 0; } @@ -777,14 +777,14 @@ return 1; if (!digest_init(to)) { - FUNCerr("ioctl", errno); + ERR_raise_data(ERR_LIB_SYS, errno, "calling ioctl()"); return 0; } cphash.src_ses = digest_from->sess.ses; cphash.dst_ses = digest_to->sess.ses; if (ioctl(cfd, CIOCCPHASH, &cphash) < 0) { - FUNCerr("ioctl", errno); + ERR_raise_data(ERR_LIB_SYS, errno, "calling ioctl()"); return 0; } return 1;
diff --git a/include/openssl/err.h b/include/openssl/err.h index 142321d..ad5ed5a 100644 --- a/include/openssl/err.h +++ b/include/openssl/err.h
@@ -110,7 +110,6 @@ # if ! OPENSSL_API_3 # define SYSerr(f,r) ERR_raise(ERR_LIB_SYS,(r)) # endif -# define FUNCerr(f,r) ERR_raise_data(ERR_LIB_SYS,(r),"calling function %s",(f)) # define BNerr(f,r) ERR_raise(ERR_LIB_RSA,(r)) # define RSAerr(f,r) ERR_raise(ERR_LIB_RSA,(r)) # define DHerr(f,r) ERR_raise(ERR_LIB_DH,(r))
diff --git a/ssl/ssl_cert.c b/ssl/ssl_cert.c index 3afa5e5..f902091 100644 --- a/ssl/ssl_cert.c +++ b/ssl/ssl_cert.c
@@ -766,8 +766,9 @@ } if (errno) { - FUNCerr("readdir", get_last_sys_error()); - ERR_add_error_data(3, "OPENSSL_DIR_read(&ctx, '", dir, "')"); + ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(), + "calling OPENSSL_dir_read(%s)", + dir); SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, ERR_R_SYS_LIB); goto err; }
diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index a943414..0d40eca 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c
@@ -2075,7 +2075,8 @@ else #endif #ifdef OPENSSL_NO_KTLS - FUNCerr("sendfile", get_last_sys_error()); + ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(), + "calling sendfile()"); #else SSLerr(SSL_F_SSL_SENDFILE, SSL_R_UNINITIALIZED); #endif
diff --git a/test/errtest.c b/test/errtest.c index 1a18335..95c5242 100644 --- a/test/errtest.c +++ b/test/errtest.c
@@ -54,12 +54,13 @@ file = __FILE__; line = __LINE__ + 1; /* The error is generated on the next line */ - FUNCerr("exit", ERR_R_INTERNAL_ERROR); + ERR_raise_data(ERR_LIB_SYS, ERR_R_INTERNAL_ERROR, + "calling exit()"); if (!TEST_ulong_ne(e = ERR_get_error_line_data(&f, &l, &data, NULL), 0) || !TEST_int_eq(ERR_GET_REASON(e), ERR_R_INTERNAL_ERROR) || !TEST_int_eq(l, line) || !TEST_str_eq(f, file) - || !TEST_str_eq(data, "calling function exit")) + || !TEST_str_eq(data, "calling exit()")) return 0; return 1; }