From bf596690657198c8e1272a46c4a10c73a4ff9f67 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Thu, 4 Oct 2018 07:56:23 +0200 Subject: [PATCH] [NTOSKRNL] On read/write, also check buffer respects device alignment requirements --- ntoskrnl/io/iomgr/iofunc.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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 */