linux-l: Turtle Beach soundkarte, die zweite ...

Stefan Bund bund at zedat.fu-berlin.de
Mo Jun 8 18:12:10 CEST 1998


Nachdem ich angek"undigt hatte, mich in den Kernelsourcen zu
vergraben, bin ich schon so'n bischen f"undig geworden. Ich habe die
prim"are Fehlerursache gefunden. Jetzt fragt sich nur, woher das
kommt. 

Es l"auft darauf hinaus, das in einem Strukturelement der falsche Wert
steht. Der "andert sich einfach so zwischen zwei interrupts ohne
erkennbare Ursache (Es handelt sich um record_dev in der ad1848_info
Struktur in /usr/src/linux/drivers/sound/ad1848.c). Der Wert wird
au"ser in der Interruptroutine nur in open() (d.h. ad1848_open ())
verwendet, und da wird er korrekt auf 0 gesetzt. An irgendeiner stelle
aber (ich sch"atze mal nach einem ioctl) steht der wert aber auf 65536
(das sagt printk, das register %ebp, in dem der Wert wohl steht hat
allerdings 65537. Hmm. Ein inc() ist eigentlich auch nicht
dazwischen). Da"s f"uhrt bei der Adressberechnung dann zum fault. Ich
habe den output von gcc -S mit dem disassemblierten code der
fehlermeldung verglichen, und da gibt's wohl keinen Zweifel da"s das
genau die richtige Stelle ist.

Jetzt meine eigentliche Frage: Anscheinend wird der Wert von einem
wildgewordenen Pointer oder durch einen Buffer-Overflow
o."a. ver"andert. Wie finde ich nun so einen bl"oden Fehler ???? Ich
habe im Moment keine Ahnung, wie ich da ran gehen soll.

Hat einer von euch Kernel-Hackern da 'nen tip??

Vielen Dank schon mal f"ur eure Gedult, euch so 'nen langen sermos
anzutun ...

Stefan.

-- 
                                    @ @
 -------------------------------oOO-(_)-OOo---------------------------
 Stefan Bund, student of physics at Freie Universitaet Berlin, Germany

 email: bund at zedat.fu-berlin.de        ( or bund at physik.fu-berlin.de )
        bund at berlin.cid-net.de
 ---------------------------------------------------------------------
 




Mehr Informationen über die Mailingliste linux-l