https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d87786bf6cb718510aeff…
commit d87786bf6cb718510aefffc20b10322d60c06ea1
Author: Thomas Faber <thomas.faber(a)reactos.org>
AuthorDate: Mon Jan 8 13:51:04 2018 +0100
[TCPIP] Check for allocation failures in ReadIpConfiguration. CID 1411924
---
drivers/network/tcpip/datalink/lan.c | 66 ++++++++++++++++++++----------------
1 file changed, 36 insertions(+), 30 deletions(-)
diff --git a/drivers/network/tcpip/datalink/lan.c b/drivers/network/tcpip/datalink/lan.c
index 01b36a08cc..23ffbbab46 100644
--- a/drivers/network/tcpip/datalink/lan.c
+++ b/drivers/network/tcpip/datalink/lan.c
@@ -637,14 +637,16 @@ BOOLEAN ReadIpConfiguration(PIP_INTERFACE Interface)
if (NT_SUCCESS(Status))
{
RegistryDataU.Length = KeyValueInfo->DataLength;
-
- RtlUnicodeStringToAnsiString(&RegistryDataA,
- &RegistryDataU,
- TRUE);
-
- AddrInitIPv4(&Interface->Unicast,
inet_addr(RegistryDataA.Buffer));
-
- RtlFreeAnsiString(&RegistryDataA);
+
+ Status = RtlUnicodeStringToAnsiString(&RegistryDataA,
+ &RegistryDataU,
+ TRUE);
+ if (NT_SUCCESS(Status))
+ {
+ AddrInitIPv4(&Interface->Unicast,
+ inet_addr(RegistryDataA.Buffer));
+ RtlFreeAnsiString(&RegistryDataA);
+ }
}
Status = ZwQueryValueKey(ParameterHandle,
@@ -656,16 +658,18 @@ BOOLEAN ReadIpConfiguration(PIP_INTERFACE Interface)
if (NT_SUCCESS(Status))
{
RegistryDataU.Length = KeyValueInfo->DataLength;
-
- RtlUnicodeStringToAnsiString(&RegistryDataA,
- &RegistryDataU,
- TRUE);
-
- AddrInitIPv4(&Interface->Netmask,
inet_addr(RegistryDataA.Buffer));
-
- RtlFreeAnsiString(&RegistryDataA);
+
+ Status = RtlUnicodeStringToAnsiString(&RegistryDataA,
+ &RegistryDataU,
+ TRUE);
+ if (NT_SUCCESS(Status))
+ {
+ AddrInitIPv4(&Interface->Netmask,
+ inet_addr(RegistryDataA.Buffer));
+ RtlFreeAnsiString(&RegistryDataA);
+ }
}
-
+
/* We have to wait until both IP address and subnet mask
* are read to add the interface route, but we must do it
* before we add the default gateway */
@@ -683,24 +687,26 @@ BOOLEAN ReadIpConfiguration(PIP_INTERFACE Interface)
if (NT_SUCCESS(Status))
{
RegistryDataU.Length = KeyValueInfo->DataLength;
-
- RtlUnicodeStringToAnsiString(&RegistryDataA,
- &RegistryDataU,
- TRUE);
-
- AddrInitIPv4(&Router, inet_addr(RegistryDataA.Buffer));
-
- if (!AddrIsUnspecified(&Router))
- RouterCreateRoute(&DefaultMask, &DefaultMask, &Router,
Interface, 1);
-
- RtlFreeAnsiString(&RegistryDataA);
+
+ Status = RtlUnicodeStringToAnsiString(&RegistryDataA,
+ &RegistryDataU,
+ TRUE);
+ if (NT_SUCCESS(Status))
+ {
+ AddrInitIPv4(&Router, inet_addr(RegistryDataA.Buffer));
+
+ if (!AddrIsUnspecified(&Router))
+ RouterCreateRoute(&DefaultMask, &DefaultMask,
&Router, Interface, 1);
+
+ RtlFreeAnsiString(&RegistryDataA);
+ }
}
}
-
+
ExFreePoolWithTag(KeyValueInfo, KEY_VALUE_TAG);
ZwClose(ParameterHandle);
}
-
+
return TRUE;
}