mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-28 16:56:26 +00:00
modpost: remove incorrect code in do_eisa_entry()
[ Upstream commit0c3e091319
] This function contains multiple bugs after the following commits: -ac55182899
("modpost: i2c aliases need no trailing wildcard") -6543becf26
("mod/file2alias: make modalias generation safe for cross compiling") Commitac55182899
inserted the following code to do_eisa_entry(): else strcat(alias, "*"); This is incorrect because 'alias' is uninitialized. If it is not NULL-terminated, strcat() could cause a buffer overrun. Even if 'alias' happens to be zero-filled, it would output: MODULE_ALIAS("*"); This would match anything. As a result, the module could be loaded by any unrelated uevent from an unrelated subsystem. Commitac55182899
introduced another bug. Prior to that commit, the conditional check was: if (eisa->sig[0]) This checked if the first character of eisa_device_id::sig was not '\0'. However, commitac55182899
changed it as follows: if (sig[0]) sig[0] is NOT the first character of the eisa_device_id::sig. The type of 'sig' is 'char (*)[8]', meaning that the type of 'sig[0]' is 'char [8]' instead of 'char'. 'sig[0]' and 'symval' refer to the same address, which never becomes NULL. The correct conversion would have been: if ((*sig)[0]) However, this if-conditional was meaningless because the earlier change in commit ac551828993e was incorrect. This commit removes the entire incorrect code, which should never have been executed. Fixes:ac55182899
("modpost: i2c aliases need no trailing wildcard") Fixes:6543becf26
("mod/file2alias: make modalias generation safe for cross compiling") Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
692eb06703
commit
94a6159f61
@ -763,10 +763,7 @@ static int do_eisa_entry(const char *filename, void *symval,
|
||||
char *alias)
|
||||
{
|
||||
DEF_FIELD_ADDR(symval, eisa_device_id, sig);
|
||||
if (sig[0])
|
||||
sprintf(alias, EISA_DEVICE_MODALIAS_FMT "*", *sig);
|
||||
else
|
||||
strcat(alias, "*");
|
||||
sprintf(alias, EISA_DEVICE_MODALIAS_FMT "*", *sig);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user