From 430967d07b734366f73ac4496fb2b9b9f069223f Mon Sep 17 00:00:00 2001
From: Lucas De Marchi <lucas.demarchi@profusion.mobi>
Date: Thu, 16 Aug 2012 21:27:17 -0300
Subject: [PATCH] Blacklist only aliases

---
 libkmod/libkmod-module.c | 12 +++++++++---
 libkmod/libkmod.h        |  1 +
 tools/modprobe.c         |  1 +
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c
index 1271c70..9756d57 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 2f813a8..d03ab19 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() */
diff --git a/tools/modprobe.c b/tools/modprobe.c
index f8a2805..b108112 100644
--- a/tools/modprobe.c
+++ b/tools/modprobe.c
@@ -582,6 +582,7 @@ static int insmod(struct kmod_ctx *ctx, const char *alias,
 	if (do_show || verbose > DEFAULT_VERBOSE)
 		show = &print_action;
 
+	flags |= KMOD_PROBE_APPLY_BLACKLIST_ALIAS_ONLY;
 
 	if (use_blacklist)
 		flags |= KMOD_PROBE_APPLY_BLACKLIST;
-- 
1.7.11.5

