[En-Nut-Discussion] NutThreadCreate - td_name safeguarding ?
    Dave Smart 
    Dave at Smart-Family.net
       
    Thu Dec 11 13:49:32 CET 2003
    
    
  
NutOS 3.3.2.1:
I momentarily forgot the rules, and found a small problem.
I was calling NutThreadCreate with a rather long thread names as you see
here -
    NutThreadCreate("SoundThread", SoundThread, arg, 768);
    NutThreadCreate("PowerThread", PowerThread, arg, 768);
and when running a modification of the web server, I was getting string
runaway -
    37FC PowerThrGÍ7@ü4C?â ï¾Þ ï¾Þï¾Þï¾Þï¾Þd- 64 SLP 0CE2 3F43 37CD 721
OK
    34DF SoundThrû°4@ß1W?Ö ï¾Þ ï¾Þï¾Þï¾Þï¾Þ]UwòÎ̹¾=z¸tÓÔñÿVËÚ·[ÀÜ){ç9
9n«zÛ÷]þ[²ú¹ßm»¯W?oóÁWwø±Þ~â©Fr 64 SLP 0CD6 3F57 34B0 721 OK
sys/thread.h defines the size of td_name
    u_char  td_name[9];
Then in the NutThreadCreate function, it is safely copying based on the
sizeof the td_name
    ...
    memcpy(td->td_name, name, sizeof(td->td_name) - 1);
but only if I have /correctly/ defined a short name. May I suggest an
additional statement in NutThreadCreate -
    memcpy(td->td_name, name, sizeof(td->td_name) - 1);
    td->td_name[8] = '\0';	/* safeguard the name from runaway */
which I applied to my source and it does what you would expect -
    37F2 PowerThr 64 SLP 0CD8 3C1C 37C3 721 OK
    34D5 SoundThr 64 RDY 0A79 0000 34A6 721 OK
regards,
Dave Smart
    
    
More information about the En-Nut-Discussion
mailing list