mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
[PATCH] Fix ipc entries removal
Fix two issuses related to ipc_ids->entries freeing. 1. When freeing ipc namespace we need to free entries allocated with ipc_init_ids(). 2. When removing old entries in grow_ary() ipc_rcu_putref() may be called on entries set to &ids->nullentry earlier in ipc_init_ids(). This is almost impossible without namespaces, but with them this situation becomes possible. Found during OpenVZ testing after obvious leaks in beancounters. Signed-off-by: Pavel Emelianov <[email protected]> Cc: Kirill Korotaev <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
733b72c31e
commit
c7e12b8389
5 changed files with 16 additions and 1 deletions
12
ipc/util.h
12
ipc/util.h
|
|
@ -83,6 +83,18 @@ void* ipc_rcu_alloc(int size);
|
|||
void ipc_rcu_getref(void *ptr);
|
||||
void ipc_rcu_putref(void *ptr);
|
||||
|
||||
static inline void __ipc_fini_ids(struct ipc_ids *ids,
|
||||
struct ipc_id_ary *entries)
|
||||
{
|
||||
if (entries != &ids->nullentry)
|
||||
ipc_rcu_putref(entries);
|
||||
}
|
||||
|
||||
static inline void ipc_fini_ids(struct ipc_ids *ids)
|
||||
{
|
||||
__ipc_fini_ids(ids, ids->entries);
|
||||
}
|
||||
|
||||
struct kern_ipc_perm* ipc_get(struct ipc_ids* ids, int id);
|
||||
struct kern_ipc_perm* ipc_lock(struct ipc_ids* ids, int id);
|
||||
void ipc_lock_by_ptr(struct kern_ipc_perm *ipcp);
|
||||
|
|
|
|||
Loading…
Reference in a new issue