From 20241132630660c94180f74a00065044dd2ae45c Mon Sep 17 00:00:00 2001
From: Sergei Golubchik <serg@mariadb.org>
Date: Fri, 13 Feb 2026 15:22:57 +0100
Subject: [PATCH] MDEV-38811 crash in information_schema.table_constraints when
 --skip-grant-tables

acl_get_all3() wasn't expecting --skip-grant-tables
---
 mysql-test/main/skip_grants.result | 40 +++++++++++++++++++++++++++++-
 mysql-test/main/skip_grants.test   |  8 +++++-
 sql/sql_acl.cc                     |  3 +++
 3 files changed, 49 insertions(+), 2 deletions(-)

Index: b/mysql-test/main/skip_grants.result
===================================================================
--- a/mysql-test/main/skip_grants.result
+++ b/mysql-test/main/skip_grants.result
@@ -152,4 +152,43 @@ EXPECT_0
 #
 select * from information_schema.users;
 USER	PASSWORD_ERRORS	PASSWORD_EXPIRATION_TIME
+# MDEV-38811 crash in information_schema.table_constraints when --skip-grant-tables
+#
+select * from information_schema.table_constraints;
+CONSTRAINT_CATALOG	CONSTRAINT_SCHEMA	CONSTRAINT_NAME	TABLE_SCHEMA	TABLE_NAME	CONSTRAINT_TYPE
+def	mysql	Host	mysql	roles_mapping	UNIQUE
+def	mysql	Options	mysql	servers	CHECK
+def	mysql	PRIMARY	mysql	column_stats	PRIMARY KEY
+def	mysql	PRIMARY	mysql	columns_priv	PRIMARY KEY
+def	mysql	PRIMARY	mysql	db	PRIMARY KEY
+def	mysql	PRIMARY	mysql	event	PRIMARY KEY
+def	mysql	PRIMARY	mysql	func	PRIMARY KEY
+def	mysql	PRIMARY	mysql	global_priv	PRIMARY KEY
+def	mysql	PRIMARY	mysql	gtid_slave_pos	PRIMARY KEY
+def	mysql	PRIMARY	mysql	help_category	PRIMARY KEY
+def	mysql	PRIMARY	mysql	help_keyword	PRIMARY KEY
+def	mysql	PRIMARY	mysql	help_relation	PRIMARY KEY
+def	mysql	PRIMARY	mysql	help_topic	PRIMARY KEY
+def	mysql	PRIMARY	mysql	index_stats	PRIMARY KEY
+def	mysql	PRIMARY	mysql	plugin	PRIMARY KEY
+def	mysql	PRIMARY	mysql	proc	PRIMARY KEY
+def	mysql	PRIMARY	mysql	procs_priv	PRIMARY KEY
+def	mysql	PRIMARY	mysql	proxies_priv	PRIMARY KEY
+def	mysql	PRIMARY	mysql	servers	PRIMARY KEY
+def	mysql	PRIMARY	mysql	table_stats	PRIMARY KEY
+def	mysql	PRIMARY	mysql	tables_priv	PRIMARY KEY
+def	mysql	PRIMARY	mysql	time_zone	PRIMARY KEY
+def	mysql	PRIMARY	mysql	time_zone_leap_second	PRIMARY KEY
+def	mysql	PRIMARY	mysql	time_zone_name	PRIMARY KEY
+def	mysql	PRIMARY	mysql	time_zone_transition	PRIMARY KEY
+def	mysql	PRIMARY	mysql	time_zone_transition_type	PRIMARY KEY
+def	mysql	Priv	mysql	global_priv	CHECK
+def	mysql	name	mysql	help_category	UNIQUE
+def	mysql	name	mysql	help_keyword	UNIQUE
+def	mysql	name	mysql	help_topic	UNIQUE
+def	sys	PRIMARY	sys	sys_config	PRIMARY KEY
+Warnings:
+Warning	1286	Unknown storage engine 'InnoDB'
+Warning	1286	Unknown storage engine 'InnoDB'
+Warning	1286	Unknown storage engine 'InnoDB'
 # End of 11.8 tests
Index: b/mysql-test/main/skip_grants.test
===================================================================
--- a/mysql-test/main/skip_grants.test
+++ b/mysql-test/main/skip_grants.test
@@ -191,4 +191,9 @@ SELECT @@skip_grant_tables AS EXPECT_0;
 --echo #
 select * from information_schema.users;
 
+--echo # MDEV-38811 crash in information_schema.table_constraints when --skip-grant-tables
+--echo #
+--sorted_result
+select * from information_schema.table_constraints;
+
 --echo # End of 11.8 tests
Index: b/sql/sql_acl.cc
===================================================================
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -3927,6 +3927,9 @@ exit:
 privilege_t acl_get_all3(Security_context *sctx, const char *db,
                          bool db_is_patern)
 {
+  if (!initialized)
+    return DB_ACLS;
+
   privilege_t access= acl_get(sctx->host, sctx->ip,
                               sctx->priv_user, db, db_is_patern);
   if (sctx->priv_role[0])
