Paul Beesley | 1ed4cf2 | 2019-03-07 16:22:44 +0000 | [diff] [blame] | 1 | Advisory TFV-5 (CVE-2017-15031) |
| 2 | =============================== |
| 3 | |
Joel Hutton | 9e60563 | 2019-02-25 15:18:56 +0000 | [diff] [blame] | 4 | +----------------+-------------------------------------------------------------+ |
| 5 | | Title | Not initializing or saving/restoring ``PMCR_EL0`` can leak | |
| 6 | | | secure world timing information | |
| 7 | +================+=============================================================+ |
Paul Beesley | 75017f2 | 2019-03-05 17:10:07 +0000 | [diff] [blame] | 8 | | CVE ID | `CVE-2017-15031`_ | |
Joel Hutton | 9e60563 | 2019-02-25 15:18:56 +0000 | [diff] [blame] | 9 | +----------------+-------------------------------------------------------------+ |
Alexei Fedorov | 6917198 | 2019-10-30 10:24:55 +0000 | [diff] [blame] | 10 | | Date | 02 Oct 2017, updated on 04 Nov 2019 | |
Joel Hutton | 9e60563 | 2019-02-25 15:18:56 +0000 | [diff] [blame] | 11 | +----------------+-------------------------------------------------------------+ |
Alexei Fedorov | 6917198 | 2019-10-30 10:24:55 +0000 | [diff] [blame] | 12 | | Versions | All, up to and including v2.1 | |
Joel Hutton | 9e60563 | 2019-02-25 15:18:56 +0000 | [diff] [blame] | 13 | | Affected | | |
| 14 | +----------------+-------------------------------------------------------------+ |
| 15 | | Configurations | All | |
| 16 | | Affected | | |
| 17 | +----------------+-------------------------------------------------------------+ |
| 18 | | Impact | Leakage of sensitive secure world timing information | |
| 19 | +----------------+-------------------------------------------------------------+ |
| 20 | | Fix Version | `Pull Request #1127`_ (merged on 18 October 2017) | |
Alexei Fedorov | 6917198 | 2019-10-30 10:24:55 +0000 | [diff] [blame] | 21 | | | | |
| 22 | | | `Commit e290a8fcbc`_ (merged on 23 August 2019) | |
| 23 | | | | |
| 24 | | | `Commit c3e8b0be9b`_ (merged on 27 September 2019) | |
Joel Hutton | 9e60563 | 2019-02-25 15:18:56 +0000 | [diff] [blame] | 25 | +----------------+-------------------------------------------------------------+ |
Alexei Fedorov | 6917198 | 2019-10-30 10:24:55 +0000 | [diff] [blame] | 26 | | Credit | Arm, Marek Bykowski | |
Joel Hutton | 9e60563 | 2019-02-25 15:18:56 +0000 | [diff] [blame] | 27 | +----------------+-------------------------------------------------------------+ |
| 28 | |
| 29 | The ``PMCR_EL0`` (Performance Monitors Control Register) provides details of the |
| 30 | Performance Monitors implementation, including the number of counters |
| 31 | implemented, and configures and controls the counters. If the ``PMCR_EL0.DP`` |
| 32 | bit is set to zero, the cycle counter (when enabled) counts during secure world |
| 33 | execution, even when prohibited by the debug signals. |
| 34 | |
Alexei Fedorov | 6917198 | 2019-10-30 10:24:55 +0000 | [diff] [blame] | 35 | Since TF-A does not save and restore ``PMCR_EL0`` when switching between the |
Joel Hutton | 9e60563 | 2019-02-25 15:18:56 +0000 | [diff] [blame] | 36 | normal and secure worlds, normal world code can set ``PMCR_EL0.DP`` to zero to |
| 37 | cause leakage of secure world timing information. This register should be added |
Alexei Fedorov | 6917198 | 2019-10-30 10:24:55 +0000 | [diff] [blame] | 38 | to the list of saved/restored registers both when entering EL3 and also |
| 39 | transitioning to S-EL1. |
Joel Hutton | 9e60563 | 2019-02-25 15:18:56 +0000 | [diff] [blame] | 40 | |
| 41 | Furthermore, ``PMCR_EL0.DP`` has an architecturally ``UNKNOWN`` reset value. |
| 42 | Since Arm TF does not initialize this register, it's possible that on at least |
| 43 | some implementations, ``PMCR_EL0.DP`` is set to zero by default. This and other |
| 44 | bits with an architecturally UNKNOWN reset value should be initialized to |
| 45 | sensible default values in the secure context. |
| 46 | |
| 47 | The same issue exists for the equivalent AArch32 register, ``PMCR``, except that |
| 48 | here ``PMCR_EL0.DP`` architecturally resets to zero. |
| 49 | |
Alexei Fedorov | 6917198 | 2019-10-30 10:24:55 +0000 | [diff] [blame] | 50 | NOTE: The original pull request referenced above only fixed the issue for S-EL1 |
| 51 | whereas the EL3 was fixed in the later commits. |
| 52 | |
Paul Beesley | 75017f2 | 2019-03-05 17:10:07 +0000 | [diff] [blame] | 53 | .. _CVE-2017-15031: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-15031 |
Joel Hutton | 9e60563 | 2019-02-25 15:18:56 +0000 | [diff] [blame] | 54 | .. _Pull Request #1127: https://github.com/ARM-software/arm-trusted-firmware/pull/1127 |
Alexei Fedorov | 6917198 | 2019-10-30 10:24:55 +0000 | [diff] [blame] | 55 | .. _Commit e290a8fcbc: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/commit/?id=e290a8fcbc |
| 56 | .. _Commit c3e8b0be9b: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/commit/?id=c3e8b0be9b |
| 57 | |