lkml.org 
[lkml]   [2019]   [Mar]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    SubjectRe: [PATCH 2/3] *: convert stream-like files from nonseekable_open -> stream_open
    From
    Date
    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@v3.sk> [scr24x_cs]

    Thanks,
    Lubo

    \
     
     \ /
      Last update: 2019-03-27 07:55    [W:6.159 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site