On Mon, Jul 26, 2021 at 10:33 PM Vasily Averin <vvs@xxxxxxxxxxxxx> wrote: > > User can call select/poll system calls with a large number of assigned > file descriptors and force kernel to allocate up to several pages of memory > till end of these sleeping system calls. We have here long-living > unaccounted per-task allocations. > > It makes sense to account for these allocations to restrict the host's > memory consumption from inside the memcg-limited container. > > Signed-off-by: Vasily Averin <vvs@xxxxxxxxxxxxx> > --- > fs/select.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/select.c b/fs/select.c > index 945896d..e83e563 100644 > --- a/fs/select.c > +++ b/fs/select.c > @@ -655,7 +655,7 @@ int core_sys_select(int n, fd_set __user *inp, fd_set __user *outp, > goto out_nofds; > > alloc_size = 6 * size; > - bits = kvmalloc(alloc_size, GFP_KERNEL); > + bits = kvmalloc(alloc_size, GFP_KERNEL_ACCOUNT); What about the similar allocation in compat_core_sys_select()? Also what about the allocation in poll_get_entry()? > if (!bits) > goto out_nofds; > } > @@ -1000,7 +1000,7 @@ static int do_sys_poll(struct pollfd __user *ufds, unsigned int nfds, > > len = min(todo, POLLFD_PER_PAGE); > walk = walk->next = kmalloc(struct_size(walk, entries, len), > - GFP_KERNEL); > + GFP_KERNEL_ACCOUNT); > if (!walk) { > err = -ENOMEM; > goto out_fds; > -- > 1.8.3.1 >