Skip to content

Commit

Permalink
ipc/sem: do not use ipc_rcu_free()
Browse files Browse the repository at this point in the history
Avoid using ipc_rcu_free, since it just re-finds the original structure
pointer.  For the pre-list-init failure path, there is no RCU needed,
since it was just allocated.  It can be directly freed.

Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Kees Cook <[email protected]>
Signed-off-by: Manfred Spraul <[email protected]>
Cc: Davidlohr Bueso <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
kees authored and torvalds committed Jul 12, 2017
1 parent f8dbe8d commit 1b4654e
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions ipc/sem.c
Original file line number Diff line number Diff line change
Expand Up @@ -258,13 +258,18 @@ static void merge_queues(struct sem_array *sma)
}
}

static void __sem_free(struct sem_array *sma)
{
kvfree(sma);
}

static void sem_rcu_free(struct rcu_head *head)
{
struct kern_ipc_perm *p = container_of(head, struct kern_ipc_perm, rcu);
struct sem_array *sma = container_of(p, struct sem_array, sem_perm);

security_sem_free(sma);
ipc_rcu_free(head);
__sem_free(sma);
}

/*
Expand Down Expand Up @@ -482,7 +487,7 @@ static int newary(struct ipc_namespace *ns, struct ipc_params *params)
sma->sem_perm.security = NULL;
retval = security_sem_alloc(sma);
if (retval) {
ipc_rcu_putref(&sma->sem_perm, ipc_rcu_free);
__sem_free(sma);
return retval;
}

Expand Down

0 comments on commit 1b4654e

Please sign in to comment.