diff options
author | miod <> | 2015-07-15 17:00:35 +0000 |
---|---|---|
committer | miod <> | 2015-07-15 17:00:35 +0000 |
commit | 72bac265dfe3af0606bc963eafcba6bdb09767c3 (patch) | |
tree | 88073b7fb9a471709be6f36fa0d62b7c3c96e1f2 /src | |
parent | ca4f335efc3e1db186788b3512b984df53c61687 (diff) | |
download | openbsd-72bac265dfe3af0606bc963eafcba6bdb09767c3.tar.gz openbsd-72bac265dfe3af0606bc963eafcba6bdb09767c3.tar.bz2 openbsd-72bac265dfe3af0606bc963eafcba6bdb09767c3.zip |
Unchecked allocations, and make sure we do not leak upon error. Fixes
Coverity CID 21739 and more.
ok bcook@
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/x509v3/v3_cpols.c | 57 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/x509v3/v3_cpols.c | 57 |
2 files changed, 72 insertions, 42 deletions
diff --git a/src/lib/libcrypto/x509v3/v3_cpols.c b/src/lib/libcrypto/x509v3/v3_cpols.c index 65916778aa..61e6b3ba47 100644 --- a/src/lib/libcrypto/x509v3/v3_cpols.c +++ b/src/lib/libcrypto/x509v3/v3_cpols.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: v3_cpols.c,v 1.19 2015/02/14 15:17:52 miod Exp $ */ | 1 | /* $OpenBSD: v3_cpols.c,v 1.20 2015/07/15 17:00:35 miod Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -334,35 +334,45 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org) | |||
334 | int i; | 334 | int i; |
335 | CONF_VALUE *cnf; | 335 | CONF_VALUE *cnf; |
336 | POLICYINFO *pol; | 336 | POLICYINFO *pol; |
337 | POLICYQUALINFO *qual; | 337 | POLICYQUALINFO *nqual = NULL; |
338 | 338 | ||
339 | if (!(pol = POLICYINFO_new())) | 339 | if ((pol = POLICYINFO_new()) == NULL) |
340 | goto merr; | 340 | goto merr; |
341 | for (i = 0; i < sk_CONF_VALUE_num(polstrs); i++) { | 341 | for (i = 0; i < sk_CONF_VALUE_num(polstrs); i++) { |
342 | cnf = sk_CONF_VALUE_value(polstrs, i); | 342 | cnf = sk_CONF_VALUE_value(polstrs, i); |
343 | if (!strcmp(cnf->name, "policyIdentifier")) { | 343 | if (strcmp(cnf->name, "policyIdentifier") == 0) { |
344 | ASN1_OBJECT *pobj; | 344 | ASN1_OBJECT *pobj; |
345 | if (!(pobj = OBJ_txt2obj(cnf->value, 0))) { | 345 | |
346 | if ((pobj = OBJ_txt2obj(cnf->value, 0)) == NULL) { | ||
346 | X509V3err(X509V3_F_POLICY_SECTION, | 347 | X509V3err(X509V3_F_POLICY_SECTION, |
347 | X509V3_R_INVALID_OBJECT_IDENTIFIER); | 348 | X509V3_R_INVALID_OBJECT_IDENTIFIER); |
348 | X509V3_conf_err(cnf); | 349 | X509V3_conf_err(cnf); |
349 | goto err; | 350 | goto err; |
350 | } | 351 | } |
351 | pol->policyid = pobj; | 352 | pol->policyid = pobj; |
352 | } else if (!name_cmp(cnf->name, "CPS")) { | 353 | } else if (name_cmp(cnf->name, "CPS") == 0) { |
353 | if (!pol->qualifiers) | 354 | if ((nqual = POLICYQUALINFO_new()) == NULL) |
354 | pol->qualifiers = sk_POLICYQUALINFO_new_null(); | ||
355 | if (!(qual = POLICYQUALINFO_new())) | ||
356 | goto merr; | 355 | goto merr; |
357 | if (!sk_POLICYQUALINFO_push(pol->qualifiers, qual)) | 356 | nqual->pqualid = OBJ_nid2obj(NID_id_qt_cps); |
357 | nqual->d.cpsuri = M_ASN1_IA5STRING_new(); | ||
358 | if (nqual->d.cpsuri == NULL) | ||
358 | goto merr; | 359 | goto merr; |
359 | qual->pqualid = OBJ_nid2obj(NID_id_qt_cps); | 360 | if (ASN1_STRING_set(nqual->d.cpsuri, cnf->value, |
360 | qual->d.cpsuri = M_ASN1_IA5STRING_new(); | 361 | strlen(cnf->value)) == 0) |
361 | if (!ASN1_STRING_set(qual->d.cpsuri, cnf->value, | 362 | goto merr; |
362 | strlen(cnf->value))) | 363 | |
364 | if (pol->qualifiers == NULL) { | ||
365 | pol->qualifiers = sk_POLICYQUALINFO_new_null(); | ||
366 | if (pol->qualifiers == NULL) | ||
367 | goto merr; | ||
368 | } | ||
369 | if (sk_POLICYQUALINFO_push(pol->qualifiers, nqual) == 0) | ||
363 | goto merr; | 370 | goto merr; |
364 | } else if (!name_cmp(cnf->name, "userNotice")) { | 371 | nqual = NULL; |
372 | } else if (name_cmp(cnf->name, "userNotice") == 0) { | ||
365 | STACK_OF(CONF_VALUE) *unot; | 373 | STACK_OF(CONF_VALUE) *unot; |
374 | POLICYQUALINFO *qual; | ||
375 | |||
366 | if (*cnf->value != '@') { | 376 | if (*cnf->value != '@') { |
367 | X509V3err(X509V3_F_POLICY_SECTION, | 377 | X509V3err(X509V3_F_POLICY_SECTION, |
368 | X509V3_R_EXPECTED_A_SECTION_NAME); | 378 | X509V3_R_EXPECTED_A_SECTION_NAME); |
@@ -370,7 +380,7 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org) | |||
370 | goto err; | 380 | goto err; |
371 | } | 381 | } |
372 | unot = X509V3_get_section(ctx, cnf->value + 1); | 382 | unot = X509V3_get_section(ctx, cnf->value + 1); |
373 | if (!unot) { | 383 | if (unot == NULL) { |
374 | X509V3err(X509V3_F_POLICY_SECTION, | 384 | X509V3err(X509V3_F_POLICY_SECTION, |
375 | X509V3_R_INVALID_SECTION); | 385 | X509V3_R_INVALID_SECTION); |
376 | X509V3_conf_err(cnf); | 386 | X509V3_conf_err(cnf); |
@@ -378,11 +388,15 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org) | |||
378 | } | 388 | } |
379 | qual = notice_section(ctx, unot, ia5org); | 389 | qual = notice_section(ctx, unot, ia5org); |
380 | X509V3_section_free(ctx, unot); | 390 | X509V3_section_free(ctx, unot); |
381 | if (!qual) | 391 | if (qual == NULL) |
382 | goto err; | 392 | goto err; |
383 | if (!pol->qualifiers) pol->qualifiers = | 393 | |
384 | sk_POLICYQUALINFO_new_null(); | 394 | if (pol->qualifiers == NULL) { |
385 | if (!sk_POLICYQUALINFO_push(pol->qualifiers, qual)) | 395 | pol->qualifiers = sk_POLICYQUALINFO_new_null(); |
396 | if (pol->qualifiers == NULL) | ||
397 | goto merr; | ||
398 | } | ||
399 | if (sk_POLICYQUALINFO_push(pol->qualifiers, qual) == 0) | ||
386 | goto merr; | 400 | goto merr; |
387 | } else { | 401 | } else { |
388 | X509V3err(X509V3_F_POLICY_SECTION, | 402 | X509V3err(X509V3_F_POLICY_SECTION, |
@@ -391,7 +405,7 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org) | |||
391 | goto err; | 405 | goto err; |
392 | } | 406 | } |
393 | } | 407 | } |
394 | if (!pol->policyid) { | 408 | if (pol->policyid == NULL) { |
395 | X509V3err(X509V3_F_POLICY_SECTION, | 409 | X509V3err(X509V3_F_POLICY_SECTION, |
396 | X509V3_R_NO_POLICY_IDENTIFIER); | 410 | X509V3_R_NO_POLICY_IDENTIFIER); |
397 | goto err; | 411 | goto err; |
@@ -403,6 +417,7 @@ merr: | |||
403 | X509V3err(X509V3_F_POLICY_SECTION, ERR_R_MALLOC_FAILURE); | 417 | X509V3err(X509V3_F_POLICY_SECTION, ERR_R_MALLOC_FAILURE); |
404 | 418 | ||
405 | err: | 419 | err: |
420 | POLICYQUALINFO_free(nqual); | ||
406 | POLICYINFO_free(pol); | 421 | POLICYINFO_free(pol); |
407 | return NULL; | 422 | return NULL; |
408 | } | 423 | } |
diff --git a/src/lib/libssl/src/crypto/x509v3/v3_cpols.c b/src/lib/libssl/src/crypto/x509v3/v3_cpols.c index 65916778aa..61e6b3ba47 100644 --- a/src/lib/libssl/src/crypto/x509v3/v3_cpols.c +++ b/src/lib/libssl/src/crypto/x509v3/v3_cpols.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: v3_cpols.c,v 1.19 2015/02/14 15:17:52 miod Exp $ */ | 1 | /* $OpenBSD: v3_cpols.c,v 1.20 2015/07/15 17:00:35 miod Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -334,35 +334,45 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org) | |||
334 | int i; | 334 | int i; |
335 | CONF_VALUE *cnf; | 335 | CONF_VALUE *cnf; |
336 | POLICYINFO *pol; | 336 | POLICYINFO *pol; |
337 | POLICYQUALINFO *qual; | 337 | POLICYQUALINFO *nqual = NULL; |
338 | 338 | ||
339 | if (!(pol = POLICYINFO_new())) | 339 | if ((pol = POLICYINFO_new()) == NULL) |
340 | goto merr; | 340 | goto merr; |
341 | for (i = 0; i < sk_CONF_VALUE_num(polstrs); i++) { | 341 | for (i = 0; i < sk_CONF_VALUE_num(polstrs); i++) { |
342 | cnf = sk_CONF_VALUE_value(polstrs, i); | 342 | cnf = sk_CONF_VALUE_value(polstrs, i); |
343 | if (!strcmp(cnf->name, "policyIdentifier")) { | 343 | if (strcmp(cnf->name, "policyIdentifier") == 0) { |
344 | ASN1_OBJECT *pobj; | 344 | ASN1_OBJECT *pobj; |
345 | if (!(pobj = OBJ_txt2obj(cnf->value, 0))) { | 345 | |
346 | if ((pobj = OBJ_txt2obj(cnf->value, 0)) == NULL) { | ||
346 | X509V3err(X509V3_F_POLICY_SECTION, | 347 | X509V3err(X509V3_F_POLICY_SECTION, |
347 | X509V3_R_INVALID_OBJECT_IDENTIFIER); | 348 | X509V3_R_INVALID_OBJECT_IDENTIFIER); |
348 | X509V3_conf_err(cnf); | 349 | X509V3_conf_err(cnf); |
349 | goto err; | 350 | goto err; |
350 | } | 351 | } |
351 | pol->policyid = pobj; | 352 | pol->policyid = pobj; |
352 | } else if (!name_cmp(cnf->name, "CPS")) { | 353 | } else if (name_cmp(cnf->name, "CPS") == 0) { |
353 | if (!pol->qualifiers) | 354 | if ((nqual = POLICYQUALINFO_new()) == NULL) |
354 | pol->qualifiers = sk_POLICYQUALINFO_new_null(); | ||
355 | if (!(qual = POLICYQUALINFO_new())) | ||
356 | goto merr; | 355 | goto merr; |
357 | if (!sk_POLICYQUALINFO_push(pol->qualifiers, qual)) | 356 | nqual->pqualid = OBJ_nid2obj(NID_id_qt_cps); |
357 | nqual->d.cpsuri = M_ASN1_IA5STRING_new(); | ||
358 | if (nqual->d.cpsuri == NULL) | ||
358 | goto merr; | 359 | goto merr; |
359 | qual->pqualid = OBJ_nid2obj(NID_id_qt_cps); | 360 | if (ASN1_STRING_set(nqual->d.cpsuri, cnf->value, |
360 | qual->d.cpsuri = M_ASN1_IA5STRING_new(); | 361 | strlen(cnf->value)) == 0) |
361 | if (!ASN1_STRING_set(qual->d.cpsuri, cnf->value, | 362 | goto merr; |
362 | strlen(cnf->value))) | 363 | |
364 | if (pol->qualifiers == NULL) { | ||
365 | pol->qualifiers = sk_POLICYQUALINFO_new_null(); | ||
366 | if (pol->qualifiers == NULL) | ||
367 | goto merr; | ||
368 | } | ||
369 | if (sk_POLICYQUALINFO_push(pol->qualifiers, nqual) == 0) | ||
363 | goto merr; | 370 | goto merr; |
364 | } else if (!name_cmp(cnf->name, "userNotice")) { | 371 | nqual = NULL; |
372 | } else if (name_cmp(cnf->name, "userNotice") == 0) { | ||
365 | STACK_OF(CONF_VALUE) *unot; | 373 | STACK_OF(CONF_VALUE) *unot; |
374 | POLICYQUALINFO *qual; | ||
375 | |||
366 | if (*cnf->value != '@') { | 376 | if (*cnf->value != '@') { |
367 | X509V3err(X509V3_F_POLICY_SECTION, | 377 | X509V3err(X509V3_F_POLICY_SECTION, |
368 | X509V3_R_EXPECTED_A_SECTION_NAME); | 378 | X509V3_R_EXPECTED_A_SECTION_NAME); |
@@ -370,7 +380,7 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org) | |||
370 | goto err; | 380 | goto err; |
371 | } | 381 | } |
372 | unot = X509V3_get_section(ctx, cnf->value + 1); | 382 | unot = X509V3_get_section(ctx, cnf->value + 1); |
373 | if (!unot) { | 383 | if (unot == NULL) { |
374 | X509V3err(X509V3_F_POLICY_SECTION, | 384 | X509V3err(X509V3_F_POLICY_SECTION, |
375 | X509V3_R_INVALID_SECTION); | 385 | X509V3_R_INVALID_SECTION); |
376 | X509V3_conf_err(cnf); | 386 | X509V3_conf_err(cnf); |
@@ -378,11 +388,15 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org) | |||
378 | } | 388 | } |
379 | qual = notice_section(ctx, unot, ia5org); | 389 | qual = notice_section(ctx, unot, ia5org); |
380 | X509V3_section_free(ctx, unot); | 390 | X509V3_section_free(ctx, unot); |
381 | if (!qual) | 391 | if (qual == NULL) |
382 | goto err; | 392 | goto err; |
383 | if (!pol->qualifiers) pol->qualifiers = | 393 | |
384 | sk_POLICYQUALINFO_new_null(); | 394 | if (pol->qualifiers == NULL) { |
385 | if (!sk_POLICYQUALINFO_push(pol->qualifiers, qual)) | 395 | pol->qualifiers = sk_POLICYQUALINFO_new_null(); |
396 | if (pol->qualifiers == NULL) | ||
397 | goto merr; | ||
398 | } | ||
399 | if (sk_POLICYQUALINFO_push(pol->qualifiers, qual) == 0) | ||
386 | goto merr; | 400 | goto merr; |
387 | } else { | 401 | } else { |
388 | X509V3err(X509V3_F_POLICY_SECTION, | 402 | X509V3err(X509V3_F_POLICY_SECTION, |
@@ -391,7 +405,7 @@ policy_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *polstrs, int ia5org) | |||
391 | goto err; | 405 | goto err; |
392 | } | 406 | } |
393 | } | 407 | } |
394 | if (!pol->policyid) { | 408 | if (pol->policyid == NULL) { |
395 | X509V3err(X509V3_F_POLICY_SECTION, | 409 | X509V3err(X509V3_F_POLICY_SECTION, |
396 | X509V3_R_NO_POLICY_IDENTIFIER); | 410 | X509V3_R_NO_POLICY_IDENTIFIER); |
397 | goto err; | 411 | goto err; |
@@ -403,6 +417,7 @@ merr: | |||
403 | X509V3err(X509V3_F_POLICY_SECTION, ERR_R_MALLOC_FAILURE); | 417 | X509V3err(X509V3_F_POLICY_SECTION, ERR_R_MALLOC_FAILURE); |
404 | 418 | ||
405 | err: | 419 | err: |
420 | POLICYQUALINFO_free(nqual); | ||
406 | POLICYINFO_free(pol); | 421 | POLICYINFO_free(pol); |
407 | return NULL; | 422 | return NULL; |
408 | } | 423 | } |