patch-2.4.25 linux-2.4.25/fs/open.c
Next file: linux-2.4.25/fs/partitions/check.c
Previous file: linux-2.4.25/fs/ntfs/support.c
Back to the patch index
Back to the overall index
-  Lines: 41
-  Date:
2004-02-18 05:36:31.000000000 -0800
-  Orig file: 
linux-2.4.24/fs/open.c
-  Orig date: 
2003-08-25 04:44:43.000000000 -0700
diff -urN linux-2.4.24/fs/open.c linux-2.4.25/fs/open.c
@@ -274,6 +274,9 @@
 	/* Don't worry, the checks are done in inode_change_ok() */
 	newattrs.ia_valid = ATTR_CTIME | ATTR_MTIME | ATTR_ATIME;
 	if (times) {
+		error = -EPERM;
+		if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
+			goto dput_and_out;
 		error = get_user(newattrs.ia_atime, ×->actime);
 		if (!error) 
 			error = get_user(newattrs.ia_mtime, ×->modtime);
@@ -282,6 +285,9 @@
 
 		newattrs.ia_valid |= ATTR_ATIME_SET | ATTR_MTIME_SET;
 	} else {
+		error = -EACCES;
+		if (IS_IMMUTABLE(inode))
+			goto dput_and_out;
 		if (current->fsuid != inode->i_uid &&
 		    (error = permission(inode,MAY_WRITE)) != 0)
 			goto dput_and_out;
@@ -320,6 +326,9 @@
 	newattrs.ia_valid = ATTR_CTIME | ATTR_MTIME | ATTR_ATIME;
 	if (utimes) {
 		struct timeval times[2];
+		error = -EPERM;
+		if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
+			goto dput_and_out;
 		error = -EFAULT;
 		if (copy_from_user(×, utimes, sizeof(times)))
 			goto dput_and_out;
@@ -327,6 +336,10 @@
 		newattrs.ia_mtime = times[1].tv_sec;
 		newattrs.ia_valid |= ATTR_ATIME_SET | ATTR_MTIME_SET;
 	} else {
+		error = -EACCES;
+		if (IS_IMMUTABLE(inode))
+			goto dput_and_out;
+
 		if (current->fsuid != inode->i_uid &&
 		    (error = permission(inode,MAY_WRITE)) != 0)
 			goto dput_and_out;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)