https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=243675

            Bug ID: 243675
           Summary: IPv6 checksum is wrong in output packets with
                    extension headers
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: kern
          Assignee: b...@freebsd.org
          Reporter: fdup...@isc.org

Created attachment 211135
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=211135&action=edit
fix

sys/netinet6/ip6_output.c ip6_output() lines ~1000

'sw_csum &= ~CSUM_DELAY_DATA_IPV6;' does not make sense as the 'sw_csum'
variable is not used after. Obviously it should be replaced by
'm->m_pkthdr.csum_flags'.

'in6_delayed_cksum(m, plen, sizeof(struct ip6_hdr));' plen includes the
extension headers so it should be 'plen - option', the start point should be
'sizeof(struct ip6_hdr) + option' i.e. the in6_delayed_cksum() call should be:

'in6_delayed_cksum(m, plen - optlen,
    sizeof(struct ip6_hdr) + optlen);'


I suspect a similar issue with SCTP code lines ~1018

I left line 1029:

`m->m_pkthdr.csum_flags &= ifp->if_hwassist;`

which seems to have no effect (nor sense).

The in6_delayed_cksum() call line 1119 should be fixed the same way (and SCTP
code just after too).

I am attaching a diff and a small program triggering the bug (it makes checksum
errors on the target and/or tcpdump on outgoing traffic).

-- 
You are receiving this mail because:
You are the assignee for the bug.
_______________________________________________
freebsd-bugs@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to