mORMot2 DailyLecture quotidienne des commits upstream

DNS gagne EDNS, une validation stricte et les résolveurs IPv6

Le client DNS annonce maintenant un payload UDP EDNS de 1232 octets, revient au format classique lorsque le serveur retourne FORMERR, accepte les ports de résolveur et les adresses IPv6, puis valide la question renvoyée et la source de la réponse avant d’analyser les enregistrements. L’implémentation a changé plusieurs fois dans ce lot : les utilisateurs DNS doivent donc prendre la build finale plutôt qu’une révision intermédiaire. TCachedValues.Exists est corrigé et testé, et les scopes DHCP émettent enfin leur nom de domaine configuré.

En bref

  • Passez à 2.4.16805 pour la série DNS complète ; les builds 2.4.16794 à 2.4.16804 contiennent des états intermédiaires du cache, d’EDNS, du parsing ou de la validation.
  • DnsQuery utilise EDNS avec 1232 octets par défaut, mémorise le fallback FORMERR et valide la question, le type, la classe, l’adresse source et le port source de la réponse.
  • Les définitions de résolveur acceptent maintenant une IPv4 avec port intégré et les adresses IPv6 ; DnsBuildQuestion expose une taille de payload EDNS optionnelle.
  • TCachedValues.Exists choisit maintenant le bon comparateur, et Exists/Add utilisent par défaut une fenêtre de cache sans expiration.
  • TDhcpState.AddRegularOptions envoie maintenant l’option DHCP 15 depuis Scope.DomainName, avec priorité conservée pour une règle par client.

Conseil de mise à jour

Les utilisateurs DNS doivent passer à la build 2.4.16805 et prendre toute la série. Ne vous arrêtez pas entre 2.4.16794 et 2.4.16804 : les commits successifs corrigent l’expiration du cache, le fallback EDNS FORMERR, la position de réponse, la décompression et la correspondance des réponses. Les utilisateurs de TCachedValues doivent quitter 2.4.16790 pour obtenir la correction du comparateur. Les serveurs DHCP utilisant Scope.DomainName doivent prendre le commit de tête au-dessus de 2.4.16805.

Build2.4.16790 → 2.4.16805
Commits17
Lignes+559 -370
Lecture6 min

16 sur 16 entrées · 17 commits upstream

Sujets
# Entrée Catégorie Unités
1 Élevée Les réponses DNS doivent correspondre au résolveur, au port et à la question DnsSendQuestionRaw accepte les adresses de résolveur IPv4 ou IPv6 et rejette les réponses UDP dont l’IP ou le port source diffère de l’endpoint demandé. DnsQuery décompresse et compare QName, QTYPE et QCLASS renvoyés avant ParseDnsResult, tandis que TDnsHeader.SetZ écrit maintenant Flags2 au lieu de Flags. Sécurité mormot.net.dns a415524a+69-62

net: several DNS fixes

Impact

Les réponses malformées, non correspondantes ou mal dirigées sont ignorées au profit du résolveur configuré suivant au lieu d’être analysées comme la réponse demandée. Les applications peuvent aussi interroger directement un serveur DNS IPv6.

API publique

  • DnsSendQuestionbehaviour-changed — Les endpoints de résolveur peuvent être IPv6, et les réponses UDP doivent correspondre à l’adresse et au port source.
  • DnsQuerybehaviour-changed — Une réponse réussie doit renvoyer les QName, QTYPE et QCLASS demandés avant que les enregistrements soient acceptés.
  • TDnsHeader.Zbehaviour-changed — Le setter met maintenant à jour le second octet de flags DNS où sont stockés les bits Z.

Arnaud Bouchez · 17:33 UTC · voir le commit sur GitHub →

2 Élevée La décompression DNS rejette les cycles de pointeurs et les noms trop longs La routine interne DnsDecompress mémorise maintenant le dernier offset de compression, exige que chaque pointeur recule, rejette les formes réservées et applique la limite DNS de 255 caractères avant la copie dans un buffer fixe. DnsParseString délègue à cette routine bornée. Sécurité mormot.net.dns ae18fe67+53-44

net: hardened DNS decompression logic

Impact

Les paquets DNS malformés ou hostiles ne peuvent plus maintenir le décompresseur dans un cycle ni dépasser son buffer temporaire. Les noms correctement compressés vers l’arrière restent décodés.

API publique

  • DnsParseStringbehaviour-changed — Les noms compressés cycliques, vers l’avant, réservés, hors limites ou trop longs échouent maintenant avec un résultat nul.

Arnaud Bouchez · 15:13 UTC · voir le commit sur GitHub →

3 Élevée Le fallback EDNS et la position des enregistrements sont corrigés DnsQuery revient maintenant à une requête RFC 1035 classique uniquement lorsqu’une requête EDNS retourne FORMERR, mémorise cette décision jusqu’à quatre minutes et sépare le parsing dans ParseDnsResult. DnsBuildQuestion retourne temporairement la limite du corps de question utilisée pour l’analyse. Correctifs mormot.net.dns 432444d3+63-52

net: several fixes to EDNS(0) support

Impact

Cela corrige la branche EDNS initiale, qui désactivait EDNS pour les erreurs autres que FORMERR et n’entrait pas correctement dans le fallback FORMERR. Des commits ultérieurs remplacent l’hypothèse temporaire sur la taille du corps ; cette build n’est donc pas un point d’arrêt.

Arnaud Bouchez · 12:40 UTC · voir le commit sur GitHub →

4 Élevée Le parsing DNS part de la question réellement renvoyée par le serveur ParseDnsResult détermine la position du premier enregistrement en décompressant le QName de la réponse au lieu de réutiliser la longueur de la requête locale. DnsQuery exige QuestionCount=1, et TCP accepte une réponse de la taille du header au lieu d’exiger davantage. Correctifs mormot.net.dns 3da23281+41-22

net: several DNS fixes

Impact

Les réponses dont la question renvoyée utilise un encodage réseau valide mais différent sont analysées depuis leur limite réelle. Les réponses avec un nombre de questions inattendu sont rejetées au lieu de décaler le parsing des enregistrements.

API publique

  • DnsQuerybehaviour-changed — Les réponses doivent contenir une question, et le parsing suit l’encodage de la question renvoyée.

Arnaud Bouchez · 13:52 UTC · voir le commit sur GitHub →

5 Élevée TCachedValues recherche avec le comparateur qui a trié le cache TCachedValues.Exists inverse les branches de comparaison erronées : un CustomCompare configuré est transmis à la bonne surcharge de FastFindPUtf8CharSorted, tandis que nil sélectionne la surcharge par défaut. Exists et Add gagnent aussi TixShr=0 par défaut, où zéro signifie sans purge périodique. Correctifs mormot.core.unicode 256cc2f4+13-11

core: fixed TCachedValues

Impact

Le cache public ajouté en 2.4.16790 peut maintenant retrouver les valeurs avec le comparateur par défaut ou personnalisé. Les utilisateurs expérimentaux doivent remplacer la build défectueuse avant de se fier à Exists ou à la suppression des doublons.

API publique

  • TCachedValues.Existsbehaviour-changed — La recherche utilise maintenant CustomCompare lorsqu’il est défini et le comparateur par défaut sinon ; TixShr vaut zéro par défaut.
  • TCachedValues.Addsignature-changed — TixShr devient optionnel avec zéro par défaut, représentant un cache sans expiration.

Arnaud Bouchez · 08:04 UTC · voir le commit sur GitHub →

6 Élevée DnsQuery active EDNS à 1232 octets et corrige le port DNS par défaut DnsQuery envoie d’abord une question avec OPT via la nouvelle globale DnsEdnsUdpSize, à 1232 octets par défaut et limitée au buffer de réception de 4 Ko. DnsSendQuestionRaw remplace le port de secours 389 par 53 lorsque Port est vide, et DnsQuery passe Res de out à var afin de finaliser les champs managés avant réutilisation. Nouveautés mormot.net.dns fb1b5127+81-38

net: implemented EDNS(0) advertised UDP payload size

Impact

La plupart des réponses DNS jusqu’à 1232 octets peuvent rester en UDP, ce qui réduit le fallback TCP. Les appels directs à DnsSendQuestion avec Port vide ciblent maintenant le bon service DNS, mais la logique EDNS initiale est corrigée par le commit suivant.

API publique

  • DnsEdnsUdpSizeadded — Globale publique contrôlant le payload UDP EDNS annoncé ; 1232 par défaut, zéro désactive EDNS et les valeurs sont bornées à 512..4096.
  • DnsQuerysignature-changed — Le paramètre TDnsResult passe de out à var ; les appels ordinaires avec une variable gardent la même syntaxe.

Arnaud Bouchez · 11:26 UTC · voir le commit sur GitHub →

7 Moyenne Les scopes DHCP envoient maintenant leur nom de domaine configuré TDhcpState.AddRegularOptions dans mormot.net.dhcp appelle maintenant AddOptionOnceU pour doDomainName avec Scope.DomainName. Les tests couvrent la valeur du scope et confirment qu’un domain-name demandé par une règle client est émis en premier et conserve donc la priorité. Correctifs mormot.net.dhcp 3ad9e8c1+29-0

net: DHCP server was never sending the domain-name option 15

Impact

Les clients recevant un bail de TDhcpServer peuvent maintenant obtenir l’option DHCP 15 depuis la configuration du scope. Les surcharges domain-name par client conservent leur comportement.

zen010101 · 17:43 UTC · voir le commit sur GitHub →

8 Moyenne Chaque entrée de résolveur peut porter son propre port DnsSendQuestionRaw interprète un unique deux-points dans Address comme un port IPv4 intégré, qui remplace l’argument Port séparé avant la configuration de TNetAddr. Le préfixe tcp@ est retiré avant cette analyse, et les clés de cache utilisent l’adresse nettoyée. Nouveautés mormot.net.dns c6756d1e+17-12

dns: allow 'ip:port' for DNS servers definitions

Impact

NameServers peut cibler des résolveurs comme 127.0.0.1:5353 sans modifier DnsPort global. Les littéraux IPv6 contenant plusieurs deux-points ne sont pas confondus avec cette syntaxe de port intégré.

À regarder

Revoyez la configuration des résolveurs personnalisés si elle utilise actuellement un port séparé ; il peut maintenant être défini par entrée NameServers.

API publique

  • DnsSendQuestionbehaviour-changed — Address accepte une adresse IPv4 avec une valeur :port intégrée.

Arnaud Bouchez · 13:07 UTC · voir le commit sur GitHub →

9 Moyenne DnsBuildQuestion peut ajouter un enregistrement EDNS OPT DnsBuildQuestion gagne un paramètre optionnel EdnsUdpSize. Une valeur non nulle ajoute un pseudo-enregistrement OPT, définit AdditionalCount, borne la taille UDP annoncée à 512..4096 et émet des RCODE étendu, version, flags et données d’option à zéro. Nouveautés mormot.net.dns cd234840+18-5

net: optional EDNS(0) support for DnsBuildQuestion()

Impact

Les appelants bas niveau peuvent construire des questions EDNS conformes sans assembler eux-mêmes l’enregistrement OPT. Les appels existants à trois arguments gardent le comportement DNS classique, car le nouveau paramètre vaut zéro par défaut.

À regarder

Revoyez les appels personnalisés à DnsBuildQuestion qui souhaitent de plus grandes réponses UDP ; définissez EdnsUdpSize et prenez les corrections DNS ultérieures.

API publique

  • DnsBuildQuestionsignature-changed — Ajoute EdnsUdpSize: cardinal = 0 optionnel et émet un pseudo-enregistrement OPT lorsqu’il est non nul.

Arnaud Bouchez · 09:08 UTC · voir le commit sur GitHub →

10 Moyenne Le transport DNS accepte les réponses brutes avant la politique de requête L’implémentation de transport devient DnsSendQuestionRaw, qui accepte les réponses UDP ou TCP structurellement valides indépendamment de RCODE ou du nombre de réponses. Le wrapper public DnsSendQuestion conserve l’ancienne politique de succès, tandis que l’insertion dans le cache no-TCP utilise maintenant la même période TixShr=6 que la recherche. Sous le capot mormot.net.dns f1b7dcaf+25-20

net: fixed and refactored DnsSendQuestion()

Impact

DnsQuery peut inspecter FORMERR et implémenter le fallback EDNS sans affaiblir le contrat public de requête brute. La suppression pendant une minute des serveurs qui échouent en TCP redevient effective.

Arnaud Bouchez · 09:29 UTC · voir le commit sur GitHub →

11 Moyenne DNS adopte le cache partagé pour les résolveurs TCP en échec Le stockage spécifique NoTcpSafe, NoTcpTix16 et NoTcpServers est remplacé par TCachedValues. TCachedValue et TCachedValues traitent aussi TixShr=0 comme une période sans expiration et documentent que leur record doit être initialement rempli de zéros. Sous le capot mormot.core.os+3 e8fd8b73+14-21

net: some DNS code simplification

Impact

Le comportement voulu reste un cache de 64 secondes des résolveurs qui ne répondent pas en TCP. Ce commit insère avec le nouveau TixShr=0 par défaut tandis que la recherche utilise 6 ; le cache reste donc inefficace jusqu’au refactor suivant de DnsSendQuestion, qui passe 6 à Add.

API publique

  • TCachedValue.Cachebehaviour-changed — TixShr=0 sélectionne maintenant une période de cache stable sans expiration au lieu de dériver une valeur de tick.

Arnaud Bouchez · 08:36 UTC · voir le commit sur GitHub →

12 Faible L’assembleur de recherche Intel et AMD réduit les registres et déplacements Plusieurs routines x86 et x64 de scan/recherche produisent -1 avec or au lieu de mov. L’implémentation x64 de FastFindPUtf8CharSorted est réorganisée pour éviter de sauvegarder r12/r13, mettre en cache le premier octet et comparer les suivants par adressage indexé. Performance mormot.core.base+1 1daae163+54-52

core: optimized Intel/AMD asm

Impact

Les scans fréquents et la recherche RawUtf8 triée utilisent moins d’instructions ou de registres sauvegardés sur les cibles Intel/AMD. Le comportement public et les valeurs de retour restent inchangés.

Arnaud Bouchez · 08:03 UTC · voir le commit sur GitHub →

13 Faible L’inversion 16 bits produit un code FPC plus simple bswap16 dans mormot.core.base reçoit maintenant son argument cardinal par valeur et calcule l’octet bas via ToByte avant de le décaler et de le combiner avec l’octet haut. La fonction reste inline lorsque disponible. Performance mormot.core.base e00798bb+6-5

core: optimized bswap16() function

Impact

FPC peut générer une séquence plus courte pour cette conversion d’endianness très fréquente. Le résultat reste identique pour les appelants existants.

API publique

  • bswap16signature-changed — Le paramètre scalaire passe de const cardinal à cardinal ; les appels ordinaires restent compatibles au niveau source.

Arnaud Bouchez · 17:31 UTC · voir le commit sur GitHub →

14 Faible La recherche ARP Linux utilise des constantes d’ordre réseau explicites GetRemoteMacAddress dans mormot.net.sock.posix.inc remplace les appels répétés à bswap16 par ETH_P_IP_LE, ETH_P_ARP_LE et des constantes ARP décalées lors de la construction et de la vérification des frames Ethernet brutes. TRawARP devient TRawArp dans l’include d’implémentation. Sous le capot mormot.net.sock 3b7a2a4f+17-15

net: refactored GetRemoteMacAddress() on Linux

Impact

La découverte d’adresse MAC distante sous Linux conserve le même format de paquet et les mêmes privilèges requis. Le changement supprime des inversions d’octets à l’exécution sans modifier les appels applicatifs.

Arnaud Bouchez · 17:33 UTC · voir le commit sur GitHub →

15 Faible Les opcodes des frames TFTP sont écrits directement en ordre réseau TTftpContext remplace les appels à bswap16 par des décalages constants lors de l’écriture des opcodes OACK, ACK, DAT et ERR. Les champs de séquence et de code d’erreur conservent leur conversion existante. Sous le capot mormot.net.tftp.client eee50161+6-6

net: minor TFTP logic refactoring

Impact

Les frames TFTP générées restent identiques ; il s’agit d’une petite simplification interne sans migration d’API ni de protocole.

Arnaud Bouchez · 17:31 UTC · voir le commit sur GitHub →

16 Faible La réparation du cache reçoit des tests directs d’ajout, recherche et reset test.core.base initialise TCachedValues et vérifie les recherches absentes, l’insertion unique, le rejet des doublons, la recherche réussie et Reset. Le test de police PDF accepte un hash supplémentaire dépendant de la plateforme. Tests test.core.base+1 816a0e19+24-5

tests: enhanced coverage

Impact

Le code de production ne change pas. Les tests protègent contre le défaut du comparateur par défaut corrigé au commit précédent et élargissent la variance de rendu PDF acceptée.

Arnaud Bouchez · 08:04 UTC · voir le commit sur GitHub →

Activité upstream commits par jour · 60 derniers jours
Commits977
Jours actifs44/60
Plus chargé2026-09-30
Pic60
2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 26 commits2026-08-28: 11 commits2026-08-29: 10 commits2026-08-30: 1 commit2026-08-31: 23 commits2026-09-01: 0 commits2026-09-02: 20 commits2026-09-03: 29 commits2026-09-04: 35 commits2026-09-05: 13 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 23 commits2026-09-09: 10 commits2026-09-10: 17 commits2026-09-11: 23 commits2026-09-12: 14 commits2026-09-13: 9 commits2026-09-14: 7 commits2026-09-15: 4 commits2026-09-16: 24 commits2026-09-17: 26 commits2026-09-18: 21 commits2026-09-19: 59 commits2026-09-20: 13 commits2026-09-21: 5 commits2026-09-22: 34 commits2026-09-23: 17 commits2026-09-24: 57 commits2026-09-25: 22 commits2026-09-26: 26 commits2026-09-27: 0 commits2026-09-28: 2 commits2026-09-29: 19 commits2026-09-30: 60 commits2026-10-01: 26 commits2026-10-02: 30 commits2026-10-03: 32 commits2026-10-04: 15 commits2026-10-05: 1 commit2026-10-06: 26 commits2026-10-07: 37 commits2026-10-08: 27 commits2026-10-09: 35 commits2026-10-10: 33 commits2026-10-11: 9 commits2026-10-12: 11 commits2026-10-13: 35 commits
2026-08-152026-10-13