Commit ae491542 authored by Dave Airlie's avatar Dave Airlie Committed by Dave Airlie

drm/dp/mst: make mst i2c transfer code more robust.

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@vger.kernel.org
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent bc8c131c
...@@ -2801,12 +2801,13 @@ static int drm_dp_mst_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs ...@@ -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) if (msgs[num - 1].flags & I2C_M_RD)
reading = true; reading = true;
if (!reading) { if (!reading || (num - 1 > DP_REMOTE_I2C_READ_MAX_TRANSACTIONS)) {
DRM_DEBUG_KMS("Unsupported I2C transaction for MST device\n"); DRM_DEBUG_KMS("Unsupported I2C transaction for MST device\n");
ret = -EIO; ret = -EIO;
goto out; goto out;
} }
memset(&msg, 0, sizeof(msg));
msg.req_type = DP_REMOTE_I2C_READ; msg.req_type = DP_REMOTE_I2C_READ;
msg.u.i2c_read.num_transactions = num - 1; msg.u.i2c_read.num_transactions = num - 1;
msg.u.i2c_read.port_number = port->port_num; msg.u.i2c_read.port_number = port->port_num;
......
...@@ -253,6 +253,7 @@ struct drm_dp_remote_dpcd_write { ...@@ -253,6 +253,7 @@ struct drm_dp_remote_dpcd_write {
u8 *bytes; u8 *bytes;
}; };
#define DP_REMOTE_I2C_READ_MAX_TRANSACTIONS 4
struct drm_dp_remote_i2c_read { struct drm_dp_remote_i2c_read {
u8 num_transactions; u8 num_transactions;
u8 port_number; u8 port_number;
...@@ -262,7 +263,7 @@ struct drm_dp_remote_i2c_read { ...@@ -262,7 +263,7 @@ struct drm_dp_remote_i2c_read {
u8 *bytes; u8 *bytes;
u8 no_stop_bit; u8 no_stop_bit;
u8 i2c_transaction_delay; u8 i2c_transaction_delay;
} transactions[4]; } transactions[DP_REMOTE_I2C_READ_MAX_TRANSACTIONS];
u8 read_i2c_device_id; u8 read_i2c_device_id;
u8 num_bytes_read; u8 num_bytes_read;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment