* [TECH TOPIC] Revocable: a mechanism for preventing "classic" use-after-free bugs @ 2025-09-13 14:49 Tzung-Bi Shih 2025-09-13 22:19 ` Jiri Kosina 2025-09-16 6:56 ` Linus Walleij 0 siblings, 2 replies; 5+ messages in thread From: Tzung-Bi Shih @ 2025-09-13 14:49 UTC (permalink / raw) To: ksummit; +Cc: tzungbi Abstract A "classic" Use-After-Free (UAF) can occur when resources tied to hot-pluggable devices are accessed after the device has been removed. For example, an open file descriptor may hold references to such resources; if the device is unplugged, subsequent file operations on that descriptor can trigger an UAF. This talk, a follow-up to a previous presentation[1], explores an approach to this challenge. We will present "revocable"[2], a new kernel mechanism for resource management. A revocable allows a resource provider (e.g., a device driver) to invalidate access to a resource from a consumer (e.g., a character device) when the underlying device is no longer available. Once a resource is revoked, any further attempts to use it will fail gracefully, thus preventing the UAF. We will discuss the design and implementation of the revocable mechanism and its application in the ChromeOS Embedded Controller drivers to fix a real-world UAF bug. We hope to also start a discussion on how this generic mechanism could be adopted by other drivers to handle similar resource lifecycle issues. [1] https://lpc.events/event/17/contributions/1627/ [2] https://lore.kernel.org/chrome-platform/20250820081645.847919-1-tzungbi@kernel.org/T/#u --- I just discovered the Kernel Summit topic suggestion is a two-step process, and I only completed the first step (the website submission), missing the second. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [TECH TOPIC] Revocable: a mechanism for preventing "classic" use-after-free bugs 2025-09-13 14:49 [TECH TOPIC] Revocable: a mechanism for preventing "classic" use-after-free bugs Tzung-Bi Shih @ 2025-09-13 22:19 ` Jiri Kosina 2025-09-14 6:45 ` Greg KH 2025-09-16 6:56 ` Linus Walleij 1 sibling, 1 reply; 5+ messages in thread From: Jiri Kosina @ 2025-09-13 22:19 UTC (permalink / raw) To: Tzung-Bi Shih; +Cc: ksummit On Sat, 13 Sep 2025, Tzung-Bi Shih wrote: > Abstract > > A "classic" Use-After-Free (UAF) can occur when resources tied to > hot-pluggable devices are accessed after the device has been removed. For > example, an open file descriptor may hold references to such resources; if > the device is unplugged, subsequent file operations on that descriptor can > trigger an UAF. This talk, a follow-up to a previous presentation[1], > explores an approach to this challenge. > > We will present "revocable"[2], a new kernel mechanism for resource > management. A revocable allows a resource provider (e.g., a device driver) > to invalidate access to a resource from a consumer (e.g., a character device) > when the underlying device is no longer available. Once a resource is > revoked, any further attempts to use it will fail gracefully, thus preventing > the UAF. > > We will discuss the design and implementation of the revocable mechanism and > its application in the ChromeOS Embedded Controller drivers to fix a > real-world UAF bug. We hope to also start a discussion on how this generic > mechanism could be adopted by other drivers to handle similar resource > lifecycle issues. > > [1] https://lpc.events/event/17/contributions/1627/ > [2] https://lore.kernel.org/chrome-platform/20250820081645.847919-1-tzungbi@kernel.org/T/#u I will be honest and admit that I haven't looked at the linked resources yet in a big enough detail, but judging purely from the abstract above, I believe this will immediately met by "how is this different from device-managed (devm_*) resources?", so hinting about that in abstract already might be helpful. Thanks, -- Jiri Kosina SUSE Labs ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [TECH TOPIC] Revocable: a mechanism for preventing "classic" use-after-free bugs 2025-09-13 22:19 ` Jiri Kosina @ 2025-09-14 6:45 ` Greg KH 2025-09-17 5:17 ` Tzung-Bi Shih 0 siblings, 1 reply; 5+ messages in thread From: Greg KH @ 2025-09-14 6:45 UTC (permalink / raw) To: Jiri Kosina; +Cc: Tzung-Bi Shih, ksummit On Sun, Sep 14, 2025 at 12:19:47AM +0200, Jiri Kosina wrote: > On Sat, 13 Sep 2025, Tzung-Bi Shih wrote: > > > Abstract > > > > A "classic" Use-After-Free (UAF) can occur when resources tied to > > hot-pluggable devices are accessed after the device has been removed. For > > example, an open file descriptor may hold references to such resources; if > > the device is unplugged, subsequent file operations on that descriptor can > > trigger an UAF. This talk, a follow-up to a previous presentation[1], > > explores an approach to this challenge. > > > > We will present "revocable"[2], a new kernel mechanism for resource > > management. A revocable allows a resource provider (e.g., a device driver) > > to invalidate access to a resource from a consumer (e.g., a character device) > > when the underlying device is no longer available. Once a resource is > > revoked, any further attempts to use it will fail gracefully, thus preventing > > the UAF. > > > > We will discuss the design and implementation of the revocable mechanism and > > its application in the ChromeOS Embedded Controller drivers to fix a > > real-world UAF bug. We hope to also start a discussion on how this generic > > mechanism could be adopted by other drivers to handle similar resource > > lifecycle issues. > > > > [1] https://lpc.events/event/17/contributions/1627/ > > [2] https://lore.kernel.org/chrome-platform/20250820081645.847919-1-tzungbi@kernel.org/T/#u > > I will be honest and admit that I haven't looked at the linked resources > yet in a big enough detail, but judging purely from the abstract above, I > believe this will immediately met by "how is this different from > device-managed (devm_*) resources?", so hinting about that in abstract > already might be helpful. It's quite different, devm_ can be built on top of it, like it was done for the rust implementation for devm_*, so yes, it would be good to say something about that. thanks, greg k-h ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [TECH TOPIC] Revocable: a mechanism for preventing "classic" use-after-free bugs 2025-09-14 6:45 ` Greg KH @ 2025-09-17 5:17 ` Tzung-Bi Shih 0 siblings, 0 replies; 5+ messages in thread From: Tzung-Bi Shih @ 2025-09-17 5:17 UTC (permalink / raw) To: Greg KH; +Cc: Jiri Kosina, ksummit On Sun, Sep 14, 2025 at 08:45:44AM +0200, Greg KH wrote: > On Sun, Sep 14, 2025 at 12:19:47AM +0200, Jiri Kosina wrote: > > On Sat, 13 Sep 2025, Tzung-Bi Shih wrote: > > > > > Abstract > > > > > > A "classic" Use-After-Free (UAF) can occur when resources tied to > > > hot-pluggable devices are accessed after the device has been removed. For > > > example, an open file descriptor may hold references to such resources; if > > > the device is unplugged, subsequent file operations on that descriptor can > > > trigger an UAF. This talk, a follow-up to a previous presentation[1], > > > explores an approach to this challenge. > > > > > > We will present "revocable"[2], a new kernel mechanism for resource > > > management. A revocable allows a resource provider (e.g., a device driver) > > > to invalidate access to a resource from a consumer (e.g., a character device) > > > when the underlying device is no longer available. Once a resource is > > > revoked, any further attempts to use it will fail gracefully, thus preventing > > > the UAF. > > > > > > We will discuss the design and implementation of the revocable mechanism and > > > its application in the ChromeOS Embedded Controller drivers to fix a > > > real-world UAF bug. We hope to also start a discussion on how this generic > > > mechanism could be adopted by other drivers to handle similar resource > > > lifecycle issues. > > > > > > [1] https://lpc.events/event/17/contributions/1627/ > > > [2] https://lore.kernel.org/chrome-platform/20250820081645.847919-1-tzungbi@kernel.org/T/#u > > > > I will be honest and admit that I haven't looked at the linked resources > > yet in a big enough detail, but judging purely from the abstract above, I > > believe this will immediately met by "how is this different from > > device-managed (devm_*) resources?", so hinting about that in abstract > > already might be helpful. > > It's quite different, devm_ can be built on top of it, like it was done > for the rust implementation for devm_*, so yes, it would be good to say > something about that. Thank you both for the feedback, that's a very good point. Here is the revised (in the second paragraph) abstract: A "classic" Use-After-Free (UAF) can occur when resources tied to hot-pluggable devices are accessed after the device has been removed. For example, an open file descriptor may hold references to such resources; if the device is unplugged, subsequent file operations on that descriptor can trigger an UAF. This talk, a follow-up to a previous presentation[1], explores an approach to this challenge. We will present "revocable"[2], a new kernel mechanism for resource management. While the existing devres framework manages resource lifetime and cleanup, revocable addresses the distinct problem of access invalidation. A revocable allows a resource provider (e.g., a device driver) to invalidate access to a resource from a consumer (e.g., a character device) when the underlying device is no longer available. Once a resource is revoked, any further attempts to use it will fail gracefully, thus preventing the UAF. We will discuss the design and implementation of the revocable mechanism and its application in the ChromeOS Embedded Controller drivers to fix a real-world UAF bug. We hope to also start a discussion on how this generic mechanism could be adopted by other drivers to handle similar resource lifecycle issues. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [TECH TOPIC] Revocable: a mechanism for preventing "classic" use-after-free bugs 2025-09-13 14:49 [TECH TOPIC] Revocable: a mechanism for preventing "classic" use-after-free bugs Tzung-Bi Shih 2025-09-13 22:19 ` Jiri Kosina @ 2025-09-16 6:56 ` Linus Walleij 1 sibling, 0 replies; 5+ messages in thread From: Linus Walleij @ 2025-09-16 6:56 UTC (permalink / raw) To: Tzung-Bi Shih; +Cc: ksummit, Bartosz Golaszewski On Sat, Sep 13, 2025 at 4:49 PM Tzung-Bi Shih <tzungbi@kernel.org> wrote: > We will present "revocable"[2], a new kernel mechanism for resource > management. A revocable allows a resource provider (e.g., a device driver) > to invalidate access to a resource from a consumer (e.g., a character device) > when the underlying device is no longer available. Once a resource is > revoked, any further attempts to use it will fail gracefully, thus preventing > the UAF. I looked at it and it looks very interesting. We have faced this problem in the GPIO subsystem because a lot of GPIO expanders are on pluggable buses such as USB, while there may still be consumers not only in kernelspace but also in userspace. We remove the underlying device driver and irqchip etc in gpiochip_remove() with: /* Numb the device, cancelling all outstanding operations */ rcu_assign_pointer(gdev->chip, NULL); but any userspace consumers are "dangling", which in practice means that e.g. linehandle_ioctl() gets called and then: if (!rcu_access_pointer(lh->gdev->chip)) return -ENODEV; This seems to be using a similar idea or the same idea and using RCU as well because you have: void *revocable_try_access(struct revocable *rev) __acquires(&rev->rp->srcu) { struct revocable_provider *rp = rev->rp; rev->idx = srcu_read_lock(&rp->srcu); return rcu_dereference(rp->res); } AFAICT this is pretty much the same, but more bells and whistles and more elegantly designed as a slot-in solution :) So we would probably be able to move over to this API very easily. Yours, Linus Walleij ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-09-17 5:17 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2025-09-13 14:49 [TECH TOPIC] Revocable: a mechanism for preventing "classic" use-after-free bugs Tzung-Bi Shih 2025-09-13 22:19 ` Jiri Kosina 2025-09-14 6:45 ` Greg KH 2025-09-17 5:17 ` Tzung-Bi Shih 2025-09-16 6:56 ` Linus Walleij
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox