diff options
author | Michael Neuling <mikey@neuling.org> | 2017-03-23 17:15:07 +1100 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2017-03-24 12:50:40 +1100 |
commit | ded2533b5b31252639ac354521127a239df39e30 (patch) | |
tree | 498b87f64b1ff81ea807dbb960961b9cd67092aa /hw/xscom.c | |
parent | b8ad0349ae8a119db471821c9a0a6a0e2ae2ffeb (diff) | |
download | skiboot-ded2533b5b31252639ac354521127a239df39e30.zip skiboot-ded2533b5b31252639ac354521127a239df39e30.tar.gz skiboot-ded2533b5b31252639ac354521127a239df39e30.tar.bz2 |
xscom: Harden indirect writes
Indirect scoms can only set certain bits of data. Ensure only these
are set when trying to write.
Signed-off-by: Michael Neuling <mikey@neuling.org>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'hw/xscom.c')
-rw-r--r-- | hw/xscom.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -369,6 +369,10 @@ static int xscom_indirect_write(uint32_t gcid, uint64_t pcb_addr, uint64_t val) if (proc_gen < proc_gen_p8) return OPAL_UNSUPPORTED; + /* Only 16 bit data with indirect */ + if (val & ~(XSCOM_ADDR_IND_DATA)) + return OPAL_PARAMETER; + /* Write indirect address & data */ addr = pcb_addr & 0x7fffffff; data = pcb_addr & XSCOM_ADDR_IND_ADDR; |