git: 27d673fbbb79 - main - When taking a snapshot on a UFS/FFS filesystem, it must be mounted.

From: Kirk McKusick <mckusick_at_FreeBSD.org>
Date: Tue, 27 Sep 2022 15:58:30 UTC
The branch main has been updated by mckusick:

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

commit 27d673fbbb79b1b829484ec127da59b45f623ebd
Author:     Kirk McKusick <mckusick@FreeBSD.org>
AuthorDate: 2022-09-27 15:57:30 +0000
Commit:     Kirk McKusick <mckusick@FreeBSD.org>
CommitDate: 2022-09-27 15:58:10 +0000

    When taking a snapshot on a UFS/FFS filesystem, it must be mounted.
    
    The "update" mount option must be specified when the "snapshot"
    mount option is used. Return EINVAL if the "snapshot" option is
    specified without the "update" option also requested.
    
    Reported by:  Robert Morris
    Reviewed by:  kib
    PR:           265362
    MFC after:    2 weeks
    Sponsored by: The FreeBSD Foundation
---
 sys/ufs/ffs/ffs_vfsops.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c
index 4768d610b287..8f6e186b44b2 100644
--- a/sys/ufs/ffs/ffs_vfsops.c
+++ b/sys/ufs/ffs/ffs_vfsops.c
@@ -413,8 +413,11 @@ ffs_mount(struct mount *mp)
 	/*
 	 * If this is a snapshot request, take the snapshot.
 	 */
-	if (mp->mnt_flag & MNT_SNAPSHOT)
+	if (mp->mnt_flag & MNT_SNAPSHOT) {
+		if ((mp->mnt_flag & MNT_UPDATE) == 0)
+			return (EINVAL);
 		return (ffs_snapshot(mp, fspec));
+	}
 
 	/*
 	 * Must not call namei() while owning busy ref.