svn commit: r301189 - head/sys/dev/iwm

Adrian Chadd adrian at FreeBSD.org
Thu Jun 2 04:53:29 UTC 2016


Author: adrian
Date: Thu Jun  2 04:53:28 2016
New Revision: 301189
URL: https://svnweb.freebsd.org/changeset/base/301189

Log:
  [iwm] Use IWM_MAX_CMD_PAYLOAD_SIZE to improve command length checks.
  
    Taken-From: OpenBSD (parts of if_iwm.c r1.57 and if_iwmreg.h r1.10)
  
  Obtained from:	DragonflyBSD b70c1eaad06257c5c7f4d8110d21642ebec14f42

Modified:
  head/sys/dev/iwm/if_iwm_util.c
  head/sys/dev/iwm/if_iwmreg.h

Modified: head/sys/dev/iwm/if_iwm_util.c
==============================================================================
--- head/sys/dev/iwm/if_iwm_util.c	Thu Jun  2 04:42:45 2016	(r301188)
+++ head/sys/dev/iwm/if_iwm_util.c	Thu Jun  2 04:53:28 2016	(r301189)
@@ -224,7 +224,10 @@ iwm_send_cmd(struct iwm_softc *sc, struc
 		    "large command paylen=%u len0=%u\n",
 			paylen, hcmd->len[0]);
 		/* Command is too large */
-		if (sizeof(cmd->hdr) + paylen > IWM_RBUF_SIZE) {
+		if (paylen > IWM_MAX_CMD_PAYLOAD_SIZE) {
+			device_printf(sc->sc_dev,
+			    "firmware command too long (%zd bytes)\n",
+			    paylen + sizeof(cmd->hdr));
 			error = EINVAL;
 			goto out;
 		}
@@ -269,7 +272,7 @@ iwm_send_cmd(struct iwm_softc *sc, struc
 	    (unsigned long) (hcmd->len[0] + hcmd->len[1] + sizeof(cmd->hdr)),
 	    async ? " (async)" : "");
 
-	if (hcmd->len[0] > sizeof(cmd->data)) {
+	if (paylen > sizeof(cmd->data)) {
 		bus_dmamap_sync(ring->data_dmat, data->map,
 		    BUS_DMASYNC_PREWRITE);
 	} else {

Modified: head/sys/dev/iwm/if_iwmreg.h
==============================================================================
--- head/sys/dev/iwm/if_iwmreg.h	Thu Jun  2 04:42:45 2016	(r301188)
+++ head/sys/dev/iwm/if_iwmreg.h	Thu Jun  2 04:53:28 2016	(r301189)
@@ -5243,6 +5243,7 @@ enum iwm_power_scheme {
 };
 
 #define IWM_DEF_CMD_PAYLOAD_SIZE 320
+#define IWM_MAX_CMD_PAYLOAD_SIZE ((4096 - 4) - sizeof(struct iwm_cmd_header))
 #define IWM_CMD_FAILED_MSK 0x40
 
 struct iwm_device_cmd {


More information about the svn-src-head mailing list