12179 Commits

Author SHA1 Message Date
Demi Marie Obenour
ce882b5364 refactor(auth): do not include SEQUENCE tag in saved extensions
This makes the code a little bit smaller.  No functional change
intended.

Change-Id: I794d2927fcd034a79e29c9bba1f8e4410203f547
Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
2023-01-03 17:49:24 +01:00
Demi Marie Obenour
ca34dbc0cd fix(auth): reject junk after certificates
Certificates must not allow trailing junk after them.

Change-Id: Ie33205fb051fc63af5b72c326822da7f62eec1d1
Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
2023-01-03 17:49:16 +01:00
Demi Marie Obenour
8816dbb381 fix(auth): require bit strings to have no unused bits
This is already checked by the crypto module or by mbedTLS, but checking
it in the X.509 parser is harmless.

Change-Id: Ifdbe3b4c6d04481bb8e93106ee04b49a70f50d5d
Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
2023-01-03 17:48:51 +01:00
Sandrine Bailleux
2439a80886 Merge changes Ia748b6ae,Id8a48e14,Id25ab231,Ie26eed8a,Idf48f716, ... into integration
* changes:
  refactor(auth): partially validate SubjectPublicKeyInfo early
  fix(auth): reject padding after BIT STRING in signatures
  fix(auth): reject invalid padding in digests
  fix(auth): require at least one extension to be present
  fix(auth): forbid junk after extensions
  fix(auth): only accept v3 X.509 certificates
2023-01-03 17:48:09 +01:00
Manish Pandey
a95a451b0a Merge changes from topic "st_fix_sparse_warnings" into integration
* changes:
  fix(st-crypto): remove platdata functions
  fix(st-crypto): set get_plain_pk_from_asn1() static
  fix(stm32mp1): add missing platform.h include
  fix(st): make metadata_block_spec static
2023-01-03 14:27:07 +01:00
Demi Marie Obenour
63cc49d0aa refactor(auth): avoid parsing signature algorithm twice
Since the two instances of the signature algorithm in a certificate must
be bitwise identical, it is not necessary to parse both of them.
Instead, it suffices to parse one of them, and then check that the other
fits in the remaining buffer space and is equal to the first.

Change-Id: Id0a0663165f147879ac83b6a540378fd4873b0dd
Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
2022-12-29 19:18:22 -05:00
Demi Marie Obenour
94c0cfbb82 refactor(auth): partially validate SubjectPublicKeyInfo early
This reduces the likelihood of future problems later.

Change-Id: Ia748b6ae31a7a48f17ec7f0fc08310a50cd1b135
Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
2022-12-29 18:41:10 -05:00
Demi Marie Obenour
a8c8c5ef2a fix(auth): reject padding after BIT STRING in signatures
It is forbidden by ASN.1 DER.

Change-Id: Id8a48e14bb8a1a17a6481ea3fde0803723c05e31
Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
2022-12-29 18:41:10 -05:00
Demi Marie Obenour
f47547b354 fix(auth): reject invalid padding in digests
Digests must not have padding after the SEQUENCE or OCTET STRING.

Change-Id: Id25ab23111781f8c8a97c2c3c8edf1cc4a4384c0
Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
2022-12-29 18:41:10 -05:00
Demi Marie Obenour
72460f50e2 fix(auth): require at least one extension to be present
X.509 and RFC5280 allow omitting the extensions entirely, but require
that if the extensions field is present at all, it must contain at least
one certificate.  TF-A already requires the extensions to be present,
but allows them to be empty.  However, a certificate with an empty
extensions field will always fail later on, as the extensions contain
the information needed to validate the next stage in the boot chain.
Therefore, it is simpler to require the extension field to be present
and contain at least one extension.  Also add a comment explaining why
the extensions field is required, even though it is OPTIONAL in the
ASN.1 syntax.

Change-Id: Ie26eed8a7924bf50937a6b27ccdf7cc9a390588d
Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
2022-12-29 18:41:10 -05:00
Demi Marie Obenour
fd37982a19 fix(auth): forbid junk after extensions
The extensions must use all remaining bytes in the TBSCertificate.

Change-Id: Idf48f7168e146d050ba62dbc732638946fcd6c92
Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
2022-12-29 18:41:10 -05:00
Demi Marie Obenour
e9e4a2a6fd fix(auth): only accept v3 X.509 certificates
v1 and v2 are forbidden as at least one extension is required.  Instead
of actually parsing the version number, just compare it with a
hard-coded string.

Change-Id: Ib8fd34304a0049787db77ec8c2359d0930cd4ba1
Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
2022-12-29 18:41:10 -05:00
Bipin Ravi
af467fc3d3 Merge "fix(qemu-sbsa): enable SVE and SME" into integration 2022-12-22 23:38:58 +01:00
Manish V Badarkhe
8c276af390 Merge changes Ia14738de,I6f4cffdc into integration
* changes:
  fix(tc): change the properties of optee reserved memory
  feat(tc): use smmu 700
2022-12-22 12:53:04 +01:00
Madhukar Pappireddy
c3c30ff88e Merge "fix(cpus): workaround for Neoverse N2 erratum 2743089" into integration 2022-12-21 17:27:21 +01:00
Bipin Ravi
1ee7c8232c fix(cpus): workaround for Neoverse N2 erratum 2743089
Neoverse N2 erratum 2743089 is a Cat B erratum that applies to
all revisions <=r0p2 and is fixed in r0p3. The workaround is to
insert a dsb before the isb in the power down sequence.

SDEN documentation:
https://developer.arm.com/documentation/SDEN1982442/latest

Signed-off-by: Bipin Ravi <bipin.ravi@arm.com>
Change-Id: Idec862226bd32c91374a8bbd5d73d7ee480a34d9
2022-12-21 16:35:39 +01:00
Madhukar Pappireddy
e7abef9036 Merge changes I0362da46,I8ee7c16c into integration
* changes:
  fix(cpus): workaround for Cortex-A78 erratum 2772019
  fix(cpus): workaround for Neoverse V1 erratum 2743093
2022-12-21 16:01:16 +01:00
Andre Przywara
1ae75529bc feat(fvp): emulate trapped RNDR
When a platform decides to use FEAT_RNG_TRAP, every RNDR or RNDRSS read
will trap into EL3. The platform can then emulate those instructions, by
either executing the real CPU instructions, potentially conditioning the
results, or use rate-limiting or filtering to protect the hardware
entropy pool. Another possiblitiy would be to use some platform specific
TRNG device to get entropy and returning this.

To demonstrate platform specific usage, add a demo implementation for the
FVP: It will execute the actual CPU instruction and just return the
result. This should serve as reference code to implement platform specific
policies.

We change the definition of read_rndr() and read_rndrrs() to use the
alternative sysreg encoding, so that all assemblers can handle that.

Add documentation about the new platform specific RNG handler function.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Change-Id: Ibce817b3b06ad20129d15531b81402e3cc3e9a9e
2022-12-21 12:59:36 +00:00
Andre Przywara
ccd81f1e09 feat(el3-runtime): introduce system register trap handler
At the moment we only handle SMC traps from lower ELs, but ignore any
other synchronous traps and just panic.
To cope with system register traps, which we might need to emulate,
introduce a C function to handle those traps, and wire that up in the
exception handler to be called.

We provide a dispatcher function (in C), that will call platform
specific implementation for certain (classes of) system registers.
For now this is empty.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Change-Id: If147bcb49472eb02791498700300926afbcf75ff
2022-12-21 10:25:25 +00:00
Bipin Ravi
b10afcce5f fix(cpus): workaround for Cortex-A78 erratum 2772019
Cortex-A78 erratum 2772019 is a Cat B erratum that applies to
all revisions <=r1p2 and is still open. The workaround is to
insert a dsb before the isb in the power down sequence.

SDEN documentation:
https://developer.arm.com/documentation/SDEN1401784/latest

Signed-off-by: Bipin Ravi <bipin.ravi@arm.com>
Change-Id: I0362da463eca777aa7a385bcdeb39b8549799f02
2022-12-20 14:29:33 -06:00
Bipin Ravi
31747f057b fix(cpus): workaround for Neoverse V1 erratum 2743093
Neoverse V1 erratum 2743093 is a Cat B erratum that applies to
all revisions <=r1p2 and is still open. The workaround is to
insert a dsb before the isb in the power down sequence.

SDEN documentation:
https://developer.arm.com/documentation/SDEN1401781/latest

Signed-off-by: Bipin Ravi <bipin.ravi@arm.com>
Change-Id: I8ee7c16c14c4fd6ee35d20c855273ecfce0d1b32
2022-12-20 14:17:20 -06:00
Olivier Deprez
f4d8ed50d2 Merge "fix(el3-spmc): report execution state in partition info get" into integration 2022-12-20 17:30:16 +01:00
Sandrine Bailleux
15a6c959de Merge "feat(tc): add delegated attest and measurement tests" into integration 2022-12-20 15:58:06 +01:00
Davidson K
2fff46c80f fix(tc): change the properties of optee reserved memory
make it part of the restricted dma pool to ensure it is not used for
general dma operations.

Change-Id: Ia14738de70b4d7719d7460ed8d16e727aea8d8c4
Signed-off-by: Davidson K <davidson.kumaresan@arm.com>
2022-12-20 12:01:05 +01:00
Davidson K
ed80eab6a6 feat(tc): use smmu 700
Enable smmu for gpu and dpu

Signed-off-by: Davidson K <davidson.kumaresan@arm.com>
Change-Id: I6f4cffdc835dc542904b0a15b1db9a3382b78c08
2022-12-20 12:00:57 +01:00
Manish Pandey
01617e0bee Merge "fix(gic): wrap cache enabled assert under plat_can_cmo" into integration 2022-12-19 11:44:45 +01:00
Yann Gautier
6954495992 refactor(st): remove unused io_mmc driver
This driver was used when STM32MP_USE_STM32IMAGE was enabled. This flag
is now removed, so the ST io_mmc driver can now be removed.

Signed-off-by: Yann Gautier <yann.gautier@st.com>
Change-Id: I3c1280dec8926b921534c81e143e86cfe6d4ee0d
2022-12-19 09:13:41 +01:00
Yann Gautier
21fdbf9bc6 docs: deprecate io_dummy driver
This drivers was only used by one upstream platform: STM32MP1 but only
when enabling the flag STM32MP_USE_STM32IMAGE. This flag and the
corresponding code is now removed from TF-A. The driver can then be
set to deprecated. It will be removed after v2.9 tag.

Signed-off-by: Yann Gautier <yann.gautier@st.com>
Change-Id: Ib8242a7291c7011d7f96a6a83609ec1996dce520
2022-12-19 09:12:42 +01:00
Sandrine Bailleux
ff4a2c17eb Merge "fix(intel): add mailbox error return status for FCS_DECRYPTION" into integration 2022-12-19 08:37:23 +01:00
Manish V Badarkhe
6952ce49c2 Merge "fix(arm): arm_rotpk_header undefined reference" into integration 2022-12-17 11:44:21 +01:00
laurenw-arm
95302e4b23 fix(arm): arm_rotpk_header undefined reference
Moving ARM_ROTPK_S to default to arm_dev_rotpk.S as it was not being
set for Juno cryptocell and this should be the value in most cases.

Change-Id: I56a5a4e61f1ca728b87322b0b09a0d73ed1d5ee0
Signed-off-by: Lauren Wehrmeister <lauren.wehrmeister@arm.com>
2022-12-16 17:17:20 +00:00
Mate Toth-Pal
25dd2172ae feat(tc): add delegated attest and measurement tests
This patch adds Delegated Attestation and Measured Boot tests to the
plat/arm/board/tc platform.
The test suite can be activated by adding the build time option
`PLATFORM_TEST=1` to the make command. In this case the boot sequence is
not finished, plat_error_handler is called after the tests are run
(regardless of the test result.)

The actual test code is coming from the Trusted-Firmware-M project. Some
of the files of the tf-m-tests and tf-m-extras repo are linked to the
BL31 image.

Versions used for testing:
https://git.trustedfirmware.org/TF-M/tf-m-tests
    614e8c358377e4146e8ee13d1246e59d01b4bf1b

https: //git.trustedfirmware.org/TF-M/tf-m-extras
    3be9fdd557e6df449de93c2101973fb011699b3d

Change-Id: I98f0f5f760a39d2d7e0dd11d33663ddb75f0b6fc
Signed-off-by: Mate Toth-Pal <mate.toth-pal@arm.com>
2022-12-16 17:15:57 +01:00
Joanna Farley
7b77bd0d1f Merge "fix(xilinx): resolve integer handling issue" into integration 2022-12-16 16:59:44 +01:00
Sandrine Bailleux
bba0e7ebd6 Merge "fix(intel): missing NCORE CCU snoop filter fix in BL2" into integration 2022-12-16 15:37:07 +01:00
Akshay Belsare
4e46db40fc fix(xilinx): resolve integer handling issue
OEN Number 48 to 63 is for Trusted App and OS.
GET_SMC_OEN limits the return value of OEN number to 63 by bitwise AND
operation with 0x3F. Thus the upper limit check for OEN value returned
by GET_SMC_OEN is not required.
Removing the upper limit check for the OEN value returned by GET_SMC_OEN
resolves integer handling issue CONSTANT_EXPRESSION_RESULT

Signed-off-by: Akshay Belsare <akshay.belsare@amd.com>
Change-Id: Ie04a4e2fb7cc85ec6055a5662736a805a89f7085
2022-12-16 17:43:43 +05:30
Bipin Ravi
309b18bdc9 Merge changes Ibb593369,I9cc984dd into integration
* changes:
  fix(el3_runtime): allow SErrors when executing in EL3
  fix(el3_runtime): do not save scr_el3 during EL3 entry
2022-12-15 16:51:32 +01:00
Madhukar Pappireddy
79664cfcf9 Merge changes I2b23e7c8,I779587af,Ic46de7a4,If753e987,I00171b05, ... into integration
* changes:
  fix(layerscape): unlock write access SMMU_CBn_ACTLR
  fix(nxp-ddr): add checking return value
  feat(lx2): enable OCRAM ECC
  fix(nxp-tools): fix coverity issue
  fix(nxp-ddr): fix coverity issue
  fix(nxp-ddr): fix underrun coverity issue
  fix(nxp-drivers): fix sd secure boot failure
  feat(lx2): support more variants
  fix(lx2): init global data before using it
  fix(ls1046a): 4 keys secureboot failure resolved
  fix(nxp-crypto): fix secure boot assert inclusion
  fix(nxp-crypto): fix coverity issue
  fix(nxp-drivers): fix fspi coverity issue
  fix(nxp-drivers): fix tzc380 memory regions config
  fix(layerscape): fix nv_storage assert checking
  fix(nxp-ddr): apply Max CDD values for warm boot
  fix(nxp-ddr): use CDDWW for write to read delay
  fix(layerscape): fix errata a008850
2022-12-15 16:38:07 +01:00
Soby Mathew
bc1123fab8 Merge "fix(gpt_rme): fix compilation error for gpt_rme.c" into integration 2022-12-15 15:52:42 +01:00
Olivier Deprez
6d4f4c3e39 Merge changes from topic "qemu_sel2" into integration
* changes:
  docs(build): describes the SPMC_OPTEE build option
  feat(qemu): support el3 spmc
  feat(el3-spmc): make platform logical partition optional
  feat(qemu): support s-el2 spmc
  feat(qemu): update abi between spmd and spmc
  fix(sptool): add dependency to SP image
2022-12-15 14:25:16 +01:00
Sieu Mun Tang
76ed32236a fix(intel): add mailbox error return status for FCS_DECRYPTION
Add 2 more mailbox error return status for FCS_DECRYPTION when sending
mailbox command to SDM

Signed-off-by: Sieu Mun Tang <sieu.mun.tang@intel.com>
Change-Id: Ifff4faa397232cc0080f9fca6f6948ac305915c4
2022-12-15 12:28:23 +08:00
Jit Loon Lim
b34a48c1ce fix(intel): missing NCORE CCU snoop filter fix in BL2
Clear Ncore CCU snoop filter. There is hardware bug in NCORE CCU IP
and it is causing an issue in the coherent directory tracking of
outstanding cache lines.

Signed-off-by: Jit Loon Lim <jit.loon.lim@intel.com>
Change-Id: I9ee67c94e6379d318516ae8f660a62323ce8d563
2022-12-15 12:27:17 +08:00
Madhukar Pappireddy
19e09e27f6 Merge changes Ib02688f7,If17fe04d into integration
* changes:
  fix(cpus): workaround for Cortex-X2 erratum 2768515
  fix(cpus): workaround for Cortex-A710 erratum 2768515
2022-12-14 17:44:00 +01:00
Jens Wiklander
bb0e33602d docs(build): describes the SPMC_OPTEE build option
Explains that the SPMC_OPTEE build option is used to load the SPMC at
S-EL1 using an OP-TEE specific mechanism.

Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
Change-Id: I71757d2d9ac98caf0ac6d8e64b221adaa0f70846
2022-12-14 17:06:31 +01:00
Manish Pandey
1cbe42a510 fix(el3_runtime): allow SErrors when executing in EL3
SCR_EL3.EA is set to 1 in BL31 initialization and is cleared before
entering to lower ELs(except for RAS FFH case "HANDLE_EA_EL3_FIRST_NS").
The cleared value persist even during run time when execution comes
back to EL3.

When SCR_EL3.EA is 0 and execution state is EL3, Async EAs(delivered
as SErrors) are implicitly masked and hence any Async EA by EL3 will
remain pending and will trap at the exception level EA is targeted
to and unmasked when entering lower EL.
This causes unexpected EA at lower EL. This is a very rare
to get SError in EL3 until unless there is any programming error.

This patch sets SCR_EL3.EA to 1 when entering EL3 from lower EL.

Signed-off-by: Manish Pandey <manish.pandey2@arm.com>
Change-Id: Ibb593369edb034f670fd85ee79adc9829b900a83
2022-12-14 15:47:34 +01:00
Manish Pandey
e61713b007 fix(el3_runtime): do not save scr_el3 during EL3 entry
scr_el3 registers cannot be modified in lower ELs which means it retains
the same value which is stored in the EL3 cpu context structure for the
given world. So, we should not save the register when entering to EL3
from lower EL as we have the copy of it present in cpu context.

During EL3 execution SCR_EL3 value can be modifed for following cases
 1. Changes which is required for EL3 execution, this change is temp
    and do not need to be saved.
 2. Changes which affects lower EL execution, these changes need to be
    written to cpu context as well and will be retrieved when scr_el3
    is restored as part of exiting EL3

Signed-off-by: Manish Pandey <manish.pandey2@arm.com>
Change-Id: I9cc984ddf50e27d09e361bd83b1b3c9f068cf2fd
2022-12-14 14:44:43 +00:00
Olivier Deprez
4e025c6326 Merge changes from topic "ffa_el3_spmc_fixes" into integration
* changes:
  fix(tsp): use verbose for power logs
  fix(el3-spmc): fix coverity scan warnings
  fix(el3-spmc): improve bound check for descriptor
2022-12-13 18:53:57 +01:00
Madhukar Pappireddy
8b1d186a58 Merge changes Ie6a13e4a,I517074b8,Ifd29b748,I1279d9cb,I3b78e0c5, ... into integration
* changes:
  feat(imx8mq): add BL31 PIE support
  refactor(imx8mq): introduce BL31_SIZE
  refactor(imx8mq): make use of setup_page_tables()
  feat(imx8mq): always set up console
  feat(imx8mq): remove empty bl31_plat_runtime_setup
  feat(imx8mq): make IMX_BOOT_UART_BASE configurable via build parameter
2022-12-13 15:13:48 +01:00
Lucas Stach
8cfa94b7a7 feat(imx8mq): add BL31 PIE support
Enable PIE support so the BL31 firmware can be loaded from anywhere
within the OCRAM (SRAM). For the PIE support we only need to replace
the BL31_BASE define by the BL31_START symbol which is a relocatable
and we need to enable it by setting ENABLE_PIE := 1.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Change-Id: Ie6a13e4ae0fdc6627a94798d7a86df7d5b310896
2022-12-13 11:08:42 +01:00
Lucas Stach
0445a4ab1f refactor(imx8mq): introduce BL31_SIZE
No functional change.

Introduce BL31_SIZE define and calculate the limits based on the
BL31_BASE and the BL31_SIZE define. Also make use of SZ_64K to make
it easier to read. This is required for later BL31 PIE support since
it drops the calculation based on the BL31_LIMIT and BL31_BASE.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Change-Id: I517074b866b5bf11841b51777f87c926b304488d
2022-12-13 11:08:42 +01:00
Lucas Stach
c0fb887433 refactor(imx8mq): make use of setup_page_tables()
Improve code readability and align with other i.MX8M* platforms.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Change-Id: Ifd29b74872e3a567288d208de4827403078164e9
2022-12-13 11:08:42 +01:00