Does copyinstr guarantee that it has filled the output buffer when it returns ENAMETOOLONG? I usually try to answer my own questions, but I don't speak many dialects of assembly. :) I ask because I'd like to make the following change, and I'd like to know whether I should zero the buffer before calling copyinstr to ensure that I don't set the thread's name to the garbage that was on the stack. Eric Index: kern_thr.c =================================================================== --- kern_thr.c (revision 308217) +++ kern_thr.c (working copy) _at__at_ -580,8 +580,13 _at__at_ sys_thr_set_name(struct thread *td, struct thr_set if (uap->name != NULL) { error = copyinstr(uap->name, name, sizeof(name), NULL); - if (error) - return (error); + if (error) { + if (error == ENAMETOOLONG) { + name[sizeof(name) - 1] = '\0'; + } else { + return (error); + } + } } p = td->td_proc; ttd = tdfind((lwpid_t)uap->id, p->p_pid);Received on Wed Nov 02 2016 - 18:24:47 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:08 UTC