On Mon Jun 16 15:29:15 2025 +0000, Ricardo Ribalda wrote:
> The driver uses "whole" fps in all its calculations (e.g. in
> load_per_instance()). Those calculation expect an fps bigger than 1, and
> not big enough to overflow.
> 
> Clamp the param if the user provides a value that will result in an invalid
> fps.
> 
> Reported-by: Hans Verkuil <hverk...@xs4all.nl>
> Closes: 
> https://lore.kernel.org/linux-media/f11653a7-bc49-48cd-9cdb-165914745...@xs4all.nl/T/#m91cd962ac942834654f94c92206e2f85ff7d97f0
> Fixes: aaaa93eda64b ("[media] media: venus: venc: add video encoder files")
> Cc: sta...@vger.kernel.org
> Signed-off-by: Ricardo Ribalda <riba...@chromium.org>
> [bod: Change "parm" to "param"]
> Signed-off-by: Bryan O'Donoghue <b...@kernel.org>
> Signed-off-by: Hans Verkuil <hverk...@xs4all.nl>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/platform/qcom/venus/venc.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

---

diff --git a/drivers/media/platform/qcom/venus/venc.c 
b/drivers/media/platform/qcom/venus/venc.c
index c7f8e37dba9b..b9ccee870c3d 100644
--- a/drivers/media/platform/qcom/venus/venc.c
+++ b/drivers/media/platform/qcom/venus/venc.c
@@ -411,11 +411,10 @@ static int venc_s_parm(struct file *file, void *fh, 
struct v4l2_streamparm *a)
        us_per_frame = timeperframe->numerator * (u64)USEC_PER_SEC;
        do_div(us_per_frame, timeperframe->denominator);
 
-       if (!us_per_frame)
-               return -EINVAL;
-
+       us_per_frame = clamp(us_per_frame, 1, USEC_PER_SEC);
        fps = (u64)USEC_PER_SEC;
        do_div(fps, us_per_frame);
+       fps = min(VENUS_MAX_FPS, fps);
 
        inst->timeperframe = *timeperframe;
        inst->fps = fps;

Reply via email to