summaryrefslogtreecommitdiff
path: root/drivers/video
diff options
context:
space:
mode:
authorXiaoming Zhou <zhoux@codeaurora.org>2014-03-26 16:32:36 -0400
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:28:30 -0700
commit20cd4e4a73d7f7667fe2bfbb62d535ef2e3f981d (patch)
treec814766d522b68dc60d23c026f208468eb5b34fd /drivers/video
parentde66a9ddbe8f40e0f8c6633b578aefe562cc3e30 (diff)
msm: mdss: add overlay configuration error handling logic
This is to add the error handling logic to catch the wrong overlay configuration from user space. Change-Id: I59523de392dcd21309bfa9eb9a944047505df2a3 Signed-off-by: Xiaoming Zhou <zhoux@codeaurora.org>
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/fbdev/msm/mdp3_ctrl.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/video/fbdev/msm/mdp3_ctrl.c b/drivers/video/fbdev/msm/mdp3_ctrl.c
index 401e1dcf6974..7c9aeaf43513 100644
--- a/drivers/video/fbdev/msm/mdp3_ctrl.c
+++ b/drivers/video/fbdev/msm/mdp3_ctrl.c
@@ -953,6 +953,7 @@ static int mdp3_overlay_queue_buffer(struct msm_fb_data_type *mfd,
struct mdp3_session_data *mdp3_session = mfd->mdp.private1;
struct msmfb_data *img = &req->data;
struct mdp3_img_data data;
+ struct mdp3_dma *dma = mdp3_session->dma;
rc = mdp3_get_img(img, &data, MDP3_CLIENT_DMA_P);
if (rc) {
@@ -960,6 +961,12 @@ static int mdp3_overlay_queue_buffer(struct msm_fb_data_type *mfd,
return rc;
}
+ if (data.len < dma->source_config.stride * dma->source_config.height) {
+ pr_err("buf length is smaller than required by dma configuration\n");
+ mdp3_put_img(&data, MDP3_CLIENT_DMA_P);
+ return -EINVAL;
+ }
+
rc = mdp3_bufq_push(&mdp3_session->bufq_in, &data);
if (rc) {
pr_err("fail to queue the overlay buffer, buffer drop\n");
@@ -980,6 +987,12 @@ static int mdp3_overlay_play(struct msm_fb_data_type *mfd,
mutex_lock(&mdp3_session->lock);
+ if (mdp3_session->overlay.id == MSMFB_NEW_REQUEST) {
+ pr_err("overlay play without overlay set first\n");
+ mutex_unlock(&mdp3_session->lock);
+ return -EINVAL;
+ }
+
if (mfd->panel_power_on)
rc = mdp3_overlay_queue_buffer(mfd, req);
else