Patch "ovl: get_write_access() in truncate" has been added to the 4.6-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
ovl: get_write_access() in truncate
to the 4.6-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
ovl-get_write_access-in-truncate.patch
and it can be found in the queue-4.6 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
03bea60409328de54e4ff7ec41672e12a9cb0908Mon Sep 17 00:00:00 2001
From: Miklos Szeredi <[email protected]>
Date: Wed, 29 Jun 2016 16:03:55 +0200
Subject: ovl: get_write_access() in truncate
From: Miklos Szeredi <[email protected]>
commit 03bea60409328de54e4ff7ec41672e12a9cb0908 upstream.
When truncating a file we should check write access on the underlying inode. And we should do so on the lower file as well (before copy-up) for consistency.
Original patch and test case by Aihua Zhang.
- - >o >o - - test.c - - >o >o - -
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int ret;
ret = truncate(argv[0], 4096);
if (ret != -1) {
fprintf(stderr, "truncate(argv[0]) should have failed\n");
return 1;
}
if (errno != ETXTBSY) {
perror("truncate(argv[0])");
return 1;
}
return 0;
}- - >o >o - - >o >o - - >o >o - -
--- fs/overlayfs/inode.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
fs/overlayfs/inode.c +21 -0
@@ -59,16 +59,37 @@ int ovl_setattr(struct dentry *dentry, sif (err) goto out; +if (attr->ia_valid &ATTR_SIZE ) { +struct inode *realinode =d_inode (ovl_dentry_real (dentry)); + + err = -ETXTBSY ; +if (atomic_read (&realinode->i_writecount) <0 ) + goto out_drop_write; + } + err =ovl_copy_up (dentry);if (!err) { +struct inode *winode =NULL ; + upperdentry =ovl_dentry_upper (dentry); +if (attr->ia_valid &ATTR_SIZE ) { + winode =d_inode (upperdentry); + err =get_write_access (winode); +if (err) + goto out_drop_write; + } +inode_lock (upperdentry->d_inode); err =notify_change (upperdentry, attr,NULL );if (!err)ovl_copyattr (upperdentry->d_inode, dentry->d_inode);inode_unlock (upperdentry->d_inode); + +if (winode) +put_write_access (winode); } +out_drop_write:ovl_drop_write (dentry); out:return err;
Patches currently in stable-queue which might be from [email protected] are
queue-4.6/ovl-copy-up-underlying-inode-s-i_mode-to-overlay-inode.patch queue-4.6/ovl-verify-upper-dentry-in-ovl_remove_and_whiteout.patch queue-4.6/ovl-fix-dentry-leak-for-default_permissions.patch queue-4.6/ovl-get_write_access-in-truncate.patch queue-4.6/ovl-handle-attr_kill.patch queue-4.6/vfs-add-d_real_inode-helper.patch queue-4.6/af_unix-fix-hard-linked-sockets-on-overlay.patch