@@ -193,6 +193,7 @@ static void do_hash_operation(AspeedHACEState *s, int algo, bool sg_mode,
193
193
size_t digest_len = 0 ;
194
194
int niov = 0 ;
195
195
int i ;
196
+ void * haddr ;
196
197
197
198
if (sg_mode ) {
198
199
uint32_t len = 0 ;
@@ -217,9 +218,13 @@ static void do_hash_operation(AspeedHACEState *s, int algo, bool sg_mode,
217
218
addr &= SG_LIST_ADDR_MASK ;
218
219
219
220
plen = len & SG_LIST_LEN_MASK ;
220
- iov [i ].iov_base = address_space_map (& s -> dram_as , addr , & plen , false,
221
- MEMTXATTRS_UNSPECIFIED );
222
-
221
+ haddr = address_space_map (& s -> dram_as , addr , & plen , false,
222
+ MEMTXATTRS_UNSPECIFIED );
223
+ if (haddr == NULL ) {
224
+ qemu_log_mask (LOG_GUEST_ERROR , "%s: qcrypto failed\n" , __func__ );
225
+ return ;
226
+ }
227
+ iov [i ].iov_base = haddr ;
223
228
if (acc_mode ) {
224
229
niov = gen_acc_mode_iov (s , iov , i , & plen );
225
230
@@ -230,10 +235,14 @@ static void do_hash_operation(AspeedHACEState *s, int algo, bool sg_mode,
230
235
} else {
231
236
hwaddr len = s -> regs [R_HASH_SRC_LEN ];
232
237
238
+ haddr = address_space_map (& s -> dram_as , s -> regs [R_HASH_SRC ],
239
+ & len , false, MEMTXATTRS_UNSPECIFIED );
240
+ if (haddr == NULL ) {
241
+ qemu_log_mask (LOG_GUEST_ERROR , "%s: qcrypto failed\n" , __func__ );
242
+ return ;
243
+ }
244
+ iov [0 ].iov_base = haddr ;
233
245
iov [0 ].iov_len = len ;
234
- iov [0 ].iov_base = address_space_map (& s -> dram_as , s -> regs [R_HASH_SRC ],
235
- & len , false,
236
- MEMTXATTRS_UNSPECIFIED );
237
246
i = 1 ;
238
247
239
248
if (s -> iov_count ) {
0 commit comments