All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luis Chamberlain <mcgrof@kernel.org>
To: Vasily Averin <vvs@virtuozzo.com>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	Vlastimil Babka <vbabka@suse.cz>, NeilBrown <neilb@suse.de>,
	Michal Hocko <mhocko@suse.com>
Cc: Roman Gushchin <roman.gushchin@linux.dev>,
	Linux MM <linux-mm@kvack.org>,
	netdev@vger.kernel.org, "David S. Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>, Tejun Heo <tj@kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Eric Dumazet <edumazet@google.com>,
	Kees Cook <keescook@chromium.org>,
	Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>,
	David Ahern <dsahern@kernel.org>,
	linux-kernel@vger.kernel.org, kernel@openvz.org
Subject: Re: [PATCH RFC] net: memcg accounting for veth devices
Date: Mon, 28 Feb 2022 06:36:58 -0800	[thread overview]
Message-ID: <YhzeCkXEvga7+o/A@bombadil.infradead.org> (raw)
In-Reply-To: <a5e09e93-106d-0527-5b1e-48dbf3b48b4e@virtuozzo.com>

On Mon, Feb 28, 2022 at 10:17:16AM +0300, Vasily Averin wrote:
> Following one-liner running inside memcg-limited container consumes
> huge number of host memory and can trigger global OOM.
> 
> for i in `seq 1 xxx` ; do ip l a v$i type veth peer name vp$i ; done
> 
> Patch accounts most part of these allocations and can protect host.
> ---[cut]---
> It is not polished, and perhaps should be splitted.
> obviously it affects other kind of netdevices too.
> Unfortunately I'm not sure that I will have enough time to handle it properly
> and decided to publish current patch version as is.
> OpenVz workaround it by using per-container limit for number of
> available netdevices, but upstream does not have any kind of
> per-container configuration.
> ------

Should this just be a new ucount limit on kernel/ucount.c and have veth
use something like inc_ucount(current_user_ns(), current_euid(), UCOUNT_VETH)?

This might be abusing ucounts though, not sure, Eric?

  Luis
> 
> Signed-off-by: Vasily Averin <vvs@virtuozzo.com>
> ---
>  drivers/net/veth.c    | 2 +-
>  fs/kernfs/mount.c     | 2 +-
>  fs/proc/proc_sysctl.c | 3 ++-
>  net/core/neighbour.c  | 4 ++--
>  net/ipv4/devinet.c    | 2 +-
>  net/ipv6/addrconf.c   | 6 +++---
>  6 files changed, 10 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/net/veth.c b/drivers/net/veth.c
> index 354a963075c5..6e0b4a9d0843 100644
> --- a/drivers/net/veth.c
> +++ b/drivers/net/veth.c
> @@ -1307,7 +1307,7 @@ static int veth_alloc_queues(struct net_device *dev)
>  	struct veth_priv *priv = netdev_priv(dev);
>  	int i;
> -	priv->rq = kcalloc(dev->num_rx_queues, sizeof(*priv->rq), GFP_KERNEL);
> +	priv->rq = kcalloc(dev->num_rx_queues, sizeof(*priv->rq), GFP_KERNEL_ACCOUNT);
>  	if (!priv->rq)
>  		return -ENOMEM;
> diff --git a/fs/kernfs/mount.c b/fs/kernfs/mount.c
> index cfa79715fc1a..2881aeeaa880 100644
> --- a/fs/kernfs/mount.c
> +++ b/fs/kernfs/mount.c
> @@ -391,7 +391,7 @@ void __init kernfs_init(void)
>  {
>  	kernfs_node_cache = kmem_cache_create("kernfs_node_cache",
>  					      sizeof(struct kernfs_node),
> -					      0, SLAB_PANIC, NULL);
> +					      0, SLAB_PANIC | SLAB_ACCOUNT, NULL);
>  	/* Creates slab cache for kernfs inode attributes */
>  	kernfs_iattrs_cache  = kmem_cache_create("kernfs_iattrs_cache",
> diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
> index 7d9cfc730bd4..e20ce8198a44 100644
> --- a/fs/proc/proc_sysctl.c
> +++ b/fs/proc/proc_sysctl.c
> @@ -1333,7 +1333,8 @@ struct ctl_table_header *__register_sysctl_table(
>  		nr_entries++;
>  	header = kzalloc(sizeof(struct ctl_table_header) +
> -			 sizeof(struct ctl_node)*nr_entries, GFP_KERNEL);
> +			 sizeof(struct ctl_node)*nr_entries,
> +			 GFP_KERNEL_ACCOUNT);
>  	if (!header)
>  		return NULL;
> diff --git a/net/core/neighbour.c b/net/core/neighbour.c
> index ec0bf737b076..66a4445421f1 100644
> --- a/net/core/neighbour.c
> +++ b/net/core/neighbour.c
> @@ -1665,7 +1665,7 @@ struct neigh_parms *neigh_parms_alloc(struct net_device *dev,
>  	struct net *net = dev_net(dev);
>  	const struct net_device_ops *ops = dev->netdev_ops;
> -	p = kmemdup(&tbl->parms, sizeof(*p), GFP_KERNEL);
> +	p = kmemdup(&tbl->parms, sizeof(*p), GFP_KERNEL_ACCOUNT);
>  	if (p) {
>  		p->tbl		  = tbl;
>  		refcount_set(&p->refcnt, 1);
> @@ -3728,7 +3728,7 @@ int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p,
>  	char neigh_path[ sizeof("net//neigh/") + IFNAMSIZ + IFNAMSIZ ];
>  	char *p_name;
> -	t = kmemdup(&neigh_sysctl_template, sizeof(*t), GFP_KERNEL);
> +	t = kmemdup(&neigh_sysctl_template, sizeof(*t), GFP_KERNEL_ACCOUNT);
>  	if (!t)
>  		goto err;
> diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
> index fba2bffd65f7..47523fe5b891 100644
> --- a/net/ipv4/devinet.c
> +++ b/net/ipv4/devinet.c
> @@ -2566,7 +2566,7 @@ static int __devinet_sysctl_register(struct net *net, char *dev_name,
>  	struct devinet_sysctl_table *t;
>  	char path[sizeof("net/ipv4/conf/") + IFNAMSIZ];
> -	t = kmemdup(&devinet_sysctl, sizeof(*t), GFP_KERNEL);
> +	t = kmemdup(&devinet_sysctl, sizeof(*t), GFP_KERNEL_ACCOUNT);
>  	if (!t)
>  		goto out;
> diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
> index f927c199a93c..9d903342bc41 100644
> --- a/net/ipv6/addrconf.c
> +++ b/net/ipv6/addrconf.c
> @@ -358,7 +358,7 @@ static int snmp6_alloc_dev(struct inet6_dev *idev)
>  	if (!idev->stats.icmpv6dev)
>  		goto err_icmp;
>  	idev->stats.icmpv6msgdev = kzalloc(sizeof(struct icmpv6msg_mib_device),
> -					   GFP_KERNEL);
> +					   GFP_KERNEL_ACCOUNT);
>  	if (!idev->stats.icmpv6msgdev)
>  		goto err_icmpmsg;
> @@ -382,7 +382,7 @@ static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
>  	if (dev->mtu < IPV6_MIN_MTU)
>  		return ERR_PTR(-EINVAL);
> -	ndev = kzalloc(sizeof(struct inet6_dev), GFP_KERNEL);
> +	ndev = kzalloc(sizeof(struct inet6_dev), GFP_KERNEL_ACCOUNT);
>  	if (!ndev)
>  		return ERR_PTR(err);
> @@ -7023,7 +7023,7 @@ static int __addrconf_sysctl_register(struct net *net, char *dev_name,
>  	struct ctl_table *table;
>  	char path[sizeof("net/ipv6/conf/") + IFNAMSIZ];
> -	table = kmemdup(addrconf_sysctl, sizeof(addrconf_sysctl), GFP_KERNEL);
> +	table = kmemdup(addrconf_sysctl, sizeof(addrconf_sysctl), GFP_KERNEL_ACCOUNT);
>  	if (!table)
>  		goto out;
> -- 
> 2.25.1
> 

  reply	other threads:[~2022-02-28 14:37 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-28  7:17 [PATCH RFC] net: memcg accounting for veth devices Vasily Averin
2022-02-28 14:36 ` Luis Chamberlain [this message]
2022-03-01 18:09   ` Shakeel Butt
2022-03-01 18:28     ` Luis Chamberlain
2022-03-01 20:50       ` Eric W. Biederman
2022-03-01 21:25         ` Luis Chamberlain
2022-03-01 21:31           ` Luis Chamberlain
2022-03-02 14:43           ` Eric W. Biederman
2022-03-02 21:52             ` Luis Chamberlain
2022-03-02 13:30         ` King, Colin
2022-04-11  9:40     ` problem with accounting of allocations called from __net_init hooks Vasily Averin
2022-04-17  6:39       ` [PATCH memcg RFC] net: set proper memcg for net_init hooks allocations Vasily Averin
2022-04-21 15:56         ` Shakeel Butt
2022-04-22 20:01           ` Vasily Averin
2022-04-22 20:09             ` Vasily Averin
2022-04-22 20:22               ` Shakeel Butt
2022-04-23  7:56                 ` [PATCH] " Vasily Averin
2022-04-23  7:56                   ` Vasily Averin
2022-04-23  9:39                   ` kernel test robot
2022-04-23  9:39                     ` kernel test robot
2022-04-23  9:39                   ` kernel test robot
2022-04-23  9:39                     ` kernel test robot
2022-04-23 10:31                   ` kernel test robot
2022-04-23 15:38                     ` [PATCH memcg v2] " Vasily Averin
2022-04-24 14:46                   ` [net] 3b379e5391: BUG:kernel_NULL_pointer_dereference,address kernel test robot
2022-04-24 14:46                     ` kernel test robot
2022-04-25 10:56                     ` [PATCH memcg v3] net: set proper memcg for net_init hooks allocations Vasily Averin
2022-04-25 10:56                       ` Vasily Averin
2022-04-26  2:50                       ` Roman Gushchin
2022-04-26  5:58                         ` Vasily Averin
2022-04-26  5:58                           ` Vasily Averin
2022-04-26  6:43                         ` [PATCH memcg v4] " Vasily Averin
2022-04-26 22:13                           ` Roman Gushchin
2022-04-26 22:13                             ` Roman Gushchin
2022-04-27  5:23                           ` Shakeel Butt
2022-04-27 12:22                             ` Michal Koutný
2022-04-27 12:22                               ` Michal Koutný
2022-04-27 15:06                               ` Shakeel Butt
2022-04-27 15:06                                 ` Shakeel Butt
2022-04-27 22:16                                 ` Vasily Averin
2022-04-27 22:16                                   ` Vasily Averin
2022-04-27 22:36                                   ` Roman Gushchin
2022-04-28  4:37                                     ` Vasily Averin
2022-04-28  4:37                                       ` Vasily Averin
2022-04-27 22:47                                   ` Shakeel Butt
2022-04-27 22:47                                     ` Shakeel Butt
2022-05-01 13:44                                     ` Vasily Averin
2022-05-01 13:44                                       ` Vasily Averin
2022-05-01 21:09                                       ` Roman Gushchin
2022-05-01 21:09                                         ` Roman Gushchin
2022-05-02  0:10                                     ` [PATCH memcg v5] " Vasily Averin
2022-05-30  8:57                                       ` Vasily Averin
2022-05-30  8:57                                         ` Vasily Averin
2022-06-03  4:19                                         ` [PATCH memcg v6] " Vasily Averin
2022-06-03  4:19                                           ` Vasily Averin
2022-06-06 13:49                                           ` Qian Cai
2022-06-06 13:49                                             ` Qian Cai
2022-06-06 17:37                                             ` Vasily Averin
2022-06-06 18:43                                               ` Qian Cai
2022-06-06 18:43                                                 ` Qian Cai
2022-06-06 18:45                                             ` Vasily Averin
2022-06-06 18:45                                               ` Vasily Averin
2022-06-07  5:58                                               ` Shakeel Butt
2022-06-07  5:58                                                 ` Shakeel Butt
2022-06-07 12:37                                                 ` Vasily Averin
2022-06-07 12:37                                                   ` Vasily Averin
2022-06-07 14:10                                                   ` Shakeel Butt
2022-06-07 14:10                                                     ` Shakeel Butt
2022-09-18  9:28                                           ` [sparc64] fails to boot, (was: Re: [PATCH memcg v6] net: set proper memcg for net_init hooks allocations) Anatoly Pugachev
2022-09-21 14:41                                             ` Anatoly Pugachev
2022-09-21 14:44                                             ` Anatoly Pugachev
2022-09-21 14:44                                               ` Anatoly Pugachev
2022-09-21 17:02                                               ` Michal Koutný
2022-09-21 17:02                                                 ` Michal Koutný
2022-09-26 13:06                                                 ` Anatoly Pugachev
2022-09-26 13:06                                                   ` Anatoly Pugachev
2022-09-26 17:28                                                   ` Jakub Kicinski
2022-09-26 17:28                                                     ` Jakub Kicinski
2022-09-26 17:32                                                     ` Shakeel Butt
2022-09-26 17:32                                                       ` Shakeel Butt
2022-09-26 17:36                                                       ` Andrew Morton
2022-09-26 17:36                                                         ` Andrew Morton
2022-09-26 19:00                                                         ` Shakeel Butt
2022-09-27  9:54                                             ` Vlastimil Babka
2022-09-27  9:54                                               ` Vlastimil Babka
2022-09-28  7:54                                               ` Thorsten Leemhuis
2022-09-28  7:21                                             ` [sparc64] fails to boot, (was: Re: [PATCH memcg v6] net: set proper memcg for net_init hooks allocations) #forregzbot Thorsten Leemhuis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YhzeCkXEvga7+o/A@bombadil.infradead.org \
    --to=mcgrof@kernel.org \
    --cc=davem@davemloft.net \
    --cc=dsahern@kernel.org \
    --cc=ebiederm@xmission.com \
    --cc=edumazet@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=keescook@chromium.org \
    --cc=kernel@openvz.org \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@suse.com \
    --cc=neilb@suse.de \
    --cc=netdev@vger.kernel.org \
    --cc=roman.gushchin@linux.dev \
    --cc=tj@kernel.org \
    --cc=vbabka@suse.cz \
    --cc=vvs@virtuozzo.com \
    --cc=yoshfuji@linux-ipv6.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.