From nobody Sat Apr 11 18:28:44 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4ftMcx4mDxz6YvPf for ; Sat, 11 Apr 2026 18:28:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ftMcx2lF9z3YlH for ; Sat, 11 Apr 2026 18:28:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775932129; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=1dBlctsq12x7KkkvBrrxNuVUkH+fMO89kRaAFqub424=; b=nPCWd3E+uDeXZJuhmdcnwBhaLX6xT71vw+F8diJOInvd1RUya4MTH/t9gEDV7ZBD4A1jY9 C8+LupISHh/JmCEnFPjIYnLYeox4ZtfBsJ7xC8chU174/hroQ7vfH02b5DDwptXVOo0wRX 2g/32rX4rWffAmrv49Y0mbkaXNBn4OQFWhwgq9um8wGp+/TYKxv9jIi2r+kAquRW04mNDD sN2VG3yJdZuWK8LF1dvmV9tI0m4pB58Cfp8OdVLYu2PlkO3VUUlHnBruQk50/lmy9T41AC UFN7HGTzqZA8a6+4NJUr0zbDmK7M/DG1A8LbaMw8ZfQNXBLskDz8fx5saZ/PVw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775932129; a=rsa-sha256; cv=none; b=w0w2pHG5B3+MMbwnTmUlC+uJLkWBGGtecw6WKE/o5IZUAmGOy8rrtNtaFjigD0E0RVvsAM +ahxdc6gmvpNjQngpDhYPWjVHjh9KHy+VZ73D6LjC39vBpobLd6Fduyo/UsZmnd7h16N6a zzqSIi/qJQnxo0MYIZO06B6liYvEB2UaTjIU9jcNpejSsj+S0kkmVblqTbTAGReC3eeIoO X94jWNcNTa4xFMsLibJt/ltAfXqbp9zykAHYEonYSdz4EahLkGiElpIPLT5a+AgGE6qFE1 DL38FcTEY/btG9Mt3ByDRWGBrhKpMKyNNCTlw/7GeoKQnZVIykwerjKWV1wn+A== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775932129; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=1dBlctsq12x7KkkvBrrxNuVUkH+fMO89kRaAFqub424=; b=jPNdXEVJaG0P0KX18T6tvINd36BC9kYMti+O8YAol7GCF/IhoAikJXmFj3mm7llaexfEQQ ZfVd070+BUsQop78tRUvFE8+bVveNYFQ4bynyZHkz2uZJCigfBoDHXg1OVeXQdUc0Erg/c PSwzBBXfgRnUm0ml6roaRW+VrcurlNLzn+L07pQKPgoHQEq+61K0ISvrLt3sWi6jaO1H22 P+vvaX7BnWcIoaP1LldCjfZyj6bJ4lzInUIX+7NgamHR+mcA4b6sv5DOR0GW8qtFLdCnKY zZWa9fWmzvNGCxTtCRGVDDogMnZ6STv4gV/lxMaGxQK7Hv0WM9OqFsX9Ws0D+Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4ftMcx2Cx7zjFf for ; Sat, 11 Apr 2026 18:28:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 390d4 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 11 Apr 2026 18:28:44 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Michael Osipov Subject: git: 850eb149e7ab - main - mfiutil(4)/mrsasutil(4): "show drives" truncates information List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: michaelo X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 850eb149e7ab0733fcf9469a607dca223ff467ad Auto-Submitted: auto-generated Date: Sat, 11 Apr 2026 18:28:44 +0000 Message-Id: <69da92dc.390d4.e50e9af@gitrepo.freebsd.org> The branch main has been updated by michaelo: URL: https://cgit.FreeBSD.org/src/commit/?id=850eb149e7ab0733fcf9469a607dca223ff467ad commit 850eb149e7ab0733fcf9469a607dca223ff467ad Author: Michael Osipov AuthorDate: 2026-04-09 09:19:36 +0000 Commit: Michael Osipov CommitDate: 2026-04-11 18:28:03 +0000 mfiutil(4)/mrsasutil(4): "show drives" truncates information Improve mfi_pd_inq_string() by * Reusing buffer sizes from cam/cam.h according to SCSI specification + NULL byte * Don't truncate vendor-specific information by escaping into a too small buffer * Use cam_strvis() from libcam instead of old, outdated local copy * Recaculate size of inq_string based on the reused buffer sizes and format statements PR: 294354 Reviewed by: imp MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D56328 --- usr.sbin/mfiutil/Makefile | 2 +- usr.sbin/mfiutil/mfi_drive.c | 59 +++++++++----------------------------------- 2 files changed, 13 insertions(+), 48 deletions(-) diff --git a/usr.sbin/mfiutil/Makefile b/usr.sbin/mfiutil/Makefile index 49c0e688e8e2..d7ccb1f2d9c1 100644 --- a/usr.sbin/mfiutil/Makefile +++ b/usr.sbin/mfiutil/Makefile @@ -9,7 +9,7 @@ MLINKS= mfiutil.8 mrsasutil.8 CFLAGS.gcc+= -fno-builtin-strftime -LIBADD= sbuf util +LIBADD= cam sbuf util # Here be dragons .ifdef DEBUG diff --git a/usr.sbin/mfiutil/mfi_drive.c b/usr.sbin/mfiutil/mfi_drive.c index c7c5aeb02f14..88d24623ae27 100644 --- a/usr.sbin/mfiutil/mfi_drive.c +++ b/usr.sbin/mfiutil/mfi_drive.c @@ -42,6 +42,7 @@ #include #include #include +#include #include #include "mfiutil.h" @@ -279,50 +280,14 @@ mfi_pd_get_info(int fd, uint16_t device_id, struct mfi_pd_info *info, sizeof(struct mfi_pd_info), mbox, 2, statusp)); } -static void -cam_strvis(char *dst, const char *src, int srclen, int dstlen) -{ - - /* Trim leading/trailing spaces, nulls. */ - while (srclen > 0 && src[0] == ' ') - src++, srclen--; - while (srclen > 0 - && (src[srclen-1] == ' ' || src[srclen-1] == '\0')) - srclen--; - - while (srclen > 0 && dstlen > 1) { - char *cur_pos = dst; - - if (*src < 0x20) { - /* SCSI-II Specifies that these should never occur. */ - /* non-printable character */ - if (dstlen > 4) { - *cur_pos++ = '\\'; - *cur_pos++ = ((*src & 0300) >> 6) + '0'; - *cur_pos++ = ((*src & 0070) >> 3) + '0'; - *cur_pos++ = ((*src & 0007) >> 0) + '0'; - } else { - *cur_pos++ = '?'; - } - } else { - /* normal character */ - *cur_pos++ = *src; - } - src++; - srclen--; - dstlen -= cur_pos - dst; - dst = cur_pos; - } - *dst = '\0'; -} - /* Borrowed heavily from scsi_all.c:scsi_print_inquiry(). */ const char * mfi_pd_inq_string(struct mfi_pd_info *info) { struct scsi_inquiry_data iqd, *inq_data = &iqd; - char vendor[16], product[48], revision[16], rstr[12], serial[SID_VENDOR_SPECIFIC_0_SIZE]; - static char inq_string[64]; + char vendor[SID_VENDOR_SIZE+1], product[SID_PRODUCT_SIZE+1], + revision[SID_REVISION_SIZE+1], rstr[9], serial[SID_VENDOR_SPECIFIC_0_SIZE+1]; + static char inq_string[80]; memcpy(inq_data, info->inquiry_data, (sizeof (iqd) < sizeof (info->inquiry_data))? @@ -334,14 +299,14 @@ mfi_pd_inq_string(struct mfi_pd_info *info) if (SID_QUAL(inq_data) != SID_QUAL_LU_CONNECTED) return (NULL); - cam_strvis(vendor, inq_data->vendor, sizeof(inq_data->vendor), - sizeof(vendor)); - cam_strvis(product, inq_data->product, sizeof(inq_data->product), - sizeof(product)); - cam_strvis(revision, inq_data->revision, sizeof(inq_data->revision), - sizeof(revision)); - cam_strvis(serial, (char *)inq_data->vendor_specific0, sizeof(inq_data->vendor_specific0), - sizeof(serial)); + cam_strvis_flag(vendor, inq_data->vendor, sizeof(inq_data->vendor), + sizeof(vendor), CAM_STRVIS_FLAG_NONASCII_TRIM); + cam_strvis_flag(product, inq_data->product, sizeof(inq_data->product), + sizeof(product), CAM_STRVIS_FLAG_NONASCII_TRIM); + cam_strvis_flag(revision, inq_data->revision, sizeof(inq_data->revision), + sizeof(revision), CAM_STRVIS_FLAG_NONASCII_TRIM); + cam_strvis_flag(serial, (char *)inq_data->vendor_specific0, sizeof(inq_data->vendor_specific0), + sizeof(serial), CAM_STRVIS_FLAG_NONASCII_SPC); /* Hack for SATA disks, no idea how to tell speed. */ if (strcmp(vendor, "ATA") == 0) {