From c9b5e25c8733dfc208782b685408a8ce8e66b911 Mon Sep 17 00:00:00 2001 From: Evengard Date: Sat, 27 Apr 2024 02:01:48 +0300 Subject: [PATCH 1/2] Fix memory access error when IPv6 prefix reading, should resolve #1972 --- src/Cedar/IPC.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Cedar/IPC.c b/src/Cedar/IPC.c index 85e58a7f..6d408069 100644 --- a/src/Cedar/IPC.c +++ b/src/Cedar/IPC.c @@ -2354,7 +2354,14 @@ void IPCIPv6AddRouterPrefixes(IPC *ipc, ICMPV6_OPTION_LIST *recvPrefix, UCHAR *m IntToSubnetMask6(&newRA->RoutedMask, recvPrefix->Prefix[i]->SubnetLength); CopyIP(&newRA->RouterAddress, ip); Copy(newRA->RouterMacAddress, macAddress, 6); - Copy(newRA->RouterLinkLayerAddress, recvPrefix->SourceLinkLayer->Address, 6); + if (recvPrefix->SourceLinkLayer != NULL) + { + Copy(newRA->RouterLinkLayerAddress, recvPrefix->SourceLinkLayer->Address, 6); + } + else + { + Zero(newRA->RouterLinkLayerAddress, 6); + } Add(ipc->IPv6RouterAdvs, newRA); } } @@ -2657,7 +2664,7 @@ void IPCIPv6SendUnicast(IPC *ipc, void *data, UINT size, IP *next_ip) } destMac = ra.RouterMacAddress; - if (!IsMacUnicast(destMac) && !IsMacInvalid(ra.RouterMacAddress)) + if (!IsMacUnicast(destMac) && !IsMacInvalid(ra.RouterLinkLayerAddress)) { destMac = ra.RouterLinkLayerAddress; } From d568cc172771a1f6399c954d63d0e17655081f6d Mon Sep 17 00:00:00 2001 From: Evengard Date: Sat, 27 Apr 2024 21:57:36 +0300 Subject: [PATCH 2/2] Fix another memory access error again because of a missing MAC address in IPv6 headers --- src/Cedar/IPC.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Cedar/IPC.c b/src/Cedar/IPC.c index 6d408069..6cfc8369 100644 --- a/src/Cedar/IPC.c +++ b/src/Cedar/IPC.c @@ -1517,7 +1517,9 @@ void IPCProcessL3EventsEx(IPC *ipc, UINT64 now) // We save the router advertisement data for later use IPCIPv6AddRouterPrefixes(ipc, &p->ICMPv6HeaderPacketInfo.OptionList, src_mac, &ip_src); IPCIPv6AssociateOnNDTEx(ipc, &ip_src, src_mac, true); - IPCIPv6AssociateOnNDTEx(ipc, &ip_src, p->ICMPv6HeaderPacketInfo.OptionList.SourceLinkLayer->Address, true); + if (p->ICMPv6HeaderPacketInfo.OptionList.SourceLinkLayer != NULL) { + IPCIPv6AssociateOnNDTEx(ipc, &ip_src, p->ICMPv6HeaderPacketInfo.OptionList.SourceLinkLayer->Address, true); + } ndtProcessed = true; header_size = sizeof(ICMPV6_ROUTER_ADVERTISEMENT_HEADER); break;