From nobody Wed May 06 14:17:03 2026 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 4g9crw08bwz6cggV for ; Wed, 06 May 2026 14:17:04 +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 4g9crv6Ykxz3H4s for ; Wed, 06 May 2026 14:17:03 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1778077023; 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=MWCtkEAUmrxFn4mqO9rC8pY/hRbDCueIODNyB8O9Nk5GWkZzKUhiDz1Jik+w9yMYsk2hOV b1Vr5nunWWG52j2v+KLMcwypUYo80x/ctZgaOfrdojO42myeKXT+HoBf/y05l8M5V02N3G NKeZ+0ll2CapGRywbDMHJAMxaAZxarW16FP9OJwHo5A1hPnZqDhBQEbKuY9D+NMC4umSRM RLt0Ks5sV0zm116+jQ8anCUHfvX8YfzzOXB6ulKUUBKHkylN4gQq4ZCUuICsRspaTS/1zH lOAGICsOOf+IZzXb/D73bz27izehahH23Y4WahVf9619RRtC5empOq9AKqZ6PA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1778077023; a=rsa-sha256; cv=none; b=SAaVy1JxdblGOr6jLAVII9D90fM/Y2eM3vAWOd9aeUnvQisubaIyzqUmRE0fReik6RZ29m 4rmn4qr3KizrJ7ToOguSKn12t+i+RH0g/m0dTvTtdq2DMEyDWRB9W0fznIO6g3UCn4vJ3E UEAYa0uhVDOl/yR4JzrOXMItHDUwTuekGDkQwi+uoLaAnv75Fp69eGF3+HvYkLk0Nt3bjU 7nIeHCgIpGfMowDYxjPCqe+luXmo7w0nTpMnzP4XaTNQOHDUow75eyW46k1zP79IDTD3UE hBC3W6A7A9XBeJpWFF8lcIV9rcFk2Ds0sba53dKTJ6mJPVledoJQEPfcgCJwDw== 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=1778077023; 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=yA673FyRzrgL1ajeLPDehJI+xliUWW5o8LIG+cTUUkBFgI5E7oVNziDUdE+m0giXcniXWJ 6iYuvEJau6+oFHDlYi1Cfa0MU4b0U2AUBjggKzvXV4c8OQ37RCExeCIng+Ig6YXQe9z0dd MVjzY5hqHX1cUdUx5hHBIKdg5N/t29zFB83puT/y2SG5Is7/TAmL9707v9eYMN0UjFLBbF I+1UMxfRaMCvQs8ptFl+IKEykEciYLzJeDWf8CrHWQ4/GpA5xsEidjS1fCiK6s/zayVo7Q ILtRc/m4miuoGYhANPLPAwj/WpOeXuuf24a4Sw6tsaDLyLyq2rKjjkEIkM309Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g9crv5JzHzjbQ for ; Wed, 06 May 2026 14:17:03 +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 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: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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