[PATCH 18/18] [UNTESTED] image: Add support for relocating crypto_algos in linker lists

Alexandru Gagniuc
2021-05-17T16:38:40Z

Function pointers from crypto_algos array are relocated, when
NEEDS_MANUAL_RELOC is set. This relocation doesn't happen if the algo
is placed in a linker list. Implement this relocation.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
common/image-sig.c | 13 +++++++++++++
1 file changed, 13 insertions(+)

diff --git a/common/image-sig.c b/common/image-sig.c
index 498cd78af4..5c7ddd984d 100644
--- a/common/image-sig.c
+++ b/common/image-sig.c
@@ -98,6 +98,19 @@ struct crypto_algo *image_get_crypto_algo(const char *full_name)
int i;
const char *name;

+#if defined(CONFIG_NEEDS_MANUAL_RELOC)
+ static bool done;
+
+ if (!done) {
+ crypto = ll_entry_start(struct crypto_algo, cryptos);
+ end = ll_entry_end(struct crypto_algo, cryptos);
+ for (; crypto < end; crypto++) {
+ crypto->name += gd->reloc_off;
+ crypto->verify += gd->reloc_off;
+ }
+ }
+#endif
+
/* Move name to after the comma */
name = strchr(full_name, ',');
if (!name)
--
2.31.1