lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 21 Apr 2022 08:56:12 -0700 From: Shakeel Butt <shakeelb@...gle.com> To: Vasily Averin <vvs@...nvz.org> Cc: Vlastimil Babka <vbabka@...e.cz>, Roman Gushchin <roman.gushchin@...ux.dev>, kernel@...nvz.org, LKML <linux-kernel@...r.kernel.org>, netdev <netdev@...r.kernel.org>, Cgroups <cgroups@...r.kernel.org>, Michal Hocko <mhocko@...e.com>, Florian Westphal <fw@...len.de>, "David S. Miller" <davem@...emloft.net>, Jakub Kicinski <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com> Subject: Re: [PATCH memcg RFC] net: set proper memcg for net_init hooks allocations On Sat, Apr 16, 2022 at 11:39 PM Vasily Averin <vvs@...nvz.org> wrote: > > __register_pernet_operations() executes init hook of registered > pernet_operation structure in all existing net namespaces. > > Typically, these hooks are called by a process associated with > the specified net namespace, and all __GFP_ACCOUNTING marked > allocation are accounted for corresponding container/memcg. > > However __register_pernet_operations() calls the hooks in the same > context, and as a result all marked allocations are accounted > to one memcg for all processed net namespaces. > > This patch adjusts active memcg for each net namespace and helps > to account memory allocated inside ops_init() into the proper memcg. > > Signed-off-by: Vasily Averin <vvs@...nvz.org> > --- > Dear Vlastimil, Roman, > I'm not sure that memcg is used correctly here, > is it perhaps some additional locking required? > --- > net/core/net_namespace.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c > index a5b5bb99c644..171c6e0b2337 100644 > --- a/net/core/net_namespace.c > +++ b/net/core/net_namespace.c > @@ -26,6 +26,7 @@ > #include <net/net_namespace.h> > #include <net/netns/generic.h> > > +#include <linux/sched/mm.h> > /* > * Our network namespace constructor/destructor lists > */ > @@ -1147,7 +1148,13 @@ static int __register_pernet_operations(struct list_head *list, > * setup_net() and cleanup_net() are not possible. > */ > for_each_net(net) { > + struct mem_cgroup *old, *memcg = NULL; > +#ifdef CONFIG_MEMCG > + memcg = (net == &init_net) ? root_mem_cgroup : mem_cgroup_from_obj(net); memcg from obj is unstable, so you need a reference on memcg. You can introduce get_mem_cgroup_from_kmem() which works for both MEMCG_DATA_OBJCGS and MEMCG_DATA_KMEM. For uncharged objects (like init_net) it should return NULL. > +#endif > + old = set_active_memcg(memcg); > error = ops_init(ops, net); > + set_active_memcg(old); > if (error) > goto out_undo; > list_add_tail(&net->exit_list, &net_exit_list); > -- > 2.31.1 >
Powered by blists - more mailing lists