-
Alexander Graf authored
If we execute linux-user code that does the following: * A = mmap() * execute code in A * munmap(A) * B = mmap(), but mmap returns the same address as A * execute code in B we end up executing a stale cached tb that contains translated code from A, while we want new code from B. This patch adds a TB flush for mmap'ed regions, before we return them, avoiding the whole issue. It also adds a flush for munmap, so that we don't execute stale TBs instead of getting a segfault. Reported-by:
Peter Maydell <peter.maydell@linaro.org>
Signed-off-by:
Alexander Graf <agraf@suse.de>
Reviewed-by:
Peter Maydell <peter.maydell@linaro.org>
Acked-by:
Riku Voipio <riku.voipio@linaro.org>
Signed-off-by:
Blue Swirl <blauwirbel@gmail.com>Alexander Graf authoredIf we execute linux-user code that does the following: * A = mmap() * execute code in A * munmap(A) * B = mmap(), but mmap returns the same address as A * execute code in B we end up executing a stale cached tb that contains translated code from A, while we want new code from B. This patch adds a TB flush for mmap'ed regions, before we return them, avoiding the whole issue. It also adds a flush for munmap, so that we don't execute stale TBs instead of getting a segfault. Reported-by:
Peter Maydell <peter.maydell@linaro.org>
Signed-off-by:
Alexander Graf <agraf@suse.de>
Reviewed-by:
Peter Maydell <peter.maydell@linaro.org>
Acked-by:
Riku Voipio <riku.voipio@linaro.org>
Signed-off-by:
Blue Swirl <blauwirbel@gmail.com>
Loading