From 0eb3353b7c953eee4ee32f7479140290bc26aa41 Mon Sep 17 00:00:00 2001 From: "Zheng, Qi" Date: Mon, 18 Oct 2021 13:38:26 +0800 Subject: [PATCH] Return current break if brk failed Signed-off-by: Zheng, Qi --- src/libos/src/vm/process_vm.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/libos/src/vm/process_vm.rs b/src/libos/src/vm/process_vm.rs index 5884f924..5988cfc5 100644 --- a/src/libos/src/vm/process_vm.rs +++ b/src/libos/src/vm/process_vm.rs @@ -413,17 +413,19 @@ impl ProcessVM { let heap_start = self.heap_range.start(); let heap_end = self.heap_range.end(); - if new_brk == 0 { - return Ok(self.get_brk()); - } else if new_brk < heap_start { - return_errno!(EINVAL, "New brk address is too low"); - } else if new_brk > heap_end { - return_errno!(EINVAL, "New brk address is too high"); - } + if new_brk >= heap_start && new_brk <= heap_end { + self.brk + .fetch_update(Ordering::SeqCst, Ordering::SeqCst, |old_brk| Some(new_brk)); + Ok(new_brk) + } else { + if new_brk < heap_start { + error!("New brk address is too low"); + } else if new_brk > heap_end { + error!("New brk address is too high"); + } - self.brk - .fetch_update(Ordering::SeqCst, Ordering::SeqCst, |old_brk| Some(new_brk)); - Ok(new_brk) + Ok(self.get_brk()) + } } // Get a NON-accurate free size for current process