Attribute values is not copied with dbus_message_iter_get_fixed_array, so gatt write callback needs to replace old value with reallocation and copy. --- client/gatt.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/client/gatt.c b/client/gatt.c index 52a999dc9..102c11437 100644 --- a/client/gatt.c +++ b/client/gatt.c @@ -1589,12 +1589,18 @@ static DBusMessage *chrc_read_value(DBusConnection *conn, DBusMessage *msg, static int parse_value_arg(DBusMessageIter *iter, uint8_t **value, int *len) { DBusMessageIter array; + uint8_t *read_value; + int read_len; if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_ARRAY) return -EINVAL; dbus_message_iter_recurse(iter, &array); - dbus_message_iter_get_fixed_array(&array, value, len); + dbus_message_iter_get_fixed_array(&array, &read_value, &read_len); + + g_free(*value); + *value = g_memdup(read_value, read_len); + *len = read_len; return 0; } -- 2.13.6 -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html