Module: Mesa
Branch: main
Commit: 049af04341031f56ad5b114db59ae7ba1df9e71a
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=049af04341031f56ad5b114db59ae7ba1df9e71a

Author: Karol Herbst <kher...@redhat.com>
Date:   Wed Oct 25 23:07:30 2023 +0200

zink: validate pointer alignment in resource_from_user_memory

Signed-off-by: Karol Herbst <kher...@redhat.com>
Acked-by: Mike Blumenkrantz <michael.blumenkra...@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25937>

---

 src/gallium/drivers/zink/zink_resource.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/gallium/drivers/zink/zink_resource.c 
b/src/gallium/drivers/zink/zink_resource.c
index 3921e3a9b8f..e4d7e4ab9ad 100644
--- a/src/gallium/drivers/zink/zink_resource.c
+++ b/src/gallium/drivers/zink/zink_resource.c
@@ -1871,6 +1871,14 @@ zink_resource_from_user_memory(struct pipe_screen 
*pscreen,
                  const struct pipe_resource *templ,
                  void *user_memory)
 {
+   struct zink_screen *screen = zink_screen(pscreen);
+   VkDeviceSize alignMask = 
screen->info.ext_host_mem_props.minImportedHostPointerAlignment - 1;
+
+   /* Validate the user_memory pointer and fail early.
+    * minImportedHostPointerAlignment is required to be POT */
+   if (((uintptr_t)user_memory) & alignMask)
+      return NULL;
+
    return resource_create(pscreen, templ, NULL, 0, NULL, 0, NULL, user_memory);
 }
 

Reply via email to