diff mbox series

mm/vma: Add VM_WARN_ON for commit_merge

Message ID 20250116025005.55846-1-liuye@kylinos.cn (mailing list archive)
State New
Headers show
Series mm/vma: Add VM_WARN_ON for commit_merge | expand

Commit Message

Liu Ye Jan. 16, 2025, 2:50 a.m. UTC
Add VM_WARN_ON to prevent 'adjust' from accessing NULL pointers
    when 'adjust' is NULL and 'expanded' is false or 'adj_start' is
    not zero.
Signed-off-by: Liu Ye <liuye@kylinos.cn>
---
 mm/vma.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Andrew Morton Jan. 16, 2025, 4:01 a.m. UTC | #1
On Thu, 16 Jan 2025 10:50:05 +0800 Liu Ye <liuye@kylinos.cn> wrote:

>     Add VM_WARN_ON to prevent 'adjust' from accessing NULL pointers
>     when 'adjust' is NULL and 'expanded' is false or 'adj_start' is
>     not zero.
>
> ...
>
> --- a/mm/vma.c
> +++ b/mm/vma.c
> @@ -641,6 +641,7 @@ static int commit_merge(struct vma_merge_struct *vmg,
>  
>  	init_multi_vma_prep(&vp, vmg->vma, adjust, remove, remove2);
>  
> +	VM_WARN_ON(!adjust && (!expanded || adj_start));
>  	VM_WARN_ON(vp.anon_vma && adjust && adjust->anon_vma &&
>  		   vp.anon_vma != adjust->anon_vma);
>  

This won't prevent a null deref.  It will emit a warning which
duplicates all the information which we're about to emit from the oops
handler.

Are there any reports of an oops from a NULL deref of `adjust'?
diff mbox series

Patch

diff --git a/mm/vma.c b/mm/vma.c
index 31c9c6f51c9f..36b5ac675504 100644
--- a/mm/vma.c
+++ b/mm/vma.c
@@ -641,6 +641,7 @@  static int commit_merge(struct vma_merge_struct *vmg,
 
 	init_multi_vma_prep(&vp, vmg->vma, adjust, remove, remove2);
 
+	VM_WARN_ON(!adjust && (!expanded || adj_start));
 	VM_WARN_ON(vp.anon_vma && adjust && adjust->anon_vma &&
 		   vp.anon_vma != adjust->anon_vma);