mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
ipc: convert ipc_namespace.count from atomic_t to refcount_t
refcount_t type and corresponding API should be used instead of atomic_t when the variable is used as a reference counter. This allows to avoid accidental refcounter overflows that might lead to use-after-free situations. Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Elena Reshetova <[email protected]> Signed-off-by: Hans Liljestrand <[email protected]> Signed-off-by: Kees Cook <[email protected]> Signed-off-by: David Windsor <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Greg Kroah-Hartman <[email protected]> Cc: "Eric W. Biederman" <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Alexey Dobriyan <[email protected]> Cc: Serge Hallyn <[email protected]> Cc: <[email protected]> Cc: Davidlohr Bueso <[email protected]> Cc: Manfred Spraul <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
7483e5d420
commit
a2e0602c36
3 changed files with 6 additions and 5 deletions
|
|
@ -29,7 +29,7 @@ DEFINE_SPINLOCK(mq_lock);
|
|||
* and not CONFIG_IPC_NS.
|
||||
*/
|
||||
struct ipc_namespace init_ipc_ns = {
|
||||
.count = ATOMIC_INIT(1),
|
||||
.count = REFCOUNT_INIT(1),
|
||||
.user_ns = &init_user_ns,
|
||||
.ns.inum = PROC_IPC_INIT_INO,
|
||||
#ifdef CONFIG_IPC_NS
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ static struct ipc_namespace *create_ipc_ns(struct user_namespace *user_ns,
|
|||
goto fail_free;
|
||||
ns->ns.ops = &ipcns_operations;
|
||||
|
||||
atomic_set(&ns->count, 1);
|
||||
refcount_set(&ns->count, 1);
|
||||
ns->user_ns = get_user_ns(user_ns);
|
||||
ns->ucounts = ucounts;
|
||||
|
||||
|
|
@ -144,7 +144,7 @@ static void free_ipc_ns(struct ipc_namespace *ns)
|
|||
*/
|
||||
void put_ipc_ns(struct ipc_namespace *ns)
|
||||
{
|
||||
if (atomic_dec_and_lock(&ns->count, &mq_lock)) {
|
||||
if (refcount_dec_and_lock(&ns->count, &mq_lock)) {
|
||||
mq_clear_sbinfo(ns);
|
||||
spin_unlock(&mq_lock);
|
||||
mq_put_mnt(ns);
|
||||
|
|
|
|||
Loading…
Reference in a new issue