Author: Andrey Ryabinin <aryabi...@virtuozzo.com>

The size of the ip_tunnel_prl structs allocation is controllable from
user-space, thus it's better to avoid spam in dmesg if allocation failed.
Also add __GFP_ACCOUNT as this is a good candidate for per-memcg
accounting. Allocation is temporary and limited by 4GB.

Signed-off-by: Andrey Ryabinin <aryabi...@virtuozzo.com>
Signed-off-by: Vasily Averin <v...@virtuozzo.com>
Signed-off-by: David S. Miller <da...@davemloft.net>
(cherry picked from commit 1b51d8271973e4966078f0c1a5cb061ae9a424d2)
https://jira.sw.ru/browse/PSBM-133990
Signed-off-by: Vasily Averin <v...@virtuozzo.com>
---
 net/ipv6/sit.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index df5bea818410..33adc12b697d 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -321,7 +321,7 @@ static int ipip6_tunnel_get_prl(struct net_device *dev, 
struct ifreq *ifr)
         * we try harder to allocate.
         */
        kp = (cmax <= 1 || capable(CAP_NET_ADMIN)) ?
-               kcalloc(cmax, sizeof(*kp), GFP_KERNEL | __GFP_NOWARN) :
+               kcalloc(cmax, sizeof(*kp), GFP_KERNEL_ACCOUNT | __GFP_NOWARN) :
                NULL;
 
        rcu_read_lock();
@@ -334,7 +334,8 @@ static int ipip6_tunnel_get_prl(struct net_device *dev, 
struct ifreq *ifr)
                 * For root users, retry allocating enough memory for
                 * the answer.
                 */
-               kp = kcalloc(ca, sizeof(*kp), GFP_ATOMIC);
+               kp = kcalloc(ca, sizeof(*kp), GFP_ATOMIC | __GFP_ACCOUNT |
+                                             __GFP_NOWARN);
                if (!kp) {
                        ret = -ENOMEM;
                        goto out;
-- 
2.25.1

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to