From nobody Sun Jun 28 18:40:13 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 4gpJB56MCjz6jkFY for ; Sun, 28 Jun 2026 18:40:13 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gpJB53k9dz3XH0 for ; Sun, 28 Jun 2026 18:40:13 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782672013; 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=vlYKadxC8Goy8/USlLVJX756sNWEwplnv5PJj3uqwEQ=; b=WLrahgkqQ2+Er5XAGF0QqcOVODEebBFbvzAlhGPpt1O9Y0NRZjL2NlyUF+FwF3h05Fi75m X0ZJfqSO19GIdB1h5h/3uRD1SZL0OTSENWQwr36XNl3piPP6hQZyciy6nytKpvr3hCCU67 MC4safKp2zB2lWg/RA8aUzXAXOD7KoVZVNtFwhFmKir7GOi3cJUDUrD/MYzc0LRn9l6t0F 8SEvZiUrbJ2ZpCvcgsa6vsnQl3lpY+ku0uWcvOgQ7oAbtchY7KAYhbwwNa489xzaUvtwOu ida5RqfbegAtB2f/UcS6TNMbOWmmVmKYqzkVvnm8CnnAE1V4zuFPkqK4BAOUGw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1782672013; a=rsa-sha256; cv=none; b=EQMjcoDUVNzdVSMg0DqD/BdyZW63ZdlxRtSY1RW5wEoOO9i6U6g3R0jlhMgVwNxchW77CE JvYsi5arCbCfjXvKOV7ODgydFIspZYdTIqVzYbTFLDS2l8whHgNIUw4iUSmRpd2rhMHl/P 5V60XJs6qd7S+Zz8V4uiqiiUS7s2lCWUwJM25wubnE2SIbtqoV8O3Qek+VXoGeVBrLau2P TDkVyNzv+ghiyVwSGK42lty/LqtYOkOCIZA7ERHpJw2T60wUFgm3IrhhObJUpO16crP8xq eU1Jk5JNAEbdf3JaTVBf8vBjVNSxSc27G7INZ8C/Fk5fHflp2q7o6Oep/3PoXQ== 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=1782672013; 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=vlYKadxC8Goy8/USlLVJX756sNWEwplnv5PJj3uqwEQ=; b=K/LxgX5DapvNGZXqgM6JCOI9GZsBw9btTu5/sbAJbjLYh5Th+z0+Yzu0xetbvDiJ7+eIQj H9yq9Xdi+VS/bnJPAjgJkYxXDBFCl4yk0AqosFude7P3HEk7QBS4U3TAgt94pmXro8gZlS h6l5/yksZD8LHWk3vN4M0sI+kEA+muEd2+Pw3Kp6+JychVwpYAtUi66BYkaIgZDRx2C3DT RIZF020NNZ1whiMyrQoxm1U9/7wkmg3jEKiBSDr854iivVJVRwr5E4GSS82jb8beZ/hcn2 KI7BYY4GfjFSN1CjATOAFddiNuC27Av3UmBavvcFn81uTo8oLY3n/f5r2HWJAQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gpJB520pjz7CC for ; Sun, 28 Jun 2026 18:40:13 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1c738 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 28 Jun 2026 18:40:13 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Baptiste Daroussin Subject: git: 5c7627e96f22 - stable/15 - devmatch: read linker.hints from all module paths 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: bapt X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 5c7627e96f22127c1cc9176662431ecdd4dc3264 Auto-Submitted: auto-generated Date: Sun, 28 Jun 2026 18:40:13 +0000 Message-Id: <6a416a8d.1c738.2c5cfa86@gitrepo.freebsd.org> The branch stable/15 has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=5c7627e96f22127c1cc9176662431ecdd4dc3264 commit 5c7627e96f22127c1cc9176662431ecdd4dc3264 Author: Baptiste Daroussin AuthorDate: 2026-05-06 13:11:16 +0000 Commit: Baptiste Daroussin CommitDate: 2026-06-28 18:32:23 +0000 devmatch: read linker.hints from all module paths Previously, devmatch would stop at the first linker.hints file found in kern.module_path. This meant modules installed in /boot/modules/ were invisible to devmatch if /boot/kernel/ contained a linker.hints file (which it always does). Merge hints from all directories in kern.module_path. This allows third-party or out-of-tree kernel modules in /boot/modules/ to be auto-loaded by devmatch just like built-in modules. Reviewed by: imp Differential Revivion: https://reviews.freebsd.org/D56847 (cherry picked from commit 748402ebf2d7a08b13d0b21694afdaad55cfa9cd) --- sbin/devmatch/devmatch.c | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/sbin/devmatch/devmatch.c b/sbin/devmatch/devmatch.c index 4a5a300ca313..3cd150fe19d2 100644 --- a/sbin/devmatch/devmatch.c +++ b/sbin/devmatch/devmatch.c @@ -100,6 +100,9 @@ read_linker_hints(void) size_t buflen, len; if (linker_hints == NULL) { + void *all_hints = NULL; + size_t all_len = 0; + if (sysctlbyname("kern.module_path", NULL, &buflen, NULL, 0) < 0) errx(1, "Can't find kernel module path."); modpath = malloc(buflen); @@ -109,13 +112,39 @@ read_linker_hints(void) errx(1, "Can't find kernel module path."); p = modpath; while ((q = strsep(&p, ";")) != NULL) { + void *h; + snprintf(fn, sizeof(fn), "%s/linker.hints", q); - hints = read_hints(fn, &len); - if (hints == NULL) + h = read_hints(fn, &len); + if (h == NULL) continue; - break; + if (len < sizeof(int) || + *(int *)(intptr_t)h != LINKER_HINTS_VERSION) { + free(h); + continue; + } + if (all_hints == NULL) { + all_hints = h; + all_len = len; + } else { + void *merged; + + merged = realloc(all_hints, all_len + len - sizeof(int)); + if (merged == NULL) { + free(h); + continue; + } + all_hints = merged; + memcpy((char *)all_hints + all_len, + (char *)h + sizeof(int), + len - sizeof(int)); + all_len += len - sizeof(int); + free(h); + } } - if (q == NULL) { + hints = all_hints; + len = all_len; + if (hints == NULL) { if (quiet_flag) exit(EX_UNAVAILABLE); else