diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2016-01-24 08:19:31 -0500 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2016-01-27 07:36:09 -0500 |
commit | 4a31340b36302d46207c6bb54d103d9fb568e916 (patch) | |
tree | e090b914f20388159c09fab1a3c5d08cd32d5507 /drivers/nfc | |
parent | 9534d67195118c39edf2ec0bb74e59993c4c0677 (diff) |
nfc: s3fwrn5: Use shash
This patch replaces uses of the long obsolete hash interface with
shash.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/nfc')
-rw-r--r-- | drivers/nfc/s3fwrn5/firmware.c | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/drivers/nfc/s3fwrn5/firmware.c b/drivers/nfc/s3fwrn5/firmware.c index 64a90252c57f..5f97da1947e3 100644 --- a/drivers/nfc/s3fwrn5/firmware.c +++ b/drivers/nfc/s3fwrn5/firmware.c | |||
@@ -19,7 +19,7 @@ | |||
19 | 19 | ||
20 | #include <linux/completion.h> | 20 | #include <linux/completion.h> |
21 | #include <linux/firmware.h> | 21 | #include <linux/firmware.h> |
22 | #include <linux/crypto.h> | 22 | #include <crypto/hash.h> |
23 | #include <crypto/sha.h> | 23 | #include <crypto/sha.h> |
24 | 24 | ||
25 | #include "s3fwrn5.h" | 25 | #include "s3fwrn5.h" |
@@ -429,8 +429,7 @@ int s3fwrn5_fw_download(struct s3fwrn5_fw_info *fw_info) | |||
429 | { | 429 | { |
430 | struct s3fwrn5_fw_image *fw = &fw_info->fw; | 430 | struct s3fwrn5_fw_image *fw = &fw_info->fw; |
431 | u8 hash_data[SHA1_DIGEST_SIZE]; | 431 | u8 hash_data[SHA1_DIGEST_SIZE]; |
432 | struct scatterlist sg; | 432 | struct crypto_shash *tfm; |
433 | struct hash_desc desc; | ||
434 | u32 image_size, off; | 433 | u32 image_size, off; |
435 | int ret; | 434 | int ret; |
436 | 435 | ||
@@ -438,12 +437,31 @@ int s3fwrn5_fw_download(struct s3fwrn5_fw_info *fw_info) | |||
438 | 437 | ||
439 | /* Compute SHA of firmware data */ | 438 | /* Compute SHA of firmware data */ |
440 | 439 | ||
441 | sg_init_one(&sg, fw->image, image_size); | 440 | tfm = crypto_alloc_shash("sha1", 0, 0); |
442 | desc.tfm = crypto_alloc_hash("sha1", 0, CRYPTO_ALG_ASYNC); | 441 | if (IS_ERR(tfm)) { |
443 | crypto_hash_init(&desc); | 442 | ret = PTR_ERR(tfm); |
444 | crypto_hash_update(&desc, &sg, image_size); | 443 | dev_err(&fw_info->ndev->nfc_dev->dev, |
445 | crypto_hash_final(&desc, hash_data); | 444 | "Cannot allocate shash (code=%d)\n", ret); |
446 | crypto_free_hash(desc.tfm); | 445 | goto out; |
446 | } | ||
447 | |||
448 | { | ||
449 | SHASH_DESC_ON_STACK(desc, tfm); | ||
450 | |||
451 | desc->tfm = tfm; | ||
452 | desc->flags = CRYPTO_TFM_REQ_MAY_SLEEP; | ||
453 | |||
454 | ret = crypto_shash_digest(desc, fw->image, image_size, | ||
455 | hash_data); | ||
456 | shash_desc_zero(desc); | ||
457 | } | ||
458 | |||
459 | crypto_free_shash(tfm); | ||
460 | if (ret) { | ||
461 | dev_err(&fw_info->ndev->nfc_dev->dev, | ||
462 | "Cannot compute hash (code=%d)\n", ret); | ||
463 | goto out; | ||
464 | } | ||
447 | 465 | ||
448 | /* Firmware update process */ | 466 | /* Firmware update process */ |
449 | 467 | ||