diff mbox

[v2,3/5] xscom: Harden indirect writes

Message ID 20170323061509.4231-3-mikey@neuling.org
State Accepted
Headers show

Commit Message

Michael Neuling March 23, 2017, 6:15 a.m. UTC
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>
---
 hw/xscom.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Cédric Le Goater March 23, 2017, 1:18 p.m. UTC | #1
On 03/23/2017 07:15 AM, Michael Neuling wrote:
> 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>

> ---
>  hw/xscom.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/hw/xscom.c b/hw/xscom.c
> index 6fde427f1e..b0bc260087 100644
> --- a/hw/xscom.c
> +++ b/hw/xscom.c
> @@ -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;
>
diff mbox

Patch

diff --git a/hw/xscom.c b/hw/xscom.c
index 6fde427f1e..b0bc260087 100644
--- a/hw/xscom.c
+++ b/hw/xscom.c
@@ -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;