git: b50abe6bd45d - main - namei: Treat non-tied KLDs as if they had INVARIANTS enabled

From: Andrew Gallatin <gallatin_at_FreeBSD.org>
Date: Fri, 18 Mar 2022 14:17:27 UTC
The branch main has been updated by gallatin:

URL: https://cgit.FreeBSD.org/src/commit/?id=b50abe6bd45dde2baac130d4c4da097598c3b9c0

commit b50abe6bd45dde2baac130d4c4da097598c3b9c0
Author:     Andrew Gallatin <gallatin@FreeBSD.org>
AuthorDate: 2022-03-18 14:14:14 +0000
Commit:     Andrew Gallatin <gallatin@FreeBSD.org>
CommitDate: 2022-03-18 14:14:14 +0000

    namei: Treat non-tied KLDs as if they had INVARIANTS enabled
    
    When working with a vendor to debug their kernel module,
    I found that a non-tied kld which uses NDINIT will panic
    due to "namei: bad debugflags " on a kernel compiled with
    INVARIANTS because non-tied KLDs do not pick up the
    initialization that is done in NDINIT_DBG/NDREINIT_DBG().
    
    Fix this by making this initialization happen for non-KLD_TIED
    as well as INVARIANTS
    
    Reviewed by: mjg
    Sponsored by: Netflix
    Differential Revision: https://reviews.freebsd.org/D34588
---
 sys/sys/namei.h | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/sys/sys/namei.h b/sys/sys/namei.h
index 23718dde5bed..98cbc2ca6ed9 100644
--- a/sys/sys/namei.h
+++ b/sys/sys/namei.h
@@ -228,8 +228,11 @@ int	cache_fplookup(struct nameidata *ndp, enum cache_fpl_status *status,
 
 /*
  * Note the constant pattern may *hide* bugs.
+ * Note also that we enable debug checks for non-TIED KLDs
+ * so that they can run on an INVARIANTS kernel without tripping over
+ * assertions on ni_debugflags state.
  */
-#ifdef INVARIANTS
+#if defined(INVARIANTS) || (defined(KLD_MODULE) && !defined(KLD_TIED))
 #define NDINIT_PREFILL(arg)	memset(arg, 0xff, offsetof(struct nameidata,	\
     ni_dvp_seqc))
 #define NDINIT_DBG(arg)		{ (arg)->ni_debugflags = NAMEI_DBG_INITED; }