From freebsduser@paradisegreen.co.uk  Mon Dec 15 17:48:08 2003
Return-Path: <freebsduser@paradisegreen.co.uk>
Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id 07E8C16A4CE
	for <FreeBSD-gnats-submit@freebsd.org>; Mon, 15 Dec 2003 17:48:08 -0800 (PST)
Received: from mail.paradise-green.co.uk (161-86-19-212-hpnt-t3-z2.wireless.as15758.net [212.19.86.161])
	by mx1.FreeBSD.org (Postfix) with ESMTP id 85B2943D36
	for <FreeBSD-gnats-submit@freebsd.org>; Mon, 15 Dec 2003 17:48:05 -0800 (PST)
	(envelope-from freebsduser@paradisegreen.co.uk)
Received: from burs-sgs1.paradise (burs-sgs1.paradise [10.0.0.33])
	by mail.paradise-green.co.uk (8.12.9p2/8.12.9) with ESMTP id hBFMkV6G089836
	for <FreeBSD-gnats-submit@freebsd.org>; Mon, 15 Dec 2003 22:46:31 GMT
	(envelope-from tdgsandf@burs-sgs1.paradise)
Received: from burs-sgs1.paradise (localhost.paradise [127.0.0.1])
	by burs-sgs1.paradise (8.12.10/8.12.10) with ESMTP id hBFMiqLr000690
	for <FreeBSD-gnats-submit@freebsd.org>; Mon, 15 Dec 2003 22:44:52 GMT
	(envelope-from tdgsandf@burs-sgs1.paradise)
Received: (from tdgsandf@localhost)
	by burs-sgs1.paradise (8.12.10/8.12.10/Submit) id hBFMilI7000689;
	Mon, 15 Dec 2003 22:44:47 GMT
	(envelope-from tdgsandf)
Message-Id: <200312152244.hBFMilI7000689@burs-sgs1.paradise>
Date: Mon, 15 Dec 2003 22:44:47 GMT
From: Thomas Sandford <freebsduser@paradisegreen.co.uk>
Reply-To: Thomas Sandford <freebsduser@paradisegreen.co.uk>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: uart driver fails report invalid parameters to caller
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         60284
>Category:       kern
>Synopsis:       uart driver fails report invalid parameters to caller
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    marcel
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Dec 15 17:50:14 PST 2003
>Closed-Date:    Fri Feb 13 21:55:45 PST 2004
>Last-Modified:  Fri Feb 13 21:55:45 PST 2004
>Originator:     Thomas Sandford
>Release:        FreeBSD 5.1-CURRENT-20031116-JPSNAP i386
>Organization:
Paradise Green Technical Services
>Environment:
System: FreeBSD burs-sgs1.paradise 5.1-CURRENT-20031116-JPSNAP FreeBSD 5.1-CURRENT-20031116-JPSNAP #1: Mon Dec 15 22:15:29 GMT 2003 root@burs-sgs1.paradise:/usr/src/sys/i386/compile/UART i386


Discovered on an i386 machine with GENERIC + puc + uart devices.

However problem is system independant.
>Description:
	uart_tty_param in /sys/dev/uart/uart_tty.c calls the UART_PARAM method 
        without checking the return value. This means that invalid parameters
        (in particular impossible baud rates for the device in question) never
        get reported back to the caller.
>How-To-Repeat:
	Include the uart driver in your kernel

	stty 12345678 </dev/uart0

        [no error is reported]

>Fix:

Apply the following patch:

Index: uart_tty.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/uart/uart_tty.c,v
retrieving revision 1.4
diff -u -r1.4 uart_tty.c
--- uart_tty.c	28 Sep 2003 18:20:42 -0000	1.4
+++ uart_tty.c	15 Dec 2003 22:42:48 -0000
@@ -225,7 +225,8 @@
 		    : UART_PARITY_EVEN;
 	else
 		parity = UART_PARITY_NONE;
-	UART_PARAM(sc, t->c_ospeed, databits, stopbits, parity);
+	if (UART_PARAM(sc, t->c_ospeed, databits, stopbits, parity) != 0)
+		return EINVAL;
 	UART_SETSIG(sc, UART_SIG_DDTR | UART_SIG_DTR);
 	/* Set input flow control state. */
 	if (!sc->sc_hwiflow) {


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->bde 
Responsible-Changed-By: andre 
Responsible-Changed-When: Sat Dec 27 09:09:07 PST 2003 
Responsible-Changed-Why:  
Send over to bde, he is our serial master. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=60284 
Responsible-Changed-From-To: bde->marcel 
Responsible-Changed-By: bde 
Responsible-Changed-When: Sun Dec 28 20:43:31 PST 2003 
Responsible-Changed-Why:  
I can't touch the uart driver for political reasons. 

I even hit this bug in my subminimal testing of the uart driver, and 
noticed many nearby ones. 

The patch essmes to be correct except for style bugs (missing parentheses 
around return value). 

http://www.freebsd.org/cgi/query-pr.cgi?pr=60284 
State-Changed-From-To: open->closed 
State-Changed-By: marcel 
State-Changed-When: Fri Feb 13 21:55:01 PST 2004 
State-Changed-Why:  
Patch committed; sorry for the delay. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=60284 
>Unformatted:
