|
@@ -233,29 +233,35 @@ struct restore_data_record {
|
|
|
*/
|
|
|
static int get_e820_md5(struct e820_table *table, void *buf)
|
|
|
{
|
|
|
- struct scatterlist sg;
|
|
|
- struct crypto_ahash *tfm;
|
|
|
+ struct crypto_shash *tfm;
|
|
|
+ struct shash_desc *desc;
|
|
|
int size;
|
|
|
int ret = 0;
|
|
|
|
|
|
- tfm = crypto_alloc_ahash("md5", 0, CRYPTO_ALG_ASYNC);
|
|
|
+ tfm = crypto_alloc_shash("md5", 0, 0);
|
|
|
if (IS_ERR(tfm))
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- {
|
|
|
- AHASH_REQUEST_ON_STACK(req, tfm);
|
|
|
- size = offsetof(struct e820_table, entries) + sizeof(struct e820_entry) * table->nr_entries;
|
|
|
- ahash_request_set_tfm(req, tfm);
|
|
|
- sg_init_one(&sg, (u8 *)table, size);
|
|
|
- ahash_request_set_callback(req, 0, NULL, NULL);
|
|
|
- ahash_request_set_crypt(req, &sg, buf, size);
|
|
|
-
|
|
|
- if (crypto_ahash_digest(req))
|
|
|
- ret = -EINVAL;
|
|
|
- ahash_request_zero(req);
|
|
|
+ desc = kmalloc(sizeof(struct shash_desc) + crypto_shash_descsize(tfm),
|
|
|
+ GFP_KERNEL);
|
|
|
+ if (!desc) {
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto free_tfm;
|
|
|
}
|
|
|
- crypto_free_ahash(tfm);
|
|
|
|
|
|
+ desc->tfm = tfm;
|
|
|
+ desc->flags = 0;
|
|
|
+
|
|
|
+ size = offsetof(struct e820_table, entries) +
|
|
|
+ sizeof(struct e820_entry) * table->nr_entries;
|
|
|
+
|
|
|
+ if (crypto_shash_digest(desc, (u8 *)table, size, buf))
|
|
|
+ ret = -EINVAL;
|
|
|
+
|
|
|
+ kzfree(desc);
|
|
|
+
|
|
|
+free_tfm:
|
|
|
+ crypto_free_shash(tfm);
|
|
|
return ret;
|
|
|
}
|
|
|
|