ubusd: handle invoke on event object without data
When a built-in object is invoked with UBUS_ATTR_DATA absent, recv_msg will be called with NULL as the msg argument and ubusd_forward_event and ubusd_alloc_event_pattern need to handle this. Otherwise, a truncated invoke of "send" or "register" on UBUS_SYSTEM_OBJECT_EVENT that is missing UBUS_ATTR_DATA will cause ubusd to crash with SIGSEGV. Signed-off-by: Erik Karlsson <erik.karlsson@genexis.eu>
This commit is contained in:
parent
2f793a4eb0
commit
2bebf93cd3
1 changed files with 6 additions and 0 deletions
|
@ -63,6 +63,9 @@ static int ubusd_alloc_event_pattern(struct ubus_client *cl, struct blob_attr *m
|
|||
bool partial = false;
|
||||
int len;
|
||||
|
||||
if (!msg)
|
||||
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||
|
||||
blobmsg_parse(evr_policy, EVREG_LAST, attr, blob_data(msg), blob_len(msg));
|
||||
if (!attr[EVREG_OBJECT] || !attr[EVREG_PATTERN])
|
||||
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||
|
@ -209,6 +212,9 @@ static int ubusd_forward_event(struct ubus_client *cl, struct blob_attr *msg)
|
|||
struct blob_attr *attr[EVMSG_LAST];
|
||||
const char *id;
|
||||
|
||||
if (!msg)
|
||||
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||
|
||||
blobmsg_parse(ev_policy, EVMSG_LAST, attr, blob_data(msg), blob_len(msg));
|
||||
if (!attr[EVMSG_ID] || !attr[EVMSG_DATA])
|
||||
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||
|
|
Loading…
Reference in a new issue