Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 1 Sep 1998 20:01:58 +0200
From:      axl@iafrica.com
To:        FreeBSD-gnats-submit@FreeBSD.ORG
Subject:   bin/7799: kbdcontrol uses uninitialized variable
Message-ID:  <E0zDukg-0004Fm-00@axl.training.iafrica.com>

next in thread | raw e-mail | index | archive | help

>Number:         7799
>Category:       bin
>Synopsis:       kbdcontrol uses uninitialized variable
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:
>Keywords:
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Sep  1 11:10:00 PDT 1998
>Last-Modified:
>Originator:     Sheldon Hearn
>Organization:
UUNET Internet Africa
>Release:        FreeBSD 2.2.7-STABLE i386
>Environment:

	FreeBSD 2.2.7-STABLE as of 28 August 1998

>Description:

	When kbdcontrol is used to set keyrates, it passes an
	unititialized variable as an argument to ioctl(). Mostly,
	this is no problem, but under certain conditions that are
	difficult to describe accurately, this will cause the call
	to ioctl() to return EINVAL.

>How-To-Repeat:

	Because of the nature of the fault, I can't think of a way
	to reproduce  this outside of my own environment. However,
	I've attached gdb output from an environment in which the
	error does not occur, followed by gdb output from an
	environment conducive to reproducing this error.

-------- NO PROBLEM:
Script started on Tue Sep  1 19:02:32 1998
GDB is free software and you are welcome to distribute copies of it
 under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.16 (i386-unknown-freebsd), 
Copyright 1996 Free Software Foundation, Inc...
(gdb) set args -r fast </dev/ttyv1
(gdb) break set_keyrates
Breakpoint 1 at 0x3d1c: file kbdcontrol.c, line 814.
(gdb) run
Starting program: /usr/home/sheldonh/bin/kbdcontrol -r fast </dev/ttyv1

Breakpoint 1, set_keyrates (opt=0xefbfddc1 "fast") at kbdcontrol.c:814
814		if (!strcmp(opt, "slow"))
(gdb) next
816		else if (!strcmp(opt, "normal"))
(gdb) next
818		else if (!strcmp(opt, "fast"))
(gdb) next
819			rate.del = rate.rep = 0;
(gdb) next
845		if (ioctl(0, KDSETRAD, rate) < 0)
(gdb) print rate
$1 = {rep = 0, del = 0, pad = 0}
(gdb) next
847	}
(gdb) quit
The program is running.  Quit anyway (and kill it)? (y or n) y

Script done on Tue Sep  1 19:03:21 1998

-------- PROBLEM:
Script started on Tue Sep  1 18:59:38 1998
GDB is free software and you are welcome to distribute copies of it
 under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.16 (i386-unknown-freebsd), 
Copyright 1996 Free Software Foundation, Inc...
(gdb) set args -r fast </dev/ttyv1
(gdb) break set_keyrates
Breakpoint 1 at 0x3d1c: file kbdcontrol.c, line 814.
(gdb) run
Starting program: /usr/home/sheldonh/bin/kbdcontrol -r fast </dev/ttyv1

Breakpoint 1, set_keyrates (opt=0xefbfdd35 "fast") at kbdcontrol.c:814
814		if (!strcmp(opt, "slow"))
(gdb) next
816		else if (!strcmp(opt, "normal"))
(gdb) next
818		else if (!strcmp(opt, "fast"))
(gdb) next
819			rate.del = rate.rep = 0;
(gdb) next
845		if (ioctl(0, KDSETRAD, rate) < 0)
(gdb) print rate
$1 = {rep = 0, del = 0, pad = -1}
(gdb) next
846			warn("setting keyboard rate");
(gdb) next
kbdcontrol: setting keyboard rate: Invalid argument
847	}
(gdb) quit
The program is running.  Quit anyway (and kill it)? (y or n) y

Script done on Tue Sep  1 19:01:00 1998

>Fix:
	
	The following patch ensures that variable passed as an
	argument to ioctl() is always initialized.

--- src/usr.sbin/kbdcontrol/kbdcontrol.c.orig	Fri Aug 28 16:54:53 1998
+++ src/usr.sbin/kbdcontrol/kbdcontrol.c	Tue Sep  1 19:09:30 1998
@@ -842,6 +842,7 @@
 		rate.rep = n;
 	}
 
+	rate.pad = 0;
 	if (ioctl(0, KDSETRAD, rate) < 0)
 		warn("setting keyboard rate");
 }
>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E0zDukg-0004Fm-00>