networkd: drop CAP_SYS_MODULE
Rely on modules being built-in or autoloaded on-demand. As networkd is a network facing service, we want to limits its capabilities, as much as possible. Also, we may not have CAP_SYS_MODULE in a container, and we want networkd to work the same there. Module autoloading does not always work, but should be fixed by the kernel patch f98f89a0104454f35a: 'net: tunnels - enable module autoloading', which is currently in net-next and which people may consider backporting if they want tunneling support without compiling in the modules. Early adopters may also use a module-load.d snippet and order systemd-modules-load.service before networkd to force the module loading of tunneling modules. This sholud fix the various build issues people have reported.
This commit is contained in:
@@ -327,41 +327,6 @@ int net_parse_inaddr(const char *address, unsigned char *family, void *dst) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int load_module(struct kmod_ctx *ctx, const char *mod_name) {
|
||||
struct kmod_list *modlist = NULL, *l;
|
||||
int r;
|
||||
|
||||
assert(ctx);
|
||||
assert(mod_name);
|
||||
|
||||
r = kmod_module_new_from_lookup(ctx, mod_name, &modlist);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (!modlist) {
|
||||
log_error("Failed to find module '%s'", mod_name);
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
kmod_list_foreach(l, modlist) {
|
||||
struct kmod_module *mod = kmod_module_get_module(l);
|
||||
|
||||
r = kmod_module_probe_insert_module(mod, 0, NULL, NULL, NULL, NULL);
|
||||
if (r == 0)
|
||||
log_info("Inserted module '%s'", kmod_module_get_name(mod));
|
||||
else {
|
||||
log_error("Failed to insert '%s': %s", kmod_module_get_name(mod),
|
||||
strerror(-r));
|
||||
}
|
||||
|
||||
kmod_module_unref(mod);
|
||||
}
|
||||
|
||||
kmod_module_unref_list(modlist);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
void serialize_in_addrs(FILE *f, const char *key, struct in_addr *addresses, size_t size) {
|
||||
unsigned i;
|
||||
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
#include <netinet/ether.h>
|
||||
#include <netinet/in.h>
|
||||
#include <stdbool.h>
|
||||
#include <libkmod.h>
|
||||
|
||||
#include "udev.h"
|
||||
#include "condition-util.h"
|
||||
@@ -67,8 +66,6 @@ int net_parse_inaddr(const char *address, unsigned char *family, void *dst);
|
||||
|
||||
int net_get_unique_predictable_data(struct udev_device *device, uint8_t result[8]);
|
||||
|
||||
int load_module(struct kmod_ctx *ctx, const char *mod_name);
|
||||
|
||||
void serialize_in_addrs(FILE *f, const char *key, struct in_addr *addresses, size_t size);
|
||||
int deserialize_in_addrs(struct in_addr **addresses, size_t *size, const char *string);
|
||||
int deserialize_in6_addrs(struct in6_addr **addresses, size_t *size, const char *string);
|
||||
|
||||
Reference in New Issue
Block a user