On 05/23/2017 10:11 PM, Marek Olšák wrote:
I don't think this change is necessary. Releasing sampler views
doesn't release textures.

This issued has been reported by Feral directly. It happens in the following scenario:

1) create a texture
2) get a texture handle
3) make it resident
4) bind the texture to a unit
5) draw

The sampler views are then released and this ended up with a use-after-free at decompression time for the resident texture handle.


Marek

On Fri, May 19, 2017 at 6:52 PM, Samuel Pitoiset
<samuel.pitoi...@gmail.com> wrote:
When a texture is referenced by one or more texture handles,
it might be resident and we shouldn't release the sampler views.

Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
---
  src/mesa/state_tracker/st_sampler_view.c | 6 ++++++
  1 file changed, 6 insertions(+)

diff --git a/src/mesa/state_tracker/st_sampler_view.c 
b/src/mesa/state_tracker/st_sampler_view.c
index c78a987486..690b50087c 100644
--- a/src/mesa/state_tracker/st_sampler_view.c
+++ b/src/mesa/state_tracker/st_sampler_view.c
@@ -115,6 +115,12 @@ st_texture_release_all_sampler_views(struct st_context *st,
  {
     GLuint i;

+   if (stObj->base.HandleAllocated) {
+      /* Do not release sampler views when a texture is referenced by one or
+       * more texture handles because the texture might be resident. */
+      return;
+   }
+
     /* XXX This should use sampler_views[i]->pipe, not st->pipe */
     for (i = 0; i < stObj->num_sampler_views; ++i)
        pipe_sampler_view_release(st->pipe, &stObj->sampler_views[i]);
--
2.13.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to