2017-09-29 12:03 GMT+00:00 Eduardo Otubo <[email protected]>: > v2: > Removed "err:" label from the end of the function and replaced by > two separate error messages. One when outdev is not specified and > one when outdev does not exist. > > Fixed the error message that was referencing nf->netdev_id and not > s->outdev. > > When using filter-mirror like the example below where the interface > 'ndev0' does not exist on the host, QEMU crashes into segmentation > fault. > > $ qemu-system-x86_64 -S -machine pc -netdev user,id=ndev0 -object > filter-mirror,id=test-object,netdev=ndev0 > > This happens because the function filter_mirror_setup() does not checks > if the device actually exists and still keep on processing calling > qemu_chr_find(). This patch fixes this issue. > > Signed-off-by: Eduardo Otubo <[email protected]> >
Reviewed-by: Zhang Chen <[email protected]> Thanks Zhang Chen > --- > net/filter-mirror.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/net/filter-mirror.c b/net/filter-mirror.c > index 90e2c92337..ce0dc23c2a 100644 > --- a/net/filter-mirror.c > +++ b/net/filter-mirror.c > @@ -213,6 +213,12 @@ static void filter_mirror_setup(NetFilterState *nf, > Error **errp) > MirrorState *s = FILTER_MIRROR(nf); > Chardev *chr; > > + if (s->outdev == NULL) { > + error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND, "filter-mirror > parameter"\ > + " 'outdev' cannot be empty"); > + return; > + } > + > chr = qemu_chr_find(s->outdev); > if (chr == NULL) { > error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND, > -- > 2.13.5 > > >
