Re: Why sbrk clear the increased memory region

2019-04-23 Thread Sascha Hauer
On Mon, Apr 22, 2019 at 11:13:30AM +0800, 张忠山 wrote:
> Recently, I'm using barebox in a deep embedded project, and need some 
> funtctions
> in libc/libm, So I linked barebox with newlib
> 
> But whenever newlib call sbrk with negtive `increment`, barebox crash.
> 
> The reason is sbrk clean memory region using `increment`.
> 
> Why sbrk must clear the increased memory region?

sbrk is used only for dlmalloc in barebox. AFAIK the dlmalloc
implementation needs the memory cleared. Also dlmalloxc probably never
calls sbrk with a negative increment, so this was never an issue.

Sascha

-- 
Pengutronix e.K.   | |
Industrial Linux Solutions | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0|
Amtsgericht Hildesheim, HRA 2686   | Fax:   +49-5121-206917- |

___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


Why sbrk clear the increased memory region

2019-04-21 Thread 张忠山
Recently, I'm using barebox in a deep embedded project, and need some funtctions
in libc/libm, So I linked barebox with newlib

But whenever newlib call sbrk with negtive `increment`, barebox crash.

The reason is sbrk clean memory region using `increment`.

Why sbrk must clear the increased memory region? 

8<- 
From dbaa658b60fe413e1d1818afad13a53e7ad000ce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E5=BF=A0=E5=B1=B1?= 
Date: Mon, 22 Apr 2019 11:01:33 +0800
Subject: [PATCH] only clear memory when increasing head size
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: 张忠山 
---
 common/memory.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/common/memory.c b/common/memory.c
index 8f0b59891..0a8700d28 100644
--- a/common/memory.c
+++ b/common/memory.c
@@ -122,7 +122,7 @@ void *sbrk(ptrdiff_t increment)
void *old = sbrk_no_zero(increment);
 
/* Only clear increment, if valid address was returned */
-   if (old != NULL)
+   if ((old != NULL) && (increment > 0))
memset(old, 0, increment);
 
return old;
-- 
2.21.0

-- 
Best Regards,
zzs


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox