[PATCH] drm/dp/mst: make mst i2c transfer code more robust.
Daniel Vetter
daniel at ffwll.ch
Wed Oct 14 04:22:54 PDT 2015
On Wed, Oct 14, 2015 at 06:51:17PM +1000, Dave Airlie wrote:
> This zeroes the msg so no random stack data ends up getting
> sent, it also limits the function to not accepting > 4
> i2c msgs.
>
> Cc: stable at vger.kernel.org
> Signed-off-by: Dave Airlie <airlied at redhat.com>
Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
> drivers/gpu/drm/drm_dp_mst_topology.c | 3 ++-
> include/drm/drm_dp_mst_helper.h | 3 ++-
> 2 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
> index bf27a07..5bca390 100644
> --- a/drivers/gpu/drm/drm_dp_mst_topology.c
> +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
> @@ -2801,12 +2801,13 @@ static int drm_dp_mst_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs
> if (msgs[num - 1].flags & I2C_M_RD)
> reading = true;
>
> - if (!reading) {
> + if (!reading || (num - 1 > DP_REMOTE_I2C_READ_MAX_TRANSACTIONS)) {
> DRM_DEBUG_KMS("Unsupported I2C transaction for MST device\n");
> ret = -EIO;
> goto out;
> }
>
> + memset(&msg, 0, sizeof(msg));
> msg.req_type = DP_REMOTE_I2C_READ;
> msg.u.i2c_read.num_transactions = num - 1;
> msg.u.i2c_read.port_number = port->port_num;
> diff --git a/include/drm/drm_dp_mst_helper.h b/include/drm/drm_dp_mst_helper.h
> index 0f408b0..5340099 100644
> --- a/include/drm/drm_dp_mst_helper.h
> +++ b/include/drm/drm_dp_mst_helper.h
> @@ -253,6 +253,7 @@ struct drm_dp_remote_dpcd_write {
> u8 *bytes;
> };
>
> +#define DP_REMOTE_I2C_READ_MAX_TRANSACTIONS 4
> struct drm_dp_remote_i2c_read {
> u8 num_transactions;
> u8 port_number;
> @@ -262,7 +263,7 @@ struct drm_dp_remote_i2c_read {
> u8 *bytes;
> u8 no_stop_bit;
> u8 i2c_transaction_delay;
> - } transactions[4];
> + } transactions[DP_REMOTE_I2C_READ_MAX_TRANSACTIONS];
> u8 read_i2c_device_id;
> u8 num_bytes_read;
> };
> --
> 2.4.3
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the dri-devel
mailing list