Hi all,

https://mariadb.atlassian.net/browse/MDEV-6282 is a use after free bug that
happens when one connection is opened, oqgraph queried, then the connection
closed, then a second connection opened and oqgraph queried again in the same
server session.

Essentially, our handler in open() eventually creates a graph share object
that keeps a reference to the underlying TABLE object, this table object has
an in_use field that is a THD*.

But when the connection goes away, mysqld free()'d that THD.  Except the
handler never processes close() at this point, and we never get a chance to
cause that table object to 'refresh' for want of a better word.

Which means when the next query comes along, eventually it calls index_read()
on our handler which calls seek_to() in the graph code which calls back into
mysql using ha_index_read_map on the backing table, which then crashes because
it eventually calls increment_statistics which first increments free()'d
memory via &SSV and then accesses a bogus member pointer in the long dead THD.

I dont yet know enough about the internals of mysqld to know how to handle 
this...

cheers,
Andrew

-- 
Mailing list: https://launchpad.net/~oqgraph-dev
Post to     : oqgraph-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~oqgraph-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to