Sécurité : Faille de sécurité dans le pilote propriétaire Nvidia
Posté par Victor STINNER (page perso, ). Modéré le 17 octobre 2006.
Le 2 décembre 2004, Nate Nielsen rapporte un plantage de Xorg lorsque Firefox affiche une très longue URL dans la barre d'adresse. Quatre mois plus tard un bug similaire est détecté dans Eclipse. Le bug concerne l'affichage de très longues lignes de texte avec le pilote propriétaire Nvidia. La solution est d'utiliser le pilote libre nv qui n'a pas ce bug.
Face à l'absence de réaction de Nvidia, un exploit exploitant ce dépassement de tampon offrant un shell en root est publié sur Rapid7. Il est possible d'exploiter la faille à distance à l'aide d'un client X distant. La faille a en fait été corrigée dans la version 9625 du pilote Linux sortie le 21 septembre 2006, mais la série 9xxx des pilotes Linux est encore en phase béta.
Cette faille relance bien sûr le débat pour ou contre les pilotes propriétaires (BLOBs). Pour le cas de Nvidia, il est difficile de trancher car refuser le pilote officiel implique de se priver d'accélération matérielle. Plutôt que de brasser l'air avec un débat sans fin, il serait plus judicieux de contribuer au projet Nouveau qui vise justement à écrire un pilote libre offrant l'accélération matérielle. D'ailleurs, l'écriture d'un pilote a été entamée il y a peu mais il est encore loin d'être utilisable.
NdM : Merci également à Pascal Terjan d'avoir proposé une dépêche sur le même sujet.
Mise à jour : la version 9626 du pilote (stable) corrige la faille.
Face à l'absence de réaction de Nvidia, un exploit exploitant ce dépassement de tampon offrant un shell en root est publié sur Rapid7. Il est possible d'exploiter la faille à distance à l'aide d'un client X distant. La faille a en fait été corrigée dans la version 9625 du pilote Linux sortie le 21 septembre 2006, mais la série 9xxx des pilotes Linux est encore en phase béta.
Cette faille relance bien sûr le débat pour ou contre les pilotes propriétaires (BLOBs). Pour le cas de Nvidia, il est difficile de trancher car refuser le pilote officiel implique de se priver d'accélération matérielle. Plutôt que de brasser l'air avec un débat sans fin, il serait plus judicieux de contribuer au projet Nouveau qui vise justement à écrire un pilote libre offrant l'accélération matérielle. D'ailleurs, l'écriture d'un pilote a été entamée il y a peu mais il est encore loin d'être utilisable.
NdM : Merci également à Pascal Terjan d'avoir proposé une dépêche sur le même sujet.
Mise à jour : la version 9626 du pilote (stable) corrige la faille.
Lien vers l'exploit (883 hits)
Bug Xorg ouvert en décembre 2004 (209 hits)
Rapport de bug Eclipse ouvert en mars 2005 (166 hits)
Projet Nouveau (1265 hits)
> Lire la dépêche (67 commentaires, moyenne: 3,6).
Vous avez demandé le commentaire #765586.




nouveau driver nouveau ?
pourquoi faire un nouveau driver plutôt que d'améliorer le driver nv de xorg ? nv est trop vieux ? difficilement évolutif ?
(je pose cette question parce que je n'y connais pas grand chose et je ne trouve pas de faq)
[^]Re: nouveau driver nouveau ?
si j'ai bien compris, ils modifient le code de "nv" mais le boulot c'est surtout d'ecrire un module drm et dri.
[^]Re: nouveau driver nouveau ?
nouveau n'est pas un nouveau driver (clair non?)
En fait c'est une extension du driver nv (2D only) vers les fonctions 3D
[^]Re: nouveau driver nouveau ?
euh le problème c'est surtout que nv n'est pas vraiment libre non plus.
A la base c'était la sortie d'un gcc -E... et je crois pas que ce soit la forme préferée pour faire des modifications.
http://airlied.livejournal.com/34017.html
[^]Re: nouveau driver nouveau ?
A la base c'était la sortie d'un gcc -E... et je crois pas que ce soit la forme préferée pour faire des modifications.
Attention, si on veut pinailler, la "forme préferée pour faire des modifications" n'est imposée que par la GPL, pas par la license MIT qui est justement celle qui couvre ce pilote. Et on considère pourtant en général que la license MIT est libre...
[^]Re: nouveau driver nouveau ?
Oui enfin faut pas trop pousser non plus :p
nv a de façon délibéré été obscursifé et est donc très difficile à modifier.
Ils auraient aussi bien pu faire un gcc -S pour tous les proc et le distribuer sous license libre, ou alors filer les objets strippés et dire qu'on a le droit de le desasm et de le modif et qu'il est libre :))
[^]Re: nouveau driver nouveau ?
Pour référence, voilà la version à partir de laquelle le code a été obscurcifié. C'est édifiant. http://cvsweb.xfree86.org/cvsweb/xc/programs/Xserver/hw/xfre(...)
[^]Re: nouveau driver nouveau ?
Il est bien plus flagrant de regarder le diff avec la version précédente : http://cvsweb.xfree86.org/cvsweb/xc/programs/Xserver/hw/xfre(...)
Pan ! Pan !
Ne pas utiliser : traplinuxfrnico@univ-nantes.Fr
[^]Re: nouveau driver nouveau ?
Même pas drôle ils ont laissé les noms de variables et fonctions "lisibles"! ;-)
[^]Re: nouveau driver nouveau ?
Question bête peut-être, mais pourquoi cet obscurcissement ?
Ce n'est pas sur linux...
[^]Re: nouveau driver nouveau ?
Question bête peut-être, mais pourquoi cet obscurcissement ?
Le message de commit est « source obfuscation as forced by NVIDIA ». Si j'ai bien compris, le pilote nv a été à partir du pilote nvidia qui est loin d'être libre. Donc bon, Nvidia était pas content que son code pas libre passe sous licence libre sans leur accord. J'ai bon ?
Haypo
[^]Re: nouveau driver nouveau ?
Tiens, je pensais que soit on est d'accord et on ouvre, soit on n'est pas d'accord et on ferme. Parce que là, rien n'empêche un re-éclaircissement du code, surtout avec le comparatif évoqué dans les commentaires.
Merci sinon ;-)
Ce n'est pas sur linux...
[^]Re: nouveau driver nouveau ?
le problème avec le pilote nv est qu'il est obscurci (obfuscate) au niveau du code source :
http://airlied.livejournal.com/34017.html
En plus de faire un pilote pouvant exploiter les capacités 3D, nouveau cherche aussi à faire un pilote plus facile à maintenir et gérant plus de fonction que nv (le dual screen ou exa par exemple ).
[+] [^]Re: nouveau driver nouveau ?
c'est bien souvent une question de connaissance. En réécrivant le pilote de bas en haut, tu apprends plus que de tenter de comprendre un pilote existant et de l'améliorer, surtout s'il y a très peu de document et pas de specs. Les auteurs/mainteneurs de nv n'ont pe pas pour objectifs d'implémenter l'acceleration, c'est pkoi la réécriture me parait sencée.
[^]Re: nouveau driver nouveau ?
Ce pilote pose certains problemes, en 2D il est clairement plus lent que le driver proprio et n'aime pas un certain nombre de resolutions d'ecran (il a refusé mordicus de configrer la resolution correspondant a mon LCD 20' widescreen)
[^]Résolutions originales
D'un autre côté, le serveur X contient un certain nombre de résolutions prédéfinies et les autres ne le sont pas.
Donc, à moins que toi (ou l'utilitaire de configuration de X de ta distribution) ne l'aies déjà fait, il est souhaitable, sinon indispensable, de définir dans xorg.conf (Section "Monitor") un Mode correspondant à ton moniteur, idéalement en récupérant ses spécs (si c'est possible), ce qui se fait avec read-edid ( http://john.fremlin.de/programs/linux/read-edid/ ) :
./get-edid | ./parse-edid
Berlin 1936, Moscou 1980, Pékin 2008.
Jeux Olympiques, sponsor officiel de la dictature.
Mexico 1968, Pékin 2008.
Jeux Olympiques, sponsor officiel de la répression.
[^]Re: Résolutions originales
à moins que toi (ou l'utilitaire de configuration de X de ta distribution) ne l'aies déjà fait, il est souhaitable, sinon indispensable, de définir dans xorg.conf (Section "Monitor") un Mode correspondant à ton moniteur
Oui et non, les modeline doivent (!) disparaitre, la méthode moderne est d'utiliser dpms.
Et oui j'avais entré la résolution à utiliser a ma mano, il s'en fichait royalement et fail-safait en 800*600 (ouch!)
[^]Re: Résolutions originales
Personnellement, une fois mon 20 pouces large acheté et installé, j'ai édité xorg.conf et à la place de 1027x768 j'ai mis 1680x1050, j'ai redémarré et cela a fonctionné sans le moindre problème ni la moindre anicroche avec le driver proprio d'Ati. Donc ça doit beaucoup dépendre des configurations, mais j'ai rien changé d'autre. De toutes façons, avec les écrans plats actuels dont la résolution est fixée dans le marbre et la fréquence de rafraichissement standardisée à 60 Hz, il n'y a plus trop besoin de jouer avec les modelines ou ces histoires là.
[^]Re: Résolutions originales
Tu diras ça à M. Acer, par exemple. J'ai vu le cas d'Acer 17'' plats premier prix qui ne fonctionnaient pas avec le mode prédéfini du serveur X (pas d'image ou parties de l'image qui "clignotent") et qui fonctionnent tout-à-fait bien avec le mode extrait par read-edid.
Seules les durées du signal de synchro et du retour de faisceau différaient, mais ceux du mode standard ne leur plaisaient pas. Pourtant le retour de faisceau, pour un moniteur LCD, ça n'a aucun sens, mais peut-être avaient-ils un peu de mal à détecter un signal de synchro trop court...
Évidemment, d'un autre côté, j'ai aussi vu le cas d'un écran plat branché sur un PC sortant un mode supérieur (réglé pour un moniteur cathodique) avec une fréquence élevée et qui l'a affiché sans broncher avec une interpolation aussi propre que possible.
Berlin 1936, Moscou 1980, Pékin 2008.
Jeux Olympiques, sponsor officiel de la dictature.
Mexico 1968, Pékin 2008.
Jeux Olympiques, sponsor officiel de la répression.
[^]Re: Résolutions originales
C'est justement ce que fait read-edid... pour définir des Mode (pas "line", mais c'est juste une question de présentation).
Je n'ai pas eu l'impression jusqu'ici (mais je n'ai pas dû utiliser les toutes dernières versions) que le serveur X soit capable d'utiliser directement et correctement le DMPS pour récupérer les modes écran.
Et je ne parle même pas de déduire un mode 1440x1080 à une fréquence potable (pas 60 Hz, merci pour nos yeux) pour un 19'' cathodique qui ne sort qu'une définition de mode 1280x1024...
Moi j'ai plutôt vu l'inverse : des moniteurs LCD qui n'affichaient rien jusqu'à ce qu'on leur mette le Mode récupéré par read-edid.
Ta résolution n'était probablement pas dans l'intervalle de synchronisation défini auparavant, sinon X t'aurait sorti quelque chose, quitte à ce que le moniteur ne soit pas capable de l'afficher si le mode ne lui convient pas.
Berlin 1936, Moscou 1980, Pékin 2008.
Jeux Olympiques, sponsor officiel de la dictature.
Mexico 1968, Pékin 2008.
Jeux Olympiques, sponsor officiel de la répression.
[^]Re: nouveau driver nouveau ?
En cherchant un peu plus loin que le bout de son nez, on peut se rendre compte que nouveau utilise la nouvelle API de Xorg qui s'appelle EXA.
Pour faire très simple, EXA déporte énormément de code qui se trouvait initialement dans les pilotes, dans Xorg. Ceci réduit considérablement la complexité des pilotes et les rend beaucoup plus rapide à écrire. Cependant, par défaut, le code de EXA n'est pas très optimisé et des options dans le fichier de xorg.conf permettent de modifier les algorithmes utilisés derrière.
En rajoutant la ligne suivante à ton xorg.conf, dans la section Device, la 2D sera BEAUCOUP plus rapide :
Option "MigrationHeuristic" "smart"
cf. http://nouveau.freedesktop.org/wiki/EXA
À bon entendeur.
[^]Re: nouveau driver nouveau ?
Honnêtement, cette histoire de pilote libre, j'ai des doutes.
Combien de model de radeon dont nous avons finalement toutes les specs suffisantes, fonctionnent-elles au poil?
Je parle des R200 et R250.
Le projet DRI semble aller dans tous les sens en même temps.
Alors partir sur du Nvidia sans infos et arriver à faire mieux - ou équivalent - que leurs ingénieurs qui, soit dit en passant, font d'excellent pilotes, me fait doucement rire ...nerveusement.
Ne vous y trompez pas, j'envie autant que vous des pilotes de libres pour cartes graphiques*, mais bon qu'elles sont nos chances d'avoir quelque chose de fonctionnel et dans les temps?
@+
*J'utilise mon ATI mobility 9000 avec les DRI, la partie 2D est quasi irreprochable. Je remerci les devs de DRI au passage
[^]Re: nouveau driver nouveau ?
les drivers radeon libre fonctionne bien mieux que ceux d'ati. et pour cause, ati ne fournit plus de drivers pour les r2xx depuis un bon moment !
[^]Mieux ?
"Mieux", ça dépend des critères qu'on considère en premier. Au niveau de la performance, c'est probablement très difficile, mais au niveau stabilité, par contre, il suffit de faire un code qui ne plante pas côté CPU.
Souvenons-nous que quand Microsoft en a eu marre qu'on dise que Windows plante sans arrêt (ça devait être à l'époque de Windows 95 ou 98), ils ont contraint les fabricants de matériel à faire passer une certification à leurs pilotes, et il faut reconnaître que Windows plantait effectivement nettement moins après...
Sous Linux, nVidia et ATI ont pu reprendre leurs "bonnes" habitudes et nous fournir des pilotes qui vont quelquefois jusqu'à geler complètement le noyau en cas de mise en veille de l'écran (vécu) ou autres joyeusetés du même acabit...
Et je passe sur la sécurité d'avoir du code fermé qui tourne pour une partie en mode noyau et pour le reste en en super-utilisateur...
Berlin 1936, Moscou 1980, Pékin 2008.
Jeux Olympiques, sponsor officiel de la dictature.
Mexico 1968, Pékin 2008.
Jeux Olympiques, sponsor officiel de la répression.
[^]Re: nouveau driver nouveau ?
Combien de model de radeon dont nous avons finalement toutes les specs suffisantes, fonctionnent-elles au poil?
En fait peu de développeurs ont les specs des radeon, ce sont ceux qui ont signé un NDA il y a plusieurs années, et c'était pour R100 ou R200. Les docs R300 se limitent à des registres décrivant la 2D.
Le projet DRI semble aller dans tous les sens en même temps.
Tous les sens ? Par rapport au fait qu'on travaille sur ATI et Nvidia ? Ce ne sont pas les mêmes personnes, et puis je pense qu'on n'a pas d'obligation de travailler sur tel ou tel modèle de cartes, en particulier quand on fait ça dans son temps libre et bénévolement. Il faut se faire plaisir avant tout !
Alors partir sur du Nvidia sans infos et arriver à faire mieux - ou équivalent - que leurs ingénieurs qui, soit dit en passant, font d'excellent pilotes, me fait doucement rire ...nerveusement.
Ne vous y trompez pas, j'envie autant que vous des pilotes de libres pour cartes graphiques*, mais bon qu'elles sont nos chances d'avoir quelque chose de fonctionnel et dans les temps?
Je t'accorde que les pilotes de nvidia sont très bons. C'est sûr que si tu vises des performances tip-top, c'est ceux-là qu'il faut utiliser. Maintenant si tu veux des pilotes libres, ou que tu as un powerpc, ou une autre machine un peu exotique, tu es content de trouver une alternative.
Pour ce qui est d'avoir quelque chose de fonctionnel "dans les temps" je ne vois pas vraiment ce que tu veux dire. Tu as une échéance précise en tête ?
[^]Re: nouveau driver nouveau ?
Peut-ête veut-il dire avant que la carte ne soit plus vendue?
[^]Re: nouveau driver nouveau ?
Peut-ête veut-il dire avant que la carte ne soit plus vendue?
J'espère que non :) Je pense en particulier aux possesseurs de TNT, TNT2, et Geforce 1 ou 2 qui sont obligés d'utiliser le pilote "legacy" de nvidia. Ces cartes ne sont certes plus vendues, mais pourraient très bien supporter AIGLX.
Pour ces utilisateurs, l'arrivée d'un pilote implémentant AIGLX serait intéressante même si leurs cartes ne sont effectivement plus en vente depuis longtemps.
[^]Re: nouveau driver nouveau ?
@Stéphane: on va pas parler d'échéance quand même, disont qu'une année et quelques mois d'attentes après la sortie d'une carte par exemple, ça serait bien.
Evidement que je fais valoir l'ouverture, la sécu et la stabilité avant les perfs, mais bon, un moment, t'aimerais bien faire pèter quelques polygones texturés aux matériaux programmables, dans un ptit FPS bourrin :)
Non c'est, j'suis pas un joueur, mais dans le domaine infographie et j'aimerais bien, ne pas trop être handicapé, mais j'assume complètement mes choix!
Quant à l'alternative, je l'utilise justement, j'ai un powerbook G4 nourrit au DRI, et comme je l'ai dit, la gestion 2D est presque irréprochable mais pas d'AIGLX convenable, mais ça j'admet que ça puisse venir de moi et que c'est facultatif. :)
[^]Re: nouveau driver nouveau ?
Hello
La question est pertinente. Oui, nous partons du driver "nv" et nous nettoyons le code et rajoutons le support pour la 3D. Non, ce n'est pas fait dans l'arborescence officielle parce que cettte arboressence est maintenue par des developeurs travaillant pour nvidia, et que ça pourrait causer des conflits.
[^]Re: nouveau driver nouveau ?
Une question en passant, est-ce que vous vous basez aussi sur le driver Utah GLX pour Xfree 3.3 ? Ils avaient un driver fonctionnel quoique pas au niveau des perfs de celui de nvidia. Mais il permettait quand même de faire tourner Quake 3 de façon raisonnable sur une TNT2.
[^]Re: nouveau driver nouveau ?
Alors, il existe effectivement un driver GLX qui fonctionne avec les NV04 (TNT), NV05 (TNT2) et toutes les variantes de NV10 (geforce 1, geforce 2mx, geforce 2ti/gts, geforce 4 mx). Le problème c'est que ce driver utilise les geforces comme si c'étaient des TNT/TNT2 (ces cartes ont en effet un mode rétro-compatible avec la famille TNT).
Si on se refère aux docs des cartes :
http://nouveau.cvs.sourceforge.net/nouveau/renouveau/nv_obje(...)
ça veut dire qu'au lieu d'utiliser NV10_TCL_PRIMITIVE_3D il utilise NV04_DX5_TEXTURED_TRIANGLE et donc ne tire pas partie de tout un tas de fonctionnalités, dont le TCL matériel (et bien d'autres choses, je t'invite à comparer les 2 objets en question).
D'autre part ce driver est un driver GLX, c'est-à-dire qu'il tourne complètement en user space et donc nécessiterait une réecriture si on voulait récupérer le code.
Donc finalement, ce driver est principalement intéressant pour comprendre le fonctionnement des TNT/TNT2, mais je ne pense pas que récupérer son code soit une bonne idée.