All of lore.kernel.org
 help / color / mirror / Atom feed
From: Denis Kenzior <denkenz@gmail.com>
To: ell@lists.01.org
Subject: Re: [PATCH 04/20] dbus: Fix _dbus_kernel_calculate_bloom for multiple arguments.
Date: Tue, 15 Mar 2016 21:06:17 -0500	[thread overview]
Message-ID: <56E8BF99.4080205@gmail.com> (raw)
In-Reply-To: <CAOq732KHuTsBx0WZ+681pyEe4rzJx+xchnvcjxWDHHnqRXixaA@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 4126 bytes --]

Hi Andrew,

On 03/15/2016 05:08 PM, Andrzej Zaborowski wrote:
> Hi Denis,
>
> On 15 March 2016 at 17:27, Denis Kenzior <denkenz@gmail.com> wrote:
>> On 03/14/2016 05:11 PM, Andrzej Zaborowski wrote:
>>> Sorry, l_dbus_message_iter_get_type is a typo, I wanted to say
>>> message_iter_next_entry here.  This function calls it with a fixed
>>> number of parameters and sooner or later it will receive a message
>>> with more arguments and by my reading will segfault.
>>>
>>
>> So l_dbus_message_iter_next_entry is assuming that the programmer knows the
>> signature of the next parameter and passes in a variable meant to hold that
>> parameter.  If there's a mismatch, then yes, it might crash. However, that
>> is why we check the signature ahead of time.
>
> So i've looked at l_dbus_message_iter_next_entry many times and it
> seems it won't stop at the next parameter, although the name could
> suggest that.  It is expecting that the arguments list has a pointer
> for every remaining item in the iterator and it doesn't check for
> NULLs either.  So you can't just pass a single parameter without
> knowing how many items are in the message. and you can't call it
> multiple times on the same iterator except with arrays (I think...).
>

Ah, now I understand.  Yes, you are correct.

l_dbus_message_iter_next_entry wants you to consume everything in the 
enclosing structure.  It is not meant to be used like the traditional 
reference dbus_iter API that iterates over a single item at a time.

Our setup uses get_arguments to parse/validate the top level structure 
and the iterators obtained must then match the signature that the 
programmer expected.

I'm not quite sure why _dbus_kernel_calculate_bloom attempts to use 
message_iter_next_entry.  Don't recall whether the behavior of 
next_entry changed afterward or it was just never tested.  Either way, 
its a bug now.

>>
>> I guess I'm still not quite sure what you're trying to say here :)
>>
>>>>
>>>>> the number and types of call arguments don't match the message
>>>>> arguments.
>>>>> Also try to support the string arguments that come after non-string
>>>>> arguments in the bloom filter.
>>>>
>>>>
>>>>
>>>>   From my reading of systemd code, I didn't think this was possible.  But
>>>> I
>>>> could be wrong...
>>>
>>>
>>> I see no problem with the bloom filter containing, say, arg3="hello",
>>> even though arguments 1 and 2 are integers.  I don't know if systemd
>>> supports that but if for example a client adds a match with this kind
>>> of filter, the service must also support that or the signal won't pass
>>> through the filter.
>>>
>>
>> That is the problem with systemd, it does not explicitly document what is
>> and what is not supported.  Having glanced at their bloom filter code again,
>> I'm pretty sure only string arguments are currently supported and non-string
>> arguments in between are not skipped.  This is why our code looks the way it
>> does.
>>
>> Can you also take a look and confirm?  We are stuck supporting only what
>> systemd supports.
>
> I'm going to look at the systemd code although I'd like to think kdbus
> is not systemd.  Could we do what seems correct and submit a bug
> report against systemd?
>

You'd like to think that, but in reality this is not true :)  systemd 
contains the only kdbus implementation in existence.  So what systemd 
does is the reference behavior.  I'm not aware of any attempts to 
document how argument filters work over kdbus.

> I'm pretty sure it is a bug if a message with "foo" as the 3rd
> argument doesn't match a filter which includes arg2="foo" (2 because
> 0-based..), and there's not even a warning issued when you create such
> a filter, or in the docs.
>

*Shrug* Welcome to open source :)  Don't get me wrong, I do agree with 
you and have submitted patches to systemd in the past.  But that project 
is a very deep rabbit hole.

However, in reality, nobody actually uses arg filtering, outside of 
maybe filtering by arg0.  So its no big loss anyway.

Regards,
-Denis

  reply	other threads:[~2016-03-16  2:06 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-14  3:41 [PATCH 01/20] dbus: Add _dbus1_message_iter_skip_entry and gvariant variant Andrew Zaborowski
2016-03-14  3:41 ` [PATCH 02/20] dbus: Add _dbus_message_get_nth_string_argument Andrew Zaborowski
2016-03-14  3:41 ` [PATCH 03/20] dbus: Support 2+ arguments in l_dbus_message_get_error Andrew Zaborowski
2016-03-14  3:41 ` [PATCH 04/20] dbus: Fix _dbus_kernel_calculate_bloom for multiple arguments Andrew Zaborowski
2016-03-14 16:49   ` Denis Kenzior
2016-03-14 22:11     ` Andrzej Zaborowski
2016-03-15 16:27       ` Denis Kenzior
2016-03-15 22:08         ` Andrzej Zaborowski
2016-03-16  2:06           ` Denis Kenzior [this message]
2016-03-14  3:41 ` [PATCH 05/20] dbus: Add message filter logic in dbus-filter.c Andrew Zaborowski
2016-03-14 17:37   ` Denis Kenzior
2016-03-14 22:25     ` Andrzej Zaborowski
2016-03-14  3:41 ` [PATCH 06/20] unit: Add dbus message filter tests Andrew Zaborowski
2016-03-14  3:41 ` [PATCH 07/20] dbus-filter: Name owner change tracking support Andrew Zaborowski
2016-03-14 18:03   ` Denis Kenzior
2016-03-14 22:32     ` Andrzej Zaborowski
2016-03-14  3:41 ` [PATCH 08/20] dbus: Classic dbus filter_ops implementation Andrew Zaborowski
2016-03-14 18:18   ` Denis Kenzior
2016-03-14 22:36     ` Andrzej Zaborowski
2016-03-15 16:32       ` Denis Kenzior
2016-03-14  3:41 ` [PATCH 09/20] dbus: kdbus " Andrew Zaborowski
2016-03-14  3:41 ` [PATCH 10/20] linux: Update kdbus.h to current github version Andrew Zaborowski
2016-03-14  3:41 ` [PATCH 11/20] dbus-kernel: Update with kdbus API changes Andrew Zaborowski
2016-03-14  3:41 ` [PATCH 12/20] dbus: Add message filter public API Andrew Zaborowski
2016-03-14  3:41 ` [PATCH 13/20] unit: Use the message filter API in dbus tests Andrew Zaborowski
2016-03-14  3:41 ` [PATCH 14/20] dbus: Don't send replies to messages with no reply flag Andrew Zaborowski
2016-03-14 17:11   ` Denis Kenzior
2016-03-14 22:15     ` Andrzej Zaborowski
2016-03-15 16:35       ` Denis Kenzior
2016-03-14  3:41 ` [PATCH 15/20] dbus: Rewrite service/disconnect watch APIs on top of filter API Andrew Zaborowski
2016-03-14  3:41 ` [PATCH 16/20] dbus: Remove now unused filter functions Andrew Zaborowski
2016-03-14 19:12   ` Denis Kenzior
2016-03-14  3:41 ` [PATCH 17/20] dbus: kdbus driver->name_acquire implementation Andrew Zaborowski
2016-03-14  3:41 ` [PATCH 18/20] dbus: Classic dbus driver->name_acquire and public API Andrew Zaborowski
2016-03-14 19:18   ` Denis Kenzior
2016-03-14 22:39     ` Andrzej Zaborowski
2016-03-15 16:38       ` Denis Kenzior
2016-03-14  3:41 ` [PATCH 19/20] unit: Use l_dbus_name_acquire to acquire well-known name Andrew Zaborowski
2016-03-14  3:41 ` [PATCH 20/20] examples: " Andrew Zaborowski
2016-03-14 16:50 ` [PATCH 01/20] dbus: Add _dbus1_message_iter_skip_entry and gvariant variant Denis Kenzior

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56E8BF99.4080205@gmail.com \
    --to=denkenz@gmail.com \
    --cc=ell@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.