diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2013-04-14 15:34:01 -0400 | 
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-04-29 15:41:41 -0400 | 
| commit | b5edfd27699de420f3af2c34fc7ad9686f169933 (patch) | |
| tree | 863724f219eb1497e6a42734e49d83614dbfa4d9 /fs/hppfs | |
| parent | 3dc20cb282ec03cc4c997130d680c800011ed479 (diff) | |
| download | olio-linux-3.10-b5edfd27699de420f3af2c34fc7ad9686f169933.tar.xz olio-linux-3.10-b5edfd27699de420f3af2c34fc7ad9686f169933.zip  | |
hppfs: fix the leaks on close()
we need to close the underlying procfs file and free ->private_data
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/hppfs')
| -rw-r--r-- | fs/hppfs/hppfs.c | 13 | 
1 files changed, 12 insertions, 1 deletions
diff --git a/fs/hppfs/hppfs.c b/fs/hppfs/hppfs.c index 126d3c2e2de..8ef57793c92 100644 --- a/fs/hppfs/hppfs.c +++ b/fs/hppfs/hppfs.c @@ -436,7 +436,6 @@ static int hppfs_open(struct inode *inode, struct file *file)  	path.mnt = inode->i_sb->s_fs_info;  	path.dentry = HPPFS_I(inode)->proc_dentry; -	/* XXX This isn't closed anywhere */  	data->proc_file = dentry_open(&path, file_mode(file->f_mode), cred);  	err = PTR_ERR(data->proc_file);  	if (IS_ERR(data->proc_file)) @@ -523,12 +522,23 @@ static loff_t hppfs_llseek(struct file *file, loff_t off, int where)  	return default_llseek(file, off, where);  } +static int hppfs_release(struct inode *inode, struct file *file) +{ +	struct hppfs_private *data = file->private_data; +	struct file *proc_file = data->proc_file; +	if (proc_file) +		fput(proc_file); +	kfree(data); +	return 0; +} +  static const struct file_operations hppfs_file_fops = {  	.owner		= NULL,  	.llseek		= hppfs_llseek,  	.read		= hppfs_read,  	.write		= hppfs_write,  	.open		= hppfs_open, +	.release	= hppfs_release,  };  struct hppfs_dirent { @@ -582,6 +592,7 @@ static const struct file_operations hppfs_dir_fops = {  	.open		= hppfs_dir_open,  	.fsync		= hppfs_fsync,  	.llseek		= default_llseek, +	.release	= hppfs_release,  };  static int hppfs_statfs(struct dentry *dentry, struct kstatfs *sf)  |