diff --git a/src/sys/fsctl.c b/src/sys/fsctl.c index 676b0731..6bab9dd9 100644 --- a/src/sys/fsctl.c +++ b/src/sys/fsctl.c @@ -134,12 +134,16 @@ static NTSTATUS FspFsvolFileSystemControlReparsePoint( if (IsWrite) { - if (0 == InputBuffer || 0 == InputBufferLength || - 0 != OutputBuffer || 0 != OutputBufferLength || - FSP_FSCTL_TRANSACT_REQ_BUFFER_SIZEMAX - (FileNode->FileName.Length + sizeof(WCHAR)) < - InputBufferLength) + if (0 == InputBuffer || 0 == InputBufferLength) + return STATUS_INVALID_BUFFER_SIZE; + + if (0 != OutputBuffer || 0 != OutputBufferLength) return STATUS_INVALID_PARAMETER; + if (FSP_FSCTL_TRANSACT_REQ_BUFFER_SIZEMAX - (FileNode->FileName.Length + sizeof(WCHAR)) < + InputBufferLength) + return STATUS_IO_REPARSE_DATA_INVALID; + Result = FsRtlValidateReparsePointBuffer(InputBufferLength, InputBuffer); if (!NT_SUCCESS(Result)) return Result;