@@ -137,13 +137,20 @@ struct caam_hash_state {
137
137
/* Common job descriptor seq in/out ptr routines */
138
138
139
139
/* Map state->caam_ctx, and append seq_out_ptr command that points to it */
140
- static inline void map_seq_out_ptr_ctx (u32 * desc , struct device * jrdev ,
141
- struct caam_hash_state * state ,
142
- int ctx_len )
140
+ static inline int map_seq_out_ptr_ctx (u32 * desc , struct device * jrdev ,
141
+ struct caam_hash_state * state ,
142
+ int ctx_len )
143
143
{
144
144
state -> ctx_dma = dma_map_single (jrdev , state -> caam_ctx ,
145
145
ctx_len , DMA_FROM_DEVICE );
146
+ if (dma_mapping_error (jrdev , state -> ctx_dma )) {
147
+ dev_err (jrdev , "unable to map ctx\n" );
148
+ return - ENOMEM ;
149
+ }
150
+
146
151
append_seq_out_ptr (desc , state -> ctx_dma , ctx_len , 0 );
152
+
153
+ return 0 ;
147
154
}
148
155
149
156
/* Map req->result, and append seq_out_ptr command that points to it */
@@ -201,14 +208,19 @@ try_buf_map_to_sec4_sg(struct device *jrdev, struct sec4_sg_entry *sec4_sg,
201
208
}
202
209
203
210
/* Map state->caam_ctx, and add it to link table */
204
- static inline void ctx_map_to_sec4_sg (u32 * desc , struct device * jrdev ,
205
- struct caam_hash_state * state ,
206
- int ctx_len ,
207
- struct sec4_sg_entry * sec4_sg ,
208
- u32 flag )
211
+ static inline int ctx_map_to_sec4_sg (u32 * desc , struct device * jrdev ,
212
+ struct caam_hash_state * state , int ctx_len ,
213
+ struct sec4_sg_entry * sec4_sg , u32 flag )
209
214
{
210
215
state -> ctx_dma = dma_map_single (jrdev , state -> caam_ctx , ctx_len , flag );
216
+ if (dma_mapping_error (jrdev , state -> ctx_dma )) {
217
+ dev_err (jrdev , "unable to map ctx\n" );
218
+ return - ENOMEM ;
219
+ }
220
+
211
221
dma_to_sec4_sg_one (sec4_sg , state -> ctx_dma , ctx_len , 0 );
222
+
223
+ return 0 ;
212
224
}
213
225
214
226
/* Common shared descriptor commands */
@@ -809,8 +821,10 @@ static int ahash_update_ctx(struct ahash_request *req)
809
821
edesc -> sec4_sg = (void * )edesc + sizeof (struct ahash_edesc ) +
810
822
DESC_JOB_IO_LEN ;
811
823
812
- ctx_map_to_sec4_sg (desc , jrdev , state , ctx -> ctx_len ,
813
- edesc -> sec4_sg , DMA_BIDIRECTIONAL );
824
+ ret = ctx_map_to_sec4_sg (desc , jrdev , state , ctx -> ctx_len ,
825
+ edesc -> sec4_sg , DMA_BIDIRECTIONAL );
826
+ if (ret )
827
+ return ret ;
814
828
815
829
state -> buf_dma = try_buf_map_to_sec4_sg (jrdev ,
816
830
edesc -> sec4_sg + 1 ,
@@ -839,6 +853,10 @@ static int ahash_update_ctx(struct ahash_request *req)
839
853
edesc -> sec4_sg_dma = dma_map_single (jrdev , edesc -> sec4_sg ,
840
854
sec4_sg_bytes ,
841
855
DMA_TO_DEVICE );
856
+ if (dma_mapping_error (jrdev , edesc -> sec4_sg_dma )) {
857
+ dev_err (jrdev , "unable to map S/G table\n" );
858
+ return - ENOMEM ;
859
+ }
842
860
843
861
append_seq_in_ptr (desc , edesc -> sec4_sg_dma , ctx -> ctx_len +
844
862
to_hash , LDST_SGF );
@@ -914,8 +932,10 @@ static int ahash_final_ctx(struct ahash_request *req)
914
932
DESC_JOB_IO_LEN ;
915
933
edesc -> src_nents = 0 ;
916
934
917
- ctx_map_to_sec4_sg (desc , jrdev , state , ctx -> ctx_len , edesc -> sec4_sg ,
918
- DMA_TO_DEVICE );
935
+ ret = ctx_map_to_sec4_sg (desc , jrdev , state , ctx -> ctx_len ,
936
+ edesc -> sec4_sg , DMA_TO_DEVICE );
937
+ if (ret )
938
+ return ret ;
919
939
920
940
state -> buf_dma = try_buf_map_to_sec4_sg (jrdev , edesc -> sec4_sg + 1 ,
921
941
buf , state -> buf_dma , buflen ,
@@ -924,12 +944,20 @@ static int ahash_final_ctx(struct ahash_request *req)
924
944
925
945
edesc -> sec4_sg_dma = dma_map_single (jrdev , edesc -> sec4_sg ,
926
946
sec4_sg_bytes , DMA_TO_DEVICE );
947
+ if (dma_mapping_error (jrdev , edesc -> sec4_sg_dma )) {
948
+ dev_err (jrdev , "unable to map S/G table\n" );
949
+ return - ENOMEM ;
950
+ }
927
951
928
952
append_seq_in_ptr (desc , edesc -> sec4_sg_dma , ctx -> ctx_len + buflen ,
929
953
LDST_SGF );
930
954
931
955
edesc -> dst_dma = map_seq_out_ptr_result (desc , jrdev , req -> result ,
932
956
digestsize );
957
+ if (dma_mapping_error (jrdev , edesc -> dst_dma )) {
958
+ dev_err (jrdev , "unable to map dst\n" );
959
+ return - ENOMEM ;
960
+ }
933
961
934
962
#ifdef DEBUG
935
963
print_hex_dump (KERN_ERR , "jobdesc@" __stringify (__LINE__ )": " ,
@@ -992,8 +1020,10 @@ static int ahash_finup_ctx(struct ahash_request *req)
992
1020
edesc -> sec4_sg = (void * )edesc + sizeof (struct ahash_edesc ) +
993
1021
DESC_JOB_IO_LEN ;
994
1022
995
- ctx_map_to_sec4_sg (desc , jrdev , state , ctx -> ctx_len , edesc -> sec4_sg ,
996
- DMA_TO_DEVICE );
1023
+ ret = ctx_map_to_sec4_sg (desc , jrdev , state , ctx -> ctx_len ,
1024
+ edesc -> sec4_sg , DMA_TO_DEVICE );
1025
+ if (ret )
1026
+ return ret ;
997
1027
998
1028
state -> buf_dma = try_buf_map_to_sec4_sg (jrdev , edesc -> sec4_sg + 1 ,
999
1029
buf , state -> buf_dma , buflen ,
@@ -1004,12 +1034,20 @@ static int ahash_finup_ctx(struct ahash_request *req)
1004
1034
1005
1035
edesc -> sec4_sg_dma = dma_map_single (jrdev , edesc -> sec4_sg ,
1006
1036
sec4_sg_bytes , DMA_TO_DEVICE );
1037
+ if (dma_mapping_error (jrdev , edesc -> sec4_sg_dma )) {
1038
+ dev_err (jrdev , "unable to map S/G table\n" );
1039
+ return - ENOMEM ;
1040
+ }
1007
1041
1008
1042
append_seq_in_ptr (desc , edesc -> sec4_sg_dma , ctx -> ctx_len +
1009
1043
buflen + req -> nbytes , LDST_SGF );
1010
1044
1011
1045
edesc -> dst_dma = map_seq_out_ptr_result (desc , jrdev , req -> result ,
1012
1046
digestsize );
1047
+ if (dma_mapping_error (jrdev , edesc -> dst_dma )) {
1048
+ dev_err (jrdev , "unable to map dst\n" );
1049
+ return - ENOMEM ;
1050
+ }
1013
1051
1014
1052
#ifdef DEBUG
1015
1053
print_hex_dump (KERN_ERR , "jobdesc@" __stringify (__LINE__ )": " ,
@@ -1070,6 +1108,10 @@ static int ahash_digest(struct ahash_request *req)
1070
1108
sg_to_sec4_sg_last (req -> src , src_nents , edesc -> sec4_sg , 0 );
1071
1109
edesc -> sec4_sg_dma = dma_map_single (jrdev , edesc -> sec4_sg ,
1072
1110
sec4_sg_bytes , DMA_TO_DEVICE );
1111
+ if (dma_mapping_error (jrdev , edesc -> sec4_sg_dma )) {
1112
+ dev_err (jrdev , "unable to map S/G table\n" );
1113
+ return - ENOMEM ;
1114
+ }
1073
1115
src_dma = edesc -> sec4_sg_dma ;
1074
1116
options = LDST_SGF ;
1075
1117
} else {
@@ -1080,6 +1122,10 @@ static int ahash_digest(struct ahash_request *req)
1080
1122
1081
1123
edesc -> dst_dma = map_seq_out_ptr_result (desc , jrdev , req -> result ,
1082
1124
digestsize );
1125
+ if (dma_mapping_error (jrdev , edesc -> dst_dma )) {
1126
+ dev_err (jrdev , "unable to map dst\n" );
1127
+ return - ENOMEM ;
1128
+ }
1083
1129
1084
1130
#ifdef DEBUG
1085
1131
print_hex_dump (KERN_ERR , "jobdesc@" __stringify (__LINE__ )": " ,
@@ -1128,11 +1174,19 @@ static int ahash_final_no_ctx(struct ahash_request *req)
1128
1174
init_job_desc_shared (desc , ptr , sh_len , HDR_SHARE_DEFER | HDR_REVERSE );
1129
1175
1130
1176
state -> buf_dma = dma_map_single (jrdev , buf , buflen , DMA_TO_DEVICE );
1177
+ if (dma_mapping_error (jrdev , state -> buf_dma )) {
1178
+ dev_err (jrdev , "unable to map src\n" );
1179
+ return - ENOMEM ;
1180
+ }
1131
1181
1132
1182
append_seq_in_ptr (desc , state -> buf_dma , buflen , 0 );
1133
1183
1134
1184
edesc -> dst_dma = map_seq_out_ptr_result (desc , jrdev , req -> result ,
1135
1185
digestsize );
1186
+ if (dma_mapping_error (jrdev , edesc -> dst_dma )) {
1187
+ dev_err (jrdev , "unable to map dst\n" );
1188
+ return - ENOMEM ;
1189
+ }
1136
1190
edesc -> src_nents = 0 ;
1137
1191
1138
1192
#ifdef DEBUG
@@ -1219,10 +1273,16 @@ static int ahash_update_no_ctx(struct ahash_request *req)
1219
1273
edesc -> sec4_sg_dma = dma_map_single (jrdev , edesc -> sec4_sg ,
1220
1274
sec4_sg_bytes ,
1221
1275
DMA_TO_DEVICE );
1276
+ if (dma_mapping_error (jrdev , edesc -> sec4_sg_dma )) {
1277
+ dev_err (jrdev , "unable to map S/G table\n" );
1278
+ return - ENOMEM ;
1279
+ }
1222
1280
1223
1281
append_seq_in_ptr (desc , edesc -> sec4_sg_dma , to_hash , LDST_SGF );
1224
1282
1225
- map_seq_out_ptr_ctx (desc , jrdev , state , ctx -> ctx_len );
1283
+ ret = map_seq_out_ptr_ctx (desc , jrdev , state , ctx -> ctx_len );
1284
+ if (ret )
1285
+ return ret ;
1226
1286
1227
1287
#ifdef DEBUG
1228
1288
print_hex_dump (KERN_ERR , "jobdesc@" __stringify (__LINE__ )": " ,
@@ -1311,12 +1371,20 @@ static int ahash_finup_no_ctx(struct ahash_request *req)
1311
1371
1312
1372
edesc -> sec4_sg_dma = dma_map_single (jrdev , edesc -> sec4_sg ,
1313
1373
sec4_sg_bytes , DMA_TO_DEVICE );
1374
+ if (dma_mapping_error (jrdev , edesc -> sec4_sg_dma )) {
1375
+ dev_err (jrdev , "unable to map S/G table\n" );
1376
+ return - ENOMEM ;
1377
+ }
1314
1378
1315
1379
append_seq_in_ptr (desc , edesc -> sec4_sg_dma , buflen +
1316
1380
req -> nbytes , LDST_SGF );
1317
1381
1318
1382
edesc -> dst_dma = map_seq_out_ptr_result (desc , jrdev , req -> result ,
1319
1383
digestsize );
1384
+ if (dma_mapping_error (jrdev , edesc -> dst_dma )) {
1385
+ dev_err (jrdev , "unable to map dst\n" );
1386
+ return - ENOMEM ;
1387
+ }
1320
1388
1321
1389
#ifdef DEBUG
1322
1390
print_hex_dump (KERN_ERR , "jobdesc@" __stringify (__LINE__ )": " ,
@@ -1393,6 +1461,10 @@ static int ahash_update_first(struct ahash_request *req)
1393
1461
edesc -> sec4_sg ,
1394
1462
sec4_sg_bytes ,
1395
1463
DMA_TO_DEVICE );
1464
+ if (dma_mapping_error (jrdev , edesc -> sec4_sg_dma )) {
1465
+ dev_err (jrdev , "unable to map S/G table\n" );
1466
+ return - ENOMEM ;
1467
+ }
1396
1468
src_dma = edesc -> sec4_sg_dma ;
1397
1469
options = LDST_SGF ;
1398
1470
} else {
@@ -1410,7 +1482,9 @@ static int ahash_update_first(struct ahash_request *req)
1410
1482
1411
1483
append_seq_in_ptr (desc , src_dma , to_hash , options );
1412
1484
1413
- map_seq_out_ptr_ctx (desc , jrdev , state , ctx -> ctx_len );
1485
+ ret = map_seq_out_ptr_ctx (desc , jrdev , state , ctx -> ctx_len );
1486
+ if (ret )
1487
+ return ret ;
1414
1488
1415
1489
#ifdef DEBUG
1416
1490
print_hex_dump (KERN_ERR , "jobdesc@" __stringify (__LINE__ )": " ,
0 commit comments