These are the release notes for libnbd stable release 1.12. This describes the major changes since 1.10.
libnbd 1.12.0 was released on 24February2022.
Security
CVE-2022-0485
Silent data corruption when using nbdcopy(1).
See the full announcement here:
https://listman.redhat.com/archives/libguestfs/2022-February/msg00104.html
If you find a security issue, please read SECURITY in the source (online here:
https://gitlab.com/nbdkit/libnbd/blob/master/SECURITY). To find out about previous security issues in
libnbd, see libnbd-security(3).
NewAPIs
get_pread_initialize
set_pread_initialize
Control whether libnbd clears the pread buffer to avoid leaking memory contents if the client does
not properly handle errors. These were added as part of the fix for CVE-2022-0485 (Eric Blake).
get_request_block_size
set_request_block_size
Control whether libnbd requests block size constraints from the server during negotiation (Eric
Blake).
EnhancementstoexistingAPIs
Error messages about incorrect URIs in nbd_connect_uri(3) have been improved to make common mistakes
clearer for the user.
Tools
New syntax: "nbdinfo [ CMD ... ]" allowing you to query the properties of an NBD server directly.
nbdcopy(1) new --queue-size option to control the maximum size of the internal buffer (Nir Soffer).
nbdcopy(1) now names the source and destination handles to make it easier to understand debug output.
Tests
Adopt libvirt-ci's ci/gitlab.yml (Martin Kletzander).
Fix the OCaml extents example (thanks Laszlo Ersek).
Golang benchmarks were added to the test suite (Nir Soffer).
The large tests/errors.c test was split into about a dozen separate tests. Also this adds a new test for
checking server-side block size constraint error policy which was missing before.
Otherimprovementsandbugfixes
New OCaml "NBD.with_handle" helper which ensures that "NBD.close" is always called even if the inner code
throws an exception.
The OCaml bindings now consistently use the correct types for buffer sizes everywhere (Laszlo Ersek).
Several improvements and fixes to the golang bindings and tests. The golang bindings have been
relicensed to LGPLv2+ like the rest of the library and are now published as a golang module at
https://libguestfs.org/libnbd (Nir Soffer).
The Python bindings no longer crash if you pass "None" in place of a buffer parameter. In addition some
memory leaks were fixed (Eric Blake).
Various memory leaks have been fixed when using the optional strict_mode settings (Eric Blake).
The performance of the internal vector library has been improved greatly and overflow is now handled
correctly (Nir Soffer, Laszlo Ersek and Eric Blake).
Add "simple_copy" and "aio_copy" Golang examples (Nir Soffer).
Error handling was reviewed and fixed across many of the example programs and documentation (Eric Blake,
Nir Soffer).
Simplify and optimize handling of the extents callback in Golang (Nir Soffer).
Golang AioBuffer was enhanced, making it safer to use, faster and adding documentation (Nir Soffer).
Documentation
Document the limits on lengths and sizes of parameters to various APIs (Eric Blake).
Build
You can now build programs that use the OCaml bindings of libnbd against the libnbd build directory
instead of requiring libnbd to be installed (Laszlo Ersek).
Compatibility with OCaml 4.13.
Line locations in the state machine should be more accurate when stepping through with a debugger like
gdb.
.editorconfig file can be used to help code formatting, see https://editorconfig.org/ (Nir Soffer, Eric
Blake).
"MIN" and "MAX" macros can be nested (thanks Eric Blake).