From: Lucas De Marchi Date: Fri, 17 Aug 2012 12:38:05 +0000 (-0300) Subject: libkmod-module: Add KMOD_PROBE_APPLY_BLACKLIST_ALIAS_ONLY flag X-Git-Tag: v10~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6882017f809691d070e4df26414676d0219145d5;p=thirdparty%2Fkmod.git libkmod-module: Add KMOD_PROBE_APPLY_BLACKLIST_ALIAS_ONLY flag With this flag kmod_module_probe_insert_module() check if module is blacklisted only if it's also an alias. This is needed in order to allow blacklisting a module by name and effectively blacklisting all its aliases as module-init-tools was doing. Before this patch we could load pcspkr module as follows: /etc/modprobe.d/test.conf: alias yay pcspkr blacklist pcspkr $ modprobe yay Now libkmod has support to blacklist "yay" because "pcspkr" is blacklisted. --- diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c index 1271c70b..9756d57d 100644 --- a/libkmod/libkmod-module.c +++ b/libkmod/libkmod-module.c @@ -1172,9 +1172,15 @@ KMOD_EXPORT int kmod_module_probe_insert_module(struct kmod_module *mod, return 0; } - err = flags & (KMOD_PROBE_APPLY_BLACKLIST | - KMOD_PROBE_APPLY_BLACKLIST_ALL); - if (err != 0) { + /* + * Ugly assignement + check. We need to check if we were told to check + * blacklist and also return the reason why we failed. + * KMOD_PROBE_APPLY_BLACKLIST_ALIAS_ONLY will take effect only if the + * module is an alias, so we also need to check it + */ + if ((mod->alias != NULL && ((err = flags & KMOD_PROBE_APPLY_BLACKLIST_ALIAS_ONLY))) + || (err = flags & KMOD_PROBE_APPLY_BLACKLIST_ALL) + || (err = flags & KMOD_PROBE_APPLY_BLACKLIST)) { if (module_is_blacklisted(mod)) return err; } diff --git a/libkmod/libkmod.h b/libkmod/libkmod.h index 2f813a85..d03ab19e 100644 --- a/libkmod/libkmod.h +++ b/libkmod/libkmod.h @@ -161,6 +161,7 @@ enum kmod_probe { /* codes below can be used in return value, too */ KMOD_PROBE_APPLY_BLACKLIST_ALL = 0x10000, KMOD_PROBE_APPLY_BLACKLIST = 0x20000, + KMOD_PROBE_APPLY_BLACKLIST_ALIAS_ONLY = 0x40000, }; /* Flags to kmod_module_apply_filter() */