Created
September 29, 2014 08:25
-
-
Save dvdhrm/844b8a86ce2bf684c3be to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git a/util.c b/util.c | |
| index b2c8742..393f696 100644 | |
| --- a/util.c | |
| +++ b/util.c | |
| @@ -68,3 +68,151 @@ int kdbus_item_validate_name(const struct kdbus_item *item) | |
| return kdbus_sysname_is_valid(item->str); | |
| } | |
| + | |
| +int kdbus_item_validate(const struct kdbus_item *item) | |
| +{ | |
| + size_t payload_size = KDBUS_ITEM_PAYLOAD_SIZE(item); | |
| + | |
| + if (item->size < KDBUS_ITEM_HEADER_SIZE) | |
| + return -EINVAL; | |
| + | |
| + switch (item->type) { | |
| + case KDBUS_ITEM_PAYLOAD_VEC: | |
| + if (payload_size != sizeof(struct kdbus_vec)) | |
| + return -EINVAL; | |
| + break; | |
| + | |
| + case KDBUS_ITEM_PAYLOAD_OFF: | |
| + if (payload_size != sizeof(struct kdbus_vec)) | |
| + return -EINVAL; | |
| + break; | |
| + | |
| + case KDBUS_ITEM_PAYLOAD_MEMFD: | |
| + if (payload_size != sizeof(struct kdbus_memfd)) | |
| + return -EINVAL; | |
| + break; | |
| + | |
| + case KDBUS_ITEM_FDS: | |
| + if (payload_size % sizeof(int) != 0) | |
| + return -EINVAL; | |
| + break; | |
| + | |
| + case KDBUS_ITEM_BLOOM_PARAMETER: | |
| + if (payload_size != sizeof(struct kdbus_bloom_parameter)) | |
| + return -EINVAL; | |
| + break; | |
| + | |
| + case KDBUS_ITEM_BLOOM_FILTER: | |
| + /* followed by the bloom-mask, depends on the bloom-size */ | |
| + if (payload_size < sizeof(struct kdbus_bloom_filter)) | |
| + return -EINVAL; | |
| + break; | |
| + | |
| + case KDBUS_ITEM_BLOOM_MASK: | |
| + /* size depends on bloom-size of bus */ | |
| + break; | |
| + | |
| + case KDBUS_ITEM_DST_NAME: | |
| + if (!kdbus_item_validate_nul(item)) | |
| + return -EINVAL; | |
| + break; | |
| + | |
| + case KDBUS_ITEM_MAKE_NAME: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_MEMFD_NAME: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_ATTACH_FLAGS: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_NAME: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_ID: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_TIMESTAMP: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_CREDS: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_AUXGROUPS: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_PID_COMM: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_TID_COMM: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_EXE: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_CMDLINE: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_CGROUP: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_CAPS: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_SECLABEL: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_AUDIT: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_CONN_NAME: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_POLICY_ACCESS: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_NAME_ADD: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_NAME_REMOVE: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_NAME_CHANGE: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_ID_ADD: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_ID_REMOVE: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_REPLY_TIMEOUT: | |
| + break; | |
| + | |
| + case KDBUS_ITEM_REPLY_DEAD: | |
| + break; | |
| + | |
| + default: | |
| + break; | |
| + } | |
| +} | |
| + | |
| +int kdbus_items_validate(const struct kdbus_item *items, size_t items_size) | |
| +{ | |
| + struct kdbus_item *item; | |
| + int ret; | |
| + | |
| + KDBUS_ITEMS_FOREACH(item, items, items_size) { | |
| + if (!KDBUS_ITEM_VALID(item, items, items_size)) | |
| + return -EINVAL; | |
| + | |
| + ret = kdbus_item_validate(item); | |
| + if (ret < 0) | |
| + return ret; | |
| + } | |
| + | |
| + if (!KDBUS_ITEMS_END(item, items, items_size)) | |
| + return -EINVAL; | |
| + | |
| + return 0; | |
| +} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment