From 284331e30973ebbfee38a02145d5f7ebdc0ba801 Mon Sep 17 00:00:00 2001 From: Matthias Kruk Date: Mon, 16 Dec 2019 23:13:16 +0900 Subject: [PATCH] Make the sbrk() syscall behave as specified in brk(2) with regards to the return value --- kernel/core/posixcall.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/kernel/core/posixcall.c b/kernel/core/posixcall.c index 8d3985d..809460d 100644 --- a/kernel/core/posixcall.c +++ b/kernel/core/posixcall.c @@ -49,7 +49,7 @@ int sys_fork(stack_frame_t *stk) return(ret_val); } -int sys_sbrk(ssize_t increment) +int sys_sbrk(stack_frame_t *stk) { process_t *cproc; pg_dir_t *pgdir; @@ -62,7 +62,17 @@ int sys_sbrk(ssize_t increment) ret_val = process_get_pagedir(cproc, &pgdir); if(!ret_val) { - ret_val = (int)pg_dir_sbrk(pgdir, increment); + void *brk; + + brk = pg_dir_sbrk(pgdir, (ssize_t)stk->ebx); + + if(brk) { + stk->eax = (u32_t)brk; + ret_val = 0; + } else { + stk->eax = (u32_t)-1; + ret_val = -ENOMEM; + } } process_unlock(cproc); @@ -388,7 +398,7 @@ int sys_posixcall(stack_frame_t *stk) break; case SYS_SBRK: - ret_val = sys_sbrk((ssize_t)stk->ebx); + ret_val = sys_sbrk(stk); break; case SYS_EXECFVE: -- 2.47.3