Patch "bad_inode: add missing i_op initializers" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
bad_inode: add missing i_op initializers
to the 4.9-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:
bad_inode-add-missing-i_op-initializers.patch
and it can be found in the queue-4.9 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
3f9ca75516a7e581ff803f751a869c1da5ae5fa5Mon Sep 17 00:00:00 2001
From: Miklos Szeredi <[email protected]>
Date: Fri, 9 Dec 2016 11:57:43 +0100
Subject: bad_inode: add missing i_op initializers
From: Miklos Szeredi <[email protected]>
commit 3f9ca75516a7e581ff803f751a869c1da5ae5fa5 upstream.
New inode operations were forgotten to be added to bad_inode. Most of the time the op is checked for NULL before being called but marking the inode bad and the check can race (very unlikely).
However in case of ->get_link() only DCACHE_SYMLINK_TYPE is checked before calling the op, so there's no race and will definitely oops when trying to follow links on such a beast.
Also remove comments about extinct ops.
--- fs/bad_inode.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 4 deletions(-)
fs/bad_inode.c +51 -4
@@ -106,6 +106,50 @@ static ssize_t bad_inode_listxattr(strucreturn -EIO ; } +static const char *bad_inode_get_link (struct dentry *dentry, +struct inode *inode, +struct delayed_call *done) +{ +return ERR_PTR (-EIO ); +} + +static struct posix_acl *bad_inode_get_acl (struct inode *inode,int type) +{ +return ERR_PTR (-EIO ); +} + +static int bad_inode_fiemap (struct inode *inode, +struct fiemap_extent_info *fieinfo,u64 start, +u64 len) +{ +return -EIO ; +} + +static int bad_inode_update_time (struct inode *inode,struct timespec *time, +int flags) +{ +return -EIO ; +} + +static int bad_inode_atomic_open (struct inode *inode,struct dentry *dentry, +struct file *file,unsigned int open_flag, +umode_t create_mode,int *opened) +{ +return -EIO ; +} + +static int bad_inode_tmpfile (struct inode *inode,struct dentry *dentry, +umode_t mode) +{ +return -EIO ; +} + +static int bad_inode_set_acl (struct inode *inode,struct posix_acl *acl, +int type) +{ +return -EIO ; +} +static const struct inode_operations bad_inode_ops = { .create = bad_inode_create,
@@ -118,14 +162,17 @@ static const struct inode_operations bad .mknod = bad_inode_mknod, .rename = bad_inode_rename2, .readlink = bad_inode_readlink, -/* follow_link must be no-op, otherwise unmounting this inode -won't work */ -/* put_link returns void */ -/* truncate returns void */ .permission = bad_inode_permission, .getattr = bad_inode_getattr, .setattr = bad_inode_setattr, .listxattr = bad_inode_listxattr, + .get_link = bad_inode_get_link, + .get_acl = bad_inode_get_acl, + .fiemap = bad_inode_fiemap, + .update_time = bad_inode_update_time, + .atomic_open = bad_inode_atomic_open, + .tmpfile = bad_inode_tmpfile, + .set_acl = bad_inode_set_acl, };
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/bad_inode-add-missing-i_op-initializers.patch