summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mediactl.c9
-rw-r--r--src/tools.h1
2 files changed, 9 insertions, 1 deletions
diff --git a/src/mediactl.c b/src/mediactl.c
index 5b8c587..bc6a713 100644
--- a/src/mediactl.c
+++ b/src/mediactl.c
@@ -63,10 +63,17 @@ struct media_entity *media_get_entity_by_name(struct media_device *media,
{
unsigned int i;
+ /* A match is impossible if the entity name is longer than the maximum
+ * size we can get from the kernel.
+ */
+ if (length >= FIELD_SIZEOF(struct media_entity_desc, name))
+ return NULL;
+
for (i = 0; i < media->entities_count; ++i) {
struct media_entity *entity = &media->entities[i];
- if (strncmp(entity->info.name, name, length) == 0)
+ if (strncmp(entity->info.name, name, length) == 0 &&
+ entity->info.name[length] == '\0')
return entity;
}
diff --git a/src/tools.h b/src/tools.h
index e56edb2..de06cb3 100644
--- a/src/tools.h
+++ b/src/tools.h
@@ -23,6 +23,7 @@
#define __TOOLS_H__
#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
+#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
#endif /* __TOOLS_H__ */