Description
In the Linux kernel, the following vulnerability has been resolved: fbdev: vfb: defer cleanup until the last reference FBIOGETCMAP takes a shallow snapshot of info->cmap and performs the usercopy after dropping info->lock. vfb_remove() frees the colormap immediately after unregistering the framebuffer, even when an open file still holds a reference to fb_info. A concurrent driver unbind can therefore free the colormap while the ioctl copies it to userspace. KASAN reports: BUG: KASAN: slab-use-after-free in _copy_to_user Read of size 512 by task poc/125 _copy_to_user (./include/linux/instrumented.h:129 ./include/linux/uaccess.h:201 lib/usercopy.c:24) fb_cmap_to_user (./include/linux/uaccess.h:230 drivers/video/fbdev/core/fbcmap.c:211) do_fb_ioctl (drivers/video/fbdev/core/fb_chrdev.c:114) Allocated by task 1: fb_alloc_cmap_gfp (./include/linux/slab.h:973 ./include/linux/slab.h:1290 drivers/video/fbdev/core/fbcmap.c:108) vfb_probe (drivers/video/fbdev/vfb.c:459) Freed by task 124: fb_dealloc_cmap (drivers/video/fbdev/core/fbcmap.c:151) vfb_remove (drivers/video/fbdev/vfb.c:489) unregister_framebuffer() drops the registration reference, and fbdev calls fb_destroy after the last put_fb_info(). Move the registered framebuffer's cleanup into an fb_destroy callback so its colormap and screen buffer stay alive until all file references have been released.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
5e266e2e0e19532c1b8e2e2bff1eb6ccf42e478a to < bf49eac7ed11aabd0b9b790c062742a8e4be97c6affected5e266e2e0e19532c1b8e2e2bff1eb6ccf42e478a to < 040ce3950f64a11e9ee5646c8aaa91fd2e29e245affected5e266e2e0e19532c1b8e2e2bff1eb6ccf42e478a to < ab664e279eb2a68e55895dd115a9488807280f07affected5e266e2e0e19532c1b8e2e2bff1eb6ccf42e478a to < de5a0eda59fe4b3eacd1a67c992e54766bb6683faffected5e266e2e0e19532c1b8e2e2bff1eb6ccf42e478a to < 86356f13598f59f5acb1754895747dcdaf65a254affected5e266e2e0e19532c1b8e2e2bff1eb6ccf42e478a to < 5ff1effb047e465cde193d7df95988aa1520035eaffected5e266e2e0e19532c1b8e2e2bff1eb6ccf42e478a to < 3c91e51a53cf805e551e5dc8149cd0539a6dbb9daffected5e266e2e0e19532c1b8e2e2bff1eb6ccf42e478a to < a0a34a40ed299c9c7cff6af163a5b883ee9d6d73affected
Linux Linux
Default version status: affected
2.6.30affected0 to < 2.6.30unaffected5.10.271 to ≤ 5.10.*unaffected5.15.222 to ≤ 5.15.*unaffected6.1.189 to ≤ 6.1.*unaffected6.6.158 to ≤ 6.6.*unaffected6.12.111 to ≤ 6.12.*unaffected6.18.53 to ≤ 6.18.*unaffected7.2.7 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/bf49eac7ed11aabd0b9b790c062742a8e4be97c6 ↗
- https://git.kernel.org/stable/c/040ce3950f64a11e9ee5646c8aaa91fd2e29e245 ↗
- https://git.kernel.org/stable/c/ab664e279eb2a68e55895dd115a9488807280f07 ↗
- https://git.kernel.org/stable/c/de5a0eda59fe4b3eacd1a67c992e54766bb6683f ↗
- https://git.kernel.org/stable/c/86356f13598f59f5acb1754895747dcdaf65a254 ↗
- https://git.kernel.org/stable/c/5ff1effb047e465cde193d7df95988aa1520035e ↗
- https://git.kernel.org/stable/c/3c91e51a53cf805e551e5dc8149cd0539a6dbb9d ↗
- https://git.kernel.org/stable/c/a0a34a40ed299c9c7cff6af163a5b883ee9d6d73 ↗