[I8042PRT]

- Don't access device control IRPs after handing them off to a worker routine that has potentially already freed them.
CORE-11229 #resolve

svn path=/trunk/; revision=71316
This commit is contained in:
Thomas Faber 2016-05-11 12:30:12 +00:00
parent cfe81c2bb8
commit bae547dcec
2 changed files with 10 additions and 6 deletions

View file

@ -467,11 +467,11 @@ i8042KbdDeviceControl(
} }
} }
Irp->IoStatus.Status = Status; if (Status != STATUS_PENDING)
if (Status == STATUS_PENDING) {
IoMarkIrpPending(Irp); Irp->IoStatus.Status = Status;
else
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
}
return Status; return Status;
} }
@ -738,9 +738,11 @@ cleanup:
} }
} }
Irp->IoStatus.Status = Status;
if (Status != STATUS_PENDING) if (Status != STATUS_PENDING)
{
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
}
return Status; return Status;
} }

View file

@ -544,9 +544,11 @@ cleanup:
} }
} }
Irp->IoStatus.Status = Status;
if (Status != STATUS_PENDING) if (Status != STATUS_PENDING)
{
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
}
return Status; return Status;
} }