Hi,

in sys/netinet/ip_output.c at the end of ip_output:
done:
        if (ro == &iproute && ro->ro_rt && !nortfree) {
                RTFREE(ro->ro_rt);
        }
ro->ro_rt gets freed, if not from flowtable.

but in sys/netinet/ip_input.c, ip_forward after ip_output is called:
error = ip_output(m, NULL, &ro, IP_FORWARDING, NULL, NULL);

        if (error == EMSGSIZE && ro.ro_rt)
                mtu = ro.ro_rt->rt_rmx.rmx_mtu;
        if (ro.ro_rt)
                RTFREE(ro.ro_rt);

first the mtu is saved an the it will be freed.

so:
*) double free? - mtu could be invalid?
*) could also free a flowtable entry?


Mit freundlichen Gruessen,
        Ingo Flaschberger

Geschaeftsleitung
____________________________________
crossip communications gmbh
A-1020 Wien, Sebastian Kneipp Gasse 1/3

Sitz der Gesellschaft: 1020 Wien, Oesterreich
Firmenbuchgericht: Handelsgericht Wien, FN 269698 s,
Umsatzsteueridentifikationsnummer (UID): ATU62080367

Haftungsausschluss / Disclaimer <http://www.xip.at/content/view/278/>
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to