From 965c86b79b1af4de1de2aa77f02386c0ade78303 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Fri, 18 Mar 2016 15:48:43 -0700 Subject: [PATCH] sys: STATUS_INVALID_USER_BUFFER --- src/sys/util.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/sys/util.c b/src/sys/util.c index 715ee266..a9ec4eb5 100644 --- a/src/sys/util.c +++ b/src/sys/util.c @@ -271,7 +271,9 @@ NTSTATUS FspBufferUserBuffer(PIRP Irp, ULONG Length, LOCK_OPERATION Operation) except (EXCEPTION_EXECUTE_HANDLER) { FspFree(SystemBuffer); - return STATUS_INVALID_USER_BUFFER; + + NTSTATUS Result = GetExceptionCode(); + return FsRtlIsNtstatusExpected(Result) ? STATUS_INVALID_USER_BUFFER : Result; } } else @@ -302,7 +304,9 @@ NTSTATUS FspLockUserBuffer(PIRP Irp, ULONG Length, LOCK_OPERATION Operation) except (EXCEPTION_EXECUTE_HANDLER) { IoFreeMdl(Mdl); - return GetExceptionCode(); + + NTSTATUS Result = GetExceptionCode(); + return FsRtlIsNtstatusExpected(Result) ? STATUS_INVALID_USER_BUFFER : Result; } Irp->MdlAddress = Mdl; @@ -509,7 +513,8 @@ NTSTATUS FspQuerySecurityDescriptorInfo(SECURITY_INFORMATION SecurityInformation } except (EXCEPTION_EXECUTE_HANDLER) { - Result = STATUS_INVALID_USER_BUFFER; + Result = GetExceptionCode(); + Result = FsRtlIsNtstatusExpected(Result) ? STATUS_INVALID_USER_BUFFER : Result; } return STATUS_BUFFER_TOO_SMALL == Result ? STATUS_BUFFER_OVERFLOW : Result;