[Devel] [PATCH VZ9] net/dev: remove inconsistency between setting promisc flag and calling flag update callback

Pavel Tikhomirov ptikhomirov at virtuozzo.com
Mon May 19 11:25:02 MSK 2025


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 <ptikhomirov at 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



More information about the Devel mailing list