summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Dudka <kdudka@redhat.com>2020-08-31 17:57:52 +0200
committerAndreas Gruenbacher <agruenba@redhat.com>2020-08-31 18:33:04 +0200
commitcad5d69545765e00715d0cb0c88a3b4c20a59c1e (patch)
tree97c90a5d7615136e83435f975051f024bfbc5f69
parente3c35dd9df33203b604e74d6e1e2219217ad5a2d (diff)
downloadacl-cad5d69545765e00715d0cb0c88a3b4c20a59c1e.tar.gz
__acl_create_entry_obj: do not break strict aliasing rules
... to avoid SIGSEGV with link-time optimisation enabled Bug: https://bugzilla.redhat.com/1873975
-rw-r--r--libacl/acl_create_entry.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/libacl/acl_create_entry.c b/libacl/acl_create_entry.c
index 4143078..b948d98 100644
--- a/libacl/acl_create_entry.c
+++ b/libacl/acl_create_entry.c
@@ -26,7 +26,7 @@
acl_entry_obj *
__acl_create_entry_obj(acl_obj *acl_obj_p)
{
- acl_entry_obj *entry_obj_p;
+ acl_entry_obj *entry_obj_p, *prev;
if (acl_obj_p->aprealloc == acl_obj_p->aprealloc_end) {
entry_obj_p = new_obj_p(acl_entry);
@@ -39,10 +39,11 @@ __acl_create_entry_obj(acl_obj *acl_obj_p)
acl_obj_p->aused++;
/* Insert at the end of the entry ring */
- entry_obj_p->eprev = acl_obj_p->aprev;
+ prev = acl_obj_p->aprev;
+ entry_obj_p->eprev = prev;
entry_obj_p->enext = (acl_entry_obj *)acl_obj_p;
- entry_obj_p->eprev->enext = entry_obj_p;
- entry_obj_p->enext->eprev = entry_obj_p;
+ prev->enext = entry_obj_p;
+ acl_obj_p->aprev = entry_obj_p;
entry_obj_p->econtainer = acl_obj_p;
init_acl_entry_obj(*entry_obj_p);