From nobody Wed May 06 14:17:03 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 4g9cs06N3Yz6cgr3 for ; Wed, 06 May 2026 14:17:08 +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 "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4g9cs05h5Kz3HGf for ; Wed, 06 May 2026 14:17:08 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1778077028; 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=IXHWoBGiWrSbgRhVCHSUhAnTyQCyd8KEY5j1Zfvtrso=; b=oBBjR7mp7f8ljsU6+S4Y61Zzsb8IsIiYg7gfRcdEcqwFFqQTWWOs3DWFf7DWCKDK+S/o2q Y7GQN5j48ApSuK2OW/e8PkUF56Xj7GUQAk4wPhqW1Tb0kIKdh+9QYL/8bjUDI9zs596/oO v4bJv00+OpfzzrMEd9huH2a59Wj2VAg37XdnBn6jZS0kTC91oczLkbwCU8w5PD/x7n2CkH QuO19lJs0qqAP6Y5/GEGzOCFXIwdLMUY4PgmgGq47RnWV1phRRMCXiXzSqzPQUiIlF06UD sYaUqPDRkVGj5GaiTqBvHmntrD/rfOB3PX/TzxwJOII05ZFgNCfbsuw0P2vPkQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1778077028; a=rsa-sha256; cv=none; b=Q9jKe14suMrcpULscVWXEsXWqRebTRNusyKpzEuvWyGTk4y7Crts50UsCCkQnkeoGmV2eH LYnjg8u9QNPbaJ33349bBvfRjFpM+I6sM7zMlPMBhlJTDRlXHHfzqlMiJq/VbwtEs03A37 0eKglddyDDmZyejWqWluGHnw3PramMOdaLXq0DgRp0J4vKT528XYur43tQOaQZumPJ/QCq J+CUBODvuJkJ1HYDfL4MK9M5vSF2Gbck+Q1BcQtwS9rR1PXLtr3O5sZKPhqyesUI4ci6P3 1H8e28YobLMVVw9Wig8APM8fBWv8e58GlQ+AbrFS4c0ftXMCEOFxtS+sz1XMrA== 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=1778077028; 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=IXHWoBGiWrSbgRhVCHSUhAnTyQCyd8KEY5j1Zfvtrso=; b=qoxDiPi6g7hBJsRzAF8GIWO7vSBZLvc8rSdL3wS9skBZjLL2hvwwwLhXrrRsA/jkFXVN9+ 6LGCiNZJ2mEQpMPKVTSmVYG6NgnKOnGtCn/Cnyppqo9z2HsRnk0NAzOXOrFCkW9UR3URKW 5qzbuaAUOw4fE6svs6fS1IqqfXC5XPfepGU7eZghtPw3wGDqt9GnOLWKeGzE2QTiSfxQRX 5CzuHy5IbIK/BcIsK4XFLDC8JdJVagZ2qzciBlq+2RC5eLNE3BP85Qjf8hdob2qwyP7acX mwCUHUGIq0odZyuzK1Q8GF9iEAerrfX0gnXHGg+o5Cl3vHFBTqd4rTEr7qo+ow== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g9cs04xlPzjbR for ; Wed, 06 May 2026 14:17:08 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 46e02 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 06 May 2026 14:17:03 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: 748402ebf2d7 - main - 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/main X-Git-Reftype: branch X-Git-Commit: 748402ebf2d7a08b13d0b21694afdaad55cfa9cd Auto-Submitted: auto-generated Date: Wed, 06 May 2026 14:17:03 +0000 Message-Id: <69fb4d5f.46e02.3c8fa9f9@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=748402ebf2d7a08b13d0b21694afdaad55cfa9cd commit 748402ebf2d7a08b13d0b21694afdaad55cfa9cd Author: Baptiste Daroussin AuthorDate: 2026-05-06 13:11:16 +0000 Commit: Baptiste Daroussin CommitDate: 2026-05-06 14:16:54 +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 --- 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 62bfc2c521ed..6c6c5f3bcf79 100644 --- a/sbin/devmatch/devmatch.c +++ b/sbin/devmatch/devmatch.c @@ -102,6 +102,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); @@ -111,13 +114,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