Date: Wed, 2 Nov 2016 14:24:43 -0500 From: Eric van Gyzen <vangyzen@FreeBSD.org> To: "current@freebsd.org" <current@freebsd.org> Subject: copyinstr and ENAMETOOLONG Message-ID: <236b8c7c-a12e-0872-f3cb-03f99bb5fcc5@FreeBSD.org>
next in thread | raw e-mail | index | archive | help
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) @@ -580,8 +580,13 @@ 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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?236b8c7c-a12e-0872-f3cb-03f99bb5fcc5>