On 5/13/20 6:04 PM, Keith Busch wrote: > On Wed, May 13, 2020 at 04:36:21PM -0500, Tony Asleson wrote: >> +static int dev_to_nvme_durable_name(const struct device *dev, char *buf, size_t len) >> +{ >> + char serial[128]; >> + ssize_t serial_len = wwid_show((struct device *)dev, NULL, serial); > > wwid_show() can generate a serial larger than 128 bytes. Looking at this again return sprintf(buf, "nvme.%04x-%*phN-%*phN-%08x\n", subsys->vendor_id, serial_len, subsys->serial, model_len, subsys->model, subsys->ns_id); 'nvme.' = 5 vendor_id = 4 '-' = 1 serial (20 * 2) = 40 '-' = 1 model (40 * 2) = 80 '-' = 1 ns_id = 8 '\n' = 1 5 + 4 + 1 + 40 + 1 + 80 + 1 + 8 + 1 = 141 Does this match your understanding? My mistake was thinking each byte of SN and Model = 1 character in output, instead of 2. This will also require the buffer used in dev_vprintk_emit to be quite a bit bigger to accommodate max size. >> + >> + if (serial_len > 0 && serial_len < len) { >> + serial_len -= 1; // Remove the '\n' from the string > > Comments in this driver should use the /* */ style. OK, will revise. > >> + strncpy(buf, serial, serial_len); >> + return serial_len; >> + } >> + return 0; >> +} > Thanks -Tony