Details
-
Bug
-
Status: Closed (View Workflow)
-
Critical
-
Resolution: Fixed
-
N/A
-
Not for Release Notes
-
Q3/2026 Server Maintenance
Description
Perhaps an as yet unfixed MDEV-40028 codepath?
CREATE TABLE t1 (c1 INT,c2 INT,c3 INT); |
CREATE ROLE r1; |
CREATE ROLE r2; |
GRANT r2 TO r1; |
DENY DELETE ON t1 TO r1; |
DENY SELECT (c2) ON t1 TO r1; |
GRANT SELECT (c3) ON t1 TO r2; |
REVOKE DENY ALL PRIVILEGES ON t1 FROM r1; |
DROP ROLE IF EXISTS r2; |
Leads to:
|
MDEV-14443 CS 13.1.0 0c709a5fe3db1733493c3b84bef9e4bc62555c17 (Debug, Clang 22.1.8-20260622) Build 07/07/2026 |
mariadbd: /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_acl.cc:8339: int update_role_columns(GRANT_TABLE *, GRANT_TABLE **, GRANT_TABLE **): Assertion `rights.allow_bits() == merged->cols' failed.
|
|
MDEV-14443 CS 13.1.0 0c709a5fe3db1733493c3b84bef9e4bc62555c17 (Debug, Clang 22.1.8-20260622) Build 07/07/2026 |
Core was generated by `/test/MDEV-14443_MD070726-mariadb-13.1.0-linux-x86_64-dbg/bin/mariadbd --no-def'.
|
Program terminated with signal SIGABRT, Aborted.
|
#0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>)at ./nptl/pthread_kill.c:44
|
 |
[Current thread is 1 (LWP 2963)]
|
(gdb) bt
|
#0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>)at ./nptl/pthread_kill.c:44
|
#1 __pthread_kill_internal (signo=6, threadid=<optimized out>)at ./nptl/pthread_kill.c:78
|
#2 __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6)at ./nptl/pthread_kill.c:89
|
#3 0x000074758344526e in __GI_raise (sig=sig@entry=6)at ../sysdeps/posix/raise.c:26
|
#4 0x00007475834288ff in __GI_abort () at ./stdlib/abort.c:79
|
#5 0x000074758342881b in __assert_fail_base (fmt=0x7475835d01e8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x5d40358474ea "rights.allow_bits() == merged->cols", file=file@entry=0x5d4035989655 "/test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_acl.cc", line=line@entry=8339, function=function@entry=0x5d403584750e "int update_role_columns(GRANT_TABLE *, GRANT_TABLE **, GRANT_TABLE **)") at ./assert/assert.c:94
|
#6 0x000074758343b507 in __assert_fail (assertion=0x5d40358474ea "rights.allow_bits() == merged->cols", file=0x5d4035989655 "/test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_acl.cc", line=8339, function=0x5d403584750e "int update_role_columns(GRANT_TABLE *, GRANT_TABLE **, GRANT_TABLE **)") at ./assert/assert.c:103
|
#7 0x00005d40364400fb in update_role_columns (merged=0x5d403a329f30, cur=0x6c7440041ce8, last=0x6c7440041ce8)at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_acl.cc:8339
|
#8 0x00005d403643fd49 in update_role_table_columns (merged=0x5d403a329f30, first=0x6c7440041ce0, last=0x6c7440041ce8, privs=@0x7475801b0958: {m_allow_bits = NO_ACL, m_deny_bits = NO_ACL, m_deny_subtree = SELECT_ACL}, cols=NO_ACL, role=0x5d403a26c420 "r1")at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_acl.cc:8402
|
#9 0x00005d403643f1fb in merge_role_table_and_column_privileges (grantee=0x5d403a26c350, db=0x0, tname=0x0, rhash=0x7475801b0a38)at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_acl.cc:8467
|
#10 0x00005d403643da34 in merge_role_privileges (grantee=0x5d403a26c350, context=0x7475801b0cc8)at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_acl.cc:8626
|
#11 0x00005d403643e2b9 in traverse_role_graph_impl (user=0x5d403a26c4a0, context=0x7475801b0cc8, offset=144, on_node=0x0, on_edge=0x5d403643d7e0 <merge_role_privileges(ACL_USER_BASE*, ACL_ROLE*, void*)>) at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_acl.cc:7993
|
#12 0x00005d403643d76f in traverse_role_graph_up (role=0x5d403a26c4a0, context=0x7475801b0cc8, on_node=0x0, on_edge=0x5d403643d7e0 <merge_role_privileges(ACL_USER_BASE*, ACL_ROLE*, void*)>) at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_acl.cc:8055
|
#13 0x00005d40364255fb in propagate_role_grants (role=0x5d403a26c4a0, what=PRIVS_TO_MERGE::ALL, db=0x0, name=0x0)at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_acl.cc:7872
|
#14 0x00005d4036444654 in handle_grant_struct (struct_no=ROLE_ACL, drop=true, user_from=0x6c744001a4c0, user_to=0x0)at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_acl.cc:12373
|
#15 0x00005d403642f5fd in handle_grant_data (thd=0x6c7440000d60, tables=@0x7475801b1028: {p_user_table = 0x7475801b1030, m_user_table_json = {<User_table> = {<Grant_table_base> = {_vptr$Grant_table_base = 0x5d40373d1d50 <vtable for User_table_json+16>, min_columns = 3, start_priv_columns = 0, end_priv_columns = 3, pk_parts = 2, m_table = 0x5d403a2e97e0, static _vtable$ = <optimized out>}, static _vtable$ = <optimized out>}, static JSON_SIZE = 1024, static _vtable$ = <optimized out>}, m_user_table_tabular = {<User_table> = {<Grant_table_base> = {_vptr$Grant_table_base = 0x5d40373d2070 <vtable for User_table_tabular+16>, min_columns = 13, start_priv_columns = 0, end_priv_columns = 0, pk_parts = 2, m_table = 0x0, static _vtable$ = <optimized out>}, static _vtable$ = <optimized out>}, static _vtable$ = <optimized out>}, m_db_table = {<Grant_table_base> = {_vptr$Grant_table_base = 0x5d40373d21e8 <vtable for Db_table+16>, min_columns = 9, start_priv_columns = 3, end_priv_columns = 24, pk_parts = 3, m_table = 0x5d403a29e9b0, static _vtable$ = <optimized out>}, static _vtable$ = <optimized out>}, m_tables_priv_table = {<Grant_table_base> = {_vptr$Grant_table_base = 0x5d40373d2220 <vtable for Tables_priv_table+16>, min_columns = 8, start_priv_columns = 0, end_priv_columns = 8, pk_parts = 4, m_table = 0x5d403a26dd10, static _vtable$ = <optimized out>}, static _vtable$ = <optimized out>}, m_columns_priv_table = {<Grant_table_base> = {_vptr$Grant_table_base = 0x5d40373d2258 <vtable for Columns_priv_table+16>, min_columns = 7, start_priv_columns = 0, end_priv_columns = 7, pk_parts = 5, m_table = 0x5d403a309cb0, static _vtable$ = <optimized out>}, static _vtable$ = <optimized out>}, m_host_table = {<Grant_table_base> = {_vptr$Grant_table_base = 0x5d40373d2290 <vtable for Host_table+16>, min_columns = 8, start_priv_columns = 0, end_priv_columns = 0, pk_parts = 2, m_table = 0x0, static _vtable$ = <optimized out>}, static _vtable$ = <optimized out>}, m_procs_priv_table = {<Grant_table_base> = {_vptr$Grant_table_base = 0x5d40373d22c8 <vtable for Procs_priv_table+16>, min_columns = 8, start_priv_columns = 0, end_priv_columns = 8, pk_parts = 5, m_table = 0x5d403a34f570, static _vtable$ = <optimized out>}, static _vtable$ = <optimized out>}, m_proxies_priv_table = {<Grant_table_base> = {_vptr$Grant_table_base = 0x5d40373d2300 <vtable for Proxies_priv_table+16>, min_columns = 7, start_priv_columns = 0, end_priv_columns = 7, pk_parts = 4, m_table = 0x5d403a2baa80, static _vtable$ = <optimized out>}, static _vtable$ = <optimized out>}, m_roles_mapping_table = {<Grant_table_base> = {_vptr$Grant_table_base = 0x5d40373d2338 <vtable for Roles_mapping_table+16>, min_columns = 4, start_priv_columns = 3, end_priv_columns = 4, pk_parts = 3, m_table = 0x5d403a2d4300, static _vtable$ = <optimized out>}, static _vtable$ = <optimized out>}}, drop=true, user_from=0x6c744001a4c0, user_to=0x0)at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_acl.cc:12866
|
#16 0x00005d403642fab7 in mysql_drop_user (thd=0x6c7440000d60, list=@0x6c7440006288: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x6c744001a4f0, last = 0x6c744001a4f0, elements = 1}, <No data fields>}, handle_as_role=true)at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_acl.cc:13198
|
#17 0x00005d40365d407e in mysql_execute_command (thd=0x6c7440000d60, is_called_from_prepared_stmt=false)at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_parse.cc:5274
|
#18 0x00005d40365c77f8 in mysql_parse (thd=0x6c7440000d60, rawbuf=0x6c744001a420 "DROP ROLE IF EXISTS r2", length=22, parser_state=0x7475801b29c0)at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_parse.cc:7958
|
#19 0x00005d40365c4f1e in dispatch_command (command=COM_QUERY, thd=0x6c7440000d60, packet=0x6c744000b651 "DROP ROLE IF EXISTS r2", packet_length=22, blocking=true)at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_parse.cc:1903
|
#20 0x00005d40365c827a in do_command (thd=0x6c7440000d60, blocking=true)at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_parse.cc:1437
|
#21 0x00005d40367cd4de in do_handle_one_connection (connect=0x5d403a2b5800, put_in_cache=true)at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_connect.cc:1503
|
#22 0x00005d40367cd2c1 in handle_one_connection (arg=0x5d403a3592f0)at /test/mdev14443_tmp/MDEV-14443_dbg/sql/sql_connect.cc:1415
|
#23 0x000074758349ca94 in start_thread (arg=<optimized out>)at ./nptl/pthread_create.c:447
|
#24 0x0000747583529c3c in clone3 ()at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
|
Testcase is CLI and MTR compatible.
Attachments
Issue Links
- is caused by
-
MDEV-14443 DENY clause for access control a.k.a. "negative grants"
-
- Closed
-
- relates to
-
MDEV-40028 Assertion `rights.allow_bits() == merged->cols' failed in int update_role_columns(GRANT_TABLE *, GRANT_TABLE **, GRANT_TABLE **)
-
- Closed
-