lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250318-drm-gem-shmem-v1-6-64b96511a84f@collabora.com>
Date: Tue, 18 Mar 2025 16:22:40 -0300
From: Daniel Almeida <daniel.almeida@...labora.com>
To: Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>, 
 Maxime Ripard <mripard@...nel.org>, Thomas Zimmermann <tzimmermann@...e.de>, 
 David Airlie <airlied@...il.com>, Simona Vetter <simona@...ll.ch>, 
 Miguel Ojeda <ojeda@...nel.org>, Alex Gaynor <alex.gaynor@...il.com>, 
 Boqun Feng <boqun.feng@...il.com>, Gary Guo <gary@...yguo.net>, 
 Björn Roy Baron <bjorn3_gh@...tonmail.com>, 
 Benno Lossin <benno.lossin@...ton.me>, 
 Andreas Hindborg <a.hindborg@...nel.org>, Alice Ryhl <aliceryhl@...gle.com>, 
 Trevor Gross <tmgross@...ch.edu>, Sumit Semwal <sumit.semwal@...aro.org>, 
 Christian König <christian.koenig@....com>
Cc: dri-devel@...ts.freedesktop.org, linux-kernel@...r.kernel.org, 
 rust-for-linux@...r.kernel.org, linux-media@...r.kernel.org, 
 linaro-mm-sig@...ts.linaro.org, Danilo Krummrich <dakr@...nel.org>, 
 Asahi Lina <lina@...hilina.net>, 
 Daniel Almeida <daniel.almeida@...labora.com>
Subject: [PATCH 6/7] rust: drm: gem: Add set_exportable() method

From: Asahi Lina <lina@...hilina.net>

This allows drivers to control whether a given GEM object is allowed to
be exported via PRIME to other drivers.

Signed-off-by: Asahi Lina <lina@...hilina.net>
Signed-off-by: Daniel Almeida <daniel.almeida@...labora.com>
---
 rust/kernel/drm/gem/mod.rs   | 13 +++++++++++++
 rust/kernel/drm/gem/shmem.rs |  4 ++++
 2 files changed, 17 insertions(+)

diff --git a/rust/kernel/drm/gem/mod.rs b/rust/kernel/drm/gem/mod.rs
index 083faac8602885aee5ef213bb3302b79dfac4a95..3a7e9f80b414bf39301e342938ba33877bfac2cb 100644
--- a/rust/kernel/drm/gem/mod.rs
+++ b/rust/kernel/drm/gem/mod.rs
@@ -45,6 +45,10 @@ pub trait IntoGEMObject: Sized + crate::private::Sealed {
     /// this owning object is valid.
     fn gem_obj(&self) -> &bindings::drm_gem_object;
 
+    /// Returns a reference to the raw `drm_gem_object` structure, which must be valid as long as
+    /// this owning object is valid.
+    fn mut_gem_obj(&mut self) -> &mut bindings::drm_gem_object;
+
     /// Converts a pointer to a `drm_gem_object` into a pointer to this type.
     fn from_gem_obj(obj: *mut bindings::drm_gem_object) -> *mut Self;
 }
@@ -119,6 +123,10 @@ fn gem_obj(&self) -> &bindings::drm_gem_object {
         &self.obj
     }
 
+    fn mut_gem_obj(&mut self) -> &mut bindings::drm_gem_object {
+        &mut self.obj
+    }
+
     fn from_gem_obj(obj: *mut bindings::drm_gem_object) -> *mut Object<T> {
         // SAFETY: All of our objects are Object<T>.
         unsafe { crate::container_of!(obj, Object<T>, obj) as *mut Object<T> }
@@ -132,6 +140,11 @@ fn size(&self) -> usize {
         self.gem_obj().size
     }
 
+    /// Sets the exportable flag, which controls whether the object can be exported via PRIME.
+    fn set_exportable(&mut self, exportable: bool) {
+        self.mut_gem_obj().exportable = exportable;
+    }
+
     /// Creates a new reference to the object.
     fn reference(&self) -> ObjectRef<Self> {
         // SAFETY: Having a reference to an Object implies holding a GEM reference
diff --git a/rust/kernel/drm/gem/shmem.rs b/rust/kernel/drm/gem/shmem.rs
index cd080d820727fb39cb91cb0617df39310b5b68c8..fdf7dd7f2408bd2857f5b72027ef48e29c9dd9e3 100644
--- a/rust/kernel/drm/gem/shmem.rs
+++ b/rust/kernel/drm/gem/shmem.rs
@@ -261,6 +261,10 @@ fn gem_obj(&self) -> &bindings::drm_gem_object {
         &self.obj.base
     }
 
+    fn mut_gem_obj(&mut self) -> &mut bindings::drm_gem_object {
+        &mut self.obj.base
+    }
+
     fn from_gem_obj(obj: *mut bindings::drm_gem_object) -> *mut Object<T> {
         // SAFETY: The invariant guarantees this is correct.
         unsafe {

-- 
2.48.1


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ