Le 24/12/2015 02:07, [email protected] a écrit : > From: Chen Gang <[email protected]> > > In this case, real_end is larger than end, which may cause mmap_frag > process the incorrect memory region. > > Signed-off-by: Chen Gang <[email protected]> > --- > 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 <[email protected]>
