summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorJason Wang <jasowang@redhat.com>2016-02-15 12:52:34 +0800
committerTimothy Pearson <tpearson@raptorengineering.com>2019-11-29 19:49:13 -0600
commit28a5f33f558cfdcc8221f34357b55fea49d11fdd (patch)
tree4efcac0bf95adacc88b6d89ef3d7bfecb15678e8 /net
parent59e9bf3de350fc9a638c238adf20395df2845701 (diff)
downloadhqemu-28a5f33f558cfdcc8221f34357b55fea49d11fdd.zip
hqemu-28a5f33f558cfdcc8221f34357b55fea49d11fdd.tar.gz
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 d2a514e..7cdbc6c 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);
OpenPOWER on IntegriCloud