Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-40639

Open SYS_REFCURSOR crash, if many cursors inside a function

    XMLWordPrintable

Details

    • Can result in hang or crash
    • Q3/2026 Server Development

    Description

      DELIMITER //
       
      -- Function that forces cursor array reallocation (17 > default 16 slots)
      CREATE OR REPLACE FUNCTION trigger_realloc() RETURNS INT
      BEGIN
        DECLARE c1  SYS_REFCURSOR;
        DECLARE c2  SYS_REFCURSOR;
        DECLARE c3  SYS_REFCURSOR;
        DECLARE c4  SYS_REFCURSOR;
        DECLARE c5  SYS_REFCURSOR;
        DECLARE c6  SYS_REFCURSOR;
        DECLARE c7  SYS_REFCURSOR;
        DECLARE c8  SYS_REFCURSOR;
        DECLARE c9  SYS_REFCURSOR;
        DECLARE c10 SYS_REFCURSOR;
        DECLARE c11 SYS_REFCURSOR;
        DECLARE c12 SYS_REFCURSOR;
        DECLARE c13 SYS_REFCURSOR;
        DECLARE c14 SYS_REFCURSOR;
        DECLARE c15 SYS_REFCURSOR;
        DECLARE c16 SYS_REFCURSOR;
        DECLARE c17 SYS_REFCURSOR;
        OPEN c1  FOR SELECT 1;
        OPEN c2  FOR SELECT 1;
        OPEN c3  FOR SELECT 1;
        OPEN c4  FOR SELECT 1;
        OPEN c5  FOR SELECT 1;
        OPEN c6  FOR SELECT 1;
        OPEN c7  FOR SELECT 1;
        OPEN c8  FOR SELECT 1;
        OPEN c9  FOR SELECT 1;
        OPEN c10 FOR SELECT 1;
        OPEN c11 FOR SELECT 1;
        OPEN c12 FOR SELECT 1;
        OPEN c13 FOR SELECT 1;
        OPEN c14 FOR SELECT 1;
        OPEN c15 FOR SELECT 1;
        OPEN c16 FOR SELECT 1;
        OPEN c17 FOR SELECT 1;
        RETURN 1;
      END//
       
      CREATE OR REPLACE PROCEDURE trigger_uaf()
      BEGIN
        DECLARE c SYS_REFCURSOR;
        OPEN c FOR SELECT trigger_realloc();
      END//
       
      DELIMITER ;
       
      SET SESSION max_open_cursors = 100;
      CALL trigger_uaf();
       
      -- Server crashes with heap-use-after-free
      

      Reported by Akhil Koul

      Attachments

        Issue Links

          Activity

            People

              bar Alexander Barkov
              bar Alexander Barkov
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - 5h 2m
                  5h 2m
                  Remaining:
                  Remaining Estimate - 0d
                  0d
                  Logged:
                  Time Spent - 5h Time Not Required
                  5h

                  Git Integration

                    Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.