Skip to content

Commit 11285ac

Browse files
check read permissions in cmplog rtn hook
1 parent 86dead4 commit 11285ac

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

accel/tcg/tcg-runtime.c

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ void HELPER(afl_cmplog_64)(target_ulong cur_loc, target_ulong arg1,
187187

188188
#include <sys/mman.h>
189189

190+
/*
190191
static int area_is_mapped(void *ptr, size_t len) {
191192
192193
char *p = ptr;
@@ -197,34 +198,42 @@ static int area_is_mapped(void *ptr, size_t len) {
197198
return 1;
198199
199200
}
201+
*/
200202

201203
void HELPER(afl_cmplog_rtn)(CPUArchState *env) {
202204

203205
#if defined(TARGET_X86_64)
204206

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];
207209

208210
#elif defined(TARGET_I386)
209211

210212
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;
213217

214218
// 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];
217221

218222
#else
219223

220224
// stupid code to make it compile
221-
void *ptr1 = NULL;
222-
void *ptr2 = NULL;
225+
target_ulong arg1 = 0;
226+
target_ulong arg2 = 0;
223227
return;
224228

225229
#endif
226230

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);
228237

229238
#if defined(TARGET_X86_64) || defined(TARGET_I386)
230239
uintptr_t k = (uintptr_t)env->eip;

0 commit comments

Comments
 (0)