summaryrefslogtreecommitdiff
path: root/libubus-obj.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2018-07-25 10:37:30 +0200
committerFelix Fietkau <nbd@nbd.name>2018-07-25 10:45:34 +0200
commit884be451622d21fe3a7b06cc5b9d245bc4fffbf2 (patch)
treeba4f657cc211f845e2c8a1ac539781cf53c8738c /libubus-obj.c
parent5bae22eb5472c9c7cc30caa9a84004bba19940d3 (diff)
downloadubus-884be451622d21fe3a7b06cc5b9d245bc4fffbf2.tar.gz
libubus: check for non-NULL data before running callbacks
UBUS_MSG_INVOKE and UBUS_MSG_DATA can be sent without UBUS_ATTR_DATA present. Most ubus users assume that the msg argument passed can never be NULL, so this change prevents a crash Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'libubus-obj.c')
-rw-r--r--libubus-obj.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/libubus-obj.c b/libubus-obj.c
index c1931b3..2580b24 100644
--- a/libubus-obj.c
+++ b/libubus-obj.c
@@ -74,7 +74,7 @@ ubus_process_invoke(struct ubus_context *ctx, struct ubus_msghdr *hdr,
if (attrbuf[UBUS_ATTR_NO_REPLY])
no_reply = blob_get_int8(attrbuf[UBUS_ATTR_NO_REPLY]);
-
+
req.peer = hdr->peer;
req.seq = hdr->seq;
req.object = obj->id;
@@ -94,6 +94,11 @@ ubus_process_invoke(struct ubus_context *ctx, struct ubus_msghdr *hdr,
goto send;
found:
+ if (!attrbuf[UBUS_ATTR_DATA]) {
+ ret = UBUS_STATUS_INVALID_ARGUMENT;
+ goto send;
+ }
+
ret = obj->methods[method].handler(ctx, obj, &req,
blob_data(attrbuf[UBUS_ATTR_METHOD]),
attrbuf[UBUS_ATTR_DATA]);