DragonFlyBSD Kernel Audit
DF-2332 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/bus/smbus/smbacpi/smbacpi.c b/sys/bus/smbus/smbacpi/smbacpi.c
--- a/sys/bus/smbus/smbacpi/smbacpi.c
+++ b/sys/bus/smbus/smbacpi/smbacpi.c
@@ -205,6 +205,10 @@
 				memcpy(gsb->data, buf, count);
 			}
 		} else {
+			if (gsb->len > sizeof(buf)) {
+				s = AE_AML_NUMERIC_OVERFLOW;
+				goto err;
+			}
 			memcpy(buf, gsb->data, gsb->len);
 			count = gsb->len;
 			val = SMBUS_BWRITE(dev, sb->SlaveAddress, Address,
@@ -220,6 +224,10 @@
 			if (val == 0)
 				memcpy(gsb->data, buf, cnt);
 		} else {
+			if (info->AccessLength > sizeof(buf)) {
+				s = AE_AML_NUMERIC_OVERFLOW;
+				goto err;
+			}
 			memcpy(buf, gsb->data, info->AccessLength);
 			val = SMBUS_TRANS(dev, sb->SlaveAddress, Address,
 			    SMB_TRANS_NOCNT | SMB_TRANS_7BIT,