Fix dlmalloc horror bug - mman_map overwrites application code

This commit is contained in:
2025-09-14 19:07:00 +02:00
parent e6891b39cc
commit 26ff717b50
18 changed files with 197 additions and 137 deletions

View File

@ -5,25 +5,27 @@
#include <errors.h>
#include <dlmalloc/malloc.h>
#include <uprintf.h>
#include <log.h>
extern void main(void);
extern uint8_t _bss_start[];
extern uint8_t _bss_end[];
void clearbss(void) {
extern uint8_t _bss_start;
extern uint8_t _bss_end;
void bss_clear(void) {
uint8_t *p = _bss_start;
while (p != _bss_end) {
*p = 0;
p++;
uint8_t *ps = &_bss_start;
uint8_t *pe = &_bss_end;
size_t sz = pe - ps;
for (size_t i = 0; i < sz; i++) {
ps[i] = 0;
}
}
static char **_args;
static size_t _argslen;
char **_args;
size_t _argslen;
char **args(void) {
return _args;
return (char **)_args;
}
size_t argslen(void) {
@ -32,7 +34,7 @@ size_t argslen(void) {
// ulib initialization goes here
void _premain(void) {
bss_clear();
clearbss();
_argslen = processctl(-1, PCTL_ARGLEN, 0, 0, 0);
_args = dlmalloc(_argslen * sizeof(*_args));
@ -45,9 +47,8 @@ void _premain(void) {
return;
}
}
if (processctl(-1, PCTL_ARGV, (uint64_t)_args, _argslen, 0) != E_OK) {
return;
}
processctl(-1, PCTL_ARGV, (uint64_t)_args, _argslen, 0);
main();
}