mapi: Make private copies of name strings provided by client.
glXGetProcAddress("glFoo") ends up in stub_add_dynamic() to create dynamic stubs for dynamic functions. stub_add_dynamic() doesn't store the caller provided name string "Foo" in a mesa private copy, but just stores a pointer to the "glFoo" string passed to glXGetProcAddress - a pointer into arbitrary memory outside mesa's control. If the caller passes some dynamically allocated/changing memory buffer to glXGetProcAddress(), or the caller gets unmapped from memory, e.g., some dynamically loaded application plugin which uses OpenGL, this ends badly - with a dangling pointer. strdup() the name string provided by the client to avoid this problem. Cc: "10.3 10.4 10.5" <mesa-stable@lists.freedesktop.org> Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com> Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
dfb1ae9d91
commit
1110113a7f
|
@ -102,7 +102,7 @@ stub_add_dynamic(const char *name)
|
|||
if (!stub->addr)
|
||||
return NULL;
|
||||
|
||||
stub->name = (const void *) name;
|
||||
stub->name = (const void *) strdup(name);
|
||||
/* to be fixed later */
|
||||
stub->slot = -1;
|
||||
|
||||
|
|
Loading…
Reference in New Issue