diff options
Diffstat (limited to 'fs/open.c')
| -rw-r--r-- | fs/open.c | 7 |
1 files changed, 6 insertions, 1 deletions
| @@ -272,6 +272,8 @@ static long do_sys_truncate(const char __user *pathname, loff_t length) | |||
| 272 | goto put_write_and_out; | 272 | goto put_write_and_out; |
| 273 | 273 | ||
| 274 | error = locks_verify_truncate(inode, NULL, length); | 274 | error = locks_verify_truncate(inode, NULL, length); |
| 275 | if (!error) | ||
| 276 | error = security_path_truncate(&path, length, 0); | ||
| 275 | if (!error) { | 277 | if (!error) { |
| 276 | DQUOT_INIT(inode); | 278 | DQUOT_INIT(inode); |
| 277 | error = do_truncate(path.dentry, length, 0, NULL); | 279 | error = do_truncate(path.dentry, length, 0, NULL); |
| @@ -329,6 +331,9 @@ static long do_sys_ftruncate(unsigned int fd, loff_t length, int small) | |||
| 329 | 331 | ||
| 330 | error = locks_verify_truncate(inode, file, length); | 332 | error = locks_verify_truncate(inode, file, length); |
| 331 | if (!error) | 333 | if (!error) |
| 334 | error = security_path_truncate(&file->f_path, length, | ||
| 335 | ATTR_MTIME|ATTR_CTIME); | ||
| 336 | if (!error) | ||
| 332 | error = do_truncate(dentry, length, ATTR_MTIME|ATTR_CTIME, file); | 337 | error = do_truncate(dentry, length, ATTR_MTIME|ATTR_CTIME, file); |
| 333 | out_putf: | 338 | out_putf: |
| 334 | fput(file); | 339 | fput(file); |
| @@ -407,7 +412,7 @@ asmlinkage long sys_fallocate(int fd, int mode, loff_t offset, loff_t len) | |||
| 407 | if (((offset + len) > inode->i_sb->s_maxbytes) || ((offset + len) < 0)) | 412 | if (((offset + len) > inode->i_sb->s_maxbytes) || ((offset + len) < 0)) |
| 408 | goto out_fput; | 413 | goto out_fput; |
| 409 | 414 | ||
| 410 | if (inode->i_op && inode->i_op->fallocate) | 415 | if (inode->i_op->fallocate) |
| 411 | ret = inode->i_op->fallocate(inode, mode, offset, len); | 416 | ret = inode->i_op->fallocate(inode, mode, offset, len); |
| 412 | else | 417 | else |
| 413 | ret = -EOPNOTSUPP; | 418 | ret = -EOPNOTSUPP; |
