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

corruption in encrypted table may be overlooked

Details

    Description

      mariabackup may overlook file corruptions as shown in steps below:

      1. Start MySQL Server with Encryption enabled
      2. Create tables, insert data as below:

      use test;
      create table t(a varchar(128)) engine=innodb;
      create table t1(a varchar(128)) engine=innodb;
      insert into t select repeat('a',100);
      insert into t1 select repeat('a',100);
      

      3. Wait some time to make sure that all pages are flushed and query below shows 0 dirty pages:

      SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_dirty';

      4. Corrupt t.ibd with commands below (replace data_directory with actual data directory):

      cd data_directory
      printf '\xAA\xAA\xAA\xAA' | dd of=test/t.ibd seek=16384 count=4 bs=1 conv=notrunc
      

      5. Create backup , observe no errors :

      170223 09:53:10 [01] Copying ./test/t.ibd to /bkup/test/t.ibd
      170223 09:53:10 [01]        ...done
      ..
      170223 09:53:14 completed OK!
      

      6. Check table with innochecksum to confirm that it is really corrupted:

      > innochecksum dt/test/t.ibd 
      InnoDB offline file checksum utility.
      Table is uncompressed
      Page size is 16384
      Fail;  page 1 invalid (fails old style checksum)
      

      7. (optional) make sure innochecksum doesn't complain about the other table t1:

      innochecksum test/t1.ibd
      

      Without rest encryption the same steps result in backup error:

      170223 10:17:22 [01] Copying ./test/t.ibd to /bkup/test/t.ibd
      [01] xtrabackup: Database page corruption detected at page 1, retrying...
      ...
      [01] xtrabackup: Error: failed to read page after 10 retries. File ./test/t.ibd seems to be corrupted.
      [01] xtrabackup: Error: xtrabackup_copy_datafile() failed.
      [01] xtrabackup: Error: failed to copy datafile.
      xtrabackup based on MariaDB server 10.1.22-MariaDB Linux (x86_64) 
      ...
      xtrabackup: Error: cannot open ./xtrabackup_checkpoints
      xtrabackup: Error: failed to read metadata from './xtrabackup_checkpoints'
      

      Attachments

        Issue Links

          Activity

            anikitin Andrii Nikitin (Inactive) created issue -
            elenst Elena Stepanova made changes -
            Field Original Value New Value
            Fix Version/s 10.1 [ 16100 ]
            anikitin Andrii Nikitin (Inactive) made changes -
            Affects Version/s 10.2.9 [ 22611 ]
            Affects Version/s 10.1.28 [ 22610 ]
            anikitin Andrii Nikitin (Inactive) made changes -
            Fix Version/s 10.2 [ 14601 ]
            marko Marko Mäkelä made changes -
            Fix Version/s 10.3 [ 22126 ]
            Fix Version/s 10.4 [ 22408 ]
            Assignee Jan Lindström [ jplindst ] Thirunarayanan Balathandayuthapani [ thiru ]
            thiru Thirunarayanan Balathandayuthapani made changes -
            Status Open [ 1 ] In Progress [ 3 ]
            thiru Thirunarayanan Balathandayuthapani made changes -
            Comment [ {code}

            266 xb_fil_cur_result_t
            267 xb_fil_cur_read(
            268 /*============*/
            269 xb_fil_cur_t* cursor) /*!< in/out: source file cursor */
            .................
            .............
            ................
            342 /* check pages for corruption and re-read if necessary. i.e. in case of
            343 partially written pages */
            344 for (page = cursor->buf, i = 0; i < npages;
            345 page += page_size, i++) {
            346 ulint page_no = cursor->buf_page_no + i;
            347
            348 if (cursor->space_id == TRX_SYS_SPACE &&
            349 page_no >= FSP_EXTENT_SIZE &&
            350 page_no < FSP_EXTENT_SIZE * 3) {
            351 /* We ignore the doublewrite buffer pages */
            352 } else if (!fil_space_verify_crypt_checksum(
            353 page, cursor->page_size, space->id, page_no)
            354 && buf_page_is_corrupted(true, page,
            355 cursor->page_size,
            356 space)) {

            {code}

            Basically mariabackup checks whether it is un-encrypted and corrupted. It blindly reads the encrypted page and doesn't check whether
            the page is corrupted. ]
            GeoffMontee Geoff Montee (Inactive) made changes -
            thiru Thirunarayanan Balathandayuthapani made changes -
            Assignee Thirunarayanan Balathandayuthapani [ thiru ] Marko Mäkelä [ marko ]
            Status In Progress [ 3 ] In Review [ 10002 ]
            marko Marko Mäkelä made changes -
            issue.field.resolutiondate 2018-12-14 14:25:31.0 2018-12-14 14:25:31.121
            marko Marko Mäkelä made changes -
            Fix Version/s 10.4.1 [ 23228 ]
            Fix Version/s 10.1.38 [ 23209 ]
            Fix Version/s 10.2.20 [ 23212 ]
            Fix Version/s 10.3.12 [ 23214 ]
            Fix Version/s 10.2 [ 14601 ]
            Fix Version/s 10.1 [ 16100 ]
            Fix Version/s 10.3 [ 22126 ]
            Fix Version/s 10.4 [ 22408 ]
            Resolution Fixed [ 1 ]
            Status In Review [ 10002 ] Closed [ 6 ]
            marko Marko Mäkelä made changes -
            marko Marko Mäkelä made changes -
            marko Marko Mäkelä made changes -
            marko Marko Mäkelä made changes -
            marko Marko Mäkelä made changes -
            marko Marko Mäkelä made changes -
            GeoffMontee Geoff Montee (Inactive) made changes -
            marko Marko Mäkelä made changes -
            marko Marko Mäkelä made changes -
            serg Sergei Golubchik made changes -
            Workflow MariaDB v3 [ 79727 ] MariaDB v4 [ 151740 ]
            marko Marko Mäkelä made changes -

            People

              marko Marko Mäkelä
              anikitin Andrii Nikitin (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

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