Add range check for samsung,lane-count to avoid invalid values.
Validation is only applied when the property exists to maintain
backward compatibility.

Suggested-by: Luca Ceresoli <[email protected]>
Signed-off-by: Damon Ding <[email protected]>
---
 drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c 
b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
index 8cf6b73bceac..699a7f380c56 100644
--- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
+++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
@@ -1238,6 +1238,7 @@ static int analogix_dp_dt_parse_pdata(struct 
analogix_dp_device *dp)
 {
        struct device_node *dp_node = dp->dev->of_node;
        struct video_info *video_info = &dp->video_info;
+       int ret;
 
        switch (dp->plat_data->dev_type) {
        case RK3288_DP:
@@ -1260,8 +1261,16 @@ static int analogix_dp_dt_parse_pdata(struct 
analogix_dp_device *dp)
                 */
                of_property_read_u32(dp_node, "samsung,link-rate",
                                     &video_info->max_link_rate);
-               of_property_read_u32(dp_node, "samsung,lane-count",
-                                    &video_info->max_lane_count);
+               ret = of_property_read_u32(dp_node, "samsung,lane-count",
+                                          &video_info->max_lane_count);
+               if (!ret) {
+                       if (video_info->max_lane_count == 0 ||
+                           video_info->max_lane_count > LANE_COUNT4) {
+                               dev_err(dp->dev, "samsung,lane-count = %d is 
out of range\n",
+                                       video_info->max_lane_count);
+                               return -EINVAL;
+                       }
+               }
                break;
        }
 
-- 
2.34.1

Reply via email to