KEYS: correct alignment of system_certificate_list content in assembly file
authorHendrik Brueckner <brueckner@linux.vnet.ibm.com>
Thu, 5 Dec 2013 13:48:22 +0000 (14:48 +0100)
committerDavid Howells <dhowells@redhat.com>
Tue, 10 Dec 2013 18:25:28 +0000 (18:25 +0000)
commit62226983da070f7e51068ec2e3a4da34672964c7
tree04a0e1bc11282cc966f7c7c0521fa1e0f70b8956
parent7cfe5b3310a1b45f385ff18647bddb487a6c5525
KEYS: correct alignment of system_certificate_list content in assembly file

Apart from data-type specific alignment constraints, there are also
architecture-specific alignment requirements.
For example, on s390 symbols must be on even addresses implying a 2-byte
alignment.  If the system_certificate_list_end symbol is on an odd address
and if this address is loaded, the least-significant bit is ignored.  As a
result, the load_system_certificate_list() fails to load the certificates
because of a wrong certificate length calculation.

To be safe, align system_certificate_list on an 8-byte boundary.  Also improve
the length calculation of the system_certificate_list content.  Introduce a
system_certificate_list_size (8-byte aligned because of unsigned long) variable
that stores the length.  Let the linker calculate this size by introducing
a start and end label for the certificate content.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: David Howells <dhowells@redhat.com>
kernel/system_certificates.S
kernel/system_keyring.c