mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-22 09:22:37 +00:00
misc: pass miscdevice through file's private_data
Make the miscdevice accessible through the file's private_data. Previously, this was done only when an open() file operation had been registered. If no custom open() file operation was defined, private_data was set to NULL. This subtle quirk was confusing, to the point where kernel code registered *empty* file open operations to have private_data point to the misc device structure and avoid duplicating that logic. And it could easily lead to bugs, where the addition or removal of a custom open() file operation surprisingly changes the initial value of a file's private_data structure. To resolve this, we now place the miscdevice in the file's private_data member unconditionally when open() is called. Signed-off-by: Tom Van Braeckel <tomvanbraeckel@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
16c9c8e1ae
commit
0b509d8d33
@ -140,12 +140,17 @@ static int misc_open(struct inode * inode, struct file * file)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/*
|
||||
* Place the miscdevice in the file's
|
||||
* private_data so it can be used by the
|
||||
* file operations, including f_op->open below
|
||||
*/
|
||||
file->private_data = c;
|
||||
|
||||
err = 0;
|
||||
replace_fops(file, new_fops);
|
||||
if (file->f_op->open) {
|
||||
file->private_data = c;
|
||||
if (file->f_op->open)
|
||||
err = file->f_op->open(inode,file);
|
||||
}
|
||||
fail:
|
||||
mutex_unlock(&misc_mtx);
|
||||
return err;
|
||||
|
Loading…
Reference in New Issue
Block a user