From owner-p4-projects@FreeBSD.ORG Sat Nov 25 15:10:09 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 94AEA16A415; Sat, 25 Nov 2006 15:10:09 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 3EC6C16A412 for ; Sat, 25 Nov 2006 15:10:09 +0000 (UTC) (envelope-from netchild@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.FreeBSD.org (Postfix) with ESMTP id DB09843D5A for ; Sat, 25 Nov 2006 15:09:20 +0000 (GMT) (envelope-from netchild@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id kAPFA8Rv095003 for ; Sat, 25 Nov 2006 15:10:08 GMT (envelope-from netchild@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id kAPFA8do095000 for perforce@freebsd.org; Sat, 25 Nov 2006 15:10:08 GMT (envelope-from netchild@freebsd.org) Date: Sat, 25 Nov 2006 15:10:08 GMT Message-Id: <200611251510.kAPFA8do095000@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to netchild@freebsd.org using -f From: Alexander Leidinger To: Perforce Change Reviews Cc: Subject: PERFORCE change 110519 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Nov 2006 15:10:09 -0000 http://perforce.freebsd.org/chv.cgi?CH=110519 Change 110519 by netchild@netchild_magellan on 2006/11/25 15:10:05 - add some explaining comments - use sizeof(var) instead of sizeof(NAMEDVALUE) [1] - truncate the string in the ENAMETOOLONG case (like linux does) Suggested by: rwatson [1] Affected files ... .. //depot/projects/linuxolator/src/sys/compat/linux/linux_misc.c#38 edit Differences ... ==== //depot/projects/linuxolator/src/sys/compat/linux/linux_misc.c#38 (text+ko) ==== @@ -1644,22 +1644,32 @@ EMUL_UNLOCK(&emul_lock); break; case LINUX_PR_SET_NAME: - max_size = (LINUX_MAX_COMM_LEN <= MAXCOMLEN + 1) ? - LINUX_MAX_COMM_LEN : (MAXCOMLEN + 1); + /* + * To be on the safe side we need to make sure to not + * overflow the size a linux program expects. We already + * do this here in the copyin, so that we don't need to + * check on copyout. + */ + max_size = (sizeof(comm) <= sizeof(p->p_comm)) ? + sizeof(comm) : sizeof(p->p_comm); error = copyinstr((void *)(register_t) args->arg2, comm, - max_size, NULL); - if (error) + max_size, NULL); + + /* Linux silently truncates the name if it is too long. */ + if (error && error != ENAMETOOLONG) return (error); + comm[sizeof(comm) - 1] = '\0'; /* terminate if truncated */ + PROC_LOCK(p); - strlcpy(p->p_comm, comm, MAXCOMLEN + 1); + strlcpy(p->p_comm, comm, sizeof(p->p_comm)); PROC_UNLOCK(p); break; case LINUX_PR_GET_NAME: PROC_LOCK(p); - strlcpy(comm, p->p_comm, LINUX_MAX_COMM_LEN); + strlcpy(comm, p->p_comm, sizeof(comm)); PROC_UNLOCK(p); error = copyout(comm, (void *)(register_t) args->arg2, - strlen(comm)+1); + strlen(comm)+1); break; default: error = EINVAL;