Skip to content

Commit

Permalink
[arm] Avoid instruction references to symbols defined via ".equ"
Browse files Browse the repository at this point in the history
When building for 64-bit ARM, some symbol references may be resolved
via an "adrp" instruction (to obtain the start of the 4kB page
containing the symbol) and a separate 12-bit offset.  For example
(taken from the GNU assembler documentation):

  adrp x0, foo
  ldr  x0, [x0, #:lo12:foo]

We occasionally refer to symbols defined via mechanisms that are not
directly visible to gcc.  For example:

  extern char some_magic_symbol[];
  __asm__ ( ".equ some_magic_symbol, some_magic_expression" );

The subsequent use of the ":lo12:" prefix on such magically-defined
symbols triggers an assertion failure in the assembler.

This problem seems to affect only "private_key_len" in the current
codebase.  Fix by storing this value as static data; this avoids the
need to provide the value as a literal within the instruction stream,
and so avoids the problematic use of the ":lo12:" prefix.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed May 7, 2016
1 parent 1a16f67 commit 2a187f4
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/crypto/privkey.c
Expand Up @@ -69,6 +69,12 @@ struct asn1_cursor private_key = {
.len = ( ( size_t ) private_key_len ),
};

/** Default private key */
static struct asn1_cursor default_private_key = {
.data = private_key_data,
.len = ( ( size_t ) private_key_len ),
};

/** Private key setting */
static struct setting privkey_setting __setting ( SETTING_CRYPTO, privkey ) = {
.name = "privkey",
Expand All @@ -92,8 +98,8 @@ static int privkey_apply_settings ( void ) {
if ( ALLOW_KEY_OVERRIDE ) {

/* Restore default private key */
private_key.data = private_key_data;
private_key.len = ( ( size_t ) private_key_len );
memcpy ( &private_key, &default_private_key,
sizeof ( private_key ) );

/* Fetch new private key, if any */
free ( key_data );
Expand Down

0 comments on commit 2a187f4

Please sign in to comment.