git: b837f100e1c8 - main - nfs: set vnet(9) context in mountnfs()

From: Gleb Smirnoff <glebius_at_FreeBSD.org>
Date: Sat, 01 Feb 2025 09:02:14 UTC
The branch main has been updated by glebius:

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

commit b837f100e1c854d1f805b615f0bce5ede85f8552
Author:     Gleb Smirnoff <glebius@FreeBSD.org>
AuthorDate: 2025-02-01 01:02:29 +0000
Commit:     Gleb Smirnoff <glebius@FreeBSD.org>
CommitDate: 2025-02-01 09:00:26 +0000

    nfs: set vnet(9) context in mountnfs()
    
    This seems to be the right place to set it once and for all, without
    setting it deep in kgssapi/rpctls/etc leaf functions.
    
    Reviewed by:            rmacklem
    Differential Revision:  https://reviews.freebsd.org/D48558
---
 sys/fs/nfsclient/nfs_clvfsops.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/sys/fs/nfsclient/nfs_clvfsops.c b/sys/fs/nfsclient/nfs_clvfsops.c
index 1cbe8e70867f..6bc67b342cbe 100644
--- a/sys/fs/nfsclient/nfs_clvfsops.c
+++ b/sys/fs/nfsclient/nfs_clvfsops.c
@@ -1524,12 +1524,14 @@ mountnfs(struct nfs_args *argp, struct mount *mp, struct sockaddr *nam,
 #endif
 
 	NFSCL_DEBUG(3, "in mnt\n");
+	CURVNET_SET(CRED_TO_VNET(cred));
 	clp = NULL;
 	if (mp->mnt_flag & MNT_UPDATE) {
 		nmp = VFSTONFS(mp);
 		printf("%s: MNT_UPDATE is no longer handled here\n", __func__);
 		free(nam, M_SONAME);
 		free(tlscertname, M_NEWNFSMNT);
+		CURVNET_RESTORE();
 		return (0);
 	} else {
 		/* NFS-over-TLS requires that rpctls be functioning. */
@@ -1544,6 +1546,7 @@ mountnfs(struct nfs_args *argp, struct mount *mp, struct sockaddr *nam,
 			if (error != 0) {
 				free(nam, M_SONAME);
 				free(tlscertname, M_NEWNFSMNT);
+				CURVNET_RESTORE();
 				return (error);
 			}
 		}
@@ -1816,6 +1819,7 @@ mountnfs(struct nfs_args *argp, struct mount *mp, struct sockaddr *nam,
 		 */
 		NFSVOPUNLOCK(*vpp);
 		vfs_cache_root_set(mp, *vpp);
+		CURVNET_RESTORE();
 		return (0);
 	}
 	error = EIO;
@@ -1844,6 +1848,7 @@ bad:
 	free(nmp->nm_tlscertname, M_NEWNFSMNT);
 	free(nmp, M_NEWNFSMNT);
 	free(nam, M_SONAME);
+	CURVNET_RESTORE();
 	return (error);
 }