Kevin Wolf 8e4ffb4ef4 qcow2: Don't crash qemu-img info with missing crypto header
qcow2_refresh_limits() assumes that s->crypto is non-NULL whenever
bs->encrypted is true. This is actually not the case: qcow2_do_open()
allows to open an image with a missing crypto header for BDRV_O_NO_IO,
and then bs->encrypted is true, but s->crypto is still NULL.

It doesn't make sense to open an invalid image, so remove the exception
for BDRV_O_NO_IO. This catches the problem early and any code that makes
the same assumption is safe now.

At the same time, in the name of defensive programming, we shouldn't
make the assumption in the first place. Let qcow2_refresh_limits() check
s->crypto rather than bs->encrypted. If s->crypto is NULL, it also can't
make any requirement on request alignment.

Finally, start a qcow2-encryption test case that only serves as a
regression test for this crash for now.

Reported-by: Leonid Reviakin <L.reviakin@fobos-nt.ru>
Reported-by: Denis Rastyogin <gerben@altlinux.org>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Message-ID: <20250318201143.70657-1-kwolf@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2025-04-08 12:13:17 +02:00
..
001
2021-01-20 14:53:22 -06:00
002
2021-01-20 14:53:22 -06:00
003
2021-01-20 14:53:22 -06:00
004
2021-01-20 14:53:22 -06:00
005
2021-05-12 17:42:23 +02:00
007
2021-01-20 14:53:22 -06:00
008
2021-01-20 14:53:22 -06:00
009
2021-01-20 14:53:22 -06:00
010
2021-01-20 14:53:22 -06:00
011
2021-01-20 14:53:22 -06:00
012
2021-01-20 14:53:22 -06:00
013
2021-01-20 14:53:22 -06:00
014
2021-01-20 14:53:22 -06:00
015
2021-01-20 14:53:22 -06:00
017
2021-01-20 14:53:22 -06:00
018
2021-01-20 14:53:22 -06:00
019
2021-01-20 14:53:22 -06:00
020
2021-01-20 14:53:22 -06:00
021
2021-01-20 14:53:22 -06:00
023
2021-01-20 14:53:22 -06:00
026
2021-01-20 14:53:22 -06:00
2020-12-11 17:52:40 +01:00
029
2023-09-08 13:08:52 +03:00
032
2021-01-20 14:53:22 -06:00
034
2021-01-20 14:53:22 -06:00
035
2021-01-20 14:53:22 -06:00
037
2021-01-20 14:53:22 -06:00
038
2021-01-20 14:53:22 -06:00
041
2025-02-06 14:47:42 +01:00
2020-09-08 13:40:49 +02:00
042
2021-01-20 14:53:22 -06:00
043
2021-01-20 14:53:22 -06:00
044
2022-02-01 10:51:39 +01:00
046
2023-09-08 13:08:52 +03:00
2021-03-29 18:06:14 +02:00
047
2021-01-20 14:53:22 -06:00
048
2021-01-20 14:53:22 -06:00
049
2021-01-20 14:53:22 -06:00
050
2021-01-20 14:53:22 -06:00
051
2022-10-27 20:13:32 +02:00
052
2021-01-20 14:53:22 -06:00
053
2021-01-20 14:53:22 -06:00
054
2021-01-20 14:53:22 -06:00
057
2021-01-20 14:53:22 -06:00
058
2021-01-20 14:53:22 -06:00
063
2021-01-20 14:53:22 -06:00
2020-01-06 13:43:07 +01:00
2015-01-23 12:41:32 -05:00
065
2023-02-01 16:52:33 +01:00
2017-05-11 12:08:24 +02:00
2017-09-06 15:19:01 +01:00
071
2023-09-08 13:08:52 +03:00
073
2021-01-20 14:53:22 -06:00
075
2021-01-20 14:53:22 -06:00
076
2021-01-20 14:53:22 -06:00
077
2021-01-20 14:53:22 -06:00
078
2021-01-20 14:53:22 -06:00
079
2021-01-20 14:53:22 -06:00
080
2021-01-20 14:53:22 -06:00
081
2021-01-20 14:53:22 -06:00
082
2021-01-20 14:53:22 -06:00
083
2021-01-20 14:53:22 -06:00
086
2021-01-20 14:53:22 -06:00
088
2021-01-20 14:53:22 -06:00
2020-12-11 17:52:40 +01:00
2020-01-06 13:43:07 +01:00
092
2021-01-20 14:53:22 -06:00
096
2021-01-20 14:53:22 -06:00
101
2021-01-20 14:53:22 -06:00
104
2021-01-20 14:53:22 -06:00
2018-06-11 16:18:45 +02:00
116
2021-01-20 14:53:22 -06:00
2021-03-29 14:13:55 +02:00
118
2023-10-31 13:51:33 +01:00
2021-01-26 14:36:37 +01:00
128
2021-01-20 14:53:22 -06:00
133
2021-01-20 14:53:22 -06:00
136
2021-01-20 14:53:22 -06:00
2016-05-19 16:45:31 +02:00
137
2022-02-01 10:51:39 +01:00
2020-01-06 13:43:07 +01:00
144
2024-02-15 16:40:06 +00:00
2024-02-15 16:40:06 +00:00
145
2021-01-20 14:53:22 -06:00
148
2021-01-20 14:53:22 -06:00
154
2021-01-20 14:53:22 -06:00
2020-03-11 15:54:38 +01:00
159
2021-01-20 14:53:22 -06:00
2016-09-20 22:10:57 +02:00
160
2021-01-20 14:53:22 -06:00
2016-09-20 22:10:57 +02:00
161
2021-01-20 14:53:22 -06:00
163
2022-04-25 14:30:03 +02:00
2017-09-26 15:00:32 +02:00
165
2025-02-06 14:47:42 +01:00
170
2021-01-20 14:53:22 -06:00
2016-09-20 22:10:57 +02:00
171
2021-01-20 14:53:22 -06:00
174
2021-01-20 14:53:22 -06:00
2017-02-12 00:47:42 +01:00
175
2021-01-20 14:53:22 -06:00
177
2021-01-20 14:53:22 -06:00
178
2021-01-26 14:36:37 +01:00
179
2021-01-20 14:53:22 -06:00
187
2021-01-20 14:53:22 -06:00
190
2021-01-20 14:53:22 -06:00
191
2021-01-20 14:53:22 -06:00
2025-01-29 11:56:41 -03:00
195
2021-01-20 14:53:22 -06:00
197
2023-09-08 10:06:25 -04:00
201
2021-01-20 14:53:22 -06:00
2025-01-29 11:56:41 -03:00
204
2021-01-20 14:53:22 -06:00
2020-09-07 12:31:31 +02:00
206
2021-11-23 15:39:12 +01:00
207
2022-03-22 10:50:10 +01:00
2022-03-22 10:50:10 +01:00
208
2021-01-20 14:53:22 -06:00
209
2022-02-01 10:51:39 +01:00
211
2022-03-22 10:14:34 +01:00
212
2021-01-20 14:53:22 -06:00
213
2021-01-20 14:53:22 -06:00
215
2023-09-08 13:08:52 +03:00
217
2021-01-20 14:53:22 -06:00
220
2021-01-20 14:53:22 -06:00
221
2021-01-20 14:53:22 -06:00
226
2021-01-20 14:53:22 -06:00
232
2021-01-20 14:53:22 -06:00
2019-03-19 15:49:29 +01:00
2025-01-29 11:56:41 -03:00
239
2021-01-20 14:53:22 -06:00
2019-02-01 13:46:44 +01:00
243
2021-01-20 14:53:22 -06:00
245
2024-07-11 11:06:36 +02:00
247
2021-01-20 14:53:22 -06:00
248
2021-07-09 13:19:11 +02:00
2021-07-09 13:19:11 +02:00
249
2021-01-20 14:53:22 -06:00
2019-06-04 16:55:58 +02:00
253
2021-01-20 14:53:22 -06:00
256
2023-10-12 14:21:43 -04:00
257
2023-10-12 14:21:43 -04:00
2020-09-02 16:32:14 -05:00
2025-01-29 11:56:41 -03:00
265
2021-01-20 14:53:22 -06:00
267
2021-01-20 14:53:22 -06:00
268
2021-01-20 14:53:22 -06:00
272
2021-01-20 14:53:22 -06:00
273
2021-01-20 14:53:22 -06:00
2019-11-18 16:01:31 -06:00
279
2021-01-20 14:53:22 -06:00
2025-01-29 11:56:41 -03:00
282
2021-01-20 14:53:22 -06:00
283
2021-12-28 15:18:59 +01:00
2021-12-28 15:18:59 +01:00
288
2021-01-20 14:53:22 -06:00
289
2021-01-20 14:53:22 -06:00
292
2021-01-20 14:53:22 -06:00
293
2021-01-20 14:53:22 -06:00
294
2021-01-20 14:53:22 -06:00
297
2021-11-01 11:54:59 -04:00
299
2021-01-20 14:53:22 -06:00
301
2021-07-09 13:18:32 +02:00
302
2025-03-04 16:41:17 -06:00
2022-02-01 10:51:39 +01:00
304
2021-01-20 14:53:22 -06:00
305
2021-01-20 14:53:22 -06:00
2024-08-06 20:12:40 +02:00
2024-08-06 20:12:40 +02:00
2021-01-27 20:53:14 +01:00

=== This is the QEMU I/O test suite ===

* Intro

This package contains a simple test suite for the I/O layer of qemu.
It does not require a guest, but only the qemu, qemu-img and qemu-io
binaries.  This does limit it to exercise the low-level I/O path only
but no actual block drivers like ide, scsi or virtio.

* Usage

Just run ./check to run all tests for the raw image format, or ./check
-qcow2 to test the qcow2 image format.  The output of ./check -h explains
additional options to test further image formats or I/O methods.

* Feedback and patches

Please send improvements to the test suite, general feedback or just
reports of failing tests cases to qemu-devel@nongnu.org with a CC:
to qemu-block@nongnu.org.