Repository navigation
Highlights
- nvme-discoverd by default. The NVMe-oF discovery daemon is now built and installed by default, and it replaces the legacy udev/systemd autoconnect. Discovery controllers stay connected (--persistent=auto) and get a keep-alive timeout, so the host reacts to discovery AENs. Discovery over mDNS (TP8009) is optional.
- FreeBSD support. nvme-cli and libnvme build and run on FreeBSD for PCIe devices.
- Stricter, more consistent command line. The command line is parsed without getopt, so every C library behaves the same. Numbers are parsed strictly, and global options mean the same for every command. Usage errors are short and name the bad option. Some old spellings are no longer accepted; see Incompatible changes in NEWS.md.
- Register commands reworked. show-regs, get-reg, set-reg and the property commands use the register names of the specification, have one JSON format, and handle fabrics controllers correctly.
- Security hardening.
- A root command injection in the WDC and SanDisk plugins is fixed.
- Vendor plugins no longer run external tar/zip/dmesg; they use libarchive instead.
- Many decoders that read past their buffers on malformed device data are fixed; fuzzing found them.
- Technology previews, disabled by default. These may change, or be removed again.
- Privilege separation and a decoder sandbox. Under sudo, nvme-cli drops root and sends its device commands through a small root helper. The decoders of device data run in a sandboxed child process.
- nvme-keysd. It loads NVMe/TCP TLS keys from encrypted systemd credentials into the kernel keyring.
- Monitoring. nvme top -o json writes the I/O statistics and the error and failover counters as one JSON document. A new MCP server, scripts/mcp/nvme-mcp, builds on that output to watch multipath I/O.
- libnvme.
- libnvme3.pc reports the release version, so projects can require libnvme3 >= 3.2.
- io_uring passthru works again on block devices and namespace char devices.
- The fabrics library has new APIs for the kernel's supported options and for discovered-controller secrets.
See NEWS.md (https://github.com/linux-nvme/nvme-cli/blob/master/NEWS.md) for the full list of changes, including the incompatible ones.
What's Changed
- Some more coverity fixes by @igaw in #4044
- docs: update README by @igaw in #4045
- tests: add sub-test support to runner and add runner unit tests by @brgoing in #4046
- nvme-print: fix out-of-bounds reads in ANA log parsers by @itsmeut01 in #4048
- global-ctx: add nvme_sysfs_ctrl_path() for mockable sysfs paths by @brgoing in #4047
- Even more Coverity fixes by @igaw in #4050
- discoverd: check the EPCSD poll timer before the desired set by @martin-belanger in #4051
- discoverd: wait for a stale unit name to come free by @martin-belanger in #4052
- ocp: allow skipping the UUID index lookup on log page commands by @brgoing in #4054
- nvme-print: add identify controller data structure CIU and CIRN by @ikegami-t in #4041
- discoverd: match candidates against existing connections by @martin-belanger in #4053
- Various fixes by @igaw in #4055
- discoverd: give candidates without a host the default identity by @martin-belanger in #4057
- discoverd: adopt existing connections at startup by @martin-belanger in #4060
- fabrics: default enable PDCs for targets that enable EPCSD by @martin-gpy in #4056
- build(deps): bump docker/setup-qemu-action from 4.3.0 to 4.4.0 by @dependabot[bot] in #4059
- build(deps): bump codecov/codecov-action from 7.0.0 to 7.1.1 by @dependabot[bot] in #4058
- More coverity fixes by @igaw in #4062
- nvme-print-stdout: convert id-ns LBA format list to shr_table by @igaw in #4063
- libnvme: examples: bound device-supplied lengths in mi-mctp, fix ssid print by @prabhakarpujeri in #3919
- shared/table-util: trim trailing whitespace by @ikegami-t in #4061
- libnvme: inherit IPv6 scope for link-local discovery log entries by @igaw in #4064
- wdc: fix stack buffer overflow in C2 marketing-name parser by @itsmeut01 in #4067
- netapp: fix stack buffer overflow in ontap_get_subsysname() by @itsmeut01 in #4068
- discoverd: add mDNS (TP8009) discovery by @martin-belanger in #4065
- nvme-print: trim sn, mn and fr trailing whitespaces by @ikegami-t in #4069
- discoverd: fix reused device names, IPv6 link-local scope, host ID matching by @martin-belanger in #4071
- libnvme: export the kernel's fabrics options by @martin-belanger in #4070
- micron: fix issues found during testing by @brgoing in #4074
- discoverd: release controllers that are no longer desired by @martin-belanger in #4075
- ocp: improve smart-add-log testing and fix issues found during testing by @brgoing in #4077
- shared/tests: add test-table-util exact-output regression assertion by @ikegami-t in #4072
- nvme-print-stdout: widen the fdp-usage key buffer by @martin-gpy in #4079
- netapp: add few misc fixes by @martin-gpy in #4080
- tests: Add a shared micron test base and output checks, and a harness for shared micron mock tests by @brgoing in #4076
- nvme-print-stdout: split stdout_id_ctrl by fields group by @ikegami-t in #4082
- build: enable nvme-discoverd by default by @dwsuse in #4083
- Get initial FreeBSD support rolling by @dwsuse in #3745
- ci: install packages before cloning in the FreeBSD build by @dwsuse in #4093
- Fix freebsd tests by @dwsuse in #4100
- build: make nvmf-autoconnect the fallback for nvme-discoverd by @martin-belanger in #4085
- discoverd/tests: write the resolved drop-in under /run by @martin-belanger in #4086
- Add hardware and non-hardware test coverage for more Micron plugin commands by @brgoing in #4087
- daemon-util: share logging and signal handling between daemons by @martin-belanger in #4088
- wdc: fix path traversal via device-supplied serial and model strings by @itsmeut01 in #4089
- nvme-print: fix out-of-bounds reads in Persistent Event Log parsers by @itsmeut01 in #4090
- build(deps): bump msys2/setup-msys2 from 2.32.0 to 2.33.0 by @dependabot[bot] in #4096
- ocp: fix integer truncation in hardware component log retrieval by @itsmeut01 in #4097
- libnvme: bug fix - NULL pointer dereferencing by @martin-belanger in #4098
- libnvme: Coverity fixes by @martin-belanger in #4099
- discoverd: use log_warn() instead of undefined disc_warn() by @dwsuse in #4101
- build, doc: Require libsystemd v258 for mDNS, document minimum dependency versions by @martin-belanger in #4091
- build: run the nvme-discoverd integration test nightly by @dwsuse in #4084
- ci: build FreeBSD on pushes to master by @dwsuse in #4102
- CI: fix nightly builds by @dwsuse in #4108
- libnvme, python: report the errno text in Python exceptions by @martin-belanger in #4106
- discoverd/tests: add a wringer test for a DC that is not live by @martin-belanger in #4104
- plugins/solidigm fix multidimensional telemetry arrays parsing by @lgdacunh in #4107
- ocp: decode Virtual FIFO events (debug event class 0Bh) by @brgoing in #4109
- libnvme: Send a keep-alive timeout to Discovery Controllers by @martin-belanger in #4110
- samsung: fix MCTP telemetry transfers and add MCTP mock tests by @h1219-kim in #4094
- tests/micron: tolerate background I/O in smart-log counter comparison by @igaw in #4112
- completions: add missing completions for connect --discovery by @brgoing in #4116
- ocp: add telemetry decoding support for OCP 2.7 debug events and context statistic descriptors by @brgoing in #4115
- Remove jq filter by @lgdacunh in #4119
- discoverd, libnvme: fix races found while testing restarts and reconnects by @martin-belanger in #4120
- Makefile: run checkpatch per commit by @martin-belanger in #4121
- ci: add libabigail ABI check for libnvme exported symbols by @igaw in #4122
- NEWS: describe the discovery keep-alive changes by @martin-belanger in #4118
- nvme-keysd: Milestone 1 - load TLS PSKs from systemd credentials by @martin-belanger in #4105
- Makefile: filter the _cleanup* false positive from checkpatch by @martin-belanger in #4127
- Preperation for the privelige separation feature by @dwsuse in #4117
- discoverd, coverity: free log page entries when caching them fails by @martin-belanger in #4125
- tests: stop racing live SMART counters in micron shared-fields test by @igaw in #4132
- plugins: remove all external command calls by @igaw in #4114
- wdc: fix format string vulnerability in wdc_do_drive_essentials by @itsmeut01 in #4123
- ci: fix the nightly coverage report by @martin-belanger in #4124
- ocp: consolidate internal-log telemetry decode paths onto the table-driven parser by @brgoing in #4126
- nvme-print: fix out-of-bounds reads in LBA status log parsers by @itsmeut01 in #4130
- discoverd: raise test coverage and fix IPv6 NBFT discovery URIs by @martin-belanger in #4131
- micron: add FreeBSD build of micron-utils by @igaw in #4133
- Enable libarchive and archive-utils on Windows by @brgoing in #4134
- build: add meson install tags for package splitting by @martin-belanger in #4128
- ocp: decode C4h FIPS 140 Validation Status by @brgoing in #4135
- keysd: raise test coverage by @martin-belanger in #4136
- scripts: filter the func checkpatch warning in test code by @martin-belanger in #4137
- libnvme/doc: require sphinx only when building the docs by @martin-belanger in #4138
- libnvme/doc: document all public headers by @martin-belanger in #4139
- systemd: start nvme-discoverd and the autoconnect units after tlshd by @martin-belanger in #4142
- keysd: run once, and only when a key source is configured by @martin-belanger in #4141
- scripts: do not check install tags of subproject files by @martin-belanger in #4147
- keysd/tests: fall back to tlshd in PATH by @martin-belanger in #4146
- build: fail on impossible options, and modernize the meson files by @martin-belanger in #4148
- libnvme/doc: fix the sphinx warnings in the API comments by @martin-belanger in #4149
- tests: raise CLI coverage with a print test on the mock device by @martin-belanger in #4151
- tests/ocp: raise timeout of the ocp mock tests by @igaw in #4153
- nvme-print-json: do not use values as format strings by @martin-belanger in #4156
- nvme-print: fix persistent event log parsing by @martin-belanger in #4154
- Move controller register access into libnvme by @dwsuse in #4158
- libnvmf: various fixes by @igaw in #4157
- ocp: bound telemetry and string log decoding by the log size and fix bugs by @brgoing in #4159
- libnvme: add a privilege separation helper by @dwsuse in #4160
- Fix ASAN and UBSAN findings in the printers and plugins by @dwsuse in #4161
- config: rename key-source to tls-key-source by @martin-belanger in #4169
- ocp: restore ETDAS even when the internal-log telemetry read fails by @brgoing in #4171
- NIC topology aware I/O queue scaling by @shroffni in #4140
- plugins/micron: fix clear-fw-activate-history and 6-byte NAND statistics by @dwsuse in #4162
- libnvme: keep the DH-HMAC-CHAP secret on the controller by @martin-belanger in #4166
- Fix freebsd net util by @igaw in #4172
- news: document the use of --nr-io-queues during nvme connect by @shroffni in #4173
- daemon-util: add an asynchronous resolver for sd-event by @martin-belanger in #4174
- libnvme: name the Identify Controller bit fields after the NVMe spec by @igaw in #4175
- libnvme: report the release version in libnvme3.pc by @igaw in #4176
- libnvme: forward the remaining device operations through the privsep helper by @dwsuse in #4177
- discoverd: resolve configured host names without blocking by @martin-belanger in #4178
- libnvme: forward the fabrics operations through the privsep helper by @dwsuse in #4180
- keysd: get TLS PSKs from KMIP servers by @martin-belanger in #4163
- shared: use the scope of a link-local egress address by @martin-belanger in #4181
- nvme-print: fix the media unit status log by @martin-belanger in #4164
- libnvme: add a namespace WWID accessor by @ooonea in #4179
- discoverd: read discovery logs without blocking by @martin-belanger in #4184
- Fix option type mismatches and option table bugs by @dwsuse in #4189
- keysd: describe KMIP in the README by @martin-belanger in #4186
- nvme-print: limit device-reported counts in the FDP and ZNS printers by @martin-belanger in #4187
- ci: use a cached copy of checkpatch.pl by @martin-belanger in #4188
- argconfig: typed option macros and a parser without getopt by @dwsuse in #4190
- Make --dry-run skip resets, rescans, Opal operations and fabrics connects by @dwsuse in #4191
- nvme: one table of global options and a central output format check by @dwsuse in #4192
- Fix big-endian bugs found by the print test by @martin-belanger in #4193
- tests: keep the mock server running after a handler error by @martin-belanger in #4194
- ocp: name spec-defined Event IDs missing from the String Log by @brgoing in #4195
- nvme: consistent device operand, help and usage errors by @dwsuse in #4196
- argconfig: given options by variable, no negative unsigned numbers, value names by @dwsuse in #4197
- plugins: fix feat num-queues and the ocp ieee1667 --enable help by @dwsuse in #4198
- nvme: run deprecated commands from a table, drop getopt by @dwsuse in #4200
- nvme-discoverd: handle events from unowned discovery controllers by @martin-belanger in #4201
- nvme: global options win over command options by @dwsuse in #4202
- nvme: shorter usage errors, labelled and colored errors, old option names by @dwsuse in #4203
- nvme: option words as enums, deprecation metadata, drop NVME_ARGS by @dwsuse in #4204
- plugins/virtium: fix the length check of the log header strings by @dwsuse in #4211
- argconfig: include shared option tables, drop NVMF_ARGS and FEAT_ARGS by @dwsuse in #4205
- argconfig, config: harden the parsers against poisoned input by @dwsuse in #4206
- nvme: handle unexpected data from the device by @dwsuse in #4209
- tests: fuzz the data the device returns by @dwsuse in #4210
- Fix CI build failures from the fuzzing rework by @dwsuse in #4214
- argconfig: include the global options like a table by @dwsuse in #4215
- argconfig: value types and ranges for options by @dwsuse in #4216
- argconfig: options which take a list of names by @dwsuse in #4217
- shared: reject numbers with a leading zero by @dwsuse in #4218
- plugins: bound the string buffers by @dwsuse in #4219
- ci: attach the static Linux and Windows binaries to the release by @martin-belanger in #4208
- tests, build: fix the coverage report of the nightly runs by @dwsuse in #4220
- tests: consistent test names and group suites by @dwsuse in #4221
- build: fix clang sanitizer and fuzzing builds, add build.sh fuzz by @dwsuse in #4222
- Fix bugs found by fuzzing the device data by @dwsuse in #4223
- nvme: add few misc fixes by @martin-gpy in #4224
- nvme-print-stdout: do not truncate the 16-bit feature fields by @NotAFlightRisk in #4213
- ocp: Fix OCP telemetry timestamp field decode by @jeff-lien-sndk in #4226
- fuzz: fix the runner, fix 7 device-data bugs, fuzz more core commands by @dwsuse in #4225
- ocp: fix telemetry log page header decode issues by @brgoing in #4212
- nvme: split command lookup and config parsing for privsep by @dwsuse in #4185
- nvme: drop root privileges through the privsep helper by @dwsuse in #4182
- nvme-print-json: list only the supported events of the persistent event log by @dwsuse in #4229
- nvme-print-stdout: replace open coded field decoding by @ikegami-t in #4230
- nvme: fix the JSON document count and label the remaining error messages by @dwsuse in #4231
- nvme: decode the device data in a sandbox by @dwsuse in #4183
- nvme-print: fix ANA, FDP and endurance group event findings of the device fuzzer by @dwsuse in #4233
- libnvme: NVME_VAL() shift overflow; nvme-print-json: json-c seed in the sandbox by @dwsuse in #4234
- build.sh: build the fuzz config with debug info by @dwsuse in #4235
- build: replace the docs-build option with an update-docs target by @martin-belanger in #4207
- fuzz round 4: fixes for findings of the device fuzzer by @dwsuse in #4236
- keysd: wait for the restarted daemon to be ready in the wringer by @martin-belanger in #4237
- fuzz: fixes for the device fuzzer findings, vendor command coverage and nvme-fuzz by @dwsuse in #4238
- intel: do not read past the vendor specific fields of id-ctrl by @dwsuse in #4239
- scripts/fuzz: stage the device data limit and minimize the corpus by @dwsuse in #4240
- ci: report the coverage of the test suite and the fuzz seeds nightly by @dwsuse in #4241
- scripts/fuzz: seed the device target from the mock tests by @dwsuse in #4243
- libnvme: do not wrap around the ANA log buffer on 32 bit by @dwsuse in #4245
- ocp: limit the firmware activation history to its 20 entries by @dwsuse in #4244
- nvme-print: bound the address of the management address list log by @dwsuse in #4247
- nvme-print-json: finish the document of a command which parses twice by @dwsuse in #4248
- micron: do not leak the JSON objects of vs-smart-add-log by @dwsuse in #4242
- build: build the wdc plugin with the sandisk one by @dwsuse in #4249
- sandisk: hand the opened device to the wdc fallbacks by @dwsuse in #4250
- scripts/fuzz: look for the inputs of the other jobs once a minute by @dwsuse in #4251
- virtium: do not read past the serial and model number of id-ctrl by @dwsuse in #4252
- fabrics: use the secrets of a section for discovered controllers by @martin-belanger in #4246
- scripts/fuzz: sweep, PCI models, faster stage starts by @dwsuse in #4253
- wdc: walk the SN861 CA log within its buffer by @dwsuse in #4254
- tests: run the config-convert test only with the config plugin by @dwsuse in #4255
- build.sh: run the libnvme ioctl tests in the cross builds by @dwsuse in #4256
- scripts/fuzz: let Ctrl-C stop a merge on FreeBSD and under valgrind by @dwsuse in #4257
- nvme: check the LBA data sizes format shifts by by @dwsuse in #4259
- ocp: print the state get-enable-ieee1667-silo reads by @dwsuse in #4260
- nvme-print: decode only the directive data the buffer holds by @dwsuse in #4261
- rpmb: decode RPMBS portably, write --msgfile where it names by @dwsuse in #4258
- nvme, libnvme: check the LBA data size before shifting by it by @dwsuse in #4262
- ymtc: read the PCI IDs of the controller the command opens by @dwsuse in #4263
- wdc, sandisk: saturate the 128 bit counters of the JSON smart log by @dwsuse in #4264
- ymtc: read the raw values of the SMART log unaligned and little endian by @dwsuse in #4265
- fuzz: coverage of the vendor plugins which check the controller model by @dwsuse in #4266
- wdc: fix the mock test on big endian and without json-c by @dwsuse in #4267
- libnvme, ns, resv: test CTRATT in CPU byte order by @dwsuse in #4268
- Log page dir fix by @lgdacunh in #4269
- tests/cli: pass the whole command to the mock and share the mock test harness by @dwsuse in #4270
- ci: replace the SFTP uploads with GitHub releases and Pages by @igaw in #4271
- tests/cli: test the admin commands which change the controller state by @dwsuse in #4272
- ci: take the Python version from a release tag by @dwsuse in #4274
- Fix the bugs the admin command mock tests found by @dwsuse in #4273
- tests/cli: test the I/O commands and the zns, resv, dir and io-mgmt send paths by @dwsuse in #4275
- Fix dump-command-metadata in sanitizer builds by @dwsuse in #4277
- Fix the bugs the I/O command mock tests found by @dwsuse in #4276
- Fix the remaining review findings of #4276 by @dwsuse in #4280
- tests/cli: test the register and property commands by @dwsuse in #4281
- Fix the bugs the register mock tests found by @dwsuse in #4282
- doc: use the tag mask option names nvme copy accepts by @NotAFlightRisk in #4284
- Fix the nightly coverage job and make its failures visible by @dwsuse in #4286
- Drop two unused variables clang 14 fails a --werror build on by @dwsuse in #4287
- Rewrite the register commands around a register table by @dwsuse in #4283
- libnvme: keep the sysfs paths of a test sysfs directory per context by @dwsuse in #4288
- shared: skip the IPv6 loopback route tests without IPv6 by @dwsuse in #4293
- wdc, rpmb: fix device fuzz findings by @dwsuse in #4291
- tests/fuzz: fuzz the commands which transfer data or poll the device by @dwsuse in #4292
- lm, errno, set-feature: fixes from fuzzing the send commands by @dwsuse in #4296
- ocp: replace the internal-log globals and tighten symbol linkage by @brgoing in #4295
- libnvme: send io_uring passthru commands only where the kernel takes them by @dwsuse in #4294
- wdc: fix the C1 performance statistics and the C2 entry walk by @dwsuse in #4297
- tests/fuzz: fuzz the commands which send something and print the answer by @dwsuse in #4298
- sandisk: extend vs-smart-add-log support by @brandon-paupore-sndk in #4301
- nbft: fuzz nvme nbft show, fix what it found by @dwsuse in #4299
- CONTRIBUTING: describe how to add tests for a command by @dwsuse in #4323
- scripts/fuzz: record allocation stacks of two frames in the fuzz jobs by @dwsuse in #4300
- discoverd: reconnect FC IOCs after a port was down for longer than dev_loss_tmo by @dwsuse in #4326
- doc: describe NVMe-oF failover testing with nvmf-failover by @dwsuse in #4333
- mi: Don't check generation number in ack response by @chorkin in #4336
- nvme top: don't crash on loop or deleted controllers, survive path removal by @dwsuse in #4334
- discoverd, keysd: install the configuration files as samples by @dwsuse in #4325
- libnvme: send the copy descriptor tags little endian by @dwsuse in #4279
- nvme top: JSON output, shared I/O statistics, nvme-mcp by @dwsuse in #4335
- scripts/mcp: add nvme_watch, path addresses and the kernel log by @dwsuse in #4338
- scripts/mcp: add the wall clock start time to nvme_watch by @dwsuse in #4339
- nvme-discoverd: disconnect only after the _netdev mounts are unmounted by @martin-belanger in #4332
- build(deps): bump docker/login-action from 4.6.0 to 4.7.0 by @dependabot[bot] in #4343
- sndk: Removed dead code in sndk plugin by @jeff-lien-sndk in #4344
- MAINTAINERS: list the maintainers of the components by @dwsuse in #4302
- nvme: add misc fixes by @martin-gpy in #4341
- NEWS: clean up the 3.2 section by @igaw in #4349
- doc: fix the man page build and generate the command lists of nvme(1) by @igaw in #4350
New Contributors
- @ooonea made their first contribution in #4179
- @NotAFlightRisk made their first contribution in #4213
- @chorkin made their first contribution in #4336
Full Changelog: v3.1...v3.2