mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-13 14:24:11 +08:00
modpost: fix tee MODULE_DEVICE_TABLE built on big-endian host
[ Upstream commit7f54e00e58
] When MODULE_DEVICE_TABLE(tee, ) is built on a host with a different endianness from the target architecture, it results in an incorrect MODULE_ALIAS(). For example, see a case where drivers/char/hw_random/optee-rng.c is built as a module for ARM little-endian. If you build it on a little-endian host, you will get the correct MODULE_ALIAS: $ grep MODULE_ALIAS drivers/char/hw_random/optee-rng.mod.c MODULE_ALIAS("tee:ab7a617c-b8e7-4d8f-8301-d09b61036b64*"); However, if you build it on a big-endian host, you will get a wrong MODULE_ALIAS: $ grep MODULE_ALIAS drivers/char/hw_random/optee-rng.mod.c MODULE_ALIAS("tee:646b0361-9bd0-0183-8f4d-e7b87c617aab*"); The same problem also occurs when you enable CONFIG_CPU_BIG_ENDIAN, and build it on a little-endian host. This issue has been unnoticed because the ARM kernel is configured for little-endian by default, and most likely built on a little-endian host (cross-build on x86 or native-build on ARM). The uuid field must not be reversed because uuid_t is an array of __u8. Fixes:0fc1db9d10
("tee: add bus driver framework for TEE based devices") Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Reviewed-by: Sumit Garg <sumit.garg@linaro.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
362f0241db
commit
b54a4c8ca1
@ -1326,13 +1326,13 @@ static int do_typec_entry(const char *filename, void *symval, char *alias)
|
||||
/* Looks like: tee:uuid */
|
||||
static int do_tee_entry(const char *filename, void *symval, char *alias)
|
||||
{
|
||||
DEF_FIELD(symval, tee_client_device_id, uuid);
|
||||
DEF_FIELD_ADDR(symval, tee_client_device_id, uuid);
|
||||
|
||||
sprintf(alias, "tee:%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
|
||||
uuid.b[0], uuid.b[1], uuid.b[2], uuid.b[3], uuid.b[4],
|
||||
uuid.b[5], uuid.b[6], uuid.b[7], uuid.b[8], uuid.b[9],
|
||||
uuid.b[10], uuid.b[11], uuid.b[12], uuid.b[13], uuid.b[14],
|
||||
uuid.b[15]);
|
||||
uuid->b[0], uuid->b[1], uuid->b[2], uuid->b[3], uuid->b[4],
|
||||
uuid->b[5], uuid->b[6], uuid->b[7], uuid->b[8], uuid->b[9],
|
||||
uuid->b[10], uuid->b[11], uuid->b[12], uuid->b[13], uuid->b[14],
|
||||
uuid->b[15]);
|
||||
|
||||
add_wildcard(alias);
|
||||
return 1;
|
||||
|
Loading…
Reference in New Issue
Block a user