]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
[media] media: Check for active and has_no_links overrun
authorSakari Ailus <sakari.ailus@linux.intel.com>
Mon, 5 Oct 2015 15:45:29 +0000 (12:45 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Wed, 4 Oct 2017 20:16:14 +0000 (17:16 -0300)
The active and has_no_links arrays will overrun in
media_entity_pipeline_start() if there's an entity which has more than
MEDIA_ENTITY_MAX_PAD pads. Ensure in media_entity_init() that there are
fewer pads than that.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/media-entity.c

index 2ace0410d277c373853ec2fcb58edb30b8bcfc0c..f7c6d64e60310c2fe83916fb83c9a162dc607d36 100644 (file)
@@ -214,12 +214,20 @@ void media_gobj_destroy(struct media_gobj *gobj)
        gobj->mdev = NULL;
 }
 
+/*
+ * TODO: Get rid of this.
+ */
+#define MEDIA_ENTITY_MAX_PADS          512
+
 int media_entity_pads_init(struct media_entity *entity, u16 num_pads,
                           struct media_pad *pads)
 {
        struct media_device *mdev = entity->graph_obj.mdev;
        unsigned int i;
 
+       if (num_pads >= MEDIA_ENTITY_MAX_PADS)
+               return -E2BIG;
+
        entity->num_pads = num_pads;
        entity->pads = pads;
 
@@ -280,11 +288,6 @@ static struct media_entity *stack_pop(struct media_graph *graph)
 #define link_top(en)   ((en)->stack[(en)->top].link)
 #define stack_top(en)  ((en)->stack[(en)->top].entity)
 
-/*
- * TODO: Get rid of this.
- */
-#define MEDIA_ENTITY_MAX_PADS          512
-
 /**
  * media_graph_walk_init - Allocate resources for graph walk
  * @graph: Media graph structure that will be used to walk the graph