forked from Minki/linux
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6: net: don't allow CAP_NET_ADMIN to load non-netdev kernel modules
This commit is contained in:
commit
ab02a95405
@ -2392,6 +2392,9 @@ extern int netdev_notice(const struct net_device *dev, const char *format, ...)
|
||||
extern int netdev_info(const struct net_device *dev, const char *format, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
|
||||
#define MODULE_ALIAS_NETDEV(device) \
|
||||
MODULE_ALIAS("netdev-" device)
|
||||
|
||||
#if defined(DEBUG)
|
||||
#define netdev_dbg(__dev, format, args...) \
|
||||
netdev_printk(KERN_DEBUG, __dev, format, ##args)
|
||||
|
@ -1114,13 +1114,21 @@ EXPORT_SYMBOL(netdev_bonding_change);
|
||||
void dev_load(struct net *net, const char *name)
|
||||
{
|
||||
struct net_device *dev;
|
||||
int no_module;
|
||||
|
||||
rcu_read_lock();
|
||||
dev = dev_get_by_name_rcu(net, name);
|
||||
rcu_read_unlock();
|
||||
|
||||
if (!dev && capable(CAP_NET_ADMIN))
|
||||
request_module("%s", name);
|
||||
no_module = !dev;
|
||||
if (no_module && capable(CAP_NET_ADMIN))
|
||||
no_module = request_module("netdev-%s", name);
|
||||
if (no_module && capable(CAP_SYS_MODULE)) {
|
||||
if (!request_module("%s", name))
|
||||
pr_err("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);
|
||||
|
||||
|
@ -1765,4 +1765,4 @@ module_exit(ipgre_fini);
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS_RTNL_LINK("gre");
|
||||
MODULE_ALIAS_RTNL_LINK("gretap");
|
||||
MODULE_ALIAS("gre0");
|
||||
MODULE_ALIAS_NETDEV("gre0");
|
||||
|
@ -913,4 +913,4 @@ static void __exit ipip_fini(void)
|
||||
module_init(ipip_init);
|
||||
module_exit(ipip_fini);
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("tunl0");
|
||||
MODULE_ALIAS_NETDEV("tunl0");
|
||||
|
@ -1290,4 +1290,4 @@ static int __init sit_init(void)
|
||||
module_init(sit_init);
|
||||
module_exit(sit_cleanup);
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("sit0");
|
||||
MODULE_ALIAS_NETDEV("sit0");
|
||||
|
Loading…
Reference in New Issue
Block a user