Kstuff-lite

EchoStretch EchoStretch
Dépôt créer le : 31/01/2026
Release du : 11/09/2026 v1.10 – Kstuff Lite 1.10 Beta
Forks: 31 Watcher: 0 410
Choisir une liste...
FR

d'une teneur en poids de matières grasses égale ou supérieure à 50 %1.11-opt

1.11-opts'appuie sur le crypto-lite kfood existant, FSELF, NPDRM et chargeur travail. Il réduit les coûts de transition de l'UELF/KELF, rend la manipulation FPU/CR0 plus sûre et plus rapide et ajoute des diagnostics opt-in détaillés.

Faits marquants

  • Traductions en cache pour les objets du noyau fixe par processeur utilisés sur chaque UELF l'entrée, y compris les cartes qui traversent une limite de segment physique.
  • Narrow checked trap-frame et pile lit au lieu de copier le cadre inutilisé Préfixes.
  • Une simple transition debug-register restaurer et des instantanés de matériel sauté lorsque le thread actuel ne possède pas de registres de débogage actifs.
  • Une chaîne CR0 d'économie/TS-clear validée et sans défaut avec obligatoire gadgets per-kernel et pas d'antécédents de récupération CR0.
  • Entrée rapide de CR0 par une suite unique de KELF et restauration différée de CR0 à la sortie finale de KELF.
  • Sélection du temps d'exécution entreXSAVECetXSAVE, avec CPUID/XCR0 unique découverte et validation stricte de la zone de sauvegarde.
  • Résultats opt-in élargis et paramètres de défaillance grâce àKSTUFF_OBS=1.
  • Réutiliser le tuyau de noyau existant du chargeur par prosper0gdb.

Piège UELF et chemins de mémoire du noyau

Lecture de l'image contrôlée étroite

Les gestionnaires de pièges ne lisent maintenant que la partie d'un cadre stocké qu'ils utilisent. .fpkg,kekcall, et la manipulation des pièges utilitaires utilisent des aides à la copie de queue vérifiées; Les chemins de boîte aux lettres et de syscall utilisent des lectures et des écrits scalaires vérifiés. Où le retour adresse est déjà connue, mises à jour de traitement FSELFRSPetRIPdirectement au lieu de lire à nouveau la même valeur depuis la mémoire du noyau.

Cela réduitvirt2physappels et octets copiés sans affaiblir l'erreur la manipulation. Un retour de lecture ou d'écriture échouéEFAULTou laisse la demande chemin de repli normal au lieu de consommer l'état de lecture partielle.

Correction des caches de cartographie

Les objets stables par processeur suivants ont mis en cache des cartes virtuelles à physiques :

  • le cadre de piège étendu;
  • desjustreturncadre;
  • le pointeur courant danspcpu;
  • TSS.RSP0;
  • deswrmsrdomaine d'argumentation;
  • le CR0 entre et sort des fentes de poursuite.

Le cache peut représenter deux segments physiques, donc un objet traversant une page ou La cartographie des limites n'a pas besoin de retomber sur chaque accès. Initialisation coché, la publication est atomique, et une copie non cochée reste disponible si une cartographie ne peut pas être mise en cache.

L'installation de la table des pages de l'UELF désigne également l'utilisateur, l'auteur, le présent et drapeaux de grande page explicitement. Les entrées de cartes directes ne sont pas globales, en évitant Traductions TLB non sûres lors de la commutation entre le noyau et UELF CR3.

Expédition de la cryptographie

Pendant la classification, la fausse clé est récupérée une fois et transmise au XTS ou Gestionnaire HMAC. Cela supprime le premierhas_fake_key()recherche suivie d'une deuxièmeget_fake_key()regarde. XTS et HMAC cache sélection effectue également une scanner qui enregistre à la fois une entrée correspondante et la première entrée libre.

Les messages non manipulés ou non falsifiés conservent le chemin original du noyau et sont liés les chaînes de message sont toujours traversées correctement. Snapshot lecture échecs sont compte et échoue en toute sécurité.

Transitions des registres de déboguement

La restauration du registre de débogage entre maintenant dans la queue vérifiée du noyau cpu_switchla mise en oeuvre et la restauration de DR0, DR1, DR2, DR3, DR6 et DR7 transition gadget unique. Chaque disposition du noyau utilise sa propre entrée validée.

Avant d'installer un point de veille, le code vérifiePCB_DBREGS. Si le drapeau est clair, le thread ne possède pas live hardware debug-register état, donc une impasse l'instantané matériel est ignoré et l'état sauvegardé est initialisé comme désactivé. Les drapeaux PCB sont accessibles comme un champ 32 bits, et le retour restaure à la fois l'ancien les registres et le drapeau de propriété original si l'installation échoue.

KELF 8-octets écrit aussi utiliser un scalairemov [rdi], raxau lieu de configurationrep movsbpour chaque mise à jour d'un mot q.

Manipulation FPU et CR0

Entrée CR0

UELF crypto utilise les instructions SIMD et doit préserver l'état du noyau FPU pendant dégagement temporaireCR0.TS. Le chemin d'entrée est un KELF spécifique au noyau chaîne: elle mono-étapesmov_rax_cr0, capture le résultat#DB, efface TS, commits la nouvelle valeur, et enregistre les trois états sans délibérément causant une deuxième faute XSAVE/FXSAVE. Défaut d'armer ou de valider cette chaîne rapporté directement; il n'y a pas de recul de la capture de CR0.

La chaîne empoisonne et transfère un compact0x60-octet résultat bloc, puis valide les valeurs enregistrées, effacées et engagées. Une inadéquation restaure TS si possible et signale un échec au lieu de faire confiance à l'état partiel.

Entrée rapide et restauration différée

UELF arme une suite KELF à un seul coup et effectue une yield(); KELF réinitialise le crochet avant d'exécuter la chaîne CR0. Cela contourne les gadget de retour générique. L'adresse de poursuite fixe et sa cartographie physique est mise en cache après la première utilisation.

AprèsXRSTOR, la restauration CR0 est reportée jusqu'àuelf_fpu_finish(), juste avant le terminal UELFHLT. KELF restaure ensuite CR0 et continue à travers la sortie finale normale. Les utilisateurs de FPU imbriqués partagent la paire externe de sauvegarde/restauration, donc ils n'ajoutent pas de transitions CR0 ou XSAVE supplémentaires.

Sélection du mode XSAVE

La découverte CPUID et XCR0 est effectuée une fois par instance UELF. Avant d'utiliser instruction de sauvegarde architecturale, le code vérifie:

  • Le CPUID expose les feuilles0xD;
  • le CPU et OS exposent XSAVE/OSXSAVE;
  • x87 et SSE sont activés dans XCR0;
  • XCR0 ne contient que les composants d'état signalés par le CPUID;
  • CPUID.(D,0):EBXest dans le minimum architectural, le maximum déclaré, et le tampon local aligné à 4096 octets.

XSAVECest sélectionné lorsqueCPUID.(D,1):EAX[1]la publicité; sinon le code utilisationsXSAVE. Restaurer toujours les utilisationsXRSTOR.XSAVEOPTn'est pas délibérément utilisé parce que le tampon de scratch n'est pas garanti pour contenir le même propriétaire État précédent. Une configuration inutilisable désactive à la place l'entrée FPU de déborder le tampon ou d'exécuter une instruction non étayée.

success0gdb chargeuse handoff

Le chargeur passe prospère0gdb une structure bootstrap en version contenant son descripteurs de tubes de lecture/écriture existants et adresse du tube du noyau. prospère0gdb réutiliser ce primitif au lieu d'affecter et de résoudre un autre tuyau. Les plus âgévictim_pktoptsABI reste reconnu pour les appelants qui ne fournissent pas la magie du bootstrap.

Observabilité

Construire avec les métriques et le lecteur de débogage activé:

export PS5_PAYLOAD_SDK=/opt/ps5-payload-sdk
KSTUFF_OBS=1 ./ci-ps5-kstuff-ldr.sh

Une construction normale maintient les compteurs supplémentaires hors des sentiers chauds:

./ci-ps5-kstuff-ldr.sh

Les mesures ajoutées couvrent:

  • Les entrées UELF, les pannes de cadre vérifiées et les cycles d'entrée total/max;
  • les appels de gadget, les échecs, les réductions de lecture des résultats et les cycles;
  • copies scalaires et en vrac du noyau;
  • lecture d'instantanés cryptographiques, défaillances et cycles;
  • cartographie des succès, des ratés et des retombées;
  • debug-registrer lit, écrit, chaînes à simple transition, et sauté les instantanés;
  • CR0 bras d'entrée rapide/restauration différée, défaillances, utilisation de caches à crochets, et coût des bras;
  • FPU entrée/sortie, XSAVE/XSAVEC/XRSTOR compte, défaillances et coût du cycle.

ps5-kstuff/debug-reader.cimprime ces compteurs de l'observation partagée zone. Les mesures sont destinées à des parcours de comparaison; elles ajoutent des frais généraux de mesure et ne devraient pas être utilisés comme numéros de libération-performance.

Contributeurs GitHub

EchoStretch
EchoStretch
4 contributions
john-tornblom
john-tornblom
205 contributions
SiSTR0
SiSTR0
1 contributions
sunnyqeen
sunnyqeen
3 contributions
idlesauce
idlesauce
2 contributions
drakmor
drakmor
99 contributions
sleirsgoevy
sleirsgoevy
174 contributions
cheburek3000
cheburek3000
2 contributions
tihmstar
tihmstar
2 contributions
AstolfoKawaii
AstolfoKawaii
1 contributions
ItsAllAboutTheCode
ItsAllAboutTheCode
1 contributions
PaulJenkin
PaulJenkin
1 contributions