Index: sys/ufs/lfs/lfs_accessors.h =================================================================== RCS file: /cvsroot/src/sys/ufs/lfs/lfs_accessors.h,v retrieving revision 1.48 diff -u -r1.48 lfs_accessors.h --- sys/ufs/lfs/lfs_accessors.h 10 Jun 2017 05:29:36 -0000 1.48 +++ sys/ufs/lfs/lfs_accessors.h 6 Mar 2020 20:33:56 -0000 @@ -721,23 +721,27 @@ static __inline type \ lfs_fi_get##field(STRUCT_LFS *fs, FINFO *fip) \ { \ + FINFO aligned_fip; \ + memcpy(&aligned_fip, fip, sizeof(*fip)); \ if (fs->lfs_is64) { \ - return fip->u_64.fi_##field; \ + return aligned_fip.u_64.fi_##field; \ } else { \ - return fip->u_32.fi_##field; \ + return aligned_fip.u_32.fi_##field; \ } \ } \ static __inline void \ lfs_fi_set##field(STRUCT_LFS *fs, FINFO *fip, type val) \ { \ + FINFO aligned_fip; \ + memcpy(&aligned_fip, fip, sizeof(*fip)); \ if (fs->lfs_is64) { \ - type *p = &fip->u_64.fi_##field; \ + type *p = &aligned_fip.u_64.fi_##field; \ (void)p; \ - fip->u_64.fi_##field = val; \ + aligned_fip.u_64.fi_##field = val; \ } else { \ - type32 *p = &fip->u_32.fi_##field; \ + type32 *p = &aligned_fip.u_32.fi_##field;\ (void)p; \ - fip->u_32.fi_##field = val; \ + aligned_fip.u_32.fi_##field = val; \ } \ } \ @@ -856,23 +860,27 @@ static __inline type \ lfs_if_get##field(STRUCT_LFS *fs, IFILE *ifp) \ { \ + IFILE aligned_ifp; \ + memcpy(&aligned_ifp, ifp, sizeof(*ifp)); \ if (fs->lfs_is64) { \ - return ifp->u_64.if_##field; \ + return aligned_ifp.u_64.if_##field; \ } else { \ - return ifp->u_32.if_##field; \ + return aligned_ifp.u_32.if_##field; \ } \ } \ static __inline void \ lfs_if_set##field(STRUCT_LFS *fs, IFILE *ifp, type val) \ { \ + IFILE aligned_ifp; \ + memcpy(&aligned_ifp, ifp, sizeof(*ifp)); \ if (fs->lfs_is64) { \ - type *p = &ifp->u_64.if_##field; \ + type *p = &aligned_ifp.u_64.if_##field; \ (void)p; \ - ifp->u_64.if_##field = val; \ + aligned_ifp.u_64.if_##field = val; \ } else { \ - type32 *p = &ifp->u_32.if_##field; \ + type32 *p = &aligned_ifp.u_32.if_##field;\ (void)p; \ - ifp->u_32.if_##field = val; \ + aligned_ifp.u_32.if_##field = val; \ } \ } \