From 452d93f14d33b77bf439914edd2794ee3772ac92 Mon Sep 17 00:00:00 2001 From: Dominique Martinet Date: Thu, 31 Jan 2019 11:01:57 +0900 Subject: [PATCH] mcctrl_clear_pte_range: fix zap_page for kernel >= 4.18 zap_vma_ptes no longer returns an error code as of Linux's 27d036e33237e4 ("mm: Remove return value of zap_vma_ptes()"), where they decided nobody is interested in it.... Just copy the check out of the function. Change-Id: I2eda0f91ec55a34bba96f45cc3d887bc80132a82 Originally-by: Kagawa Kodai --- executer/kernel/mcctrl/syscall.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/executer/kernel/mcctrl/syscall.c b/executer/kernel/mcctrl/syscall.c index 4fba1aab..44f6f152 100644 --- a/executer/kernel/mcctrl/syscall.c +++ b/executer/kernel/mcctrl/syscall.c @@ -2019,18 +2019,27 @@ int mcctrl_clear_pte_range(uintptr_t start, uintptr_t len) end = vma->vm_end; } if (addr < end) { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 18, 0) - zap_vma_ptes(vma, addr, end-addr); -#else +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 18, 0) error = zap_vma_ptes(vma, addr, end-addr); if (error) { - mcctrl_zap_page_range(vma, addr, end-addr, NULL); + mcctrl_zap_page_range(vma, addr, end-addr, + NULL); error = 0; } if (ret == 0) { ret = error; } -#endif +#else /* LINUX_VERSION_CODE < KERNEL_VERSION(4, 18, 0) */ + if (addr < vma->vm_start || + addr + end-addr > vma->vm_end || + !(vma->vm_flags & VM_PFNMAP)) { + mcctrl_zap_page_range(vma, addr, end-addr, + NULL); + } + else { + zap_vma_ptes(vma, addr, end-addr); + } +#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4, 18, 0) */ } addr = end; }