From 4b252da0b520e9e223125f7e074962b6482b16a5 Mon Sep 17 00:00:00 2001 From: Hamid Ghaf <83242695+hghaf099@users.noreply.github.com> Date: Fri, 14 Oct 2022 23:15:15 +0000 Subject: [PATCH] backport of commit b48b38346f5016586b8eb61e1285081d50a1a4f9 --- changelog/17532.txt | 3 +++ vault/acl.go | 6 +++++- vault/policy.go | 11 +++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 changelog/17532.txt diff --git a/changelog/17532.txt b/changelog/17532.txt new file mode 100644 index 0000000000000..0a0926197c68c --- /dev/null +++ b/changelog/17532.txt @@ -0,0 +1,3 @@ +```release-note:bug +core: prevent memory leak when using control group factors in a policy +``` diff --git a/vault/acl.go b/vault/acl.go index fc9f353aa8afb..b81a83fd0757b 100644 --- a/vault/acl.go +++ b/vault/acl.go @@ -251,7 +251,11 @@ func NewACL(ctx context.Context, policies []*Policy) (*ACL, error) { if pc.Permissions.ControlGroup != nil { if len(pc.Permissions.ControlGroup.Factors) > 0 { if existingPerms.ControlGroup == nil { - existingPerms.ControlGroup = pc.Permissions.ControlGroup + cg, err := pc.Permissions.ControlGroup.Clone() + if err != nil { + return nil, err + } + existingPerms.ControlGroup = cg } else { for _, authz := range pc.Permissions.ControlGroup.Factors { existingPerms.ControlGroup.Factors = append(existingPerms.ControlGroup.Factors, authz) diff --git a/vault/policy.go b/vault/policy.go index e80d1657e98dd..7eaa50f0500b9 100644 --- a/vault/policy.go +++ b/vault/policy.go @@ -148,6 +148,17 @@ type ControlGroup struct { Factors []*ControlGroupFactor } +func (c *ControlGroup) Clone() (*ControlGroup, error) { + clonedControlGroup, err := copystructure.Copy(c) + if err != nil { + return nil, err + } + + cg := clonedControlGroup.(*ControlGroup) + + return cg, nil +} + type ControlGroupFactor struct { Name string Identity *IdentityFactor `hcl:"identity"`