mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
3dc20cb282
commit
b5edfd2769
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue