<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hardening consulting (Articles sur C)</title><link>https://www.hardening-consulting.com/</link><description></description><atom:link href="https://www.hardening-consulting.com/categories/c.xml" rel="self" type="application/rss+xml"></atom:link><language>fr</language><lastBuildDate>Mon, 20 Apr 2026 09:08:50 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Utiliser socket pair et passfd     </title><link>https://www.hardening-consulting.com/posts/20260417-socketpair-et-passfd.html</link><dc:creator>David FORT</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/improvement.png" width="100px"&gt;&lt;/p&gt;
&lt;p&gt;J'ai toujours eu en tête cette fonctionnalité de &lt;code&gt;passfd&lt;/code&gt; disponible sous Linux mais je n'avais
jamais eu l'occasion de vraiment m'en servir. Au gré de tests d'architecture,
j'ai pu expérimenté ça, et je trouve que ça ouvre plein de perspectives, je vous parle de tout ça.&lt;/p&gt;
&lt;p&gt;&lt;br style="clear: both;"&gt;&lt;/p&gt;
&lt;h2&gt;Socket pair&lt;/h2&gt;
&lt;p&gt;Rien de bien compliqué avec &lt;code&gt;socketpair&lt;/code&gt; ça permet en un appel système d'avoir 2 sockets inter-connectées:
quand on envoie des octets sur une socket ou peut les lire sur l'autre:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;sys/socket.h&amp;gt;&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;socketpair&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ça reste quand même plus pratique que les appels systèmes &lt;code&gt;pipe&lt;/code&gt; ou &lt;code&gt;pipe2&lt;/code&gt;, qui fournissent un file
descriptor pour lire et un autre pour écrire. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.hardening-consulting.com/posts/20260417-socketpair-et-passfd.html"&gt;Lire la suite…&lt;/a&gt; (Il reste encore 6 min. de lecture)&lt;/p&gt;&lt;/div&gt;</description><category>C</category><category>linux</category><category>passfd</category><category>socketpair</category><guid>https://www.hardening-consulting.com/posts/20260417-socketpair-et-passfd.html</guid><pubDate>Fri, 17 Apr 2026 06:11:00 GMT</pubDate></item><item><title>Une grande balade dans FreeRdp</title><link>https://www.hardening-consulting.com/posts/20140522une-grande-balade-dans-freerdp.html</link><dc:creator>David FORT</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;img class="alignright" alt="FreeRdp" src="https://www.hardening-consulting.com/images/FreeRDP-small.png"&gt;&lt;/p&gt;
&lt;p&gt;Ces dernières semaines, j'ai travaillé à rendre les écritures sockets non bloquantes
dans FreeRDP. Ceci m'a permis de faire une petite balade dans les composants bas-niveau de 
FreeRDP, je vous propose donc un petit carnet de voyage.&lt;/p&gt;
&lt;h2&gt;Rendre les écritures non bloquantes&lt;/h2&gt;
&lt;h3&gt;De quoi s'agit-il ?&lt;/h3&gt;
&lt;p&gt;Dans FreeRDP actuellement, les appels en lecture sont bien gérés de manière non-bloquante:
on s'attend a des résultats &lt;em&gt;EAGAIN&lt;/em&gt; ou &lt;em&gt;EWOULDBLOCK&lt;/em&gt; lors des lectures / écritures.
Par contre pour l'écriture, quand on a ce genre de résultats, on rentre dans une boucle qui va attendre
de manière active que les octets aient bien été envoyés. On est donc bloquant pour l'écriture
même si la socket est en mode non-bloquant. &lt;/p&gt;
&lt;p&gt;On ne rencontre quasiment jamais ce cas en utilisant le client FreeRDP car la majorité du trafic va du serveur vers le
client. On imagine difficilement une saturation de la bande passante à coups de frappes
clavier ou de mouvements de souris. On peut néanmoins voir ça en utilisant des channels:
par exemple la redirection de disques (en poussant un fichier vers le serveur) ou la
redirection audio du micro (le micro local exporté sur le serveur).&lt;/p&gt;
&lt;p&gt;Par contre quand on est dans FreeRDS, en tant que serveur RDP, c'est un cas que l'on
rencontre &lt;em&gt;très&lt;/em&gt; fréquemment. Il suffit de regarder une vidéo youtube en fullscreen à travers un réseau
WIFI moyen (le mien pour ne pas le nommer), et on tombe tout de suite dans le cas en question. Et
ceci malgrés la compression remoteFx.   &lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.hardening-consulting.com/posts/20140522une-grande-balade-dans-freerdp.html"&gt;Lire la suite…&lt;/a&gt; (Il reste encore 4 min. de lecture)&lt;/p&gt;&lt;/div&gt;</description><category>C</category><category>event driven</category><category>freerdp</category><category>non bloquant</category><category>tsg</category><guid>https://www.hardening-consulting.com/posts/20140522une-grande-balade-dans-freerdp.html</guid><pubDate>Thu, 22 May 2014 17:03:19 GMT</pubDate></item><item><title>Agacé par les warnings d'openSSL sous Valgrind ?</title><link>https://www.hardening-consulting.com/posts/20140512openssl-et-valgrind.html</link><dc:creator>David FORT</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/valgrind.png"&gt;&lt;/p&gt;
&lt;h2&gt;Le problème&lt;/h2&gt;
&lt;p&gt;OpenSSL a la "bonne" idée de vouloir fabriquer de l'entropie en se servant de la pile
comme une source de valeurs "au hasard". C'est une entropie toute relative, qui a 
d'ailleurs donné le bug &lt;a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-0166"&gt;debian&lt;/a&gt; de 2008: le mainteneur debian d'openssl
était agacé des erreurs de variables non-initialisées remontées par valgrind. 
Il a introduit un correctif enlevant les erreurs valgrind, mais réduisant les nombres
aléatoires générés à quelques millions ce qui permettait de lister toutes les clés possibles. 
Une belle conséquence avec tout le matériel cryptographique généré avec cette version 
d'openSSL à recréer, et sûrement des serveurs qui tourne encore avec des clés facilement
devinables.&lt;/p&gt;
&lt;p&gt;Bon c'est bien beau, le mainteneur debian a fait son méa-culpa, mais on est quand
même bien embêté par toutes ces erreurs de valgrind quand on a le malheur de faire
un peu de SSL.  &lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.hardening-consulting.com/posts/20140512openssl-et-valgrind.html"&gt;Lire la suite…&lt;/a&gt; (Il reste encore 3 min. de lecture)&lt;/p&gt;&lt;/div&gt;</description><category>C</category><category>openssl</category><category>valgrind</category><guid>https://www.hardening-consulting.com/posts/20140512openssl-et-valgrind.html</guid><pubDate>Mon, 12 May 2014 13:03:19 GMT</pubDate></item></channel></rss>