On 12/24/15 17:54, Laurent Vivier wrote: > > Le 24/12/2015 02:07, cheng...@emindsoft.com.cn a écrit : >> From: Chen Gang <cheng...@emindsoft.com.cn> >> >> In this case, real_end is larger than end, which may cause mmap_frag >> process the incorrect memory region. >> >> Signed-off-by: Chen Gang <gang.chen.5...@gmail.com> >> --- >> linux-user/mmap.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/linux-user/mmap.c b/linux-user/mmap.c >> index 7b459d5..57b0361 100644 >> --- a/linux-user/mmap.c >> +++ b/linux-user/mmap.c >> @@ -536,7 +536,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int >> prot, >> /* handle the end of the mapping */ >> if (end < real_end) { >> ret = mmap_frag(real_end - qemu_host_page_size, >> - real_end - qemu_host_page_size, real_end, >> + real_end - qemu_host_page_size, end, >> prot, flags, fd, >> offset + real_end - qemu_host_page_size - >> start); >> if (ret == -1) >> > > The fragment must effectively be mapped only to "end" not to "real_end" > (which is a host page aligned address, and thus this is not a fragment). > It is consistent with what it is done in the case of one single page. > > Reviewed-by: Laurent Vivier <laur...@vivier.eu>
Thank you for your comments. I only met this issue, and knew it should be fixed in this way, but really don't know the related details. Thanks. -- Chen Gang Open, share, and attitude like air, water, and life which God blessed