Changeset View
Changeset View
Standalone View
Standalone View
head/sys/i386/i386/bpf_jit_machdep.c
Show First 20 Lines • Show All 626 Lines • ▼ Show 20 Lines | #endif | ||||
ins++; | ins++; | ||||
} | } | ||||
if (pass > 0) | if (pass > 0) | ||||
continue; | continue; | ||||
*size = stream.cur_ip; | *size = stream.cur_ip; | ||||
#ifdef _KERNEL | #ifdef _KERNEL | ||||
stream.ibuf = malloc(*size, M_BPFJIT, M_NOWAIT); | stream.ibuf = malloc(*size, M_BPFJIT, M_EXEC | M_NOWAIT); | ||||
if (stream.ibuf == NULL) | if (stream.ibuf == NULL) | ||||
break; | break; | ||||
#else | #else | ||||
stream.ibuf = mmap(NULL, *size, PROT_READ | PROT_WRITE, | stream.ibuf = mmap(NULL, *size, PROT_READ | PROT_WRITE, | ||||
MAP_ANON, -1, 0); | MAP_ANON, -1, 0); | ||||
if (stream.ibuf == MAP_FAILED) { | if (stream.ibuf == MAP_FAILED) { | ||||
stream.ibuf = NULL; | stream.ibuf = NULL; | ||||
break; | break; | ||||
Show All 31 Lines | #ifndef _KERNEL | ||||
if (stream.ibuf != NULL && | if (stream.ibuf != NULL && | ||||
mprotect(stream.ibuf, *size, PROT_READ | PROT_EXEC) != 0) { | mprotect(stream.ibuf, *size, PROT_READ | PROT_EXEC) != 0) { | ||||
munmap(stream.ibuf, *size); | munmap(stream.ibuf, *size); | ||||
stream.ibuf = NULL; | stream.ibuf = NULL; | ||||
} | } | ||||
#endif | #endif | ||||
return ((bpf_filter_func)(void *)stream.ibuf); | return ((bpf_filter_func)(void *)stream.ibuf); | ||||
} | |||||
void | |||||
bpf_jit_free(void *func, size_t size) | |||||
{ | |||||
#ifdef _KERNEL | |||||
free(func, M_BPFJIT); | |||||
#else | |||||
munmap(func, size); | |||||
#endif | |||||
} | } |