Mailinglist Archive: opensuse-de (7486 mails)

< Previous Next >
Re: beep-1.2.1: 'ioctl: Operation not permitted'
  • From: Waldemar Brodkorb <waldemar@xxxxxxxxxxx>
  • Date: Sat, 2 Mar 2002 14:42:13 +0100
  • Message-id: <20020302134209.GF832@xxxxxxxxxxx>
Hallo Ekkard,
From the keyboard of Ekkard,

* Waldemar Brodkorb schrieb:

beep-1.2.1 (erhalten von freshmeet.net) ist nicht als
user (non-root) ausführbar:


Could not open /dev/console for writing.
open: Permission denied


Wenn ich dann /dev/console für user freigebe kommt:

ioctl: Operation not permitted

ioctl ist ein Systemaufruf, der nur privilegierten Usern zur
Verfügung steht, weil damit Hardwareparameter verändert werden.

Zeig mal die Ausgabe von strace, da wird mehr hilfreiche Debugging
Info ausgegeben, die Zur Analyse nützlich ist.

.. ah .. ja stimmt, habe daran nicht mehr gedacht:


im Zustand der für user freigegebenen /dev/console:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

gerlach@rex:/usr/local/bin > /usr/local/bin/beep -f 2200 -l 500
ioctl: Operation not permitted
gerlach@rex:/usr/local/bin > strace /usr/local/bin/beep -f 2200 -l 500
execve("/usr/local/bin/beep", ["/usr/local/bin/beep", "-f", "2200", "-l",
"500"], [/* 47 vars */]) = 0
uname({sys="Linux", node="rex", ...}) = 0
brk(0) = 0x804a430
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=40526, ...}) = 0
old_mmap(NULL, 40526, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40017000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@\315\1"..., 1024) =
1024
fstat64(3, {st_mode=S_IFREG|0755, st_size=1343073, ...}) = 0
old_mmap(NULL, 1164516, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40021000
mprotect(0x40134000, 38116, PROT_NONE) = 0
old_mmap(0x40134000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
0x112000) = 0x40134000
old_mmap(0x4013a000, 13540, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4013a000
close(3) = 0
munmap(0x40017000, 40526) = 0
getpid() = 6027
brk(0) = 0x804a430
brk(0x804a460) = 0x804a460
brk(0x804b000) = 0x804b000
rt_sigaction(SIGINT, {0x8048850, [INT], SA_RESTART|0x4000000}, {SIG_DFL}, 8)
= 0
open("/dev/console", O_WRONLY) = 3

Jetzt kann der Device Node /dev/console im WriteModus geöffnet
werden.

ioctl(3, KIOCSOUND, 0x21e) = -1 EPERM (Operation not permitted)

Aber der Systemaufruf zur Veränderung der Eigenschaften schlägt
fehl. (-1)

write(2, "ioctl: Operation not permitted\n", 31ioctl: Operation not permitted
) = 31
nanosleep({0, 500000000}, NULL) = 0
ioctl(3, KIOCSOUND, 0) = -1 EPERM (Operation not permitted)

Dann versucht er es nach einer kurzen Pause noch einmal.

Du mußt dieses Programm mit der effektiven UID 0 ausführen.
Entweder über sudo oder über SUID/SGID Bit.

man 2 ioctl
/usr/src/linux/include/linux/kd.h
#define KIOCSOUND 0x4B2F /* start sound generation (0 for off) */

gruß
Waldemar

--
Are your questions smart enough?
http://www.tuxedo.org/~esr/faqs/smart-questions.html
If not:
perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'

< Previous Next >
References