Re: [PATCH] cifs: add support for fallocate mode 0 for non-sparse files

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The bug is basically that if we extend a file by fallocate mode==0
and immediately afterwards mmap() the file we will only mmap() as much
as end-of-file was
prior to the truncate  and then if we try to touch any
address in this extended region userspace dies with bus error.

The patch added "extend a file with fallocate mode==0 for NON-Sparse
files" and caused xfstest to fail.
The fix is to force us to revalidate the file attributes (the size is
the important one) when we extend the file so
mmap() will work properly.
I have fixed this in the patch and will resend tomorrow after some more testing.

Looking for other SMB2_set_eof() callsites I see we already had the
same bug for the case of extending a SPARSE
file using fallocate mode==0. I fixed that too and will audit all
other plases where we use SMB2_set_eof()
to see if they are safe or not before resending.


On Thu, Jan 16, 2020 at 12:33 PM Steve French <smfrench@xxxxxxxxx> wrote:
>
> temporarily removed to allow Ronnie to debug a test failure
>
> On Wed, Jan 15, 2020 at 2:14 PM Steve French <smfrench@xxxxxxxxx> wrote:
> >
> > Tentatively merged into cifs-2.6.git for-next pending more testing
> >
> > On Tue, Jan 14, 2020 at 8:25 PM ronnie sahlberg
> > <ronniesahlberg@xxxxxxxxx> wrote:
> > >
> > > On Wed, Jan 15, 2020 at 11:25 AM Steve French <smfrench@xxxxxxxxx> wrote:
> > > >
> > > > Does it affect (or enable) any xfstests?
> > >
> > > It shouldn't affect any current tests.
> > > It adds support for
> > >    xfs_io -c "falloc 0 512M" <file>
> > >
> > > generic/071 now passes with this patch.   Possibly other tests as well
> > > that use "xfs_io -c falloc" as well
> > >
> > >
> > > >
> > > > On Tue, Jan 14, 2020 at 7:23 PM Ronnie Sahlberg <lsahlber@xxxxxxxxxx> wrote:
> > > > >
> > > > > RHBZ 1336264
> > > > >
> > > > > Signed-off-by: Ronnie Sahlberg <lsahlber@xxxxxxxxxx>
> > > > > ---
> > > > >  fs/cifs/smb2ops.c | 10 +++++++---
> > > > >  1 file changed, 7 insertions(+), 3 deletions(-)
> > > > >
> > > > > diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
> > > > > index 6250370c1170..91818f7c1b9c 100644
> > > > > --- a/fs/cifs/smb2ops.c
> > > > > +++ b/fs/cifs/smb2ops.c
> > > > > @@ -3106,9 +3106,13 @@ static long smb3_simple_falloc(struct file *file, struct cifs_tcon *tcon,
> > > > >                 else if (i_size_read(inode) >= off + len)
> > > > >                         /* not extending file and already not sparse */
> > > > >                         rc = 0;
> > > > > -               /* BB: in future add else clause to extend file */
> > > > > -               else
> > > > > -                       rc = -EOPNOTSUPP;
> > > > > +               /* extend file */
> > > > > +               else {
> > > > > +                       eof = cpu_to_le64(off + len);
> > > > > +                       rc = SMB2_set_eof(xid, tcon, cfile->fid.persistent_fid,
> > > > > +                                         cfile->fid.volatile_fid, cfile->pid,
> > > > > +                                         &eof);
> > > > > +               }
> > > > >                 if (rc)
> > > > >                         trace_smb3_falloc_err(xid, cfile->fid.persistent_fid,
> > > > >                                 tcon->tid, tcon->ses->Suid, off, len, rc);
> > > > > --
> > > > > 2.13.6
> > > > >
> > > >
> > > >
> > > > --
> > > > Thanks,
> > > >
> > > > Steve
> >
> >
> >
> > --
> > Thanks,
> >
> > Steve
>
>
>
> --
> Thanks,
>
> Steve



[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux