Merge branches 'acpi-misc', 'acpi-video' and 'acpi-prm'
[linux-block.git] / crypto / sm2.c
index b21addc3ac06a0f624c8c726b1de60e355c6bd9c..db8a4a265669d9e85b6f56f7305b419b5c9c80a7 100644 (file)
@@ -79,10 +79,17 @@ static int sm2_ec_ctx_init(struct mpi_ec_ctx *ec)
                goto free;
 
        rc = -ENOMEM;
+
+       ec->Q = mpi_point_new(0);
+       if (!ec->Q)
+               goto free;
+
        /* mpi_ec_setup_elliptic_curve */
        ec->G = mpi_point_new(0);
-       if (!ec->G)
+       if (!ec->G) {
+               mpi_point_release(ec->Q);
                goto free;
+       }
 
        mpi_set(ec->G->x, x);
        mpi_set(ec->G->y, y);
@@ -91,6 +98,7 @@ static int sm2_ec_ctx_init(struct mpi_ec_ctx *ec)
        rc = -EINVAL;
        ec->n = mpi_scanval(ecp->n);
        if (!ec->n) {
+               mpi_point_release(ec->Q);
                mpi_point_release(ec->G);
                goto free;
        }
@@ -386,27 +394,15 @@ static int sm2_set_pub_key(struct crypto_akcipher *tfm,
        MPI a;
        int rc;
 
-       ec->Q = mpi_point_new(0);
-       if (!ec->Q)
-               return -ENOMEM;
-
        /* include the uncompressed flag '0x04' */
-       rc = -ENOMEM;
        a = mpi_read_raw_data(key, keylen);
        if (!a)
-               goto error;
+               return -ENOMEM;
 
        mpi_normalize(a);
        rc = sm2_ecc_os2ec(ec->Q, a);
        mpi_free(a);
-       if (rc)
-               goto error;
-
-       return 0;
 
-error:
-       mpi_point_release(ec->Q);
-       ec->Q = NULL;
        return rc;
 }