Nico Huber has uploaded this change for review.

View Change

dediprog: Fix bug where too many transfers would be queued

We didn't check the total number of queued transfers in the inner most
loop. Up to DEDIPROG_ASYNC_TRANSFERS - 1 invalid transfers could be
queued therefore. So add another check on the total number.

Original-Change-Id: I91a8de47db7107455f5fc63ab2f13a0bd50c5b63
Original-Acked-by: David Hendricks <david.hendricks@gmail.com>
Original-Reviewed-on: https://review.coreboot.org/19351
Original-Tested-by: build bot (Jenkins)
Original-Reviewed-by: Nico Huber <nico.h@gmx.de>

Change-Id: Ie0d516f0fb2923a772a0ca7020ca5118ab260dc5
Signed-off-by: Nico Huber <nico.huber@secunet.com>
---
M dediprog.c
1 file changed, 3 insertions(+), 1 deletion(-)

git pull ssh://review.coreboot.org:29418/flashrom refs/changes/81/21781/1
diff --git a/dediprog.c b/dediprog.c
index b7276e5..6f82772 100644
--- a/dediprog.c
+++ b/dediprog.c
@@ -462,7 +462,9 @@

/* Now transfer requested chunks using libusb's asynchronous interface. */
while (!status.error && (status.queued_idx < count)) {
- while ((status.queued_idx - status.finished_idx) < DEDIPROG_ASYNC_TRANSFERS) {
+ while ((status.queued_idx < count) &&
+ (status.queued_idx - status.finished_idx) < DEDIPROG_ASYNC_TRANSFERS)
+ {
transfer = transfers[status.queued_idx % DEDIPROG_ASYNC_TRANSFERS];
libusb_fill_bulk_transfer(transfer, dediprog_handle, 0x80 | dediprog_in_endpoint,
(unsigned char *)buf + status.queued_idx * chunksize, chunksize,

To view, visit change 21781. To unsubscribe, visit settings.

Gerrit-Project: flashrom
Gerrit-Branch: stable
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie0d516f0fb2923a772a0ca7020ca5118ab260dc5
Gerrit-Change-Number: 21781
Gerrit-PatchSet: 1
Gerrit-Owner: Nico Huber <nico.h@gmx.de>