Skip to content

Commit 72c7003

Browse files
[AUTO-CHERRYPICK] [Medium] Patch hvloader for CVE-2023-2650, CVE-2023-0465, CVE-2024-0727, CVE-2023-3817 and CVE-2023-5678 - branch main (#13017)
Co-authored-by: Sreenivasulu Malavathula (HCL Technologies Ltd) <v-smalavathu@microsoft.com>
1 parent f147480 commit 72c7003

7 files changed

Lines changed: 390 additions & 14 deletions

File tree

SPECS-SIGNED/hvloader-signed/hvloader-signed.spec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ popd
6969
/boot/efi/HvLoader.efi
7070

7171
%changelog
72-
* Mon Feb 24 2025 Kevin Lockwood <v-klockwood@microsoft.com> - 1.0.1-7
72+
* Tue Mar 04 2025 Sreeniavsulu Malavathula <v-smalavathu@microsoft.com> - 1.0.1-7
7373
- Update version for consistency with hvloader spec
7474

7575
* Mon Nov 25 2024 Zhichun Wan <zhichunwan@microsoft.com> - 1.0.1-6

SPECS/hvloader/CVE-2023-0465.patch

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
From 428bf81f66883513119c41b637d7daedc81d5fd6 Mon Sep 17 00:00:00 2001
2+
From: Sreenivasulu Malavathula <v-smalavathu@microsoft.com>
3+
Date: Fri, 28 Feb 2025 15:04:19 -0600
4+
Subject: [PATCH] Address CVE-2023-0465
5+
6+
---
7+
.../Library/OpensslLib/openssl/crypto/x509/x509_vfy.c | 11 +++++++++--
8+
1 file changed, 9 insertions(+), 2 deletions(-)
9+
10+
diff --git a/CryptoPkg/Library/OpensslLib/openssl/crypto/x509/x509_vfy.c b/CryptoPkg/Library/OpensslLib/openssl/crypto/x509/x509_vfy.c
11+
index 925fbb54..1dfe4f9f 100644
12+
--- a/CryptoPkg/Library/OpensslLib/openssl/crypto/x509/x509_vfy.c
13+
+++ b/CryptoPkg/Library/OpensslLib/openssl/crypto/x509/x509_vfy.c
14+
@@ -1649,18 +1649,25 @@ static int check_policy(X509_STORE_CTX *ctx)
15+
}
16+
/* Invalid or inconsistent extensions */
17+
if (ret == X509_PCY_TREE_INVALID) {
18+
- int i;
19+
+ int i, cbcalled = 0;
20+
21+
/* Locate certificates with bad extensions and notify callback. */
22+
- for (i = 1; i < sk_X509_num(ctx->chain); i++) {
23+
+ for (i = 0; i < sk_X509_num(ctx->chain); i++) {
24+
X509 *x = sk_X509_value(ctx->chain, i);
25+
26+
if (!(x->ex_flags & EXFLAG_INVALID_POLICY))
27+
continue;
28+
+ cbcalled = 1;
29+
if (!verify_cb_cert(ctx, x, i,
30+
X509_V_ERR_INVALID_POLICY_EXTENSION))
31+
return 0;
32+
}
33+
+ if (!cbcalled) {
34+
+ /* Should not be able to get here */
35+
+ X509err(X509_F_CHECK_POLICY, ERR_R_INTERNAL_ERROR);
36+
+ return 0;
37+
+ }
38+
+ /* The callback ignored the error so we return success */
39+
return 1;
40+
}
41+
if (ret == X509_PCY_TREE_FAILURE) {
42+
--
43+
2.45.2
44+

SPECS/hvloader/CVE-2023-2650.patch

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
From 40b086a29301476ae5a7fb50d0fbdb3236772dcf Mon Sep 17 00:00:00 2001
2+
From: Sreenivasulu Malavathula <v-smalavathu@microsoft.com>
3+
Date: Fri, 28 Feb 2025 14:38:52 -0600
4+
Subject: [PATCH] Address CVE-2023-2650
5+
6+
---
7+
.../openssl/crypto/objects/obj_dat.c | 19 +++++++++++++++++++
8+
1 file changed, 19 insertions(+)
9+
10+
diff --git a/CryptoPkg/Library/OpensslLib/openssl/crypto/objects/obj_dat.c b/CryptoPkg/Library/OpensslLib/openssl/crypto/objects/obj_dat.c
11+
index 7e8de727..d699915b 100644
12+
--- a/CryptoPkg/Library/OpensslLib/openssl/crypto/objects/obj_dat.c
13+
+++ b/CryptoPkg/Library/OpensslLib/openssl/crypto/objects/obj_dat.c
14+
@@ -428,6 +428,25 @@ int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name)
15+
first = 1;
16+
bl = NULL;
17+
18+
+ /*
19+
+ * RFC 2578 (STD 58) says this about OBJECT IDENTIFIERs:
20+
+ *
21+
+ * > 3.5. OBJECT IDENTIFIER values
22+
+ * >
23+
+ * > An OBJECT IDENTIFIER value is an ordered list of non-negative
24+
+ * > numbers. For the SMIv2, each number in the list is referred to as a
25+
+ * > sub-identifier, there are at most 128 sub-identifiers in a value,
26+
+ * > and each sub-identifier has a maximum value of 2^32-1 (4294967295
27+
+ * > decimal).
28+
+ *
29+
+ * So a legitimate OID according to this RFC is at most (32 * 128 / 7),
30+
+ * i.e. 586 bytes long.
31+
+ *
32+
+ * Ref: https://datatracker.ietf.org/doc/html/rfc2578#section-3.5
33+
+ */
34+
+ if (len > 586)
35+
+ goto err;
36+
+
37+
while (len > 0) {
38+
l = 0;
39+
use_bn = 0;
40+
--
41+
2.45.2
42+

SPECS/hvloader/CVE-2023-3817.patch

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
From 8c07fd169d27b4c1026a91425b834e43e7b32a96 Mon Sep 17 00:00:00 2001
2+
From: Sreenivasulu Malavathula <v-smalavathu@microsoft.com>
3+
Date: Fri, 28 Feb 2025 16:49:19 -0600
4+
Subject: [PATCH] Address CVE-2023-3817
5+
6+
---
7+
.../Library/OpensslLib/openssl/crypto/dh/dh_check.c | 11 +++++++++--
8+
1 file changed, 9 insertions(+), 2 deletions(-)
9+
10+
diff --git a/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_check.c b/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_check.c
11+
index 4ac169e7..8afa2640 100644
12+
--- a/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_check.c
13+
+++ b/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_check.c
14+
@@ -97,7 +97,7 @@ int DH_check_ex(const DH *dh)
15+
16+
int DH_check(const DH *dh, int *ret)
17+
{
18+
- int ok = 0, r;
19+
+ int ok = 0, r, q_good = 0;
20+
BN_CTX *ctx = NULL;
21+
BIGNUM *t1 = NULL, *t2 = NULL;
22+
23+
@@ -113,7 +113,14 @@ int DH_check(const DH *dh, int *ret)
24+
if (t2 == NULL)
25+
goto err;
26+
27+
- if (dh->q) {
28+
+ if (dh->q != NULL) {
29+
+ if (BN_ucmp(dh->p, dh->q) > 0)
30+
+ q_good = 1;
31+
+ else
32+
+ *ret |= DH_CHECK_INVALID_Q_VALUE;
33+
+ }
34+
+
35+
+ if (q_good) {
36+
if (BN_cmp(dh->g, BN_value_one()) <= 0)
37+
*ret |= DH_NOT_SUITABLE_GENERATOR;
38+
else if (BN_cmp(dh->g, dh->p) >= 0)
39+
--
40+
2.45.2
41+

SPECS/hvloader/CVE-2023-5678.patch

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
From 4b73edb6a6244abe110d850832aafc47c93b93e3 Mon Sep 17 00:00:00 2001
2+
From: Sreenivasulu Malavathula <v-smalavathu@microsoft.com>
3+
Date: Mon, 3 Mar 2025 15:59:36 -0600
4+
Subject: [PATCH] Address CVE-2024-0727
5+
6+
---
7+
.../OpensslLib/openssl/crypto/dh/dh_check.c | 22 +++++++++++++++++++
8+
.../OpensslLib/openssl/crypto/dh/dh_err.c | 4 +++-
9+
.../OpensslLib/openssl/crypto/dh/dh_key.c | 12 ++++++++++
10+
.../openssl/include/openssl/dherr.h | 4 +++-
11+
4 files changed, 40 insertions(+), 2 deletions(-)
12+
13+
diff --git a/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_check.c b/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_check.c
14+
index 8afa2640..8ea38586 100644
15+
--- a/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_check.c
16+
+++ b/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_check.c
17+
@@ -104,6 +104,15 @@ int DH_check(const DH *dh, int *ret)
18+
if (!DH_check_params(dh, ret))
19+
return 0;
20+
21+
+ *ret = 0;
22+
+
23+
+ /* Don't do any checks at all with an excessively large modulus */
24+
+ if (BN_num_bits(dh->p) > OPENSSL_DH_CHECK_MAX_MODULUS_BITS) {
25+
+ DHerr(DH_F_DH_CHECK, DH_R_MODULUS_TOO_LARGE);
26+
+ *ret = DH_CHECK_P_NOT_PRIME;
27+
+ return 0;
28+
+ }
29+
+
30+
ctx = BN_CTX_new();
31+
if (ctx == NULL)
32+
goto err;
33+
@@ -191,6 +200,19 @@ int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *ret)
34+
BN_CTX *ctx = NULL;
35+
36+
*ret = 0;
37+
+
38+
+ /* Don't do any checks at all with an excessively large modulus */
39+
+ if (BN_num_bits(dh->p) > OPENSSL_DH_CHECK_MAX_MODULUS_BITS) {
40+
+ DHerr(DH_F_DH_CHECK_PUB_KEY, DH_R_MODULUS_TOO_LARGE);
41+
+ *ret = DH_CHECK_P_NOT_PRIME | DH_CHECK_PUBKEY_INVALID;
42+
+ return 0;
43+
+ }
44+
+
45+
+ if (dh->q != NULL && BN_ucmp(dh->p, dh->q) < 0) {
46+
+ *ret |= DH_CHECK_INVALID_Q_VALUE | DH_CHECK_PUBKEY_INVALID;
47+
+ return 1;
48+
+ }
49+
+
50+
ctx = BN_CTX_new();
51+
if (ctx == NULL)
52+
goto err;
53+
diff --git a/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_err.c b/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_err.c
54+
index 7285587b..2b13e9aa 100644
55+
--- a/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_err.c
56+
+++ b/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_err.c
57+
@@ -1,6 +1,6 @@
58+
/*
59+
* Generated by util/mkerr.pl DO NOT EDIT
60+
- * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
61+
+ * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved.
62+
*
63+
* Licensed under the OpenSSL license (the "License"). You may not use
64+
* this file except in compliance with the License. You can obtain a copy
65+
@@ -19,6 +19,7 @@ static const ERR_STRING_DATA DH_str_functs[] = {
66+
{ERR_PACK(ERR_LIB_DH, DH_F_DH_BUILTIN_GENPARAMS, 0),
67+
"dh_builtin_genparams"},
68+
{ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK_EX, 0), "DH_check_ex"},
69+
+ {ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK_PUB_KEY, 0), "DH_check_pub_key"},
70+
{ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK_PARAMS_EX, 0), "DH_check_params_ex"},
71+
{ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK_PUB_KEY_EX, 0), "DH_check_pub_key_ex"},
72+
{ERR_PACK(ERR_LIB_DH, DH_F_DH_CMS_DECRYPT, 0), "dh_cms_decrypt"},
73+
@@ -81,6 +82,7 @@ static const ERR_STRING_DATA DH_str_reasons[] = {
74+
{ERR_PACK(ERR_LIB_DH, 0, DH_R_PARAMETER_ENCODING_ERROR),
75+
"parameter encoding error"},
76+
{ERR_PACK(ERR_LIB_DH, 0, DH_R_PEER_KEY_ERROR), "peer key error"},
77+
+ {ERR_PACK(ERR_LIB_DH, 0, DH_R_Q_TOO_LARGE), "q too large"},
78+
{ERR_PACK(ERR_LIB_DH, 0, DH_R_SHARED_INFO_ERROR), "shared info error"},
79+
{ERR_PACK(ERR_LIB_DH, 0, DH_R_UNABLE_TO_CHECK_GENERATOR),
80+
"unable to check generator"},
81+
diff --git a/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_key.c b/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_key.c
82+
index 117f2fa8..c77ce1b0 100644
83+
--- a/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_key.c
84+
+++ b/CryptoPkg/Library/OpensslLib/openssl/crypto/dh/dh_key.c
85+
@@ -114,6 +114,12 @@ static int generate_key(DH *dh)
86+
return 0;
87+
}
88+
89+
+ if (dh->q != NULL
90+
+ && BN_num_bits(dh->q) > OPENSSL_DH_MAX_MODULUS_BITS) {
91+
+ DHerr(DH_F_GENERATE_KEY, DH_R_Q_TOO_LARGE);
92+
+ return 0;
93+
+ }
94+
+
95+
ctx = BN_CTX_new();
96+
if (ctx == NULL)
97+
goto err;
98+
@@ -207,6 +213,12 @@ static int compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh)
99+
goto err;
100+
}
101+
102+
+ if (dh->q != NULL
103+
+ && BN_num_bits(dh->q) > OPENSSL_DH_MAX_MODULUS_BITS) {
104+
+ DHerr(DH_F_COMPUTE_KEY, DH_R_Q_TOO_LARGE);
105+
+ goto err;
106+
+ }
107+
+
108+
ctx = BN_CTX_new();
109+
if (ctx == NULL)
110+
goto err;
111+
diff --git a/CryptoPkg/Library/OpensslLib/openssl/include/openssl/dherr.h b/CryptoPkg/Library/OpensslLib/openssl/include/openssl/dherr.h
112+
index 916b3bed..c37e2106 100644
113+
--- a/CryptoPkg/Library/OpensslLib/openssl/include/openssl/dherr.h
114+
+++ b/CryptoPkg/Library/OpensslLib/openssl/include/openssl/dherr.h
115+
@@ -1,6 +1,6 @@
116+
/*
117+
* Generated by util/mkerr.pl DO NOT EDIT
118+
- * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
119+
+ * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved.
120+
*
121+
* Licensed under the OpenSSL license (the "License"). You may not use
122+
* this file except in compliance with the License. You can obtain a copy
123+
@@ -31,6 +31,7 @@ int ERR_load_DH_strings(void);
124+
# define DH_F_DHPARAMS_PRINT_FP 101
125+
# define DH_F_DH_BUILTIN_GENPARAMS 106
126+
# define DH_F_DH_CHECK_EX 121
127+
+# define DH_F_DH_CHECK_PUB_KEY 120
128+
# define DH_F_DH_CHECK_PARAMS_EX 122
129+
# define DH_F_DH_CHECK_PUB_KEY_EX 123
130+
# define DH_F_DH_CMS_DECRYPT 114
131+
@@ -81,6 +82,7 @@ int ERR_load_DH_strings(void);
132+
# define DH_R_NO_PRIVATE_VALUE 100
133+
# define DH_R_PARAMETER_ENCODING_ERROR 105
134+
# define DH_R_PEER_KEY_ERROR 111
135+
+# define DH_R_Q_TOO_LARGE 130
136+
# define DH_R_SHARED_INFO_ERROR 113
137+
# define DH_R_UNABLE_TO_CHECK_GENERATOR 121
138+
139+
--
140+
2.45.2
141+

SPECS/hvloader/CVE-2024-0727.patch

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
From 3f8f4f5d526a36d4636d0bfa8d249d1c00f5d9ec Mon Sep 17 00:00:00 2001
2+
From: Sreenivasulu Malavathula <v-smalavathu@microsoft.com>
3+
Date: Fri, 28 Feb 2025 16:31:38 -0600
4+
Subject: [PATCH] Address CVE-2024-0727
5+
6+
---
7+
.../OpensslLib/openssl/crypto/pkcs12/p12_add.c | 18 ++++++++++++++++++
8+
.../openssl/crypto/pkcs12/p12_mutl.c | 5 +++++
9+
.../openssl/crypto/pkcs12/p12_npas.c | 5 +++--
10+
.../OpensslLib/openssl/crypto/pkcs7/pk7_mime.c | 7 +++++--
11+
4 files changed, 31 insertions(+), 4 deletions(-)
12+
13+
diff --git a/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs12/p12_add.c b/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs12/p12_add.c
14+
index af184c86..64bdcf2d 100644
15+
--- a/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs12/p12_add.c
16+
+++ b/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs12/p12_add.c
17+
@@ -76,6 +76,12 @@ STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7)
18+
PKCS12_R_CONTENT_TYPE_NOT_DATA);
19+
return NULL;
20+
}
21+
+
22+
+ if (p7->d.data == NULL) {
23+
+ ERR_raise(ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR);
24+
+ return NULL;
25+
+ }
26+
+
27+
return ASN1_item_unpack(p7->d.data, ASN1_ITEM_rptr(PKCS12_SAFEBAGS));
28+
}
29+
30+
@@ -132,6 +138,12 @@ STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass,
31+
{
32+
if (!PKCS7_type_is_encrypted(p7))
33+
return NULL;
34+
+
35+
+ if (p7->d.encrypted == NULL) {
36+
+ ERR_raise(ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR);
37+
+ return NULL;
38+
+ }
39+
+
40+
return PKCS12_item_decrypt_d2i(p7->d.encrypted->enc_data->algorithm,
41+
ASN1_ITEM_rptr(PKCS12_SAFEBAGS),
42+
pass, passlen,
43+
@@ -159,6 +171,12 @@ STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12)
44+
PKCS12_R_CONTENT_TYPE_NOT_DATA);
45+
return NULL;
46+
}
47+
+
48+
+ if (p12->authsafes->d.data == NULL) {
49+
+ ERR_raise(ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR);
50+
+ return NULL;
51+
+ }
52+
+
53+
return ASN1_item_unpack(p12->authsafes->d.data,
54+
ASN1_ITEM_rptr(PKCS12_AUTHSAFES));
55+
}
56+
diff --git a/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs12/p12_mutl.c b/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs12/p12_mutl.c
57+
index 3658003f..a570d9f1 100644
58+
--- a/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs12/p12_mutl.c
59+
+++ b/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs12/p12_mutl.c
60+
@@ -93,6 +93,11 @@ static int pkcs12_gen_mac(PKCS12 *p12, const char *pass, int passlen,
61+
return 0;
62+
}
63+
64+
+ if (p12->authsafes->d.data == NULL) {
65+
+ ERR_raise(ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR);
66+
+ return 0;
67+
+ }
68+
+
69+
salt = p12->mac->salt->data;
70+
saltlen = p12->mac->salt->length;
71+
if (!p12->mac->iter)
72+
diff --git a/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs12/p12_npas.c b/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs12/p12_npas.c
73+
index 0334289a..13033763 100644
74+
--- a/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs12/p12_npas.c
75+
+++ b/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs12/p12_npas.c
76+
@@ -78,8 +78,9 @@ static int newpass_p12(PKCS12 *p12, const char *oldpass, const char *newpass)
77+
bags = PKCS12_unpack_p7data(p7);
78+
} else if (bagnid == NID_pkcs7_encrypted) {
79+
bags = PKCS12_unpack_p7encdata(p7, oldpass, -1);
80+
- if (!alg_get(p7->d.encrypted->enc_data->algorithm,
81+
- &pbe_nid, &pbe_iter, &pbe_saltlen))
82+
+ if (p7->d.encrypted == NULL
83+
+ || !alg_get(p7->d.encrypted->enc_data->algorithm,
84+
+ &pbe_nid, &pbe_iter, &pbe_saltlen))
85+
goto err;
86+
} else {
87+
continue;
88+
diff --git a/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs7/pk7_mime.c b/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs7/pk7_mime.c
89+
index 19e68681..0ecfd5df 100644
90+
--- a/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs7/pk7_mime.c
91+
+++ b/CryptoPkg/Library/OpensslLib/openssl/crypto/pkcs7/pk7_mime.c
92+
@@ -30,10 +30,13 @@ int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags)
93+
{
94+
STACK_OF(X509_ALGOR) *mdalgs;
95+
int ctype_nid = OBJ_obj2nid(p7->type);
96+
- if (ctype_nid == NID_pkcs7_signed)
97+
+ if (ctype_nid == NID_pkcs7_signed) {
98+
+ if (p7->d.sign == NULL)
99+
+ return 0;
100+
mdalgs = p7->d.sign->md_algs;
101+
- else
102+
+ } else {
103+
mdalgs = NULL;
104+
+ }
105+
106+
flags ^= SMIME_OLDMIME;
107+
108+
--
109+
2.45.2
110+

0 commit comments

Comments
 (0)