mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2024-11-23 18:24:13 +08:00
zink: avoid UAF on wayland async present with to-be-retired swapchain
wayland surfaces are likely to become unlinked in WSI implementations upon retiring a swapchain, requiring the pending present to complete in order to avoid invalid access cc: mesa-stable Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25288>
This commit is contained in:
parent
2b7b1059e4
commit
aaabb5b0f2
@ -255,6 +255,9 @@ kopper_CreateSwapchain(struct zink_screen *screen, struct kopper_displaytarget *
|
|||||||
bool has_alpha = cdt->info.has_alpha && (cdt->caps.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR);
|
bool has_alpha = cdt->info.has_alpha && (cdt->caps.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR);
|
||||||
if (cdt->swapchain) {
|
if (cdt->swapchain) {
|
||||||
cswap->scci = cdt->swapchain->scci;
|
cswap->scci = cdt->swapchain->scci;
|
||||||
|
/* avoid UAF if async present needs to-be-retired swapchain */
|
||||||
|
if (cdt->type == KOPPER_WAYLAND && cdt->swapchain->swapchain)
|
||||||
|
util_queue_fence_wait(&cdt->swapchain->present_fence);
|
||||||
cswap->scci.oldSwapchain = cdt->swapchain->swapchain;
|
cswap->scci.oldSwapchain = cdt->swapchain->swapchain;
|
||||||
} else {
|
} else {
|
||||||
cswap->scci.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
|
cswap->scci.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
|
||||||
|
Loading…
Reference in New Issue
Block a user