On Fri, Feb 14, 2020 at 07:26:46AM -0500, Jeff Layton wrote: > On Fri, 2020-02-14 at 12:35 +0800, Murphy Zhou wrote: > > Now child can't unlock the same file that has been locked by > > parent. Fix this by not skipping unlock if requesting from > > different process. > > > > Patch tested by LTP and xfstests using samba server. > > > > Signed-off-by: Murphy Zhou <jencce.kernel@xxxxxxxxx> > > --- > > fs/cifs/smb2file.c | 2 -- > > 1 file changed, 2 deletions(-) > > > > diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c > > index afe1f03aabe3..b5bca0e13d51 100644 > > --- a/fs/cifs/smb2file.c > > +++ b/fs/cifs/smb2file.c > > @@ -151,8 +151,6 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock, > > (flock->fl_start + length) < > > (li->offset + li->length)) > > continue; > > - if (current->tgid != li->pid) > > - continue; > > if (cinode->can_cache_brlcks) { > > /* > > * We can cache brlock requests - simply remove a lock > > I'm not as familiar with this code as I once was, but... > > From fork(2) manpage: > > * The child does not inherit process-associated record locks from its > parent (fcntl(2)). (On the other hand, it does inherit fcntl(2) > open file description locks and flock(2) locks from its parent.) > > It looks like cifs_setlk calls mand_unlock_range, and that gets called > from both fcntl and flock codepaths. > > So, I'm not sure about just removing this. It seems like the pid check > is probably correct for traditional posix locks, but probably not for > OFD and flock locks? What ensures that completely unrelated tasks can't > unlock your locks? You are right Jeff. Just removing this is not right. We need to handle at least 3 types of locks: posix, OFD and flock. Thanks very much for reviewing! I'll try to sort this out. > -- > Jeff Layton <jlayton@xxxxxxxxxx> >