Author: gordon
Date: Tue Sep 15 21:42:05 2020
New Revision: 365778
URL: https://svnweb.freebsd.org/changeset/base/365778

Log:
  Fix ure device driver susceptible to packet-in-packet attack.
  
  Approved by:  so
  Approved by:  re (implicit for releng/12.2)
  Security:     FreeBSD-SA-20:27.ure
  Security:     CVE-2020-7464

Modified:
  releng/11.3/sys/dev/usb/net/if_ure.c
  releng/11.4/sys/dev/usb/net/if_ure.c
  releng/12.1/sys/dev/usb/net/if_ure.c
  releng/12.2/sys/dev/usb/net/if_ure.c

Modified: releng/11.3/sys/dev/usb/net/if_ure.c
==============================================================================
--- releng/11.3/sys/dev/usb/net/if_ure.c        Tue Sep 15 21:28:47 2020        
(r365777)
+++ releng/11.3/sys/dev/usb/net/if_ure.c        Tue Sep 15 21:42:05 2020        
(r365778)
@@ -710,7 +710,9 @@ ure_init(struct usb_ether *ue)
            ~URE_RXDY_GATED_EN);
 
        /* Set Rx mode. */
-       rxmode = URE_RCR_APM;
+       rxmode = ure_read_4(sc, URE_PLA_RCR, URE_MCU_TYPE_PLA);
+       rxmode &= ~URE_RCR_ACPT_ALL;
+       rxmode |= URE_RCR_APM;
 
        /* If we want promiscuous mode, set the allframes bit. */
        if (ifp->if_flags & IFF_PROMISC)

Modified: releng/11.4/sys/dev/usb/net/if_ure.c
==============================================================================
--- releng/11.4/sys/dev/usb/net/if_ure.c        Tue Sep 15 21:28:47 2020        
(r365777)
+++ releng/11.4/sys/dev/usb/net/if_ure.c        Tue Sep 15 21:42:05 2020        
(r365778)
@@ -710,7 +710,9 @@ ure_init(struct usb_ether *ue)
            ~URE_RXDY_GATED_EN);
 
        /* Set Rx mode. */
-       rxmode = URE_RCR_APM;
+       rxmode = ure_read_4(sc, URE_PLA_RCR, URE_MCU_TYPE_PLA);
+       rxmode &= ~URE_RCR_ACPT_ALL;
+       rxmode |= URE_RCR_APM;
 
        /* If we want promiscuous mode, set the allframes bit. */
        if (ifp->if_flags & IFF_PROMISC)

Modified: releng/12.1/sys/dev/usb/net/if_ure.c
==============================================================================
--- releng/12.1/sys/dev/usb/net/if_ure.c        Tue Sep 15 21:28:47 2020        
(r365777)
+++ releng/12.1/sys/dev/usb/net/if_ure.c        Tue Sep 15 21:42:05 2020        
(r365778)
@@ -784,9 +784,10 @@ ure_rxfilter(struct usb_ether *ue)
 
        URE_LOCK_ASSERT(sc, MA_OWNED);
 
-       rxmode = URE_RCR_APM;
-       if (ifp->if_flags & IFF_BROADCAST)
-                rxmode |= URE_RCR_AB;
+       rxmode = ure_read_4(sc, URE_PLA_RCR, URE_MCU_TYPE_PLA);
+       rxmode &= ~(URE_RCR_AAP | URE_RCR_AM);
+       rxmode |= URE_RCR_APM;  /* accept physical match packets */
+       rxmode |= URE_RCR_AB;   /* always accept broadcasts */
        if (ifp->if_flags & (IFF_ALLMULTI | IFF_PROMISC)) {
                if (ifp->if_flags & IFF_PROMISC)
                        rxmode |= URE_RCR_AAP;

Modified: releng/12.2/sys/dev/usb/net/if_ure.c
==============================================================================
--- releng/12.2/sys/dev/usb/net/if_ure.c        Tue Sep 15 21:28:47 2020        
(r365777)
+++ releng/12.2/sys/dev/usb/net/if_ure.c        Tue Sep 15 21:42:05 2020        
(r365778)
@@ -784,9 +784,10 @@ ure_rxfilter(struct usb_ether *ue)
 
        URE_LOCK_ASSERT(sc, MA_OWNED);
 
-       rxmode = URE_RCR_APM;
-       if (ifp->if_flags & IFF_BROADCAST)
-                rxmode |= URE_RCR_AB;
+       rxmode = ure_read_4(sc, URE_PLA_RCR, URE_MCU_TYPE_PLA);
+       rxmode &= ~(URE_RCR_AAP | URE_RCR_AM);
+       rxmode |= URE_RCR_APM;  /* accept physical match packets */
+       rxmode |= URE_RCR_AB;   /* always accept broadcasts */
        if (ifp->if_flags & (IFF_ALLMULTI | IFF_PROMISC)) {
                if (ifp->if_flags & IFF_PROMISC)
                        rxmode |= URE_RCR_AAP;
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to