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); }