diff --git a/rust/kernel/drm/kms/plane.rs b/rust/kernel/drm/kms/plane.rs
index c7dcc799d91f87dc8cd0a00faa5685979906da5d..f12cfd708d26cfd559db15e6f47851b18a244806 100644
--- a/rust/kernel/drm/kms/plane.rs
+++ b/rust/kernel/drm/kms/plane.rs
@@ -404,7 +404,10 @@ impl<T: KmsDriver> AsRawPlane for OpaquePlane<T> {
     }
 }
 
-impl<T: KmsDriver> ModeObject for OpaquePlane<T> {
+// SAFETY: We don't expose OpaquePlane<T> to users before `base` is initialized in
+// Plane::<T>::new(), so `raw_mode_obj` always returns a valid poiner to a
+// bindings::drm_mode_object.
+unsafe impl<T: KmsDriver> ModeObject for OpaquePlane<T> {
     type Driver = T;
 
     fn drm_dev(&self) -> &Device<Self::Driver> {