@@ -58,8 +58,9 @@ struct ahash_save_req_state {
5858
5959static void ahash_reqchain_done (void * data , int err );
6060static 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 );
6262static void ahash_def_finup_done1 (void * data , int err );
63+ static int ahash_def_finup_finish1 (struct ahash_request * req , int err );
6364static int ahash_def_finup (struct ahash_request * req );
6465
6566static int hash_walk_next (struct crypto_hash_walk * walk )
@@ -369,14 +370,15 @@ static int ahash_reqchain_virt(struct ahash_save_req_state *state,
369370 return err ;
370371}
371372
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 ,
373375 int err , u32 mask )
374376{
375- struct ahash_request * req0 = state -> req0 ;
376377 struct ahash_request * req = state -> cur ;
377378 struct crypto_ahash * tfm ;
378379 struct ahash_request * n ;
379380 bool update ;
381+ u8 * page ;
380382
381383 err = ahash_reqchain_virt (state , err , mask );
382384 if (err == - EINPROGRESS || err == - EBUSY )
@@ -430,7 +432,12 @@ static int ahash_reqchain_finish(struct ahash_save_req_state *state,
430432 list_add_tail (& req -> base .list , & req0 -> base .list );
431433 }
432434
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 );
434441
435442out :
436443 return err ;
@@ -449,7 +456,8 @@ static void ahash_reqchain_done(void *data, int err)
449456 goto notify ;
450457 }
451458
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 );
453461 if (err == - EBUSY )
454462 return ;
455463
@@ -525,13 +533,10 @@ static int ahash_do_req_chain(struct ahash_request *req,
525533 if (err == - EBUSY || err == - EINPROGRESS )
526534 return - EBUSY ;
527535
528- return ahash_reqchain_finish (state , err , ~0 );
536+ return ahash_reqchain_finish (req , state , err , ~0 );
529537
530538out_free_page :
531- if (page ) {
532- memset (page , 0 , PAGE_SIZE );
533- free_page ((unsigned long )page );
534- }
539+ free_page ((unsigned long )page );
535540
536541out_set_chain :
537542 req -> base .err = err ;
@@ -590,18 +595,15 @@ static int ahash_save_req(struct ahash_request *req, crypto_completion_t cplt)
590595 req -> base .complete = cplt ;
591596 req -> base .data = state ;
592597 state -> req0 = req ;
593- state -> page = NULL ;
594598
595599 return 0 ;
596600}
597601
598- static void ahash_restore_req (struct ahash_save_req_state * state )
602+ static void ahash_restore_req (struct ahash_request * req )
599603{
600- struct ahash_request * req = state -> req0 ;
604+ struct ahash_save_req_state * state ;
601605 struct crypto_ahash * tfm ;
602606
603- free_page ((unsigned long )state -> page );
604-
605607 tfm = crypto_ahash_reqtfm (req );
606608 if (!ahash_is_async (tfm ))
607609 return ;
@@ -692,9 +694,8 @@ int crypto_ahash_finup(struct ahash_request *req)
692694}
693695EXPORT_SYMBOL_GPL (crypto_ahash_finup );
694696
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 )
696698{
697- struct ahash_request * req = state -> req0 ;
698699 struct crypto_ahash * tfm ;
699700
700701 if (err )
@@ -708,8 +709,10 @@ static int ahash_def_digest_finish(struct ahash_save_req_state *state, int err)
708709 if (err == - EINPROGRESS || err == - EBUSY )
709710 return err ;
710711
712+ return ahash_def_finup_finish1 (req , err );
713+
711714out :
712- ahash_restore_req (state );
715+ ahash_restore_req (req );
713716 return err ;
714717}
715718
@@ -726,7 +729,7 @@ static void ahash_def_digest_done(void *data, int err)
726729
727730 areq -> base .flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP ;
728731
729- err = ahash_def_digest_finish (state0 , err );
732+ err = ahash_def_digest_finish (areq , err );
730733 if (err == - EINPROGRESS || err == - EBUSY )
731734 return ;
732735
@@ -736,20 +739,17 @@ static void ahash_def_digest_done(void *data, int err)
736739
737740static int ahash_def_digest (struct ahash_request * req )
738741{
739- struct ahash_save_req_state * state ;
740742 int err ;
741743
742744 err = ahash_save_req (req , ahash_def_digest_done );
743745 if (err )
744746 return err ;
745747
746- state = req -> base .data ;
747-
748748 err = crypto_ahash_init (req );
749749 if (err == - EINPROGRESS || err == - EBUSY )
750750 return err ;
751751
752- return ahash_def_digest_finish (state , err );
752+ return ahash_def_digest_finish (req , err );
753753}
754754
755755int crypto_ahash_digest (struct ahash_request * req )
@@ -791,13 +791,12 @@ static void ahash_def_finup_done2(void *data, int err)
791791 if (err == - EINPROGRESS )
792792 return ;
793793
794- ahash_restore_req (state );
794+ ahash_restore_req (areq );
795795 ahash_request_complete (areq , err );
796796}
797797
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 )
799799{
800- struct ahash_request * req = state -> req0 ;
801800 struct crypto_ahash * tfm ;
802801
803802 if (err )
@@ -812,7 +811,7 @@ static int ahash_def_finup_finish1(struct ahash_save_req_state *state, int err)
812811 return err ;
813812
814813out :
815- ahash_restore_req (state );
814+ ahash_restore_req (req );
816815 return err ;
817816}
818817
@@ -829,7 +828,7 @@ static void ahash_def_finup_done1(void *data, int err)
829828
830829 areq -> base .flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP ;
831830
832- err = ahash_def_finup_finish1 (state0 , err );
831+ err = ahash_def_finup_finish1 (areq , err );
833832 if (err == - EINPROGRESS || err == - EBUSY )
834833 return ;
835834
@@ -839,20 +838,17 @@ static void ahash_def_finup_done1(void *data, int err)
839838
840839static int ahash_def_finup (struct ahash_request * req )
841840{
842- struct ahash_save_req_state * state ;
843841 int err ;
844842
845843 err = ahash_save_req (req , ahash_def_finup_done1 );
846844 if (err )
847845 return err ;
848846
849- state = req -> base .data ;
850-
851847 err = crypto_ahash_update (req );
852848 if (err == - EINPROGRESS || err == - EBUSY )
853849 return err ;
854850
855- return ahash_def_finup_finish1 (state , err );
851+ return ahash_def_finup_finish1 (req , err );
856852}
857853
858854int crypto_ahash_export (struct ahash_request * req , void * out )
0 commit comments