diff --git a/ntoskrnl/io/iomgr/iofunc.c b/ntoskrnl/io/iomgr/iofunc.c index f3ad7164c2a..b90e73f5dc9 100644 --- a/ntoskrnl/io/iomgr/iofunc.c +++ b/ntoskrnl/io/iomgr/iofunc.c @@ -2621,6 +2621,14 @@ NtReadFile(IN HANDLE FileHandle, return STATUS_INVALID_PARAMETER; } + /* Fail if buffer doesn't match alignment requirements */ + if (((ULONG_PTR)Buffer & DeviceObject->AlignmentRequirement) != 0) + { + /* Release the file object and and fail */ + ObDereferenceObject(FileObject); + return STATUS_INVALID_PARAMETER; + } + if (ByteOffset) { /* Fail if ByteOffset is not sector size aligned */ @@ -3650,6 +3658,14 @@ NtWriteFile(IN HANDLE FileHandle, return STATUS_INVALID_PARAMETER; } + /* Fail if buffer doesn't match alignment requirements */ + if (((ULONG_PTR)Buffer & DeviceObject->AlignmentRequirement) != 0) + { + /* Release the file object and and fail */ + ObDereferenceObject(FileObject); + return STATUS_INVALID_PARAMETER; + } + if (ByteOffset) { /* Fail if ByteOffset is not sector size aligned */