mem* check operations now tell where it failed

This commit is contained in:
Alex 2023-02-15 07:14:18 +02:00
parent 0f1f66668b
commit 4506648cd6
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
2 changed files with 19 additions and 24 deletions

View File

@ -5,6 +5,8 @@
#include <debug.h> #include <debug.h>
#include <cpu.hpp> #include <cpu.hpp>
#include "../kernel.h"
EXTERNC int memcmp(const void *vl, const void *vr, size_t n) EXTERNC int memcmp(const void *vl, const void *vr, size_t n)
{ {
const unsigned char *l = (unsigned char *)vl, *r = (unsigned char *)vr; const unsigned char *l = (unsigned char *)vl, *r = (unsigned char *)vr;
@ -609,25 +611,25 @@ EXTERNC __no_stack_protector void *__memcpy_chk(void *dest, const void *src, siz
#endif #endif
if (unlikely(dest == NULL)) if (unlikely(dest == NULL))
{ {
error("dest is NULL"); error("dest is NULL (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
if (unlikely(src == NULL)) if (unlikely(src == NULL))
{ {
error("src is NULL"); error("src is NULL (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
if (unlikely(len == 0)) if (unlikely(len == 0))
{ {
error("len is 0"); error("len is 0 (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
if (unlikely(slen == 0)) if (unlikely(slen == 0))
{ {
error("slen is 0"); error("slen is 0 (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
@ -658,8 +660,6 @@ EXTERNC __no_stack_protector void *__memcpy_chk(void *dest, const void *src, siz
return memcpy_unsafe(dest, src, len); return memcpy_unsafe(dest, src, len);
break; break;
} }
error("Should not be here!");
CPU::Stop();
} }
EXTERNC __no_stack_protector void *__memset_chk(void *dest, int val, size_t len, size_t slen) EXTERNC __no_stack_protector void *__memset_chk(void *dest, int val, size_t len, size_t slen)
@ -669,19 +669,19 @@ EXTERNC __no_stack_protector void *__memset_chk(void *dest, int val, size_t len,
#endif #endif
if (unlikely(dest == NULL)) if (unlikely(dest == NULL))
{ {
error("dest is NULL"); error("dest is NULL (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
if (unlikely(len == 0)) if (unlikely(len == 0))
{ {
error("len is 0"); error("len is 0 (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
if (unlikely(slen == 0)) if (unlikely(slen == 0))
{ {
error("slen is 0"); error("slen is 0 (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
@ -712,8 +712,6 @@ EXTERNC __no_stack_protector void *__memset_chk(void *dest, int val, size_t len,
return memset_unsafe(dest, val, len); return memset_unsafe(dest, val, len);
break; break;
} }
error("Should not be here!");
CPU::Stop();
} }
EXTERNC __no_stack_protector void *__memmove_chk(void *dest, const void *src, size_t len, size_t slen) EXTERNC __no_stack_protector void *__memmove_chk(void *dest, const void *src, size_t len, size_t slen)
@ -723,25 +721,25 @@ EXTERNC __no_stack_protector void *__memmove_chk(void *dest, const void *src, si
#endif #endif
if (unlikely(dest == NULL)) if (unlikely(dest == NULL))
{ {
error("dest is NULL"); error("dest is NULL (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
if (unlikely(src == NULL)) if (unlikely(src == NULL))
{ {
error("src is NULL"); error("src is NULL (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
if (unlikely(len == 0)) if (unlikely(len == 0))
{ {
error("len is 0"); error("len is 0 (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
if (unlikely(slen == 0)) if (unlikely(slen == 0))
{ {
error("slen is 0"); error("slen is 0 (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
@ -772,8 +770,6 @@ EXTERNC __no_stack_protector void *__memmove_chk(void *dest, const void *src, si
return memmove_unsafe(dest, src, len); return memmove_unsafe(dest, src, len);
break; break;
} }
error("Should not be here!");
CPU::Stop();
} }
EXTERNC __no_stack_protector char *__strcat_chk(char *dest, const char *src, size_t slen) EXTERNC __no_stack_protector char *__strcat_chk(char *dest, const char *src, size_t slen)
@ -783,19 +779,19 @@ EXTERNC __no_stack_protector char *__strcat_chk(char *dest, const char *src, siz
#endif #endif
if (unlikely(dest == NULL)) if (unlikely(dest == NULL))
{ {
error("dest is NULL"); error("dest is NULL (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
if (unlikely(src == NULL)) if (unlikely(src == NULL))
{ {
error("src is NULL"); error("src is NULL (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
if (unlikely(slen == 0)) if (unlikely(slen == 0))
{ {
error("slen is 0"); error("slen is 0 (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
@ -812,19 +808,19 @@ EXTERNC __no_stack_protector char *__strcpy_chk(char *dest, const char *src, siz
#endif #endif
if (unlikely(dest == NULL)) if (unlikely(dest == NULL))
{ {
error("dest is NULL"); error("dest is NULL (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
if (unlikely(src == NULL)) if (unlikely(src == NULL))
{ {
error("src is NULL"); error("src is NULL (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }
if (unlikely(slen == 0)) if (unlikely(slen == 0))
{ {
error("slen is 0"); error("slen is 0 (for %#lx %s)", __builtin_return_address(0), KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
__convert_chk_fail(); __convert_chk_fail();
} }

View File

@ -31,7 +31,6 @@ NewLock(TaskingLock);
namespace Tasking namespace Tasking
{ {
void Task::Schedule() void Task::Schedule()
{ {
if (!StopScheduler) if (!StopScheduler)