[pulseaudio-discuss] [PATCH] echo-cancel: Avoid segfaults due to invalid master sink or source

Tanu Kaskinen tanuk at iki.fi
Wed May 3 19:58:44 UTC 2017


On Tue, 2017-05-02 at 07:12 +0200, Georg Chini wrote:
> On 01.05.2017 22:10, Tanu Kaskinen wrote:
> > On Mon, 2017-04-24 at 19:33 +0200, Georg Chini wrote:
> > > There are several places in module-echo-cancel where a segfault is
> > > possible when the master sink or source is invalid.
> > 
> > I don't think the rewind, volume and mute callbacks are ever called
> > during stream moves, at least with the current code base. However,
> > adding the extra checks does no harm either, so I don't mind, but I
> > think the commit message should be clarified on this point.
> 
> I do not mention a move at all in the commit message, I just
> say there are several places where a segfault is possible.

The patch adds sink_input->sink and source_output->source checks, and
checking those pointers is only relevant during stream moves (or during
stream initialization before the routing has been decided, but the
callbacks aren't used that early). At all other times the sink and
source pointers are non-NULL.

> I think the rewind callback is called during a move, the
> PA_SINK_MESSAGE_START_MOVE calls request_rewind().

That happens before detaching the sink input, so the sink pointer is
not NULL.

> Also the other checks are not pointless. In a situation where
> a virtual sink is the only remaining sink, you can still try to
> mute it or change the volume which will then crash PA.

A virtual sink can't exist without a master sink. The only time when a
virtual sink is not connected to a master sink is when the virtual sink
is being moved to a different master, and client commands (such as
volume and mute change commands) are not processed during moves.

-- 
Tanu

https://www.patreon.com/tanuk


More information about the pulseaudio-discuss mailing list