From nobody Wed Oct 19 16:40:01 2022 X-Original-To: dev-commits-src-main@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 4MsxKY4hlDz4gN6m; Wed, 19 Oct 2022 16:40:01 +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 4MsxKY1fkXz3cdC; Wed, 19 Oct 2022 16:40:01 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1666197601; 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=p/zghE3DbWbn1FDruLjcvuHKZrjMY8D3LZhuxs9yrlk=; b=F6AyQxH/8ZQGenfhcTGtxIvII/SCh93v+pP7E2eEBx5Hrv4x6bAQ0er/uBva1tt8jpxcyI YNKFlAbdiI1DbAm5ad1iw8NWEYD7SndQTojPhCp7kbzh5PZJYZNdq+a98+idJBjuRXyLT5 Y9bYIK2Bb2XMxgAvuAFOPMd1Bb8F+Gdj0ebC4/hCvOnTMy+KXb8fnEQz1wRKiDw1j4MqHJ HrG6FxPoBwGto/nYrw2yqSHA370yQ+FwPfl8HjNBtNy5Mzi9dTFc5KCSVub1Y9+/QbbJDD vW6OHNLdq589k/UdUBKkcsBSHbSKy0a+K1ZTmrPWumMBt4QwqVz+yk6JKACfdg== 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 4MsxKY0kFbzbHv; Wed, 19 Oct 2022 16:40:01 +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 29JGe1JW013253; Wed, 19 Oct 2022 16:40:01 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 29JGe1RS013241; Wed, 19 Oct 2022 16:40:01 GMT (envelope-from git) Date: Wed, 19 Oct 2022 16:40:01 GMT Message-Id: <202210191640.29JGe1RS013241@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: d9c5a9ea498a - main - device_get_path(): do not drop the error from BUS_GET_DEVICE_PATH() List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d9c5a9ea498aa1872b909fae16babf4b292d4e70 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1666197601; 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=p/zghE3DbWbn1FDruLjcvuHKZrjMY8D3LZhuxs9yrlk=; b=VQzyHTDONowiN4n9WWqNVgNXjVoyBagVfYrI5bJpKwvgoycVRdZ6TbY2ValXWhESZD9V14 Qf6Oi72Dt9vq32yjjKnNHc70MDXi1zvAVfbuhwpAoMmugVy77djFsnw6LI1xcyqd7GSM/O s69DRQM5wvqE/EXdHyQ6HBT4+SYltffbiOhX7qp0oPR43quAIongdpqfp4SjfuGMMzgpNj 94pLzaQ76BTLstIZPBqNjxqypEkJp/h4+0LNLCr5ZhfLiLXYnoqC3aSVHitw8Qe55r2mE2 lo4R25hRliVYq2nhWot12QkBY5+kNb5XyQ0Uzh68X6LEHyMAqtc4vgFQV+bhqg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1666197601; a=rsa-sha256; cv=none; b=ur2A6J14fxcuNqlu1e/3XvhM/N+VSzyJNnkfwjsptwe5ac7pJfNstvpZNbAqFiKnv5Kq6c x3J733TAd1q+u8y4jFy1zmox4rDsECSEe5hGLMtnk5D/rY0lc0foroWvd05IsfPsPxXDQX rQzwUFI6NbbJ9q4yNIiKtyKH7UuU2BXeZG0ZN69gIWohgYo5yRuknMVPLpWd3VZzPVc8zK ulQVXkN94vF+r+JA7irxKZkKkTl/13e7kOJhqlcXenmr9mTkp+WRhr5n4F4IwEAUzY/zz8 23TJYtnd0CIyqWAjK6YqnNIYmOR9odqMFTRiglyX93njrvEibEfEj8xj1ufiNQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=d9c5a9ea498aa1872b909fae16babf4b292d4e70 commit d9c5a9ea498aa1872b909fae16babf4b292d4e70 Author: Konstantin Belousov AuthorDate: 2022-10-07 01:25:37 +0000 Commit: Konstantin Belousov CommitDate: 2022-10-19 16:39:26 +0000 device_get_path(): do not drop the error from BUS_GET_DEVICE_PATH() Later it would silently converted to ENOMEM always, because any error was reported as NULL return path. Reviewed by: jhb, takawata Discussed with: imp Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D36899 --- sys/kern/subr_bus.c | 49 ++++++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c index 3ba68ba78781..b083411f9876 100644 --- a/sys/kern/subr_bus.c +++ b/sys/kern/subr_bus.c @@ -5304,27 +5304,33 @@ device_do_deferred_actions(void) bus_data_generation_update(); } -static char * -device_get_path(device_t dev, const char *locator) +static int +device_get_path(device_t dev, const char *locator, char **rvp) { struct sbuf *sb; + char *s; ssize_t len; - char *rv = NULL; int error; sb = sbuf_new(NULL, NULL, 0, SBUF_AUTOEXTEND | SBUF_INCLUDENUL); error = BUS_GET_DEVICE_PATH(device_get_parent(dev), dev, locator, sb); sbuf_finish(sb); /* Note: errors checked with sbuf_len() below */ - if (error != 0) - goto out; - len = sbuf_len(sb); - if (len <= 1) - goto out; - rv = malloc(len, M_BUS, M_NOWAIT); - memcpy(rv, sbuf_data(sb), len); -out: + if (error == 0) { + len = sbuf_len(sb); + if (len <= 1) { + error = EIO; + } else { + s = malloc(len, M_BUS, M_NOWAIT); + if (s == NULL) { + error = ENOMEM; + } else { + memcpy(s, sbuf_data(sb), len); + *rvp = s; + } + } + } sbuf_delete(sb); - return (rv); + return (error); } static int @@ -5595,11 +5601,9 @@ devctl2_ioctl(struct cdev *cdev, u_long cmd, caddr_t data, int fflag, sizeof(locator), NULL); if (error != 0) break; - path = device_get_path(dev, locator); - if (path == NULL) { - error = ENOMEM; + error = device_get_path(dev, locator, &path); + if (error != 0) break; - } len = strlen(path) + 1; if (req->dr_buffer.length < len) { error = ENAMETOOLONG; @@ -5702,9 +5706,10 @@ bool dev_wired_cache_match(device_location_cache_t *dcp, device_t dev, const char *at) { - const char *cp, *path; + const char *cp; + char *path; char locator[32]; - int len; + int error, len; struct device_location_node *res; cp = strchr(at, ':'); @@ -5717,13 +5722,15 @@ dev_wired_cache_match(device_location_cache_t *dcp, device_t dev, locator[len] = '\0'; cp++; + error = 0; /* maybe cache this inside device_t and look that up, but not yet */ res = dev_wired_cache_lookup(dcp, locator); if (res == NULL) { - path = device_get_path(dev, locator); - res = dev_wired_cache_add(dcp, locator, path); + error = device_get_path(dev, locator, &path); + if (error == 0) + res = dev_wired_cache_add(dcp, locator, path); } - if (res == NULL || res->dln_path == NULL) + if (error != 0 || res == NULL || res->dln_path == NULL) return (false); return (strcmp(res->dln_path, cp) == 0);