From 60901b7542e68e466b457cadfe726100f7737387 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 20 Jun 2007 13:14:55 +0200 Subject: [PATCH] server: Don't crash when trying to set a file lock on a device. --- server/fd.c | 12 ++++++------ server/trace.c | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/server/fd.c b/server/fd.c index 7a7d5722a27..cf3a306e1ec 100644 --- a/server/fd.c +++ b/server/fd.c @@ -1184,12 +1184,6 @@ static struct file_lock *add_lock( struct fd *fd, int shared, file_pos_t start, { struct file_lock *lock; - if (!fd->inode) /* not a regular file */ - { - set_error( STATUS_INVALID_HANDLE ); - return NULL; - } - if (!(lock = alloc_object( &file_lock_ops ))) return NULL; lock->shared = shared; lock->start = start; @@ -1259,6 +1253,12 @@ obj_handle_t lock_fd( struct fd *fd, file_pos_t start, file_pos_t count, int sha struct list *ptr; file_pos_t end = start + count; + if (!fd->inode) /* not a regular file */ + { + set_error( STATUS_INVALID_DEVICE_REQUEST ); + return 0; + } + /* don't allow wrapping locks */ if (end && end < start) { diff --git a/server/trace.c b/server/trace.c index 312b68de0c8..3dd614a7dca 100644 --- a/server/trace.c +++ b/server/trace.c @@ -4246,6 +4246,7 @@ static const struct { "ILLEGAL_FUNCTION", STATUS_ILLEGAL_FUNCTION }, { "INSTANCE_NOT_AVAILABLE", STATUS_INSTANCE_NOT_AVAILABLE }, { "INVALID_CID", STATUS_INVALID_CID }, + { "INVALID_DEVICE_REQUEST", STATUS_INVALID_DEVICE_REQUEST }, { "INVALID_FILE_FOR_SECTION", STATUS_INVALID_FILE_FOR_SECTION }, { "INVALID_HANDLE", STATUS_INVALID_HANDLE }, { "INVALID_PARAMETER", STATUS_INVALID_PARAMETER }, -- 2.11.4.GIT