Skip to content

Commit

Permalink
tools/nolibc: keep brk(), sbrk(), mmap() away from __sysret()
Browse files Browse the repository at this point in the history
The __sysret() function causes some undesirable casts so we'll revert
it. In order to keep it simple it will now only support integer return
values like in the past, so we must basically revert the changes that
were made to these 3 syscalls which return a pointer so that they
simply rely on their own test and the SET_ERRNO() macro.

Fixes: 4201cfc ("tools/nolibc: clean up sbrk() routine")
Fixes: 924e953 ("tools/nolibc: clean up mmap() routine")
Fixes: d27447b ("tools/nolibc: sys.h: apply __sysret() helper")
Link: https://lore.kernel.org/lkml/20230806095846.GB10627@1wt.eu/
Link: https://lore.kernel.org/lkml/ZNKOJY+g66nkIyvv@1wt.eu/
Cc: Zhangjin Wu <falcon@tinylab.org>
Cc: David Laight <David.Laight@ACULAB.COM>
Cc: Thomas Weißschuh <thomas@t-8ch.de>
Signed-off-by: Willy Tarreau <w@1wt.eu>
  • Loading branch information
wtarreau committed Aug 23, 2023
1 parent 872dbfa commit fb01ff6
Showing 1 changed file with 16 additions and 3 deletions.
19 changes: 16 additions & 3 deletions tools/include/nolibc/sys.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,13 @@ void *sys_brk(void *addr)
static __attribute__((unused))
int brk(void *addr)
{
return __sysret(sys_brk(addr) ? 0 : -ENOMEM);
void *ret = sys_brk(addr);

if (!ret) {
SET_ERRNO(ENOMEM);
return -1;
}
return 0;
}

static __attribute__((unused))
Expand All @@ -94,7 +100,8 @@ void *sbrk(intptr_t inc)
if (ret && sys_brk(ret + inc) == ret + inc)
return ret + inc;

return (void *)__sysret(-ENOMEM);
SET_ERRNO(ENOMEM);
return (void *)-1;
}


Expand Down Expand Up @@ -682,7 +689,13 @@ void *sys_mmap(void *addr, size_t length, int prot, int flags, int fd,
static __attribute__((unused))
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)
{
return (void *)__sysret((unsigned long)sys_mmap(addr, length, prot, flags, fd, offset));
void *ret = sys_mmap(addr, length, prot, flags, fd, offset);

if ((unsigned long)ret >= -4095UL) {
SET_ERRNO(-(long)ret);
ret = MAP_FAILED;
}
return ret;
}

static __attribute__((unused))
Expand Down

0 comments on commit fb01ff6

Please sign in to comment.