Hi,

in_ifcap_cksum() checks ifp == NULL
in_hdr_cksum_out() sets ip_sum = 0
in_proto_cksum_out() and in6_proto_cksum_out() always write
th_sum if M_TCP_CSUM_OUT is set and proto is IPPROTO_TCP.

ok?

bluhm

Index: netinet/ip_output.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/ip_output.c,v
retrieving revision 1.388
diff -u -p -r1.388 ip_output.c
--- netinet/ip_output.c 22 May 2023 16:08:34 -0000      1.388
+++ netinet/ip_output.c 26 May 2023 11:55:49 -0000
@@ -1801,7 +1801,7 @@ in_hdr_cksum_out(struct mbuf *m, struct 
        struct ip *ip = mtod(m, struct ip *);
 
        ip->ip_sum = 0;
-       if (ifp && in_ifcap_cksum(m, ifp, IFCAP_CSUM_IPv4)) {
+       if (in_ifcap_cksum(m, ifp, IFCAP_CSUM_IPv4)) {
                SET(m->m_pkthdr.csum_flags, M_IPV4_CSUM_OUT);
        } else {
                ipstat_inc(ips_outswcsum);
Index: netinet/tcp_output.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/tcp_output.c,v
retrieving revision 1.138
diff -u -p -r1.138 tcp_output.c
--- netinet/tcp_output.c        15 May 2023 16:34:56 -0000      1.138
+++ netinet/tcp_output.c        26 May 2023 15:19:12 -0000
@@ -1295,7 +1295,6 @@ tcp_chopper(struct mbuf *m0, struct mbuf
 
                /* copy and adjust IP header, calculate checksum */
                SET(m->m_pkthdr.csum_flags, M_TCP_CSUM_OUT);
-               mhth->th_sum = 0;
                if (ip) {
                        struct ip *mhip;
 
@@ -1328,10 +1327,8 @@ tcp_chopper(struct mbuf *m0, struct mbuf
        }
        /* adjust IP header, calculate checksum */
        SET(m0->m_pkthdr.csum_flags, M_TCP_CSUM_OUT);
-       th->th_sum = 0;
        if (ip) {
                ip->ip_len = htons(m0->m_pkthdr.len);
-               ip->ip_sum = 0;
                in_hdr_cksum_out(m0, ifp);
                in_proto_cksum_out(m0, ifp);
        }

Reply via email to