On 2017 May 22 (Mon) at 15:54:38 +0200 (+0200), Alexander Bluhm wrote: :On Mon, May 22, 2017 at 11:33:08AM +0000, Gerlach, Hendrik wrote: :> A possible fix maybe would calling m_free(opts) (if opts != NULL) after calling icmp_send() : :As the options are not allocated in icmp_send() I think it is better :to free them in icmp_input_if() after a successful call to :icmp_reflect(). : :ok? :
OK :bluhm : :Index: netinet/ip_icmp.c :=================================================================== :RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/ip_icmp.c,v :retrieving revision 1.167 :diff -u -p -r1.167 ip_icmp.c :--- netinet/ip_icmp.c 4 May 2017 17:58:46 -0000 1.167 :+++ netinet/ip_icmp.c 22 May 2017 13:25:37 -0000 :@@ -591,8 +591,10 @@ reflect: : : icmpstat_inc(icps_reflect); : icmpstat_inc(icps_outhist + icp->icmp_type); :- if (!icmp_reflect(m, &opts, NULL)) :+ if (!icmp_reflect(m, &opts, NULL)) { : icmp_send(m, opts); :+ m_free(opts); :+ } : return IPPROTO_DONE; : : case ICMP_REDIRECT: : -- If you can read this, you're too close.