summary refs log tree commit diff stats
path: root/gitlab/issues_text/target_missing/host_missing/accel_missing/2466
blob: 75884d1d259ac5a7b9e8e229dfeed5502ff8dc2a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
I'm not sure. But I Think I could cause the err(include/qemu/queue.h).
Description of problem:
At file "include/qemu/queue.h", Maybe I Think QTAILQ_REMOVE could cause a Error.

```
#define QTAILQ_REMOVE(head, elm, field) do {                            \
       if (((elm)->field.tqe_next) != NULL)                            \
           (elm)->field.tqe_next->field.tqe_circ.tql_prev =            \
               (elm)->field.tqe_circ.tql_prev;                         \
       else                                                            \
           (head)->tqh_circ.tql_prev = (elm)->field.tqe_circ.tql_prev; \
       (elm)->field.tqe_circ.tql_prev->tql_next = (elm)->field.tqe_next; \
       (elm)->field.tqe_circ.tql_prev = NULL;                          \
       (elm)->field.tqe_circ.tql_next = NULL;                          \
       (elm)->field.tqe_next = NULL;                                   \
} while (/*CONSTCOND*/0)
```
If the length of the que is one, line 7 cause a segmentation fault.
Steps to reproduce:
1. Create a Que with QTAILQ_INIT
2. Add one element to que.
3. Remove the element with QTAILQ_REMOVE
Additional information:
queue.h file is located at "inclue/qemu/queue.h"