Hi Greg,

>
> Where do you see a problem in this?
>

I found that 2 tasks can race calling up_schedule_sigaction to set the
sigdeliver in TCB.
In up_schedule_sigaction , a critical section should prevent this from
happening.
However, If the calling task suspends voluntary, e.g. by calling
syslog, another task can enter the critical section and race with the
other task.
The first task moves the RIP in register profile to the TCB and set
the RIP in register profile as sigdeliver.
The second task moves the RIP in register profile (which is sigdeliver
now) to the TCB and set the RIP in register profile as again
sigdeliver.
The original RIP saved in TCB is overwritten and destroyed.

Currently, by removing any possibility voluntary schedule point in the
critical section, this problem no longer exists.

-- 
Yang Chung Fan (楊宗凡) (ヤン ゾン ファン)
Member of Softlab, Tsukuba University , Japan
Email: sonic.tw...@gmail.com

Reply via email to