https://git.reactos.org/?p=reactos.git;a=commitdiff;h=29b2fdcc4d3f85e1b95d32...
commit 29b2fdcc4d3f85e1b95d321f2d02b4278d904828 Author: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org AuthorDate: Sat Oct 20 19:30:59 2018 +0200 Commit: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org CommitDate: Sat Oct 20 19:52:34 2018 +0200
[NTOS:CM] Minor fixes.
- Validate the information class parameter in NtQueryValueKey(). - Call the post-callback in NtSetValueKey() only if the callback has been registered and the CmSetValueKey() call is executed. --- ntoskrnl/config/ntapi.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/ntoskrnl/config/ntapi.c b/ntoskrnl/config/ntapi.c index ee6b57c805..2aa6f47cb1 100644 --- a/ntoskrnl/config/ntapi.c +++ b/ntoskrnl/config/ntapi.c @@ -533,10 +533,23 @@ NtQueryValueKey(IN HANDLE KeyHandle, REG_QUERY_VALUE_KEY_INFORMATION QueryValueKeyInfo; REG_POST_OPERATION_INFORMATION PostOperationInfo; UNICODE_STRING ValueNameCopy = *ValueName; + PAGED_CODE(); + DPRINT("NtQueryValueKey() KH 0x%p, VN '%wZ', KVIC %d, Length %lu\n", KeyHandle, ValueName, KeyValueInformationClass, Length);
+ /* Reject classes we don't know about */ + if ((KeyValueInformationClass != KeyValueBasicInformation) && + (KeyValueInformationClass != KeyValueFullInformation) && + (KeyValueInformationClass != KeyValuePartialInformation) && + (KeyValueInformationClass != KeyValueFullInformationAlign64) && + (KeyValueInformationClass != KeyValuePartialInformationAlign64)) + { + /* Fail */ + return STATUS_INVALID_PARAMETER; + } + /* Verify that the handle is valid and is a registry key */ Status = ObReferenceObjectByHandle(KeyHandle, KEY_QUERY_VALUE, @@ -723,11 +736,11 @@ NtSetValueKey(IN HANDLE KeyHandle, Type, Data, DataSize); - }
- /* Do the post-callback */ - PostOperationInfo.Status = Status; - CmiCallRegisteredCallbacks(RegNtPostSetValueKey, &PostOperationInfo); + /* Do the post-callback */ + PostOperationInfo.Status = Status; + CmiCallRegisteredCallbacks(RegNtPostSetValueKey, &PostOperationInfo); + }
end: /* Dereference and return status */