integ/security/openscap/debian/deb_folder/patches/OVAL-SEAP-Allocate-aligned-...

53 lines
1.9 KiB
Diff

From: Evgeny Kolesnikov <ekolesni@redhat.com>
Date: Thu, 28 Jul 2022 14:05:55 +0200
Subject: OVAL/SEAP: Allocate aligned memory in SEXP_rawval_lblk_new
The lblk pointer is affected by 2-bit LSB magic SEAP uses
for reference-counting. On 32-bit platforms it requires extra
alignment.
Origin: upstream, https://github.com/OpenSCAP/openscap/commit/13e04d95e1ddee11c5b76336df83aea26d9ff065
---
src/OVAL/probes/SEAP/sexp-value.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/src/OVAL/probes/SEAP/sexp-value.c b/src/OVAL/probes/SEAP/sexp-value.c
index b8b3ed6..baa2354 100644
--- a/src/OVAL/probes/SEAP/sexp-value.c
+++ b/src/OVAL/probes/SEAP/sexp-value.c
@@ -106,8 +106,10 @@ uintptr_t SEXP_rawval_lblk_new (uint8_t sz)
{
_A(sz < 16);
- struct SEXP_val_lblk *lblk = malloc(sizeof(struct SEXP_val_lblk));
- lblk->memb = malloc(sizeof(SEXP_t) * (1 << sz));
+ struct SEXP_val_lblk *lblk = oscap_aligned_malloc(
+ sizeof(struct SEXP_val_lblk),
+ SEXP_LBLK_ALIGN);
+ lblk->memb = malloc(sizeof(SEXP_t) * (1 << sz));
lblk->nxsz = ((uintptr_t)(NULL) & SEXP_LBLKP_MASK) | ((uintptr_t)sz & SEXP_LBLKS_MASK);
lblk->refs = 1;
@@ -517,8 +519,8 @@ void SEXP_rawval_lblk_free (uintptr_t lblkp, void (*func) (SEXP_t *))
func (lblk->memb + lblk->real);
}
- free(lblk->memb);
- free(lblk);
+ free(lblk->memb);
+ oscap_aligned_free(lblk);
if (next != NULL)
SEXP_rawval_lblk_free ((uintptr_t)next, func);
@@ -539,8 +541,8 @@ void SEXP_rawval_lblk_free1 (uintptr_t lblkp, void (*func) (SEXP_t *))
func (lblk->memb + lblk->real);
}
- free(lblk->memb);
- free(lblk);
+ free(lblk->memb);
+ oscap_aligned_free(lblk);
}
return;