Fix missed judgment of sanity_check_range
This commit is contained in:
11
deps/oblib/src/lib/alloc/memory_sanity.cpp
vendored
11
deps/oblib/src/lib/alloc/memory_sanity.cpp
vendored
@ -49,13 +49,16 @@ void sanity_set_whitelist(const char *str)
|
||||
|
||||
void memory_sanity_abort()
|
||||
{
|
||||
if ('\0' == whitelist[0]) {
|
||||
abort();
|
||||
}
|
||||
void *addrs[128];
|
||||
int n_addr = backtrace(addrs, sizeof(addrs)/sizeof(addrs[0]));
|
||||
void *vip_addr = NULL;
|
||||
for (int i = 0; NULL == vip_addr && i < n_addr; i++) {
|
||||
for (int j = 0; NULL == vip_addr && j < 8; j++) {
|
||||
for (int j = 0; NULL == vip_addr && j < sizeof(vips)/sizeof(vips[0]); j++) {
|
||||
t_vip *vip = &vips[j];
|
||||
if (0 == strlen(vip->func_)) {
|
||||
if ('\0' == vip->func_[0]) {
|
||||
break;
|
||||
} else if (0 == vip->min_addr_ || 0 == vip->max_addr_) {
|
||||
continue;
|
||||
@ -81,9 +84,9 @@ void memory_sanity_abort()
|
||||
if (real_len < buf_len - pos) {
|
||||
pos += real_len;
|
||||
}
|
||||
for (int i = 0; i < 8; i++) {
|
||||
for (int i = 0; i < sizeof(vips)/sizeof(vips[0]); i++) {
|
||||
t_vip *vip = &vips[i];
|
||||
if (0 == strlen(vip->func_)) {
|
||||
if ('\0' == vip->func_[0]) {
|
||||
break;
|
||||
} else if (strstr(func_name, vip->func_) != NULL) {
|
||||
strncpy(vip_func, func_name, sizeof(vip_func));
|
||||
|
||||
12
deps/oblib/src/lib/alloc/memory_sanity.h
vendored
12
deps/oblib/src/lib/alloc/memory_sanity.h
vendored
@ -72,7 +72,7 @@ static constexpr int64_t sanity_max_canonical_addr = 0x4f210376cf1c;
|
||||
|
||||
static inline bool sanity_addr_in_range(const void *ptr)
|
||||
{
|
||||
return (int64_t)ptr >= sanity_min_canonical_addr && (int64_t)ptr < sanity_max_canonical_addr;
|
||||
return (int64_t)ptr < sanity_max_canonical_addr && (int64_t)ptr >= sanity_min_canonical_addr;
|
||||
}
|
||||
|
||||
static inline void* sanity_to_shadow(const void *ptr)
|
||||
@ -139,12 +139,12 @@ static inline void sanity_check_range(const void *ptr, ssize_t len)
|
||||
char *start_align = (char*)sanity_align_up((uint64_t)start, 8);
|
||||
char *end_align = (char*)sanity_align_down((uint64_t)end, 8);
|
||||
if (start_align > start &&
|
||||
(*(uint8_t*)sanity_to_shadow(start_align - 8) != 0x0 &&
|
||||
*(uint8_t*)sanity_to_shadow(start_align - 8) < (len + start - (start_align - 8)))) {
|
||||
(*(int8_t*)sanity_to_shadow(start_align - 8) != 0x0 &&
|
||||
*(int8_t*)sanity_to_shadow(start_align - 8) < (len + start - (start_align - 8)))) {
|
||||
memory_sanity_abort();
|
||||
}
|
||||
if (end_align >= start_align + 8) {
|
||||
if (*(uint8_t*)sanity_to_shadow(start_align) != 0x0) {
|
||||
if (*(int8_t*)sanity_to_shadow(start_align) != 0x0) {
|
||||
memory_sanity_abort();
|
||||
}
|
||||
if (end_align > start_align + 8) {
|
||||
@ -157,8 +157,8 @@ static inline void sanity_check_range(const void *ptr, ssize_t len)
|
||||
}
|
||||
}
|
||||
if (end_align < end &&
|
||||
(*(uint8_t*)sanity_to_shadow(end_align) != 0x0 &&
|
||||
*(uint8_t*)sanity_to_shadow(end_align) < (end - end_align))) {
|
||||
(*(int8_t*)sanity_to_shadow(end_align) != 0x0 &&
|
||||
*(int8_t*)sanity_to_shadow(end_align) < (end - end_align))) {
|
||||
memory_sanity_abort();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user