[Libguestfs] libnbd golang failure on RISC-V
Richard W.M. Jones
rjones at redhat.com
Thu Jun 9 16:31:38 UTC 2022
On Thu, Jun 09, 2022 at 05:00:46PM +0100, Daniel P. Berrangé wrote:
> Well it isn't use-after-free, because we've cleared the
> pointer we freed.
Yes, indeed that's what I meant to say!
> > It seems a bit of an odd function however. Wouldn't it be better to
> > changes the Bytes function so that it tests if the pointer is NULL and
> > panics?
>
> In theory I guess both should be equivalent in terms of
> semantics for the caller.
>
> Also I feel like 'Free' ought to set 'b.Size = 0' after
> it set 'b.P = nul'. That should solve the problem for
> the Bytes & Slice method tests at least, but probably not
> the Get method test.
Making this change has very unexpected effects (although I think I
partially understand what's going on). Note this is replicable on
x86-64.
=== RUN TestAioBufferBytesAfterFree
libnbd_020_aio_buffer_test.go:108: Did not recover from panic calling Bytes() after Free()
--- FAIL: TestAioBufferBytesAfterFree (0.00s)
This is failing because C.GoBytes does _not_ segfault, since it is
being asked to memcpy a zero length buffer.
=== RUN TestAioBufferSliceAfterFree
--- PASS: TestAioBufferSliceAfterFree (0.00s)
I think I understand why this test now passes, because of the way that
slices are created using b.Size which is now 0.
=== RUN TestAioBufferGetAfterFree
--- PASS: TestAioBufferGetAfterFree (0.00s)
Why does this test now pass?! It's still dereferencing a NULL
pointer.
I wonder why Get doesn't do bounds checking? That seems like a
general bug.
> > NB: this _does not_ address the other problem where GODEBUG=cgocheck=2
> > complains about "fatal error: Go pointer stored into non-Go memory".
>
> Maybe that message across comes from the Go signal handler that's
> trying to cope with the SEGV from the NULL reference, causing it
> to trip over itself & thus not turn the problem into a pnaic.
We're rebuilding the latest Fedora packages, so my plan here is to try
with the newest golang when it becomes available and hope it's been
fixed upstream (if it's a golang problem).
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW
More information about the Libguestfs
mailing list