|
|
@@ -5491,6 +5491,14 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)
|
|
|
if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
|
|
|
return -EIO;
|
|
|
|
|
|
+ if (unlikely(IS_IMMUTABLE(inode)))
|
|
|
+ return -EPERM;
|
|
|
+
|
|
|
+ if (unlikely(IS_APPEND(inode) &&
|
|
|
+ (ia_valid & (ATTR_MODE | ATTR_UID |
|
|
|
+ ATTR_GID | ATTR_TIMES_SET))))
|
|
|
+ return -EPERM;
|
|
|
+
|
|
|
error = setattr_prepare(dentry, attr);
|
|
|
if (error)
|
|
|
return error;
|
|
|
@@ -6190,6 +6198,9 @@ int ext4_page_mkwrite(struct vm_fault *vmf)
|
|
|
get_block_t *get_block;
|
|
|
int retries = 0;
|
|
|
|
|
|
+ if (unlikely(IS_IMMUTABLE(inode)))
|
|
|
+ return VM_FAULT_SIGBUS;
|
|
|
+
|
|
|
sb_start_pagefault(inode->i_sb);
|
|
|
file_update_time(vma->vm_file);
|
|
|
|