summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorJason Wang <jasowang@redhat.com>2016-02-15 12:52:34 +0800
committerJason Wang <jasowang@redhat.com>2016-03-08 15:34:09 +0800
commit5dd2d45e344b50b018912b6d98ab47493f946eb6 (patch)
tree5e12eece82540693128f76977c61dfd3297aed7f /net
parent415ab35a441eca767d033a2702223e785b9d5190 (diff)
downloadqemu-5dd2d45e344b50b018912b6d98ab47493f946eb6.zip
net: filter: correctly remove filter from the list during finalization
Qemu may crash when we want to add two filters on the same netdev but the initialization of second fails (e.g missing parameters): ./qemu-system-x86_64 -netdev user,id=un0 \ -object filter-buffer,id=f0,netdev=un0,interval=10 \ -object filter-buffer,id=f1,netdev=un0 Segmentation fault (core dumped) This is because we don't check whether or not the filter was in the list of netdev. This patch fixes this. Cc: Yang Hongyang <hongyang.yang@easystack.cn> Reviewed-by: Yang Hongyang <hongyang.yang@easystack.cn> Signed-off-by: Jason Wang <jasowang@redhat.com>
Diffstat (limited to 'net')
-rw-r--r--net/filter.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/filter.c b/net/filter.c
index d2a514eb8d..7cdbc6c615 100644
--- a/net/filter.c
+++ b/net/filter.c
@@ -196,7 +196,8 @@ static void netfilter_finalize(Object *obj)
nfc->cleanup(nf);
}
- if (nf->netdev && !QTAILQ_EMPTY(&nf->netdev->filters)) {
+ if (nf->netdev && !QTAILQ_EMPTY(&nf->netdev->filters) &&
+ nf->next.tqe_prev) {
QTAILQ_REMOVE(&nf->netdev->filters, nf, next);
}
g_free(nf->netdev_id);