On Wed, Mar 19, 2014 at 04:45:51PM -0400, Jeff Layton wrote: > Move this check into flock64_to_posix_lock instead of duplicating it in > two places. This also fixes a minor wart in the code where we continue > referring to the struct flock after converting it to struct file_lock. Acked-by: J. Bruce Fields <bfields@xxxxxxxxxx> > > Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx> > --- > fs/locks.c | 46 ++++++++++++---------------------------------- > 1 file changed, 12 insertions(+), 34 deletions(-) > > diff --git a/fs/locks.c b/fs/locks.c > index b49e853a9c7b..4cd25781b0a4 100644 > --- a/fs/locks.c > +++ b/fs/locks.c > @@ -388,6 +388,18 @@ static int flock64_to_posix_lock(struct file *filp, struct file_lock *fl, > fl->fl_ops = NULL; > fl->fl_lmops = NULL; > > + /* Ensure that fl->fl_filp has compatible f_mode */ > + switch (l->l_type) { > + case F_RDLCK: > + if (!(filp->f_mode & FMODE_READ)) > + return -EBADF; > + break; > + case F_WRLCK: > + if (!(filp->f_mode & FMODE_WRITE)) > + return -EBADF; > + break; > + } > + > return assign_type(fl, l->l_type); > } > > @@ -2025,23 +2037,6 @@ again: > file_lock->fl_flags |= FL_SLEEP; > } > > - error = -EBADF; > - switch (flock.l_type) { > - case F_RDLCK: > - if (!(filp->f_mode & FMODE_READ)) > - goto out; > - break; > - case F_WRLCK: > - if (!(filp->f_mode & FMODE_WRITE)) > - goto out; > - break; > - case F_UNLCK: > - break; > - default: > - error = -EINVAL; > - goto out; > - } > - > error = do_lock_file_wait(filp, cmd, file_lock); > > /* > @@ -2143,23 +2138,6 @@ again: > file_lock->fl_flags |= FL_SLEEP; > } > > - error = -EBADF; > - switch (flock.l_type) { > - case F_RDLCK: > - if (!(filp->f_mode & FMODE_READ)) > - goto out; > - break; > - case F_WRLCK: > - if (!(filp->f_mode & FMODE_WRITE)) > - goto out; > - break; > - case F_UNLCK: > - break; > - default: > - error = -EINVAL; > - goto out; > - } > - > error = do_lock_file_wait(filp, cmd, file_lock); > > /* > -- > 1.8.5.3 > -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html