diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c index 77c5958347e..0e323f7598f 100644 --- a/sys/ufs/ffs/ffs_vnops.c +++ b/sys/ufs/ffs/ffs_vnops.c @@ -1358,6 +1358,9 @@ struct vop_closeextattr_args { if (ap->a_vp->v_type == VCHR) return (EOPNOTSUPP); + if (ap->a_commit && (ap->a_vp->v_mount->mnt_flag & MNT_RDONLY)) + return (EROFS); + return (ffs_close_ea(ap->a_vp, ap->a_commit, ap->a_cred, ap->a_td)); } @@ -1392,6 +1395,9 @@ vop_deleteextattr { if (strlen(ap->a_name) == 0) return (EINVAL); + if (ap->a_vp->v_mount->mnt_flag & MNT_RDONLY) + return (EROFS); + error = extattr_check_cred(ap->a_vp, ap->a_attrnamespace, ap->a_cred, ap->a_td, IWRITE); if (error) { @@ -1613,6 +1619,9 @@ vop_setextattr { if (ap->a_uio == NULL) return (EOPNOTSUPP); + if (ap->a_vp->v_mount->mnt_flag & MNT_RDONLY) + return (EROFS); + error = extattr_check_cred(ap->a_vp, ap->a_attrnamespace, ap->a_cred, ap->a_td, IWRITE); if (error) {