The branch stable/14 has been updated by rmacklem:

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

commit efe6a0997383d728290cd01c07d9cf59adc2ed05
Author:     Rick Macklem <[email protected]>
AuthorDate: 2024-12-06 01:56:23 +0000
Commit:     Rick Macklem <[email protected]>
CommitDate: 2024-12-20 22:07:12 +0000

    fs: Add static asserts for the size of fid structures
    
    File system specific *fid structures are copied into the generic
    struct fid defined in sys/mount.h.
    As such, they cannot be larger than struct fid.
    
    This patch adds _Static_assert()s to check for this.
    
    ZFS and fuse already have _Static_assert()s.
    
    (cherry picked from commit 91b5592a1e1af97480d615cf508be05b5674d2f3)
---
 sys/fs/msdosfs/msdosfs_vnops.c | 2 ++
 sys/fs/tmpfs/tmpfs_vnops.c     | 2 ++
 sys/fs/udf/udf_vnops.c         | 2 ++
 sys/ufs/ffs/ffs_vnops.c        | 2 ++
 4 files changed, 8 insertions(+)

diff --git a/sys/fs/msdosfs/msdosfs_vnops.c b/sys/fs/msdosfs/msdosfs_vnops.c
index 078ea5e52312..6417b7dac16b 100644
--- a/sys/fs/msdosfs/msdosfs_vnops.c
+++ b/sys/fs/msdosfs/msdosfs_vnops.c
@@ -1962,6 +1962,8 @@ msdosfs_vptofh(struct vop_vptofh_args *ap)
 {
        struct denode *dep;
        struct defid *defhp;
+       _Static_assert(sizeof(struct defid) <= sizeof(struct fid),
+           "struct defid cannot be larger than struct fid");
 
        dep = VTODE(ap->a_vp);
        defhp = (struct defid *)ap->a_fhp;
diff --git a/sys/fs/tmpfs/tmpfs_vnops.c b/sys/fs/tmpfs/tmpfs_vnops.c
index 206a95350d2e..4571a2855be3 100644
--- a/sys/fs/tmpfs/tmpfs_vnops.c
+++ b/sys/fs/tmpfs/tmpfs_vnops.c
@@ -1687,6 +1687,8 @@ vop_vptofh {
        struct tmpfs_fid_data tfd;
        struct tmpfs_node *node;
        struct fid *fhp;
+       _Static_assert(sizeof(struct tmpfs_fid_data) <= sizeof(struct fid),
+           "struct tmpfs_fid_data cannot be larger than struct fid");
 
        node = VP_TO_TMPFS_NODE(ap->a_vp);
        fhp = ap->a_fhp;
diff --git a/sys/fs/udf/udf_vnops.c b/sys/fs/udf/udf_vnops.c
index 98a779280690..88bf4917a851 100644
--- a/sys/fs/udf/udf_vnops.c
+++ b/sys/fs/udf/udf_vnops.c
@@ -1274,6 +1274,8 @@ udf_vptofh(struct vop_vptofh_args *a)
 {
        struct udf_node *node;
        struct ifid *ifhp;
+       _Static_assert(sizeof(struct ifid) <= sizeof(struct fid),
+           "struct ifid cannot be larger than struct fid");
 
        node = VTON(a->a_vp);
        ifhp = (struct ifid *)a->a_fhp;
diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c
index c14cb5e1ee66..0f60f8061043 100644
--- a/sys/ufs/ffs/ffs_vnops.c
+++ b/sys/ufs/ffs/ffs_vnops.c
@@ -1922,6 +1922,8 @@ ffs_vptofh(
 {
        struct inode *ip;
        struct ufid *ufhp;
+       _Static_assert(sizeof(struct ufid) <= sizeof(struct fid),
+           "struct ufid cannot be larger than struct fid");
 
        ip = VTOI(ap->a_vp);
        ufhp = (struct ufid *)ap->a_fhp;

Reply via email to