From nobody Tue Jan 24 22:13:24 2023 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 4P1h7S66f7z3bgRq; Tue, 24 Jan 2023 22:13:24 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4P1h7S5c1Qz3GtY; Tue, 24 Jan 2023 22:13:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1674598404; 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=SOp7KSqila1OgMPHi7TILufQN6b39nAJyaWObVmz8/U=; b=kSDtc72mrx+3eUjTPBtCZyGEtLQL2xEORxugro3L57rkAW5CBDTj5wEbuB4AW1jgzQyDOS OF1gsLoU7HLY46YTFRHTIOnCYr2bYD15THzOPx0VJeFwd/lZy9HDt7q3pjCKyTqEjm5k4U vGugmgcmXR3w2wNt8bOS0iOAtw37rNCE6K62ZhU6mVAPDniMUtIvtpB6Mg4XmvuR5mfxUI PBdJlrxydZQSZWAkyVDe1Qs6YASNAyp1cBP+EyXoMKBnt5hwMVLgFXF10jcwCqGkm2TBSe K6rQ5OpOsWk4F+xTkR5LbKpk2EEsoM9T9eQXazNjjz73W7AUy0tEvnEH3AoBRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1674598404; 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=SOp7KSqila1OgMPHi7TILufQN6b39nAJyaWObVmz8/U=; b=jtJ06zrZ37xAG+9y2pYViHfUQ/MdEtCZajD7yFyGWAZdYRI+s5v6d9psE/mAz1FyUWDSmC tkkAS6/U5AnA6bffWfd8j7UFxxwX7E/jxK+7L1/+0Vk+GaGkJRyxNQJW+yZbgoUjA67FT8 o3RbajE7+y1/diH8LnNzW/0LjEmnLOStTzJqGPiaEzLl3x1U1SL9EjuDc6BTsCNxhlxymJ Z66bMUneFux8fX7uw6PfZwTlu9vIeJtNXeFalmizLHAS+6HGndeKAfOGVaq95QOLQpPz0J 5hXAgHbcj0UklF1i0MDoaouAHlSFJh8ORyFg/ovSP/0dMR/MLpUcBxzUe2eQeg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1674598404; a=rsa-sha256; cv=none; b=fscTY92eap9z2thVU3lNfRxbleeOWY909mkZoVFASZmCscVgSV4Tzq65+wymaeMBVD9Go6 yp94AM8mIjzxSx4BzyO7GHg7XtjIymNcq+Lz+utjsZ0zVnND8uKB+UG4NvCkjKK7RcnXJM Qs9kS/xX12o4UPCVOTIO97qZQaXVG0eqHOb9sKhJdk5wPfp0Ymmu5S0MY4tSLWogrcCO5H 7jMNx89W0wPcAw29DUzfQpTL6f9+WViuUaOnFn6YKAETCajnMlDuH0zagdjV4Kbg9MO4PW 701dE/+qvc+liCEdOAxYFEn8FF0Sz+LpUQ3wWFI+WaD+1Ut1YYy/Cauor0GMoA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4P1h7S4k0QzQYj; Tue, 24 Jan 2023 22:13:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 30OMDOfi088385; Tue, 24 Jan 2023 22:13:24 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 30OMDOhA088384; Tue, 24 Jan 2023 22:13:24 GMT (envelope-from git) Date: Tue, 24 Jan 2023 22:13:24 GMT Message-Id: <202301242213.30OMDOhA088384@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Warner Losh Subject: git: 62f382631793 - stable/13 - stand: parsedev API change: devspec now points to start of full device name 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: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 62f38263179338f551110a14f14d47a62309fbb8 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=62f38263179338f551110a14f14d47a62309fbb8 commit 62f38263179338f551110a14f14d47a62309fbb8 Author: Warner Losh AuthorDate: 2022-11-30 22:09:36 +0000 Commit: Warner Losh CommitDate: 2023-01-24 21:49:39 +0000 stand: parsedev API change: devspec now points to start of full device name To support more flexible device matching, we now pass in the full devspec to the parsedev routines. For everything execpt uboot, this is just a drop in (since everything except uboot and openfirmware always uses disk...: and/or zfs:, but openfirmware isn't really affected). uboot we kludge around it by subtracting 4 from where the rest of the device name starts. This is unforunate, and can compute the address one before the string. But we never dereference that address. uboot needs more work, and this is an acceptable UB until that other work happens. OFW doesn't really use the parsedev routines these days (since none of the supported device uses this... yet). It too needs more work, but it needs device matching support first. Sponsored by: Netflix Reviewed by: delphij Differential Revision: https://reviews.freebsd.org/D37553 (cherry picked from commit 33bbe5ddcbbce03b6395a4948927643107b55c06) --- stand/common/disk.c | 2 +- stand/i386/zfsboot/zfsboot.c | 2 +- stand/libofw/devicename.c | 2 +- stand/libsa/dev.c | 2 +- stand/libsa/zfs/zfs.c | 4 ++-- stand/uboot/devicename.c | 2 +- stand/uboot/main.c | 8 +++++++- 7 files changed, 14 insertions(+), 8 deletions(-) diff --git a/stand/common/disk.c b/stand/common/disk.c index 653f971d46b8..eecf519c52aa 100644 --- a/stand/common/disk.c +++ b/stand/common/disk.c @@ -420,7 +420,7 @@ disk_parsedev(struct devdesc **idev, const char *devspec, const char **path) char *cp; struct disk_devdesc *dev; - np = devspec; + np = devspec + 4; /* Skip the leading 'disk' */ unit = -1; /* * If there is path/file info after the device info, then any missing diff --git a/stand/i386/zfsboot/zfsboot.c b/stand/i386/zfsboot/zfsboot.c index 1d64ace063e0..c6305b41493e 100644 --- a/stand/i386/zfsboot/zfsboot.c +++ b/stand/i386/zfsboot/zfsboot.c @@ -214,7 +214,7 @@ main(void) devinit(); /* XXX assumes this will be a disk, but it looks likely give above */ - disk_parsedev((struct devdesc **)&devdesc, boot_devname + 4, NULL); + disk_parsedev((struct devdesc **)&devdesc, boot_devname, NULL); bootdev = MAKEBOOTDEV(dev_maj[DEVT_DISK], devdesc->d_slice + 1, devdesc->dd.d_unit, diff --git a/stand/libofw/devicename.c b/stand/libofw/devicename.c index f03703e3872f..ecf966506194 100644 --- a/stand/libofw/devicename.c +++ b/stand/libofw/devicename.c @@ -112,7 +112,7 @@ found: if (dv->dv_parsedev != NULL) { p = devspec + strlen(dv->dv_name); free(idev); - err = dv->dv_parsedev((struct devdesc **)&idev, p, path); + err = dv->dv_parsedev((struct devdesc **)&idev, devspec, path); if (err != 0) { return (err); } diff --git a/stand/libsa/dev.c b/stand/libsa/dev.c index 158b4d69381b..b16637181059 100644 --- a/stand/libsa/dev.c +++ b/stand/libsa/dev.c @@ -134,7 +134,7 @@ devparse(struct devdesc **dev, const char *devspec, const char **path) idev = NULL; err = 0; if (dv->dv_parsedev) { - err = dv->dv_parsedev(&idev, np, path); + err = dv->dv_parsedev(&idev, devspec, path); } else { np = devspec + strlen(dv->dv_name); err = default_parsedev(&idev, np, path); diff --git a/stand/libsa/zfs/zfs.c b/stand/libsa/zfs/zfs.c index db4bed7f7697..d7aecc71ab5c 100644 --- a/stand/libsa/zfs/zfs.c +++ b/stand/libsa/zfs/zfs.c @@ -385,7 +385,7 @@ zfs_mount(const char *dev, const char *path, void **data) int rv; errno = 0; - rv = zfs_parsedev((struct devdesc **)&zfsdev, dev + 3, NULL); + rv = zfs_parsedev((struct devdesc **)&zfsdev, dev, NULL); if (rv != 0) { return (rv); } @@ -1644,7 +1644,7 @@ zfs_parsedev(struct devdesc **idev, const char *devspec, const char **path) int rv; struct zfs_devdesc *dev; - np = devspec; + np = devspec + 3; /* Skip the leading 'zfs' */ if (*np != ':') return (EINVAL); np++; diff --git a/stand/uboot/devicename.c b/stand/uboot/devicename.c index 8f867406e6fa..075880baa59f 100644 --- a/stand/uboot/devicename.c +++ b/stand/uboot/devicename.c @@ -116,7 +116,7 @@ uboot_parsedev(struct uboot_devdesc **dev, const char *devspec, #ifdef LOADER_DISK_SUPPORT case DEVT_DISK: free(idev); - err = disk_parsedev((struct devdesc **)&idev, np, path); + err = disk_parsedev((struct devdesc **)&idev, devspec, path); if (err != 0) goto fail; break; diff --git a/stand/uboot/main.c b/stand/uboot/main.c index cf41917d6ee5..58de335edf7f 100644 --- a/stand/uboot/main.c +++ b/stand/uboot/main.c @@ -233,11 +233,17 @@ get_load_device(int *type, int *unit, int *slice, int *partition) * parse the remainder of the string as such, and if it works, return * those results. Otherwise we'll fall through to the code that parses * the legacy format. + * + * disk_parsedev now assumes that it points to the start of the device + * name, but since it doesn't know about uboot's usage, just subtract 4 + * since it always adds 4. This is the least-bad solution since it makes + * all the other loader code easier (might be better to create a fake + * 'disk...' string, but that's more work than uboot is worth). */ if (*type & DEV_TYP_STOR) { size_t len = strlen(p); if (strcspn(p, " .") == len && strcspn(p, ":") >= len - 1 && - disk_parsedev((struct devdesc **)&dev, p, NULL) == 0) { + disk_parsedev((struct devdesc **)&dev, p - 4, NULL) == 0) { /* Hack */ *unit = dev->dd.d_unit; *slice = dev->d_slice; *partition = dev->d_partition;