@@ -58,8 +58,9 @@ struct ahash_save_req_state {
58
58
59
59
static void ahash_reqchain_done (void * data , int err );
60
60
static int ahash_save_req (struct ahash_request * req , crypto_completion_t cplt );
61
- static void ahash_restore_req (struct ahash_save_req_state * state );
61
+ static void ahash_restore_req (struct ahash_request * req );
62
62
static void ahash_def_finup_done1 (void * data , int err );
63
+ static int ahash_def_finup_finish1 (struct ahash_request * req , int err );
63
64
static int ahash_def_finup (struct ahash_request * req );
64
65
65
66
static int hash_walk_next (struct crypto_hash_walk * walk )
@@ -369,14 +370,15 @@ static int ahash_reqchain_virt(struct ahash_save_req_state *state,
369
370
return err ;
370
371
}
371
372
372
- static int ahash_reqchain_finish (struct ahash_save_req_state * state ,
373
+ static int ahash_reqchain_finish (struct ahash_request * req0 ,
374
+ struct ahash_save_req_state * state ,
373
375
int err , u32 mask )
374
376
{
375
- struct ahash_request * req0 = state -> req0 ;
376
377
struct ahash_request * req = state -> cur ;
377
378
struct crypto_ahash * tfm ;
378
379
struct ahash_request * n ;
379
380
bool update ;
381
+ u8 * page ;
380
382
381
383
err = ahash_reqchain_virt (state , err , mask );
382
384
if (err == - EINPROGRESS || err == - EBUSY )
@@ -430,7 +432,12 @@ static int ahash_reqchain_finish(struct ahash_save_req_state *state,
430
432
list_add_tail (& req -> base .list , & req0 -> base .list );
431
433
}
432
434
433
- ahash_restore_req (state );
435
+ page = state -> page ;
436
+ if (page ) {
437
+ memset (page , 0 , PAGE_SIZE );
438
+ free_page ((unsigned long )page );
439
+ }
440
+ ahash_restore_req (req0 );
434
441
435
442
out :
436
443
return err ;
@@ -449,7 +456,8 @@ static void ahash_reqchain_done(void *data, int err)
449
456
goto notify ;
450
457
}
451
458
452
- err = ahash_reqchain_finish (state , err , CRYPTO_TFM_REQ_MAY_BACKLOG );
459
+ err = ahash_reqchain_finish (state -> req0 , state , err ,
460
+ CRYPTO_TFM_REQ_MAY_BACKLOG );
453
461
if (err == - EBUSY )
454
462
return ;
455
463
@@ -525,13 +533,10 @@ static int ahash_do_req_chain(struct ahash_request *req,
525
533
if (err == - EBUSY || err == - EINPROGRESS )
526
534
return - EBUSY ;
527
535
528
- return ahash_reqchain_finish (state , err , ~0 );
536
+ return ahash_reqchain_finish (req , state , err , ~0 );
529
537
530
538
out_free_page :
531
- if (page ) {
532
- memset (page , 0 , PAGE_SIZE );
533
- free_page ((unsigned long )page );
534
- }
539
+ free_page ((unsigned long )page );
535
540
536
541
out_set_chain :
537
542
req -> base .err = err ;
@@ -590,18 +595,15 @@ static int ahash_save_req(struct ahash_request *req, crypto_completion_t cplt)
590
595
req -> base .complete = cplt ;
591
596
req -> base .data = state ;
592
597
state -> req0 = req ;
593
- state -> page = NULL ;
594
598
595
599
return 0 ;
596
600
}
597
601
598
- static void ahash_restore_req (struct ahash_save_req_state * state )
602
+ static void ahash_restore_req (struct ahash_request * req )
599
603
{
600
- struct ahash_request * req = state -> req0 ;
604
+ struct ahash_save_req_state * state ;
601
605
struct crypto_ahash * tfm ;
602
606
603
- free_page ((unsigned long )state -> page );
604
-
605
607
tfm = crypto_ahash_reqtfm (req );
606
608
if (!ahash_is_async (tfm ))
607
609
return ;
@@ -692,9 +694,8 @@ int crypto_ahash_finup(struct ahash_request *req)
692
694
}
693
695
EXPORT_SYMBOL_GPL (crypto_ahash_finup );
694
696
695
- static int ahash_def_digest_finish (struct ahash_save_req_state * state , int err )
697
+ static int ahash_def_digest_finish (struct ahash_request * req , int err )
696
698
{
697
- struct ahash_request * req = state -> req0 ;
698
699
struct crypto_ahash * tfm ;
699
700
700
701
if (err )
@@ -708,8 +709,10 @@ static int ahash_def_digest_finish(struct ahash_save_req_state *state, int err)
708
709
if (err == - EINPROGRESS || err == - EBUSY )
709
710
return err ;
710
711
712
+ return ahash_def_finup_finish1 (req , err );
713
+
711
714
out :
712
- ahash_restore_req (state );
715
+ ahash_restore_req (req );
713
716
return err ;
714
717
}
715
718
@@ -726,7 +729,7 @@ static void ahash_def_digest_done(void *data, int err)
726
729
727
730
areq -> base .flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP ;
728
731
729
- err = ahash_def_digest_finish (state0 , err );
732
+ err = ahash_def_digest_finish (areq , err );
730
733
if (err == - EINPROGRESS || err == - EBUSY )
731
734
return ;
732
735
@@ -736,20 +739,17 @@ static void ahash_def_digest_done(void *data, int err)
736
739
737
740
static int ahash_def_digest (struct ahash_request * req )
738
741
{
739
- struct ahash_save_req_state * state ;
740
742
int err ;
741
743
742
744
err = ahash_save_req (req , ahash_def_digest_done );
743
745
if (err )
744
746
return err ;
745
747
746
- state = req -> base .data ;
747
-
748
748
err = crypto_ahash_init (req );
749
749
if (err == - EINPROGRESS || err == - EBUSY )
750
750
return err ;
751
751
752
- return ahash_def_digest_finish (state , err );
752
+ return ahash_def_digest_finish (req , err );
753
753
}
754
754
755
755
int crypto_ahash_digest (struct ahash_request * req )
@@ -791,13 +791,12 @@ static void ahash_def_finup_done2(void *data, int err)
791
791
if (err == - EINPROGRESS )
792
792
return ;
793
793
794
- ahash_restore_req (state );
794
+ ahash_restore_req (areq );
795
795
ahash_request_complete (areq , err );
796
796
}
797
797
798
- static int ahash_def_finup_finish1 (struct ahash_save_req_state * state , int err )
798
+ static int ahash_def_finup_finish1 (struct ahash_request * req , int err )
799
799
{
800
- struct ahash_request * req = state -> req0 ;
801
800
struct crypto_ahash * tfm ;
802
801
803
802
if (err )
@@ -812,7 +811,7 @@ static int ahash_def_finup_finish1(struct ahash_save_req_state *state, int err)
812
811
return err ;
813
812
814
813
out :
815
- ahash_restore_req (state );
814
+ ahash_restore_req (req );
816
815
return err ;
817
816
}
818
817
@@ -829,7 +828,7 @@ static void ahash_def_finup_done1(void *data, int err)
829
828
830
829
areq -> base .flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP ;
831
830
832
- err = ahash_def_finup_finish1 (state0 , err );
831
+ err = ahash_def_finup_finish1 (areq , err );
833
832
if (err == - EINPROGRESS || err == - EBUSY )
834
833
return ;
835
834
@@ -839,20 +838,17 @@ static void ahash_def_finup_done1(void *data, int err)
839
838
840
839
static int ahash_def_finup (struct ahash_request * req )
841
840
{
842
- struct ahash_save_req_state * state ;
843
841
int err ;
844
842
845
843
err = ahash_save_req (req , ahash_def_finup_done1 );
846
844
if (err )
847
845
return err ;
848
846
849
- state = req -> base .data ;
850
-
851
847
err = crypto_ahash_update (req );
852
848
if (err == - EINPROGRESS || err == - EBUSY )
853
849
return err ;
854
850
855
- return ahash_def_finup_finish1 (state , err );
851
+ return ahash_def_finup_finish1 (req , err );
856
852
}
857
853
858
854
int crypto_ahash_export (struct ahash_request * req , void * out )
0 commit comments