]> Git Repo - qemu.git/blob - block/qcow.c
block/crypto: Simplify block_crypto_{open,create}_opts_init()
[qemu.git] / block / qcow.c
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
25 #include "qemu/osdep.h"
26 #include "qapi/error.h"
27 #include "qemu/error-report.h"
28 #include "block/block_int.h"
29 #include "block/qdict.h"
30 #include "sysemu/block-backend.h"
31 #include "qemu/module.h"
32 #include "qemu/option.h"
33 #include "qemu/bswap.h"
34 #include <zlib.h>
35 #include "qapi/qmp/qdict.h"
36 #include "qapi/qmp/qstring.h"
37 #include "qapi/qobject-input-visitor.h"
38 #include "qapi/qapi-visit-block-core.h"
39 #include "crypto/block.h"
40 #include "migration/blocker.h"
41 #include "crypto.h"
42
43 /**************************************************************/
44 /* QEMU COW block driver with compression and encryption support */
45
46 #define QCOW_MAGIC (('Q' << 24) | ('F' << 16) | ('I' << 8) | 0xfb)
47 #define QCOW_VERSION 1
48
49 #define QCOW_CRYPT_NONE 0
50 #define QCOW_CRYPT_AES  1
51
52 #define QCOW_OFLAG_COMPRESSED (1LL << 63)
53
54 typedef struct QCowHeader {
55     uint32_t magic;
56     uint32_t version;
57     uint64_t backing_file_offset;
58     uint32_t backing_file_size;
59     uint32_t mtime;
60     uint64_t size; /* in bytes */
61     uint8_t cluster_bits;
62     uint8_t l2_bits;
63     uint16_t padding;
64     uint32_t crypt_method;
65     uint64_t l1_table_offset;
66 } QEMU_PACKED QCowHeader;
67
68 #define L2_CACHE_SIZE 16
69
70 typedef struct BDRVQcowState {
71     int cluster_bits;
72     int cluster_size;
73     int cluster_sectors;
74     int l2_bits;
75     int l2_size;
76     unsigned int l1_size;
77     uint64_t cluster_offset_mask;
78     uint64_t l1_table_offset;
79     uint64_t *l1_table;
80     uint64_t *l2_cache;
81     uint64_t l2_cache_offsets[L2_CACHE_SIZE];
82     uint32_t l2_cache_counts[L2_CACHE_SIZE];
83     uint8_t *cluster_cache;
84     uint8_t *cluster_data;
85     uint64_t cluster_cache_offset;
86     QCryptoBlock *crypto; /* Disk encryption format driver */
87     uint32_t crypt_method_header;
88     CoMutex lock;
89     Error *migration_blocker;
90 } BDRVQcowState;
91
92 static QemuOptsList qcow_create_opts;
93
94 static int decompress_cluster(BlockDriverState *bs, uint64_t cluster_offset);
95
96 static int qcow_probe(const uint8_t *buf, int buf_size, const char *filename)
97 {
98     const QCowHeader *cow_header = (const void *)buf;
99
100     if (buf_size >= sizeof(QCowHeader) &&
101         be32_to_cpu(cow_header->magic) == QCOW_MAGIC &&
102         be32_to_cpu(cow_header->version) == QCOW_VERSION)
103         return 100;
104     else
105         return 0;
106 }
107
108 static QemuOptsList qcow_runtime_opts = {
109     .name = "qcow",
110     .head = QTAILQ_HEAD_INITIALIZER(qcow_runtime_opts.head),
111     .desc = {
112         BLOCK_CRYPTO_OPT_DEF_QCOW_KEY_SECRET("encrypt."),
113         { /* end of list */ }
114     },
115 };
116
117 static int qcow_open(BlockDriverState *bs, QDict *options, int flags,
118                      Error **errp)
119 {
120     BDRVQcowState *s = bs->opaque;
121     unsigned int len, i, shift;
122     int ret;
123     QCowHeader header;
124     Error *local_err = NULL;
125     QCryptoBlockOpenOptions *crypto_opts = NULL;
126     unsigned int cflags = 0;
127     QDict *encryptopts = NULL;
128     const char *encryptfmt;
129
130     qdict_extract_subqdict(options, &encryptopts, "encrypt.");
131     encryptfmt = qdict_get_try_str(encryptopts, "format");
132
133     bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
134                                false, errp);
135     if (!bs->file) {
136         ret = -EINVAL;
137         goto fail;
138     }
139
140     ret = bdrv_pread(bs->file, 0, &header, sizeof(header));
141     if (ret < 0) {
142         goto fail;
143     }
144     be32_to_cpus(&header.magic);
145     be32_to_cpus(&header.version);
146     be64_to_cpus(&header.backing_file_offset);
147     be32_to_cpus(&header.backing_file_size);
148     be32_to_cpus(&header.mtime);
149     be64_to_cpus(&header.size);
150     be32_to_cpus(&header.crypt_method);
151     be64_to_cpus(&header.l1_table_offset);
152
153     if (header.magic != QCOW_MAGIC) {
154         error_setg(errp, "Image not in qcow format");
155         ret = -EINVAL;
156         goto fail;
157     }
158     if (header.version != QCOW_VERSION) {
159         error_setg(errp, "Unsupported qcow version %" PRIu32, header.version);
160         ret = -ENOTSUP;
161         goto fail;
162     }
163
164     if (header.size <= 1) {
165         error_setg(errp, "Image size is too small (must be at least 2 bytes)");
166         ret = -EINVAL;
167         goto fail;
168     }
169     if (header.cluster_bits < 9 || header.cluster_bits > 16) {
170         error_setg(errp, "Cluster size must be between 512 and 64k");
171         ret = -EINVAL;
172         goto fail;
173     }
174
175     /* l2_bits specifies number of entries; storing a uint64_t in each entry,
176      * so bytes = num_entries << 3. */
177     if (header.l2_bits < 9 - 3 || header.l2_bits > 16 - 3) {
178         error_setg(errp, "L2 table size must be between 512 and 64k");
179         ret = -EINVAL;
180         goto fail;
181     }
182
183     s->crypt_method_header = header.crypt_method;
184     if (s->crypt_method_header) {
185         if (bdrv_uses_whitelist() &&
186             s->crypt_method_header == QCOW_CRYPT_AES) {
187             error_setg(errp,
188                        "Use of AES-CBC encrypted qcow images is no longer "
189                        "supported in system emulators");
190             error_append_hint(errp,
191                               "You can use 'qemu-img convert' to convert your "
192                               "image to an alternative supported format, such "
193                               "as unencrypted qcow, or raw with the LUKS "
194                               "format instead.\n");
195             ret = -ENOSYS;
196             goto fail;
197         }
198         if (s->crypt_method_header == QCOW_CRYPT_AES) {
199             if (encryptfmt && !g_str_equal(encryptfmt, "aes")) {
200                 error_setg(errp,
201                            "Header reported 'aes' encryption format but "
202                            "options specify '%s'", encryptfmt);
203                 ret = -EINVAL;
204                 goto fail;
205             }
206             qdict_put_str(encryptopts, "format", "qcow");
207             crypto_opts = block_crypto_open_opts_init(encryptopts, errp);
208             if (!crypto_opts) {
209                 ret = -EINVAL;
210                 goto fail;
211             }
212
213             if (flags & BDRV_O_NO_IO) {
214                 cflags |= QCRYPTO_BLOCK_OPEN_NO_IO;
215             }
216             s->crypto = qcrypto_block_open(crypto_opts, "encrypt.",
217                                            NULL, NULL, cflags, errp);
218             if (!s->crypto) {
219                 ret = -EINVAL;
220                 goto fail;
221             }
222         } else {
223             error_setg(errp, "invalid encryption method in qcow header");
224             ret = -EINVAL;
225             goto fail;
226         }
227         bs->encrypted = true;
228     } else {
229         if (encryptfmt) {
230             error_setg(errp, "No encryption in image header, but options "
231                        "specified format '%s'", encryptfmt);
232             ret = -EINVAL;
233             goto fail;
234         }
235     }
236     s->cluster_bits = header.cluster_bits;
237     s->cluster_size = 1 << s->cluster_bits;
238     s->cluster_sectors = 1 << (s->cluster_bits - 9);
239     s->l2_bits = header.l2_bits;
240     s->l2_size = 1 << s->l2_bits;
241     bs->total_sectors = header.size / 512;
242     s->cluster_offset_mask = (1LL << (63 - s->cluster_bits)) - 1;
243
244     /* read the level 1 table */
245     shift = s->cluster_bits + s->l2_bits;
246     if (header.size > UINT64_MAX - (1LL << shift)) {
247         error_setg(errp, "Image too large");
248         ret = -EINVAL;
249         goto fail;
250     } else {
251         uint64_t l1_size = (header.size + (1LL << shift) - 1) >> shift;
252         if (l1_size > INT_MAX / sizeof(uint64_t)) {
253             error_setg(errp, "Image too large");
254             ret = -EINVAL;
255             goto fail;
256         }
257         s->l1_size = l1_size;
258     }
259
260     s->l1_table_offset = header.l1_table_offset;
261     s->l1_table = g_try_new(uint64_t, s->l1_size);
262     if (s->l1_table == NULL) {
263         error_setg(errp, "Could not allocate memory for L1 table");
264         ret = -ENOMEM;
265         goto fail;
266     }
267
268     ret = bdrv_pread(bs->file, s->l1_table_offset, s->l1_table,
269                s->l1_size * sizeof(uint64_t));
270     if (ret < 0) {
271         goto fail;
272     }
273
274     for(i = 0;i < s->l1_size; i++) {
275         be64_to_cpus(&s->l1_table[i]);
276     }
277
278     /* alloc L2 cache (max. 64k * 16 * 8 = 8 MB) */
279     s->l2_cache =
280         qemu_try_blockalign(bs->file->bs,
281                             s->l2_size * L2_CACHE_SIZE * sizeof(uint64_t));
282     if (s->l2_cache == NULL) {
283         error_setg(errp, "Could not allocate L2 table cache");
284         ret = -ENOMEM;
285         goto fail;
286     }
287     s->cluster_cache = g_malloc(s->cluster_size);
288     s->cluster_data = g_malloc(s->cluster_size);
289     s->cluster_cache_offset = -1;
290
291     /* read the backing file name */
292     if (header.backing_file_offset != 0) {
293         len = header.backing_file_size;
294         if (len > 1023 || len >= sizeof(bs->backing_file)) {
295             error_setg(errp, "Backing file name too long");
296             ret = -EINVAL;
297             goto fail;
298         }
299         ret = bdrv_pread(bs->file, header.backing_file_offset,
300                    bs->backing_file, len);
301         if (ret < 0) {
302             goto fail;
303         }
304         bs->backing_file[len] = '\0';
305     }
306
307     /* Disable migration when qcow images are used */
308     error_setg(&s->migration_blocker, "The qcow format used by node '%s' "
309                "does not support live migration",
310                bdrv_get_device_or_node_name(bs));
311     ret = migrate_add_blocker(s->migration_blocker, &local_err);
312     if (local_err) {
313         error_propagate(errp, local_err);
314         error_free(s->migration_blocker);
315         goto fail;
316     }
317
318     qobject_unref(encryptopts);
319     qapi_free_QCryptoBlockOpenOptions(crypto_opts);
320     qemu_co_mutex_init(&s->lock);
321     return 0;
322
323  fail:
324     g_free(s->l1_table);
325     qemu_vfree(s->l2_cache);
326     g_free(s->cluster_cache);
327     g_free(s->cluster_data);
328     qcrypto_block_free(s->crypto);
329     qobject_unref(encryptopts);
330     qapi_free_QCryptoBlockOpenOptions(crypto_opts);
331     return ret;
332 }
333
334
335 /* We have nothing to do for QCOW reopen, stubs just return
336  * success */
337 static int qcow_reopen_prepare(BDRVReopenState *state,
338                                BlockReopenQueue *queue, Error **errp)
339 {
340     return 0;
341 }
342
343
344 /* 'allocate' is:
345  *
346  * 0 to not allocate.
347  *
348  * 1 to allocate a normal cluster (for sector indexes 'n_start' to
349  * 'n_end')
350  *
351  * 2 to allocate a compressed cluster of size
352  * 'compressed_size'. 'compressed_size' must be > 0 and <
353  * cluster_size
354  *
355  * return 0 if not allocated, 1 if *result is assigned, and negative
356  * errno on failure.
357  */
358 static int get_cluster_offset(BlockDriverState *bs,
359                               uint64_t offset, int allocate,
360                               int compressed_size,
361                               int n_start, int n_end, uint64_t *result)
362 {
363     BDRVQcowState *s = bs->opaque;
364     int min_index, i, j, l1_index, l2_index, ret;
365     int64_t l2_offset;
366     uint64_t *l2_table, cluster_offset, tmp;
367     uint32_t min_count;
368     int new_l2_table;
369
370     *result = 0;
371     l1_index = offset >> (s->l2_bits + s->cluster_bits);
372     l2_offset = s->l1_table[l1_index];
373     new_l2_table = 0;
374     if (!l2_offset) {
375         if (!allocate)
376             return 0;
377         /* allocate a new l2 entry */
378         l2_offset = bdrv_getlength(bs->file->bs);
379         if (l2_offset < 0) {
380             return l2_offset;
381         }
382         /* round to cluster size */
383         l2_offset = QEMU_ALIGN_UP(l2_offset, s->cluster_size);
384         /* update the L1 entry */
385         s->l1_table[l1_index] = l2_offset;
386         tmp = cpu_to_be64(l2_offset);
387         BLKDBG_EVENT(bs->file, BLKDBG_L1_UPDATE);
388         ret = bdrv_pwrite_sync(bs->file,
389                                s->l1_table_offset + l1_index * sizeof(tmp),
390                                &tmp, sizeof(tmp));
391         if (ret < 0) {
392             return ret;
393         }
394         new_l2_table = 1;
395     }
396     for(i = 0; i < L2_CACHE_SIZE; i++) {
397         if (l2_offset == s->l2_cache_offsets[i]) {
398             /* increment the hit count */
399             if (++s->l2_cache_counts[i] == 0xffffffff) {
400                 for(j = 0; j < L2_CACHE_SIZE; j++) {
401                     s->l2_cache_counts[j] >>= 1;
402                 }
403             }
404             l2_table = s->l2_cache + (i << s->l2_bits);
405             goto found;
406         }
407     }
408     /* not found: load a new entry in the least used one */
409     min_index = 0;
410     min_count = 0xffffffff;
411     for(i = 0; i < L2_CACHE_SIZE; i++) {
412         if (s->l2_cache_counts[i] < min_count) {
413             min_count = s->l2_cache_counts[i];
414             min_index = i;
415         }
416     }
417     l2_table = s->l2_cache + (min_index << s->l2_bits);
418     BLKDBG_EVENT(bs->file, BLKDBG_L2_LOAD);
419     if (new_l2_table) {
420         memset(l2_table, 0, s->l2_size * sizeof(uint64_t));
421         ret = bdrv_pwrite_sync(bs->file, l2_offset, l2_table,
422                                s->l2_size * sizeof(uint64_t));
423         if (ret < 0) {
424             return ret;
425         }
426     } else {
427         ret = bdrv_pread(bs->file, l2_offset, l2_table,
428                          s->l2_size * sizeof(uint64_t));
429         if (ret < 0) {
430             return ret;
431         }
432     }
433     s->l2_cache_offsets[min_index] = l2_offset;
434     s->l2_cache_counts[min_index] = 1;
435  found:
436     l2_index = (offset >> s->cluster_bits) & (s->l2_size - 1);
437     cluster_offset = be64_to_cpu(l2_table[l2_index]);
438     if (!cluster_offset ||
439         ((cluster_offset & QCOW_OFLAG_COMPRESSED) && allocate == 1)) {
440         if (!allocate)
441             return 0;
442         BLKDBG_EVENT(bs->file, BLKDBG_CLUSTER_ALLOC);
443         /* allocate a new cluster */
444         if ((cluster_offset & QCOW_OFLAG_COMPRESSED) &&
445             (n_end - n_start) < s->cluster_sectors) {
446             /* if the cluster is already compressed, we must
447                decompress it in the case it is not completely
448                overwritten */
449             if (decompress_cluster(bs, cluster_offset) < 0) {
450                 return -EIO;
451             }
452             cluster_offset = bdrv_getlength(bs->file->bs);
453             if ((int64_t) cluster_offset < 0) {
454                 return cluster_offset;
455             }
456             cluster_offset = QEMU_ALIGN_UP(cluster_offset, s->cluster_size);
457             /* write the cluster content */
458             BLKDBG_EVENT(bs->file, BLKDBG_WRITE_AIO);
459             ret = bdrv_pwrite(bs->file, cluster_offset, s->cluster_cache,
460                               s->cluster_size);
461             if (ret < 0) {
462                 return ret;
463             }
464         } else {
465             cluster_offset = bdrv_getlength(bs->file->bs);
466             if ((int64_t) cluster_offset < 0) {
467                 return cluster_offset;
468             }
469             if (allocate == 1) {
470                 /* round to cluster size */
471                 cluster_offset = QEMU_ALIGN_UP(cluster_offset, s->cluster_size);
472                 if (cluster_offset + s->cluster_size > INT64_MAX) {
473                     return -E2BIG;
474                 }
475                 ret = bdrv_truncate(bs->file, cluster_offset + s->cluster_size,
476                                     PREALLOC_MODE_OFF, NULL);
477                 if (ret < 0) {
478                     return ret;
479                 }
480                 /* if encrypted, we must initialize the cluster
481                    content which won't be written */
482                 if (bs->encrypted &&
483                     (n_end - n_start) < s->cluster_sectors) {
484                     uint64_t start_sect;
485                     assert(s->crypto);
486                     start_sect = (offset & ~(s->cluster_size - 1)) >> 9;
487                     for(i = 0; i < s->cluster_sectors; i++) {
488                         if (i < n_start || i >= n_end) {
489                             memset(s->cluster_data, 0x00, 512);
490                             if (qcrypto_block_encrypt(s->crypto,
491                                                       (start_sect + i) *
492                                                       BDRV_SECTOR_SIZE,
493                                                       s->cluster_data,
494                                                       BDRV_SECTOR_SIZE,
495                                                       NULL) < 0) {
496                                 return -EIO;
497                             }
498                             BLKDBG_EVENT(bs->file, BLKDBG_WRITE_AIO);
499                             ret = bdrv_pwrite(bs->file,
500                                               cluster_offset + i * 512,
501                                               s->cluster_data, 512);
502                             if (ret < 0) {
503                                 return ret;
504                             }
505                         }
506                     }
507                 }
508             } else if (allocate == 2) {
509                 cluster_offset |= QCOW_OFLAG_COMPRESSED |
510                     (uint64_t)compressed_size << (63 - s->cluster_bits);
511             }
512         }
513         /* update L2 table */
514         tmp = cpu_to_be64(cluster_offset);
515         l2_table[l2_index] = tmp;
516         if (allocate == 2) {
517             BLKDBG_EVENT(bs->file, BLKDBG_L2_UPDATE_COMPRESSED);
518         } else {
519             BLKDBG_EVENT(bs->file, BLKDBG_L2_UPDATE);
520         }
521         ret = bdrv_pwrite_sync(bs->file, l2_offset + l2_index * sizeof(tmp),
522                                &tmp, sizeof(tmp));
523         if (ret < 0) {
524             return ret;
525         }
526     }
527     *result = cluster_offset;
528     return 1;
529 }
530
531 static int coroutine_fn qcow_co_block_status(BlockDriverState *bs,
532                                              bool want_zero,
533                                              int64_t offset, int64_t bytes,
534                                              int64_t *pnum, int64_t *map,
535                                              BlockDriverState **file)
536 {
537     BDRVQcowState *s = bs->opaque;
538     int index_in_cluster, ret;
539     int64_t n;
540     uint64_t cluster_offset;
541
542     qemu_co_mutex_lock(&s->lock);
543     ret = get_cluster_offset(bs, offset, 0, 0, 0, 0, &cluster_offset);
544     qemu_co_mutex_unlock(&s->lock);
545     if (ret < 0) {
546         return ret;
547     }
548     index_in_cluster = offset & (s->cluster_size - 1);
549     n = s->cluster_size - index_in_cluster;
550     if (n > bytes) {
551         n = bytes;
552     }
553     *pnum = n;
554     if (!cluster_offset) {
555         return 0;
556     }
557     if ((cluster_offset & QCOW_OFLAG_COMPRESSED) || s->crypto) {
558         return BDRV_BLOCK_DATA;
559     }
560     *map = cluster_offset | index_in_cluster;
561     *file = bs->file->bs;
562     return BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID;
563 }
564
565 static int decompress_buffer(uint8_t *out_buf, int out_buf_size,
566                              const uint8_t *buf, int buf_size)
567 {
568     z_stream strm1, *strm = &strm1;
569     int ret, out_len;
570
571     memset(strm, 0, sizeof(*strm));
572
573     strm->next_in = (uint8_t *)buf;
574     strm->avail_in = buf_size;
575     strm->next_out = out_buf;
576     strm->avail_out = out_buf_size;
577
578     ret = inflateInit2(strm, -12);
579     if (ret != Z_OK)
580         return -1;
581     ret = inflate(strm, Z_FINISH);
582     out_len = strm->next_out - out_buf;
583     if ((ret != Z_STREAM_END && ret != Z_BUF_ERROR) ||
584         out_len != out_buf_size) {
585         inflateEnd(strm);
586         return -1;
587     }
588     inflateEnd(strm);
589     return 0;
590 }
591
592 static int decompress_cluster(BlockDriverState *bs, uint64_t cluster_offset)
593 {
594     BDRVQcowState *s = bs->opaque;
595     int ret, csize;
596     uint64_t coffset;
597
598     coffset = cluster_offset & s->cluster_offset_mask;
599     if (s->cluster_cache_offset != coffset) {
600         csize = cluster_offset >> (63 - s->cluster_bits);
601         csize &= (s->cluster_size - 1);
602         BLKDBG_EVENT(bs->file, BLKDBG_READ_COMPRESSED);
603         ret = bdrv_pread(bs->file, coffset, s->cluster_data, csize);
604         if (ret != csize)
605             return -1;
606         if (decompress_buffer(s->cluster_cache, s->cluster_size,
607                               s->cluster_data, csize) < 0) {
608             return -1;
609         }
610         s->cluster_cache_offset = coffset;
611     }
612     return 0;
613 }
614
615 static coroutine_fn int qcow_co_readv(BlockDriverState *bs, int64_t sector_num,
616                          int nb_sectors, QEMUIOVector *qiov)
617 {
618     BDRVQcowState *s = bs->opaque;
619     int index_in_cluster;
620     int ret = 0, n;
621     uint64_t cluster_offset;
622     struct iovec hd_iov;
623     QEMUIOVector hd_qiov;
624     uint8_t *buf;
625     void *orig_buf;
626
627     if (qiov->niov > 1) {
628         buf = orig_buf = qemu_try_blockalign(bs, qiov->size);
629         if (buf == NULL) {
630             return -ENOMEM;
631         }
632     } else {
633         orig_buf = NULL;
634         buf = (uint8_t *)qiov->iov->iov_base;
635     }
636
637     qemu_co_mutex_lock(&s->lock);
638
639     while (nb_sectors != 0) {
640         /* prepare next request */
641         ret = get_cluster_offset(bs, sector_num << 9,
642                                  0, 0, 0, 0, &cluster_offset);
643         if (ret < 0) {
644             break;
645         }
646         index_in_cluster = sector_num & (s->cluster_sectors - 1);
647         n = s->cluster_sectors - index_in_cluster;
648         if (n > nb_sectors) {
649             n = nb_sectors;
650         }
651
652         if (!cluster_offset) {
653             if (bs->backing) {
654                 /* read from the base image */
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                 /* qcow2 emits this on bs->file instead of bs->backing */
660                 BLKDBG_EVENT(bs->file, BLKDBG_READ_BACKING_AIO);
661                 ret = bdrv_co_readv(bs->backing, sector_num, n, &hd_qiov);
662                 qemu_co_mutex_lock(&s->lock);
663                 if (ret < 0) {
664                     break;
665                 }
666             } else {
667                 /* Note: in this case, no need to wait */
668                 memset(buf, 0, 512 * n);
669             }
670         } else if (cluster_offset & QCOW_OFLAG_COMPRESSED) {
671             /* add AIO support for compressed blocks ? */
672             if (decompress_cluster(bs, cluster_offset) < 0) {
673                 ret = -EIO;
674                 break;
675             }
676             memcpy(buf,
677                    s->cluster_cache + index_in_cluster * 512, 512 * n);
678         } else {
679             if ((cluster_offset & 511) != 0) {
680                 ret = -EIO;
681                 break;
682             }
683             hd_iov.iov_base = (void *)buf;
684             hd_iov.iov_len = n * 512;
685             qemu_iovec_init_external(&hd_qiov, &hd_iov, 1);
686             qemu_co_mutex_unlock(&s->lock);
687             BLKDBG_EVENT(bs->file, BLKDBG_READ_AIO);
688             ret = bdrv_co_readv(bs->file,
689                                 (cluster_offset >> 9) + index_in_cluster,
690                                 n, &hd_qiov);
691             qemu_co_mutex_lock(&s->lock);
692             if (ret < 0) {
693                 break;
694             }
695             if (bs->encrypted) {
696                 assert(s->crypto);
697                 if (qcrypto_block_decrypt(s->crypto,
698                                           sector_num * BDRV_SECTOR_SIZE, buf,
699                                           n * BDRV_SECTOR_SIZE, NULL) < 0) {
700                     ret = -EIO;
701                     break;
702                 }
703             }
704         }
705         ret = 0;
706
707         nb_sectors -= n;
708         sector_num += n;
709         buf += n * 512;
710     }
711
712     qemu_co_mutex_unlock(&s->lock);
713
714     if (qiov->niov > 1) {
715         qemu_iovec_from_buf(qiov, 0, orig_buf, qiov->size);
716         qemu_vfree(orig_buf);
717     }
718
719     return ret;
720 }
721
722 static coroutine_fn int qcow_co_writev(BlockDriverState *bs, int64_t sector_num,
723                                        int nb_sectors, QEMUIOVector *qiov,
724                                        int flags)
725 {
726     BDRVQcowState *s = bs->opaque;
727     int index_in_cluster;
728     uint64_t cluster_offset;
729     int ret = 0, n;
730     struct iovec hd_iov;
731     QEMUIOVector hd_qiov;
732     uint8_t *buf;
733     void *orig_buf;
734
735     assert(!flags);
736     s->cluster_cache_offset = -1; /* disable compressed cache */
737
738     /* We must always copy the iov when encrypting, so we
739      * don't modify the original data buffer during encryption */
740     if (bs->encrypted || qiov->niov > 1) {
741         buf = orig_buf = qemu_try_blockalign(bs, qiov->size);
742         if (buf == NULL) {
743             return -ENOMEM;
744         }
745         qemu_iovec_to_buf(qiov, 0, buf, qiov->size);
746     } else {
747         orig_buf = NULL;
748         buf = (uint8_t *)qiov->iov->iov_base;
749     }
750
751     qemu_co_mutex_lock(&s->lock);
752
753     while (nb_sectors != 0) {
754
755         index_in_cluster = sector_num & (s->cluster_sectors - 1);
756         n = s->cluster_sectors - index_in_cluster;
757         if (n > nb_sectors) {
758             n = nb_sectors;
759         }
760         ret = get_cluster_offset(bs, sector_num << 9, 1, 0,
761                                  index_in_cluster,
762                                  index_in_cluster + n, &cluster_offset);
763         if (ret < 0) {
764             break;
765         }
766         if (!cluster_offset || (cluster_offset & 511) != 0) {
767             ret = -EIO;
768             break;
769         }
770         if (bs->encrypted) {
771             assert(s->crypto);
772             if (qcrypto_block_encrypt(s->crypto, sector_num * BDRV_SECTOR_SIZE,
773                                       buf, n * BDRV_SECTOR_SIZE, NULL) < 0) {
774                 ret = -EIO;
775                 break;
776             }
777         }
778
779         hd_iov.iov_base = (void *)buf;
780         hd_iov.iov_len = n * 512;
781         qemu_iovec_init_external(&hd_qiov, &hd_iov, 1);
782         qemu_co_mutex_unlock(&s->lock);
783         BLKDBG_EVENT(bs->file, BLKDBG_WRITE_AIO);
784         ret = bdrv_co_writev(bs->file,
785                              (cluster_offset >> 9) + index_in_cluster,
786                              n, &hd_qiov);
787         qemu_co_mutex_lock(&s->lock);
788         if (ret < 0) {
789             break;
790         }
791         ret = 0;
792
793         nb_sectors -= n;
794         sector_num += n;
795         buf += n * 512;
796     }
797     qemu_co_mutex_unlock(&s->lock);
798
799     qemu_vfree(orig_buf);
800
801     return ret;
802 }
803
804 static void qcow_close(BlockDriverState *bs)
805 {
806     BDRVQcowState *s = bs->opaque;
807
808     qcrypto_block_free(s->crypto);
809     s->crypto = NULL;
810     g_free(s->l1_table);
811     qemu_vfree(s->l2_cache);
812     g_free(s->cluster_cache);
813     g_free(s->cluster_data);
814
815     migrate_del_blocker(s->migration_blocker);
816     error_free(s->migration_blocker);
817 }
818
819 static int coroutine_fn qcow_co_create(BlockdevCreateOptions *opts,
820                                        Error **errp)
821 {
822     BlockdevCreateOptionsQcow *qcow_opts;
823     int header_size, backing_filename_len, l1_size, shift, i;
824     QCowHeader header;
825     uint8_t *tmp;
826     int64_t total_size = 0;
827     int ret;
828     BlockDriverState *bs;
829     BlockBackend *qcow_blk;
830     QCryptoBlock *crypto = NULL;
831
832     assert(opts->driver == BLOCKDEV_DRIVER_QCOW);
833     qcow_opts = &opts->u.qcow;
834
835     /* Sanity checks */
836     total_size = qcow_opts->size;
837     if (total_size == 0) {
838         error_setg(errp, "Image size is too small, cannot be zero length");
839         return -EINVAL;
840     }
841
842     if (qcow_opts->has_encrypt &&
843         qcow_opts->encrypt->format != Q_CRYPTO_BLOCK_FORMAT_QCOW)
844     {
845         error_setg(errp, "Unsupported encryption format");
846         return -EINVAL;
847     }
848
849     /* Create BlockBackend to write to the image */
850     bs = bdrv_open_blockdev_ref(qcow_opts->file, errp);
851     if (bs == NULL) {
852         return -EIO;
853     }
854
855     qcow_blk = blk_new(BLK_PERM_WRITE | BLK_PERM_RESIZE, BLK_PERM_ALL);
856     ret = blk_insert_bs(qcow_blk, bs, errp);
857     if (ret < 0) {
858         goto exit;
859     }
860     blk_set_allow_write_beyond_eof(qcow_blk, true);
861
862     /* Create image format */
863     ret = blk_truncate(qcow_blk, 0, PREALLOC_MODE_OFF, errp);
864     if (ret < 0) {
865         goto exit;
866     }
867
868     memset(&header, 0, sizeof(header));
869     header.magic = cpu_to_be32(QCOW_MAGIC);
870     header.version = cpu_to_be32(QCOW_VERSION);
871     header.size = cpu_to_be64(total_size);
872     header_size = sizeof(header);
873     backing_filename_len = 0;
874     if (qcow_opts->has_backing_file) {
875         if (strcmp(qcow_opts->backing_file, "fat:")) {
876             header.backing_file_offset = cpu_to_be64(header_size);
877             backing_filename_len = strlen(qcow_opts->backing_file);
878             header.backing_file_size = cpu_to_be32(backing_filename_len);
879             header_size += backing_filename_len;
880         } else {
881             /* special backing file for vvfat */
882             qcow_opts->has_backing_file = false;
883         }
884         header.cluster_bits = 9; /* 512 byte cluster to avoid copying
885                                     unmodified sectors */
886         header.l2_bits = 12; /* 32 KB L2 tables */
887     } else {
888         header.cluster_bits = 12; /* 4 KB clusters */
889         header.l2_bits = 9; /* 4 KB L2 tables */
890     }
891     header_size = (header_size + 7) & ~7;
892     shift = header.cluster_bits + header.l2_bits;
893     l1_size = (total_size + (1LL << shift) - 1) >> shift;
894
895     header.l1_table_offset = cpu_to_be64(header_size);
896
897     if (qcow_opts->has_encrypt) {
898         header.crypt_method = cpu_to_be32(QCOW_CRYPT_AES);
899
900         crypto = qcrypto_block_create(qcow_opts->encrypt, "encrypt.",
901                                       NULL, NULL, NULL, errp);
902         if (!crypto) {
903             ret = -EINVAL;
904             goto exit;
905         }
906     } else {
907         header.crypt_method = cpu_to_be32(QCOW_CRYPT_NONE);
908     }
909
910     /* write all the data */
911     ret = blk_pwrite(qcow_blk, 0, &header, sizeof(header), 0);
912     if (ret != sizeof(header)) {
913         goto exit;
914     }
915
916     if (qcow_opts->has_backing_file) {
917         ret = blk_pwrite(qcow_blk, sizeof(header),
918                          qcow_opts->backing_file, backing_filename_len, 0);
919         if (ret != backing_filename_len) {
920             goto exit;
921         }
922     }
923
924     tmp = g_malloc0(BDRV_SECTOR_SIZE);
925     for (i = 0; i < DIV_ROUND_UP(sizeof(uint64_t) * l1_size, BDRV_SECTOR_SIZE);
926          i++) {
927         ret = blk_pwrite(qcow_blk, header_size + BDRV_SECTOR_SIZE * i,
928                          tmp, BDRV_SECTOR_SIZE, 0);
929         if (ret != BDRV_SECTOR_SIZE) {
930             g_free(tmp);
931             goto exit;
932         }
933     }
934
935     g_free(tmp);
936     ret = 0;
937 exit:
938     blk_unref(qcow_blk);
939     qcrypto_block_free(crypto);
940     return ret;
941 }
942
943 static int coroutine_fn qcow_co_create_opts(const char *filename,
944                                             QemuOpts *opts, Error **errp)
945 {
946     BlockdevCreateOptions *create_options = NULL;
947     BlockDriverState *bs = NULL;
948     QDict *qdict;
949     Visitor *v;
950     const char *val;
951     Error *local_err = NULL;
952     int ret;
953
954     static const QDictRenames opt_renames[] = {
955         { BLOCK_OPT_BACKING_FILE,       "backing-file" },
956         { BLOCK_OPT_ENCRYPT,            BLOCK_OPT_ENCRYPT_FORMAT },
957         { NULL, NULL },
958     };
959
960     /* Parse options and convert legacy syntax */
961     qdict = qemu_opts_to_qdict_filtered(opts, NULL, &qcow_create_opts, true);
962
963     val = qdict_get_try_str(qdict, BLOCK_OPT_ENCRYPT);
964     if (val && !strcmp(val, "on")) {
965         qdict_put_str(qdict, BLOCK_OPT_ENCRYPT, "qcow");
966     } else if (val && !strcmp(val, "off")) {
967         qdict_del(qdict, BLOCK_OPT_ENCRYPT);
968     }
969
970     val = qdict_get_try_str(qdict, BLOCK_OPT_ENCRYPT_FORMAT);
971     if (val && !strcmp(val, "aes")) {
972         qdict_put_str(qdict, BLOCK_OPT_ENCRYPT_FORMAT, "qcow");
973     }
974
975     if (!qdict_rename_keys(qdict, opt_renames, errp)) {
976         ret = -EINVAL;
977         goto fail;
978     }
979
980     /* Create and open the file (protocol layer) */
981     ret = bdrv_create_file(filename, opts, &local_err);
982     if (ret < 0) {
983         error_propagate(errp, local_err);
984         goto fail;
985     }
986
987     bs = bdrv_open(filename, NULL, NULL,
988                    BDRV_O_RDWR | BDRV_O_RESIZE | BDRV_O_PROTOCOL, errp);
989     if (bs == NULL) {
990         ret = -EIO;
991         goto fail;
992     }
993
994     /* Now get the QAPI type BlockdevCreateOptions */
995     qdict_put_str(qdict, "driver", "qcow");
996     qdict_put_str(qdict, "file", bs->node_name);
997
998     v = qobject_input_visitor_new_flat_confused(qdict, errp);
999     if (!v) {
1000         ret = -EINVAL;
1001         goto fail;
1002     }
1003
1004     visit_type_BlockdevCreateOptions(v, NULL, &create_options, &local_err);
1005     visit_free(v);
1006
1007     if (local_err) {
1008         error_propagate(errp, local_err);
1009         ret = -EINVAL;
1010         goto fail;
1011     }
1012
1013     /* Silently round up size */
1014     assert(create_options->driver == BLOCKDEV_DRIVER_QCOW);
1015     create_options->u.qcow.size =
1016         ROUND_UP(create_options->u.qcow.size, BDRV_SECTOR_SIZE);
1017
1018     /* Create the qcow image (format layer) */
1019     ret = qcow_co_create(create_options, errp);
1020     if (ret < 0) {
1021         goto fail;
1022     }
1023
1024     ret = 0;
1025 fail:
1026     qobject_unref(qdict);
1027     bdrv_unref(bs);
1028     qapi_free_BlockdevCreateOptions(create_options);
1029     return ret;
1030 }
1031
1032 static int qcow_make_empty(BlockDriverState *bs)
1033 {
1034     BDRVQcowState *s = bs->opaque;
1035     uint32_t l1_length = s->l1_size * sizeof(uint64_t);
1036     int ret;
1037
1038     memset(s->l1_table, 0, l1_length);
1039     if (bdrv_pwrite_sync(bs->file, s->l1_table_offset, s->l1_table,
1040             l1_length) < 0)
1041         return -1;
1042     ret = bdrv_truncate(bs->file, s->l1_table_offset + l1_length,
1043                         PREALLOC_MODE_OFF, NULL);
1044     if (ret < 0)
1045         return ret;
1046
1047     memset(s->l2_cache, 0, s->l2_size * L2_CACHE_SIZE * sizeof(uint64_t));
1048     memset(s->l2_cache_offsets, 0, L2_CACHE_SIZE * sizeof(uint64_t));
1049     memset(s->l2_cache_counts, 0, L2_CACHE_SIZE * sizeof(uint32_t));
1050
1051     return 0;
1052 }
1053
1054 /* XXX: put compressed sectors first, then all the cluster aligned
1055    tables to avoid losing bytes in alignment */
1056 static coroutine_fn int
1057 qcow_co_pwritev_compressed(BlockDriverState *bs, uint64_t offset,
1058                            uint64_t bytes, QEMUIOVector *qiov)
1059 {
1060     BDRVQcowState *s = bs->opaque;
1061     QEMUIOVector hd_qiov;
1062     struct iovec iov;
1063     z_stream strm;
1064     int ret, out_len;
1065     uint8_t *buf, *out_buf;
1066     uint64_t cluster_offset;
1067
1068     buf = qemu_blockalign(bs, s->cluster_size);
1069     if (bytes != s->cluster_size) {
1070         if (bytes > s->cluster_size ||
1071             offset + bytes != bs->total_sectors << BDRV_SECTOR_BITS)
1072         {
1073             qemu_vfree(buf);
1074             return -EINVAL;
1075         }
1076         /* Zero-pad last write if image size is not cluster aligned */
1077         memset(buf + bytes, 0, s->cluster_size - bytes);
1078     }
1079     qemu_iovec_to_buf(qiov, 0, buf, qiov->size);
1080
1081     out_buf = g_malloc(s->cluster_size);
1082
1083     /* best compression, small window, no zlib header */
1084     memset(&strm, 0, sizeof(strm));
1085     ret = deflateInit2(&strm, Z_DEFAULT_COMPRESSION,
1086                        Z_DEFLATED, -12,
1087                        9, Z_DEFAULT_STRATEGY);
1088     if (ret != 0) {
1089         ret = -EINVAL;
1090         goto fail;
1091     }
1092
1093     strm.avail_in = s->cluster_size;
1094     strm.next_in = (uint8_t *)buf;
1095     strm.avail_out = s->cluster_size;
1096     strm.next_out = out_buf;
1097
1098     ret = deflate(&strm, Z_FINISH);
1099     if (ret != Z_STREAM_END && ret != Z_OK) {
1100         deflateEnd(&strm);
1101         ret = -EINVAL;
1102         goto fail;
1103     }
1104     out_len = strm.next_out - out_buf;
1105
1106     deflateEnd(&strm);
1107
1108     if (ret != Z_STREAM_END || out_len >= s->cluster_size) {
1109         /* could not compress: write normal cluster */
1110         ret = qcow_co_writev(bs, offset >> BDRV_SECTOR_BITS,
1111                              bytes >> BDRV_SECTOR_BITS, qiov, 0);
1112         if (ret < 0) {
1113             goto fail;
1114         }
1115         goto success;
1116     }
1117     qemu_co_mutex_lock(&s->lock);
1118     ret = get_cluster_offset(bs, offset, 2, out_len, 0, 0, &cluster_offset);
1119     qemu_co_mutex_unlock(&s->lock);
1120     if (ret < 0) {
1121         goto fail;
1122     }
1123     if (cluster_offset == 0) {
1124         ret = -EIO;
1125         goto fail;
1126     }
1127     cluster_offset &= s->cluster_offset_mask;
1128
1129     iov = (struct iovec) {
1130         .iov_base   = out_buf,
1131         .iov_len    = out_len,
1132     };
1133     qemu_iovec_init_external(&hd_qiov, &iov, 1);
1134     BLKDBG_EVENT(bs->file, BLKDBG_WRITE_COMPRESSED);
1135     ret = bdrv_co_pwritev(bs->file, cluster_offset, out_len, &hd_qiov, 0);
1136     if (ret < 0) {
1137         goto fail;
1138     }
1139 success:
1140     ret = 0;
1141 fail:
1142     qemu_vfree(buf);
1143     g_free(out_buf);
1144     return ret;
1145 }
1146
1147 static int qcow_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
1148 {
1149     BDRVQcowState *s = bs->opaque;
1150     bdi->cluster_size = s->cluster_size;
1151     return 0;
1152 }
1153
1154 static QemuOptsList qcow_create_opts = {
1155     .name = "qcow-create-opts",
1156     .head = QTAILQ_HEAD_INITIALIZER(qcow_create_opts.head),
1157     .desc = {
1158         {
1159             .name = BLOCK_OPT_SIZE,
1160             .type = QEMU_OPT_SIZE,
1161             .help = "Virtual disk size"
1162         },
1163         {
1164             .name = BLOCK_OPT_BACKING_FILE,
1165             .type = QEMU_OPT_STRING,
1166             .help = "File name of a base image"
1167         },
1168         {
1169             .name = BLOCK_OPT_ENCRYPT,
1170             .type = QEMU_OPT_BOOL,
1171             .help = "Encrypt the image with format 'aes'. (Deprecated "
1172                     "in favor of " BLOCK_OPT_ENCRYPT_FORMAT "=aes)",
1173         },
1174         {
1175             .name = BLOCK_OPT_ENCRYPT_FORMAT,
1176             .type = QEMU_OPT_STRING,
1177             .help = "Encrypt the image, format choices: 'aes'",
1178         },
1179         BLOCK_CRYPTO_OPT_DEF_QCOW_KEY_SECRET("encrypt."),
1180         { /* end of list */ }
1181     }
1182 };
1183
1184 static BlockDriver bdrv_qcow = {
1185     .format_name        = "qcow",
1186     .instance_size      = sizeof(BDRVQcowState),
1187     .bdrv_probe         = qcow_probe,
1188     .bdrv_open          = qcow_open,
1189     .bdrv_close         = qcow_close,
1190     .bdrv_child_perm        = bdrv_format_default_perms,
1191     .bdrv_reopen_prepare    = qcow_reopen_prepare,
1192     .bdrv_co_create         = qcow_co_create,
1193     .bdrv_co_create_opts    = qcow_co_create_opts,
1194     .bdrv_has_zero_init     = bdrv_has_zero_init_1,
1195     .supports_backing       = true,
1196
1197     .bdrv_co_readv          = qcow_co_readv,
1198     .bdrv_co_writev         = qcow_co_writev,
1199     .bdrv_co_block_status   = qcow_co_block_status,
1200
1201     .bdrv_make_empty        = qcow_make_empty,
1202     .bdrv_co_pwritev_compressed = qcow_co_pwritev_compressed,
1203     .bdrv_get_info          = qcow_get_info,
1204
1205     .create_opts            = &qcow_create_opts,
1206 };
1207
1208 static void bdrv_qcow_init(void)
1209 {
1210     bdrv_register(&bdrv_qcow);
1211 }
1212
1213 block_init(bdrv_qcow_init);
This page took 0.09183 seconds and 4 git commands to generate.