[pkg-opensc-commit] [opensc] 236/295: fixed more coverity issues

Eric Dorland eric at moszumanska.debian.org
Sat Jun 24 21:11:35 UTC 2017


This is an automated email from the git hooks/post-receive script.

eric pushed a commit to branch master
in repository opensc.

commit 9d15326de1779209d929a4642a53a252fc4bd7dc
Author: Frank Morgner <frankmorgner at gmail.com>
Date:   Thu Apr 13 12:46:05 2017 +0200

    fixed more coverity issues
---
 src/libopensc/card-npa.c       | 10 +++++-----
 src/libopensc/card-sc-hsm.c    |  6 ++++--
 src/libopensc/ctx.c            |  6 ++----
 src/libopensc/iso7816.c        |  3 ++-
 src/libopensc/pkcs15.c         |  8 ++++----
 src/libopensc/reader-tr03119.c |  4 ++--
 src/pkcs11/misc.c              | 12 +++++++-----
 src/sm/sm-eac.c                |  5 +++--
 src/sm/sm-iso.c                |  2 +-
 9 files changed, 30 insertions(+), 26 deletions(-)

diff --git a/src/libopensc/card-npa.c b/src/libopensc/card-npa.c
index 385d3a5..c9067b1 100644
--- a/src/libopensc/card-npa.c
+++ b/src/libopensc/card-npa.c
@@ -117,7 +117,7 @@ static int npa_load_options(sc_context_t *ctx, struct npa_drv_data *drv_data)
 				if (!fread_to_eof(file,
 							(unsigned char **) &drv_data->st_dv_certificate,
 							&drv_data->st_dv_certificate_len))
-					sc_log(ctx, "Waring: Could not read %s.\n", file);
+					sc_log(ctx, "Warning: Could not read %s.\n", file);
 			}
 
 			if (!drv_data->st_certificate
@@ -126,7 +126,7 @@ static int npa_load_options(sc_context_t *ctx, struct npa_drv_data *drv_data)
 				if (!fread_to_eof(file,
 							(unsigned char **) &drv_data->st_certificate,
 							&drv_data->st_certificate_len))
-					sc_log(ctx, "Waring: Could not read %s.\n", file);
+					sc_log(ctx, "Warning: Could not read %s.\n", file);
 			}
 
 			if (!drv_data->st_key
@@ -135,7 +135,7 @@ static int npa_load_options(sc_context_t *ctx, struct npa_drv_data *drv_data)
 				if (!fread_to_eof(file,
 							(unsigned char **) &drv_data->st_key,
 							&drv_data->st_key_len))
-					sc_log(ctx, "Waring: Could not read %s.\n", file);
+					sc_log(ctx, "Warning: Could not read %s.\n", file);
 			}
 		}
 		
@@ -684,8 +684,8 @@ static int npa_logout(sc_card_t *card)
 		 * disable SM on the reader. */
 		sc_format_apdu(card, &apdu, SC_APDU_CASE_1, 0xA4, 0x00, 0x00);
 		apdu.cla = 0x0C;
-		sc_transmit_apdu(card, &apdu);
-		/* ignore result */
+		if (SC_SUCCESS != sc_transmit_apdu(card, &apdu))
+			sc_log(card->ctx, "Warning: Could not logout.");
 	}
 	return sc_select_file(card, sc_get_mf_path(), NULL);
 }
diff --git a/src/libopensc/card-sc-hsm.c b/src/libopensc/card-sc-hsm.c
index d7714e7..a469abd 100644
--- a/src/libopensc/card-sc-hsm.c
+++ b/src/libopensc/card-sc-hsm.c
@@ -538,11 +538,12 @@ static int sc_hsm_compute_signature(sc_card_t *card,
 	sc_apdu_t apdu;
 	u8 rbuf[SC_MAX_APDU_BUFFER_SIZE];
 	u8 sbuf[SC_MAX_APDU_BUFFER_SIZE];
-	sc_hsm_private_data_t *priv = (sc_hsm_private_data_t *) card->drv_data;
+	sc_hsm_private_data_t *priv;
 
 	if (card == NULL || data == NULL || out == NULL) {
 		return SC_ERROR_INVALID_ARGUMENTS;
 	}
+	priv = (sc_hsm_private_data_t *) card->drv_data;
 
 	if (priv->env == NULL) {
 		LOG_FUNC_RETURN(card->ctx, SC_ERROR_OBJECT_NOT_FOUND);
@@ -590,12 +591,13 @@ static int sc_hsm_decipher(sc_card_t *card, const u8 * crgram, size_t crgram_len
 	size_t len;
 	sc_apdu_t apdu;
 	u8 rbuf[SC_MAX_APDU_BUFFER_SIZE];
-	sc_hsm_private_data_t *priv = (sc_hsm_private_data_t *) card->drv_data;
+	sc_hsm_private_data_t *priv;
 
 	if (card == NULL || crgram == NULL || out == NULL) {
 		return SC_ERROR_INVALID_ARGUMENTS;
 	}
 	LOG_FUNC_CALLED(card->ctx);
+	priv = (sc_hsm_private_data_t *) card->drv_data;
 
 	sc_format_apdu(card, &apdu, SC_APDU_CASE_4, 0x62, priv->env->key_ref[0], priv->algorithm);
 	apdu.cla = 0x80;
diff --git a/src/libopensc/ctx.c b/src/libopensc/ctx.c
index 1f91dff..1e3d0db 100644
--- a/src/libopensc/ctx.c
+++ b/src/libopensc/ctx.c
@@ -526,8 +526,6 @@ static int load_card_drivers(sc_context_t *ctx, struct _sc_ctx_options *opts)
 		ctx->card_drivers[drv_count] = func();
 		if (ctx->card_drivers[drv_count] == NULL) {
 			sc_log(ctx, "Driver '%s' not available.", ent->name);
-			if (dll)
-				sc_dlclose(dll);
 			continue;
 		}
 
@@ -818,8 +816,8 @@ int sc_context_create(sc_context_t **ctx_out, const sc_context_param_t *parm)
 		}
 	}
 	if (opts.forced_card_driver) {
-		/* FIXME: check return value? */
-		sc_set_card_driver(ctx, opts.forced_card_driver);
+		if (SC_SUCCESS != sc_set_card_driver(ctx, opts.forced_card_driver))
+			sc_log(ctx, "Warning: Could not load %s.", opts.forced_card_driver);
 		free(opts.forced_card_driver);
 	}
 	del_drvs(&opts);
diff --git a/src/libopensc/iso7816.c b/src/libopensc/iso7816.c
index 3edb582..b9127d3 100644
--- a/src/libopensc/iso7816.c
+++ b/src/libopensc/iso7816.c
@@ -397,7 +397,8 @@ iso7816_process_fci(struct sc_card *card, struct sc_file *file,
 			sc_log(ctx, "  EF structure: %d", byte & 0x07);
 			sc_log(ctx, "  tag 0x82: 0x%02x", byte);
 			/* FIXME: check return value? */
-			sc_file_set_type_attr(file, &byte, 1);
+			if (SC_SUCCESS != sc_file_set_type_attr(file, &byte, 1))
+				sc_log(ctx, "Warning: Could not set file attributes");
 		}
 	}
 
diff --git a/src/libopensc/pkcs15.c b/src/libopensc/pkcs15.c
index f2249db..e9317f9 100644
--- a/src/libopensc/pkcs15.c
+++ b/src/libopensc/pkcs15.c
@@ -2285,15 +2285,16 @@ int
 sc_pkcs15_read_file(struct sc_pkcs15_card *p15card, const struct sc_path *in_path,
 		unsigned char **buf, size_t *buflen)
 {
-	struct sc_context *ctx = p15card->card->ctx;
+	struct sc_context *ctx;
 	struct sc_file *file = NULL;
 	unsigned char *data = NULL;
 	size_t	len = 0, offset = 0;
 	int	r;
 
-	if (p15card == NULL || in_path == NULL || buf == NULL) {
+	if (p15card == NULL || p15card->card == NULL || in_path == NULL || buf == NULL) {
 		return SC_ERROR_INVALID_ARGUMENTS;
 	}
+	ctx = p15card->card->ctx;
 
 	LOG_FUNC_CALLED(ctx);
 	sc_log(ctx, "path=%s, index=%u, count=%d", sc_print_path(in_path), in_path->index, in_path->count);
@@ -2354,7 +2355,6 @@ sc_pkcs15_read_file(struct sc_pkcs15_card *p15card, const struct sc_path *in_pat
 				if (r == SC_ERROR_RECORD_NOT_FOUND)
 					break;
 				if (r < 0) {
-					free(data);
 					goto fail_unlock;
 				}
 				if (r < 2)
@@ -2376,7 +2376,6 @@ sc_pkcs15_read_file(struct sc_pkcs15_card *p15card, const struct sc_path *in_pat
 		else {
 			r = sc_read_binary(p15card->card, offset, data, len, 0);
 			if (r < 0) {
-				free(data);
 				goto fail_unlock;
 			}
 			/* sc_read_binary may return less than requested */
@@ -2395,6 +2394,7 @@ sc_pkcs15_read_file(struct sc_pkcs15_card *p15card, const struct sc_path *in_pat
 	LOG_FUNC_RETURN(ctx, SC_SUCCESS);
 
 fail_unlock:
+	free(data);
 	sc_file_free(file);
 	sc_unlock(p15card->card);
 	LOG_FUNC_RETURN(ctx, r);
diff --git a/src/libopensc/reader-tr03119.c b/src/libopensc/reader-tr03119.c
index 2aada6e..7a9d4a4 100644
--- a/src/libopensc/reader-tr03119.c
+++ b/src/libopensc/reader-tr03119.c
@@ -987,11 +987,11 @@ void sc_detect_escape_cmds(sc_reader_t *reader)
 		}
 	}
 
-	if (error) {
+	if (error && reader) {
 		sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL,
 				"%d escape command%s failed, need to reset the card",
 				error, error == 1 ? "" : "s");
-		if (reader && reader->ops && reader->ops->transmit) {
+		if (reader->ops && reader->ops->transmit) {
 			memset(&apdu, 0, sizeof(apdu));
 			apdu.cse     = SC_APDU_CASE_3_SHORT;
 			apdu.cla     = 0x00;
diff --git a/src/pkcs11/misc.c b/src/pkcs11/misc.c
index 02c26ed..44fab3c 100644
--- a/src/pkcs11/misc.c
+++ b/src/pkcs11/misc.c
@@ -186,12 +186,14 @@ CK_RV push_login_state(struct sc_pkcs11_slot *slot,
 		goto err;
 	}
 
-	login->pPin = sc_mem_alloc_secure(context, (sizeof *pPin)*ulPinLen);
-	if (login->pPin == NULL) {
-		goto err;
+	if (pPin && ulPinLen) {
+		login->pPin = sc_mem_alloc_secure(context, (sizeof *pPin)*ulPinLen);
+		if (login->pPin == NULL) {
+			goto err;
+		}
+		memcpy(login->pPin, pPin, (sizeof *pPin)*ulPinLen);
+		login->ulPinLen = ulPinLen;
 	}
-	memcpy(login->pPin, pPin, (sizeof *pPin)*ulPinLen);
-	login->ulPinLen = ulPinLen;
 	login->userType = userType;
 
 	if (0 > list_append(&slot->logins, login)) {
diff --git a/src/sm/sm-eac.c b/src/sm/sm-eac.c
index a41649b..c51b4b8 100644
--- a/src/sm/sm-eac.c
+++ b/src/sm/sm-eac.c
@@ -1051,7 +1051,7 @@ int perform_pace(sc_card_t *card,
 	int r;
 	const unsigned char *pp;
 
-	if (!card || !pace_output)
+	if (!card || !card->reader || !card->reader->ops || !pace_output)
 		return SC_ERROR_INVALID_ARGUMENTS;
 
 	/* show description in advance to give the user more time to read it...
@@ -2346,7 +2346,8 @@ int perform_pace(sc_card_t *card,
 {
 	int r;
 
-	if (card->reader->capabilities & SC_READER_CAP_PACE_GENERIC
+	if (card && card->reader
+			&& card->reader->capabilities & SC_READER_CAP_PACE_GENERIC
 			&& card->reader->ops->perform_pace) {
 		r = card->reader->ops->perform_pace(card->reader, &pace_input, pace_output);
 	} else {
diff --git a/src/sm/sm-iso.c b/src/sm/sm-iso.c
index c6c1435..2f419cb 100644
--- a/src/sm/sm-iso.c
+++ b/src/sm/sm-iso.c
@@ -690,7 +690,7 @@ int iso_get_sm_apdu(struct sc_card *card, struct sc_apdu *apdu, struct sc_apdu *
 
 int iso_free_sm_apdu(struct sc_card *card, struct sc_apdu *apdu, struct sc_apdu **sm_apdu)
 {
-	struct sc_apdu *p = *sm_apdu;
+	struct sc_apdu *p;
 	int r;
 
 	if (!sm_apdu)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-opensc/opensc.git



More information about the pkg-opensc-commit mailing list