@@ -187,6 +187,7 @@ void HELPER(afl_cmplog_64)(target_ulong cur_loc, target_ulong arg1,
187
187
188
188
#include <sys/mman.h>
189
189
190
+ /*
190
191
static int area_is_mapped(void *ptr, size_t len) {
191
192
192
193
char *p = ptr;
@@ -197,34 +198,42 @@ static int area_is_mapped(void *ptr, size_t len) {
197
198
return 1;
198
199
199
200
}
201
+ */
200
202
201
203
void HELPER (afl_cmplog_rtn )(CPUArchState * env ) {
202
204
203
205
#if defined(TARGET_X86_64 )
204
206
205
- void * ptr1 = AFL_G2H ( env -> regs [R_EDI ]) ;
206
- void * ptr2 = AFL_G2H ( env -> regs [R_ESI ]) ;
207
+ target_ulong arg1 = env -> regs [R_EDI ];
208
+ target_ulong arg2 = env -> regs [R_ESI ];
207
209
208
210
#elif defined(TARGET_I386 )
209
211
210
212
target_ulong * stack = AFL_G2H (env -> regs [R_ESP ]);
211
-
212
- if (!area_is_mapped (stack , sizeof (target_ulong ) * 2 )) return ;
213
+
214
+ if (!access_ok (env_cpu (env ), VERIFY_READ , env -> regs [R_ESP ],
215
+ sizeof (target_ulong ) * 2 ))
216
+ return ;
213
217
214
218
// when this hook is executed, the retaddr is not on stack yet
215
- void * ptr1 = AFL_G2H ( stack [0 ]) ;
216
- void * ptr2 = AFL_G2H ( stack [1 ]) ;
219
+ target_ulong arg1 = stack [0 ];
220
+ target_ulong arg2 = stack [1 ];
217
221
218
222
#else
219
223
220
224
// stupid code to make it compile
221
- void * ptr1 = NULL ;
222
- void * ptr2 = NULL ;
225
+ target_ulong arg1 = 0 ;
226
+ target_ulong arg2 = 0 ;
223
227
return ;
224
228
225
229
#endif
226
230
227
- if (!area_is_mapped (ptr1 , 32 ) || !area_is_mapped (ptr2 , 32 )) return ;
231
+ if (!access_ok (env_cpu (env ), VERIFY_READ , arg1 , 0x20 ) ||
232
+ !access_ok (env_cpu (env ), VERIFY_READ , arg2 , 0x20 ))
233
+ return ;
234
+
235
+ void * ptr1 = AFL_G2H (arg1 );
236
+ void * ptr2 = AFL_G2H (arg2 );
228
237
229
238
#if defined(TARGET_X86_64 ) || defined(TARGET_I386 )
230
239
uintptr_t k = (uintptr_t )env -> eip ;
0 commit comments