summaryrefslogtreecommitdiffstats
path: root/sys/ufs
diff options
context:
space:
mode:
authormckusick <mckusick@FreeBSD.org>2007-02-21 08:50:06 +0000
committermckusick <mckusick@FreeBSD.org>2007-02-21 08:50:06 +0000
commit96503737f7b08849ccf04480f7c3a4308a1a9543 (patch)
tree0123b9a3e34d52263856e306ca970ebfec757411 /sys/ufs
parentd110653fb0fab3171fc4494f925deef1a3ed4ad2 (diff)
downloadFreeBSD-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.c9
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) {
OpenPOWER on IntegriCloud