forked from Minki/linux
modpost: change mod->gpl_compatible to bool type
Currently, mod->gpl_compatible is tristate; it is set to -1 by default,
then to 1 or 0 when MODULE_LICENSE() is found.
Maybe, -1 was chosen to represent the 'unknown' license, but it is not
useful.
The current code:
if (!mod->gpl_compatible)
check_for_gpl_usage(exp->export, basename, exp->name);
... only cares whether gpl_compatible is zero or not.
Change it to a bool type with the initial value 'true', which has no
functional change.
The default value should be 'true' instead of 'false'.
Since commit 1d6cd39293
("modpost: turn missing MODULE_LICENSE() into
error"), unknown module license is an error.
The error message, "missing MODULE_LICENSE()" is enough to explain the
issue. It is not sensible to show another message, "GPL-incompatible
module ... uses GPL-only symbol".
Add comments to explain this.
While I was here, I renamed gpl_compatible to is_gpl_compatible for
clarification, and also slightly refactored the code.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
This commit is contained in:
parent
58e01fcae1
commit
5066743e4c
@ -187,7 +187,14 @@ static struct module *new_module(const char *modname)
|
||||
/* add to list */
|
||||
strcpy(mod->name, modname);
|
||||
mod->is_vmlinux = (strcmp(modname, "vmlinux") == 0);
|
||||
mod->gpl_compatible = -1;
|
||||
|
||||
/*
|
||||
* Set mod->is_gpl_compatible to true by default. If MODULE_LICENSE()
|
||||
* is missing, do not check the use for EXPORT_SYMBOL_GPL() becasue
|
||||
* modpost will exit wiht error anyway.
|
||||
*/
|
||||
mod->is_gpl_compatible = true;
|
||||
|
||||
mod->next = modules;
|
||||
modules = mod;
|
||||
|
||||
@ -2012,10 +2019,8 @@ static void read_symbols(const char *modname)
|
||||
if (!license)
|
||||
error("missing MODULE_LICENSE() in %s\n", modname);
|
||||
while (license) {
|
||||
if (license_is_gpl_compatible(license))
|
||||
mod->gpl_compatible = 1;
|
||||
else {
|
||||
mod->gpl_compatible = 0;
|
||||
if (!license_is_gpl_compatible(license)) {
|
||||
mod->is_gpl_compatible = false;
|
||||
break;
|
||||
}
|
||||
license = get_next_modinfo(&info, "license", license);
|
||||
@ -2183,7 +2188,7 @@ static void check_exports(struct module *mod)
|
||||
add_namespace(&mod->missing_namespaces, exp->namespace);
|
||||
}
|
||||
|
||||
if (!mod->gpl_compatible)
|
||||
if (!mod->is_gpl_compatible)
|
||||
check_for_gpl_usage(exp->export, basename, exp->name);
|
||||
}
|
||||
}
|
||||
|
@ -112,7 +112,7 @@ buf_write(struct buffer *buf, const char *s, int len);
|
||||
|
||||
struct module {
|
||||
struct module *next;
|
||||
int gpl_compatible;
|
||||
bool is_gpl_compatible;
|
||||
struct symbol *unres;
|
||||
bool from_dump; /* true if module was loaded from *.symvers */
|
||||
bool is_vmlinux;
|
||||
|
Loading…
Reference in New Issue
Block a user