FR3013869A1 - Procede de detection des debordements de pile et processeur pour la mise en oeuvre d'un tel procede - Google Patents

Procede de detection des debordements de pile et processeur pour la mise en oeuvre d'un tel procede Download PDF

Info

Publication number
FR3013869A1
FR3013869A1 FR1302695A FR1302695A FR3013869A1 FR 3013869 A1 FR3013869 A1 FR 3013869A1 FR 1302695 A FR1302695 A FR 1302695A FR 1302695 A FR1302695 A FR 1302695A FR 3013869 A1 FR3013869 A1 FR 3013869A1
Authority
FR
France
Prior art keywords
stack pointer
thread
indicative
data
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
FR1302695A
Other languages
English (en)
Other versions
FR3013869B1 (fr
Inventor
Philippe Grossi
Dominique David
Francois Brun
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Thales SA
Original Assignee
Thales SA
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Thales SA filed Critical Thales SA
Priority to FR1302695A priority Critical patent/FR3013869B1/fr
Priority to US14/550,834 priority patent/US9513911B2/en
Publication of FR3013869A1 publication Critical patent/FR3013869A1/fr
Application granted granted Critical
Publication of FR3013869B1 publication Critical patent/FR3013869B1/fr
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Procédé de détection des débordements de pile comportant les étapes suivantes : A. stocker dans au moins un registre dédié au moins une donnée choisie parmi : une donnée (SPHaut) indicative d'une valeur maximale autorisée pour un pointeur de pile, et une donnée (SPBas) indicative d'une valeur minimale autorisée pour ledit pointeur de pile ; B. effectuer une comparaison entre une valeur actuelle (SP) ou passée (SPMin, SPMax) dudit pointeur de pile et ladite ou chaque dite donnée ; et C. générer une exception de débordement de pile si ladite comparaison indique que ladite valeur actuelle ou passée dudit pointeur de pile est supérieure à ladite valeur maximale autorisée ou inférieure à ladite valeur minimale autorisée. Processeur pour la mise en œuvre d'un tel procédé.

Description

PROCEDE DE DETECTION DES DEBORDEMENTS DE PILE ET PROCESSEUR POUR LA MISE EN OEUVRE D'UN TEL PROCEDE L'invention porte sur un procédé de détection des débordements de pile (« stack overflow » en anglais) et sur un processeur pour la mise en oeuvre d'un tel procédé. Les programmes écrits dans des langages évolués (C, C++, ADA, etc.) requièrent des piles de données pour isoler les variables locales de chaque fonction. Généralement, pour un processus ou fil d'exécution (« thread ») donné, la pile est unique et grandit à chaque imbrication de fonctions, puis se réduit lorsqu'une fonction se termine (retourne). La mémoire d'un ordinateur stocke en général une pluralité de piles, une pour chaque processus ou fil d'exécution. Un problème fréquemment rencontré avec les piles est le débordement de l'espace alloué à l'une d'entre elles, principalement à cause 15 d'erreurs de programmation (boucles récursives non bornées, branchements non attendus, etc.) ou de défauts fonctionnels (mauvaise analyse de la taille de pile, allocation de mémoire insuffisante, etc.). Des débordements peuvent également se produire lorsqu'on utilise des données dont on ne connait la taille qu'à la compilation (constructions avec des types non contraints, principalement 20 en langage ADA). Lorsqu'un tel débordement se produit, un processus en cours d'exécution écrit en dehors de la zone de mémoire qui est allouée à sa pile, le plus souvent dans la zone allouée à la pile d'un autre processus. Un tel problème est d'autant plus difficile à détecter et à analyser qu'il se manifeste à 25 retardement, lorsque le processus dont la pile a été corrompue est activé. Pour des raisons d'optimisation du code généré, le débordement de pile n'est classiquement pas géré par les compilateurs. Par le passé, certains compilateurs ADA stockaient dans un registre générique une valeur maximale admissible pour le pointeur de pile et ils 30 vérifiaient après le prologue de chaque fonction - donc juste après l'allocation de pile - que le pointeur de pile n'avait pas dépassé cette valeur maximale admissible. Cette solution était coûteuse en temps d'exécution et n'assurait pas une protection totale contre les risques de débordement. En outre, elle ne fournissait aucun aide au programmeur pour dimensionner les piles de manière à éviter les erreurs de débordement. Une autre méthode connue de l'art antérieur pour gérer les erreurs de débordement consiste à utiliser les unités de gestion de mémoire (MMU, de l'anglais « memory management unit ») généralement présentes dans les unités centrales (CPU, de l'anglais « central processing unit ») modernes. Le principe de cette technique consiste à créer un espace de garde autour de la zone mémoire allouée à la pile, c'est à dire un petit espace (usuellement de 4kB) avant et après la zone de pile, dont l'accès en o lecture/écriture est interdit. Lorsque le pointeur de pile déborde, l'application cherche à lire ou écrire dans cette zone interdite et produit une faute de page (exception programme). Cette technique présente plusieurs inconvénients : - elle nécessite une MMU, qui est une unité matérielle lourde, qui n'est pas présente dans tous les processeurs et qui est notamment absente 15 dans de nombreux processeurs « embarqués » ; - la programmation de la MMU est lourde et contraignante (pour cette raison, cette unité est usuellement désactivée pour la plupart des applicatifs) ; - la protection obtenue n'est pas absolue : si par exemple la 20 pile locale d'une fonction réserve une grande quantité de mémoire non exploitée, il est possible de passer au-dessus de l'espace de garde et de poursuivre dans un espace dont l'accès est autorisé bien que non alloué à la pile. Il convient de noter, en outre, que les MMU ne sont pas 25 prévues pour une telle application, qui en constitue une sorte de « détournement ». Afin d'aider au dimensionnement des piles, il est également connu d'écrire dans les cellules de mémoire allouées à la pile un motif connu. Après l'exécution d'un programme de test, on examine la mémoire pour 30 déterminer jusqu'à quel « niveau » de la pile ce motif a été écrasé par des opérations d'écriture. Cette technique est lourde à mettre en oeuvre et ne peut être appliquée qu'en phase de développement. Elle ne permet pas de gérer, ni même de détecter le débordement, mais à réduire la probabilité qu'ils se produisent en permettant une allocation de mémoire mieux adaptée aux exigences réelles des processus. L'invention vise à remédier à au moins certains des inconvénients précités de l'art antérieur. Plus précisément, l'invention vise à procurer un procédé de détection des débordements de pile simple à mettre en oeuvre, ne ralentissant pas de manière significative l'exécution des programmes et ne nécessitant pas d'unités matérielles complexes. Un procédé selon l'invention met en oeuvre à la fois des moyens matériels - relativement simples - et des moyens logiciels. Selon un mode de réalisation de l'invention, les débordements de pile sont détectés dès qu'ils se produisent, ce qui permet d'en minimiser les conséquences. Selon un autre mode de réalisation de l'invention, le procédé fournit en outre des données susceptibles d'aider un développeur dans le dimensionnement des piles. Ces deux modes de réalisation peuvent avantageusement être combinés. L'invention vise également à procurer un 15 processeur comprenant des moyens matériels pour la mise en oeuvre d'un tel procédé. Un objet de l'invention est un procédé de détection des débordements de pile comportant les étapes suivantes : A. stocker dans au moins un registre dédié au moins une 20 donnée choisie parmi : une donnée indicative d'une valeur maximale autorisée pour un pointeur de pile, et une donnée indicative d'une valeur minimale autorisée pour ledit pointeur de pile ; B. effectuer une comparaison entre une valeur actuelle ou passée dudit pointeur de pile et ladite ou chaque dite donnée ; et 25 C. générer une exception de débordement de pile si ladite comparaison indique que ladite valeur actuelle ou passée dudit pointeur de pile est supérieure à ladite valeur maximale autorisée ou inférieure à ladite valeur minimale autorisée. Selon différents modes de réalisation de l'invention : 30 - Ladite étape A. peut comporter le stockage dans deux registres dédiés d'une donnée indicative d'une valeur maximale autorisée pour un pointeur de pile et d'une donnée indicative d'une valeur minimale autorisée pour ledit pointeur de pile ; et ladite étape B. comporte au moins une comparaison entre la valeur dudit pointeur de pile et chaque dite donnée. - Le procédé peut comprendre également les étapes suivantes : Al : stocker dans au moins un autre registre dédié au moins une donnée choisie parmi : une donnée indicative d'une valeur maximale prise par un pointeur de pile au cours de l'exécution d'un processus ou fil d'exécution, et une donnée indicative d'une valeur minimale prise par ledit pointeur de pile au cours de l'exécution dudit o processus ou fil d'exécution ; BI : mettre à jour lesdites données au cours de l'exécution dudit processus ou fil d'exécution. - Ladite étape Al peut comporter le stockage dans deux registres dédiés d'une donnée indicative d'une valeur maximale prise par ledit 15 pointeur de pile au cours de l'exécution dudit processus ou fil d'exécution et d'une donnée indicative d'une valeur minimale prise par ledit pointeur de pile au cours de l'exécution dudit processus ou fil d'exécution. - Ladite étape Al peut être mise en oeuvre par un système d'exploitation lors de l'activation dudit processus ou fil d'exécution, et ladite 20 étape BI être mise en oeuvre par un module de traitement matériel lors de l'exécution dudit processus ou fil d'exécution. - Ladite étape A. peut être mise en oeuvre par un système d'exploitation lors de l'activation d'un processus ou fil d'exécution, et lesdites étapes B. et C. peuvent être mises en oeuvre par ledit système d'exploitation 25 lors de la commutation du contexte pour la suspension dudit processus ou fil d'exécution et l'activation d'un autre processus ou fil d'exécution, et comprendre au moins une comparaison choisie parmi : une comparaison entre ladite donnée indicative d'une valeur maximale autorisée pour un pointeur de pile et ladite valeur maximale prise par ledit pointeur de pile lors de l'exécution du 30 processus ou fil d'exécution en cours de suspension ; et une comparaison entre ladite donnée indicative d'une valeur minimale autorisée pour un pointeur de pile et ladite valeur minimale prise par ledit pointeur de pile lors de l'exécution dudit processus ou fil d'exécution en cours de suspension. - Ladite étape A. peut être mise en oeuvre par un système d'exploitation lors de l'activation d'un processus ou fil d'exécution, et lesdites étapes B. et C. peuvent être mises en oeuvre par un module de traitement matériel lors de l'exécution dudit processus ou fil d'exécution, ladite étape B. comprenant une comparaison entre une valeur actuelle dudit pointeur de pile et ladite ou chaque dite donnée. - Lors de l'activation d'un processus ou fil d'exécution, ledit système d'exploitation peut récupérer du contexte d'un processus ou fil o d'exécution à activer ladite ou chaque dite donnée à stocker dans ledit ou chaque dit registre dédié et, lors de la commutation du contexte pour la suspension dudit processus ou fil d'exécution et l'activation d'un autre processus ou fil d'exécution, ledit système d'exploitation peut sauvegarder ladite ou chaque dite donnée stockée dans un dit registre dédié dans le 15 contexte dudit processus ou fil d'exécution en cours de suspension. - Le procédé peut mettre en oeuvre un premier jeu de dits registres dédiés et un deuxième jeu équivalent de registres dédiés, et : lors de l'activation d'un processus ou fil d'exécution destiné à être exécuté en mode utilisateur, au moins ladite étape A. peut être mise en oeuvre par un système 20 d'exploitation opérant en mode superviseur et en utilisant le ou les registres dédiés dudit premier jeu ; et lors de l'activation d'un processus ou fil d'exécution destiné à être exécuté en mode superviseur, au moins ladite étape A. peut être mise en oeuvre par un système d'exploitation opérant en mode hyperviseur et en utilisant le ou les registres dédiés dudit deuxième jeu. 25 Un autre objet de l'invention est un processeur pour la mise en oeuvre d'un tel procédé comprenant : une unité centrale ; au moins un registre pour stocker un pointeur de pile ; au moins un registre dédié pour stocker au moins une donnée choisie parmi : une donnée indicative d'une valeur maximale autorisée pour ledit pointeur de pile, et une donnée indicative d'une valeur 30 minimale autorisée pour ledit pointeur de pile ; et un module de traitement matériel configuré pour effectuer une comparaison entre une valeur actuelle dudit pointeur de pile et ladite ou chaque dite donnée, et générer une exception de débordement de pile si ladite comparaison indique que ladite valeur actuelle dudit pointeur de pile est supérieure à ladite valeur maximale autorisée ou inférieure à ladite valeur minimale autorisée. Encore un autre objet de l'invention est un processeur pour la mise en oeuvre d'un tel procédé comprenant : une unité centrale ; au moins un registre pour stocker un pointeur de pile ; au moins un registre dédié pour stocker au moins une donnée choisie parmi : une donnée indicative d'une valeur maximale autorisée pour ledit pointeur de pile, et une donnée indicative d'une valeur minimale autorisée pour ledit pointeur de pile ; et au moins un registre dédié pour stocker au moins une donnée choisie parmi : une donnée indicative d'une valeur maximale prise par un pointeur de pile au cours de l'exécution d'un processus ou fil d'exécution en cours, et une donnée indicative d'une valeur minimale prise par ledit pointeur de pile au cours de l'exécution dudit processus ou fil d'exécution en cours; et un module de traitement matériel configuré pour mettre à jour lesdites données au cours de l'exécution dudit processus ou fil d'exécution. D'autres caractéristiques, détails et avantages de l'invention ressortiront à la lecture de la description faite en référence aux dessins annexés donnés à titre d'exemple et qui représentent, respectivement : - La figure 1, un schéma fonctionnel simplifié d'un processeur selon un mode de réalisation de l'invention ; - La figure 2, un ordinogramme d'un traitement matériel selon un mode de réalisation de l'invention ; - Les figures 3A et 3B des ordinogrammes de procédés selon deux modes de réalisation de l'invention, mettant en oeuvre respectivement une détection matérielle et une détection logicielle des débordements de pile ; et - La figure 4 un schéma d'organisation de la mémoire d'un ordinateur mettant en oeuvre un procédé selon un mode de réalisation de l'invention. Le processeur P de la figure 1 comprend - d'une manière 30 conventionnelle - une unité centrale UC échangeant des données avec une mémoire MEM (qui, dans le cas de la figure, ne fait pas partie du processeur lui-même), un ensemble de N registres « génériques » R1 - RN et deux registres destinés à stocker un pointeur à une pile : RSP et SRSP, pour les processus exécutés en mode utilisateur et en mode superviseur, respectivement. Le processeur comprend également deux jeux de registres dédiés, servant à la détection des débordements de pile : un premier jeu comprenant les registres RHaut, RBas, RMin et RMax, pour le mode utilisateur et un second jeu comprenant les registres SRHaut, SRBas, SRMin et SRMax, pour le mode superviseur ; ainsi qu'un module matériel de traitement MMT représenté comme un composant séparé, mais pouvant en fait être intégré à l'unité centrale. Dans le mode de réalisation de la figure 1, tous les échanges de données se font par l'intermédiaire de l'unité centrale UC ; en variante, des échanges de données pourraient s'effectuer directement entre les registres dédiés et le module matériel de traitement MMT et/ou la mémoire MEM. Chacun des registres dédiés doit avoir une dimension au moins égale à celle du pointeur de pile SP/SSP. Le processeur P peut être mono- ou multicoeurs et être réalisé en tant que circuit intégré dédié ou synthétisé à partir de composants logiques programmables tels que des CPLD ou des FPGA. Le registre RHaut (SRHaut en mode superviseur) est destiné à contenir une donnée - indiquée par la suite par SPHaut - indicative d'une valeur maximale autorisée pour le pointeur de pile SP ; en pratique, il s'agira le plus souvent de la valeur maximale de SP ne produisant pas de débordement de pile « par le haut ». Le registre RBas (SRBas en mode superviseur) est destiné à contenir une donnée - indiquée par la suite par SPBas - indicative d'une valeur minimale autorisée pour le pointeur de pile SP ; en pratique, il s'agira le plus souvent de la valeur minimale de SP ne produisant pas de débordement de pile « par le bas ». Les valeurs de SPHaut et SPBas sont initialisées lors de l'allocation de la pile. Ces valeurs ne sont pas modifiées pendant l'exécution d'un processus ou fil d'exécution (dans la suite on parlera simplement de « processus »), mais seulement lors d'une commutation de contexte ; cela sera expliqué en détail plus loin, en référence aux figures 3Aet 3B. Le registre RMax (SRMax en mode superviseur) est destiné à contenir une donnée - indiquée par la suite par SPMax - indicative d'une valeur maximale prise par le pointeur de pile SP au cours de l'exécution du processus (en pratique, il s'agira le plus souvent de la valeur maximale elle-même). Le registre RMin (SRMin en mode superviseur) est destiné à contenir une donnée - indiquée par la suite par SPMin - indicative d'une valeur minimale prise par le pointeur de pile SP au cours de l'exécution du processus (en pratique, il s'agira le plus souvent de la valeur minimale elle-même). Les valeurs SPMax et SPMin sont mises à jour continuellement au cours de l'exécution d'un processus. Il convient de noter qu'un processeur selon l'invention ne doit pas nécessairement comprendre tous les huit registres dédiés illustrés sur la figure 1. En effet, différents modes de réalisation d'un procédé selon l'invention peuvent utiliser seulement un jeu de registres (généralement le premier, destiné à la gestion des débordements provoqués par des processus exécutés en mode utilisateur), voire seulement un jeu incomplet, ne comprenant que la paire de registres RHaut/RBas (ou SRHaut/SRBas) ou la paire RMax/RMin (ou SRMax/SRMin). Par ailleurs, si on sait qu'un débordement de pile ne peut raisonnablement se produire que « vers le haut », il peut être suffisant de prévoir le registre RHaut et/ou le registre RMax (SRHaut et/ou SRMax si on s'intéresse aux processus exécutés en mode superviseur). Réciproquement, si on sait qu'un débordement de pile ne peut raisonnablement se produire que « vers le bas », il peut être suffisant de prévoir le registre RBas et/ou le registre 20 RMin (SRBas et/ou SRMin si on s'intéresse aux processus exécutés en mode superviseur). On comprend que, à la limite, un seul registre dédié peut suffire pour certains modes de réalisation particulièrement simples de le l'invention. De même, un procédé selon certains modes de réalisation de l'invention peut ne pas utiliser un module matériel de traitement MMT, mais 25 effectuer la détection des débordements de pile de façon logicielle (notamment, par le système d'exploitation lors d'une commutation de contexte) - les seuls éléments matériels non conventionnels utilisés étant alors le ou les registres dédiés. Dans le mode de réalisation de la figure 1, le module matériel 30 de traitement MMT effectue les traitements illustrés sur la figure 2. On considère que, lors de la création du processus en cours d'exécution, les valeurs SP, SPMin et SPMax ont été initialisées en leur attribuant une valeur SPINIT correspondant au « fond » de la pile ; si on utilise la convention la plus courante, selon laquelle on empile en décrémentant SP, on a SPINIT=SPHaut. Puis, à chaque cycle du processeur, on vérifie si la valeur du pointeur de pile SP est inférieure à la valeur actuelle de SPMin, stockée dans le registre RMin ou SRMin. Dans l'affirmative, SPMin est mise à jour, et devient égale à SP. Ensuite, on vérifie si la valeur du pointeur de pile SP est supérieure à la valeur actuelle de SPMax, stockée dans le registre RMax ou SRMax. Dans l'affirmative, SPMax est mise à jour, et devient égale à SP. Ces deux opérations de comparaison et d'assignation (dans des modes de réalisation simplifiés, une seule peut être présente) constituent la « partie I » du traitement. Puis (« partie II » du traitement) on vérifie si SP>SPHaut ou SP<SPBas (dans des modes de réalisation simplifiés, une seule comparaison peut être présente). Si une de ces conditions est vérifiée, le module génère une exception de débordement de pile. Autrement, le traitement recommence. La synthèse d'un module matériel mettant en oeuvre un tel traitement ne présente pas de difficulté particulière pour l'homme du métier. Dans certains modes de réalisation, seule la partie I du traitement peut être présente. Dans un tel cas : soit la détection des débordements est effectuée de façon logicielle (voir la figure 3B), soit une telle détection est absente. Dans cette dernière hypothèse, les débordements 20 provoquent des dysfonctionnements à retardement, comme dans l'art antérieur ; toutefois, les valeurs sauvegardées de SPMin et SPMax permettent au développeur de comprendre a posteriori l'origine de ces dysfonctionnements et d'y remédier. Même en l'absence de débordement, l'étude des valeurs de SPMin et SPMax à la fin des différents processus permet d'optimiser l'allocation 25 de mémoire pour les piles. Dans d'autres modes de réalisation, seule la partie II du traitement peut être présente, afin d'assurer une détection rapide des débordements de pile. Dans ce cas, cependant, on obtient peu d'informations susceptibles d'aider un développeur dans le dimensionnement des piles. 30 La figure 3A illustre les opérations effectuées par le processeur P sous le contrôle du système d'exploitation lors de la commutation de contexte qui se produit lorsqu'un processus PR_1 est suspendu et un autre processus PR_2 est activé.
Initialement, le processus PR_1 est en cours d'exécution. Les débordements éventuels de sa pile sont détectés par le module matériel MMT et gérés par le service du système d'exploitation Gestion_débordement_pile(PR_1) ; en outre, les valeurs de SPMin et SPMax sont constamment mises à jour par ce même module de traitement, comme expliqué plus haut. Lorsque PR_1 doit être suspendu, le système d'exploitation enregistre les dernières valeurs de SPMin et SPMax, contenues dans les registres dédiés RMin et RMax dans des variables de contexte PR_1.SPMin et PRI.SPMax. Puis, SPMin et SPMax prennent leurs nouvelles valeurs, à partir des variables PR_2.SPMin et PR2.SPMax contenues dans le contexte de PR_2 ; en outre, les valeurs SPBas et SPHaut, stockées dans les variables de contexte de PR_2 dénommées PR_2.SPBas et PR_2SPHaut sont chargées dans les registres dédiés RBas et RHaut (l'ordre des ces opérations est sans importance). La commutation de contexte se poursuit ensuite de manière conventionnelle. Si le module de traitement matériel MMT n'est configuré que pour mettre en oeuvre la partie I du traitement (et, de ce fait, ne comporte pas les registres RHaut et RBas), la détection des débordements peut être effectuée de manière logicielle. Pour ne pas ralentir excessivement l'exécution des programmes, cette détection se fait alors uniquement lors de la commutation de contexte, comme illustré par l'ordinogramme de la figure 3B. Cette figure montre que, lorsque le processus PR_1 doit être suspendu, le système d'exploitation compare SPMin à PR_1.SPBas et SPMax à PRI.SPHaut et, le cas échéant, déclenche une exception de débordement (exécution du service Gestion débordement_pile, ayant PR_1 comme paramètre). Ensuite, comme dans le cas précédent, les valeurs courantes de SPMin et SPMax sont sauvegardées dans le contexte de PR_1 (plus précisément : dans la région de la mémoire destinée à sauvegarder les données caractérisant le contexte de PR_1) et leurs nouvelles valeurs sont chargées dans les registres RMin et RMax à partir du contexte de PR_2. La commutation de contexte se poursuit ensuite de manière conventionnelle. On remarque que, dans le mode de réalisation de la figure 3A, les débordements sont détectés immédiatement par le module matériel MMT, avant même qu'une écriture intempestive n'ait lieu. Dans le mode de réalisation de la figure 3B, par contre, les débordements ne sont détectés que lors de la suspension du processus qui a provoqué l'erreur, après que des données aient pu être endommagées de manière potentiellement irréversible.
On remarquera que, dans tous les cas, l'invention met en oeuvre aussi bien des moyens matériels (registres dédiés, module MMT) que logiciels (système d'exploitation et compilateurs, ces derniers étant responsables de la détermination des valeurs de SPHaut et SPBas). L'utilisation d'un module matériel - et non logiciel - de traitement permet de détecter les débordements de pile et/ou à mesurer l'usage réel de l'espace de pile par les processus sans ralentir indûment leur exécution. En outre, le contrôle matériel est insensible aux erreurs logicielles. Le fait que le système d'exploitation soit impliqué dans le contrôle des débordements des processus ordinaires (et pas un programme de même ordre de privilège, comme dans le cas de certaines techniques connues de l'art antérieur) contribue également à la fiabilité de la technique de l'invention. Les figures 3A et 3B se rapportent au cas où les processus PR 1 et PR 2 sont des processus ordinaires exécutés en mode utilisateur, mais elles s'appliquent également, mutatis mutandis, au cas où il s'agit de processus privilégiés exécutés en mode superviseur ; dans ce dernier cas, le traitement des débordements se fait en mode hyperviseur. La figure 4 illustre l'organisation de la mémoire MEM lors de la mise en oeuvre d'un procédé selon l'invention. Du haut vers le bas on distingue une région allouée au stockage des données globales, la pile ST_PR1 allouée au processus PR_1 en cours d'exécution, la pile ST_PR2 allouée au processus PR_2 qui est suspendu, la pile ST_OS allouée au système d'exploitation OS et un « tas » destiné au stockage des données dynamiques. Dans le cas de la pile ST_PR1, on voit que SPMin=SPBas, ce qui signifie que le pointeur de pile SP a atteint - mais pas dépassé - la limite inférieure de la pile ; par contre, SPMax<SPHaut, ce qui signifie que la mémoire allouée à la pile n'a pas été utilisée complètement ; plus précisément, dans l'exemple de la figure, 30% de la mémoire réservée pour la pile de PR_1 est utilisée (le pourcentage de mémoire utilisée est de 8% pour le processus PR_2 et de 45% pour OS). Comme le processus est en cours d'exécution, ces valeurs sont stockées dans les registres RMin, RBas, RSP, RMax et RHaut, respectivement. Les valeurs de SPHaut, SPBas, SPMax et SPMin sont s sauvegardées dans le contexte du processus PR_2, et plus précisément dans les variables PR_2.SPHaut, PR_2.SPBas, PR_2.SPMax, PR_2.SPMin respectivement ; ces valeurs seront chargées dans les registres dédiés correspondants lors de l'activation du processus. Quant au système d'exploitation OS, les valeurs SPSHaut, 10 SPSBas, SPS, SPSMin et SPSMax sont stockées dans les registres dédiés SRHaut, SRBas, SRSP, SRMin et SRMax, respectivement. La fiabilité de l'invention, son absence ou quasi-absence de pénalité en termes de temps d'exécution et la simplicité des moyens matériels et logiciels mis en oeuvre la rendent particulièrement adaptée aux applications 15 embarquées, par exemple en avionique. Par ailleurs, les processeurs embarqués présentent une architecture matérielle et logicielle (systèmes d'exploitation) relativement simple, et sont fréquemment réalisés à partir de composants logiques programmables. Ces caractéristiques facilitent la modification d'une architecture préexistante pour permettre la mise en oeuvre 2 0 de l'invention.

Claims (11)

  1. REVENDICATIONS1. Procédé de détection des débordements de pile comportant les étapes suivantes : A. stocker dans au moins un registre dédié (RHaut, RBas) au moins une donnée choisie parmi : une donnée (SPHaut) indicative d'une valeur maximale autorisée pour un pointeur de pile (SP), et une donnée (SPBas) indicative d'une valeur minimale autorisée pour ledit pointeur de pile ; B. effectuer une comparaison entre une valeur actuelle (SP) io ou passée (SPMin, SPMax) dudit pointeur de pile et ladite ou chaque dite donnée ; et C. générer une exception de débordement de pile si ladite comparaison indique que ladite valeur actuelle ou passée dudit pointeur de pile est supérieure à ladite valeur maximale autorisée ou inférieure à ladite valeur 15 minimale autorisée.
  2. 2. Procédé selon la revendication 1 dans lequel ladite étape A. comporte le stockage dans deux registres dédiés (RHaut, RBas) d'une donnée (SPHaut) indicative d'une valeur maximale autorisée pour un pointeur de pile et 20 d'une donnée (SPBas) indicative d'une valeur minimale autorisée pour ledit pointeur de pile ; et ladite étape B. comporte au moins une comparaison entre la valeur dudit pointeur de pile (SP) et chaque dite donnée.
  3. 3. Procédé selon l'une des revendications précédentes 25 comprenant également les étapes suivantes : Al : stocker dans au moins un autre registre dédié (RMax, RMin) au moins une donnée choisie parmi : une donnée indicative d'une valeur maximale (SPMax) prise par un pointeur de pile (SP) au cours de l'exécution d'un processus ou fil d'exécution, et une donnée (SPMin) indicative 30 d'une valeur minimale prise par ledit pointeur de pile au cours de l'exécution dudit processus ou fil d'exécution ; B1: mettre à jour lesdites données au cours de l'exécution dudit processus ou fil d'exécution.
  4. 4. Procédé selon la revendication 3 dans lequel ladite étape Al comporte le stockage dans deux registres dédiés (RMax, RMin) d'une donnée (SPMax) indicative d'une valeur maximale prise par ledit pointeur de pile (SP) au cours de l'exécution dudit processus ou fil d'exécution et d'une donnée (SPMin) indicative d'une valeur minimale prise par ledit pointeur de pile au cours de l'exécution dudit processus ou fil d'exécution.
  5. 5. Procédé selon l'une des revendications 3 ou 4 dans lequel o ladite étape Al est mise en oeuvre par un système d'exploitation (OS) lors de l'activation dudit processus ou fil d'exécution, et ladite étape B1 est mise en oeuvre par un module de traitement matériel (MTM) lors de l'exécution dudit processus ou fil d'exécution. 15
  6. 6. Procédé selon l'une des revendications 3 à 5 dans lequel ladite étape A. est mise en oeuvre par un système d'exploitation lors de l'activation d'un processus ou fil d'exécution, et lesdites étapes B. et C. sont mises en oeuvre par ledit système d'exploitation lors de la commutation du contexte pour la suspension dudit processus ou fil d'exécution et l'activation 20 d'un autre processus ou fil d'exécution et comprennent au moins une comparaison choisie parmi : une comparaison entre ladite donnée indicative d'une valeur maximale autorisée pour un pointeur de pile et ladite valeur maximale prise par ledit pointeur de pile lors de l'exécution du processus ou fil d'exécution en cours de suspension ; et une comparaison entre ladite donnée 25 indicative d'une valeur minimale autorisée pour un pointeur de pile et ladite valeur minimale prise par ledit pointeur de pile lors de l'exécution dudit processus ou fil d'exécution en cours de suspension.
  7. 7. Procédé selon l'une des revendications 1 à 5 dans lequel 30 ladite étape A. est mise en oeuvre par un système d'exploitation (OS) lors de l'activation d'un processus ou fil d'exécution, et lesdites étapes B. et C. sont mises en oeuvre par un module de traitement matériel (MTM) lors de l'exécutiondudit processus ou fil d'exécution, ladite étape B. comprenant une comparaison entre une valeur actuelle dudit pointeur de pile et ladite ou chaque dite donnée.
  8. 8. Procédé selon l'une des revendications 5, 6 ou 7 dans lequel, lors de l'activation d'un processus ou fil d'exécution (PR_1), ledit système d'exploitation récupère du contexte d'un processus ou fil d'exécution à activer ladite ou chaque dite donnée à stocker dans ledit ou chaque dit registre dédié et, lors de la commutation du contexte pour la suspension dudit processus ou fil d'exécution et l'activation d'un autre processus ou fil o d'exécution (PR_2), ledit système d'exploitation sauvegarde ladite ou chaque dite donnée stockée dans un dit registre dédié dans le contexte dudit processus ou fil d'exécution en cours de suspension.
  9. 9. Procédé selon l'une des revendications précédentes 15 mettant en oeuvre un premier jeu de dits registres dédiés (RHaut, RBas, RMax, RMin) et un deuxième jeu équivalent (SRHaut, SRBas, SRMax, SRMin) de registres dédiés, dans lequel : - lors de l'activation d'un processus ou fil d'exécution destiné à être exécuté en mode utilisateur, au moins ladite étape A. est mise en oeuvre 20 par un système d'exploitation (OS) opérant en mode superviseur et en utilisant le ou les registres dédiés dudit premier jeu ; et - lors de l'activation d'un processus ou fil d'exécution destiné à être exécuté en mode superviseur, au moins ladite étape A. est mise en oeuvre par un système d'exploitation opérant en mode hyperviseur et en 25 utilisant le ou les registres dédiés dudit deuxième jeu.
  10. 10. Processeur (P) pour la mise en oeuvre d'un procédé selon la revendication 7 comprenant : une unité centrale (UC) ; 30 au moins un registre (RSP) pour stocker un pointeur de pile (SP) ; - au moins un registre dédié (RHaut, RBas) pour stocker au moins une donnée choisie parmi : une donnée (SPHaut) indicative d'une valeurmaximale autorisée pour ledit pointeur de pile, et une donnée (SPBas) indicative d'une valeur minimale autorisée pour ledit pointeur de pile ; et - un module de traitement matériel (MTM) configuré pour effectuer une comparaison entre une valeur actuelle dudit pointeur de pile et ladite ou chaque dite donnée, et générer une exception de débordement de pile si ladite comparaison indique que ladite valeur actuelle dudit pointeur de pile est supérieure à ladite valeur maximale autorisée ou inférieure à ladite valeur minimale autorisée. 10
  11. 11. Processeur (P) pour la mise en oeuvre d'un procédé selon la revendication 7 comprenant : une unité centrale (UC) ; au moins un registre (RSP) pour stocker un pointeur de pile (SP) ; 15 - au moins un registre dédié (RHaut, RBas) pour stocker au moins une donnée choisie parmi : une donnée (SPHaut) indicative d'une valeur maximale autorisée pour ledit pointeur de pile, et une donnée (SPBas) indicative d'une valeur minimale autorisée pour ledit pointeur de pile ; et - au moins un registre dédié (SPMax, SPMin) pour stocker 20 au moins une donnée choisie parmi : une donnée indicative d'une valeur maximale prise par un pointeur de pile au cours de l'exécution d'un processus ou fil d'exécution en cours, et une donnée indicative d'une valeur minimale prise par ledit pointeur de pile au cours de l'exécution dudit processus ou fil d'exécution en cours; et 25 un module de traitement matériel (MTM) configuré pour mettre à jour lesdites données au cours de l'exécution dudit processus ou fil d'exécution.
FR1302695A 2013-11-22 2013-11-22 Procede de detection des debordements de pile et processeur pour la mise en oeuvre d'un tel procede Active FR3013869B1 (fr)

Priority Applications (2)

Application Number Priority Date Filing Date Title
FR1302695A FR3013869B1 (fr) 2013-11-22 2013-11-22 Procede de detection des debordements de pile et processeur pour la mise en oeuvre d'un tel procede
US14/550,834 US9513911B2 (en) 2013-11-22 2014-11-21 Method of detecting stack overflows and processor for implementing such a method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
FR1302695A FR3013869B1 (fr) 2013-11-22 2013-11-22 Procede de detection des debordements de pile et processeur pour la mise en oeuvre d'un tel procede

Publications (2)

Publication Number Publication Date
FR3013869A1 true FR3013869A1 (fr) 2015-05-29
FR3013869B1 FR3013869B1 (fr) 2016-01-01

Family

ID=50543079

Family Applications (1)

Application Number Title Priority Date Filing Date
FR1302695A Active FR3013869B1 (fr) 2013-11-22 2013-11-22 Procede de detection des debordements de pile et processeur pour la mise en oeuvre d'un tel procede

Country Status (2)

Country Link
US (1) US9513911B2 (fr)
FR (1) FR3013869B1 (fr)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10019395B2 (en) * 2013-11-08 2018-07-10 Nxp Usa, Inc. Processing system with stack management and method for stack management
FR3013869B1 (fr) * 2013-11-22 2016-01-01 Thales Sa Procede de detection des debordements de pile et processeur pour la mise en oeuvre d'un tel procede
US20160381050A1 (en) * 2015-06-26 2016-12-29 Intel Corporation Processors, methods, systems, and instructions to protect shadow stacks
US10394556B2 (en) 2015-12-20 2019-08-27 Intel Corporation Hardware apparatuses and methods to switch shadow stack pointers
US10430580B2 (en) 2016-02-04 2019-10-01 Intel Corporation Processor extensions to protect stacks during ring transitions
US9904485B2 (en) * 2016-03-31 2018-02-27 Intel Corporation Secure memory controller
US11237828B2 (en) * 2016-04-26 2022-02-01 Onnivation, LLC Secure matrix space with partitions for concurrent use
CN107391252A (zh) * 2016-05-16 2017-11-24 阿里巴巴集团控股有限公司 一种资源处理方法及装置
US10649786B2 (en) * 2016-12-01 2020-05-12 Cisco Technology, Inc. Reduced stack usage in a multithreaded processor
US10114573B1 (en) * 2017-04-26 2018-10-30 International Business Machines Corporation Dynamic reduction of stack-overflow errors in a recursive data-serialization algorithm
CN109558734B (zh) * 2018-11-28 2021-10-15 北京梆梆安全科技有限公司 一种堆栈安全性的检测方法及装置、移动设备
WO2022260661A1 (fr) * 2021-06-08 2022-12-15 Zeku, Inc. Circuit de surveillance de pointeur de pile servant à déclencher un service d'interruption au niveau d'un fichier de registre

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4835738A (en) * 1986-03-31 1989-05-30 Texas Instruments Incorporated Register stack for a bit slice processor microsequencer
WO1999009469A1 (fr) * 1997-08-18 1999-02-25 Koninklijke Philips Electronics N.V. Dispositif informatique oriente piles

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4530049A (en) * 1982-02-11 1985-07-16 At&T Bell Laboratories Stack cache with fixed size stack frames
US6526463B1 (en) * 2000-04-14 2003-02-25 Koninklijke Philips Electronics N.V. Dynamically selectable stack frame size for processor interrupts
EP1197847A3 (fr) * 2000-10-10 2003-05-21 Nazomi Communications Inc. Accélérateur Java en hardware avec machine à microcode
US10353797B2 (en) * 2006-12-29 2019-07-16 International Business Machines Corporation Using memory tracking data to inform a memory map tool
KR101334172B1 (ko) * 2007-01-05 2013-11-28 삼성전자주식회사 임베디드 시스템의 스택 오버플로우 방지 방법 및 장치
US7962729B2 (en) * 2009-01-05 2011-06-14 International Business Machines Corporation Dynamic runtime range checking of different types on a register using upper and lower bound value registers for the register
US9229721B2 (en) * 2012-09-10 2016-01-05 Qualcomm Incorporated Executing subroutines in a multi-threaded processing system
FR3013869B1 (fr) * 2013-11-22 2016-01-01 Thales Sa Procede de detection des debordements de pile et processeur pour la mise en oeuvre d'un tel procede

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4835738A (en) * 1986-03-31 1989-05-30 Texas Instruments Incorporated Register stack for a bit slice processor microsequencer
WO1999009469A1 (fr) * 1997-08-18 1999-02-25 Koninklijke Philips Electronics N.V. Dispositif informatique oriente piles

Also Published As

Publication number Publication date
US20150150024A1 (en) 2015-05-28
FR3013869B1 (fr) 2016-01-01
US9513911B2 (en) 2016-12-06

Similar Documents

Publication Publication Date Title
FR3013869A1 (fr) Procede de detection des debordements de pile et processeur pour la mise en oeuvre d&#39;un tel procede
US10162696B2 (en) Dependency monitoring
CN110187914B (zh) 应用开发方法、系统及装置
US7774636B2 (en) Method and system for kernel panic recovery
US20110276977A1 (en) Distributed workflow execution
FR2881239A1 (fr) Procede de gestion d&#39;acces a des ressources partagees dans un environnement multi-processeurs
FR2972545A1 (fr) Controle de flux d&#39;instruction commande par des instructions de programme
WO2016011129A1 (fr) Analyse de dépendance statique précise par l&#39;intermédiaire d&#39;une prédiction de type contexte d&#39;exécution
US8745622B2 (en) Standalone software performance optimizer system for hybrid systems
JP2021533487A (ja) 障害保護のための並列実行および関連プロセスの比較のためのシステムおよび方法
EP0637798A1 (fr) Procédé d&#39;analyse d&#39;interblocage dans un système d&#39;exploitation
FR2994290A1 (fr) Systeme de detection de modification d&#39;une pile d&#39;appel de sous-programme
CN108628726B (zh) Cpu状态信息记录方法和装置
FR2997774A1 (fr) Procede, dispositif et programme d&#39;ordinateur de placement de taches dans un systeme multi-cœurs
CN109885489B (zh) 驱动程序中数据竞争检测方法及装置
WO2013030612A1 (fr) Analyse de compétition de données avec filtrage de détection amélioré
EP1960934A1 (fr) Procede pour securiser l&#39;execution d&#39;un code logiciel en langage intermediaire dans un appareil portatif
EP1881404A1 (fr) Procédé de protection dynamique des données lors de l&#39;exécution d&#39;un code logiciel en langage intermédiaire dans un appareil numérique
CN108304313B (zh) 一种用于数据测试的装置、客户端及方法
EP2836913B1 (fr) Dispositif pour générer une signature à l&#39;exécution d&#39;une tâche de programme et méthode de comparaison de flots d&#39;exécution
US9904543B2 (en) Setting a build indicator to enable or disable a feature
US9158651B2 (en) Monitoring thread starvation using stack trace sampling and based on a total elapsed time
FR3025036B1 (fr) Procede de traitement automatique d&#39;un code source en vue de sa certification aeronautique; produit programme d&#39;ordinateur associe
CN108647113B (zh) 一种灾难恢复方法及服务器
US20180143839A1 (en) Conversion Tool for Moving from Block-Based Persistence to Byte-Based Persistence

Legal Events

Date Code Title Description
PLFP Fee payment

Year of fee payment: 3

PLFP Fee payment

Year of fee payment: 4

PLFP Fee payment

Year of fee payment: 5

PLFP Fee payment

Year of fee payment: 6

PLFP Fee payment

Year of fee payment: 7

PLFP Fee payment

Year of fee payment: 8

PLFP Fee payment

Year of fee payment: 9

PLFP Fee payment

Year of fee payment: 10

PLFP Fee payment

Year of fee payment: 11