Author: tfaber
Date: Fri May 1 10:49:50 2015
New Revision: 67485
URL: http://svn.reactos.org/svn/reactos?rev=67485&view=rev
Log:
[NTOS:IO]
- Add missing SEH around user buffer access in IopCompleteRequest
- Remove a redundant condition
CORE-9624
Modified:
trunk/reactos/ntoskrnl/io/iomgr/irp.c
Modified: trunk/reactos/ntoskrnl/io/iomgr/irp.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/irp.c?re…
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/irp.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/irp.c [iso-8859-1] Fri May 1 10:49:50 2015
@@ -284,10 +284,18 @@
(Irp->IoStatus.Status != STATUS_VERIFY_REQUIRED) &&
!(NT_ERROR(Irp->IoStatus.Status)))
{
- /* Copy the buffer back to the user */
- RtlCopyMemory(Irp->UserBuffer,
- Irp->AssociatedIrp.SystemBuffer,
- Irp->IoStatus.Information);
+ _SEH2_TRY
+ {
+ /* Copy the buffer back to the user */
+ RtlCopyMemory(Irp->UserBuffer,
+ Irp->AssociatedIrp.SystemBuffer,
+ Irp->IoStatus.Information);
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ /* Do nothing */
+ }
+ _SEH2_END;
}
/* Also check if we should de-allocate it */
@@ -317,10 +325,9 @@
* (but warnings are OK!), or if it was completed with an error, but
* did return from a pending I/O Operation and is not synchronous.
*/
- if (!(NT_ERROR(Irp->IoStatus.Status)) ||
- (NT_ERROR(Irp->IoStatus.Status) &&
- (Irp->PendingReturned) &&
- !(IsIrpSynchronous(Irp, FileObject))))
+ if (!NT_ERROR(Irp->IoStatus.Status) ||
+ (Irp->PendingReturned &&
+ !IsIrpSynchronous(Irp, FileObject)))
{
/* Get any information we need from the FO before we kill it */
if ((FileObject) && (FileObject->CompletionContext))