[Rtai] rt_returnx and rt_msgq_delete bug
Paolo Mantegazza
mantegazza at aero.polimi.it
Thu Dec 10 14:31:55 CET 2009
Your fixes, modified the way I like them, are in RTAI CVSes now.
paolo
Fernando Augusto wrote:
>>> The second was a
> little tricky to find, but it happens when a call to
>>> rt_returnx is made
> and the task that call rt_rpc_whatever is no longer
>>> waiting (so
> rt_rpc_if, rt_rpc_timed and rt_rpc_until are all error prone).
>
>> Possible indeed, but the fix is simply adding the forgotten
>> CHECK_SENDER_MAGIC, as it is in rt_return already.
>
> The problem that I've had was not due to the CHECK_SENDER_MAGIC,
> although this is a problem too. But when a call like rt_rpcx_timed is made a
> pointer to a local variable (struct mcb_t mcb) is passed to the receiver task,
> this local variable holds data of the message being sent, as bellow
>
>
> ... rt_rpcx_until(....) {
> if (task) {
> struct mcb_t mcb; << local variable declared
> SET_RPC_MCB(); << sets local bariable contents with msg sent data
> return rt_rpc_until(task, (unsigned long)&mcb, &mcb.rbytes, time); << call to rpc send local variable address.
> }
> }
>
> In the call to rt_returnx the address of the local variable is used to holds the
> replyng msg data. As bellow.
>
>
> RT_TASK *rt_returnx(RT_TASK *task, void *msg, int size)
> {
> if (task) {
> struct mcb_t *mcb;
>
> if ((mcb = (struct mcb_t *)task->msg)->rbytes < size) { << task->msg points to local variable alocated in rt_rpcx_whatever.
> size = mcb->rbytes;
> }
> if (size) {
> memcpy(mcb->rbuf, msg, size);
> }
> return rt_return(task, 0);
> }
> }
>
>
> So in the line "if ((mcb = (struct mcb_t *)task->msg)->rbytes < size)" of
> rt_retunx function, "(struct mcb_t *)task->msg" points to the local variable
> alocated in rt_rpcx_until (for example), the problem occurs if the function
> rt_rpcx_until has alredy returned, so the memory of the local variable has
> other contents, which in my case leads to a things like NULL pointer of
> segmetation problems, as the call to memcpy(mcb->rbuf, msg, size) in
> rt_returnx used completely random params.
>
> Well I tried to explain what I've noted that happens, can't say for sure if I was
> clear, I'm terrible with explanations :).
>
> Ahh, was about to forget, but also noted that the call to
> CHECK_SENDER_MAGIC, may fail it's not race condtion safe, as there's a
> test to see if the TASK realy exists, but that TASK can be deleted just after
> the test and just before a call to rt_global_save_flags_and_cli().
>
> Anyway sorry for my bad (maybe awful) english :).
>
> Regards,
> Fernando.
>
> --- Em qua, 9/12/09, Paolo Mantegazza <mantegazza at aero.polimi.it> escreveu:
>
> De: Paolo Mantegazza <mantegazza at aero.polimi.it>
> Assunto: Re: [Rtai] rt_returnx and rt_msgq_delete bug
> Para: "Fernando Augusto" <fernando_aug at yahoo.com.br>
> Cc: rtai at rtai.org
> Data: Quarta-feira, 9 de Dezembro de 2009, 14:26
>
> Fernando Augusto wrote:
>> Hi all,
>>
>> This is my first e-mail to this list, although, I've been using rtai since begning of 2009. Great to see the list fully active, different from some oher lists out there. Anyway, I just happen to run into two bugs.
>> The first is on rt_msgq_delete (rt_tbx_delete), which always return error if you never use rt_tbx_broadcast. A call to a rt_sem_delete (which was never created rt_tbx_broadcast isn't called) make the function fail.
>>
>
> OK, agreed.
>
>> The second was a little tricky to find, but it happens when a call to rt_returnx is made and the task that call rt_rpc_whatever is no longer waiting (so rt_rpc_if, rt_rpc_timed and rt_rpc_until are all error prone).
>
> Possible indeed, but the fix is simply adding the forgotten CHECK_SENDER_MAGIC, as it is in rt_return already.
>
> paolo
>> Anyway I've searched the list and didn't find anything about these bugs, so solved them myself. I'm sending a patch (for rtai 3.7.1) atached that solves both. If there is any interest I can made the patch for head cvs version.
>>
>> Best regards,
>> Fernando Almeida.
>>
>>
>>
>> ____________________________________________________________________________________
>> Veja quais são os assuntos do momento no Yahoo! +Buscados
>> http://br.maisbuscados.yahoo.com
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Rtai mailing list
>> Rtai at rtai.org
>> https://mail.rtai.org/cgi-bin/mailman/listinfo/rtai
>
>
>
>
>
> ____________________________________________________________________________________
> Veja quais são os assuntos do momento no Yahoo! +Buscados
> http://br.maisbuscados.yahoo.com
More information about the Rtai
mailing list