NtSetSystemInformation: - Don't leak the copied string when being called from user mode. - Don't recursively call ZwSetSystemInformation, instead continue the normal path.

svn path=/trunk/; revision=39985
This commit is contained in:
Timo Kreuzer 2009-03-12 18:29:11 +00:00
parent 53899ff4fa
commit 36277461a1

View file

@ -1587,18 +1587,10 @@ SSI_DEF(SystemExtendServiceTableInformation)
/* FIXME: We can't, fail */ /* FIXME: We can't, fail */
//return STATUS_PRIVILEGE_NOT_HELD; //return STATUS_PRIVILEGE_NOT_HELD;
} }
/* Probe and capture the driver name */
ProbeAndCaptureUnicodeString(&ImageName, UserMode, Buffer);
/* Force kernel as previous mode */
return ZwSetSystemInformation(SystemExtendServiceTableInformation,
&ImageName,
sizeof(ImageName));
} }
/* Just copy the string */ /* Probe and capture the driver name */
ImageName = *(PUNICODE_STRING)Buffer; ProbeAndCaptureUnicodeString(&ImageName, PreviousMode, Buffer);
/* Load the image */ /* Load the image */
Status = MmLoadSystemImage(&ImageName, Status = MmLoadSystemImage(&ImageName,
@ -1607,6 +1599,10 @@ SSI_DEF(SystemExtendServiceTableInformation)
0, 0,
(PVOID)&ModuleObject, (PVOID)&ModuleObject,
&ImageBase); &ImageBase);
/* Release String */
ReleaseCapturedUnicodeString(&ImageName, PreviousMode);
if (!NT_SUCCESS(Status)) return Status; if (!NT_SUCCESS(Status)) return Status;
/* Get the headers */ /* Get the headers */