APPLIED: [SRU Focal/Hirsute/Impish/hwe-5.8/oem-5.10/oem-5.13 1/1] memcg: enable accounting of ipc resources

Stefan Bader stefan.bader at canonical.com
Mon Oct 11 13:09:14 UTC 2021


On 28.09.21 20:56, Thadeu Lima de Souza Cascardo wrote:
> From: Vasily Averin <vvs at virtuozzo.com>
> 
> When user creates IPC objects it forces kernel to allocate memory for
> these long-living objects.
> 
> It makes sense to account them to restrict the host's memory consumption
> from inside the memcg-limited container.
> 
> This patch enables accounting for IPC shared memory segments, messages
> semaphores and semaphore's undo lists.
> 
> Link: https://lkml.kernel.org/r/d6507b06-4df6-78f8-6c54-3ae86e3b5339@virtuozzo.com
> Signed-off-by: Vasily Averin <vvs at virtuozzo.com>
> Reviewed-by: Shakeel Butt <shakeelb at google.com>
> Cc: Alexander Viro <viro at zeniv.linux.org.uk>
> Cc: Alexey Dobriyan <adobriyan at gmail.com>
> Cc: Andrei Vagin <avagin at gmail.com>
> Cc: Borislav Petkov <bp at alien8.de>
> Cc: Borislav Petkov <bp at suse.de>
> Cc: Christian Brauner <christian.brauner at ubuntu.com>
> Cc: Dmitry Safonov <0x7f454c46 at gmail.com>
> Cc: "Eric W. Biederman" <ebiederm at xmission.com>
> Cc: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
> Cc: "H. Peter Anvin" <hpa at zytor.com>
> Cc: Ingo Molnar <mingo at redhat.com>
> Cc: "J. Bruce Fields" <bfields at fieldses.org>
> Cc: Jeff Layton <jlayton at kernel.org>
> Cc: Jens Axboe <axboe at kernel.dk>
> Cc: Jiri Slaby <jirislaby at kernel.org>
> Cc: Johannes Weiner <hannes at cmpxchg.org>
> Cc: Kirill Tkhai <ktkhai at virtuozzo.com>
> Cc: Michal Hocko <mhocko at kernel.org>
> Cc: Oleg Nesterov <oleg at redhat.com>
> Cc: Roman Gushchin <guro at fb.com>
> Cc: Serge Hallyn <serge at hallyn.com>
> Cc: Tejun Heo <tj at kernel.org>
> Cc: Thomas Gleixner <tglx at linutronix.de>
> Cc: Vladimir Davydov <vdavydov.dev at gmail.com>
> Cc: Yutian Yang <nglaive at gmail.com>
> Cc: Zefan Li <lizefan.x at bytedance.com>
> Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
> Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
> (backported from commit 18319498fdd4cdf8c1c2c48cd432863b1f915d6f)
> [cascardo: some kvmalloc were replaced by kmalloc]
> CVE-2021-3759
> Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo at canonical.com>
> ---

Applied to hirsute:linux/master-next. Thanks.

-Stefan

>   ipc/msg.c | 2 +-
>   ipc/sem.c | 9 +++++----
>   ipc/shm.c | 2 +-
>   3 files changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/ipc/msg.c b/ipc/msg.c
> index 6e6c8e0c9380..8ded6b8f10a2 100644
> --- a/ipc/msg.c
> +++ b/ipc/msg.c
> @@ -147,7 +147,7 @@ static int newque(struct ipc_namespace *ns, struct ipc_params *params)
>   	key_t key = params->key;
>   	int msgflg = params->flg;
>   
> -	msq = kvmalloc(sizeof(*msq), GFP_KERNEL);
> +	msq = kvmalloc(sizeof(*msq), GFP_KERNEL_ACCOUNT);
>   	if (unlikely(!msq))
>   		return -ENOMEM;
>   
> diff --git a/ipc/sem.c b/ipc/sem.c
> index 7d9c06b0ad6e..d3b9b73cd9ca 100644
> --- a/ipc/sem.c
> +++ b/ipc/sem.c
> @@ -511,7 +511,7 @@ static struct sem_array *sem_alloc(size_t nsems)
>   	if (nsems > (INT_MAX - sizeof(*sma)) / sizeof(sma->sems[0]))
>   		return NULL;
>   
> -	sma = kvzalloc(struct_size(sma, sems, nsems), GFP_KERNEL);
> +	sma = kvzalloc(struct_size(sma, sems, nsems), GFP_KERNEL_ACCOUNT);
>   	if (unlikely(!sma))
>   		return NULL;
>   
> @@ -1852,7 +1852,7 @@ static inline int get_undo_list(struct sem_undo_list **undo_listp)
>   
>   	undo_list = current->sysvsem.undo_list;
>   	if (!undo_list) {
> -		undo_list = kzalloc(sizeof(*undo_list), GFP_KERNEL);
> +		undo_list = kzalloc(sizeof(*undo_list), GFP_KERNEL_ACCOUNT);
>   		if (undo_list == NULL)
>   			return -ENOMEM;
>   		spin_lock_init(&undo_list->lock);
> @@ -1937,7 +1937,7 @@ static struct sem_undo *find_alloc_undo(struct ipc_namespace *ns, int semid)
>   	rcu_read_unlock();
>   
>   	/* step 2: allocate new undo structure */
> -	new = kzalloc(sizeof(struct sem_undo) + sizeof(short)*nsems, GFP_KERNEL);
> +	new = kzalloc(sizeof(struct sem_undo) + sizeof(short)*nsems, GFP_KERNEL_ACCOUNT);
>   	if (!new) {
>   		ipc_rcu_putref(&sma->sem_perm, sem_rcu_free);
>   		return ERR_PTR(-ENOMEM);
> @@ -2001,7 +2001,8 @@ static long do_semtimedop(int semid, struct sembuf __user *tsops,
>   	if (nsops > ns->sc_semopm)
>   		return -E2BIG;
>   	if (nsops > SEMOPM_FAST) {
> -		sops = kvmalloc_array(nsops, sizeof(*sops), GFP_KERNEL);
> +		sops = kvmalloc_array(nsops, sizeof(*sops),
> +				      GFP_KERNEL_ACCOUNT);
>   		if (sops == NULL)
>   			return -ENOMEM;
>   	}
> diff --git a/ipc/shm.c b/ipc/shm.c
> index e25c7c6106bc..fce0b7b12939 100644
> --- a/ipc/shm.c
> +++ b/ipc/shm.c
> @@ -619,7 +619,7 @@ static int newseg(struct ipc_namespace *ns, struct ipc_params *params)
>   			ns->shm_tot + numpages > ns->shm_ctlall)
>   		return -ENOSPC;
>   
> -	shp = kvmalloc(sizeof(*shp), GFP_KERNEL);
> +	shp = kvmalloc(sizeof(*shp), GFP_KERNEL_ACCOUNT);
>   	if (unlikely(!shp))
>   		return -ENOMEM;
>   
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20211011/a8798719/attachment.sig>


More information about the kernel-team mailing list