From nobody Thu Oct 08 20:43:48 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 4j125d58LVz4n2mF for ; Thu, 08 Oct 2026 20:43: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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4j125d0yKpz4bxV for ; Thu, 08 Oct 2026 20:43:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791492229; 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=npp6LBIuln1frNzx1cuqbtIXge8ZiFBJknSk77OVnTs=; b=SZ0Ar3znQsaLDXDcROLNHnU7h7D9erRYB1SNz84GpHA74MFcVoGveOUjlB7Rm9TuhKmwRV m/aVMAqb/ZASwHM1qYT64O5C+xwash4hL6qRA3Xo3F7oxV5oDnVtwQEJahwABwRNp3FL43 FdtaFFzhdxizlb5goNIeWL/oobeuIVPC9Jvx9xQPcbJlwxvhuGQia6n9iAtkmNbkQolmZU opPjNHwXVksV+1bxxuQz32JWySnIs8c4Ft0zpwOd/Dp20R+YHDMbNnM6//akOVwy7TqkMy RiszQhHrCDFCixY197benEhwSvCfDRmoJcP3RCN787QBzWjNXjTpgzb/95oiYQ== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791492229; b=s6WNO0Cb8m6gTF1nPJ0tPcjPTUlVk7+r0f+FdprlOXgAY+Wwr7zTxUVsWmxhkJtw9PgdHM laxvJnfaPgQR74IDSArDiEgLy1sPfD69H12zRG3916NYX1F2lXXTAedT4HFKxLLzjSyWwz fMyCoH/jXyTLFFVOBH7MZf1Y5m6Qyse94QXnV+UV27DD/JSjKUOEf9ba1KlZH+2cDYa1f4 USMln9zo3GeMef54lAESLj45t4dBM2g0V/ztjiEsRVhXhVXADDd2zNq2VjllsyFNqzw7ww 2YF1z9sEn0yRBYXwxsE4MzWoMtbMldnQ3yegX2VegV5XrkcUxMGV3GDqTCUXSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791492229; 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=npp6LBIuln1frNzx1cuqbtIXge8ZiFBJknSk77OVnTs=; b=uDN3H3byRpp2Np17VQrV3HPSult4wkEQ4blAhH2XT36QDedayFMSQlNyx+prdYm2heULsb xYswkHesmzwqAnRqDhgUqkpDYdMyZiaKGCQqSsbMEa4ZUbSnArx5YHkAKVwV8jUWjOGmoR sx5VfVzW0B/Vfz2WHZ70ACI4G+hQkdvJbntKBfRp7EI96DdLsj1miuZWHG9dsvuHYA16yq gjGefOs78EEa830URWO5tZMAwpO3/ClPsxjylf0qLnKchWAxO1exuddawIpei4ZQoc7NrK uWdajjP4sYnMe+tKie7FlT8QXmNIFKXj6LkGPHsFcGwUICX/9OdxdrCOQafy/A== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4j125d00WqzwZ3 for ; Thu, 08 Oct 2026 20:43:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3331b by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 08 Oct 2026 20:43:48 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: John Baldwin Subject: git: 9d34ae01cca9 - stable/15 - ctld: Normalize physical port names 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 List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhb X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 9d34ae01cca97c22fe2fb374416b95ce179d4503 Auto-Submitted: auto-generated Date: Thu, 08 Oct 2026 20:43:48 +0000 Message-Id: <6ac80084.3331b.3cedc74f@gitrepo.freebsd.org> The branch stable/15 has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=9d34ae01cca97c22fe2fb374416b95ce179d4503 commit 9d34ae01cca97c22fe2fb374416b95ce179d4503 Author: John Baldwin AuthorDate: 2026-06-25 16:21:25 +0000 Commit: John Baldwin CommitDate: 2026-10-08 20:42:31 +0000 ctld: Normalize physical port names Don't require ioctl port names to be fully expanded as this contradicts the syntax documented in the ctl.conf(5). However, don't require users to exactly guess when pp or vp can be omitted. Instead, normalize all physical port names by parsing any port name with a pp or vp value and reformatting them to a standardized format. This format is also used when generating names for kernel-enumerated ports. Reported by: Seth Hoffert Fixes: caef3c50ac06 ("ctld: Refactor ioctl port handling") Sponsored by: Chelsio Communications (cherry picked from commit 4907d1c5c7f97ca985611441df5871705b90030c) --- usr.sbin/ctld/ctld.cc | 61 +++++++++++++++++++++++++++++++++++++++++-------- usr.sbin/ctld/kernel.cc | 5 +--- 2 files changed, 52 insertions(+), 14 deletions(-) diff --git a/usr.sbin/ctld/ctld.cc b/usr.sbin/ctld/ctld.cc index 834bef4ef363..19baa0486e44 100644 --- a/usr.sbin/ctld/ctld.cc +++ b/usr.sbin/ctld/ctld.cc @@ -53,6 +53,7 @@ #include #include +#include #include #include "conf.h" @@ -1378,17 +1379,55 @@ target::set_auth_type(const char *type) bool target::add_physical_port(std::string_view pport) { - /* Normalize ioctl port names. */ + /* Normalize port names. */ std::string pname; - if (pport.compare(0, strlen("ioctl/"), "ioctl/") == 0) { - int ret, pp, vp; - - pname = std::string(pport); - ret = sscanf(pname.c_str(), "ioctl/%d/%d", &pp, &vp); - if (ret == 2) { - pname = freebsd::stringf("ioctl/%d/%d", pp, vp); - pport = pname; + size_t pos = pport.find('/'); + if (pos == 0) { + log_warnx("invalid physical port \"%s\" for target " + "\"%s\"", std::string(pport).c_str(), name()); + return (false); + } + + if (pos != pport.npos) { + const char *pport_end = pport.data() + pport.size(); + int pp, vp; + + auto parse_int = [](const char *start, const char *end) -> int { + int value; + + if (start == end) + return -1; + + auto [ptr, ec] = std::from_chars(start, end, value); + if (ec != std::errc() || ptr != end) + return -1; + return value; + }; + + const char *ppstart = pport.data() + pos + 1; + size_t ppend = pport.find('/', pos + 1); + if (ppend == pport.npos) { + pp = parse_int(ppstart, pport_end); + vp = 0; + } else { + const char *vpstart = pport.data() + ppend + 1; + pp = parse_int(ppstart, pport.data() + ppend); + vp = parse_int(vpstart, pport_end); + } + + if (pp == -1 || vp == -1) { + log_warnx("invalid physical port \"%s\" for target " + "\"%s\"", std::string(pport).c_str(), name()); + return (false); + } + + pname = pport.substr(0, pos); + if (pp != 0 || vp != 0) { + pname += "/" + std::to_string(pp); + if (vp != 0) + pname += "/" + std::to_string(vp); } + pport = pname; } for (const auto &s : t_pports) { @@ -2679,7 +2718,9 @@ conf::add_pports(struct kports &kports) */ ret = sscanf(pport.c_str(), "ioctl/%d/%d", &i_pp, &i_vp); - if (ret == 2) { + if (ret > 0) { + if (ret == 1) + i_vp = 0; if (!add_port(targ, pport, i_pp, i_vp)) { log_warnx("can't create new port %s " "for %s", pport.c_str(), diff --git a/usr.sbin/ctld/kernel.cc b/usr.sbin/ctld/kernel.cc index f84440d64c23..188d01052a1c 100644 --- a/usr.sbin/ctld/kernel.cc +++ b/usr.sbin/ctld/kernel.cc @@ -559,10 +559,7 @@ conf_new_from_kernel(struct kports &kports) continue; std::string name = port.port_name; - if (port.port_frontend == "ioctl") - name += "/" + std::to_string(port.pp) + "/" + - std::to_string(port.vp); - else if (port.pp != 0 || port.vp != 0) { + if (port.pp != 0 || port.vp != 0) { name += "/" + std::to_string(port.pp); if (port.vp != 0) name += "/" + std::to_string(port.vp);