On Tue, 2019-03-26 at 23:23 +0000, Kirill Smelkov wrote: > Using scripts/coccinelle/api/stream_open.cocci added in the previous > patch, search and convert to stream_open all in-kernel nonseekable_open > users for which read and write actually do not depend on ppos and where > there is no other methods in file_operations which assume @offset > access. > > I've verified each generated change manually - that it is correct to convert - > and each other nonseekable_open instance left - that it is either not correct > to convert there, or that it is not converted due to current stream_open.cocci > limitations. The script also does not convert files that should be valid to > convert, but that currently have .llseek = noop_llseek or generic_file_llseek > for unknown reason despite file being opened with nonseekable_open (e.g. > drivers/input/mousedev.c) > > Among cases converted 14 were potentially vulnerable to read vs write deadlock > (see details in the previous patch): ... > and the reset were just safe to convert to stream_open because their > read and write do not use ppos at all and corresponding file_operations > do not have methods that assume @offset file access: ... > drivers/char/pcmcia/scr24x_cs.c:95:8-24: WARNING: scr24x_fops: .read() and .write() have stream semantic; safe to change nonseekable_open -> stream_open. ... > diff --git a/drivers/char/pcmcia/scr24x_cs.c b/drivers/char/pcmcia/scr24x_cs.c > index f6b43d9350f0..04b39c3596cc 100644 > --- a/drivers/char/pcmcia/scr24x_cs.c > +++ b/drivers/char/pcmcia/scr24x_cs.c > @@ -92,7 +92,7 @@ static int scr24x_open(struct inode *inode, struct file *filp) > kref_get(&dev->refcnt); > filp->private_data = dev; > > - return nonseekable_open(inode, filp); > + return stream_open(inode, filp); > } > > static int scr24x_release(struct inode *inode, struct file *filp) Acked-by: Lubomir Rintel <lkundrak@xxxxx> [scr24x_cs] Thanks, Lubo