Browse Source

chapters/sandbox_architecture: ajout d'un passage sur le démarrage de la sandbox

Alexandre Janniaux 6 years ago
parent
commit
3a3893ea57
1 changed files with 48 additions and 0 deletions
  1. 48 0
      chapters/sandbox_architecture.tex

+ 48 - 0
chapters/sandbox_architecture.tex

@@ -124,3 +124,51 @@ appel à \inltype{fork}. Dans l'architecture que j'ai construite, nous réalison
 les opérations de façon synchrone, même entre deux processus, ce qui permettra
 les opérations de façon synchrone, même entre deux processus, ce qui permettra
 d'attacher des débogueurs au processus Zygote et basculer directement sur le
 d'attacher des débogueurs au processus Zygote et basculer directement sur le
 processus enfant à chaque création de nouveau processus.
 processus enfant à chaque création de nouveau processus.
+
+\section{Démarrage de la sandbox}
+
+Du côté de l'application cliente qui utilise libvlc et doit être sandboxée, il
+faut pouvoir gérer les deux cas de création de processus. Je propose alors une
+API inspirée des travaux existants de Guillaume Fournier sur la sandbox seccomp,
+mais ne dépendant pas directement des objets libvlc et permettant plus
+d'évolution sur les paramètres passables au démarrage de la sandbox.
+
+\begin{code}{c}{API de sandboxing}
+vlc_sandbox_t *vlc_sandbox_Init( struct vlc_sandbox_cfg *cfg );
+VLC_API int vlc_sandbox_Start( vlc_sandbox_t *sandbox );
+VLC_API void vlc_sandbox_Close( vlc_sandbox_t *sandbox );
+VLC_API bool vlc_sandbox_ShouldExit( vlc_sandbox_t *sandbox );
+/* donne la valeur de retour pour le programme */
+VLC_API int vlc_sandbox_Exit( vlc_sandbox_t *sandbox );
+\end{code}
+
+Le client peut alors initialiser la sandbox avec le code qui suit. La structure
+\inltype{vlc_sandbox_cfg} est prévue à terme pour transmettre l'ensemble des
+politiques à appliquer aux différentes zones de privilèges, les paramètres
+de création des nouveaux objets dans la sandbox et tout paramètre de sécurité
+important.
+
+\begin{code}{c}{Démarrage de la sandbox}
+/* count et args contiennent les arguments modifiés pour le démarrage */
+vlc_sandbox_t *sandbox = vlc_sandbox_Init( &(struct vlc_sandbox_cfg) {
+    .argc       = count,
+    .argv       = args,
+    /* point d'entrée dans la sandbox */
+    .bootstrap  = bootstrap_app,
+    .create_vlc = libvlc_new,
+    .delete_vlc = libvlc_release,
+});
+
+vlc_sandbox_Start( sandbox );
+/* À partir d'ici on fonctionne dans la sandbox et ce processus est devenu le
+ * broker / orchestrateur. Quand le broker termine, libérer les ressources */
+return vlc_sandbox_Close( sandbox );
+\end{code}
+
+Dans le cas de la création de worker par fork, la boucle événementielle des
+workers est directement appelée. Dans le cas de la création de nouveaux
+processus pour chaque worker, \inltype{vlc_sandbox_Init} sera rappelé mais
+détectera dans les arguments de la ligne de commande qu'il s'agit d'un worker et
+initialisera ses paramètres correctement, puis \inltype{vlc_sandbox_Start}
+démarrera la boucle événementielle du worker. On a donc bien une API qui peut
+utiliser les deux modes de démarrage des processus.