xref: /openbmc/qemu/block/qcow.c (revision 7562f907)
1 /*
2  * Block driver for the QCOW format
3  *
4  * Copyright (c) 2004-2006 Fabrice Bellard
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  */
24 #include "qemu/osdep.h"
25 #include "qapi/error.h"
26 #include "qemu-common.h"
27 #include "qemu/error-report.h"
28 #include "block/block_int.h"
29 #include "sysemu/block-backend.h"
30 #include "qemu/module.h"
31 #include "qemu/bswap.h"
32 #include <zlib.h>
33 #include "qapi/qmp/qerror.h"
34 #include "crypto/cipher.h"
35 #include "migration/migration.h"
36 
37 /**************************************************************/
38 /* QEMU COW block driver with compression and encryption support */
39 
40 #define QCOW_MAGIC (('Q' << 24) | ('F' << 16) | ('I' << 8) | 0xfb)
41 #define QCOW_VERSION 1
42 
43 #define QCOW_CRYPT_NONE 0
44 #define QCOW_CRYPT_AES  1
45 
46 #define QCOW_OFLAG_COMPRESSED (1LL << 63)
47 
48 typedef struct QCowHeader {
49     uint32_t magic;
50     uint32_t version;
51     uint64_t backing_file_offset;
52     uint32_t backing_file_size;
53     uint32_t mtime;
54     uint64_t size; /* in bytes */
55     uint8_t cluster_bits;
56     uint8_t l2_bits;
57     uint16_t padding;
58     uint32_t crypt_method;
59     uint64_t l1_table_offset;
60 } QEMU_PACKED QCowHeader;
61 
62 #define L2_CACHE_SIZE 16
63 
64 typedef struct BDRVQcowState {
65     int cluster_bits;
66     int cluster_size;
67     int cluster_sectors;
68     int l2_bits;
69     int l2_size;
70     unsigned int l1_size;
71     uint64_t cluster_offset_mask;
72     uint64_t l1_table_offset;
73     uint64_t *l1_table;
74     uint64_t *l2_cache;
75     uint64_t l2_cache_offsets[L2_CACHE_SIZE];
76     uint32_t l2_cache_counts[L2_CACHE_SIZE];
77     uint8_t *cluster_cache;
78     uint8_t *cluster_data;
79     uint64_t cluster_cache_offset;
80     QCryptoCipher *cipher; /* NULL if no key yet */
81     uint32_t crypt_method_header;
82     CoMutex lock;
83     Error *migration_blocker;
84 } BDRVQcowState;
85 
86 static int decompress_cluster(BlockDriverState *bs, uint64_t cluster_offset);
87 
88 static int qcow_probe(const uint8_t *buf, int buf_size, const char *filename)
89 {
90     const QCowHeader *cow_header = (const void *)buf;
91 
92     if (buf_size >= sizeof(QCowHeader) &&
93         be32_to_cpu(cow_header->magic) == QCOW_MAGIC &&
94         be32_to_cpu(cow_header->version) == QCOW_VERSION)
95         return 100;
96     else
97         return 0;
98 }
99 
100 static int qcow_open(BlockDriverState *bs, QDict *options, int flags,
101                      Error **errp)
102 {
103     BDRVQcowState *s = bs->opaque;
104     unsigned int len, i, shift;
105     int ret;
106     QCowHeader header;
107     Error *local_err = NULL;
108 
109     bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
110                                false, errp);
111     if (!bs->file) {
112         return -EINVAL;
113     }
114 
115     ret = bdrv_pread(bs->file, 0, &header, sizeof(header));
116     if (ret < 0) {
117         goto fail;
118     }
119     be32_to_cpus(&header.magic);
120     be32_to_cpus(&header.version);
121     be64_to_cpus(&header.backing_file_offset);
122     be32_to_cpus(&header.backing_file_size);
123     be32_to_cpus(&header.mtime);
124     be64_to_cpus(&header.size);
125     be32_to_cpus(&header.crypt_method);
126     be64_to_cpus(&header.l1_table_offset);
127 
128     if (header.magic != QCOW_MAGIC) {
129         error_setg(errp, "Image not in qcow format");
130         ret = -EINVAL;
131         goto fail;
132     }
133     if (header.version != QCOW_VERSION) {
134         error_setg(errp, "Unsupported qcow version %" PRIu32, header.version);
135         ret = -ENOTSUP;
136         goto fail;
137     }
138 
139     if (header.size <= 1) {
140         error_setg(errp, "Image size is too small (must be at least 2 bytes)");
141         ret = -EINVAL;
142         goto fail;
143     }
144     if (header.cluster_bits < 9 || header.cluster_bits > 16) {
145         error_setg(errp, "Cluster size must be between 512 and 64k");
146         ret = -EINVAL;
147         goto fail;
148     }
149 
150     /* l2_bits specifies number of entries; storing a uint64_t in each entry,
151      * so bytes = num_entries << 3. */
152     if (header.l2_bits < 9 - 3 || header.l2_bits > 16 - 3) {
153         error_setg(errp, "L2 table size must be between 512 and 64k");
154         ret = -EINVAL;
155         goto fail;
156     }
157 
158     if (header.crypt_method > QCOW_CRYPT_AES) {
159         error_setg(errp, "invalid encryption method in qcow header");
160         ret = -EINVAL;
161         goto fail;
162     }
163     if (!qcrypto_cipher_supports(QCRYPTO_CIPHER_ALG_AES_128,
164                                  QCRYPTO_CIPHER_MODE_CBC)) {
165         error_setg(errp, "AES cipher not available");
166         ret = -EINVAL;
167         goto fail;
168     }
169     s->crypt_method_header = header.crypt_method;
170     if (s->crypt_method_header) {
171         if (bdrv_uses_whitelist() &&
172             s->crypt_method_header == QCOW_CRYPT_AES) {
173             error_setg(errp,
174                        "Use of AES-CBC encrypted qcow images is no longer "
175                        "supported in system emulators");
176             error_append_hint(errp,
177                               "You can use 'qemu-img convert' to convert your "
178                               "image to an alternative supported format, such "
179                               "as unencrypted qcow, or raw with the LUKS "
180                               "format instead.\n");
181             ret = -ENOSYS;
182             goto fail;
183         }
184 
185         bs->encrypted = true;
186     }
187     s->cluster_bits = header.cluster_bits;
188     s->cluster_size = 1 << s->cluster_bits;
189     s->cluster_sectors = 1 << (s->cluster_bits - 9);
190     s->l2_bits = header.l2_bits;
191     s->l2_size = 1 << s->l2_bits;
192     bs->total_sectors = header.size / 512;
193     s->cluster_offset_mask = (1LL << (63 - s->cluster_bits)) - 1;
194 
195     /* read the level 1 table */
196     shift = s->cluster_bits + s->l2_bits;
197     if (header.size > UINT64_MAX - (1LL << shift)) {
198         error_setg(errp, "Image too large");
199         ret = -EINVAL;
200         goto fail;
201     } else {
202         uint64_t l1_size = (header.size + (1LL << shift) - 1) >> shift;
203         if (l1_size > INT_MAX / sizeof(uint64_t)) {
204             error_setg(errp, "Image too large");
205             ret = -EINVAL;
206             goto fail;
207         }
208         s->l1_size = l1_size;
209     }
210 
211     s->l1_table_offset = header.l1_table_offset;
212     s->l1_table = g_try_new(uint64_t, s->l1_size);
213     if (s->l1_table == NULL) {
214         error_setg(errp, "Could not allocate memory for L1 table");
215         ret = -ENOMEM;
216         goto fail;
217     }
218 
219     ret = bdrv_pread(bs->file, s->l1_table_offset, s->l1_table,
220                s->l1_size * sizeof(uint64_t));
221     if (ret < 0) {
222         goto fail;
223     }
224 
225     for(i = 0;i < s->l1_size; i++) {
226         be64_to_cpus(&s->l1_table[i]);
227     }
228 
229     /* alloc L2 cache (max. 64k * 16 * 8 = 8 MB) */
230     s->l2_cache =
231         qemu_try_blockalign(bs->file->bs,
232                             s->l2_size * L2_CACHE_SIZE * sizeof(uint64_t));
233     if (s->l2_cache == NULL) {
234         error_setg(errp, "Could not allocate L2 table cache");
235         ret = -ENOMEM;
236         goto fail;
237     }
238     s->cluster_cache = g_malloc(s->cluster_size);
239     s->cluster_data = g_malloc(s->cluster_size);
240     s->cluster_cache_offset = -1;
241 
242     /* read the backing file name */
243     if (header.backing_file_offset != 0) {
244         len = header.backing_file_size;
245         if (len > 1023 || len >= sizeof(bs->backing_file)) {
246             error_setg(errp, "Backing file name too long");
247             ret = -EINVAL;
248             goto fail;
249         }
250         ret = bdrv_pread(bs->file, header.backing_file_offset,
251                    bs->backing_file, len);
252         if (ret < 0) {
253             goto fail;
254         }
255         bs->backing_file[len] = '\0';
256     }
257 
258     /* Disable migration when qcow images are used */
259     error_setg(&s->migration_blocker, "The qcow format used by node '%s' "
260                "does not support live migration",
261                bdrv_get_device_or_node_name(bs));
262     ret = migrate_add_blocker(s->migration_blocker, &local_err);
263     if (local_err) {
264         error_propagate(errp, local_err);
265         error_free(s->migration_blocker);
266         goto fail;
267     }
268 
269     qemu_co_mutex_init(&s->lock);
270     return 0;
271 
272  fail:
273     g_free(s->l1_table);
274     qemu_vfree(s->l2_cache);
275     g_free(s->cluster_cache);
276     g_free(s->cluster_data);
277     return ret;
278 }
279 
280 
281 /* We have nothing to do for QCOW reopen, stubs just return
282  * success */
283 static int qcow_reopen_prepare(BDRVReopenState *state,
284                                BlockReopenQueue *queue, Error **errp)
285 {
286     return 0;
287 }
288 
289 static int qcow_set_key(BlockDriverState *bs, const char *key)
290 {
291     BDRVQcowState *s = bs->opaque;
292     uint8_t keybuf[16];
293     int len, i;
294     Error *err;
295 
296     memset(keybuf, 0, 16);
297     len = strlen(key);
298     if (len > 16)
299         len = 16;
300     /* XXX: we could compress the chars to 7 bits to increase
301        entropy */
302     for(i = 0;i < len;i++) {
303         keybuf[i] = key[i];
304     }
305     assert(bs->encrypted);
306 
307     qcrypto_cipher_free(s->cipher);
308     s->cipher = qcrypto_cipher_new(
309         QCRYPTO_CIPHER_ALG_AES_128,
310         QCRYPTO_CIPHER_MODE_CBC,
311         keybuf, G_N_ELEMENTS(keybuf),
312         &err);
313 
314     if (!s->cipher) {
315         /* XXX would be nice if errors in this method could
316          * be properly propagate to the caller. Would need
317          * the bdrv_set_key() API signature to be fixed. */
318         error_free(err);
319         return -1;
320     }
321     return 0;
322 }
323 
324 /* The crypt function is compatible with the linux cryptoloop
325    algorithm for < 4 GB images. NOTE: out_buf == in_buf is
326    supported */
327 static int encrypt_sectors(BDRVQcowState *s, int64_t sector_num,
328                            uint8_t *out_buf, const uint8_t *in_buf,
329                            int nb_sectors, bool enc, Error **errp)
330 {
331     union {
332         uint64_t ll[2];
333         uint8_t b[16];
334     } ivec;
335     int i;
336     int ret;
337 
338     for(i = 0; i < nb_sectors; i++) {
339         ivec.ll[0] = cpu_to_le64(sector_num);
340         ivec.ll[1] = 0;
341         if (qcrypto_cipher_setiv(s->cipher,
342                                  ivec.b, G_N_ELEMENTS(ivec.b),
343                                  errp) < 0) {
344             return -1;
345         }
346         if (enc) {
347             ret = qcrypto_cipher_encrypt(s->cipher,
348                                          in_buf,
349                                          out_buf,
350                                          512,
351                                          errp);
352         } else {
353             ret = qcrypto_cipher_decrypt(s->cipher,
354                                          in_buf,
355                                          out_buf,
356                                          512,
357                                          errp);
358         }
359         if (ret < 0) {
360             return -1;
361         }
362         sector_num++;
363         in_buf += 512;
364         out_buf += 512;
365     }
366     return 0;
367 }
368 
369 /* 'allocate' is:
370  *
371  * 0 to not allocate.
372  *
373  * 1 to allocate a normal cluster (for sector indexes 'n_start' to
374  * 'n_end')
375  *
376  * 2 to allocate a compressed cluster of size
377  * 'compressed_size'. 'compressed_size' must be > 0 and <
378  * cluster_size
379  *
380  * return 0 if not allocated.
381  */
382 static uint64_t get_cluster_offset(BlockDriverState *bs,
383                                    uint64_t offset, int allocate,
384                                    int compressed_size,
385                                    int n_start, int n_end)
386 {
387     BDRVQcowState *s = bs->opaque;
388     int min_index, i, j, l1_index, l2_index;
389     uint64_t l2_offset, *l2_table, cluster_offset, tmp;
390     uint32_t min_count;
391     int new_l2_table;
392 
393     l1_index = offset >> (s->l2_bits + s->cluster_bits);
394     l2_offset = s->l1_table[l1_index];
395     new_l2_table = 0;
396     if (!l2_offset) {
397         if (!allocate)
398             return 0;
399         /* allocate a new l2 entry */
400         l2_offset = bdrv_getlength(bs->file->bs);
401         /* round to cluster size */
402         l2_offset = (l2_offset + s->cluster_size - 1) & ~(s->cluster_size - 1);
403         /* update the L1 entry */
404         s->l1_table[l1_index] = l2_offset;
405         tmp = cpu_to_be64(l2_offset);
406         if (bdrv_pwrite_sync(bs->file,
407                 s->l1_table_offset + l1_index * sizeof(tmp),
408                 &tmp, sizeof(tmp)) < 0)
409             return 0;
410         new_l2_table = 1;
411     }
412     for(i = 0; i < L2_CACHE_SIZE; i++) {
413         if (l2_offset == s->l2_cache_offsets[i]) {
414             /* increment the hit count */
415             if (++s->l2_cache_counts[i] == 0xffffffff) {
416                 for(j = 0; j < L2_CACHE_SIZE; j++) {
417                     s->l2_cache_counts[j] >>= 1;
418                 }
419             }
420             l2_table = s->l2_cache + (i << s->l2_bits);
421             goto found;
422         }
423     }
424     /* not found: load a new entry in the least used one */
425     min_index = 0;
426     min_count = 0xffffffff;
427     for(i = 0; i < L2_CACHE_SIZE; i++) {
428         if (s->l2_cache_counts[i] < min_count) {
429             min_count = s->l2_cache_counts[i];
430             min_index = i;
431         }
432     }
433     l2_table = s->l2_cache + (min_index << s->l2_bits);
434     if (new_l2_table) {
435         memset(l2_table, 0, s->l2_size * sizeof(uint64_t));
436         if (bdrv_pwrite_sync(bs->file, l2_offset, l2_table,
437                 s->l2_size * sizeof(uint64_t)) < 0)
438             return 0;
439     } else {
440         if (bdrv_pread(bs->file, l2_offset, l2_table,
441                        s->l2_size * sizeof(uint64_t)) !=
442             s->l2_size * sizeof(uint64_t))
443             return 0;
444     }
445     s->l2_cache_offsets[min_index] = l2_offset;
446     s->l2_cache_counts[min_index] = 1;
447  found:
448     l2_index = (offset >> s->cluster_bits) & (s->l2_size - 1);
449     cluster_offset = be64_to_cpu(l2_table[l2_index]);
450     if (!cluster_offset ||
451         ((cluster_offset & QCOW_OFLAG_COMPRESSED) && allocate == 1)) {
452         if (!allocate)
453             return 0;
454         /* allocate a new cluster */
455         if ((cluster_offset & QCOW_OFLAG_COMPRESSED) &&
456             (n_end - n_start) < s->cluster_sectors) {
457             /* if the cluster is already compressed, we must
458                decompress it in the case it is not completely
459                overwritten */
460             if (decompress_cluster(bs, cluster_offset) < 0)
461                 return 0;
462             cluster_offset = bdrv_getlength(bs->file->bs);
463             cluster_offset = (cluster_offset + s->cluster_size - 1) &
464                 ~(s->cluster_size - 1);
465             /* write the cluster content */
466             if (bdrv_pwrite(bs->file, cluster_offset, s->cluster_cache,
467                             s->cluster_size) !=
468                 s->cluster_size)
469                 return -1;
470         } else {
471             cluster_offset = bdrv_getlength(bs->file->bs);
472             if (allocate == 1) {
473                 /* round to cluster size */
474                 cluster_offset = (cluster_offset + s->cluster_size - 1) &
475                     ~(s->cluster_size - 1);
476                 bdrv_truncate(bs->file, cluster_offset + s->cluster_size);
477                 /* if encrypted, we must initialize the cluster
478                    content which won't be written */
479                 if (bs->encrypted &&
480                     (n_end - n_start) < s->cluster_sectors) {
481                     uint64_t start_sect;
482                     assert(s->cipher);
483                     start_sect = (offset & ~(s->cluster_size - 1)) >> 9;
484                     memset(s->cluster_data + 512, 0x00, 512);
485                     for(i = 0; i < s->cluster_sectors; i++) {
486                         if (i < n_start || i >= n_end) {
487                             Error *err = NULL;
488                             if (encrypt_sectors(s, start_sect + i,
489                                                 s->cluster_data,
490                                                 s->cluster_data + 512, 1,
491                                                 true, &err) < 0) {
492                                 error_free(err);
493                                 errno = EIO;
494                                 return -1;
495                             }
496                             if (bdrv_pwrite(bs->file,
497                                             cluster_offset + i * 512,
498                                             s->cluster_data, 512) != 512)
499                                 return -1;
500                         }
501                     }
502                 }
503             } else if (allocate == 2) {
504                 cluster_offset |= QCOW_OFLAG_COMPRESSED |
505                     (uint64_t)compressed_size << (63 - s->cluster_bits);
506             }
507         }
508         /* update L2 table */
509         tmp = cpu_to_be64(cluster_offset);
510         l2_table[l2_index] = tmp;
511         if (bdrv_pwrite_sync(bs->file, l2_offset + l2_index * sizeof(tmp),
512                 &tmp, sizeof(tmp)) < 0)
513             return 0;
514     }
515     return cluster_offset;
516 }
517 
518 static int64_t coroutine_fn qcow_co_get_block_status(BlockDriverState *bs,
519         int64_t sector_num, int nb_sectors, int *pnum, BlockDriverState **file)
520 {
521     BDRVQcowState *s = bs->opaque;
522     int index_in_cluster, n;
523     uint64_t cluster_offset;
524 
525     qemu_co_mutex_lock(&s->lock);
526     cluster_offset = get_cluster_offset(bs, sector_num << 9, 0, 0, 0, 0);
527     qemu_co_mutex_unlock(&s->lock);
528     index_in_cluster = sector_num & (s->cluster_sectors - 1);
529     n = s->cluster_sectors - index_in_cluster;
530     if (n > nb_sectors)
531         n = nb_sectors;
532     *pnum = n;
533     if (!cluster_offset) {
534         return 0;
535     }
536     if ((cluster_offset & QCOW_OFLAG_COMPRESSED) || s->cipher) {
537         return BDRV_BLOCK_DATA;
538     }
539     cluster_offset |= (index_in_cluster << BDRV_SECTOR_BITS);
540     *file = bs->file->bs;
541     return BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | cluster_offset;
542 }
543 
544 static int decompress_buffer(uint8_t *out_buf, int out_buf_size,
545                              const uint8_t *buf, int buf_size)
546 {
547     z_stream strm1, *strm = &strm1;
548     int ret, out_len;
549 
550     memset(strm, 0, sizeof(*strm));
551 
552     strm->next_in = (uint8_t *)buf;
553     strm->avail_in = buf_size;
554     strm->next_out = out_buf;
555     strm->avail_out = out_buf_size;
556 
557     ret = inflateInit2(strm, -12);
558     if (ret != Z_OK)
559         return -1;
560     ret = inflate(strm, Z_FINISH);
561     out_len = strm->next_out - out_buf;
562     if ((ret != Z_STREAM_END && ret != Z_BUF_ERROR) ||
563         out_len != out_buf_size) {
564         inflateEnd(strm);
565         return -1;
566     }
567     inflateEnd(strm);
568     return 0;
569 }
570 
571 static int decompress_cluster(BlockDriverState *bs, uint64_t cluster_offset)
572 {
573     BDRVQcowState *s = bs->opaque;
574     int ret, csize;
575     uint64_t coffset;
576 
577     coffset = cluster_offset & s->cluster_offset_mask;
578     if (s->cluster_cache_offset != coffset) {
579         csize = cluster_offset >> (63 - s->cluster_bits);
580         csize &= (s->cluster_size - 1);
581         ret = bdrv_pread(bs->file, coffset, s->cluster_data, csize);
582         if (ret != csize)
583             return -1;
584         if (decompress_buffer(s->cluster_cache, s->cluster_size,
585                               s->cluster_data, csize) < 0) {
586             return -1;
587         }
588         s->cluster_cache_offset = coffset;
589     }
590     return 0;
591 }
592 
593 static coroutine_fn int qcow_co_readv(BlockDriverState *bs, int64_t sector_num,
594                          int nb_sectors, QEMUIOVector *qiov)
595 {
596     BDRVQcowState *s = bs->opaque;
597     int index_in_cluster;
598     int ret = 0, n;
599     uint64_t cluster_offset;
600     struct iovec hd_iov;
601     QEMUIOVector hd_qiov;
602     uint8_t *buf;
603     void *orig_buf;
604     Error *err = NULL;
605 
606     if (qiov->niov > 1) {
607         buf = orig_buf = qemu_try_blockalign(bs, qiov->size);
608         if (buf == NULL) {
609             return -ENOMEM;
610         }
611     } else {
612         orig_buf = NULL;
613         buf = (uint8_t *)qiov->iov->iov_base;
614     }
615 
616     qemu_co_mutex_lock(&s->lock);
617 
618     while (nb_sectors != 0) {
619         /* prepare next request */
620         cluster_offset = get_cluster_offset(bs, sector_num << 9,
621                                                  0, 0, 0, 0);
622         index_in_cluster = sector_num & (s->cluster_sectors - 1);
623         n = s->cluster_sectors - index_in_cluster;
624         if (n > nb_sectors) {
625             n = nb_sectors;
626         }
627 
628         if (!cluster_offset) {
629             if (bs->backing) {
630                 /* read from the base image */
631                 hd_iov.iov_base = (void *)buf;
632                 hd_iov.iov_len = n * 512;
633                 qemu_iovec_init_external(&hd_qiov, &hd_iov, 1);
634                 qemu_co_mutex_unlock(&s->lock);
635                 ret = bdrv_co_readv(bs->backing, sector_num, n, &hd_qiov);
636                 qemu_co_mutex_lock(&s->lock);
637                 if (ret < 0) {
638                     goto fail;
639                 }
640             } else {
641                 /* Note: in this case, no need to wait */
642                 memset(buf, 0, 512 * n);
643             }
644         } else if (cluster_offset & QCOW_OFLAG_COMPRESSED) {
645             /* add AIO support for compressed blocks ? */
646             if (decompress_cluster(bs, cluster_offset) < 0) {
647                 goto fail;
648             }
649             memcpy(buf,
650                    s->cluster_cache + index_in_cluster * 512, 512 * n);
651         } else {
652             if ((cluster_offset & 511) != 0) {
653                 goto fail;
654             }
655             hd_iov.iov_base = (void *)buf;
656             hd_iov.iov_len = n * 512;
657             qemu_iovec_init_external(&hd_qiov, &hd_iov, 1);
658             qemu_co_mutex_unlock(&s->lock);
659             ret = bdrv_co_readv(bs->file,
660                                 (cluster_offset >> 9) + index_in_cluster,
661                                 n, &hd_qiov);
662             qemu_co_mutex_lock(&s->lock);
663             if (ret < 0) {
664                 break;
665             }
666             if (bs->encrypted) {
667                 assert(s->cipher);
668                 if (encrypt_sectors(s, sector_num, buf, buf,
669                                     n, false, &err) < 0) {
670                     goto fail;
671                 }
672             }
673         }
674         ret = 0;
675 
676         nb_sectors -= n;
677         sector_num += n;
678         buf += n * 512;
679     }
680 
681 done:
682     qemu_co_mutex_unlock(&s->lock);
683 
684     if (qiov->niov > 1) {
685         qemu_iovec_from_buf(qiov, 0, orig_buf, qiov->size);
686         qemu_vfree(orig_buf);
687     }
688 
689     return ret;
690 
691 fail:
692     error_free(err);
693     ret = -EIO;
694     goto done;
695 }
696 
697 static coroutine_fn int qcow_co_writev(BlockDriverState *bs, int64_t sector_num,
698                           int nb_sectors, QEMUIOVector *qiov)
699 {
700     BDRVQcowState *s = bs->opaque;
701     int index_in_cluster;
702     uint64_t cluster_offset;
703     const uint8_t *src_buf;
704     int ret = 0, n;
705     uint8_t *cluster_data = NULL;
706     struct iovec hd_iov;
707     QEMUIOVector hd_qiov;
708     uint8_t *buf;
709     void *orig_buf;
710 
711     s->cluster_cache_offset = -1; /* disable compressed cache */
712 
713     if (qiov->niov > 1) {
714         buf = orig_buf = qemu_try_blockalign(bs, qiov->size);
715         if (buf == NULL) {
716             return -ENOMEM;
717         }
718         qemu_iovec_to_buf(qiov, 0, buf, qiov->size);
719     } else {
720         orig_buf = NULL;
721         buf = (uint8_t *)qiov->iov->iov_base;
722     }
723 
724     qemu_co_mutex_lock(&s->lock);
725 
726     while (nb_sectors != 0) {
727 
728         index_in_cluster = sector_num & (s->cluster_sectors - 1);
729         n = s->cluster_sectors - index_in_cluster;
730         if (n > nb_sectors) {
731             n = nb_sectors;
732         }
733         cluster_offset = get_cluster_offset(bs, sector_num << 9, 1, 0,
734                                             index_in_cluster,
735                                             index_in_cluster + n);
736         if (!cluster_offset || (cluster_offset & 511) != 0) {
737             ret = -EIO;
738             break;
739         }
740         if (bs->encrypted) {
741             Error *err = NULL;
742             assert(s->cipher);
743             if (!cluster_data) {
744                 cluster_data = g_malloc0(s->cluster_size);
745             }
746             if (encrypt_sectors(s, sector_num, cluster_data, buf,
747                                 n, true, &err) < 0) {
748                 error_free(err);
749                 ret = -EIO;
750                 break;
751             }
752             src_buf = cluster_data;
753         } else {
754             src_buf = buf;
755         }
756 
757         hd_iov.iov_base = (void *)src_buf;
758         hd_iov.iov_len = n * 512;
759         qemu_iovec_init_external(&hd_qiov, &hd_iov, 1);
760         qemu_co_mutex_unlock(&s->lock);
761         ret = bdrv_co_writev(bs->file,
762                              (cluster_offset >> 9) + index_in_cluster,
763                              n, &hd_qiov);
764         qemu_co_mutex_lock(&s->lock);
765         if (ret < 0) {
766             break;
767         }
768         ret = 0;
769 
770         nb_sectors -= n;
771         sector_num += n;
772         buf += n * 512;
773     }
774     qemu_co_mutex_unlock(&s->lock);
775 
776     if (qiov->niov > 1) {
777         qemu_vfree(orig_buf);
778     }
779     g_free(cluster_data);
780 
781     return ret;
782 }
783 
784 static void qcow_close(BlockDriverState *bs)
785 {
786     BDRVQcowState *s = bs->opaque;
787 
788     qcrypto_cipher_free(s->cipher);
789     s->cipher = NULL;
790     g_free(s->l1_table);
791     qemu_vfree(s->l2_cache);
792     g_free(s->cluster_cache);
793     g_free(s->cluster_data);
794 
795     migrate_del_blocker(s->migration_blocker);
796     error_free(s->migration_blocker);
797 }
798 
799 static int qcow_create(const char *filename, QemuOpts *opts, Error **errp)
800 {
801     int header_size, backing_filename_len, l1_size, shift, i;
802     QCowHeader header;
803     uint8_t *tmp;
804     int64_t total_size = 0;
805     char *backing_file = NULL;
806     int flags = 0;
807     Error *local_err = NULL;
808     int ret;
809     BlockBackend *qcow_blk;
810 
811     /* Read out options */
812     total_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
813                           BDRV_SECTOR_SIZE);
814     backing_file = qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FILE);
815     if (qemu_opt_get_bool_del(opts, BLOCK_OPT_ENCRYPT, false)) {
816         flags |= BLOCK_FLAG_ENCRYPT;
817     }
818 
819     ret = bdrv_create_file(filename, opts, &local_err);
820     if (ret < 0) {
821         error_propagate(errp, local_err);
822         goto cleanup;
823     }
824 
825     qcow_blk = blk_new_open(filename, NULL, NULL,
826                             BDRV_O_RDWR | BDRV_O_PROTOCOL, &local_err);
827     if (qcow_blk == NULL) {
828         error_propagate(errp, local_err);
829         ret = -EIO;
830         goto cleanup;
831     }
832 
833     blk_set_allow_write_beyond_eof(qcow_blk, true);
834 
835     ret = blk_truncate(qcow_blk, 0);
836     if (ret < 0) {
837         goto exit;
838     }
839 
840     memset(&header, 0, sizeof(header));
841     header.magic = cpu_to_be32(QCOW_MAGIC);
842     header.version = cpu_to_be32(QCOW_VERSION);
843     header.size = cpu_to_be64(total_size);
844     header_size = sizeof(header);
845     backing_filename_len = 0;
846     if (backing_file) {
847         if (strcmp(backing_file, "fat:")) {
848             header.backing_file_offset = cpu_to_be64(header_size);
849             backing_filename_len = strlen(backing_file);
850             header.backing_file_size = cpu_to_be32(backing_filename_len);
851             header_size += backing_filename_len;
852         } else {
853             /* special backing file for vvfat */
854             backing_file = NULL;
855         }
856         header.cluster_bits = 9; /* 512 byte cluster to avoid copying
857                                     unmodified sectors */
858         header.l2_bits = 12; /* 32 KB L2 tables */
859     } else {
860         header.cluster_bits = 12; /* 4 KB clusters */
861         header.l2_bits = 9; /* 4 KB L2 tables */
862     }
863     header_size = (header_size + 7) & ~7;
864     shift = header.cluster_bits + header.l2_bits;
865     l1_size = (total_size + (1LL << shift) - 1) >> shift;
866 
867     header.l1_table_offset = cpu_to_be64(header_size);
868     if (flags & BLOCK_FLAG_ENCRYPT) {
869         header.crypt_method = cpu_to_be32(QCOW_CRYPT_AES);
870     } else {
871         header.crypt_method = cpu_to_be32(QCOW_CRYPT_NONE);
872     }
873 
874     /* write all the data */
875     ret = blk_pwrite(qcow_blk, 0, &header, sizeof(header), 0);
876     if (ret != sizeof(header)) {
877         goto exit;
878     }
879 
880     if (backing_file) {
881         ret = blk_pwrite(qcow_blk, sizeof(header),
882                          backing_file, backing_filename_len, 0);
883         if (ret != backing_filename_len) {
884             goto exit;
885         }
886     }
887 
888     tmp = g_malloc0(BDRV_SECTOR_SIZE);
889     for (i = 0; i < DIV_ROUND_UP(sizeof(uint64_t) * l1_size, BDRV_SECTOR_SIZE);
890          i++) {
891         ret = blk_pwrite(qcow_blk, header_size + BDRV_SECTOR_SIZE * i,
892                          tmp, BDRV_SECTOR_SIZE, 0);
893         if (ret != BDRV_SECTOR_SIZE) {
894             g_free(tmp);
895             goto exit;
896         }
897     }
898 
899     g_free(tmp);
900     ret = 0;
901 exit:
902     blk_unref(qcow_blk);
903 cleanup:
904     g_free(backing_file);
905     return ret;
906 }
907 
908 static int qcow_make_empty(BlockDriverState *bs)
909 {
910     BDRVQcowState *s = bs->opaque;
911     uint32_t l1_length = s->l1_size * sizeof(uint64_t);
912     int ret;
913 
914     memset(s->l1_table, 0, l1_length);
915     if (bdrv_pwrite_sync(bs->file, s->l1_table_offset, s->l1_table,
916             l1_length) < 0)
917         return -1;
918     ret = bdrv_truncate(bs->file, s->l1_table_offset + l1_length);
919     if (ret < 0)
920         return ret;
921 
922     memset(s->l2_cache, 0, s->l2_size * L2_CACHE_SIZE * sizeof(uint64_t));
923     memset(s->l2_cache_offsets, 0, L2_CACHE_SIZE * sizeof(uint64_t));
924     memset(s->l2_cache_counts, 0, L2_CACHE_SIZE * sizeof(uint32_t));
925 
926     return 0;
927 }
928 
929 /* XXX: put compressed sectors first, then all the cluster aligned
930    tables to avoid losing bytes in alignment */
931 static coroutine_fn int
932 qcow_co_pwritev_compressed(BlockDriverState *bs, uint64_t offset,
933                            uint64_t bytes, QEMUIOVector *qiov)
934 {
935     BDRVQcowState *s = bs->opaque;
936     QEMUIOVector hd_qiov;
937     struct iovec iov;
938     z_stream strm;
939     int ret, out_len;
940     uint8_t *buf, *out_buf;
941     uint64_t cluster_offset;
942 
943     buf = qemu_blockalign(bs, s->cluster_size);
944     if (bytes != s->cluster_size) {
945         if (bytes > s->cluster_size ||
946             offset + bytes != bs->total_sectors << BDRV_SECTOR_BITS)
947         {
948             qemu_vfree(buf);
949             return -EINVAL;
950         }
951         /* Zero-pad last write if image size is not cluster aligned */
952         memset(buf + bytes, 0, s->cluster_size - bytes);
953     }
954     qemu_iovec_to_buf(qiov, 0, buf, qiov->size);
955 
956     out_buf = g_malloc(s->cluster_size);
957 
958     /* best compression, small window, no zlib header */
959     memset(&strm, 0, sizeof(strm));
960     ret = deflateInit2(&strm, Z_DEFAULT_COMPRESSION,
961                        Z_DEFLATED, -12,
962                        9, Z_DEFAULT_STRATEGY);
963     if (ret != 0) {
964         ret = -EINVAL;
965         goto fail;
966     }
967 
968     strm.avail_in = s->cluster_size;
969     strm.next_in = (uint8_t *)buf;
970     strm.avail_out = s->cluster_size;
971     strm.next_out = out_buf;
972 
973     ret = deflate(&strm, Z_FINISH);
974     if (ret != Z_STREAM_END && ret != Z_OK) {
975         deflateEnd(&strm);
976         ret = -EINVAL;
977         goto fail;
978     }
979     out_len = strm.next_out - out_buf;
980 
981     deflateEnd(&strm);
982 
983     if (ret != Z_STREAM_END || out_len >= s->cluster_size) {
984         /* could not compress: write normal cluster */
985         ret = qcow_co_writev(bs, offset >> BDRV_SECTOR_BITS,
986                              bytes >> BDRV_SECTOR_BITS, qiov);
987         if (ret < 0) {
988             goto fail;
989         }
990         goto success;
991     }
992     qemu_co_mutex_lock(&s->lock);
993     cluster_offset = get_cluster_offset(bs, offset, 2, out_len, 0, 0);
994     qemu_co_mutex_unlock(&s->lock);
995     if (cluster_offset == 0) {
996         ret = -EIO;
997         goto fail;
998     }
999     cluster_offset &= s->cluster_offset_mask;
1000 
1001     iov = (struct iovec) {
1002         .iov_base   = out_buf,
1003         .iov_len    = out_len,
1004     };
1005     qemu_iovec_init_external(&hd_qiov, &iov, 1);
1006     ret = bdrv_co_pwritev(bs->file, cluster_offset, out_len, &hd_qiov, 0);
1007     if (ret < 0) {
1008         goto fail;
1009     }
1010 success:
1011     ret = 0;
1012 fail:
1013     qemu_vfree(buf);
1014     g_free(out_buf);
1015     return ret;
1016 }
1017 
1018 static int qcow_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
1019 {
1020     BDRVQcowState *s = bs->opaque;
1021     bdi->cluster_size = s->cluster_size;
1022     return 0;
1023 }
1024 
1025 static QemuOptsList qcow_create_opts = {
1026     .name = "qcow-create-opts",
1027     .head = QTAILQ_HEAD_INITIALIZER(qcow_create_opts.head),
1028     .desc = {
1029         {
1030             .name = BLOCK_OPT_SIZE,
1031             .type = QEMU_OPT_SIZE,
1032             .help = "Virtual disk size"
1033         },
1034         {
1035             .name = BLOCK_OPT_BACKING_FILE,
1036             .type = QEMU_OPT_STRING,
1037             .help = "File name of a base image"
1038         },
1039         {
1040             .name = BLOCK_OPT_ENCRYPT,
1041             .type = QEMU_OPT_BOOL,
1042             .help = "Encrypt the image",
1043             .def_value_str = "off"
1044         },
1045         { /* end of list */ }
1046     }
1047 };
1048 
1049 static BlockDriver bdrv_qcow = {
1050     .format_name	= "qcow",
1051     .instance_size	= sizeof(BDRVQcowState),
1052     .bdrv_probe		= qcow_probe,
1053     .bdrv_open		= qcow_open,
1054     .bdrv_close		= qcow_close,
1055     .bdrv_reopen_prepare    = qcow_reopen_prepare,
1056     .bdrv_create            = qcow_create,
1057     .bdrv_has_zero_init     = bdrv_has_zero_init_1,
1058     .supports_backing       = true,
1059 
1060     .bdrv_co_readv          = qcow_co_readv,
1061     .bdrv_co_writev         = qcow_co_writev,
1062     .bdrv_co_get_block_status   = qcow_co_get_block_status,
1063 
1064     .bdrv_set_key           = qcow_set_key,
1065     .bdrv_make_empty        = qcow_make_empty,
1066     .bdrv_co_pwritev_compressed = qcow_co_pwritev_compressed,
1067     .bdrv_get_info          = qcow_get_info,
1068 
1069     .create_opts            = &qcow_create_opts,
1070 };
1071 
1072 static void bdrv_qcow_init(void)
1073 {
1074     bdrv_register(&bdrv_qcow);
1075 }
1076 
1077 block_init(bdrv_qcow_init);
1078