Message ID | CAFEAcA-8jo5SmV41CP6aquyWWvrQQo5OoXbac=knD4z6A3fHxw@mail.gmail.com |
---|---|
State | New |
Headers | show |
Series | "make check" fails in a clang sanitizer build on "nbd-qemu-allocation" iotest | expand |
On Mon, Nov 15, 2021 at 05:11:54PM +0000, Peter Maydell wrote: > Hi; running a 'make check' on a clang sanitizer build one of > the iotests falls over due to a NULL pointer being passed to > memset(): > > > TEST iotest-qcow2: nbd-qemu-allocation [fail] > +../../nbd/server.c:1027:16: runtime error: null pointer passed as > argument 1, which is declared to never be null The code in question: if (client->opt == NBD_OPT_LIST_META_CONTEXT && !nb_queries) { /* enable all known contexts */ meta->base_allocation = true; meta->allocation_depth = meta->exp->allocation_depth; memset(meta->bitmaps, 1, meta->exp->nr_export_bitmaps); I suspect what is happening is that meta->bitmaps is NULL when meta->exp->nr_export_bitmaps is 0. It's annoying that clang's sanitizer whines even for a 0-length memset, but a strict reading of POSIX says that we really are in the technically undefined behavior when passing NULL (even with 0 length), so such whiny behavior is permitted. So I'll post a patch. > > Does this look familiar ? First I've heard of it; thanks for alerting me.
--- /home/petmay01/linaro/qemu-from-laptop/qemu/tests/qemu-iotests/tests/nbd-qemu-allocation.out +++ nbd-qemu-allocation.out.bad @@ -14,6 +14,8 @@ [{ "start": 0, "length": 1048576, "depth": 1, "present": true, "zero": false, "data": true, "offset": 327680}, { "start": 1048576, "length": 2097152, "depth": 0, "present": true, "zero": false, "data": true, "offset": 327680}, { "start": 3145728, "length": 1048576, "depth": 1, "present": false, "zero": true, "data": false}] +../../nbd/server.c:1027:16: runtime error: null pointer passed as argument 1, which is declared to never be null