[NTOSKRNL] On read/write, also check buffer respects device alignment requirements
[reactos.git] / ntoskrnl / io / iomgr / iofunc.c
index f3ad716..b90e73f 100644 (file)
@@ -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 */