From 194cdab0180b4fde7266e755c9160b236bc3202b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A9n=C3=A9dikt=20Tran?= <10796600+picnixz@users.noreply.github.com> Date: Sat, 15 Aug 2026 13:20:07 +0200 Subject: [PATCH 1/2] gh-155835: fix `digest_size` data race on BLAKE-2 objects --- .../Library/2026-08-15-13-18-01.gh-issue-155835.mlyLWp.rst | 2 ++ Modules/blake2module.c | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2026-08-15-13-18-01.gh-issue-155835.mlyLWp.rst diff --git a/Misc/NEWS.d/next/Library/2026-08-15-13-18-01.gh-issue-155835.mlyLWp.rst b/Misc/NEWS.d/next/Library/2026-08-15-13-18-01.gh-issue-155835.mlyLWp.rst new file mode 100644 index 00000000000000..9ef7d0694e66c3 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-08-15-13-18-01.gh-issue-155835.mlyLWp.rst @@ -0,0 +1,2 @@ +:mod:`hashlib`: Fix a data race when accessing :attr:`~hashlib.hash.digest_size` +on BLAKE-2 objects. Patch by Bénédikt Tran. diff --git a/Modules/blake2module.c b/Modules/blake2module.c index ac7265bb9d6836..be62192e05e38c 100644 --- a/Modules/blake2module.c +++ b/Modules/blake2module.c @@ -950,7 +950,10 @@ static PyObject * py_blake2b_get_digest_size(PyObject *op, void *Py_UNUSED(closure)) { Blake2Object *self = _Blake2Object_CAST(op); - Hacl_Hash_Blake2b_index info = hacl_get_blake2_info(self); + Hacl_Hash_Blake2b_index info; + HASHLIB_ACQUIRE_LOCK(self); + info = hacl_get_blake2_info(self); + HASHLIB_RELEASE_LOCK(self); return PyLong_FromLong(info.digest_length); } From 374bfeffcff7b5cb452907c4fb9aec6482fc7b31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A9n=C3=A9dikt=20Tran?= <10796600+picnixz@users.noreply.github.com> Date: Sat, 15 Aug 2026 13:38:15 +0200 Subject: [PATCH 2/2] Update blake2module.c --- Modules/blake2module.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Modules/blake2module.c b/Modules/blake2module.c index be62192e05e38c..c69c4259b12666 100644 --- a/Modules/blake2module.c +++ b/Modules/blake2module.c @@ -950,9 +950,8 @@ static PyObject * py_blake2b_get_digest_size(PyObject *op, void *Py_UNUSED(closure)) { Blake2Object *self = _Blake2Object_CAST(op); - Hacl_Hash_Blake2b_index info; HASHLIB_ACQUIRE_LOCK(self); - info = hacl_get_blake2_info(self); + Hacl_Hash_Blake2b_index info = hacl_get_blake2_info(self); HASHLIB_RELEASE_LOCK(self); return PyLong_FromLong(info.digest_length); }