RE: [EXT] [bug report] media: amphion: implement windsor encoder rpc interface

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Dan Carpenter [mailto:dan.carpenter@xxxxxxxxxx]
> Sent: Thursday, March 10, 2022 2:57 PM
> To: Ming Qian <ming.qian@xxxxxxx>
> Cc: linux-media@xxxxxxxxxxxxxxx
> Subject: [EXT] [bug report] media: amphion: implement windsor encoder rpc
> interface
> 
> Caution: EXT Email
> 
> Hello Ming Qian,
> 
> The patch d82977796c48: "media: amphion: implement windsor encoder rpc
> interface" from Feb 24, 2022, leads to the following Smatch static checker
> warning:
> 
>         drivers/media/platform/amphion/vpu_windsor.c:823
> vpu_windsor_config_memory_resource()
>         error: buffer overflow 'pool->enc_frames' 6 <= 7
> 
> drivers/media/platform/amphion/vpu_windsor.c
>     807 int vpu_windsor_config_memory_resource(struct vpu_shared_addr
> *shared,
>     808                                        u32 instance,
>     809                                        u32 type,
>     810                                        u32 index,
>     811                                        struct vpu_buffer *buf)
>     812 {
>     813         struct vpu_enc_mem_pool *pool;
>     814         struct vpu_enc_memory_resource *res;
>     815
>     816         if (instance >= VID_API_NUM_STREAMS)
>                                 ^^^^^^^^^^^^^^^^^^^ This is 8.
> 
>     817                 return -EINVAL;
>     818
>     819         pool = get_mem_pool(shared, instance);
>     820
>     821         switch (type) {
>     822         case MEM_RES_ENC:
> --> 823                 res = &pool->enc_frames[index];
> 
> This only has WINDSOR_MAX_SRC_FRAMES elements.

Hi Dan,
    I don't get the point, the instance and index is different, and one vpu core can support 8 instances (VID_API_NUM_STREAMS),
The enc_frame count of one instance won't exceed 6 (WINDSOR_MAX_SRC_FRAMES).
    Maybe I should add a check for the index like:

	If (index >= ARRAY_SIZE(pool->enc_frames))
		return -EINVAL;

> 
>     824                 break;
>     825         case MEM_RES_REF:
>     826                 res = &pool->ref_frames[index];
>     827                 break;
>     828         case MEM_RES_ACT:
>     829                 res = &pool->act_frame;
>     830                 break;
>     831         default:
>     832                 return -EINVAL;
>     833         }
>     834
>     835         res->phys = buf->phys;
>     836         res->virt = buf->phys - shared->boot_addr;
>     837         res->size = buf->length;
>     838
>     839         return 0;
>     840 }
> 
> regards,
> dan carpenter




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux