Commit e020836d authored by Daniel Borkmann's avatar Daniel Borkmann Committed by David S. Miller

dev_ioctl: remove dev_load() CAP_SYS_MODULE message

Marcel reported to see the following message when autoloading
is being triggered when adding nlmon device:

  Loading kernel module for a network device with
  CAP_SYS_MODULE (deprecated). Use CAP_NET_ADMIN and alias
  netdev-nlmon instead.

This false-positive happens despite with having correct
capabilities set, e.g. through issuing `ip link del dev nlmon`
more than once on a valid device with name nlmon, but Marcel
has also seen it on creation time when no nlmon module is
previously compiled-in or loaded as module and the device
name equals a link type name (e.g. nlmon, vxlan, team).

Stephen says:

  The netdev module alias is a hold over from the past. For
  normal devices, people used to create a alias eth0 to and
  point it to the type of network device used, that was back
  in the bad old ISA days before real discovery.

  Also, the tunnels create module alias for the control device
  and ip used to use this to autoload the tunnel device.

  The message is bogus and should just be removed, I also see
  it in a couple of other cases where tap devices are renamed
  for other usese.

As mentioned in 8909c9ad ("net: don't allow CAP_NET_ADMIN
to load non-netdev kernel modules"), we nevertheless still
might want to leave the old autoloading behaviour in place
as it could break old scripts, so for now, lets just remove
the log message as Stephen suggests.

Reference: http://thread.gmane.org/gmane.linux.kernel/1105168Reported-by: default avatarMarcel Holtmann <marcel@holtmann.org>
Suggested-by: default avatarStephen Hemminger <stephen@networkplumber.org>
Signed-off-by: default avatarDaniel Borkmann <dborkman@redhat.com>
Cc: Vasiliy Kulikov <segoon@openwall.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 60a3b225
...@@ -365,11 +365,8 @@ void dev_load(struct net *net, const char *name) ...@@ -365,11 +365,8 @@ void dev_load(struct net *net, const char *name)
no_module = !dev; no_module = !dev;
if (no_module && capable(CAP_NET_ADMIN)) if (no_module && capable(CAP_NET_ADMIN))
no_module = request_module("netdev-%s", name); no_module = request_module("netdev-%s", name);
if (no_module && capable(CAP_SYS_MODULE)) { if (no_module && capable(CAP_SYS_MODULE))
if (!request_module("%s", name)) request_module("%s", name);
pr_warn("Loading kernel module for a network device with CAP_SYS_MODULE (deprecated). Use CAP_NET_ADMIN and alias netdev-%s instead.\n",
name);
}
} }
EXPORT_SYMBOL(dev_load); EXPORT_SYMBOL(dev_load);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment