linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [bug report] mm: change failure of MAP_FIXED to restoring the gap on failure
@ 2024-08-27 10:22 Dan Carpenter
  2024-08-27 16:09 ` Liam R. Howlett
  0 siblings, 1 reply; 2+ messages in thread
From: Dan Carpenter @ 2024-08-27 10:22 UTC (permalink / raw)
  To: Liam R. Howlett; +Cc: linux-mm

Hello Liam R. Howlett,

Commit 131e4ef350fa ("mm: change failure of MAP_FIXED to restoring
the gap on failure") from Aug 22, 2024 (linux-next), leads to the
following Smatch static checker warning:

	mm/vma.h:240 vms_abort_munmap_vmas()
	error: NULL dereference inside function

mm/vma.h
    226 static inline void vms_abort_munmap_vmas(struct vma_munmap_struct *vms,
    227                 struct ma_state *mas_detach)
    228 {
    229         if (!vms->nr_pages)
    230                 return;
    231 
    232         if (vms->clear_ptes)
    233                 return reattach_vmas(mas_detach);
    234 
    235         /*
    236          * Aborting cannot just call the vm_ops open() because they are often
    237          * not symmetrical and state data has been lost.  Resort to the old
    238          * failure method of leaving a gap where the MAP_FIXED mapping failed.
    239          */
--> 240         if (unlikely(vma_iter_store_gfp(vms->vmi, NULL, GFP_KERNEL))) {
                                                          ^^^^
Passing a NULL "vma" pointer will lead to a crash.

    241                 pr_warn_once("%s: (%d) Unable to abort munmap() operation\n",
    242                              current->comm, current->pid);
    243                 /* Leaving vmas detached and in-tree may hamper recovery */
    244                 reattach_vmas(mas_detach);
    245         } else {
    246                 /* Clean up the insertion of unfortunate the gap */
    247                 vms_complete_munmap_vmas(vms, mas_detach);
    248         }
    249 }

regards,
dan carpenter


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [bug report] mm: change failure of MAP_FIXED to restoring the gap on failure
  2024-08-27 10:22 [bug report] mm: change failure of MAP_FIXED to restoring the gap on failure Dan Carpenter
@ 2024-08-27 16:09 ` Liam R. Howlett
  0 siblings, 0 replies; 2+ messages in thread
From: Liam R. Howlett @ 2024-08-27 16:09 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: linux-mm

* Dan Carpenter <dan.carpenter@linaro.org> [240827 06:22]:
> Hello Liam R. Howlett,
> 
> Commit 131e4ef350fa ("mm: change failure of MAP_FIXED to restoring
> the gap on failure") from Aug 22, 2024 (linux-next), leads to the
> following Smatch static checker warning:
> 
> 	mm/vma.h:240 vms_abort_munmap_vmas()
> 	error: NULL dereference inside function
> 
> mm/vma.h
>     226 static inline void vms_abort_munmap_vmas(struct vma_munmap_struct *vms,
>     227                 struct ma_state *mas_detach)
>     228 {
>     229         if (!vms->nr_pages)
>     230                 return;
>     231 
>     232         if (vms->clear_ptes)
>     233                 return reattach_vmas(mas_detach);
>     234 
>     235         /*
>     236          * Aborting cannot just call the vm_ops open() because they are often
>     237          * not symmetrical and state data has been lost.  Resort to the old
>     238          * failure method of leaving a gap where the MAP_FIXED mapping failed.
>     239          */
> --> 240         if (unlikely(vma_iter_store_gfp(vms->vmi, NULL, GFP_KERNEL))) {
>                                                           ^^^^
> Passing a NULL "vma" pointer will lead to a crash.

Ah, yes it will.

I need to use vma_iter_clear(vms->vmi);


Thanks,
Liam


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-08-27 16:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-08-27 10:22 [bug report] mm: change failure of MAP_FIXED to restoring the gap on failure Dan Carpenter
2024-08-27 16:09 ` Liam R. Howlett

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox