BlueIcefield Le savoir n'a de valeur que s'il est partagé

3nov/090

[Linux] Driver graphique nvidia optimisé

nvidia-logo

J'ai dernièrement patché le driver nvidia avec un bout de code trouvé dans un coin de la toile, visiblement il se montre efficace sur ma carte graphique Nvidia GeForce Go 7400 (pour laptop), sous glxgears j'ai une légère amélioration d'une 100ène FPS à peu près. Il semblerait néanmoins que ce patch soi t plus efficace sur les ancienne cartes graphiques nvidia, il permettrait ainsi de régler le problème de saccades sous Compiz.

Pour installer le patch, il vous faut tout d'abord télécharger le pilote nvidia depuis le site officiel. Puis créez un fichier patch.txt dans lequel vous copierez ceci :

diff -ru usr/src/nv/nv.c usr/src/nv.572433/nv.c
--- usr/src/nv/nv.c    2009-05-27 03:20:53.000000000 -0700
+++ usr/src/nv.572433/nv.c    2009-07-05 11:31:27.635210006 -0700
@@ -888,6 +888,7 @@
unsigned int pat1, pat2, i;
U008 PAT_WC_index;

+#if 0 /* disabled */
if (!test_bit(X86_FEATURE_PAT,
(volatile unsigned long *)&boot_cpu_data.x86_capability))
{
@@ -895,6 +896,7 @@
"NVRM: CPU does not support the PAT, falling back to MTRRs.n");
return NV_PAT_MODE_DISABLED;
}
+#endif

NV_READ_PAT_ENTRIES(pat1, pat2);
PAT_WC_index = 0xf;

Maintenant, vous allez patcher le driver télécharger avec ce patch, pour cela utilisez la commande :

# sh NVIDIA-Linux-xXX-XXX.XX-pkg1.run --apply-patch patch.txt

Notez que le # désigne le prompt, il ne faut pas le taper, quant aux X ils désignent des chiffres relatifs à la version du pilote, il faudra donc les remplacer selon la version téléchargée.

Le résultat de cette commande est un fichier qui ressemble à ceci :

NVIDIA-Linux-x86-190.42-pkg1-custom.run

Le fichier généré porte quasiment le même nom que le pilote que vous avez téléchargé à la différence qu'il y a la mention" custom" qui signifie "personnalisé".

Voilà, vous pouvez maintenant procéder à son installation :

sh NVIDIA-Linux-x86-190.42-pkg1-custom.run

Important :

1/ Pensez à désinstaller le driver Nvidia déjà présent sur votre machine (utilisez votre gestionnaire de paquetage pour cela).

2/ Je décline toute responsabilité vis-à-vis des problèmes liés à l'utilisation de ce driver patché et/ou aux désagréments rencontrés suite à la désinstallation du driver nvidia déjà présent.

3nov/093

[Linux] Fork bombing, l’art de faire crasher Linux !

bombe

Les cours se suivent l'un après l'autre et parfois on découvre des choses passionnantes. Dernièrement en étudiant la notion de fork (ou plutôt devrais-je dire "en re-étudiant" puisque j'avais déjà étudié cela durant mon précédent cursus) j'ai eu une idée lumineuse (machiavélique) qui se résume à utiliser des forks pour saturer le système et ainsi le faire planter.

Quelques minutes plus tard et après avoir tapé quelques lignes de code en C, j'ai obtenu le résultat escompté, c'est-à-dire un joli plantage, pour aller plus loin dans le sujet j'ai googlé un peu et là je suis tombé sur un code merveilleux, d'une beauté rare ! Un petit code en bash à taper directement dans sa console pour faire planter Linux, c'est instantané et radical !

Voici donc le code magic :

:() { : | : & };:

Cela peu paraitre fou mais ces quelques caractères font réellement planter le PC ! Seule solution pour reprendre la main : redémarrer à l'aide du bouton d'arrêt!

Ceux qui, comme moi, ont étudié et codé un peu en bash, ont normalement compris ce qui se cache dernière cette série de symboles... Non ?! Vous ne comprenez pas ?!?!  Ok, alors je vais expliquer le code par petits bouts :

:() Cette syntaxe bash indique que l'on créé une fonction nommée ":".

{ Cette accolade ouvrante marque le début du contenu de la fonction.

: | : & Ceci est le corps de la fonction, on appelle la fonction ":" en elle-même (récursivité) et on la pipe avec elle même, le tout sera exécuté en tâche de fond.

} Cette accolade fermante indique la fin du contenu de la fonction.

;: Le point virgule en console sert de séparateur entre deux commandes, le ":" indique qu'on lance la fonction ":" qu'on a précédemment défini.

En résumé, ce qu'il y a avant le ";" sert à définir notre fonction et ce qu'il y a après le ";" est l'appel de la fonction définie. Le résultat est un fork exponentiel qui va très rapidement saturer la mémoire (cela foudroie instantanément  mon laptop équipé d'un dual core 1,6Ghz et d'1Go de DDRII).

Bien entendu, étant futur administrateur système et réseau et passionné de sécurité informatique, j'ai aussi cherché à savoir comment se protéger de ce genre de pratique, mine de rien ce petit truc là que je vous montre dans ce billet permet à un utilisateur ayant des privilèges standards de faire planter la machine sans utiliser de commandes particulières, vous imaginez ça sur un serveur de production ?

Donc j'ai pu constater qu'un des moyens de protéger son système est d'utiliser PAM, il faut donc éditer le fichier /etc/security/limits.conf pour limiter le nombre de processus que peut lancer un utilisateur.

Il doit aussi y avoir des patchs pour le noyau permettant de sécuriser ce phénomène mais comme j'ai un examen assez complexe demain (sémaphores et compagnie), je n'ai pas eu le temps de chercher d'avantage. Néanmoins, je vous tiens au courant et je vous dis à très bientôt pour de nouvelles aventures !