PERFORCE change 194138 for review

Takuya ASADA syuu at FreeBSD.org
Fri Jun 3 05:40:26 UTC 2011


http://p4web.freebsd.org/@@194138?ac=10

Change 194138 by syuu at x200 on 2011/06/03 05:39:56

	index size check on ioctl

Affected files ...

.. //depot/projects/soc2011/mq_bpf/src/sys/net/bpf.c#4 edit
.. //depot/projects/soc2011/mq_bpf/src/sys/net/if_var.h#3 edit

Differences ...

==== //depot/projects/soc2011/mq_bpf/src/sys/net/bpf.c#4 (text+ko) ====

@@ -1614,7 +1614,13 @@
 				error = EINVAL;
 				break;
 			}
+			struct ifnet *const ifp = d->bd_bif->bif_ifp;
 			index = *(uint32_t *)addr;
+			if (index > ifp->if_rxq_num) {
+				log(LOG_DEBUG, "index too large\n");
+				error = EINVAL;
+				break;
+			}
 			log(LOG_DEBUG, "index:%d\n", index);
 			d->bd_qmask.qm_rxq_mask[index] = TRUE;
 			break;
@@ -1637,7 +1643,13 @@
 				error = EINVAL;
 				break;
 			}
+			struct ifnet *const ifp = d->bd_bif->bif_ifp;
 			index = *(uint32_t *)addr;
+			if (index > ifp->if_rxq_num) {
+				log(LOG_DEBUG, "index too large\n");
+				error = EINVAL;
+				break;
+			}
 			log(LOG_DEBUG, "index:%d\n", index);
 			d->bd_qmask.qm_rxq_mask[index] = FALSE;
 			break;
@@ -1660,7 +1672,13 @@
 				error = EINVAL;
 				break;
 			}
+			struct ifnet *const ifp = d->bd_bif->bif_ifp;
 			index = *(uint32_t *)addr;
+			if (index > ifp->if_rxq_num) {
+				log(LOG_DEBUG, "index too large\n");
+				error = EINVAL;
+				break;
+			}
 			log(LOG_DEBUG, "index:%d\n", index);
 			*(uint32_t *)addr = d->bd_qmask.qm_rxq_mask[index];
 			break;
@@ -1683,7 +1701,13 @@
 				error = EINVAL;
 				break;
 			}
+			struct ifnet *const ifp = d->bd_bif->bif_ifp;
 			index = *(uint32_t *)addr;
+			if (index > ifp->if_txq_num) {
+				log(LOG_DEBUG, "index too large\n");
+				error = EINVAL;
+				break;
+			}
 			log(LOG_DEBUG, "index:%d\n", index);
 			d->bd_qmask.qm_txq_mask[index] = TRUE;
 			break;
@@ -1706,7 +1730,13 @@
 				error = EINVAL;
 				break;
 			}
+			struct ifnet *const ifp = d->bd_bif->bif_ifp;
 			index = *(uint32_t *)addr;
+			if (index > ifp->if_txq_num) {
+				log(LOG_DEBUG, "index too large\n");
+				error = EINVAL;
+				break;
+			}
 			log(LOG_DEBUG, "index:%d\n", index);
 			d->bd_qmask.qm_txq_mask[index] = FALSE;
 			break;
@@ -1729,7 +1759,13 @@
 				error = EINVAL;
 				break;
 			}
+			struct ifnet *const ifp = d->bd_bif->bif_ifp;
 			index = *(uint32_t *)addr;
+			if (index > ifp->if_txq_num) {
+				log(LOG_DEBUG, "index too large\n");
+				error = EINVAL;
+				break;
+			}
 			log(LOG_DEBUG, "index:%d\n", index);
 			*(uint32_t *)addr = d->bd_qmask.qm_txq_mask[index];
 			break;

==== //depot/projects/soc2011/mq_bpf/src/sys/net/if_var.h#3 (text+ko) ====



More information about the p4-projects mailing list