Agir maintenantpeut affecter un système en productionLe payload brut ne contient aucun marqueur superseded_by. La plage à éviter repose sur les diffs consécutifs intégrés, qui corrigent clairement des commits antérieurs de cette même édition. Le merge DHCP laisse mormot.commit-num.inc à 16805 : la révision recommandée est donc plus récente que la build numérotée sans changer sa version affichée.
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.
16 sur 16 entrées · 17 commits upstream
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.
Mise à jour recommandée
Mettez à niveau les applications utilisant mormot.net.dns avec des résolveurs externes et testez toute configuration IPv6 ou de port non standard.
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.
Unités
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.
Mise à jour recommandée
Mettez à niveau les services qui analysent les réponses de serveurs DNS non fiables et conservez des cas de compression malformée dans les tests de protocole.
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.
Unités
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.
Unités
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.
Unités
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.
Mise à jour recommandée
Mettez à niveau tout code ayant adopté TCachedValues depuis 2.4.16790 et retirez les contournements locaux des branches de comparateur après avoir retesté les modes par défaut et personnalisé.
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.
Unités
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.
Unités
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.
Mise à jour recommandée
Mettez à niveau les serveurs DHCP qui définissent Scope.DomainName et vérifiez que les clients reçoivent l’option 15 après renouvellement du bail.
Unités
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.
Unités
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.
Unités
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.
Unités
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.
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.
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.
Unités
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.
Unités
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.
Unités
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.