tangled
alpha
login
or
join now
huwcampbell.com
/
reactos
0
fork
atom
Reactos
0
fork
atom
overview
issues
pulls
pipelines
[NTOS:EX] Fix query of SystemFirmwareTableInformation
Timo Kreuzer
7 months ago
64701d07
3a0f9f2f
+9
-7
1 changed file
expand all
collapse all
unified
split
ntoskrnl
ex
sysinfo.c
+9
-7
ntoskrnl/ex/sysinfo.c
···
2727
2727
{
2728
2728
PSYSTEM_FIRMWARE_TABLE_INFORMATION SysFirmwareInfo = (PSYSTEM_FIRMWARE_TABLE_INFORMATION)Buffer;
2729
2729
NTSTATUS Status = STATUS_SUCCESS;
2730
2730
-
ULONG InputBufSize;
2730
2730
+
ULONG DataBufSize;
2731
2731
ULONG DataSize = 0;
2732
2732
ULONG TableCount = 0;
2733
2733
···
2742
2742
return STATUS_INFO_LENGTH_MISMATCH;
2743
2743
}
2744
2744
2745
2745
-
InputBufSize = SysFirmwareInfo->TableBufferLength;
2745
2745
+
DataBufSize = Size - *ReqSize;
2746
2746
switch (SysFirmwareInfo->ProviderSignature)
2747
2747
{
2748
2748
/*
···
2772
2772
if (SysFirmwareInfo->Action == SystemFirmwareTable_Enumerate)
2773
2773
{
2774
2774
DataSize = TableCount * sizeof(ULONG);
2775
2775
-
if (DataSize <= InputBufSize)
2775
2775
+
if (DataSize <= DataBufSize)
2776
2776
{
2777
2777
*(ULONG *)SysFirmwareInfo->TableBuffer = 0;
2778
2778
}
2779
2779
}
2780
2780
else if (SysFirmwareInfo->Action == SystemFirmwareTable_Get
2781
2781
-
&& DataSize <= InputBufSize)
2781
2781
+
&& DataSize <= DataBufSize)
2782
2782
{
2783
2783
-
Status = ExpGetRawSMBiosTable(SysFirmwareInfo->TableBuffer, &DataSize, InputBufSize);
2783
2783
+
Status = ExpGetRawSMBiosTable(SysFirmwareInfo->TableBuffer, &DataSize, DataBufSize);
2784
2784
}
2785
2785
SysFirmwareInfo->TableBufferLength = DataSize;
2786
2786
+
*ReqSize += DataSize;
2786
2787
}
2787
2788
break;
2788
2789
}
···
2790
2791
{
2791
2792
DPRINT1("SystemFirmwareTableInformation: Unsupported provider (0x%x)\n",
2792
2793
SysFirmwareInfo->ProviderSignature);
2793
2793
-
Status = STATUS_ILLEGAL_FUNCTION;
2794
2794
+
*ReqSize = 0;
2795
2795
+
Status = STATUS_NOT_IMPLEMENTED;
2794
2796
}
2795
2797
}
2796
2798
···
2801
2803
case SystemFirmwareTable_Enumerate:
2802
2804
case SystemFirmwareTable_Get:
2803
2805
{
2804
2804
-
if (SysFirmwareInfo->TableBufferLength > InputBufSize)
2806
2806
+
if (SysFirmwareInfo->TableBufferLength > DataBufSize)
2805
2807
{
2806
2808
Status = STATUS_BUFFER_TOO_SMALL;
2807
2809
}