Tim van der Molen (2015-11-22 21:06 +0100):
> David CARLIER (2015-11-21 18:24 +0100):
> > As a first message, I wanted to send a little patch which is all about 
> > use-after-free if fine with you first in mta???s part when a route might be 
> > totally discarded when disabled, the other changes are queue/tree element 
> > removals rearrangements.
>
> [...]
> 
> That won't work I'm afraid. I think the following diff does, but I'll
> have to defer this to the OpenSMTPD developers.
> 
> Index: mta.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/smtpd/mta.c,v
> retrieving revision 1.192
> diff -p -u -r1.192 mta.c
> --- mta.c     14 Oct 2015 22:01:43 -0000      1.192
> +++ mta.c     22 Nov 2015 19:48:24 -0000
> @@ -1246,13 +1246,13 @@ mta_route_disable(struct mta_route *rout
>       log_info("smtp-out: Disabling route %s for %llus",
>           mta_route_to_text(route), delay);
>  
> -     if (route->flags & ROUTE_DISABLED) {
> +     if (!(route->flags & ROUTE_DISABLED))
> +             mta_route_ref(route);
> +     else
>               runq_cancel(runq_route, NULL, route);
> -             mta_route_unref(route); /* from last call to here */
> -     }
> +
>       route->flags |= reason & ROUTE_DISABLED;
>       runq_schedule(runq_route, time(NULL) + delay, NULL, route);
> -     mta_route_ref(route);
>  }

I just committed (a slightly different version of) this diff.

However, eric@ has confirmed there is *no* use after free here, because
the route is referenced at least twice in this case.

-- 
You received this mail because you are subscribed to [email protected]
To unsubscribe, send a mail to: [email protected]

Reply via email to