On Tue, 2007-05-08 at 16:07 +0200, Markus Osterried wrote:
> Hello Phillipe,
> 
> in __t_start() in /ksrc/skins/psos+/syscall.c the pointer to the
> (user-space) tasks argument is directly used for the (kernel-space)
> t_start() call.
> 
> u_long *argp;
> argp = (u_long *)__xn_reg_arg4(regs);
> return t_start((u_long)task, mode, startaddr, argp);
> 
> 
> I think the arguments must be copied to kernel-space, so isn't it better to
> do it this way?
> 
> u_long arg[4];
> if (!__xn_access_ok
>     (curr, VERIFY_READ, __xn_reg_arg4(regs), sizeof(u_long[4])))
>       return -EFAULT;
> __xn_copy_from_user(curr, arg, (void __user *)__xn_reg_arg4(regs),
>                    sizeof(u_long[4]));
> return t_start((u_long)task, mode, startaddr, arg);
> 

Actually, we currently don't need to know anything about the task args
from kernel space, since we only have to relay their address to the task
trampoline code in src/skins/psos/task.c. However, we must not try to
access those args from kernel space. The patch below fixes this bug.
Thanks for pointing this out.

--- ksrc/skins/psos+/task.c     (revision 2395)
+++ ksrc/skins/psos+/task.c     (working copy)
@@ -197,9 +197,6 @@
 
        xnmode = psos_mode_to_xeno(mode);
 
-       for (n = 0; n < 4; n++)
-               task->args[n] = targs ? targs[n] : 0;
-
        task->entry = startaddr;
 
 #if defined(__KERNEL__) && defined(CONFIG_XENO_OPT_PERVASIVE)
@@ -214,10 +211,15 @@
                                   XNPOD_ALL_CPUS, (void (*)(void *))startaddr, 
targs);
        else
 #endif /* __KERNEL__ && CONFIG_XENO_OPT_PERVASIVE */
+       {
+               for (n = 0; n < 4; n++)
+                       task->args[n] = targs ? targs[n] : 0;
+
                xnpod_start_thread(&task->threadbase,
                                   xnmode,
                                   (int)((mode >> 8) & 0x7),
                                   XNPOD_ALL_CPUS, &psostask_trampoline, task);
+       }
 
       unlock_and_exit:
-- 
Philippe.



_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to