[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
[rtl] Bug report for RT-Linux (Release9J)
Hello.
I'm using RT-Linux Release9J.
And, I found some bugs(?) in this distribution.
At first:
In x86_init_stack in schedulers/x86/switch.h, (taks->stack) must be assigned
more than sizeof(int)*4 bytes memory.
But in rt_task_init in schedulers/rtl_sched.c, there is no guarantee that
(task->stack) has more than sizeof(int)*4 bytes.
I think it is better to add this code.
--- in rt_task_init
int *st;
long interrupt_state;
if( (task->magic == RT_TASK_MAGIC) || (stack_size <= 0) ){
^^^^^^^^^^^^^^^^^^^^
return -EINVAL;
}
stack_size += sizeof(int)*4; /* for x86_init_stack */
^^^^^^^^^^^^^^^^^^^^^^^^^^^
st = (int*)kmalloc(stack_size, GFP_KERNEL);
... omit :-)
Ordinaly old code will run successfully, but if (stack_size) is smaller than
sizeof(int)*4 then it makes a (segmentation fault) error.
Second:
In rtf_put in fifos/rtl_fifo.c & rtl_nfifo.c, (count) value is not returned
correctly. Because at the end of those functions,
--> return count;
^^^^^
But, (count) is zero if this process is done successfully.
Because there is such a code in rtf_put.
count -= chars;
^^^^^^^^^^^^^^
I think this code is more suitable here ....
--> return written;
^^^^^^^
Third:
In rt_task_ipc_delete in semaphores/rt_ipc.c
-- rt_taks_ipc_delete
int ret = 0;
if( task->magic != RT_TASK_IPC_MAGIC )
ret = EINVAL;
^^^^^^
... omit :-)
I feel that (ret = EINVAL) is (ret = -EINVAL).
^^^^^^^
Fourth:
In rt_task_delay in semaphores/rt_ipc.h, (rt_schedule) is called but now it is
(rtl_schedule).
That's all.
good-bye.
//----------------------------------------
// Saida Takao (Kyoto Univ. in Japan)
// e-mail: saida24@mech.kyoto-u.ac.jp
//----------------------------------------
--- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail majordomo@rtlinux.cs.nmt.edu OR
echo "unsubscribe rtl <Your_email>" | mail majordomo@rtlinux.cs.nmt.edu
----
For more information on Real-Time Linux see:
http://www.rtlinux.org/~rtlinux/