# Re: \[PATCH 06/13\] mm/ksm: convert VMA flag tests to use vma\_flags\_t

- From: Xu Xin (vivo) \<xu.xin@linux.dev\>
- Date: 2026-11-06 07:42:58 
- List: linux-security-module
- Page: https://ratatoskr.run/linux-security-module/2026/11/17876364
- Thread: https://ratatoskr.run/linux-mm/2026/11/17874173/t.md

```text
On Thu, Nov 05, 2026 at 09:30:57PM +0000, Lorenzo Stoakes (ARM) wrote:
> Replace use of the legacy vm_flags_t flags with vma_flags_t values where
> KSM tests VMA flags directly.
> 
> The ksm_madvise() interface continues to take legacy flags for the time
> being.
> 
> No functional change intended.
> 
> Signed-off-by: Lorenzo Stoakes (ARM) <ljs@kernel.org>
> ---
>  mm/ksm.c | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)

LGTM! Thanks!

Reviewed-by: Xu Xin (vivo) <xu.xin@linux.dev>

> 
> diff --git a/mm/ksm.c b/mm/ksm.c
> index d6f736a1aa2f..61b772bba229 100644
> --- a/mm/ksm.c
> +++ b/mm/ksm.c
> @@ -779,7 +779,7 @@ static struct vm_area_struct *find_mergeable_vma(struct mm_struct *mm,
>  	if (ksm_test_exit(mm))
>  		return NULL;
>  	vma = vma_lookup(mm, addr);
> -	if (!vma || !(vma->vm_flags & VM_MERGEABLE) || !vma_has_anon_rmap(vma))
> +	if (!vma || !vma_test(vma, VMA_MERGEABLE_BIT) || !vma_has_anon_rmap(vma))
>  		return NULL;
>  	return vma;
>  }
> @@ -1243,7 +1243,8 @@ static int unmerge_and_remove_all_rmap_items(void)
>  			goto mm_exiting;
>  
>  		for_each_vma(vmi, vma) {
> -			if (!(vma->vm_flags & VM_MERGEABLE) || !vma_has_anon_rmap(vma))
> +			if (!vma_test(vma, VMA_MERGEABLE_BIT) ||
> +			    !vma_has_anon_rmap(vma))
>  				continue;
>  			err = break_ksm(vma, vma->vm_start, vma->vm_end, false);
>  			if (err)
> @@ -2698,7 +2699,7 @@ static struct ksm_rmap_item *scan_get_next_rmap_item(struct page **page)
>  		goto no_vmas;
>  
>  	for_each_vma(vmi, vma) {
> -		if (!(vma->vm_flags & VM_MERGEABLE))
> +		if (!vma_test(vma, VMA_MERGEABLE_BIT))
>  			continue;
>  		if (ksm_scan.address < vma->vm_start)
>  			ksm_scan.address = vma->vm_start;
> @@ -2890,7 +2891,7 @@ static int __ksm_del_vma(struct vm_area_struct *vma)
>  {
>  	int err;
>  
> -	if (!(vma->vm_flags & VM_MERGEABLE))
> +	if (!vma_test(vma, VMA_MERGEABLE_BIT))
>  		return 0;
>  
>  	if (vma_has_anon_rmap(vma)) {
> @@ -3027,7 +3028,7 @@ int ksm_madvise(struct vm_area_struct *vma, unsigned long start,
>  
>  	switch (advice) {
>  	case MADV_MERGEABLE:
> -		if (vma->vm_flags & VM_MERGEABLE)
> +		if (vma_test(vma, VMA_MERGEABLE_BIT))
>  			return 0;
>  		if (!vma_ksm_compatible(vma))
>  			return 0;
> @@ -3484,7 +3485,7 @@ bool ksm_process_mergeable(struct mm_struct *mm)
>  	mmap_assert_locked(mm);
>  	VMA_ITERATOR(vmi, mm, 0);
>  	for_each_vma(vmi, vma)
> -		if (vma->vm_flags & VM_MERGEABLE)
> +		if (vma_test(vma, VMA_MERGEABLE_BIT))
>  			return true;
>  
>  	return false;
> 
> -- 
> 2.56.0
> 
```
