[so] Incorrect number of faults (test 7, inputs/inv_perm)

Paul-Stelian Olaru olarupaulstelian97 at gmail.com
Tue Apr 16 18:22:11 EEST 2019


Revin. Problema nici măcar nu era din codul meu. Când rulez sub o mașină virtuală pe bune de Linux, am 90/95 (nu am checkpatch). Pe ce rulez eu de obicei, Linuxul din Windows 10, eu folosesc qemu-i386-static pentru a rula executabilele Linux pe 32 de biți. Acest qemu-i386-static emulează toate apelurile de sistem, dar se pare că mincore nu este implementat (returnează -ENOSYS). Eu am folosit mincore pentru a verifica dacă o pagină a fost deja mapată sau nu; dacă mincore returnează succes sau o eroare diferită de ENOMEM înseamnă că ori pagina e mapată (a returna succes), ori s-a întâmplat o eroare (errno != ENOMEM). Eu am declanșat astfel crash direct când mincore mi-a returnat ENOSYS.

Cine folosește Linuxul din Windows 10 să fie atent la chestia asta. Pentru executabilele Linux pe 32 de biți... Folosiți o mașină virtuală. Simple as that.

Sent from Mail for Windows 10

From: Paul-Stelian Olaru
Sent: Tuesday, April 16, 2019 6:02 PM
To: Adrian Șendroiu; Sisteme de Operare
Subject: RE: [so] Incorrect number of faults (test 7, inputs/inv_perm)

rt_sigaction(SIGSEGV, SIG_DFL...)
rt_sigaction(SIGSEGV, 0xf7f758ed, ...)
openat(„./_test/inputs/inv_perm”)
read (header)... și close
openat iar (tura asta al meu)
--Primul SIGSEGV la 0x804801c
-> mincore (-1 ENOMEM – am continuat și am mapat – cu el verific dacă nu cumva e deja ceva la adresa aia)
-> mprotect (READ, WRITE) – hack pentru secțiunile mai mici decât pagina – pun eu zerouri
-> mprotect(READ, EXECUTE) – permisiunile originale din secțiune
rt_sigreturn (mă rog)
--SIGSEGV la 0x80480c0
-> Aparent lipsește al doilea apel la mincore, aproape de crash-ul dorit?
-> rt_sigaction(SIGSEGV, SIG_DFL) (metoda mea de a crasha programul cu exact faultul respectiv)
-> Final SIGSEGV that actually crashes

https://pastebin.com/CcbJ4WXZ (strace, complet). Există vreun mod de a cauza direct fault din prima (gen nu mai mapez dacă încerc să scriu pe o zonă care nu am voie, deși face parte din unul din segmente?)

Sent from Mail for Windows 10

From: Adrian Șendroiu
Sent: Tuesday, April 16, 2019 5:35 PM
To: Paul-Stelian Olaru; Sisteme de Operare
Subject: Re: [so] Incorrect number of faults (test 7, inputs/inv_perm)

Ce zice strace ./_test/run_test ./_test/inputs/inv_perm?

On Tue, 16 Apr 2019 at 17:07, Paul-Stelian Olaru via so
<so at cursuri.cs.pub.ro> wrote:
>
> Pentru a rezolva faulturi verific dacă a fost deja mapată pagina de memorie. Dacă nu, o mapez. Dacă da, consider eșec la mapare și declanșez handlerul salvat la so_init_loader. Perfect, asta îmi dă aproape toate testele chiar, dar pe testul 7 (inputs/inv_perm) mi se spune că am 2 faulturi în loc de unul singur.
>
>
>
> Este abordarea corectă? De asemenea, există ceva (chiar în acel ucontext pe care noi îl primim ca void*) care ne va oferi tipul de acces care a generat faultul?
>
>
>
> Sent from Mail for Windows 10
>
>
>
> _______________________________________________
> http://ocw.cs.pub.ro/courses/so/info/lista-discutii


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20190416/4f016c46/attachment.html>


More information about the so mailing list