From ad4d57f14b01abc88a09dc4bdedd1b35258741df Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Sun, 19 Aug 2012 11:09:06 -0400 Subject: [PATCH] Fix multicast double free issue in IPv4. - IPv4 had the same problem as v6. Most likely this was an oversight when converting from a C to a C++ module. Might help with #6736 and #8894. --- src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp | 9 +++++++-- src/add-ons/kernel/network/protocols/ipv6/ipv6.cpp | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp b/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp index db79f94cb1..15011dacfa 100644 --- a/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp +++ b/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp @@ -163,10 +163,16 @@ struct MulticastStateHash { struct ipv4_protocol : net_protocol { ipv4_protocol() : + raw(NULL), multicast_filter(this) { } + ~ipv4_protocol() + { + delete raw; + } + RawSocket* raw; uint8 service_type; uint8 time_to_live; @@ -1029,9 +1035,8 @@ ipv4_uninit_protocol(net_protocol* _protocol) { ipv4_protocol* protocol = (ipv4_protocol*)_protocol; - delete protocol->raw; - delete protocol->multicast_address; delete protocol; + return B_OK; } diff --git a/src/add-ons/kernel/network/protocols/ipv6/ipv6.cpp b/src/add-ons/kernel/network/protocols/ipv6/ipv6.cpp index 68ce9b8ddb..3427a645f2 100644 --- a/src/add-ons/kernel/network/protocols/ipv6/ipv6.cpp +++ b/src/add-ons/kernel/network/protocols/ipv6/ipv6.cpp @@ -180,6 +180,7 @@ struct MulticastStateHash { struct ipv6_protocol : net_protocol { ipv6_protocol() : + raw(NULL), multicast_filter(this) { }