Files
erofs-linux/lib
Hao Ge 2956268efc alloc_tag: fix use-after-free in /proc/allocinfo after module unload
allocinfo_start() only reinitializes the codetag iterator at position 0. 
For subsequent reads (position > 0), it reuses cached iterator state from
the previous batch.  allocinfo_stop() drops mod_lock between read batches,
which allows module unload to complete and free the module memory that the
cached iterator still references:

  CPU0 (read)                        CPU1 (rmmod)
  ----                               ----
  allocinfo_start(pos=0)
    down_read(mod_lock)
    allocinfo_show()
    ...
  allocinfo_stop()
    up_read(mod_lock)
                                     codetag_unload_module()
                                       kfree(cmod)
                                       release_module_tags()
                                     ...
                                     free_mod_mem()
  allocinfo_start(pos=N)
    down_read(mod_lock)
    // reuses cached iter, skips re-init
  allocinfo_show()
    ct->filename   <-- UAF

After free_mod_mem() frees the module's .rodata, allocinfo_show()
dereferences ct->filename, ct->function which point there.

Save the iterator state in allocinfo_next() and resume from it in
allocinfo_start() with codetag_next_ct(), which detects module removal via
idr_find() returning NULL and skips to the next module.

Link: https://lore.kernel.org/[email protected]
Fixes: 9f44df50fe ("alloc_tag: keep codetag iterator active between read()")
Signed-off-by: Hao Ge <[email protected]>
Suggested-by: Suren Baghdasaryan <[email protected]>
Acked-by: Suren Baghdasaryan <[email protected]>
Cc: Kent Overstreet <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
2026-06-21 11:31:28 -07:00
..
…
…
2026-04-02 23:36:22 -07:00
…
…
2025-04-11 17:32:37 -07:00
2026-03-05 22:16:08 -05:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-04-13 08:39:51 -07:00
2026-04-02 23:36:16 -07:00
…
…
2025-10-24 21:39:27 +02:00
…
…
…
…
2026-01-11 06:09:11 -10:00
2026-02-27 16:40:16 +01:00
…
…
…
…
…
2026-03-24 13:39:53 -04:00
2025-03-25 10:18:31 -03:00
2026-04-18 00:10:48 -07:00
…
…
…
2025-09-13 16:54:46 -07:00