diff options
author | mckusick <mckusick@FreeBSD.org> | 2007-02-21 08:50:06 +0000 |
---|---|---|
committer | mckusick <mckusick@FreeBSD.org> | 2007-02-21 08:50:06 +0000 |
commit | 96503737f7b08849ccf04480f7c3a4308a1a9543 (patch) | |
tree | 0123b9a3e34d52263856e306ca970ebfec757411 /sys/ufs | |
parent | d110653fb0fab3171fc4494f925deef1a3ed4ad2 (diff) | |
download | FreeBSD-src-96503737f7b08849ccf04480f7c3a4308a1a9543.zip FreeBSD-src-96503737f7b08849ccf04480f7c3a4308a1a9543.tar.gz |
The functions that set and delete external attributes must check
that the filesystem is not mounted read-only before proceeding.
Reported by: Ryan Beasley <ryanb@FreeBSD.org>
MFC after: 1 week
Diffstat (limited to 'sys/ufs')
-rw-r--r-- | sys/ufs/ffs/ffs_vnops.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c index 77c5958..0e323f7 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) { |