ACK/Cmnt: [X][X/linux-kvm][SRU][PATCH 1/1] mm: mlock: avoid increase mm->locked_vm on mlock() when already mlock2(, MLOCK_ONFAULT)

Stefan Bader stefan.bader at canonical.com
Mon Nov 5 14:14:36 UTC 2018


On 23.10.18 10:44, Po-Hsu Lin wrote:
> From: Simon Guo <wei.guo.simon at gmail.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1793451
> 
> When one vma was with flag VM_LOCKED|VM_LOCKONFAULT (by invoking
> mlock2(,MLOCK_ONFAULT)), it can again be populated with mlock() with
> VM_LOCKED flag only.
> 
> There is a hole in mlock_fixup() which increase mm->locked_vm twice even
> the two operations are on the same vma and both with VM_LOCKED flags.
> 
> The issue can be reproduced by following code:
> 
>   mlock2(p, 1024 * 64, MLOCK_ONFAULT); //VM_LOCKED|VM_LOCKONFAULT
>   mlock(p, 1024 * 64);  //VM_LOCKED
> 
> Then check the increase VmLck field in /proc/pid/status(to 128k).
> 
> When vma is set with different vm_flags, and the new vm_flags is with
> VM_LOCKED, it is not necessarily be a "new locked" vma.  This patch
> corrects this bug by prevent mm->locked_vm from increment when old
> vm_flags is already VM_LOCKED.
> 
> Link: http://lkml.kernel.org/r/1472554781-9835-3-git-send-email-wei.guo.simon@gmail.com
> Signed-off-by: Simon Guo <wei.guo.simon at gmail.com>
> Acked-by: Kirill A. Shutemov <kirill.shutemov at linux.intel.com>
> Cc: Alexey Klimov <klimov.linux at gmail.com>
> Cc: Eric B Munson <emunson at akamai.com>
> Cc: Geert Uytterhoeven <geert at linux-m68k.org>
> Cc: Mel Gorman <mgorman at techsingularity.net>
> Cc: Michal Hocko <mhocko at suse.com>
> Cc: Shuah Khan <shuah at kernel.org>
> Cc: Simon Guo <wei.guo.simon at gmail.com>
> Cc: Thierry Reding <treding at nvidia.com>
> Cc: Vlastimil Babka <vbabka at suse.cz>
> Cc: David Rientjes <rientjes at google.com>
> Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
> Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
> (cherry picked from commit b155b4fde5bdde9fed439cd1f5ea07173df2ed31)
> Signed-off-by: Po-Hsu Lin <po-hsu.lin at canonical.com>
Acked-by: Stefan Bader <stefan.bader at canonical.com>
> ---

This does not seem to be something that is specific to linux-kvm and since it is
needed and applied to the master kernel, there is no need to ask for it to be
included into any derivative. That will happen automatically as long as those
derivatives still get rebased.

-Stefan
>  mm/mlock.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/mm/mlock.c b/mm/mlock.c
> index 9d2e773..b03f160 100644
> --- a/mm/mlock.c
> +++ b/mm/mlock.c
> @@ -504,6 +504,7 @@ static int mlock_fixup(struct vm_area_struct *vma, struct vm_area_struct **prev,
>  	int nr_pages;
>  	int ret = 0;
>  	int lock = !!(newflags & VM_LOCKED);
> +	vm_flags_t old_flags = vma->vm_flags;
>  
>  	if (newflags == vma->vm_flags || (vma->vm_flags & VM_SPECIAL) ||
>  	    is_vm_hugetlb_page(vma) || vma == get_gate_vma(current->mm))
> @@ -538,6 +539,8 @@ success:
>  	nr_pages = (end - start) >> PAGE_SHIFT;
>  	if (!lock)
>  		nr_pages = -nr_pages;
> +	else if (old_flags & VM_LOCKED)
> +		nr_pages = 0;
>  	mm->locked_vm += nr_pages;
>  
>  	/*
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20181105/97f89887/attachment.sig>


More information about the kernel-team mailing list