Nir Soffer
2022-Feb-03 18:07 UTC
[Libguestfs] [PATCH libnbd] golang: tests: Fix error handling
Like lot of the C examples, the aio copy test ignores read and write
errors in the completion callback, which can cause silent data
corruption. The failure in the test is not critical, but this is a bad
example that may be copied by developers to a real application.
The test panics now if completion callback fails, similar to other Go
examples.
Signed-off-by: Nir Soffer <nsoffer at redhat.com>
---
golang/libnbd_590_aio_copy_test.go | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/golang/libnbd_590_aio_copy_test.go
b/golang/libnbd_590_aio_copy_test.go
index 570635c9..8be0ad2d 100644
--- a/golang/libnbd_590_aio_copy_test.go
+++ b/golang/libnbd_590_aio_copy_test.go
@@ -99,33 +99,41 @@ func asynch_copy(t *testing.T, src *Libnbd, dst *Libnbd) {
source then do it now. */
if soff < size && src_in_flight < max_reads_in_flight {
n := bs
if n > size-soff {
n = size - soff
}
buf := MakeAioBuffer(uint(n))
soff_copy := soff
var optargs AioPreadOptargs
optargs.CompletionCallbackSet = true
- optargs.CompletionCallback = func(*int) int {
+ optargs.CompletionCallback = func(error *int) int {
+ if *error != 0 {
+ err := syscall.Errno(*error).Error()
+ panic(err)
+ }
return read_completed(buf, soff_copy)
}
src.AioPread(buf, soff, &optargs)
soff += n
}
/* If there are any write commands waiting to
be issued, send them now. */
for _, wb := range writes {
var optargs AioPwriteOptargs
optargs.CompletionCallbackSet = true
- optargs.CompletionCallback = func(*int) int {
+ optargs.CompletionCallback = func(error *int) int {
+ if *error != 0 {
+ err := syscall.Errno(*error).Error()
+ panic(err)
+ }
return write_completed(wb.buf)
}
dst.AioPwrite(wb.buf, wb.offset, &optargs)
}
writes = writes[:0]
/* Now poll the file descriptors. */
nfd := 1
sfd, err := src.AioGetFd()
if err != nil {
--
2.34.1
Eric Blake
2022-Feb-03 19:24 UTC
[Libguestfs] [PATCH libnbd] golang: tests: Fix error handling
On Thu, Feb 03, 2022 at 08:07:52PM +0200, Nir Soffer wrote:> Like lot of the C examples, the aio copy test ignores read and write > errors in the completion callback, which can cause silent data > corruption. The failure in the test is not critical, but this is a bad > example that may be copied by developers to a real application. > > The test panics now if completion callback fails, similar to other Go > examples. > > Signed-off-by: Nir Soffer <nsoffer at redhat.com> > --- > golang/libnbd_590_aio_copy_test.go | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-)ACK. python/t/590-aio-copy.py and ocaml/tests/test_490_aio_copy.ml need the same treatment. I'll post that with my v2 of the CVE fix. (It's nice that we've tried to share the same test numbers across language bindings - it makes it a bit easier where we copy the same coding paradigms across different languages) -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org