1 /* 2 * Bitmaps for the QCOW version 2 format 3 * 4 * Copyright (c) 2014-2017 Vladimir Sementsov-Ogievskiy 5 * 6 * This file is derived from qcow2-snapshot.c, original copyright: 7 * Copyright (c) 2004-2006 Fabrice Bellard 8 * 9 * Permission is hereby granted, free of charge, to any person obtaining a copy 10 * of this software and associated documentation files (the "Software"), to deal 11 * in the Software without restriction, including without limitation the rights 12 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 * copies of the Software, and to permit persons to whom the Software is 14 * furnished to do so, subject to the following conditions: 15 * 16 * The above copyright notice and this permission notice shall be included in 17 * all copies or substantial portions of the Software. 18 * 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 * THE SOFTWARE. 26 */ 27 28 #include "qemu/osdep.h" 29 #include "qapi/error.h" 30 #include "qemu/cutils.h" 31 32 #include "qcow2.h" 33 34 /* NOTICE: BME here means Bitmaps Extension and used as a namespace for 35 * _internal_ constants. Please do not use this _internal_ abbreviation for 36 * other needs and/or outside of this file. */ 37 38 /* Bitmap directory entry constraints */ 39 #define BME_MAX_TABLE_SIZE 0x8000000 40 #define BME_MAX_PHYS_SIZE 0x20000000 /* restrict BdrvDirtyBitmap size in RAM */ 41 #define BME_MAX_GRANULARITY_BITS 31 42 #define BME_MIN_GRANULARITY_BITS 9 43 #define BME_MAX_NAME_SIZE 1023 44 45 /* Size of bitmap table entries */ 46 #define BME_TABLE_ENTRY_SIZE (sizeof(uint64_t)) 47 48 QEMU_BUILD_BUG_ON(BME_MAX_NAME_SIZE != BDRV_BITMAP_MAX_NAME_SIZE); 49 50 #if BME_MAX_TABLE_SIZE * 8ULL > INT_MAX 51 #error In the code bitmap table physical size assumed to fit into int 52 #endif 53 54 /* Bitmap directory entry flags */ 55 #define BME_RESERVED_FLAGS 0xfffffffcU 56 #define BME_FLAG_IN_USE (1U << 0) 57 #define BME_FLAG_AUTO (1U << 1) 58 59 /* bits [1, 8] U [56, 63] are reserved */ 60 #define BME_TABLE_ENTRY_RESERVED_MASK 0xff000000000001feULL 61 #define BME_TABLE_ENTRY_OFFSET_MASK 0x00fffffffffffe00ULL 62 #define BME_TABLE_ENTRY_FLAG_ALL_ONES (1ULL << 0) 63 64 typedef struct QEMU_PACKED Qcow2BitmapDirEntry { 65 /* header is 8 byte aligned */ 66 uint64_t bitmap_table_offset; 67 68 uint32_t bitmap_table_size; 69 uint32_t flags; 70 71 uint8_t type; 72 uint8_t granularity_bits; 73 uint16_t name_size; 74 uint32_t extra_data_size; 75 /* extra data follows */ 76 /* name follows */ 77 } Qcow2BitmapDirEntry; 78 79 typedef struct Qcow2BitmapTable { 80 uint64_t offset; 81 uint32_t size; /* number of 64bit entries */ 82 QSIMPLEQ_ENTRY(Qcow2BitmapTable) entry; 83 } Qcow2BitmapTable; 84 85 typedef struct Qcow2Bitmap { 86 Qcow2BitmapTable table; 87 uint32_t flags; 88 uint8_t granularity_bits; 89 char *name; 90 91 BdrvDirtyBitmap *dirty_bitmap; 92 93 QSIMPLEQ_ENTRY(Qcow2Bitmap) entry; 94 } Qcow2Bitmap; 95 typedef QSIMPLEQ_HEAD(Qcow2BitmapList, Qcow2Bitmap) Qcow2BitmapList; 96 97 typedef enum BitmapType { 98 BT_DIRTY_TRACKING_BITMAP = 1 99 } BitmapType; 100 101 static inline bool can_write(BlockDriverState *bs) 102 { 103 return !bdrv_is_read_only(bs) && !(bdrv_get_flags(bs) & BDRV_O_INACTIVE); 104 } 105 106 static int update_header_sync(BlockDriverState *bs) 107 { 108 int ret; 109 110 ret = qcow2_update_header(bs); 111 if (ret < 0) { 112 return ret; 113 } 114 115 return bdrv_flush(bs->file->bs); 116 } 117 118 static inline void bitmap_table_to_be(uint64_t *bitmap_table, size_t size) 119 { 120 size_t i; 121 122 for (i = 0; i < size; ++i) { 123 bitmap_table[i] = cpu_to_be64(bitmap_table[i]); 124 } 125 } 126 127 static int check_table_entry(uint64_t entry, int cluster_size) 128 { 129 uint64_t offset; 130 131 if (entry & BME_TABLE_ENTRY_RESERVED_MASK) { 132 return -EINVAL; 133 } 134 135 offset = entry & BME_TABLE_ENTRY_OFFSET_MASK; 136 if (offset != 0) { 137 /* if offset specified, bit 0 is reserved */ 138 if (entry & BME_TABLE_ENTRY_FLAG_ALL_ONES) { 139 return -EINVAL; 140 } 141 142 if (offset % cluster_size != 0) { 143 return -EINVAL; 144 } 145 } 146 147 return 0; 148 } 149 150 static int64_t get_bitmap_bytes_needed(int64_t len, uint32_t granularity) 151 { 152 int64_t num_bits = DIV_ROUND_UP(len, granularity); 153 154 return DIV_ROUND_UP(num_bits, 8); 155 } 156 157 static int check_constraints_on_bitmap(BlockDriverState *bs, 158 const char *name, 159 uint32_t granularity, 160 Error **errp) 161 { 162 BDRVQcow2State *s = bs->opaque; 163 int granularity_bits = ctz32(granularity); 164 int64_t len = bdrv_getlength(bs); 165 int64_t bitmap_bytes; 166 167 assert(granularity > 0); 168 assert((granularity & (granularity - 1)) == 0); 169 170 if (len < 0) { 171 error_setg_errno(errp, -len, "Failed to get size of '%s'", 172 bdrv_get_device_or_node_name(bs)); 173 return len; 174 } 175 176 if (granularity_bits > BME_MAX_GRANULARITY_BITS) { 177 error_setg(errp, "Granularity exceeds maximum (%llu bytes)", 178 1ULL << BME_MAX_GRANULARITY_BITS); 179 return -EINVAL; 180 } 181 if (granularity_bits < BME_MIN_GRANULARITY_BITS) { 182 error_setg(errp, "Granularity is under minimum (%llu bytes)", 183 1ULL << BME_MIN_GRANULARITY_BITS); 184 return -EINVAL; 185 } 186 187 bitmap_bytes = get_bitmap_bytes_needed(len, granularity); 188 if ((bitmap_bytes > (uint64_t)BME_MAX_PHYS_SIZE) || 189 (bitmap_bytes > (uint64_t)BME_MAX_TABLE_SIZE * s->cluster_size)) 190 { 191 error_setg(errp, "Too much space will be occupied by the bitmap. " 192 "Use larger granularity"); 193 return -EINVAL; 194 } 195 196 if (strlen(name) > BME_MAX_NAME_SIZE) { 197 error_setg(errp, "Name length exceeds maximum (%u characters)", 198 BME_MAX_NAME_SIZE); 199 return -EINVAL; 200 } 201 202 return 0; 203 } 204 205 static void clear_bitmap_table(BlockDriverState *bs, uint64_t *bitmap_table, 206 uint32_t bitmap_table_size) 207 { 208 BDRVQcow2State *s = bs->opaque; 209 int i; 210 211 for (i = 0; i < bitmap_table_size; ++i) { 212 uint64_t addr = bitmap_table[i] & BME_TABLE_ENTRY_OFFSET_MASK; 213 if (!addr) { 214 continue; 215 } 216 217 qcow2_free_clusters(bs, addr, s->cluster_size, QCOW2_DISCARD_ALWAYS); 218 bitmap_table[i] = 0; 219 } 220 } 221 222 static int bitmap_table_load(BlockDriverState *bs, Qcow2BitmapTable *tb, 223 uint64_t **bitmap_table) 224 { 225 int ret; 226 BDRVQcow2State *s = bs->opaque; 227 uint32_t i; 228 uint64_t *table; 229 230 assert(tb->size != 0); 231 table = g_try_new(uint64_t, tb->size); 232 if (table == NULL) { 233 return -ENOMEM; 234 } 235 236 assert(tb->size <= BME_MAX_TABLE_SIZE); 237 ret = bdrv_pread(bs->file, tb->offset, 238 table, tb->size * BME_TABLE_ENTRY_SIZE); 239 if (ret < 0) { 240 goto fail; 241 } 242 243 for (i = 0; i < tb->size; ++i) { 244 table[i] = be64_to_cpu(table[i]); 245 ret = check_table_entry(table[i], s->cluster_size); 246 if (ret < 0) { 247 goto fail; 248 } 249 } 250 251 *bitmap_table = table; 252 return 0; 253 254 fail: 255 g_free(table); 256 257 return ret; 258 } 259 260 static int free_bitmap_clusters(BlockDriverState *bs, Qcow2BitmapTable *tb) 261 { 262 int ret; 263 uint64_t *bitmap_table; 264 265 ret = bitmap_table_load(bs, tb, &bitmap_table); 266 if (ret < 0) { 267 return ret; 268 } 269 270 clear_bitmap_table(bs, bitmap_table, tb->size); 271 qcow2_free_clusters(bs, tb->offset, tb->size * BME_TABLE_ENTRY_SIZE, 272 QCOW2_DISCARD_OTHER); 273 g_free(bitmap_table); 274 275 tb->offset = 0; 276 tb->size = 0; 277 278 return 0; 279 } 280 281 /* Return the disk size covered by a single qcow2 cluster of bitmap data. */ 282 static uint64_t bytes_covered_by_bitmap_cluster(const BDRVQcow2State *s, 283 const BdrvDirtyBitmap *bitmap) 284 { 285 uint64_t granularity = bdrv_dirty_bitmap_granularity(bitmap); 286 uint64_t limit = granularity * (s->cluster_size << 3); 287 288 assert(QEMU_IS_ALIGNED(limit, 289 bdrv_dirty_bitmap_serialization_align(bitmap))); 290 return limit; 291 } 292 293 /* load_bitmap_data 294 * @bitmap_table entries must satisfy specification constraints. 295 * @bitmap must be cleared */ 296 static int load_bitmap_data(BlockDriverState *bs, 297 const uint64_t *bitmap_table, 298 uint32_t bitmap_table_size, 299 BdrvDirtyBitmap *bitmap) 300 { 301 int ret = 0; 302 BDRVQcow2State *s = bs->opaque; 303 uint64_t offset, limit; 304 uint64_t bm_size = bdrv_dirty_bitmap_size(bitmap); 305 uint8_t *buf = NULL; 306 uint64_t i, tab_size = 307 size_to_clusters(s, 308 bdrv_dirty_bitmap_serialization_size(bitmap, 0, bm_size)); 309 310 if (tab_size != bitmap_table_size || tab_size > BME_MAX_TABLE_SIZE) { 311 return -EINVAL; 312 } 313 314 buf = g_malloc(s->cluster_size); 315 limit = bytes_covered_by_bitmap_cluster(s, bitmap); 316 for (i = 0, offset = 0; i < tab_size; ++i, offset += limit) { 317 uint64_t count = MIN(bm_size - offset, limit); 318 uint64_t entry = bitmap_table[i]; 319 uint64_t data_offset = entry & BME_TABLE_ENTRY_OFFSET_MASK; 320 321 assert(check_table_entry(entry, s->cluster_size) == 0); 322 323 if (data_offset == 0) { 324 if (entry & BME_TABLE_ENTRY_FLAG_ALL_ONES) { 325 bdrv_dirty_bitmap_deserialize_ones(bitmap, offset, count, 326 false); 327 } else { 328 /* No need to deserialize zeros because the dirty bitmap is 329 * already cleared */ 330 } 331 } else { 332 ret = bdrv_pread(bs->file, data_offset, buf, s->cluster_size); 333 if (ret < 0) { 334 goto finish; 335 } 336 bdrv_dirty_bitmap_deserialize_part(bitmap, buf, offset, count, 337 false); 338 } 339 } 340 ret = 0; 341 342 bdrv_dirty_bitmap_deserialize_finish(bitmap); 343 344 finish: 345 g_free(buf); 346 347 return ret; 348 } 349 350 static BdrvDirtyBitmap *load_bitmap(BlockDriverState *bs, 351 Qcow2Bitmap *bm, Error **errp) 352 { 353 int ret; 354 uint64_t *bitmap_table = NULL; 355 uint32_t granularity; 356 BdrvDirtyBitmap *bitmap = NULL; 357 358 granularity = 1U << bm->granularity_bits; 359 bitmap = bdrv_create_dirty_bitmap(bs, granularity, bm->name, errp); 360 if (bitmap == NULL) { 361 goto fail; 362 } 363 364 if (bm->flags & BME_FLAG_IN_USE) { 365 /* Data is unusable, skip loading it */ 366 return bitmap; 367 } 368 369 ret = bitmap_table_load(bs, &bm->table, &bitmap_table); 370 if (ret < 0) { 371 error_setg_errno(errp, -ret, 372 "Could not read bitmap_table table from image for " 373 "bitmap '%s'", bm->name); 374 goto fail; 375 } 376 377 ret = load_bitmap_data(bs, bitmap_table, bm->table.size, bitmap); 378 if (ret < 0) { 379 error_setg_errno(errp, -ret, "Could not read bitmap '%s' from image", 380 bm->name); 381 goto fail; 382 } 383 384 g_free(bitmap_table); 385 return bitmap; 386 387 fail: 388 g_free(bitmap_table); 389 if (bitmap != NULL) { 390 bdrv_release_dirty_bitmap(bitmap); 391 } 392 393 return NULL; 394 } 395 396 /* 397 * Bitmap List 398 */ 399 400 /* 401 * Bitmap List private functions 402 * Only Bitmap List knows about bitmap directory structure in Qcow2. 403 */ 404 405 static inline void bitmap_dir_entry_to_cpu(Qcow2BitmapDirEntry *entry) 406 { 407 entry->bitmap_table_offset = be64_to_cpu(entry->bitmap_table_offset); 408 entry->bitmap_table_size = be32_to_cpu(entry->bitmap_table_size); 409 entry->flags = be32_to_cpu(entry->flags); 410 entry->name_size = be16_to_cpu(entry->name_size); 411 entry->extra_data_size = be32_to_cpu(entry->extra_data_size); 412 } 413 414 static inline void bitmap_dir_entry_to_be(Qcow2BitmapDirEntry *entry) 415 { 416 entry->bitmap_table_offset = cpu_to_be64(entry->bitmap_table_offset); 417 entry->bitmap_table_size = cpu_to_be32(entry->bitmap_table_size); 418 entry->flags = cpu_to_be32(entry->flags); 419 entry->name_size = cpu_to_be16(entry->name_size); 420 entry->extra_data_size = cpu_to_be32(entry->extra_data_size); 421 } 422 423 static inline int calc_dir_entry_size(size_t name_size, size_t extra_data_size) 424 { 425 int size = sizeof(Qcow2BitmapDirEntry) + name_size + extra_data_size; 426 return ROUND_UP(size, 8); 427 } 428 429 static inline int dir_entry_size(Qcow2BitmapDirEntry *entry) 430 { 431 return calc_dir_entry_size(entry->name_size, entry->extra_data_size); 432 } 433 434 static inline const char *dir_entry_name_field(Qcow2BitmapDirEntry *entry) 435 { 436 return (const char *)(entry + 1) + entry->extra_data_size; 437 } 438 439 static inline char *dir_entry_copy_name(Qcow2BitmapDirEntry *entry) 440 { 441 const char *name_field = dir_entry_name_field(entry); 442 return g_strndup(name_field, entry->name_size); 443 } 444 445 static inline Qcow2BitmapDirEntry *next_dir_entry(Qcow2BitmapDirEntry *entry) 446 { 447 return (Qcow2BitmapDirEntry *)((uint8_t *)entry + dir_entry_size(entry)); 448 } 449 450 static int check_dir_entry(BlockDriverState *bs, Qcow2BitmapDirEntry *entry) 451 { 452 BDRVQcow2State *s = bs->opaque; 453 uint64_t phys_bitmap_bytes; 454 int64_t len; 455 456 bool fail = (entry->bitmap_table_size == 0) || 457 (entry->bitmap_table_offset == 0) || 458 (entry->bitmap_table_offset % s->cluster_size) || 459 (entry->bitmap_table_size > BME_MAX_TABLE_SIZE) || 460 (entry->granularity_bits > BME_MAX_GRANULARITY_BITS) || 461 (entry->granularity_bits < BME_MIN_GRANULARITY_BITS) || 462 (entry->flags & BME_RESERVED_FLAGS) || 463 (entry->name_size > BME_MAX_NAME_SIZE) || 464 (entry->type != BT_DIRTY_TRACKING_BITMAP); 465 466 if (fail) { 467 return -EINVAL; 468 } 469 470 phys_bitmap_bytes = (uint64_t)entry->bitmap_table_size * s->cluster_size; 471 len = bdrv_getlength(bs); 472 473 if (len < 0) { 474 return len; 475 } 476 477 if (phys_bitmap_bytes > BME_MAX_PHYS_SIZE) { 478 return -EINVAL; 479 } 480 481 if (!(entry->flags & BME_FLAG_IN_USE) && 482 (len > ((phys_bitmap_bytes * 8) << entry->granularity_bits))) 483 { 484 /* 485 * We've loaded a valid bitmap (IN_USE not set) or we are going to 486 * store a valid bitmap, but the allocated bitmap table size is not 487 * enough to store this bitmap. 488 * 489 * Note, that it's OK to have an invalid bitmap with invalid size due 490 * to a bitmap that was not correctly saved after image resize. 491 */ 492 return -EINVAL; 493 } 494 495 return 0; 496 } 497 498 static inline void bitmap_directory_to_be(uint8_t *dir, size_t size) 499 { 500 uint8_t *end = dir + size; 501 while (dir < end) { 502 Qcow2BitmapDirEntry *e = (Qcow2BitmapDirEntry *)dir; 503 dir += dir_entry_size(e); 504 505 bitmap_dir_entry_to_be(e); 506 } 507 } 508 509 /* 510 * Bitmap List public functions 511 */ 512 513 static void bitmap_free(Qcow2Bitmap *bm) 514 { 515 if (bm == NULL) { 516 return; 517 } 518 519 g_free(bm->name); 520 g_free(bm); 521 } 522 523 static void bitmap_list_free(Qcow2BitmapList *bm_list) 524 { 525 Qcow2Bitmap *bm; 526 527 if (bm_list == NULL) { 528 return; 529 } 530 531 while ((bm = QSIMPLEQ_FIRST(bm_list)) != NULL) { 532 QSIMPLEQ_REMOVE_HEAD(bm_list, entry); 533 bitmap_free(bm); 534 } 535 536 g_free(bm_list); 537 } 538 539 static Qcow2BitmapList *bitmap_list_new(void) 540 { 541 Qcow2BitmapList *bm_list = g_new(Qcow2BitmapList, 1); 542 QSIMPLEQ_INIT(bm_list); 543 544 return bm_list; 545 } 546 547 static uint32_t bitmap_list_count(Qcow2BitmapList *bm_list) 548 { 549 Qcow2Bitmap *bm; 550 uint32_t nb_bitmaps = 0; 551 552 QSIMPLEQ_FOREACH(bm, bm_list, entry) { 553 nb_bitmaps++; 554 } 555 556 return nb_bitmaps; 557 } 558 559 /* bitmap_list_load 560 * Get bitmap list from qcow2 image. Actually reads bitmap directory, 561 * checks it and convert to bitmap list. 562 */ 563 static Qcow2BitmapList *bitmap_list_load(BlockDriverState *bs, uint64_t offset, 564 uint64_t size, Error **errp) 565 { 566 int ret; 567 BDRVQcow2State *s = bs->opaque; 568 uint8_t *dir, *dir_end; 569 Qcow2BitmapDirEntry *e; 570 uint32_t nb_dir_entries = 0; 571 Qcow2BitmapList *bm_list = NULL; 572 573 if (size == 0) { 574 error_setg(errp, "Requested bitmap directory size is zero"); 575 return NULL; 576 } 577 578 if (size > QCOW2_MAX_BITMAP_DIRECTORY_SIZE) { 579 error_setg(errp, "Requested bitmap directory size is too big"); 580 return NULL; 581 } 582 583 dir = g_try_malloc(size); 584 if (dir == NULL) { 585 error_setg(errp, "Failed to allocate space for bitmap directory"); 586 return NULL; 587 } 588 dir_end = dir + size; 589 590 ret = bdrv_pread(bs->file, offset, dir, size); 591 if (ret < 0) { 592 error_setg_errno(errp, -ret, "Failed to read bitmap directory"); 593 goto fail; 594 } 595 596 bm_list = bitmap_list_new(); 597 for (e = (Qcow2BitmapDirEntry *)dir; 598 e < (Qcow2BitmapDirEntry *)dir_end; 599 e = next_dir_entry(e)) 600 { 601 Qcow2Bitmap *bm; 602 603 if ((uint8_t *)(e + 1) > dir_end) { 604 goto broken_dir; 605 } 606 607 if (++nb_dir_entries > s->nb_bitmaps) { 608 error_setg(errp, "More bitmaps found than specified in header" 609 " extension"); 610 goto fail; 611 } 612 bitmap_dir_entry_to_cpu(e); 613 614 if ((uint8_t *)next_dir_entry(e) > dir_end) { 615 goto broken_dir; 616 } 617 618 if (e->extra_data_size != 0) { 619 error_setg(errp, "Bitmap extra data is not supported"); 620 goto fail; 621 } 622 623 ret = check_dir_entry(bs, e); 624 if (ret < 0) { 625 error_setg(errp, "Bitmap '%.*s' doesn't satisfy the constraints", 626 e->name_size, dir_entry_name_field(e)); 627 goto fail; 628 } 629 630 bm = g_new0(Qcow2Bitmap, 1); 631 bm->table.offset = e->bitmap_table_offset; 632 bm->table.size = e->bitmap_table_size; 633 bm->flags = e->flags; 634 bm->granularity_bits = e->granularity_bits; 635 bm->name = dir_entry_copy_name(e); 636 QSIMPLEQ_INSERT_TAIL(bm_list, bm, entry); 637 } 638 639 if (nb_dir_entries != s->nb_bitmaps) { 640 error_setg(errp, "Less bitmaps found than specified in header" 641 " extension"); 642 goto fail; 643 } 644 645 if ((uint8_t *)e != dir_end) { 646 goto broken_dir; 647 } 648 649 g_free(dir); 650 return bm_list; 651 652 broken_dir: 653 error_setg(errp, "Broken bitmap directory"); 654 655 fail: 656 g_free(dir); 657 bitmap_list_free(bm_list); 658 659 return NULL; 660 } 661 662 int qcow2_check_bitmaps_refcounts(BlockDriverState *bs, BdrvCheckResult *res, 663 void **refcount_table, 664 int64_t *refcount_table_size) 665 { 666 int ret; 667 BDRVQcow2State *s = bs->opaque; 668 Qcow2BitmapList *bm_list; 669 Qcow2Bitmap *bm; 670 671 if (s->nb_bitmaps == 0) { 672 return 0; 673 } 674 675 ret = qcow2_inc_refcounts_imrt(bs, res, refcount_table, refcount_table_size, 676 s->bitmap_directory_offset, 677 s->bitmap_directory_size); 678 if (ret < 0) { 679 return ret; 680 } 681 682 bm_list = bitmap_list_load(bs, s->bitmap_directory_offset, 683 s->bitmap_directory_size, NULL); 684 if (bm_list == NULL) { 685 res->corruptions++; 686 return -EINVAL; 687 } 688 689 QSIMPLEQ_FOREACH(bm, bm_list, entry) { 690 uint64_t *bitmap_table = NULL; 691 int i; 692 693 ret = qcow2_inc_refcounts_imrt(bs, res, 694 refcount_table, refcount_table_size, 695 bm->table.offset, 696 bm->table.size * BME_TABLE_ENTRY_SIZE); 697 if (ret < 0) { 698 goto out; 699 } 700 701 ret = bitmap_table_load(bs, &bm->table, &bitmap_table); 702 if (ret < 0) { 703 res->corruptions++; 704 goto out; 705 } 706 707 for (i = 0; i < bm->table.size; ++i) { 708 uint64_t entry = bitmap_table[i]; 709 uint64_t offset = entry & BME_TABLE_ENTRY_OFFSET_MASK; 710 711 if (check_table_entry(entry, s->cluster_size) < 0) { 712 res->corruptions++; 713 continue; 714 } 715 716 if (offset == 0) { 717 continue; 718 } 719 720 ret = qcow2_inc_refcounts_imrt(bs, res, 721 refcount_table, refcount_table_size, 722 offset, s->cluster_size); 723 if (ret < 0) { 724 g_free(bitmap_table); 725 goto out; 726 } 727 } 728 729 g_free(bitmap_table); 730 } 731 732 out: 733 bitmap_list_free(bm_list); 734 735 return ret; 736 } 737 738 /* bitmap_list_store 739 * Store bitmap list to qcow2 image as a bitmap directory. 740 * Everything is checked. 741 */ 742 static int bitmap_list_store(BlockDriverState *bs, Qcow2BitmapList *bm_list, 743 uint64_t *offset, uint64_t *size, bool in_place) 744 { 745 int ret; 746 uint8_t *dir; 747 int64_t dir_offset = 0; 748 uint64_t dir_size = 0; 749 Qcow2Bitmap *bm; 750 Qcow2BitmapDirEntry *e; 751 752 QSIMPLEQ_FOREACH(bm, bm_list, entry) { 753 dir_size += calc_dir_entry_size(strlen(bm->name), 0); 754 } 755 756 if (dir_size == 0 || dir_size > QCOW2_MAX_BITMAP_DIRECTORY_SIZE) { 757 return -EINVAL; 758 } 759 760 if (in_place) { 761 if (*size != dir_size || *offset == 0) { 762 return -EINVAL; 763 } 764 765 dir_offset = *offset; 766 } 767 768 dir = g_try_malloc0(dir_size); 769 if (dir == NULL) { 770 return -ENOMEM; 771 } 772 773 e = (Qcow2BitmapDirEntry *)dir; 774 QSIMPLEQ_FOREACH(bm, bm_list, entry) { 775 e->bitmap_table_offset = bm->table.offset; 776 e->bitmap_table_size = bm->table.size; 777 e->flags = bm->flags; 778 e->type = BT_DIRTY_TRACKING_BITMAP; 779 e->granularity_bits = bm->granularity_bits; 780 e->name_size = strlen(bm->name); 781 e->extra_data_size = 0; 782 memcpy(e + 1, bm->name, e->name_size); 783 784 if (check_dir_entry(bs, e) < 0) { 785 ret = -EINVAL; 786 goto fail; 787 } 788 789 e = next_dir_entry(e); 790 } 791 792 bitmap_directory_to_be(dir, dir_size); 793 794 if (!in_place) { 795 dir_offset = qcow2_alloc_clusters(bs, dir_size); 796 if (dir_offset < 0) { 797 ret = dir_offset; 798 goto fail; 799 } 800 } 801 802 /* Actually, even in in-place case ignoring QCOW2_OL_BITMAP_DIRECTORY is not 803 * necessary, because we drop QCOW2_AUTOCLEAR_BITMAPS when updating bitmap 804 * directory in-place (actually, turn-off the extension), which is checked 805 * in qcow2_check_metadata_overlap() */ 806 ret = qcow2_pre_write_overlap_check( 807 bs, in_place ? QCOW2_OL_BITMAP_DIRECTORY : 0, dir_offset, dir_size, 808 false); 809 if (ret < 0) { 810 goto fail; 811 } 812 813 ret = bdrv_pwrite(bs->file, dir_offset, dir, dir_size); 814 if (ret < 0) { 815 goto fail; 816 } 817 818 g_free(dir); 819 820 if (!in_place) { 821 *size = dir_size; 822 *offset = dir_offset; 823 } 824 825 return 0; 826 827 fail: 828 g_free(dir); 829 830 if (!in_place && dir_offset > 0) { 831 qcow2_free_clusters(bs, dir_offset, dir_size, QCOW2_DISCARD_OTHER); 832 } 833 834 return ret; 835 } 836 837 /* 838 * Bitmap List end 839 */ 840 841 static int update_ext_header_and_dir_in_place(BlockDriverState *bs, 842 Qcow2BitmapList *bm_list) 843 { 844 BDRVQcow2State *s = bs->opaque; 845 int ret; 846 847 if (!(s->autoclear_features & QCOW2_AUTOCLEAR_BITMAPS) || 848 bm_list == NULL || QSIMPLEQ_EMPTY(bm_list) || 849 bitmap_list_count(bm_list) != s->nb_bitmaps) 850 { 851 return -EINVAL; 852 } 853 854 s->autoclear_features &= ~(uint64_t)QCOW2_AUTOCLEAR_BITMAPS; 855 ret = update_header_sync(bs); 856 if (ret < 0) { 857 /* Two variants are possible here: 858 * 1. Autoclear flag is dropped, all bitmaps will be lost. 859 * 2. Autoclear flag is not dropped, old state is left. 860 */ 861 return ret; 862 } 863 864 /* autoclear bit is not set, so we can safely update bitmap directory */ 865 866 ret = bitmap_list_store(bs, bm_list, &s->bitmap_directory_offset, 867 &s->bitmap_directory_size, true); 868 if (ret < 0) { 869 /* autoclear bit is cleared, so all leaked clusters would be removed on 870 * qemu-img check */ 871 return ret; 872 } 873 874 ret = update_header_sync(bs); 875 if (ret < 0) { 876 /* autoclear bit is cleared, so all leaked clusters would be removed on 877 * qemu-img check */ 878 return ret; 879 } 880 881 s->autoclear_features |= QCOW2_AUTOCLEAR_BITMAPS; 882 return update_header_sync(bs); 883 /* If final update_header_sync() fails, two variants are possible: 884 * 1. Autoclear flag is not set, all bitmaps will be lost. 885 * 2. Autoclear flag is set, header and directory are successfully updated. 886 */ 887 } 888 889 static int update_ext_header_and_dir(BlockDriverState *bs, 890 Qcow2BitmapList *bm_list) 891 { 892 BDRVQcow2State *s = bs->opaque; 893 int ret; 894 uint64_t new_offset = 0; 895 uint64_t new_size = 0; 896 uint32_t new_nb_bitmaps = 0; 897 uint64_t old_offset = s->bitmap_directory_offset; 898 uint64_t old_size = s->bitmap_directory_size; 899 uint32_t old_nb_bitmaps = s->nb_bitmaps; 900 uint64_t old_autocl = s->autoclear_features; 901 902 if (bm_list != NULL && !QSIMPLEQ_EMPTY(bm_list)) { 903 new_nb_bitmaps = bitmap_list_count(bm_list); 904 905 if (new_nb_bitmaps > QCOW2_MAX_BITMAPS) { 906 return -EINVAL; 907 } 908 909 ret = bitmap_list_store(bs, bm_list, &new_offset, &new_size, false); 910 if (ret < 0) { 911 return ret; 912 } 913 914 ret = qcow2_flush_caches(bs); 915 if (ret < 0) { 916 goto fail; 917 } 918 919 s->autoclear_features |= QCOW2_AUTOCLEAR_BITMAPS; 920 } else { 921 s->autoclear_features &= ~(uint64_t)QCOW2_AUTOCLEAR_BITMAPS; 922 } 923 924 s->bitmap_directory_offset = new_offset; 925 s->bitmap_directory_size = new_size; 926 s->nb_bitmaps = new_nb_bitmaps; 927 928 ret = update_header_sync(bs); 929 if (ret < 0) { 930 goto fail; 931 } 932 933 if (old_size > 0) { 934 qcow2_free_clusters(bs, old_offset, old_size, QCOW2_DISCARD_OTHER); 935 } 936 937 return 0; 938 939 fail: 940 if (new_offset > 0) { 941 qcow2_free_clusters(bs, new_offset, new_size, QCOW2_DISCARD_OTHER); 942 } 943 944 s->bitmap_directory_offset = old_offset; 945 s->bitmap_directory_size = old_size; 946 s->nb_bitmaps = old_nb_bitmaps; 947 s->autoclear_features = old_autocl; 948 949 return ret; 950 } 951 952 /* for g_slist_foreach for GSList of BdrvDirtyBitmap* elements */ 953 static void release_dirty_bitmap_helper(gpointer bitmap, 954 gpointer bs) 955 { 956 bdrv_release_dirty_bitmap(bitmap); 957 } 958 959 /* for g_slist_foreach for GSList of BdrvDirtyBitmap* elements */ 960 static void set_readonly_helper(gpointer bitmap, gpointer value) 961 { 962 bdrv_dirty_bitmap_set_readonly(bitmap, (bool)value); 963 } 964 965 /* qcow2_load_dirty_bitmaps() 966 * Return value is a hint for caller: true means that the Qcow2 header was 967 * updated. (false doesn't mean that the header should be updated by the 968 * caller, it just means that updating was not needed or the image cannot be 969 * written to). 970 * On failure the function returns false. 971 */ 972 bool qcow2_load_dirty_bitmaps(BlockDriverState *bs, Error **errp) 973 { 974 BDRVQcow2State *s = bs->opaque; 975 Qcow2BitmapList *bm_list; 976 Qcow2Bitmap *bm; 977 GSList *created_dirty_bitmaps = NULL; 978 bool header_updated = false; 979 bool needs_update = false; 980 981 if (s->nb_bitmaps == 0) { 982 /* No bitmaps - nothing to do */ 983 return false; 984 } 985 986 bm_list = bitmap_list_load(bs, s->bitmap_directory_offset, 987 s->bitmap_directory_size, errp); 988 if (bm_list == NULL) { 989 return false; 990 } 991 992 QSIMPLEQ_FOREACH(bm, bm_list, entry) { 993 BdrvDirtyBitmap *bitmap; 994 995 if ((bm->flags & BME_FLAG_IN_USE) && 996 bdrv_find_dirty_bitmap(bs, bm->name)) 997 { 998 /* 999 * We already have corresponding BdrvDirtyBitmap, and bitmap in the 1000 * image is marked IN_USE. Firstly, this state is valid, no reason 1001 * to consider existing BdrvDirtyBitmap to be bad. Secondly it's 1002 * absolutely possible, when we do migration with shared storage 1003 * with dirty-bitmaps capability enabled: if the bitmap was loaded 1004 * from this storage before migration start, the storage will 1005 * of-course contain IN_USE outdated version of the bitmap, and we 1006 * should not load it on migration target, as we already have this 1007 * bitmap, being migrated. 1008 */ 1009 continue; 1010 } 1011 1012 bitmap = load_bitmap(bs, bm, errp); 1013 if (bitmap == NULL) { 1014 goto fail; 1015 } 1016 1017 bdrv_dirty_bitmap_set_persistence(bitmap, true); 1018 if (bm->flags & BME_FLAG_IN_USE) { 1019 bdrv_dirty_bitmap_set_inconsistent(bitmap); 1020 } else { 1021 /* NB: updated flags only get written if can_write(bs) is true. */ 1022 bm->flags |= BME_FLAG_IN_USE; 1023 needs_update = true; 1024 } 1025 if (!(bm->flags & BME_FLAG_AUTO)) { 1026 bdrv_disable_dirty_bitmap(bitmap); 1027 } 1028 created_dirty_bitmaps = 1029 g_slist_append(created_dirty_bitmaps, bitmap); 1030 } 1031 1032 if (needs_update && can_write(bs)) { 1033 /* in_use flags must be updated */ 1034 int ret = update_ext_header_and_dir_in_place(bs, bm_list); 1035 if (ret < 0) { 1036 error_setg_errno(errp, -ret, "Can't update bitmap directory"); 1037 goto fail; 1038 } 1039 header_updated = true; 1040 } 1041 1042 if (!can_write(bs)) { 1043 g_slist_foreach(created_dirty_bitmaps, set_readonly_helper, 1044 (gpointer)true); 1045 } 1046 1047 g_slist_free(created_dirty_bitmaps); 1048 bitmap_list_free(bm_list); 1049 1050 return header_updated; 1051 1052 fail: 1053 g_slist_foreach(created_dirty_bitmaps, release_dirty_bitmap_helper, bs); 1054 g_slist_free(created_dirty_bitmaps); 1055 bitmap_list_free(bm_list); 1056 1057 return false; 1058 } 1059 1060 1061 static Qcow2BitmapInfoFlagsList *get_bitmap_info_flags(uint32_t flags) 1062 { 1063 Qcow2BitmapInfoFlagsList *list = NULL; 1064 Qcow2BitmapInfoFlagsList **tail = &list; 1065 int i; 1066 1067 static const struct { 1068 int bme; /* Bitmap directory entry flags */ 1069 int info; /* The flags to report to the user */ 1070 } map[] = { 1071 { BME_FLAG_IN_USE, QCOW2_BITMAP_INFO_FLAGS_IN_USE }, 1072 { BME_FLAG_AUTO, QCOW2_BITMAP_INFO_FLAGS_AUTO }, 1073 }; 1074 1075 int map_size = ARRAY_SIZE(map); 1076 1077 for (i = 0; i < map_size; ++i) { 1078 if (flags & map[i].bme) { 1079 QAPI_LIST_APPEND(tail, map[i].info); 1080 flags &= ~map[i].bme; 1081 } 1082 } 1083 /* Check if the BME_* mapping above is complete */ 1084 assert(!flags); 1085 1086 return list; 1087 } 1088 1089 /* 1090 * qcow2_get_bitmap_info_list() 1091 * Returns a list of QCOW2 bitmap details. 1092 * In case of no bitmaps, the function returns NULL and 1093 * the @errp parameter is not set. 1094 * When bitmap information can not be obtained, the function returns 1095 * NULL and the @errp parameter is set. 1096 */ 1097 Qcow2BitmapInfoList *qcow2_get_bitmap_info_list(BlockDriverState *bs, 1098 Error **errp) 1099 { 1100 BDRVQcow2State *s = bs->opaque; 1101 Qcow2BitmapList *bm_list; 1102 Qcow2Bitmap *bm; 1103 Qcow2BitmapInfoList *list = NULL; 1104 Qcow2BitmapInfoList **tail = &list; 1105 1106 if (s->nb_bitmaps == 0) { 1107 return NULL; 1108 } 1109 1110 bm_list = bitmap_list_load(bs, s->bitmap_directory_offset, 1111 s->bitmap_directory_size, errp); 1112 if (bm_list == NULL) { 1113 return NULL; 1114 } 1115 1116 QSIMPLEQ_FOREACH(bm, bm_list, entry) { 1117 Qcow2BitmapInfo *info = g_new0(Qcow2BitmapInfo, 1); 1118 info->granularity = 1U << bm->granularity_bits; 1119 info->name = g_strdup(bm->name); 1120 info->flags = get_bitmap_info_flags(bm->flags & ~BME_RESERVED_FLAGS); 1121 QAPI_LIST_APPEND(tail, info); 1122 } 1123 1124 bitmap_list_free(bm_list); 1125 1126 return list; 1127 } 1128 1129 int qcow2_reopen_bitmaps_rw(BlockDriverState *bs, Error **errp) 1130 { 1131 BDRVQcow2State *s = bs->opaque; 1132 Qcow2BitmapList *bm_list; 1133 Qcow2Bitmap *bm; 1134 GSList *ro_dirty_bitmaps = NULL; 1135 int ret = -EINVAL; 1136 bool need_header_update = false; 1137 1138 if (s->nb_bitmaps == 0) { 1139 /* No bitmaps - nothing to do */ 1140 return 0; 1141 } 1142 1143 bm_list = bitmap_list_load(bs, s->bitmap_directory_offset, 1144 s->bitmap_directory_size, errp); 1145 if (bm_list == NULL) { 1146 return -EINVAL; 1147 } 1148 1149 QSIMPLEQ_FOREACH(bm, bm_list, entry) { 1150 BdrvDirtyBitmap *bitmap = bdrv_find_dirty_bitmap(bs, bm->name); 1151 1152 if (!bitmap) { 1153 error_setg(errp, "Unexpected bitmap '%s' in image '%s'", 1154 bm->name, bs->filename); 1155 goto out; 1156 } 1157 1158 if (!(bm->flags & BME_FLAG_IN_USE)) { 1159 if (!bdrv_dirty_bitmap_readonly(bitmap)) { 1160 error_setg(errp, "Corruption: bitmap '%s' is not marked IN_USE " 1161 "in the image '%s' and not marked readonly in RAM", 1162 bm->name, bs->filename); 1163 goto out; 1164 } 1165 if (bdrv_dirty_bitmap_inconsistent(bitmap)) { 1166 error_setg(errp, "Corruption: bitmap '%s' is inconsistent but " 1167 "is not marked IN_USE in the image '%s'", bm->name, 1168 bs->filename); 1169 goto out; 1170 } 1171 1172 bm->flags |= BME_FLAG_IN_USE; 1173 need_header_update = true; 1174 } else { 1175 /* 1176 * What if flags already has BME_FLAG_IN_USE ? 1177 * 1178 * 1. if we are reopening RW -> RW it's OK, of course. 1179 * 2. if we are reopening RO -> RW: 1180 * 2.1 if @bitmap is inconsistent, it's OK. It means that it was 1181 * inconsistent (IN_USE) when we loaded it 1182 * 2.2 if @bitmap is not inconsistent. This seems to be impossible 1183 * and implies third party interaction. Let's error-out for 1184 * safety. 1185 */ 1186 if (bdrv_dirty_bitmap_readonly(bitmap) && 1187 !bdrv_dirty_bitmap_inconsistent(bitmap)) 1188 { 1189 error_setg(errp, "Corruption: bitmap '%s' is marked IN_USE " 1190 "in the image '%s' but it is readonly and " 1191 "consistent in RAM", 1192 bm->name, bs->filename); 1193 goto out; 1194 } 1195 } 1196 1197 if (bdrv_dirty_bitmap_readonly(bitmap)) { 1198 ro_dirty_bitmaps = g_slist_append(ro_dirty_bitmaps, bitmap); 1199 } 1200 } 1201 1202 if (need_header_update) { 1203 if (!can_write(bs->file->bs) || !(bs->file->perm & BLK_PERM_WRITE)) { 1204 error_setg(errp, "Failed to reopen bitmaps rw: no write access " 1205 "the protocol file"); 1206 goto out; 1207 } 1208 1209 /* in_use flags must be updated */ 1210 ret = update_ext_header_and_dir_in_place(bs, bm_list); 1211 if (ret < 0) { 1212 error_setg_errno(errp, -ret, "Cannot update bitmap directory"); 1213 goto out; 1214 } 1215 } 1216 1217 g_slist_foreach(ro_dirty_bitmaps, set_readonly_helper, false); 1218 ret = 0; 1219 1220 out: 1221 g_slist_free(ro_dirty_bitmaps); 1222 bitmap_list_free(bm_list); 1223 1224 return ret; 1225 } 1226 1227 /* Checks to see if it's safe to resize bitmaps */ 1228 int qcow2_truncate_bitmaps_check(BlockDriverState *bs, Error **errp) 1229 { 1230 BDRVQcow2State *s = bs->opaque; 1231 Qcow2BitmapList *bm_list; 1232 Qcow2Bitmap *bm; 1233 int ret = 0; 1234 1235 if (s->nb_bitmaps == 0) { 1236 return 0; 1237 } 1238 1239 bm_list = bitmap_list_load(bs, s->bitmap_directory_offset, 1240 s->bitmap_directory_size, errp); 1241 if (bm_list == NULL) { 1242 return -EINVAL; 1243 } 1244 1245 QSIMPLEQ_FOREACH(bm, bm_list, entry) { 1246 BdrvDirtyBitmap *bitmap = bdrv_find_dirty_bitmap(bs, bm->name); 1247 if (bitmap == NULL) { 1248 /* 1249 * We rely on all bitmaps being in-memory to be able to resize them, 1250 * Otherwise, we'd need to resize them on disk explicitly 1251 */ 1252 error_setg(errp, "Cannot resize qcow2 with persistent bitmaps that " 1253 "were not loaded into memory"); 1254 ret = -ENOTSUP; 1255 goto out; 1256 } 1257 1258 /* 1259 * The checks against readonly and busy are redundant, but certainly 1260 * do no harm. checks against inconsistent are crucial: 1261 */ 1262 if (bdrv_dirty_bitmap_check(bitmap, BDRV_BITMAP_DEFAULT, errp)) { 1263 ret = -ENOTSUP; 1264 goto out; 1265 } 1266 } 1267 1268 out: 1269 bitmap_list_free(bm_list); 1270 return ret; 1271 } 1272 1273 /* store_bitmap_data() 1274 * Store bitmap to image, filling bitmap table accordingly. 1275 */ 1276 static uint64_t *store_bitmap_data(BlockDriverState *bs, 1277 BdrvDirtyBitmap *bitmap, 1278 uint32_t *bitmap_table_size, Error **errp) 1279 { 1280 int ret; 1281 BDRVQcow2State *s = bs->opaque; 1282 int64_t offset; 1283 uint64_t limit; 1284 uint64_t bm_size = bdrv_dirty_bitmap_size(bitmap); 1285 const char *bm_name = bdrv_dirty_bitmap_name(bitmap); 1286 uint8_t *buf = NULL; 1287 uint64_t *tb; 1288 uint64_t tb_size = 1289 size_to_clusters(s, 1290 bdrv_dirty_bitmap_serialization_size(bitmap, 0, bm_size)); 1291 1292 if (tb_size > BME_MAX_TABLE_SIZE || 1293 tb_size * s->cluster_size > BME_MAX_PHYS_SIZE) 1294 { 1295 error_setg(errp, "Bitmap '%s' is too big", bm_name); 1296 return NULL; 1297 } 1298 1299 tb = g_try_new0(uint64_t, tb_size); 1300 if (tb == NULL) { 1301 error_setg(errp, "No memory"); 1302 return NULL; 1303 } 1304 1305 buf = g_malloc(s->cluster_size); 1306 limit = bytes_covered_by_bitmap_cluster(s, bitmap); 1307 assert(DIV_ROUND_UP(bm_size, limit) == tb_size); 1308 1309 offset = 0; 1310 while ((offset = bdrv_dirty_bitmap_next_dirty(bitmap, offset, INT64_MAX)) 1311 >= 0) 1312 { 1313 uint64_t cluster = offset / limit; 1314 uint64_t end, write_size; 1315 int64_t off; 1316 1317 /* 1318 * We found the first dirty offset, but want to write out the 1319 * entire cluster of the bitmap that includes that offset, 1320 * including any leading zero bits. 1321 */ 1322 offset = QEMU_ALIGN_DOWN(offset, limit); 1323 end = MIN(bm_size, offset + limit); 1324 write_size = bdrv_dirty_bitmap_serialization_size(bitmap, offset, 1325 end - offset); 1326 assert(write_size <= s->cluster_size); 1327 1328 off = qcow2_alloc_clusters(bs, s->cluster_size); 1329 if (off < 0) { 1330 error_setg_errno(errp, -off, 1331 "Failed to allocate clusters for bitmap '%s'", 1332 bm_name); 1333 goto fail; 1334 } 1335 tb[cluster] = off; 1336 1337 bdrv_dirty_bitmap_serialize_part(bitmap, buf, offset, end - offset); 1338 if (write_size < s->cluster_size) { 1339 memset(buf + write_size, 0, s->cluster_size - write_size); 1340 } 1341 1342 ret = qcow2_pre_write_overlap_check(bs, 0, off, s->cluster_size, false); 1343 if (ret < 0) { 1344 error_setg_errno(errp, -ret, "Qcow2 overlap check failed"); 1345 goto fail; 1346 } 1347 1348 ret = bdrv_pwrite(bs->file, off, buf, s->cluster_size); 1349 if (ret < 0) { 1350 error_setg_errno(errp, -ret, "Failed to write bitmap '%s' to file", 1351 bm_name); 1352 goto fail; 1353 } 1354 1355 offset = end; 1356 } 1357 1358 *bitmap_table_size = tb_size; 1359 g_free(buf); 1360 1361 return tb; 1362 1363 fail: 1364 clear_bitmap_table(bs, tb, tb_size); 1365 g_free(buf); 1366 g_free(tb); 1367 1368 return NULL; 1369 } 1370 1371 /* store_bitmap() 1372 * Store bm->dirty_bitmap to qcow2. 1373 * Set bm->table_offset and bm->table_size accordingly. 1374 */ 1375 static int store_bitmap(BlockDriverState *bs, Qcow2Bitmap *bm, Error **errp) 1376 { 1377 int ret; 1378 uint64_t *tb; 1379 int64_t tb_offset; 1380 uint32_t tb_size; 1381 BdrvDirtyBitmap *bitmap = bm->dirty_bitmap; 1382 const char *bm_name; 1383 1384 assert(bitmap != NULL); 1385 1386 bm_name = bdrv_dirty_bitmap_name(bitmap); 1387 1388 tb = store_bitmap_data(bs, bitmap, &tb_size, errp); 1389 if (tb == NULL) { 1390 return -EINVAL; 1391 } 1392 1393 assert(tb_size <= BME_MAX_TABLE_SIZE); 1394 tb_offset = qcow2_alloc_clusters(bs, tb_size * sizeof(tb[0])); 1395 if (tb_offset < 0) { 1396 error_setg_errno(errp, -tb_offset, 1397 "Failed to allocate clusters for bitmap '%s'", 1398 bm_name); 1399 ret = tb_offset; 1400 goto fail; 1401 } 1402 1403 ret = qcow2_pre_write_overlap_check(bs, 0, tb_offset, 1404 tb_size * sizeof(tb[0]), false); 1405 if (ret < 0) { 1406 error_setg_errno(errp, -ret, "Qcow2 overlap check failed"); 1407 goto fail; 1408 } 1409 1410 bitmap_table_to_be(tb, tb_size); 1411 ret = bdrv_pwrite(bs->file, tb_offset, tb, tb_size * sizeof(tb[0])); 1412 if (ret < 0) { 1413 error_setg_errno(errp, -ret, "Failed to write bitmap '%s' to file", 1414 bm_name); 1415 goto fail; 1416 } 1417 1418 g_free(tb); 1419 1420 bm->table.offset = tb_offset; 1421 bm->table.size = tb_size; 1422 1423 return 0; 1424 1425 fail: 1426 clear_bitmap_table(bs, tb, tb_size); 1427 1428 if (tb_offset > 0) { 1429 qcow2_free_clusters(bs, tb_offset, tb_size * sizeof(tb[0]), 1430 QCOW2_DISCARD_OTHER); 1431 } 1432 1433 g_free(tb); 1434 1435 return ret; 1436 } 1437 1438 static Qcow2Bitmap *find_bitmap_by_name(Qcow2BitmapList *bm_list, 1439 const char *name) 1440 { 1441 Qcow2Bitmap *bm; 1442 1443 QSIMPLEQ_FOREACH(bm, bm_list, entry) { 1444 if (strcmp(name, bm->name) == 0) { 1445 return bm; 1446 } 1447 } 1448 1449 return NULL; 1450 } 1451 1452 int coroutine_fn qcow2_co_remove_persistent_dirty_bitmap(BlockDriverState *bs, 1453 const char *name, 1454 Error **errp) 1455 { 1456 int ret; 1457 BDRVQcow2State *s = bs->opaque; 1458 Qcow2Bitmap *bm = NULL; 1459 Qcow2BitmapList *bm_list; 1460 1461 if (s->nb_bitmaps == 0) { 1462 /* 1463 * Absence of the bitmap is not an error: see explanation above 1464 * bdrv_co_remove_persistent_dirty_bitmap() definition. 1465 */ 1466 return 0; 1467 } 1468 1469 qemu_co_mutex_lock(&s->lock); 1470 1471 bm_list = bitmap_list_load(bs, s->bitmap_directory_offset, 1472 s->bitmap_directory_size, errp); 1473 if (bm_list == NULL) { 1474 ret = -EIO; 1475 goto out; 1476 } 1477 1478 bm = find_bitmap_by_name(bm_list, name); 1479 if (bm == NULL) { 1480 /* Absence of the bitmap is not an error, see above. */ 1481 ret = 0; 1482 goto out; 1483 } 1484 1485 QSIMPLEQ_REMOVE(bm_list, bm, Qcow2Bitmap, entry); 1486 1487 ret = update_ext_header_and_dir(bs, bm_list); 1488 if (ret < 0) { 1489 error_setg_errno(errp, -ret, "Failed to update bitmap extension"); 1490 goto out; 1491 } 1492 1493 free_bitmap_clusters(bs, &bm->table); 1494 1495 out: 1496 qemu_co_mutex_unlock(&s->lock); 1497 1498 bitmap_free(bm); 1499 bitmap_list_free(bm_list); 1500 1501 return ret; 1502 } 1503 1504 /* 1505 * qcow2_store_persistent_dirty_bitmaps 1506 * 1507 * Stores persistent BdrvDirtyBitmap objects. 1508 * 1509 * @release_stored: if true, release BdrvDirtyBitmap's after storing to the 1510 * image. This is used in two cases, both via qcow2_inactivate: 1511 * 1. bdrv_close: It's correct to remove bitmaps on close. 1512 * 2. migration: If bitmaps are migrated through migration channel via 1513 * 'dirty-bitmaps' migration capability they are not handled by this code. 1514 * Otherwise, it's OK to drop BdrvDirtyBitmap's and reload them on 1515 * invalidation. 1516 * 1517 * Anyway, it's correct to remove BdrvDirtyBitmap's on inactivation, as 1518 * inactivation means that we lose control on disk, and therefore on bitmaps, 1519 * we should sync them and do not touch more. 1520 * 1521 * Contrariwise, we don't want to release any bitmaps on just reopen-to-ro, 1522 * when we need to store them, as image is still under our control, and it's 1523 * good to keep all the bitmaps in read-only mode. Moreover, keeping them 1524 * read-only is correct because this is what would happen if we opened the node 1525 * readonly to begin with, and whether we opened directly or reopened to that 1526 * state shouldn't matter for the state we get afterward. 1527 */ 1528 void qcow2_store_persistent_dirty_bitmaps(BlockDriverState *bs, 1529 bool release_stored, Error **errp) 1530 { 1531 BdrvDirtyBitmap *bitmap; 1532 BDRVQcow2State *s = bs->opaque; 1533 uint32_t new_nb_bitmaps = s->nb_bitmaps; 1534 uint64_t new_dir_size = s->bitmap_directory_size; 1535 int ret; 1536 Qcow2BitmapList *bm_list; 1537 Qcow2Bitmap *bm; 1538 QSIMPLEQ_HEAD(, Qcow2BitmapTable) drop_tables; 1539 Qcow2BitmapTable *tb, *tb_next; 1540 bool need_write = false; 1541 1542 QSIMPLEQ_INIT(&drop_tables); 1543 1544 if (s->nb_bitmaps == 0) { 1545 bm_list = bitmap_list_new(); 1546 } else { 1547 bm_list = bitmap_list_load(bs, s->bitmap_directory_offset, 1548 s->bitmap_directory_size, errp); 1549 if (bm_list == NULL) { 1550 return; 1551 } 1552 } 1553 1554 /* check constraints and names */ 1555 FOR_EACH_DIRTY_BITMAP(bs, bitmap) { 1556 const char *name = bdrv_dirty_bitmap_name(bitmap); 1557 uint32_t granularity = bdrv_dirty_bitmap_granularity(bitmap); 1558 Qcow2Bitmap *bm; 1559 1560 if (!bdrv_dirty_bitmap_get_persistence(bitmap) || 1561 bdrv_dirty_bitmap_inconsistent(bitmap)) { 1562 continue; 1563 } 1564 1565 if (bdrv_dirty_bitmap_readonly(bitmap)) { 1566 /* 1567 * Store the bitmap in the associated Qcow2Bitmap so it 1568 * can be released later 1569 */ 1570 bm = find_bitmap_by_name(bm_list, name); 1571 if (bm) { 1572 bm->dirty_bitmap = bitmap; 1573 } 1574 continue; 1575 } 1576 1577 need_write = true; 1578 1579 if (check_constraints_on_bitmap(bs, name, granularity, errp) < 0) { 1580 error_prepend(errp, "Bitmap '%s' doesn't satisfy the constraints: ", 1581 name); 1582 goto fail; 1583 } 1584 1585 bm = find_bitmap_by_name(bm_list, name); 1586 if (bm == NULL) { 1587 if (++new_nb_bitmaps > QCOW2_MAX_BITMAPS) { 1588 error_setg(errp, "Too many persistent bitmaps"); 1589 goto fail; 1590 } 1591 1592 new_dir_size += calc_dir_entry_size(strlen(name), 0); 1593 if (new_dir_size > QCOW2_MAX_BITMAP_DIRECTORY_SIZE) { 1594 error_setg(errp, "Bitmap directory is too large"); 1595 goto fail; 1596 } 1597 1598 bm = g_new0(Qcow2Bitmap, 1); 1599 bm->name = g_strdup(name); 1600 QSIMPLEQ_INSERT_TAIL(bm_list, bm, entry); 1601 } else { 1602 if (!(bm->flags & BME_FLAG_IN_USE)) { 1603 error_setg(errp, "Bitmap '%s' already exists in the image", 1604 name); 1605 goto fail; 1606 } 1607 tb = g_memdup(&bm->table, sizeof(bm->table)); 1608 bm->table.offset = 0; 1609 bm->table.size = 0; 1610 QSIMPLEQ_INSERT_TAIL(&drop_tables, tb, entry); 1611 } 1612 bm->flags = bdrv_dirty_bitmap_enabled(bitmap) ? BME_FLAG_AUTO : 0; 1613 bm->granularity_bits = ctz32(bdrv_dirty_bitmap_granularity(bitmap)); 1614 bm->dirty_bitmap = bitmap; 1615 } 1616 1617 if (!need_write) { 1618 goto success; 1619 } 1620 1621 if (!can_write(bs)) { 1622 error_setg(errp, "No write access"); 1623 goto fail; 1624 } 1625 1626 /* allocate clusters and store bitmaps */ 1627 QSIMPLEQ_FOREACH(bm, bm_list, entry) { 1628 BdrvDirtyBitmap *bitmap = bm->dirty_bitmap; 1629 1630 if (bitmap == NULL || bdrv_dirty_bitmap_readonly(bitmap)) { 1631 continue; 1632 } 1633 1634 ret = store_bitmap(bs, bm, errp); 1635 if (ret < 0) { 1636 goto fail; 1637 } 1638 } 1639 1640 ret = update_ext_header_and_dir(bs, bm_list); 1641 if (ret < 0) { 1642 error_setg_errno(errp, -ret, "Failed to update bitmap extension"); 1643 goto fail; 1644 } 1645 1646 /* Bitmap directory was successfully updated, so, old data can be dropped. 1647 * TODO it is better to reuse these clusters */ 1648 QSIMPLEQ_FOREACH_SAFE(tb, &drop_tables, entry, tb_next) { 1649 free_bitmap_clusters(bs, tb); 1650 g_free(tb); 1651 } 1652 1653 success: 1654 if (release_stored) { 1655 QSIMPLEQ_FOREACH(bm, bm_list, entry) { 1656 if (bm->dirty_bitmap == NULL) { 1657 continue; 1658 } 1659 1660 bdrv_release_dirty_bitmap(bm->dirty_bitmap); 1661 } 1662 } 1663 1664 bitmap_list_free(bm_list); 1665 return; 1666 1667 fail: 1668 QSIMPLEQ_FOREACH(bm, bm_list, entry) { 1669 if (bm->dirty_bitmap == NULL || bm->table.offset == 0 || 1670 bdrv_dirty_bitmap_readonly(bm->dirty_bitmap)) 1671 { 1672 continue; 1673 } 1674 1675 free_bitmap_clusters(bs, &bm->table); 1676 } 1677 1678 QSIMPLEQ_FOREACH_SAFE(tb, &drop_tables, entry, tb_next) { 1679 g_free(tb); 1680 } 1681 1682 bitmap_list_free(bm_list); 1683 } 1684 1685 int qcow2_reopen_bitmaps_ro(BlockDriverState *bs, Error **errp) 1686 { 1687 BdrvDirtyBitmap *bitmap; 1688 Error *local_err = NULL; 1689 1690 qcow2_store_persistent_dirty_bitmaps(bs, false, &local_err); 1691 if (local_err != NULL) { 1692 error_propagate(errp, local_err); 1693 return -EINVAL; 1694 } 1695 1696 FOR_EACH_DIRTY_BITMAP(bs, bitmap) { 1697 if (bdrv_dirty_bitmap_get_persistence(bitmap)) { 1698 bdrv_dirty_bitmap_set_readonly(bitmap, true); 1699 } 1700 } 1701 1702 return 0; 1703 } 1704 1705 bool coroutine_fn qcow2_co_can_store_new_dirty_bitmap(BlockDriverState *bs, 1706 const char *name, 1707 uint32_t granularity, 1708 Error **errp) 1709 { 1710 BDRVQcow2State *s = bs->opaque; 1711 BdrvDirtyBitmap *bitmap; 1712 uint64_t bitmap_directory_size = 0; 1713 uint32_t nb_bitmaps = 0; 1714 1715 if (bdrv_find_dirty_bitmap(bs, name)) { 1716 error_setg(errp, "Bitmap already exists: %s", name); 1717 return false; 1718 } 1719 1720 if (s->qcow_version < 3) { 1721 /* Without autoclear_features, we would always have to assume 1722 * that a program without persistent dirty bitmap support has 1723 * accessed this qcow2 file when opening it, and would thus 1724 * have to drop all dirty bitmaps (defeating their purpose). 1725 */ 1726 error_setg(errp, "Cannot store dirty bitmaps in qcow2 v2 files"); 1727 goto fail; 1728 } 1729 1730 if (check_constraints_on_bitmap(bs, name, granularity, errp) != 0) { 1731 goto fail; 1732 } 1733 1734 FOR_EACH_DIRTY_BITMAP(bs, bitmap) { 1735 if (bdrv_dirty_bitmap_get_persistence(bitmap)) { 1736 nb_bitmaps++; 1737 bitmap_directory_size += 1738 calc_dir_entry_size(strlen(bdrv_dirty_bitmap_name(bitmap)), 0); 1739 } 1740 } 1741 nb_bitmaps++; 1742 bitmap_directory_size += calc_dir_entry_size(strlen(name), 0); 1743 1744 if (nb_bitmaps > QCOW2_MAX_BITMAPS) { 1745 error_setg(errp, 1746 "Maximum number of persistent bitmaps is already reached"); 1747 goto fail; 1748 } 1749 1750 if (bitmap_directory_size > QCOW2_MAX_BITMAP_DIRECTORY_SIZE) { 1751 error_setg(errp, "Not enough space in the bitmap directory"); 1752 goto fail; 1753 } 1754 1755 return true; 1756 1757 fail: 1758 error_prepend(errp, "Can't make bitmap '%s' persistent in '%s': ", 1759 name, bdrv_get_device_or_node_name(bs)); 1760 return false; 1761 } 1762 1763 bool qcow2_supports_persistent_dirty_bitmap(BlockDriverState *bs) 1764 { 1765 BDRVQcow2State *s = bs->opaque; 1766 1767 return s->qcow_version >= 3; 1768 } 1769 1770 /* 1771 * Compute the space required to copy bitmaps from @in_bs. 1772 * 1773 * The computation is based as if copying to a new image with the 1774 * given @cluster_size, which may differ from the cluster size in 1775 * @in_bs; in fact, @in_bs might be something other than qcow2. 1776 */ 1777 uint64_t qcow2_get_persistent_dirty_bitmap_size(BlockDriverState *in_bs, 1778 uint32_t cluster_size) 1779 { 1780 uint64_t bitmaps_size = 0; 1781 BdrvDirtyBitmap *bm; 1782 size_t bitmap_dir_size = 0; 1783 1784 FOR_EACH_DIRTY_BITMAP(in_bs, bm) { 1785 if (bdrv_dirty_bitmap_get_persistence(bm)) { 1786 const char *name = bdrv_dirty_bitmap_name(bm); 1787 uint32_t granularity = bdrv_dirty_bitmap_granularity(bm); 1788 uint64_t bmbytes = 1789 get_bitmap_bytes_needed(bdrv_dirty_bitmap_size(bm), 1790 granularity); 1791 uint64_t bmclusters = DIV_ROUND_UP(bmbytes, cluster_size); 1792 1793 /* Assume the entire bitmap is allocated */ 1794 bitmaps_size += bmclusters * cluster_size; 1795 /* Also reserve space for the bitmap table entries */ 1796 bitmaps_size += ROUND_UP(bmclusters * BME_TABLE_ENTRY_SIZE, 1797 cluster_size); 1798 /* And space for contribution to bitmap directory size */ 1799 bitmap_dir_size += calc_dir_entry_size(strlen(name), 0); 1800 } 1801 } 1802 bitmaps_size += ROUND_UP(bitmap_dir_size, cluster_size); 1803 1804 return bitmaps_size; 1805 } 1806