Explicitly annotate the Device reference produced by from_raw() in the
ioctl dispatch macro as Device<_, Normal>. Without this annotation, the
context is inferred from the handler's first parameter type, which would
allow a handler declaring &Device<T, Registered> to obtain a Registered
reference without runtime proof via RegistrationGuard.

Signed-off-by: Danilo Krummrich <[email protected]>
---
 rust/kernel/drm/ioctl.rs | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/rust/kernel/drm/ioctl.rs b/rust/kernel/drm/ioctl.rs
index 023e6da5c1e4..70cf1aa4d788 100644
--- a/rust/kernel/drm/ioctl.rs
+++ b/rust/kernel/drm/ioctl.rs
@@ -167,7 +167,8 @@ macro_rules! declare_drm_ioctls {
                             // FIXME: Currently there is nothing enforcing 
that the types of the
                             // dev/file match the current driver these ioctls 
are being declared
                             // for, and it's not clear how to enforce this 
within the type system.
-                            let dev = 
$crate::drm::device::Device::from_raw(raw_dev);
+                            let dev: &$crate::drm::device::Device<_, 
$crate::drm::Normal> =
+                                $crate::drm::device::Device::from_raw(raw_dev);
                             let __anchor = ();
 
                             // SAFETY:
-- 
2.54.0

Reply via email to