diff --git a/drivers/char/diag/diagfwd_hsic.c b/drivers/char/diag/diagfwd_hsic.c index 1f161777aca5..87942d8f6341 100644 --- a/drivers/char/diag/diagfwd_hsic.c +++ b/drivers/char/diag/diagfwd_hsic.c @@ -328,13 +328,16 @@ static void hsic_read_complete_work_fn(struct work_struct *work) read_complete_work); struct diag_hsic_buf_tbl_t *item; - item = hsic_buf_tbl_pop(ch); - if (item) { - if (diag_remote_dev_read_done(ch->dev_id, item->buf, item->len)) - goto fail; - } + do { + item = hsic_buf_tbl_pop(ch); + if (item) { + if (diag_remote_dev_read_done(ch->dev_id, + item->buf, item->len)) + goto fail; + kfree(item); + } + } while (item); - kfree(item); return; fail: