mm: only drain per-cpu pagevecs once per pagevec usage
[linux-2.6-microblaze.git] / crypto / dh.c
index b1032a5..5659fe7 100644 (file)
@@ -21,19 +21,12 @@ struct dh_ctx {
        MPI xa;
 };
 
-static inline void dh_clear_params(struct dh_ctx *ctx)
+static void dh_clear_ctx(struct dh_ctx *ctx)
 {
        mpi_free(ctx->p);
        mpi_free(ctx->g);
-       ctx->p = NULL;
-       ctx->g = NULL;
-}
-
-static void dh_free_ctx(struct dh_ctx *ctx)
-{
-       dh_clear_params(ctx);
        mpi_free(ctx->xa);
-       ctx->xa = NULL;
+       memset(ctx, 0, sizeof(*ctx));
 }
 
 /*
@@ -60,9 +53,6 @@ static int dh_check_params_length(unsigned int p_len)
 
 static int dh_set_params(struct dh_ctx *ctx, struct dh *params)
 {
-       if (unlikely(!params->p || !params->g))
-               return -EINVAL;
-
        if (dh_check_params_length(params->p_size << 3))
                return -EINVAL;
 
@@ -71,10 +61,8 @@ static int dh_set_params(struct dh_ctx *ctx, struct dh *params)
                return -EINVAL;
 
        ctx->g = mpi_read_raw_data(params->g, params->g_size);
-       if (!ctx->g) {
-               mpi_free(ctx->p);
+       if (!ctx->g)
                return -EINVAL;
-       }
 
        return 0;
 }
@@ -86,21 +74,23 @@ static int dh_set_secret(struct crypto_kpp *tfm, const void *buf,
        struct dh params;
 
        /* Free the old MPI key if any */
-       dh_free_ctx(ctx);
+       dh_clear_ctx(ctx);
 
        if (crypto_dh_decode_key(buf, len, &params) < 0)
-               return -EINVAL;
+               goto err_clear_ctx;
 
        if (dh_set_params(ctx, &params) < 0)
-               return -EINVAL;
+               goto err_clear_ctx;
 
        ctx->xa = mpi_read_raw_data(params.key, params.key_size);
-       if (!ctx->xa) {
-               dh_clear_params(ctx);
-               return -EINVAL;
-       }
+       if (!ctx->xa)
+               goto err_clear_ctx;
 
        return 0;
+
+err_clear_ctx:
+       dh_clear_ctx(ctx);
+       return -EINVAL;
 }
 
 static int dh_compute_value(struct kpp_request *req)
@@ -158,7 +148,7 @@ static void dh_exit_tfm(struct crypto_kpp *tfm)
 {
        struct dh_ctx *ctx = dh_get_ctx(tfm);
 
-       dh_free_ctx(ctx);
+       dh_clear_ctx(ctx);
 }
 
 static struct kpp_alg dh = {