[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