]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
media: mc: Check pad flag validity
authorSakari Ailus <sakari.ailus@linux.intel.com>
Tue, 25 Apr 2023 09:30:45 +0000 (12:30 +0300)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Sat, 7 Oct 2023 08:55:48 +0000 (10:55 +0200)
Check the validity of pad flags on entity init. Exactly one of the flags
must be set.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/mc/mc-entity.c

index 83468d4a440b3546c53ce4da2b3337018af6f7cf..543a392f863571a89a8d41de813c9b4454244360 100644 (file)
@@ -197,6 +197,7 @@ int media_entity_pads_init(struct media_entity *entity, u16 num_pads,
        struct media_device *mdev = entity->graph_obj.mdev;
        struct media_pad *iter;
        unsigned int i = 0;
+       int ret = 0;
 
        if (num_pads >= MEDIA_ENTITY_MAX_PADS)
                return -E2BIG;
@@ -210,15 +211,27 @@ int media_entity_pads_init(struct media_entity *entity, u16 num_pads,
        media_entity_for_each_pad(entity, iter) {
                iter->entity = entity;
                iter->index = i++;
+
+               if (hweight32(iter->flags & (MEDIA_PAD_FL_SINK |
+                                            MEDIA_PAD_FL_SOURCE)) != 1) {
+                       ret = -EINVAL;
+                       break;
+               }
+
                if (mdev)
                        media_gobj_create(mdev, MEDIA_GRAPH_PAD,
                                          &iter->graph_obj);
        }
 
+       if (ret && mdev) {
+               media_entity_for_each_pad(entity, iter)
+                       media_gobj_destroy(&iter->graph_obj);
+       }
+
        if (mdev)
                mutex_unlock(&mdev->graph_mutex);
 
-       return 0;
+       return ret;
 }
 EXPORT_SYMBOL_GPL(media_entity_pads_init);