Original patch commit message is about supressing excess kernel log
messages, but it actually also changes device flag update logic, with
it __dev_set_promiscuity updates dev->flags, but skips calling
net_device_ops->ndo_change_rx_flags() callback effectively not informing
the device about its flag change.

Let's only skip logging for (IFF_LOOPBACK | IFF_POINTOPOINT), but still
call the device callback.

https://virtuozzo.atlassian.net/browse/VSTOR-97985
Fixes: 202eb8960361 ("ve: Use ve_printk() for often kernel messages about user 
actions") [1]
Signed-off-by: Pavel Tikhomirov <ptikhomi...@virtuozzo.com>
---
 net/core/dev.c | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index 14166754f7bf..fffed7680eaf 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -8253,26 +8253,26 @@ static int __dev_set_promiscuity(struct net_device 
*dev, int inc, bool notify)
                        return -EOVERFLOW;
                }
        }
-       /*
-        * Promiscous mode on LOOPBACK/POINTTOPOINT devices does
-        * not mean anything
-        */
-       if ((dev->flags != old_flags) &&
-                       !(dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT))) {
-               ve_printk(VE_LOG, KERN_INFO "device %s %s promiscuous mode\n",
-                       dev->name,
-                       dev->flags & IFF_PROMISC ? "entered" : "left");
-               if (audit_enabled) {
-                       current_uid_gid(&uid, &gid);
-                       audit_log(audit_context(), GFP_ATOMIC,
-                                 AUDIT_ANOM_PROMISCUOUS,
-                                 "dev=%s prom=%d old_prom=%d auid=%u uid=%u 
gid=%u ses=%u",
-                                 dev->name, (dev->flags & IFF_PROMISC),
-                                 (old_flags & IFF_PROMISC),
-                                 from_kuid(&init_user_ns, 
audit_get_loginuid(current)),
-                                 from_kuid(&init_user_ns, uid),
-                                 from_kgid(&init_user_ns, gid),
-                                 audit_get_sessionid(current));
+       if (dev->flags != old_flags) {
+               /*
+                * Skip messages about promiscous mode on LOOPBACK/POINTTOPOINT 
devices.
+                */
+               if (!(dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT))) {
+                       ve_printk(VE_LOG, KERN_INFO "device %s %s promiscuous 
mode\n",
+                                 dev->name, dev->flags & IFF_PROMISC ?
+                                 "entered" : "left");
+                       if (audit_enabled) {
+                               current_uid_gid(&uid, &gid);
+                               audit_log(audit_context(), GFP_ATOMIC,
+                                         AUDIT_ANOM_PROMISCUOUS,
+                                         "dev=%s prom=%d old_prom=%d auid=%u 
uid=%u gid=%u ses=%u",
+                                         dev->name, (dev->flags & IFF_PROMISC),
+                                         (old_flags & IFF_PROMISC),
+                                         from_kuid(&init_user_ns, 
audit_get_loginuid(current)),
+                                         from_kuid(&init_user_ns, uid),
+                                         from_kgid(&init_user_ns, gid),
+                                         audit_get_sessionid(current));
+                       }
                }
 
                dev_change_rx_flags(dev, IFF_PROMISC);
-- 
2.49.0

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

Reply via email to