Re: [Maria-developers] 2792940391a: MDEV-23327 Can't uninstall UDF if the implementation library file doesn't exist
Hi, Oleksandr! Mostly ok, one problem below: On Oct 10, Oleksandr Byelkin wrote:
revision-id: 2792940391a (mariadb-10.2.31-343-g2792940391a) parent(s): 2107e3bb9c0 author: Oleksandr Byelkin <sanja@mariadb.com> committer: Oleksandr Byelkin <sanja@mariadb.com> timestamp: 2020-07-29 21:54:24 +0200 message:
MDEV-23327 Can't uninstall UDF if the implementation library file doesn't exist
Made cleanup of DROP (udf) FUNCTION procedure and also check of mysql.func (not only loaded udf).
@@ -606,43 +648,54 @@ int mysql_create_function(THD *thd,udf_func *udf) }
-int mysql_drop_function(THD *thd,const LEX_STRING *udf_name) +enum drop_udf_result mysql_drop_function(THD *thd, const LEX_STRING *udf_name) { TABLE *table; - TABLE_LIST tables; udf_func *udf; DBUG_ENTER("mysql_drop_function");
+ if (!(table= open_udf_func_table(thd))) + DBUG_RETURN(UDF_DEL_RESULT_ERROR); + + // Pre-check without protection + if (!find_udf_everywhere(thd, udf_name->str, udf_name->length, table))
you cannot check the udf_hash without a lock
+ { + close_mysql_tables(thd);
Regards, Sergei VP of MariaDB Server Engineering and security@mariadb.org
HI, Sergei! On Sat, Oct 10, 2020 at 11:16 PM Sergei Golubchik <serg@mariadb.org> wrote:
Hi, Oleksandr!
Mostly ok, one problem below:
On Oct 10, Oleksandr Byelkin wrote:
revision-id: 2792940391a (mariadb-10.2.31-343-g2792940391a) parent(s): 2107e3bb9c0 author: Oleksandr Byelkin <sanja@mariadb.com> committer: Oleksandr Byelkin <sanja@mariadb.com> timestamp: 2020-07-29 21:54:24 +0200 message:
MDEV-23327 Can't uninstall UDF if the implementation library file doesn't exist
Made cleanup of DROP (udf) FUNCTION procedure and also check of mysql.func (not only loaded udf).
@@ -606,43 +648,54 @@ int mysql_create_function(THD *thd,udf_func *udf) }
-int mysql_drop_function(THD *thd,const LEX_STRING *udf_name) +enum drop_udf_result mysql_drop_function(THD *thd, const LEX_STRING *udf_name) { TABLE *table; - TABLE_LIST tables; udf_func *udf; DBUG_ENTER("mysql_drop_function");
+ if (!(table= open_udf_func_table(thd))) + DBUG_RETURN(UDF_DEL_RESULT_ERROR); + + // Pre-check without protection + if (!find_udf_everywhere(thd, udf_name->str, udf_name->length, table))
you cannot check the udf_hash without a lock
I made an attempt of a fast check under read protection (because it looks like old code had pre-check).
+ { + close_mysql_tables(thd);
Regards, Sergei VP of MariaDB Server Engineering and security@mariadb.org
Hi, Oleksandr! On Oct 11, Oleksandr Byelkin wrote:
+ // Pre-check without protection + if (!find_udf_everywhere(thd, udf_name->str, udf_name->length, table))
you cannot check the udf_hash without a lock
I made an attempt of a fast check under read protection (because it looks like old code had pre-check).
As far as I can see, the old code was was using find_udf() that was taking a read lock too. Regards, Sergei VP of MariaDB Server Engineering and security@mariadb.org
participants (2)
-
Oleksandr Byelkin
-
Sergei Golubchik