Compare commits

..

10 Commits

Author SHA1 Message Date
openeuler-ci-bot
7d442638cf
!40 backport CVE-2024-3049
From: @xuchenc 
Reviewed-by: @xiangbudaomz 
Signed-off-by: @xiangbudaomz
2024-06-11 03:27:13 +00:00
xuchenchen
5829fdad15 backport CVE-2024-3049 2024-06-11 11:12:49 +08:00
openeuler-ci-bot
bdc2de7135
!30 pacemaker: Check snprintf return values
From: @bizhiyuan 
Reviewed-by: @bixiaoyan1 
Signed-off-by: @bixiaoyan1
2024-04-29 01:07:03 +00:00
bizhiyuan
90998aa79c pacemaker Check snprintf return values 2024-04-28 17:05:01 +08:00
openeuler-ci-bot
44dba1aa3e
!29 pacemaker: Use long format for crm_ticket -v
From: @bizhiyuan 
Reviewed-by: @jxy_git 
Signed-off-by: @jxy_git
2024-03-01 01:34:31 +00:00
bizhiyuan
e4f84c4de1 pacemaker: Use long format for crm_ticket -v 2024-02-29 16:48:10 +08:00
openeuler-ci-bot
3166cea438
!28 pacemaker: Don't add explicit error prefix in log
From: @bizhiyuan 
Reviewed-by: @jxy_git 
Signed-off-by: @jxy_git
2024-02-29 08:26:27 +00:00
bizhiyuan
a53c51af41 pacemaker: Don't add explicit error prefix in log 2024-02-29 16:04:39 +08:00
openeuler-ci-bot
def0bfbd73
!27 pacemaker: Remove const warning
From: @bizhiyuan 
Reviewed-by: @jxy_git 
Signed-off-by: @jxy_git
2024-02-20 09:13:34 +00:00
bizhiyuan
bd83bea522 pacemaker: Remove const warning 2024-02-20 16:42:53 +08:00
6 changed files with 343 additions and 2 deletions

View File

@ -0,0 +1,33 @@
From b448d6b97aefdce92d92c574e71a40111d9957aa Mon Sep 17 00:00:00 2001
From: bizhiyuan <bizhiyuan@kylinos.cn>
Date: Tue, 20 Feb 2024 15:52:19 +0800
Subject: [PATCH] Remove const warning
---
src/pacemaker.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/pacemaker.c b/src/pacemaker.c
index 4d8f2b5..5c4c1de 100644
--- a/src/pacemaker.c
+++ b/src/pacemaker.c
@@ -434,7 +434,6 @@ static int parse_ticket_state(struct ticket_config *tk, FILE *p)
GString *input = NULL;
char line[CHUNK_SIZE];
xmlDocPtr doc = NULL;
- xmlErrorPtr errptr;
int opts = XML_PARSE_COMPACT | XML_PARSE_NONET;
/* skip first two lines of output */
@@ -459,7 +458,7 @@ static int parse_ticket_state(struct ticket_config *tk, FILE *p)
doc = xmlReadDoc((const xmlChar *) input->str, NULL, NULL, opts);
if (doc == NULL) {
- errptr = xmlGetLastError();
+ const xmlError *errptr = xmlGetLastError();
if (errptr) {
tk_log_error("crm_ticket xml parse failed (domain=%d, level=%d, code=%d): %s",
errptr->domain, errptr->level,
--
2.25.1

View File

@ -0,0 +1,80 @@
From 98b4284d1701f2efec278b51f151314148bfe70e Mon Sep 17 00:00:00 2001
From: Jan Friesse <jfriesse@redhat.com>
Date: Wed, 21 Feb 2024 18:12:28 +0100
Subject: [PATCH] auth: Check result of gcrypt gcry_md_get_algo_dlen
When unknown hash is passed to gcry_md_get_algo_dlen 0 is returned. This
value is then used for memcmp so wrong hmac might be accepted as
correct.
Signed-off-by: Jan Friesse <jfriesse@redhat.com>
---
src/attr.c | 2 +-
src/auth.c | 16 +++++++++++++---
2 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/src/attr.c b/src/attr.c
index 44061e3..bc154f0 100644
--- a/src/attr.c
+++ b/src/attr.c
@@ -142,7 +142,7 @@ static int read_server_reply(
return -2;
}
len = ntohl(header->length);
- rv = tpt->recv(site, msg+len, len-sizeof(*header));
+ rv = tpt->recv(site, msg+sizeof(*header), len-sizeof(*header));
if (rv < 0) {
return -1;
}
diff --git a/src/auth.c b/src/auth.c
index 8f86b9a..a3b3d20 100644
--- a/src/auth.c
+++ b/src/auth.c
@@ -28,6 +28,11 @@ int calc_hmac(const void *data, size_t datalen,
{
static gcry_md_hd_t digest;
gcry_error_t err;
+ int hlen;
+
+ hlen = gcry_md_get_algo_dlen(hid);
+ if (!hlen)
+ return -1;
if (!digest) {
err = gcry_md_open(&digest, hid, GCRY_MD_FLAG_HMAC);
@@ -42,7 +47,7 @@ int calc_hmac(const void *data, size_t datalen,
}
}
gcry_md_write(digest, data, datalen);
- memcpy(result, gcry_md_read(digest, 0), gcry_md_get_algo_dlen(hid));
+ memcpy(result, gcry_md_read(digest, 0), hlen);
gcry_md_reset(digest);
return 0;
}
@@ -54,15 +59,20 @@ int verify_hmac(const void *data, size_t datalen,
{
unsigned char *our_hmac;
int rc;
+ int hlen;
+
+ hlen = gcry_md_get_algo_dlen(hid);
+ if (!hlen)
+ return -1;
- our_hmac = malloc(gcry_md_get_algo_dlen(hid));
+ our_hmac = malloc(hlen);
if (!our_hmac)
return -1;
rc = calc_hmac(data, datalen, hid, our_hmac, key, keylen);
if (rc)
goto out_free;
- rc = memcmp(our_hmac, hmac, gcry_md_get_algo_dlen(hid));
+ rc = memcmp(our_hmac, hmac, hlen);
out_free:
if (our_hmac)
--
2.23.0

View File

@ -24,7 +24,7 @@
%bcond_with run_build_tests
%bcond_with include_unit_test
%global release 1
%global release 6
## User and group to use for nonprivileged services (should be in sync with pacemaker)
%global uname hacluster
@ -48,6 +48,12 @@ Summary: Ticket Manager for Multi-site Clusters
License: GPL-2.0-or-later
Url: https://github.com/%{github_owner}/%{name}
Source0: https://github.com/%{github_owner}/%{name}/releases/download/v%{version}/%{name}-%{version}.tar.gz
Patch0: Remove-const-warning.patch
Patch1: pacemaker-Don-t-add-explicit-error-prefix-in-log.patch
Patch2: pacemaker-Use-long-format-for-crm_ticket-v.patch
Patch3: pacemaker-Check-snprintf-return-values.patch
Patch3000: backport-CVE-2024-3049.patch
# direct build process dependencies
BuildRequires: autoconf
@ -178,7 +184,7 @@ Automated tests for running Booth, ticket manager for multi-site clusters.
# BUILD #
%prep
%autosetup -n %{name}-%{version} -S git_am
%autosetup -n %{name}-%{version} -S git_am -p 1
%build
./autogen.sh
@ -296,6 +302,24 @@ VERBOSE=1 make check
%{_usr}/lib/ocf/resource.d/booth/sharedrsc
%changelog
* Tue Jun 11 2024 xuchenchen <xuchenchen@kylinos.cn> -1.1-6
- Type:CVES
- ID:CVE-2024-3049
- SUG:NA
- DESC:fix CVE-2024-3049
* Sun Apr 28 2024 bizhiyuan <bizhiyuan@kylinos.cn> - 1.1-5
- pacemaker Check snprintf return values
* Thu Feb 29 2024 bizhiyuan <bizhiyuan@kylinos.cn> - 1.1-4
- pacemaker: Use long format for crm_ticket -v
* Thu Feb 29 2024 bizhiyuan <bizhiyuan@kylinos.cn> - 1.1-3
- pacemaker: Don't add explicit error prefix in log
* Tue Feb 20 2024 bizhiyuan <bizhiyuan@kylinos.cn> - 1.1-2
- pacemaker: Remove const warning
* Fri Nov 17 2023 bizhiyuan <bizhiyuan@kylinos.cn> - 1.1-1
- Update to version 1.1

View File

@ -0,0 +1,124 @@
From 7e33a45d6898e06119dbe9dfd487f6c4923b48cb Mon Sep 17 00:00:00 2001
From: Jan Friesse <jfriesse@redhat.com>
Date: Tue, 14 Nov 2023 17:21:49 +0100
Subject: [PATCH 2/7] pacemaker: Check snprintf return values
crm_ticket command string is stored into static buffer and not checked
so it can be truncated without notice.
Solution would be to use dynamic buffer, but for now at least check
snprintf return value and return error when string was truncated.
Signed-off-by: Jan Friesse <jfriesse@redhat.com>
---
src/pacemaker.c | 39 ++++++++++++++++++++++++++++++++++-----
1 file changed, 34 insertions(+), 5 deletions(-)
diff --git a/src/pacemaker.c b/src/pacemaker.c
index 8ad3c69..80aa1a3 100644
--- a/src/pacemaker.c
+++ b/src/pacemaker.c
@@ -128,7 +128,7 @@ static int pcmk_write_ticket_atomic(struct ticket_config *tk, int grant)
/* The long format (--attr-value=) for attribute value is used instead of "-v",
* so that NO_ONE (which is -1) isn't seen as another option. */
- snprintf(cmd, COMMAND_MAX,
+ rv = snprintf(cmd, COMMAND_MAX,
"crm_ticket -t '%s' "
"%s --force "
"-S owner --attr-value=%" PRIi32 " "
@@ -142,6 +142,10 @@ static int pcmk_write_ticket_atomic(struct ticket_config *tk, int grant)
(int64_t)wall_ts(&tk->term_expires),
(int64_t)tk->current_term);
+ if (rv < 0 || rv >= COMMAND_MAX) {
+ log_error("pcmk_write_ticket_atomic: cannot format crm_ticket cmdline (probably too long)");
+ return -1;
+ }
rv = system(cmd);
log_debug("command: '%s' was executed", cmd);
if (rv != 0)
@@ -230,20 +234,34 @@ static int crm_ticket_set_int(const struct ticket_config *tk, const char *attr,
static int pcmk_set_attr(struct ticket_config *tk, const char *attr, const char *val)
{
char cmd[COMMAND_MAX];
+ int rv;
- snprintf(cmd, COMMAND_MAX,
+ rv = snprintf(cmd, COMMAND_MAX,
"crm_ticket -t '%s' -S '%s' --attr-value='%s'",
tk->name, attr, val);
+
+ if (rv < 0 || rv >= COMMAND_MAX) {
+ log_error("pcmk_set_attr: cannot format crm_ticket cmdline (probably too long)");
+ return -1;
+ }
+
return _run_crm_ticket(cmd);
}
static int pcmk_del_attr(struct ticket_config *tk, const char *attr)
{
char cmd[COMMAND_MAX];
+ int rv;
- snprintf(cmd, COMMAND_MAX,
+ rv = snprintf(cmd, COMMAND_MAX,
"crm_ticket -t '%s' -D '%s'",
tk->name, attr);
+
+ if (rv < 0 || rv >= COMMAND_MAX) {
+ log_error("pcmk_del_attr: cannot format crm_ticket cmdline (probably too long)");
+ return -1;
+ }
+
return _run_crm_ticket(cmd);
}
@@ -352,13 +370,18 @@ static int pcmk_get_attr(struct ticket_config *tk, const char *attr, const char
char cmd[COMMAND_MAX];
char line[BOOTH_ATTRVAL_LEN+1];
int rv = 0, pipe_rv;
+ int res;
FILE *p;
*vp = NULL;
- snprintf(cmd, COMMAND_MAX,
+ res = snprintf(cmd, COMMAND_MAX,
"crm_ticket -t '%s' -G '%s' --quiet",
tk->name, attr);
+ if (res < 0 || res >= COMMAND_MAX) {
+ log_error("pcmk_get_attr: cannot format crm_ticket cmdline (probably too long)");
+ return -1;
+ }
p = popen(cmd, "r");
if (p == NULL) {
@@ -483,16 +506,22 @@ static int pcmk_load_ticket(struct ticket_config *tk)
{
char cmd[COMMAND_MAX];
int rv = 0, pipe_rv;
+ int res;
FILE *p;
/* This here gets run during startup; testing that here means that
* normal operation won't be interrupted with that test. */
test_atomicity();
- snprintf(cmd, COMMAND_MAX,
+ res = snprintf(cmd, COMMAND_MAX,
"crm_ticket -t '%s' -q",
tk->name);
+ if (res < 0 || res >= COMMAND_MAX) {
+ log_error("pcmk_load_ticket: cannot format crm_ticket cmdline (probably too long)");
+ return -1;
+ }
+
p = popen(cmd, "r");
if (p == NULL) {
pipe_rv = errno;
--
2.33.0

View File

@ -0,0 +1,26 @@
From 26c9509bb96dbabf6bb4155f403944c7c5308cd4 Mon Sep 17 00:00:00 2001
From: Jan Friesse <jfriesse@redhat.com>
Date: Tue, 24 Oct 2023 16:40:54 +0200
Subject: [PATCH 1/4] pacemaker: Don't add explicit error prefix in log
Signed-off-by: Jan Friesse <jfriesse@redhat.com>
---
src/pacemaker.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pacemaker.c b/src/pacemaker.c
index 5c4c1de..cef8c41 100644
--- a/src/pacemaker.c
+++ b/src/pacemaker.c
@@ -145,7 +145,7 @@ static int pcmk_write_ticket_atomic(struct ticket_config *tk, int grant)
rv = system(cmd);
log_debug("command: '%s' was executed", cmd);
if (rv != 0)
- log_error("error: \"%s\" failed, %s", cmd, interpret_rv(rv));
+ log_error("\"%s\" failed, %s", cmd, interpret_rv(rv));
return rv;
}
--
2.25.1

View File

@ -0,0 +1,54 @@
From d649490dfb30e89dd725d200283f0b9848d24f61 Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Thu, 29 Feb 2024 16:42:28 +0800
Subject: [PATCH] pacemaker: Use long format for crm_ticket -v
---
src/pacemaker.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/src/pacemaker.c b/src/pacemaker.c
index cef8c41..8ad3c69 100644
--- a/src/pacemaker.c
+++ b/src/pacemaker.c
@@ -46,7 +46,7 @@ enum atomic_ticket_supported atomicity = UNKNOWN;
-#define COMMAND_MAX 1024
+#define COMMAND_MAX 2048
/** Determines whether the installed crm_ticket can do atomic ticket grants,
@@ -126,14 +126,14 @@ static int pcmk_write_ticket_atomic(struct ticket_config *tk, int grant)
int rv;
- /* The values are appended to "-v", so that NO_ONE
- * (which is -1) isn't seen as another option. */
+ /* The long format (--attr-value=) for attribute value is used instead of "-v",
+ * so that NO_ONE (which is -1) isn't seen as another option. */
snprintf(cmd, COMMAND_MAX,
"crm_ticket -t '%s' "
"%s --force "
- "-S owner -v%" PRIi32 " "
- "-S expires -v%" PRIi64 " "
- "-S term -v%" PRIi64,
+ "-S owner --attr-value=%" PRIi32 " "
+ "-S expires --attr-value=%" PRIi64 " "
+ "-S term --attr-value=%" PRIi64,
tk->name,
(grant > 0 ? "-g" :
grant < 0 ? "-r" :
@@ -232,7 +232,7 @@ static int pcmk_set_attr(struct ticket_config *tk, const char *attr, const char
char cmd[COMMAND_MAX];
snprintf(cmd, COMMAND_MAX,
- "crm_ticket -t '%s' -S '%s' -v '%s'",
+ "crm_ticket -t '%s' -S '%s' --attr-value='%s'",
tk->name, attr, val);
return _run_crm_ticket(cmd);
}
--
2.25.1