From 0334d9e55a6d3c3a12b259a0094c470595cf00c8 Mon Sep 17 00:00:00 2001 From: Joseph Sutton Date: Fri, 6 Oct 2023 10:01:10 +1300 Subject: [PATCH] krb5: Check function return values Found by Coverity (Samba CID 240644). Signed-off-by: Joseph Sutton --- lib/krb5/context.c | 72 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 53 insertions(+), 19 deletions(-) diff --git a/lib/krb5/context.c b/lib/krb5/context.c index 19548d413..9d03a80af 100644 --- a/lib/krb5/context.c +++ b/lib/krb5/context.c @@ -284,29 +284,47 @@ init_context_from_config_file(krb5_context context) static krb5_error_code cc_ops_register(krb5_context context) { + krb5_error_code ret; + context->cc_ops = NULL; context->num_cc_ops = 0; #ifndef KCM_IS_API_CACHE - krb5_cc_register(context, &krb5_acc_ops, TRUE); + ret = krb5_cc_register(context, &krb5_acc_ops, TRUE); + if (ret) + return ret; #endif - krb5_cc_register(context, &krb5_fcc_ops, TRUE); - krb5_cc_register(context, &krb5_dcc_ops, TRUE); - krb5_cc_register(context, &krb5_mcc_ops, TRUE); + ret = krb5_cc_register(context, &krb5_fcc_ops, TRUE); + if (ret) + return ret; + ret = krb5_cc_register(context, &krb5_dcc_ops, TRUE); + if (ret) + return ret; + ret = krb5_cc_register(context, &krb5_mcc_ops, TRUE); + if (ret) + return ret; #ifdef HAVE_SCC - krb5_cc_register(context, &krb5_scc_ops, TRUE); + ret = krb5_cc_register(context, &krb5_scc_ops, TRUE); + if (ret) + return ret; #endif #ifdef HAVE_KCM #ifdef KCM_IS_API_CACHE - krb5_cc_register(context, &krb5_akcm_ops, TRUE); + ret = krb5_cc_register(context, &krb5_akcm_ops, TRUE); + if (ret) + return ret; #endif - krb5_cc_register(context, &krb5_kcm_ops, TRUE); + ret = krb5_cc_register(context, &krb5_kcm_ops, TRUE); + if (ret) + return ret; #endif #if defined(HAVE_KEYUTILS_H) - krb5_cc_register(context, &krb5_krcc_ops, TRUE); + ret = krb5_cc_register(context, &krb5_krcc_ops, TRUE); + if (ret) + return ret; #endif - _krb5_load_ccache_plugins(context); - return 0; + ret = _krb5_load_ccache_plugins(context); + return ret; } static krb5_error_code @@ -338,18 +356,30 @@ cc_ops_copy(krb5_context context, const krb5_context src_context) static krb5_error_code kt_ops_register(krb5_context context) { + krb5_error_code ret; + context->num_kt_types = 0; context->kt_types = NULL; - krb5_kt_register (context, &krb5_fkt_ops); - krb5_kt_register (context, &krb5_wrfkt_ops); - krb5_kt_register (context, &krb5_javakt_ops); - krb5_kt_register (context, &krb5_mkt_ops); + ret = krb5_kt_register (context, &krb5_fkt_ops); + if (ret) + return ret; + ret = krb5_kt_register (context, &krb5_wrfkt_ops); + if (ret) + return ret; + ret = krb5_kt_register (context, &krb5_javakt_ops); + if (ret) + return ret; + ret = krb5_kt_register (context, &krb5_mkt_ops); + if (ret) + return ret; #ifndef HEIMDAL_SMALLER - krb5_kt_register (context, &krb5_akf_ops); + ret = krb5_kt_register (context, &krb5_akf_ops); + if (ret) + return ret; #endif - krb5_kt_register (context, &krb5_any_ops); - return 0; + ret = krb5_kt_register (context, &krb5_any_ops); + return ret; } static krb5_error_code @@ -476,8 +506,12 @@ krb5_init_context(krb5_context *context) /* init error tables */ _krb5_init_ets(p); - cc_ops_register(p); - kt_ops_register(p); + ret = cc_ops_register(p); + if (ret) + goto out; + ret = kt_ops_register(p); + if (ret) + goto out; #ifdef PKINIT ret = hx509_context_init(&p->hx509ctx);