Skip to content

Commit

Permalink
[media] v4l2-dv-timings: add sanity checks in cvt,gtf calculations
Browse files Browse the repository at this point in the history
Wrong values of hfreq and image height can lead to strange timings.
Avoid timing calculations for such values.

Suggested By: Martin Bugge <marbugge@cisco.com>

Cc: Martin Bugge <marbugge@cisco.com>
Signed-off-by: Prashant Laddha <prladdha@cisco.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  • Loading branch information
Prashant Laddha authored and Mauro Carvalho Chehab committed May 1, 2015
1 parent d7ed5a3 commit 947ed99
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions drivers/media/v4l2-core/v4l2-dv-timings.c
Original file line number Diff line number Diff line change
Expand Up @@ -365,6 +365,9 @@ bool v4l2_detect_cvt(unsigned frame_height, unsigned hfreq, unsigned vsync,
else
return false;

if (hfreq == 0)
return false;

/* Vertical */
if (reduced_blanking) {
v_fp = CVT_RB_V_FPORCH;
Expand All @@ -382,6 +385,9 @@ bool v4l2_detect_cvt(unsigned frame_height, unsigned hfreq, unsigned vsync,
}
image_height = (frame_height - v_fp - vsync - v_bp + 1) & ~0x1;

if (image_height < 0)
return false;

/* Aspect ratio based on vsync */
switch (vsync) {
case 4:
Expand Down Expand Up @@ -527,12 +533,18 @@ bool v4l2_detect_gtf(unsigned frame_height,
else
return false;

if (hfreq == 0)
return false;

/* Vertical */
v_fp = GTF_V_FP;

v_bp = (GTF_MIN_VSYNC_BP * hfreq + 500000) / 1000000 - vsync;
image_height = (frame_height - v_fp - vsync - v_bp + 1) & ~0x1;

if (image_height < 0)
return false;

if (aspect.numerator == 0 || aspect.denominator == 0) {
aspect.numerator = 16;
aspect.denominator = 9;
Expand Down

0 comments on commit 947ed99

Please sign in to comment.