Chen Qun
757ca9b81a
hw/nios2:fix leak of fdevice tree blob
...
The device tree blob returned by load_device_tree is malloced.
We should free it after cpu_physical_memory_write().
Reported-by: Euler Robot <euler.robot@huawei.com >
Signed-off-by: Chen Qun <kuhn.chenqun@huawei.com >
Reviewed-by: Laurent Vivier <laurent@vivier.eu >
Message-Id: <20200218091154.21696-2-kuhn.chenqun@huawei.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-19 10:32:50 +01:00
Philippe Mathieu-Daudé
90e94c0591
hw/hppa/dino: Do not accept accesses to registers 0x818 and 0x82c
...
Register 0x818 is documented as 'undefined', and register
0x82c is not documented. Refuse their access.
Acked-by: Helge Deller <deller@gmx.de >
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org >
Message-Id: <20200218063355.18577-5-f4bug@amsat.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2020-02-18 11:22:10 -08:00
Philippe Mathieu-Daudé
c9cbfebfd0
hw/hppa/dino: Fix bitmask for the PCIROR register
...
Only 24 bits of the PCIROR register are documented
(see pp. 37 of datasheet referenced in this file header).
Acked-by: Helge Deller <deller@gmx.de >
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org >
Message-Id: <20200218063355.18577-4-f4bug@amsat.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2020-02-18 11:22:10 -08:00
Philippe Mathieu-Daudé
6e4ed42397
hw/hppa/dino: Fix reg800_keep_bits overrun (CID 1419387 1419393 1419394)
...
Coverity reports:
*** CID 1419387: Memory - illegal accesses (OVERRUN)
/hw/hppa/dino.c: 267 in dino_chip_read_with_attrs()
261 val = s->ilr & s->imr & s->icr;
262 break;
263 case DINO_TOC_ADDR:
264 val = s->toc_addr;
265 break;
266 case DINO_GMASK ... DINO_TLTIM:
>>> CID 1419387: Memory - illegal accesses (OVERRUN)
>>> Overrunning array "s->reg800" of 12 4-byte elements at element index 12 (byte offset 48) using index "(addr - 2048UL) / 4UL" (which evaluates to 12).
267 val = s->reg800[(addr - DINO_GMASK) / 4];
268 if (addr == DINO_PAMR) {
269 val &= ~0x01; /* LSB is hardwired to 0 */
270 }
271 if (addr == DINO_MLTIM) {
272 val &= ~0x07; /* 3 LSB are hardwired to 0 */
*** CID 1419393: Memory - corruptions (OVERRUN)
/hw/hppa/dino.c: 363 in dino_chip_write_with_attrs()
357 /* These registers are read-only. */
358 break;
359
360 case DINO_GMASK ... DINO_TLTIM:
361 i = (addr - DINO_GMASK) / 4;
362 val &= reg800_keep_bits[i];
>>> CID 1419393: Memory - corruptions (OVERRUN)
>>> Overrunning array "s->reg800" of 12 4-byte elements at element index 12 (byte offset 48) using index "i" (which evaluates to 12).
363 s->reg800[i] = val;
364 break;
365
366 default:
367 /* Controlled by dino_chip_mem_valid above. */
368 g_assert_not_reached();
*** CID 1419394: Memory - illegal accesses (OVERRUN)
/hw/hppa/dino.c: 362 in dino_chip_write_with_attrs()
356 case DINO_IRR1:
357 /* These registers are read-only. */
358 break;
359
360 case DINO_GMASK ... DINO_TLTIM:
361 i = (addr - DINO_GMASK) / 4;
>>> CID 1419394: Memory - illegal accesses (OVERRUN)
>>> Overrunning array "reg800_keep_bits" of 12 4-byte elements at element index 12 (byte offset 48) using index "i" (which evaluates to 12).
362 val &= reg800_keep_bits[i];
363 s->reg800[i] = val;
364 break;
365
366 default:
367 /* Controlled by dino_chip_mem_valid above. */
Indeed the array should contain 13 entries, the undocumented
register 0x82c is missing. Fix by increasing the array size
and adding the missing register.
CID 1419387 can be verified with:
$ echo x 0xfff80830 | hppa-softmmu/qemu-system-hppa -S -monitor stdio -display none
QEMU 4.2.50 monitor - type 'help' for more information
(qemu) x 0xfff80830
qemu/hw/hppa/dino.c:267:15: runtime error: index 12 out of bounds for type 'uint32_t [12]'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /home/phil/source/qemu/hw/hppa/dino.c:267:15 in
00000000fff80830: 0x00000000
and CID 1419393/1419394 with:
$ echo writeb 0xfff80830 0x69 \
| hppa-softmmu/qemu-system-hppa -S -accel qtest -qtest stdio -display none
[I 1581634452.654113] OPENED
[R +4.105415] writeb 0xfff80830 0x69
qemu/hw/hppa/dino.c:362:16: runtime error: index 12 out of bounds for type 'const uint32_t [12]'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior qemu/hw/hppa/dino.c:362:16 in
=================================================================
==29607==ERROR: AddressSanitizer: global-buffer-overflow on address 0x5577dae32f30 at pc 0x5577d93f2463 bp 0x7ffd97ea11b0 sp 0x7ffd97ea11a8
READ of size 4 at 0x5577dae32f30 thread T0
#0 0x5577d93f2462 in dino_chip_write_with_attrs qemu/hw/hppa/dino.c:362:16
#1 0x5577d9025664 in memory_region_write_with_attrs_accessor qemu/memory.c:503:12
#2 0x5577d9024920 in access_with_adjusted_size qemu/memory.c:539:18
#3 0x5577d9023608 in memory_region_dispatch_write qemu/memory.c:1482:13
#4 0x5577d8e3177a in flatview_write_continue qemu/exec.c:3166:23
#5 0x5577d8e20357 in flatview_write qemu/exec.c:3206:14
#6 0x5577d8e1fef4 in address_space_write qemu/exec.c:3296:18
#7 0x5577d8e20693 in address_space_rw qemu/exec.c:3306:16
#8 0x5577d9011595 in qtest_process_command qemu/qtest.c:432:13
#9 0x5577d900d19f in qtest_process_inbuf qemu/qtest.c:705:9
#10 0x5577d900ca22 in qtest_read qemu/qtest.c:717:5
#11 0x5577da8c4254 in qemu_chr_be_write_impl qemu/chardev/char.c:183:9
#12 0x5577da8c430c in qemu_chr_be_write qemu/chardev/char.c:195:9
#13 0x5577da8cf587 in fd_chr_read qemu/chardev/char-fd.c:68:9
#14 0x5577da9836cd in qio_channel_fd_source_dispatch qemu/io/channel-watch.c:84:12
#15 0x7faf44509ecc in g_main_context_dispatch (/lib64/libglib-2.0.so.0+0x4fecc)
#16 0x5577dab75f96 in glib_pollfds_poll qemu/util/main-loop.c:219:9
#17 0x5577dab74797 in os_host_main_loop_wait qemu/util/main-loop.c:242:5
#18 0x5577dab7435a in main_loop_wait qemu/util/main-loop.c:518:11
#19 0x5577d9514eb3 in main_loop qemu/vl.c:1682:9
#20 0x5577d950699d in main qemu/vl.c:4450:5
#21 0x7faf41a87f42 in __libc_start_main (/lib64/libc.so.6+0x23f42)
#22 0x5577d8cd4d4d in _start (qemu/build/sanitizer/hppa-softmmu/qemu-system-hppa+0x1256d4d)
0x5577dae32f30 is located 0 bytes to the right of global variable 'reg800_keep_bits' defined in 'qemu/hw/hppa/dino.c:87:23' (0x5577dae32f00) of size 48
SUMMARY: AddressSanitizer: global-buffer-overflow qemu/hw/hppa/dino.c:362:16 in dino_chip_write_with_attrs
Shadow bytes around the buggy address:
0x0aaf7b5be590: 00 f9 f9 f9 f9 f9 f9 f9 00 02 f9 f9 f9 f9 f9 f9
0x0aaf7b5be5a0: 07 f9 f9 f9 f9 f9 f9 f9 07 f9 f9 f9 f9 f9 f9 f9
0x0aaf7b5be5b0: 07 f9 f9 f9 f9 f9 f9 f9 00 00 00 00 00 00 00 00
0x0aaf7b5be5c0: 00 00 00 02 f9 f9 f9 f9 00 00 00 00 00 00 00 00
0x0aaf7b5be5d0: 00 00 00 00 00 00 00 00 00 00 00 03 f9 f9 f9 f9
=>0x0aaf7b5be5e0: 00 00 00 00 00 00[f9]f9 f9 f9 f9 f9 00 00 00 00
0x0aaf7b5be5f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0aaf7b5be600: 00 00 01 f9 f9 f9 f9 f9 00 00 00 00 07 f9 f9 f9
0x0aaf7b5be610: f9 f9 f9 f9 00 00 00 00 00 00 00 00 00 00 00 00
0x0aaf7b5be620: 00 00 00 05 f9 f9 f9 f9 00 00 00 00 07 f9 f9 f9
0x0aaf7b5be630: f9 f9 f9 f9 00 00 f9 f9 f9 f9 f9 f9 07 f9 f9 f9
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==29607==ABORTING
Fixes: Covertiy CID 1419387 / 1419393 / 1419394 (commit 18092598a5 )
Acked-by: Helge Deller <deller@gmx.de >
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org >
Message-Id: <20200218063355.18577-3-f4bug@amsat.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2020-02-18 11:22:10 -08:00
Philippe Mathieu-Daudé
422a26489e
hw/hppa/dino: Add comments with register name
...
Add a comment with the name of each register in the 0x800-0x8ff range.
Acked-by: Helge Deller <deller@gmx.de >
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org >
Message-Id: <20200218063355.18577-2-f4bug@amsat.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2020-02-18 11:22:10 -08:00
Philippe Mathieu-Daudé
eb9b2ee8f6
hw/display/artist: Remove dead code (CID 1419388 & 1419389)
...
Coverity reports:
*** CID 1419388: Control flow issues (DEADCODE)
/hw/display/artist.c: 739 in draw_line_xy()
733 if (endy < 0) {
734 endy = 0;
735 }
736
737
738 if (endx < 0) {
>>> CID 1419388: Control flow issues (DEADCODE)
>>> Execution cannot reach this statement: "return;".
739 return;
740 }
741
742 if (endy < 0) {
743 return;
744 }
*** CID 1419389: Control flow issues (DEADCODE)
/hw/display/artist.c: 743 in draw_line_xy()
737
738 if (endx < 0) {
739 return;
740 }
741
742 if (endy < 0) {
>>> CID 1419389: Control flow issues (DEADCODE)
>>> Execution cannot reach this statement: "return;".
743 return;
744 }
745
746 trace_artist_draw_line(startx, starty, endx, endy);
747 draw_line(s, startx, starty, endx, endy, false, -1, -1);
748 }
Fixes: Covertiy CID 1419388 and 1419389 (commit 4765384ce3 )
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org >
Acked-by: Sven Schnelle <svens@stackframe.org >
Message-Id: <20200214001303.12873-6-f4bug@amsat.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2020-02-18 11:21:47 -08:00
Philippe Mathieu-Daudé
b0f6455fea
hw/display/artist: Avoid drawing line when nothing to display
...
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org >
Message-Id: <20200214001303.12873-5-f4bug@amsat.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2020-02-18 11:21:47 -08:00
Philippe Mathieu-Daudé
0814343ce2
hw/display/artist: Delay some variables initialization
...
We want to have an early exit path. Delay some initializations
before the variables are used.
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org >
Acked-by: Sven Schnelle <svens@stackframe.org >
Message-Id: <20200214001303.12873-4-f4bug@amsat.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2020-02-18 11:21:47 -08:00
Philippe Mathieu-Daudé
6c69f9c48e
hw/display/artist: Remove pointless initialization
...
We are initializating incy inconditionally:
if (y1 <= y2) {
incy = 1;
} else {
incy = -1;
}
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org >
Acked-by: Sven Schnelle <svens@stackframe.org >
Message-Id: <20200214001303.12873-3-f4bug@amsat.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2020-02-18 11:21:47 -08:00
Philippe Mathieu-Daudé
5646bca36e
hw/display/artist: Move trace event to draw_line()
...
Instead of emitting the trace event before each call to
draw_line(), call it once at draw_line() entrance.
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org >
Acked-by: Sven Schnelle <svens@stackframe.org >
Message-Id: <20200214001303.12873-2-f4bug@amsat.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2020-02-18 11:21:47 -08:00
Philippe Mathieu-Daudé
b18ee6a217
hw/net/rocker: Report unimplemented feature with qemu_log_mask(UNIMP)
...
Fix warnings reported by Clang static code analyzer:
CC hw/net/rocker/rocker.o
hw/net/rocker/rocker.c:213:9: warning: Value stored to 'tx_tso_mss' is never read
tx_tso_mss = rocker_tlv_get_le16(tlvs[ROCKER_TLV_TX_TSO_MSS]);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hw/net/rocker/rocker.c:217:9: warning: Value stored to 'tx_tso_hdr_len' is never read
tx_tso_hdr_len = rocker_tlv_get_le16(tlvs[ROCKER_TLV_TX_TSO_HDR_LEN]);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hw/net/rocker/rocker.c:255:9: warning: Value stored to 'tx_l3_csum_off' is never read
tx_l3_csum_off += tx_tso_mss = tx_tso_hdr_len = 0;
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Fixes: dc488f888
Reported-by: Clang Static Analyzer
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com >
Message-Id: <20200217101637.27558-1-philmd@redhat.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-18 20:20:49 +01:00
Philippe Mathieu-Daudé
400be27f82
hw/block/pflash_cfi02: Remove unneeded variable assignment
...
Fix warning reported by Clang static code analyzer:
CC hw/block/pflash_cfi02.o
hw/block/pflash_cfi02.c:311:5: warning: Value stored to 'ret' is never read
ret = -1;
^ ~~
Reported-by: Clang Static Analyzer
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20200215161557.4077-4-philmd@redhat.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-18 20:20:49 +01:00
Philippe Mathieu-Daudé
380e6d8119
hw/display/qxl: Remove unneeded variable assignment
...
Fix warning reported by Clang static code analyzer:
hw/display/qxl.c:1634:14: warning: Value stored to 'orig_io_port' during its initialization is never read
uint32_t orig_io_port = io_port;
^~~~~~~~~~~~ ~~~~~~~
Reported-by: Clang Static Analyzer
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20200215161557.4077-3-philmd@redhat.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-18 20:20:49 +01:00
Philippe Mathieu-Daudé
1e1f6ab0eb
contrib/rdmacm-mux: Remove superfluous semicolon
...
Fixes: a5d2f6f877
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Acked-by: Paolo Bonzini <pbonzini@redhat.com >
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com >
Reviewed-by: Juan Quintela <quintela@redhat.com >
Message-Id: <20200218094402.26625-14-philmd@redhat.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-18 20:20:49 +01:00
Philippe Mathieu-Daudé
58bcdda915
tests/qtest/libqos/qgraph: Remove superfluous semicolons
...
Fixes: fc281c8020
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Acked-by: Paolo Bonzini <pbonzini@redhat.com >
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com >
Reviewed-by: Juan Quintela <quintela@redhat.com >
Message-Id: <20200218094402.26625-13-philmd@redhat.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-18 20:20:49 +01:00
Philippe Mathieu-Daudé
7c98f0f8c3
target/i386/whpx: Remove superfluous semicolon
...
Fixes: 812d49f2a3
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Acked-by: Paolo Bonzini <pbonzini@redhat.com >
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com >
Reviewed-by: Juan Quintela <quintela@redhat.com >
Message-Id: <20200218094402.26625-12-philmd@redhat.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-18 20:20:49 +01:00
Philippe Mathieu-Daudé
2945342612
ui/input-barrier: Remove superfluous semicolon
...
Fixes: 6105683da3
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Acked-by: Paolo Bonzini <pbonzini@redhat.com >
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com >
Reviewed-by: Juan Quintela <quintela@redhat.com >
Message-Id: <20200218094402.26625-11-philmd@redhat.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-18 20:20:49 +01:00
Philippe Mathieu-Daudé
180f3fd2d7
hw/vfio/display: Remove superfluous semicolon
...
Fixes: 8b818e059b
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Acked-by: Paolo Bonzini <pbonzini@redhat.com >
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com >
Reviewed-by: Juan Quintela <quintela@redhat.com >
Message-Id: <20200218094402.26625-9-philmd@redhat.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-18 20:20:49 +01:00
Philippe Mathieu-Daudé
c62c1fa0e3
hw/scsi/esp: Remove superfluous semicolon
...
Fixes: 74d71ea16b
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Acked-by: Paolo Bonzini <pbonzini@redhat.com >
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com >
Reviewed-by: Juan Quintela <quintela@redhat.com >
Message-Id: <20200218094402.26625-8-philmd@redhat.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-18 20:20:49 +01:00
Philippe Mathieu-Daudé
5012a8941d
hw/m68k/next-cube: Remove superfluous semicolon
...
Fixes: 956a78118b
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Acked-by: Paolo Bonzini <pbonzini@redhat.com >
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com >
Reviewed-by: Juan Quintela <quintela@redhat.com >
Message-Id: <20200218094402.26625-7-philmd@redhat.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-18 20:20:49 +01:00
Philippe Mathieu-Daudé
6ab64e27c5
hw/arm/xlnx-versal: Remove superfluous semicolon
...
Fixes: 6f16da53ff
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Acked-by: Paolo Bonzini <pbonzini@redhat.com >
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com >
Reviewed-by: Juan Quintela <quintela@redhat.com >
Message-Id: <20200218094402.26625-6-philmd@redhat.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-18 20:20:49 +01:00
Philippe Mathieu-Daudé
3a1bdd1583
audio/alsaaudio: Remove superfluous semicolons
...
Fixes: 286a5d201e
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Acked-by: Paolo Bonzini <pbonzini@redhat.com >
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com >
Reviewed-by: Juan Quintela <quintela@redhat.com >
Message-Id: <20200218094402.26625-3-philmd@redhat.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-18 20:20:49 +01:00
Philippe Mathieu-Daudé
ee0f3c09e0
scripts/checkpatch.pl: Detect superfluous semicolon in C code
...
Display error when a commit contains superfluous semicolon:
$ git show 6663a0a337 | scripts/checkpatch.pl -q -
ERROR: superfluous trailing semicolon
#276 : FILE: block/io_uring.c:186:
+ ret = -ENOSPC;;
total: 1 errors, 1 warnings, 485 lines checked
Reported-by: Luc Michel <luc.michel@greensocs.com >
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Acked-by: Paolo Bonzini <pbonzini@redhat.com >
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com >
Reviewed-by: Juan Quintela <quintela@redhat.com >
Reviewed-by: Luc Michel <luc.michel@greensocs.com >
Message-Id: <20200218094402.26625-2-philmd@redhat.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-18 20:20:49 +01:00
Michal Privoznik
b09d51c909
Report stringified errno in VFIO related errors
...
In a few places we report errno formatted as a negative integer.
This is not as user friendly as it can be. Use strerror() and/or
error_setg_errno() instead.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com >
Reviewed-by: Ján Tomko <jtomko@redhat.com >
Reviewed-by: Cornelia Huck <cohuck@redhat.com >
Reviewed-by: Eric Auger <eric.auger@redhat.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Reviewed-by: Alex Williamson <alex.williamson@redhat.com >
Message-Id: <4949c3ecf1a32189b8a4b5eb4b0fd04c1122501d.1581674006.git.mprivozn@redhat.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-18 20:20:49 +01:00
Yu-Chen Lin
4065bb25e9
mailmap: Add entry for Yu-Chen Lin
...
I have two mail address, add entries for
showing author and email correctly.
Signed-off-by: Yu-Chen Lin <npes87184@gmail.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Acked-by: Yu-Chen Lin <yuchenlin@synology.com >
Message-Id: <20200206125504.7150-1-npes87184@gmail.com >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2020-02-18 20:20:49 +01:00
Peter Maydell
672f9d0df1
Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging
...
Block layer patches:
- Fix check_to_replace_node()
- commit: Expose on-error option in QMP
- qcow2: Fix qcow2_alloc_cluster_abort() for external data file
- mirror: Fix deadlock
- vvfat: Fix segfault while closing read-write node
- Code cleanups
# gpg: Signature made Tue 18 Feb 2020 14:04:43 GMT
# gpg: using RSA key 7F09B272C88F2FD6
# gpg: Good signature from "Kevin Wolf <kwolf@redhat.com >" [full]
# Primary key fingerprint: DC3D EB15 9A9A F95D 3D74 56FE 7F09 B272 C88F 2FD6
* remotes/kevin/tags/for-upstream: (36 commits)
iotests: Check that @replaces can replace filters
iotests: Add tests for invalid Quorum @replaces
iotests: Use self.image_len in TestRepairQuorum
iotests: Resolve TODOs in 041
iotests/041: Drop superfluous shutdowns
iotests: Add VM.assert_block_path()
iotests: Use complete_and_wait() in 155
quorum: Stop marking it as a filter
mirror: Double-check immediately before replacing
block: Remove bdrv_recurse_is_first_non_filter()
block: Use bdrv_recurse_can_replace()
quorum: Implement .bdrv_recurse_can_replace()
blkverify: Implement .bdrv_recurse_can_replace()
block: Add bdrv_recurse_can_replace()
quorum: Fix child permissions
iotests: Let 041 use -blockdev for quorum children
block: Drop bdrv_is_first_non_filter()
blockdev: Allow resizing everywhere
blockdev: Allow external snapshots everywhere
block/io_uring: Remove superfluous semicolon
...
Signed-off-by: Peter Maydell <peter.maydell@linaro.org >
2020-02-18 14:23:43 +00:00
Max Reitz
c45a88f442
iotests: Check that @replaces can replace filters
...
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-20-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 14:52:16 +01:00
Max Reitz
a1da187860
iotests: Add tests for invalid Quorum @replaces
...
Add two tests to see that you cannot replace a Quorum child with the
mirror job while the child is in use by a different parent.
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-19-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 14:52:16 +01:00
Max Reitz
89e2194524
iotests: Use self.image_len in TestRepairQuorum
...
041's TestRepairQuorum has its own image_len, no need to refer to
TestSingleDrive. (This patch allows commenting out TestSingleDrive to
speed up 041 during test testing.)
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-18-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:41 +01:00
Max Reitz
c351afd6f3
iotests: Resolve TODOs in 041
...
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-17-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:41 +01:00
Max Reitz
5d016a69e3
iotests/041: Drop superfluous shutdowns
...
All tearDowns in 041 shutdown the VM. Thus, test cases do not need to
do it themselves (unless they need the VM to be down for some
post-operation check).
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-16-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:41 +01:00
Max Reitz
6a3d0f1e3f
iotests: Add VM.assert_block_path()
...
Signed-off-by: Max Reitz <mreitz@redhat.com >
Message-Id: <20200218103454.296704-15-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:41 +01:00
Max Reitz
6644d0e619
iotests: Use complete_and_wait() in 155
...
This way, we get to see errors during the completion phase.
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-14-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:40 +01:00
Max Reitz
3c7f75b321
quorum: Stop marking it as a filter
...
Quorum is not a filter, for example because it cannot guarantee which of
its children will serve the next request. Thus, any of its children may
differ from the data visible to quorum's parents.
We have other filters with multiple children, but they differ in this
aspect:
- blkverify quits the whole qemu process if its children differ. As
such, we can always skip it when we want to skip it (as a filter node)
by going to any of its children. Both have the same data.
- replication generally serves requests from bs->file, so this is its
only actually filtered child.
- Block job filters currently only have one child, but they will
probably get more children in the future. Still, they will always
have only one actually filtered child.
Having "filters" as a dedicated node category only makes sense if you
can skip them by going to a one fixed child that always shows the same
data as the filter node. Quorum cannot fulfill this, so it is not a
filter.
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-13-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:40 +01:00
Max Reitz
6e9cc05181
mirror: Double-check immediately before replacing
...
There is no guarantee that we can still replace the node we want to
replace at the end of the mirror job. Double-check by calling
bdrv_recurse_can_replace().
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-12-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:40 +01:00
Max Reitz
6b4907cf42
block: Remove bdrv_recurse_is_first_non_filter()
...
It no longer has any users.
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-11-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:40 +01:00
Max Reitz
810803a87c
block: Use bdrv_recurse_can_replace()
...
Let check_to_replace_node() use the more specialized
bdrv_recurse_can_replace() instead of
bdrv_recurse_is_first_non_filter(), which is too restrictive (or, in the
case of quorum, sometimes not restrictive enough).
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-10-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:40 +01:00
Max Reitz
a3ed794b36
quorum: Implement .bdrv_recurse_can_replace()
...
Signed-off-by: Max Reitz <mreitz@redhat.com >
Message-Id: <20200218103454.296704-9-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:40 +01:00
Max Reitz
998a6b2fc5
blkverify: Implement .bdrv_recurse_can_replace()
...
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-8-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:39 +01:00
Max Reitz
5d69b5ab85
block: Add bdrv_recurse_can_replace()
...
After a couple of follow-up patches, this function will replace
bdrv_recurse_is_first_non_filter() in check_to_replace_node().
bdrv_recurse_is_first_non_filter() is both not sufficiently specific for
check_to_replace_node() (it allows cases that should not be allowed,
like replacing child nodes of quorum with dissenting data that have more
parents than just quorum), and it is too restrictive (it is perfectly
fine to replace filters).
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-7-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:39 +01:00
Max Reitz
37a3791b38
quorum: Fix child permissions
...
Quorum cannot share WRITE or RESIZE on its children. Presumably, it
only does so because as a filter, it seemed intuitively correct to point
its .bdrv_child_perm to bdrv_filter_default_perm().
However, it is not really a filter, and bdrv_filter_default_perm() does
not work for it, so we have to provide a custom .bdrv_child_perm
implementation.
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-6-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:39 +01:00
Max Reitz
f718ca147d
iotests: Let 041 use -blockdev for quorum children
...
Using -drive with default options means that a virtio-blk drive will be
created that has write access to the to-be quorum children. Quorum
should have exclusive write access to them, so we should use -blockdev
instead.
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-5-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:39 +01:00
Max Reitz
a851ad4cac
block: Drop bdrv_is_first_non_filter()
...
It is unused now. (And it was ugly because it needed to explore all BDS
chains from the top.)
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-4-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:39 +01:00
Max Reitz
7607074f42
blockdev: Allow resizing everywhere
...
Block nodes that do not allow resizing should not share BLK_PERM_RESIZE.
It does not matter whether they are the first non-filter in their chain
or not.
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-3-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:39 +01:00
Max Reitz
ca08d937e8
blockdev: Allow external snapshots everywhere
...
There is no good reason why we would allow external snapshots only on
the first non-filter node in a chain. Parent BDSs should not care
whether their child is replaced by a snapshot. (If they do care, they
should announce that via freezing the chain, which is checked in
bdrv_append() through bdrv_set_backing_hd().)
Before we had bdrv_is_first_non_filter() here (since 212a5a8f09 ), there
was a special function bdrv_check_ext_snapshot() that allowed snapshots
by default, but block drivers could override this. Only blkverify did
so, however.
It is not clear to me why blkverify would do so; maybe just so that the
testee block driver would not be replaced. The introducing commit
f6186f49e2 does not explain why. Maybe because 08b24cfe37 would have
been the correct solution? (Which adds a .supports_backing check.)
Signed-off-by: Max Reitz <mreitz@redhat.com >
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Message-Id: <20200218103454.296704-2-mreitz@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 11:55:38 +01:00
Philippe Mathieu-Daudé
74e4a8a961
block/io_uring: Remove superfluous semicolon
...
Fixes: 6663a0a337
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Message-Id: <20200218094402.26625-5-philmd@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 10:54:02 +01:00
Philippe Mathieu-Daudé
0beab8119f
block: Remove superfluous semicolons
...
Fixes: 132ada80c4
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Message-Id: <20200218094402.26625-4-philmd@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 10:53:56 +01:00
Kevin Wolf
d439848941
iotests: Test error handling policies with block-commit
...
This tests both read failure (from the top node) and write failure (to
the base node) for on-error=report/stop/ignore.
As block-commit actually starts two different types of block jobs
(mirror.c for committing the active later, commit.c for intermediate
layers), all tests are run for both cases.
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
Message-Id: <20200214200812.28180-8-kwolf@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 10:53:56 +01:00
Kevin Wolf
8faad1c7fb
commit: Expose on-error option in QMP
...
Now that the error handling in the common block job is fixed, we can
expose the on-error option in QMP instead of hard-coding it as 'report'
in qmp_block_commit().
This fulfills the promise that the old comment in that function made,
even if a bit later than expected: "This will be part of the QMP
command, if/when the BlockdevOnError change for blkmirror makes it in".
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
Message-Id: <20200214200812.28180-7-kwolf@redhat.com >
Reviewed-by: Ján Tomko <jtomko@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 10:53:56 +01:00
Kevin Wolf
9ad1e79f3f
commit: Fix is_read for block_job_error_action()
...
block_job_error_action() needs to know if reading from the top node or
writing to the base node failed so that it can set the right 'operation'
in the BLOCK_JOB_ERROR QMP event.
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
Message-Id: <20200214200812.28180-6-kwolf@redhat.com >
Reviewed-by: Ján Tomko <jtomko@redhat.com >
Signed-off-by: Kevin Wolf <kwolf@redhat.com >
2020-02-18 10:53:56 +01:00