[mythtv] lirc_client.c sending empty CODE cmd to LIRC -> segfault
Michael T. Dean
mtdean at thirdcontact.com
Sat Feb 13 18:09:51 UTC 2010
On 02/09/2010 10:39 PM, Michael T. Dean wrote:
> On 02/09/2010 05:42 PM, David Kubicek wrote:
> > On 02/09/2010 10:09 PM, Michael T. Dean wrote:
> >> On 02/09/2010 03:42 PM, David Kubicek wrote:
> >>> I was just playing with the optional lircrcd LIRC daemon and
> >>> it kept segfaulting on me. I found the bug in the daemon
> >>> (latest CVS version), but the reason for this is MythTV sending
> >>> an empty CODE command. Until the bug is fixed in either of
> >>> these two applications, it'll break advanced LIRC
> >>> configurations...
> >>>
> >>> I haven't looked into MythTV, so I have no patch for you, but
> >>> I'll be sending a patch to LIRC people. If you actually want
> >>> the patch and it would be integrated soon (e.i. not in 6
> >>> months:)) Well, the command packet is actually from lircd, but
> >>> it really originates in MythTV.
> >>>
> >>> LOG:
> >>>
> >>> lircrcd[3673]: received command: "CODE 01007f0000000000 1e Down
> >>> imon_ultrabay_pad"
> >>>
> >> Are you sure it's not: http://svn.mythtv.org/trac/ticket/7653 ?
> >> Can you test that patch and provide feedback on it?
> >>
> >> Also, can you get a fix into lircrcd to accept line feeds
> >> properly (you mentioned you're already planning to send a patch
> >> to the LIRC devs for something else)?
> >>
> > That's right, the patch is finished and I'm going to notify LIRC
> > people tomorrow. I know about #7653 (found it via google), first I
> > made the change (added '\n'), but problem persisted.
> >
> > LIRC CVS checkout and gdb revealed a NULL dereference bug. The
> > CODE handler didn't have a NULL check after strtok() (message 'CODE
> > ' triggers it). The remaining command handlers are OK. So yes,
> > this is new and in both applications. In MythTV I can trigger 'CODE
> > ' easily by push-repeat of directional movement, like scrolling
> > down the list. Fast repeat rate possibly required. Sometimes it
> > happens instantly, sometimes I have to jiggle a few other buttons
> > around and keep scrolling up and down for a while.
> >
> > As for #7652, not including '\n' after CODE cmd is a protocol
> > violation to which lircrcd apparently react by exit. Either they
> > consider "lost sync" critical or it's just not handled very
> > gracefully. So there is no segfault in that case, just controlled
> > shutdown. It's still present in CVS and #7652 really should be
> > fixed. After all, it's just adding a '\n' at the end of one string
> > in libmythui/lirc_client.c...
>
> Ah, I see... I misread #7652--thought it was saying there was a
> DOS/*nix linefeed difference and it didn't like it, so I thought
> maybe you could fix it to accept either. But, since we're sending
> neither, that's not the issue. :)
>
> Thanks for the info. Maybe I can look at getting #7652 in tomorrow.
So the only place we're dealing with LIRC's CODE is in
libs/libmythui/lirc_client.{h,c} , which comes from LIRC's
tools/lirc_client.{h,c}. I can see that LIRC's "official" lirc_client.c
doesn't yet include a line feed character at the end of the CODE line
(see
http://lirc.cvs.sourceforge.net/viewvc/lirc/lirc/tools/lirc_client.c?revision=5.29.2.1&view=markup
on line 1672 ).
It seems Daniel K modified our version of lirc_client.{h,c} for thread
safety before importing it so it has quite a few differences to the
upstream version, but I'd still like to see the linefeed fix sent
upstream. Also, is your patch for LIRC for the tools/lirc_client.{h,c}
code? If so, once it's in the upstream copy, we could easily pull an
update from them.
Attached is a (completely untested) patch that upgrades our version of
lirc_client to be in line with the version in LIRC 0.8.6 (and a patch
showing the differences in LIRC's unmodified lirc_client tool). Feel
free to test out the patch, but it likely won't help with the issue
you're seeing. I probably won't look at updating lirc_client until
after 0.23 is released so the changes can get some testing before being
backported to stable. If you can push some changes (including the line
feed change) into the upstream copy, it will make it easier to get those
changes into our copy. :)
Thanks,
Mike
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: mythtv-upgrade_lirc_client_to_0_8_6.patch
URL: <http://mythtv.org/pipermail/mythtv-dev/attachments/20100213/8e30a558/attachment.txt>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: lirc_client-upgrade_from_0_8_4a_to_0_8_6.patch
URL: <http://mythtv.org/pipermail/mythtv-dev/attachments/20100213/8e30a558/attachment.asc>
More information about the mythtv-dev
mailing list