Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!munnari.OZ.AU!uunet!in3.uu.net!144.212.100.12!news.mathworks.com!fu-berlin.de!irz401!orion.sax.de!uriah.heep!news
From: j@uriah.heep.sax.de (J Wunsch)
Newsgroups: comp.unix.bsd.freebsd.misc
Subject: Re: Accessing i/o-ports from user-code ?
Date: 30 Dec 1996 22:12:38 GMT
Organization: Private BSD site, Dresden
Lines: 31
Message-ID: <5a9eom$huj@uriah.heep.sax.de>
References: <87g20rbmk6.fsf@acme1.ruhr.de>
Reply-To: joerg_wunsch@uriah.heep.sax.de (Joerg Wunsch)
NNTP-Posting-Host: localhost.heep.sax.de
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
X-Newsreader: knews 0.9.6
X-Phone: +49-351-2012 669
X-PGP-Fingerprint: DC 47 E6 E4 FF A6 E9 8F 93 21 E0 7D F9 12 D6 4E
Xref: euryale.cc.adfa.oz.au comp.unix.bsd.freebsd.misc:33325
Christoph Haas <chris@acme1.ruhr.de> wrote:
> I need to access i/o-ports from within my application. I wanted to use
> inb() and outb() to send bytes to a certain port that is used by an
> isa card, but I got a bus error. Do I need special permissions to
> access the ports...
Yes. You need to keep a filedescriptor open on /dev/io for this. If
you're going to make your binary setuid root for this purpose, be
careful to drop permissions as soon as possible. The safest way is
probably to:
int
main(void)
{
int dummyfd;
if ((dummyfd = open("/dev/io", O_RDWR)) == -1)
err(EX_NOPERM, "Can't get IO privs.");
(void)setuid(getuid());
...
--
cheers, J"org
joerg_wunsch@uriah.heep.sax.de -- http://www.sax.de/~joerg/ -- NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)