The branch main has been updated by markj:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=48227d1c6db8fceaceebbf8578612302d64ca170

commit 48227d1c6db8fceaceebbf8578612302d64ca170
Author:     Mark Johnston <[email protected]>
AuthorDate: 2023-03-06 14:39:17 +0000
Commit:     Mark Johnston <[email protected]>
CommitDate: 2023-03-06 17:39:11 +0000

    epair: Avoid loading m_flags into a short
    
    The m_flags field of struct mbuf is 24 bits wide and so gets truncated
    in a couple of places in the epair code.  Instead of preserving the
    entire flag set, just remember whether M_BCAST or M_MCAST is set.
    
    MFC after:      1 week
    Sponsored by:   Klara, Inc.
---
 sys/net/if_epair.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/sys/net/if_epair.c b/sys/net/if_epair.c
index 81538c0cb157..3fa4c47a0bca 100644
--- a/sys/net/if_epair.c
+++ b/sys/net/if_epair.c
@@ -239,7 +239,7 @@ epair_menq(struct mbuf *m, struct epair_softc *osc)
        struct ifnet *ifp, *oifp;
        int len, ret;
        int ridx;
-       short mflags;
+       bool mcast;
 
        /*
         * I know this looks weird. We pass the "other sc" as we need that one
@@ -252,7 +252,7 @@ epair_menq(struct mbuf *m, struct epair_softc *osc)
 
        /* Save values as once the mbuf is queued, it's not ours anymore. */
        len = m->m_pkthdr.len;
-       mflags = m->m_flags;
+       mcast = (m->m_flags & (M_BCAST | M_MCAST)) != 0;
 
        struct epair_queue *q = epair_select_queue(osc, m);
 
@@ -273,7 +273,7 @@ epair_menq(struct mbuf *m, struct epair_softc *osc)
         * the logic another time.
         */
        if_inc_counter(ifp, IFCOUNTER_OBYTES, len);
-       if (mflags & (M_BCAST|M_MCAST))
+       if (mcast)
                if_inc_counter(ifp, IFCOUNTER_OMCASTS, 1);
        /* Someone else received the packet. */
        if_inc_counter(oifp, IFCOUNTER_IPACKETS, 1);
@@ -325,7 +325,7 @@ epair_transmit(struct ifnet *ifp, struct mbuf *m)
        struct ifnet *oifp;
 #ifdef ALTQ
        int len;
-       short mflags;
+       bool mcast;
 #endif
 
        if (m == NULL)
@@ -366,7 +366,7 @@ epair_transmit(struct ifnet *ifp, struct mbuf *m)
 
 #ifdef ALTQ
        len = m->m_pkthdr.len;
-       mflags = m->m_flags;
+       mcast = (m->m_flags & (M_BCAST | M_MCAST)) != 0;
        int error = 0;
 
        /* Support ALTQ via the classic if_start() path. */
@@ -378,7 +378,7 @@ epair_transmit(struct ifnet *ifp, struct mbuf *m)
                IF_UNLOCK(&ifp->if_snd);
                if (!error) {
                        if_inc_counter(ifp, IFCOUNTER_OBYTES, len);
-                       if (mflags & (M_BCAST|M_MCAST))
+                       if (mcast)
                                if_inc_counter(ifp, IFCOUNTER_OMCASTS, 1);
                        epair_start(ifp);
                }

Reply via email to