From patchwork Sun Oct 14 13:08:48 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [2/2] qemu queue: fix uninitialized removals Date: Sun, 14 Oct 2012 03:08:48 -0000 From: Tim Hardeck X-Patchwork-Id: 191348 Message-Id: <1350220128-10140-3-git-send-email-thardeck@suse.de> To: qemu-devel@nongnu.org Cc: Tim Hardeck When calling QTAILQ_REMOVE or QLIST_REMOVE on an unitialized list QEMU segfaults. Check for this case specifically on item removal. Signed-off-by: Tim Hardeck --- qemu-queue.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/qemu-queue.h b/qemu-queue.h index 9288cd8..47ed239 100644 --- a/qemu-queue.h +++ b/qemu-queue.h @@ -141,7 +141,9 @@ struct { \ if ((elm)->field.le_next != NULL) \ (elm)->field.le_next->field.le_prev = \ (elm)->field.le_prev; \ - *(elm)->field.le_prev = (elm)->field.le_next; \ + if ((elm)->field.le_prev != NULL) { \ + *(elm)->field.le_prev = (elm)->field.le_next; \ + } \ } while (/*CONSTCOND*/0) #define QLIST_FOREACH(var, head, field) \ @@ -381,7 +383,9 @@ struct { \ (elm)->field.tqe_prev; \ else \ (head)->tqh_last = (elm)->field.tqe_prev; \ - *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ + if ((elm)->field.tqe_prev != NULL) { \ + *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ + } \ } while (/*CONSTCOND*/0) #define QTAILQ_FOREACH(var, head, field) \