From owner-freebsd-bugs Sat Mar 20 22:30:42 1999 Delivered-To: freebsd-bugs@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.ORG [204.216.27.21]) by hub.freebsd.org (Postfix) with ESMTP id 779FF15227 for ; Sat, 20 Mar 1999 22:30:37 -0800 (PST) (envelope-from gnats@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.9.2/8.9.2) id WAA09900; Sat, 20 Mar 1999 22:30:19 -0800 (PST) (envelope-from gnats@FreeBSD.org) Date: Sat, 20 Mar 1999 22:30:19 -0800 (PST) Message-Id: <199903210630.WAA09900@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org Cc: From: User Tolik Subject: kern/10671: setlogin(2) is not correct ? Reply-To: User Tolik Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org The following reply was made to PR kern/10671; it has been noted by GNATS. From: User Tolik To: FreeBSD-gnats-submit@freebsd.org Cc: Subject: kern/10671: setlogin(2) is not correct ? Date: Fri, 19 Mar 1999 16:54:56 +0700 (TSK) >Number: 10671 >Category: kern >Synopsis: setlogin(2) return EINVAL for length of name greather than MAXLOGNAME - 2 >Confidential: yes >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Mar 19 02:00:00 PST 1999 >Closed-Date: >Last-Modified: >Originator: Anatoly A. Orehovsky >Release: FreeBSD 2.2.8-RELEASE i386 >Organization: >Environment: >Description: Calling setlogin(2) return EINVAL for length of name param greather than MAXLOGNAME - 2 /sys/kern/kern_prot.c: int setlogin(p, uap, retval) struct proc *p; struct setlogin_args *uap; int *retval; { int error; if ((error = suser(p->p_ucred, &p->p_acflag))) return (error); error = copyinstr((caddr_t) uap->namebuf, (caddr_t) p->p_pgrp->pg_session->s_login, sizeof (p->p_pgrp->pg_session->s_login) - 1, (u_int *)0); if (error == ENAMETOOLONG) error = EINVAL; return (error); } Here is : calling copyinstr with maxlen = MAXLOGNAME - 1. Such setlogin(2) returned EINVAL for maxlen > MAXLOGNAME - 2. Manpage of setlogin(2) talk nothing about it. Is this correct ? >How-To-Repeat: a.c: #include #include #include main(){ char name[MAXLOGNAME] = "0123456789a"; /* 11 chars without '\0' < MAXLOGNAME - 1*/ if (setlogin(name)) { perror("setlogin"); exit(1); } exit(0); } # cc a.c # ./a.out; echo "Exitcode $?" setlogin: Invalid argument Exitcode 1 >Fix: Either correct manpage of setlogin(2), or correct kern_prot.c. >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message