GnuTLS | tests/eagain-common.h: improve EAGAIN randomization logic (!2116)
Read-only notification of GnuTLS library development activities <[email protected]> Mon, 29 Jun 2026 15:53:34 +0000
| Newsgroups | gmane.comp.encryption.gpg.gnutls.devel |
|---|---|
| Message-ID | <[email protected]> |
--===============2678439028451559910== Content-Type: multipart/alternative; boundary="--==_mimepart_6a4294fed1baa_3775732241051194"; charset=UTF-8 Content-Transfer-Encoding: 7bit ----==_mimepart_6a4294fed1baa_3775732241051194 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Alexander Sosedkin created a merge request: https://gitlab.com/gnutls/gnutls/-/merge_requests/2116 Project:Branches: asosedkin/gnutls:tests-improve-eagain-randomization to gnutls/gnutls:master Author: Alexander Sosedkin <!-- Add a description of the new feature/bug fix. Reference any relevant bugs. --> * tests/eagain-common.h: improve EAGAIN randomization logic Before regressing in d821485782334c01a956ac9f5b1da97d4df4c573, it was a `static unsigned char rnd = 0; if (rnd++ % 2 == 0)`. Thus the pattern was a steady (0, 1, 0, 1, 0, 1, ...) for each caller, with no real randomization aside from the multithreaded scenarios, not even the starting position in the sequence. After regressing in d821485782334c01a956ac9f5b1da97d4df4c573, it became an `unsigned int rnd = time(0); if (rnd++ % 3 == 0)`, making it (0s for an entire second, 1s for another second, 1s for another second, ...) with the starting point of the sequence being the only randomness. At the same time, it clearly intended to be a (0, 1, 1, 0, 1, 1, ...) with a starting position randomization. This potentially overengineered `if (<boundary>) <reset>; rnd++ % 6 < 3` approach aims for a (0, 0, 0, 1, 1, 1, ...) with the starting sequence point randomization smudge and occasional hiccups on the second boundaries. The primary goal is to speed up the tests; the specific sequence is chosen to cover both the consecutives up to 3 and the transitions with the starting point evenly smudged in between the runs, while keeping the infrequent hiccups to allow for weirder patterns to appear. Signed-off-by: Alexander Sosedkin <[email protected]> ## Checklist * [x] Commits have `Signed-off-by:` with name/author being identical to the commit author * [ ] Code modified for feature * [ ] Test suite updated with functionality tests * [ ] Test suite updated with negative tests * [ ] Documentation updated / NEWS entry present (for non-trivial changes) ## Reviewer's checklist: * [ ] Any issues marked for closing are addressed * [ ] There is a test suite reasonably covering new functionality or modifications * [ ] Function naming, parameters, return values, types, etc., are consistent and according to `CONTRIBUTION.md` * [ ] This feature/change has adequate documentation added * [ ] No obvious mistakes in the code -- Reply to this email directly or view it on GitLab: https://gitlab.com/gnutls/gnutls/-/merge_requests/2116 You're receiving this email because of your account on gitlab.com. Unsubscribe from this thread: https://gitlab.com/-/namespace/17175643/sent_notifications/5-02s6hotns0ei5bcnp4qew53iw-a84t7/unsubscribe | Manage all notifications: https://gitlab.com/-/profile/notifications | Help: https://gitlab.com/help ----==_mimepart_6a4294fed1baa_3775732241051194 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www= .w3.org/TR/REC-html40/loose.dtd"> <html lang=3D"en" style=3D'--code-editor-font: var(--default-mono-font, "= GitLab Mono"), JetBrains Mono, Menlo, DejaVu Sans Mono, Liberation Mono, = Consolas, Ubuntu Mono, Courier New, andale mono, lucida console, monospac= e;'> <head> <meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type">= <title> GitLab </title> <style data-premailer=3D"ignore" type=3D"text/css"> a { color: #1068bf; } </style> <style>img { max-width: 100%; height: auto; } body { font-size: .875rem; } body { -webkit-text-shadow: hsla(0,0%,100%,.01) 0 0 1px; } body { font-family: "GitLab Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Ro= boto,"Noto Sans",Ubuntu,Cantarell,"Helvetica Neue",sans-serif,"Apple Colo= r Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"; font-size= : inherit; } </style> </head> <body style=3D'font-size: inherit; -webkit-text-shadow: hsla(0,0%,100%,.0= 1) 0 0 1px; font-family: "GitLab Sans",-apple-system,BlinkMacSystemFont,"= Segoe UI",Roboto,"Noto Sans",Ubuntu,Cantarell,"Helvetica Neue",sans-serif= ,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji= ";'> <div class=3D"content"> <p class=3D"details" style=3D"font-style: italic; color: #626168;"> <a href=3D"https://gitlab.com/asosedkin">Alexander Sosedkin</a> created a= merge request: <a href=3D"https://gitlab.com/gnutls/gnutls/-/merge_reque= sts/2116">!2116</a> </p> <div class=3D"branch"> Project:Branches: asosedkin/gnutls:tests-improve-eagain-randomization to = gnutls/gnutls:master </div> <div class=3D"author"> Author: Alexander Sosedkin </div> <div class=3D"assignee"> Assignees: = </div> <div class=3D"reviewer"> Reviewers: = </div> <div class=3D"md gl-mt-5" style=3D"position: relative; z-index: 1; color:= #3a383f; word-wrap: break-word; margin-top: 1rem;"> <ul dir=3D"auto" style=3D"text-align: initial; list-style-type: disc; mar= gin: 0px 0px 1rem; padding: 0;"> <li style=3D"margin-top: 0px; line-height: 1.6em; margin-left: 25px; padd= ing-left: 3px;">tests/eagain-common.h: improve EAGAIN randomization logic= </li> </ul> <p dir=3D"auto" style=3D"color: #3a383f; margin: 0px 0px 1rem;" align=3D"= initial">Before regressing in <a href=3D"https://gitlab.com/gnutls/gnutls= /-/commit/d821485782334c01a956ac9f5b1da97d4df4c573" title=3D"tests: eagai= n: moved to cmocka and enhanced for TLS1.3" class=3D"gfm gfm-commit has-t= ooltip" data-original=3D"d821485782334c01a956ac9f5b1da97d4df4c573" data-l= ink=3D"false" data-link-reference=3D"false" data-commit=3D"d821485782334c= 01a956ac9f5b1da97d4df4c573" data-project=3D"179611" data-project-path=3D"= gnutls/gnutls" data-container=3D"body" data-placement=3D"top" data-refere= nce-type=3D"commit" style=3D'font-family: "GitLab Mono", "JetBrains Mono"= , "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mon= o", "Courier New", "andale mono", "lucida console", monospace; font-varia= nt-ligatures: none; font-size: 95%; margin-top: 0px;'>d8214857</a>, it was a <code style=3D'font-size: 90%; color: #18171d; word-wrap: break-= word; background-color: #ececef; border-radius: .25rem; font-weight: inhe= rit; overflow-wrap: break-word; white-space: break-spaces; font-family: "= GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation = Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida c= onsole", monospace; font-variant-ligatures: none; word-break: keep-all; p= adding: 0.125rem 0.25rem;'>static unsigned char rnd =3D 0; if (rnd++ % 2 = =3D=3D 0)</code>. Thus the pattern was a steady (0, 1, 0, 1, 0, 1, ...) for each caller, with no real randomization aside from the multithreaded scenarios, not even the starting position in the sequence.</p> <p dir=3D"auto" style=3D"color: #3a383f; margin: 0px 0px 1rem;" align=3D"= initial">After regressing in <a href=3D"https://gitlab.com/gnutls/gnutls/= -/commit/d821485782334c01a956ac9f5b1da97d4df4c573" title=3D"tests: eagain= : moved to cmocka and enhanced for TLS1.3" class=3D"gfm gfm-commit has-to= oltip" data-original=3D"d821485782334c01a956ac9f5b1da97d4df4c573" data-li= nk=3D"false" data-link-reference=3D"false" data-commit=3D"d821485782334c0= 1a956ac9f5b1da97d4df4c573" data-project=3D"179611" data-project-path=3D"g= nutls/gnutls" data-container=3D"body" data-placement=3D"top" data-referen= ce-type=3D"commit" style=3D'font-family: "GitLab Mono", "JetBrains Mono",= "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono= ", "Courier New", "andale mono", "lucida console", monospace; font-varian= t-ligatures: none; font-size: 95%; margin-top: 0px;'>d8214857</a>, it became an <code style=3D'font-size: 90%; color: #18171d; word-wrap: br= eak-word; background-color: #ececef; border-radius: .25rem; font-weight: = inherit; overflow-wrap: break-word; white-space: break-spaces; font-famil= y: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberat= ion Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "luci= da console", monospace; font-variant-ligatures: none; word-break: keep-al= l; padding: 0.125rem 0.25rem;'>unsigned int rnd =3D time(0); if (rnd++ % = 3 =3D=3D 0)</code>, making it (0s for an entire second, 1s for another second, 1s for another second, .= ..) with the starting point of the sequence being the only randomness. At the same time, it clearly intended to be a (0, 1, 1, 0, 1, 1, ...) with a starting position randomization.</p> <p dir=3D"auto" style=3D"color: #3a383f; margin: 0px 0px 1rem;" align=3D"= initial">This potentially overengineered <code style=3D'font-size: 90%; color: #18171d; word-wrap: break-word; bac= kground-color: #ececef; border-radius: .25rem; margin-top: 0px; font-weig= ht: inherit; overflow-wrap: break-word; white-space: break-spaces; font-f= amily: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Lib= eration Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "= lucida console", monospace; font-variant-ligatures: none; word-break: kee= p-all; padding: 0.125rem 0.25rem;'>if (<boundary>) <reset>; r= nd++ % 6 < 3</code> approach aims for a (0, 0, 0, 1, 1, 1, ...) with the starting sequence point randomization smudge and occasional hiccups on the second boundaries. The primary goal is to speed up the tests; the specific sequence is chose= n to cover both the consecutives up to 3 and the transitions with the starting point evenly smudged in between the runs, while keeping the infrequent hiccups to allow for weirder patterns to appear.</p> <p dir=3D"auto" style=3D"color: #3a383f; margin: 0px 0px 1rem;" align=3D"= initial">Signed-off-by: Alexander Sosedkin <a href=3D"mailto:asosedkin@re= dhat.com" style=3D"margin-top: 0px;">[email protected]</a></p> <h2 id=3D"user-content-checklist" dir=3D"auto" style=3D"margin-top: 20px;= margin-bottom: 10px;" align=3D"initial">Checklist<a href=3D"#checklist" = aria-label=3D"Link to heading 'Checklist'" data-heading-content=3D"Checkl= ist" class=3D"anchor" style=3D"margin-top: 0px;"></a> </h2> <ul class=3D"task-list" dir=3D"auto" style=3D"text-align: initial; list-s= tyle-type: disc; margin: 0px 0px 1rem; padding: 0;"> <li class=3D"task-list-item" style=3D"margin-top: 0px; line-height: 1.6em= ; margin-left: 25px; padding-left: 3px; position: relative; min-height: 2= 2px; padding-inline-start: 32px; list-style-type: none; margin-inline-sta= rt: 0 !important;"> <input type=3D"checkbox" class=3D"task-list-item-checkbox" checked disabl= ed aria-label=3D"Check option: Commits have Signed-off-by: with name/auth= or being identical to the commit author" style=3D"margin-top: 0px; positi= on: absolute; inset-inline-start: 8px; inset-block-start: 3px; all: unset= ; display: block; width: 1rem; height: 1rem; cursor: pointer; box-sizing:= border-box; border-radius: .25rem; background-color: #ffffff; border: 1p= x solid #89888d;"> Commits have <code style=3D'font-size: 90%; color: #18= 171d; word-wrap: break-word; background-color: #ececef; border-radius: .2= 5rem; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans= Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "and= ale mono", "lucida console", monospace; font-variant-ligatures: none; whi= te-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padd= ing: 0.125rem 0.25rem;'>Signed-off-by:</code> with name/author being iden= tical to the commit author</li> <li class=3D"task-list-item" style=3D"line-height: 1.6em; margin-left: 25= px; padding-left: 3px; position: relative; min-height: 22px; padding-inli= ne-start: 32px; list-style-type: none; margin-inline-start: 0 !important;= "> <input type=3D"checkbox" class=3D"task-list-item-checkbox" disabled aria-= label=3D"Check option: Code modified for feature" style=3D"margin-top: 0p= x; position: absolute; inset-inline-start: 8px; inset-block-start: 3px; a= ll: unset; display: block; width: 1rem; height: 1rem; cursor: pointer; bo= x-sizing: border-box; border-radius: .25rem; background-color: #ffffff; b= order: 1px solid #89888d;"> Code modified for feature</li> <li class=3D"task-list-item" style=3D"line-height: 1.6em; margin-left: 25= px; padding-left: 3px; position: relative; min-height: 22px; padding-inli= ne-start: 32px; list-style-type: none; margin-inline-start: 0 !important;= "> <input type=3D"checkbox" class=3D"task-list-item-checkbox" disabled aria-= label=3D"Check option: Test suite updated with functionality tests" style= =3D"margin-top: 0px; position: absolute; inset-inline-start: 8px; inset-b= lock-start: 3px; all: unset; display: block; width: 1rem; height: 1rem; c= ursor: pointer; box-sizing: border-box; border-radius: .25rem; background= -color: #ffffff; border: 1px solid #89888d;"> Test suite updated with fun= ctionality tests</li> <li class=3D"task-list-item" style=3D"line-height: 1.6em; margin-left: 25= px; padding-left: 3px; position: relative; min-height: 22px; padding-inli= ne-start: 32px; list-style-type: none; margin-inline-start: 0 !important;= "> <input type=3D"checkbox" class=3D"task-list-item-checkbox" disabled aria-= label=3D"Check option: Test suite updated with negative tests" style=3D"m= argin-top: 0px; position: absolute; inset-inline-start: 8px; inset-block-= start: 3px; all: unset; display: block; width: 1rem; height: 1rem; cursor= : pointer; box-sizing: border-box; border-radius: .25rem; background-colo= r: #ffffff; border: 1px solid #89888d;"> Test suite updated with negative= tests</li> <li class=3D"task-list-item" style=3D"line-height: 1.6em; margin-left: 25= px; padding-left: 3px; position: relative; min-height: 22px; padding-inli= ne-start: 32px; list-style-type: none; margin-inline-start: 0 !important;= "> <input type=3D"checkbox" class=3D"task-list-item-checkbox" disabled aria-= label=3D"Check option: Documentation updated / NEWS entry present (for no= n-trivial changes)" style=3D"margin-top: 0px; position: absolute; inset-i= nline-start: 8px; inset-block-start: 3px; all: unset; display: block; wid= th: 1rem; height: 1rem; cursor: pointer; box-sizing: border-box; border-r= adius: .25rem; background-color: #ffffff; border: 1px solid #89888d;"> Do= cumentation updated / NEWS entry present (for non-trivial changes)</li> </ul> <h2 id=3D"user-content-reviewers-checklist" dir=3D"auto" style=3D"margin-= top: 20px; margin-bottom: 10px;" align=3D"initial">Reviewer's checklist:<= a href=3D"#reviewers-checklist" aria-label=3D"Link to heading 'Reviewer's= checklist:'" data-heading-content=3D"Reviewer's checklist:" class=3D"anc= hor" style=3D"margin-top: 0px;"></a> </h2> <ul class=3D"task-list" dir=3D"auto" style=3D"text-align: initial; list-s= tyle-type: disc; margin: 0px; padding: 0;"> <li class=3D"task-list-item" style=3D"margin-top: 0px; line-height: 1.6em= ; margin-left: 25px; padding-left: 3px; position: relative; min-height: 2= 2px; padding-inline-start: 32px; list-style-type: none; margin-inline-sta= rt: 0 !important;"> <input type=3D"checkbox" class=3D"task-list-item-checkbox" disabled aria-= label=3D"Check option: Any issues marked for closing are addressed" style= =3D"margin-top: 0px; position: absolute; inset-inline-start: 8px; inset-b= lock-start: 3px; all: unset; display: block; width: 1rem; height: 1rem; c= ursor: pointer; box-sizing: border-box; border-radius: .25rem; background= -color: #ffffff; border: 1px solid #89888d;"> Any issues marked for closi= ng are addressed</li> <li class=3D"task-list-item" style=3D"line-height: 1.6em; margin-left: 25= px; padding-left: 3px; position: relative; min-height: 22px; padding-inli= ne-start: 32px; list-style-type: none; margin-inline-start: 0 !important;= "> <input type=3D"checkbox" class=3D"task-list-item-checkbox" disabled aria-= label=3D"Check option: There is a test suite reasonably covering new func= tionality or modifications" style=3D"margin-top: 0px; position: absolute;= inset-inline-start: 8px; inset-block-start: 3px; all: unset; display: bl= ock; width: 1rem; height: 1rem; cursor: pointer; box-sizing: border-box; = border-radius: .25rem; background-color: #ffffff; border: 1px solid #8988= 8d;"> There is a test suite reasonably covering new functionality or modi= fications</li> <li class=3D"task-list-item" style=3D"line-height: 1.6em; margin-left: 25= px; padding-left: 3px; position: relative; min-height: 22px; padding-inli= ne-start: 32px; list-style-type: none; margin-inline-start: 0 !important;= "> <input type=3D"checkbox" class=3D"task-list-item-checkbox" disabled aria-= label=3D"Check option: Function naming, parameters, return values, types,= etc., are consistent and according to=E2=80=A6" style=3D"margin-top: 0px= ; position: absolute; inset-inline-start: 8px; inset-block-start: 3px; al= l: unset; display: block; width: 1rem; height: 1rem; cursor: pointer; box= -sizing: border-box; border-radius: .25rem; background-color: #ffffff; bo= rder: 1px solid #89888d;"> Function naming, parameters, return values, ty= pes, etc., are consistent and according to <code style=3D'font-size: 90%;= color: #18171d; word-wrap: break-word; background-color: #ececef; border= -radius: .25rem; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "= DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier= New", "andale mono", "lucida console", monospace; font-variant-ligatures= : none; white-space: pre-wrap; overflow-wrap: break-word; word-break: kee= p-all; padding: 0.125rem 0.25rem;'>CONTRIBUTION.md</code> </li> <li class=3D"task-list-item" style=3D"line-height: 1.6em; margin-left: 25= px; padding-left: 3px; position: relative; min-height: 22px; padding-inli= ne-start: 32px; list-style-type: none; margin-inline-start: 0 !important;= "> <input type=3D"checkbox" class=3D"task-list-item-checkbox" disabled aria-= label=3D"Check option: This feature/change has adequate documentation add= ed" style=3D"margin-top: 0px; position: absolute; inset-inline-start: 8px= ; inset-block-start: 3px; all: unset; display: block; width: 1rem; height= : 1rem; cursor: pointer; box-sizing: border-box; border-radius: .25rem; b= ackground-color: #ffffff; border: 1px solid #89888d;"> This feature/chang= e has adequate documentation added</li> <li class=3D"task-list-item" style=3D"line-height: 1.6em; margin-left: 25= px; padding-left: 3px; position: relative; min-height: 22px; padding-inli= ne-start: 32px; list-style-type: none; margin-inline-start: 0 !important;= "> <input type=3D"checkbox" class=3D"task-list-item-checkbox" disabled aria-= label=3D"Check option: No obvious mistakes in the code" style=3D"margin-t= op: 0px; position: absolute; inset-inline-start: 8px; inset-block-start: = 3px; all: unset; display: block; width: 1rem; height: 1rem; cursor: point= er; box-sizing: border-box; border-radius: .25rem; background-color: #fff= fff; border: 1px solid #89888d;"> No obvious mistakes in the code</li> </ul> </div> </div> <div class=3D"footer" style=3D"margin-top: 10px;"> <p style=3D"font-size: small; color: #626168;"> =E2=80=94 <br> Reply to this email directly or <a href=3D"https://gitlab.com/gnutls/gnut= ls/-/merge_requests/2116">view it on GitLab</a>. <br> You're receiving this email because of your account on <a target=3D"_blan= k" rel=3D"noopener noreferrer" href=3D"https://gitlab.com">gitlab.com</a>= . <a href=3D"https://gitlab.com/-/namespace/17175643/sent_notifications/5= -02s6hotns0ei5bcnp4qew53iw-a84t7/unsubscribe" target=3D"_blank" rel=3D"no= opener noreferrer">Unsubscribe</a> from this thread =C2=B7 <a href=3D"htt= ps://gitlab.com/-/profile/notifications" target=3D"_blank" rel=3D"noopene= r noreferrer" class=3D"mng-notif-link">Manage all notifications</a> =C2=B7= <a href=3D"https://gitlab.com/help" target=3D"_blank" rel=3D"noopener no= referrer" class=3D"help-link">Help</a> <span style=3D"color: transparent; font-size: 0; display: none; overflow:= hidden; opacity: 0; width: 0; height: 0; max-width: 0; max-height: 0;"> Notification message regarding https://gitlab.com/gnutls/gnutls/-/merge_r= equests/2116 at 1782748414 </span> <script type=3D"application/ld+json">{"@context":"http://schema.org","@ty= pe":"EmailMessage","action":{"@type":"ViewAction","name":"View Merge requ= est","url":"https://gitlab.com/gnutls/gnutls/-/merge_requests/2116"}}</sc= ript> </p> </div> </body> </html> ----==_mimepart_6a4294fed1baa_3775732241051194-- --===============2678439028451559910== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Gnutls-devel mailing list [email protected] http://lists.gnupg.org/mailman/listinfo/gnutls-devel --===============2678439028451559910==--