From d8874dd38f78454dd3a760617ebe8d9aa9270649 Mon Sep 17 00:00:00 2001
From: NIIBE Yutaka <gniibe@fsij.org>
Date: Fri, 10 Apr 2026 16:58:57 +0900
Subject: [PATCH] cipher:ecc: Fix decoding a point on Montgomery curve.

* cipher/ecc-misc.c (_gcry_ecc_mont_decodepoint): Fix the padding
mistake and add updating RAWMPILEN.

--

Reported by Calif.io in collaboration with Claude and Anthropic
Research.

GnuPG-bug-id: 8211
Fixes-commit: bbe15758c893dbf546416c1a6bccdad1ab000ad7
Suggested-by: Bronson Yen <bronson@calif.io>
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>

CVE: CVE-2026-41989
Upstream-Status: Backport [https://github.com/gpg/libgcrypt/commit/2d3d732c9bf87cc10729f69678dd9e6862f99fa3]

Signed-off-by: Leonid Iziumtsev <leonid.iziumtsev@est.tech>
---
 cipher/ecc-misc.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/cipher/ecc-misc.c b/cipher/ecc-misc.c
index 615b0df2..ab3799dc 100644
--- a/cipher/ecc-misc.c
+++ b/cipher/ecc-misc.c
@@ -438,7 +438,10 @@ _gcry_ecc_mont_decodepoint (gcry_mpi_t pk, mpi_ec_t ec, mpi_point_t result)
         *--p = *buf++;
 
       if (rawmpilen < nbytes)
-        memset (rawmpi + nbytes - rawmpilen, 0, nbytes - rawmpilen);
+        {
+          memset (rawmpi + rawmpilen, 0, nbytes - rawmpilen);
+          rawmpilen = nbytes;
+        }
     }
   else
     {
