From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39872) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aAx0V-000732-VQ for qemu-devel@nongnu.org; Mon, 21 Dec 2015 04:43:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aAx0R-0003fJ-V2 for qemu-devel@nongnu.org; Mon, 21 Dec 2015 04:43:55 -0500 Received: from mout.kundenserver.de ([212.227.17.24]:55305) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aAx0R-0003f2-L2 for qemu-devel@nongnu.org; Mon, 21 Dec 2015 04:43:51 -0500 References: <1450665214-4467-1-git-send-email-chengang@emindsoft.com.cn> From: Laurent Vivier Message-ID: <5677C9C1.1060904@vivier.eu> Date: Mon, 21 Dec 2015 10:43:29 +0100 MIME-Version: 1.0 In-Reply-To: <1450665214-4467-1-git-send-email-chengang@emindsoft.com.cn> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH v2] linux-user/mmap.c: Always zero MAP_ANONYMOUS memory in mmap_frag() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Chen Gang Cc: peter.maydell@linaro.org, riku.voipio@iki.fi, qemu-devel@nongnu.org, rth@twiddle.net Le 21/12/2015 03:33, chengang@emindsoft.com.cn a écrit : > From: Chen Gang > > When mapping MAP_ANONYMOUS memory fragments, still need notice about to > set it zero, or it will cause issues. Perhaps you can explain in the commit message why this page is not already filled by zeros ? > Signed-off-by: Chen Gang > --- > linux-user/mmap.c | 4 +++- > 1 files changed, 3 insertions(+), 1 deletions(-) > > diff --git a/linux-user/mmap.c b/linux-user/mmap.c > index 7b459d5..29fe646 100644 > --- a/linux-user/mmap.c > +++ b/linux-user/mmap.c > @@ -186,10 +186,12 @@ static int mmap_frag(abi_ulong real_start, > if (prot_new != (prot1 | PROT_WRITE)) > mprotect(host_start, qemu_host_page_size, prot_new); > } else { > - /* just update the protection */ > if (prot_new != prot1) { > mprotect(host_start, qemu_host_page_size, prot_new); > } > + if ((prot_new & PROT_WRITE) && ((flags & MAP_PRIVATE) || (fd == -1))) { According to manpage, for MAP_ANONYMOUS, fd can be ignored. Why do you check if the page is MAP_PRIVATE or not ? > + memset(g2h(start), 0, end - start); > + } > } > return 0; > } >