Signed-off-by: Kirill Tkhai <[email protected]>
---
 net/packet/af_packet.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index 30b8e900e936..1e4d017d851e 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -2547,8 +2547,15 @@ struct packet_sk_charge {
 static struct cg_proto *packet_sk_charge(void)
 {
        struct packet_sk_charge *psc;
+       unsigned int nr_pages;
        int err = -ENOMEM;
 
+       nr_pages = DIV_ROUND_UP(ACCESS_ONCE(sysctl_rmem_max), PAGE_SIZE);
+       if (!nr_pages) {
+               /* Caller will assign NULL memcg to socket */
+               return NULL;
+       }
+
        psc = kmalloc(sizeof(*psc), GFP_KERNEL);
        if (!psc)
                goto out;
@@ -2565,7 +2572,7 @@ static struct cg_proto *packet_sk_charge(void)
         * It's typically not huge and packet sockets are rare guests in
         * containers, so we don't disturb the memory consumption much.
         */
-       psc->nr_pages = ACCESS_ONCE(sysctl_rmem_max)/PAGE_SIZE;
+       psc->nr_pages = nr_pages;
 
        err = memcg_charge_kmem(psc->memcg, GFP_KERNEL, psc->nr_pages);
        if (!err)


_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to