[ovs-dev] [PATCH] pinctrl: Fix crash on buffered packets hmap double remove.
Ben Pfaff
blp at ovn.org
Mon Nov 12 16:28:22 UTC 2018
On Mon, Nov 12, 2018 at 04:04:20PM +0100, Lorenzo Bianconi wrote:
> > 'destroy_buffered_packets()' removes the hmap node which was
> > already removed by 'HMAP_FOR_EACH_POP()' producing following
> > crash log:
> >
> > Invalid read of size 8
> > at 0x134EDB: hmap_remove (hmap.h:287)
> > by 0x134EDB: destroy_buffered_packets (pinctrl.c:237)
> > by 0x13AB3B: destroy_buffered_packets_map (pinctrl.c:246)
> > by 0x13AB3B: pinctrl_destroy (pinctrl.c:1804)
> > by 0x12C0CF: main (ovn-controller.c:916)
> > Address 0x8 is not stack'd, malloc'd or (recently) free'd
> >
> > Could be captured by check-valgrind on the following test:
> > '2720. ovn -- IP packet buffering'
> >
> > CC: Lorenzo Bianconi <lorenzo.bianconi at redhat.com>
> > Fixes: d7abfe39cfd2 ("OVN: add buffering support for ip packets")
> > Signed-off-by: Ilya Maximets <i.maximets at samsung.com>
> > ---
> > ovn/controller/pinctrl.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/ovn/controller/pinctrl.c b/ovn/controller/pinctrl.c
> > index e3ee516e4..21454ab47 100644
> > --- a/ovn/controller/pinctrl.c
> > +++ b/ovn/controller/pinctrl.c
> > @@ -241,8 +241,8 @@ destroy_buffered_packets(struct buffered_packets *bp)
> > static void
> > destroy_buffered_packets_map(void)
> > {
> > - struct buffered_packets *bp;
> > - HMAP_FOR_EACH_POP (bp, hmap_node, &buffered_packets_map) {
> > + struct buffered_packets *bp, *next;
> > + HMAP_FOR_EACH_SAFE (bp, next, hmap_node, &buffered_packets_map) {
> > destroy_buffered_packets(bp);
> > }
> > hmap_destroy(&buffered_packets_map);
> > --
> > 2.17.1
> >
>
> Acked-by: Lorenzo Bianconi <lorenzo.bianconi at redhat.com>
Thanks Ilya and Lorenzo, I applied this to master.
More information about the dev
mailing list