selinux: simplify duplicate_policydb_cond_list() by using kmemdup()
authorOndrej Mosnacek <omosnace@redhat.com>
Tue, 30 Mar 2021 13:16:45 +0000 (15:16 +0200)
committerPaul Moore <paul@paul-moore.com>
Tue, 11 May 2021 01:31:58 +0000 (21:31 -0400)
We can do the allocation + copying of expr.nodes in one go using
kmemdup().

Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
Signed-off-by: Paul Moore <paul@paul-moore.com>
security/selinux/ss/conditional.c

index 1ef74c0..f6dfa9c 100644 (file)
@@ -628,7 +628,8 @@ static int cond_dup_av_list(struct cond_av_list *new,
 static int duplicate_policydb_cond_list(struct policydb *newp,
                                        struct policydb *origp)
 {
-       int rc, i, j;
+       int rc;
+       u32 i;
 
        rc = avtab_alloc_dup(&newp->te_cond_avtab, &origp->te_cond_avtab);
        if (rc)
@@ -648,12 +649,12 @@ static int duplicate_policydb_cond_list(struct policydb *newp,
                newp->cond_list_len++;
 
                newn->cur_state = orign->cur_state;
-               newn->expr.nodes = kcalloc(orign->expr.len,
-                                       sizeof(*newn->expr.nodes), GFP_KERNEL);
+               newn->expr.nodes = kmemdup(orign->expr.nodes,
+                               orign->expr.len * sizeof(*orign->expr.nodes),
+                               GFP_KERNEL);
                if (!newn->expr.nodes)
                        goto error;
-               for (j = 0; j < orign->expr.len; j++)
-                       newn->expr.nodes[j] = orign->expr.nodes[j];
+
                newn->expr.len = orign->expr.len;
 
                rc = cond_dup_av_list(&newn->true_list, &orign->true_list,