Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3cd0920c authored by David Howells's avatar David Howells
Browse files

PKCS#7: Provide a single place to do signed info block freeing



The code to free a signed info block is repeated several times, so move the
code to do it into a function of its own.  This gives us a place to add clean
ups for stuff that gets added to pkcs7_signed_info.

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Acked-by: default avatarVivek Goyal <vgoyal@redhat.com>
parent 54e2c2c1
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -31,6 +31,18 @@ struct pkcs7_parse_context {
	unsigned	sinfo_index;
};

/*
 * Free a signed information block.
 */
static void pkcs7_free_signed_info(struct pkcs7_signed_info *sinfo)
{
	if (sinfo) {
		mpi_free(sinfo->sig.mpi[0]);
		kfree(sinfo->sig.digest);
		kfree(sinfo);
	}
}

/**
 * pkcs7_free_message - Free a PKCS#7 message
 * @pkcs7: The PKCS#7 message to free
@@ -54,9 +66,7 @@ void pkcs7_free_message(struct pkcs7_message *pkcs7)
		while (pkcs7->signed_infos) {
			sinfo = pkcs7->signed_infos;
			pkcs7->signed_infos = sinfo->next;
			mpi_free(sinfo->sig.mpi[0]);
			kfree(sinfo->sig.digest);
			kfree(sinfo);
			pkcs7_free_signed_info(sinfo);
		}
		kfree(pkcs7);
	}
@@ -100,16 +110,12 @@ struct pkcs7_message *pkcs7_parse_message(const void *data, size_t datalen)
		ctx->certs = cert->next;
		x509_free_certificate(cert);
	}
	mpi_free(ctx->sinfo->sig.mpi[0]);
	kfree(ctx->sinfo->sig.digest);
	kfree(ctx->sinfo);
	pkcs7_free_signed_info(ctx->sinfo);
	kfree(ctx);
	return msg;

error_decode:
	mpi_free(ctx->sinfo->sig.mpi[0]);
	kfree(ctx->sinfo->sig.digest);
	kfree(ctx->sinfo);
	pkcs7_free_signed_info(ctx->sinfo);
error_no_sinfo:
	kfree(ctx);
error_no_ctx: