mirror of
https://github.com/MariaDB/server.git
synced 2025-08-05 13:16:09 +03:00
Fix possible race. Use LOCK_grant on access to grant_version.
This commit is contained in:
@@ -6009,20 +6009,21 @@ void fill_effective_table_privileges(THD *thd, GRANT_INFO *grant,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* table privileges */
|
/* table privileges */
|
||||||
|
rw_rdlock(&LOCK_grant);
|
||||||
if (grant->version != grant_version)
|
if (grant->version != grant_version)
|
||||||
{
|
{
|
||||||
rw_rdlock(&LOCK_grant);
|
|
||||||
grant->grant_table=
|
grant->grant_table=
|
||||||
table_hash_search(sctx->host, sctx->ip, db,
|
table_hash_search(sctx->host, sctx->ip, db,
|
||||||
sctx->priv_user,
|
sctx->priv_user,
|
||||||
table, 0); /* purecov: inspected */
|
table, 0); /* purecov: inspected */
|
||||||
grant->version= grant_version; /* purecov: inspected */
|
grant->version= grant_version; /* purecov: inspected */
|
||||||
rw_unlock(&LOCK_grant);
|
|
||||||
}
|
}
|
||||||
if (grant->grant_table != 0)
|
if (grant->grant_table != 0)
|
||||||
{
|
{
|
||||||
grant->privilege|= grant->grant_table->privs;
|
grant->privilege|= grant->grant_table->privs;
|
||||||
}
|
}
|
||||||
|
rw_unlock(&LOCK_grant);
|
||||||
|
|
||||||
DBUG_PRINT("info", ("privilege 0x%lx", grant->privilege));
|
DBUG_PRINT("info", ("privilege 0x%lx", grant->privilege));
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user