mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 14:42:37 +02:00
locks: fix checking of fcntl_setlease argument
commit0ec4f431ebupstream. The only checks of the long argument passed to fcntl(fd,F_SETLEASE,.) are done after converting the long to an int. Thus some illegal values may be let through and cause problems in later code. [ They actually *don't* cause problems in mainline, as of Dave Jones's commit8d657eb3b4"Remove easily user-triggerable BUG from generic_setlease", but we should fix this anyway. And this patch will be necessary to fix real bugs on earlier kernels. ] Signed-off-by: J. Bruce Fields <bfields@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
f58f16f203
commit
dc525df989
|
|
@ -315,7 +315,7 @@ static int flock_make_lock(struct file *filp, struct file_lock **lock,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int assign_type(struct file_lock *fl, int type)
|
||||
static int assign_type(struct file_lock *fl, long type)
|
||||
{
|
||||
switch (type) {
|
||||
case F_RDLCK:
|
||||
|
|
@ -452,7 +452,7 @@ static const struct lock_manager_operations lease_manager_ops = {
|
|||
/*
|
||||
* Initialize a lease, use the default lock manager operations
|
||||
*/
|
||||
static int lease_init(struct file *filp, int type, struct file_lock *fl)
|
||||
static int lease_init(struct file *filp, long type, struct file_lock *fl)
|
||||
{
|
||||
if (assign_type(fl, type) != 0)
|
||||
return -EINVAL;
|
||||
|
|
@ -470,7 +470,7 @@ static int lease_init(struct file *filp, int type, struct file_lock *fl)
|
|||
}
|
||||
|
||||
/* Allocate a file_lock initialised to this type of lease */
|
||||
static struct file_lock *lease_alloc(struct file *filp, int type)
|
||||
static struct file_lock *lease_alloc(struct file *filp, long type)
|
||||
{
|
||||
struct file_lock *fl = locks_alloc_lock();
|
||||
int error = -ENOMEM;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user