Looking at where the blacklists come from, it looks like kernel
autogenerates "blacklist_linux_4.15-0-15-generic.conf" files which have
a combination of OSS and watchdog blacklists.

this indeed is not very nice/easy to override.

I wonder if the "watchdog" like modules should be shipped in separate
files elsewhere on disk, and collected into a "watchdog.conf" file which
matches blacklists for all installed kernels? That way it would be
easier for admin to override it, by dropping in an empty /etc/modules-
load.d/watchdog.conf?

Not sure how to make these modules 'available' yet not autoloaded. Split
them into a separate -watchdog-modules binary package? not installed =
not autoloaded? without any blacklists at all?

** Description changed:

- Before systemd-modules-load, /etc/init.d/kmod would load modules
- directly with "modprobe" (and _not_ "modprobe -b"):
+ Impossible / hard to force the system to load a watchdog module because
+ it is blacklisted by the kernel auto-generated list of "watchdog"
+ modules.
+ 
+ /etc/modules used to "just work" before.
+ 
+ ===
+ 
+ 
+ Before systemd-modules-load, /etc/init.d/kmod would load modules directly 
with "modprobe" (and _not_ "modprobe -b"):
  
  load_module() {
-   local module args
-   module="$1"
-   args="$2"
+   local module args
+   module="$1"
+   args="$2"
  
-   if [ "$VERBOSE" != no ]; then
-     log_action_msg "Loading kernel module $module"
-     modprobe $module $args || true
-   else
-     modprobe $module $args > /dev/null 2>&1 || true
-   fi
+   if [ "$VERBOSE" != no ]; then
+     log_action_msg "Loading kernel module $module"
+     modprobe $module $args || true
+   else
+     modprobe $module $args > /dev/null 2>&1 || true
+   fi
  }
  
  However, under 18.04, systemd-modules-load will _ignore_ modules that
  are manually listed in /etc/modules and process them with the blacklist
  (the same as "modprobe -b" would). This means that it is not possible to
  manually load modules that are blacklisted (like watchdog modules):
  
  systemd-238/src/modules-load/modules-load.c:
  
  static int load_module(struct kmod_ctx *ctx, const char *m) {
-         const int probe_flags = KMOD_PROBE_APPLY_BLACKLIST;
+         const int probe_flags = KMOD_PROBE_APPLY_BLACKLIST;
  ...
-                 default:
-                         err = kmod_module_probe_insert_module(mod, 
probe_flags,
-                                                               NULL, NULL, 
NULL, NULL);
+                 default:
+                         err = kmod_module_probe_insert_module(mod, 
probe_flags,
+                                                               NULL, NULL, 
NULL, NULL);
  
-                         if (err == 0)
-                                 log_info("Inserted module '%s'", 
kmod_module_get_name(mod));
-                         else if (err == KMOD_PROBE_APPLY_BLACKLIST)
-                                 log_info("Module '%s' is blacklisted", 
kmod_module_get_name(mod));
+                         if (err == 0)
+                                 log_info("Inserted module '%s'", 
kmod_module_get_name(mod));
+                         else if (err == KMOD_PROBE_APPLY_BLACKLIST)
+                                 log_info("Module '%s' is blacklisted", 
kmod_module_get_name(mod));
  
  Blacklists should _not_ be applied by systemd-modules-load.

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to systemd in Ubuntu.
https://bugs.launchpad.net/bugs/1767172

Title:
  Regression: /etc/modules checked against blacklist

Status in linux package in Ubuntu:
  Incomplete
Status in systemd package in Ubuntu:
  New

Bug description:
  Impossible / hard to force the system to load a watchdog module
  because it is blacklisted by the kernel auto-generated list of
  "watchdog" modules.

  /etc/modules used to "just work" before.

  e.g. bcm2835_wdt module on arm64

  ===

  Before systemd-modules-load, /etc/init.d/kmod would load modules
  directly with "modprobe" (and _not_ "modprobe -b"):

  load_module() {
    local module args
    module="$1"
    args="$2"

    if [ "$VERBOSE" != no ]; then
      log_action_msg "Loading kernel module $module"
      modprobe $module $args || true
    else
      modprobe $module $args > /dev/null 2>&1 || true
    fi
  }

  However, under 18.04, systemd-modules-load will _ignore_ modules that
  are manually listed in /etc/modules and process them with the
  blacklist (the same as "modprobe -b" would). This means that it is not
  possible to manually load modules that are blacklisted (like watchdog
  modules):

  systemd-238/src/modules-load/modules-load.c:

  static int load_module(struct kmod_ctx *ctx, const char *m) {
          const int probe_flags = KMOD_PROBE_APPLY_BLACKLIST;
  ...
                  default:
                          err = kmod_module_probe_insert_module(mod, 
probe_flags,
                                                                NULL, NULL, 
NULL, NULL);

                          if (err == 0)
                                  log_info("Inserted module '%s'", 
kmod_module_get_name(mod));
                          else if (err == KMOD_PROBE_APPLY_BLACKLIST)
                                  log_info("Module '%s' is blacklisted", 
kmod_module_get_name(mod));

  Blacklists should _not_ be applied by systemd-modules-load.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1767172/+subscriptions

-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to