All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Pirko <jiri@resnulli.us>
To: Paolo Abeni <pabeni@redhat.com>
Cc: netdev@vger.kernel.org, kuba@kernel.org, davem@davemloft.net,
	edumazet@google.com, donald.hunter@gmail.com
Subject: Re: [patch net-next] tools: ynl: fix attr_space variable to exist even if processing unknown attribute
Date: Thu, 15 Feb 2024 13:13:45 +0100	[thread overview]
Message-ID: <Zc3_-YMMiCd6fc-9@nanopsycho> (raw)
In-Reply-To: <8bcd540b747ae30edc10c5208d7876b901e702b8.camel@redhat.com>

Thu, Feb 15, 2024 at 11:59:08AM CET, pabeni@redhat.com wrote:
>On Tue, 2024-02-13 at 08:04 +0100, Jiri Pirko wrote:
>> From: Jiri Pirko <jiri@nvidia.com>
>> 
>> If message contains unknown attribute and user passes
>> "--process-unknown" command line option, _decode() gets called with space
>> arg set to None. In that case, attr_space variable is not initialized
>> used which leads to following trace:
>> 
>> Traceback (most recent call last):
>>   File "./tools/net/ynl/cli.py", line 77, in <module>
>>     main()
>>   File "./tools/net/ynl/cli.py", line 68, in main
>>     reply = ynl.dump(args.dump, attrs)
>>             ^^^^^^^^^^^^^^^^^^^^^^^^^^
>>   File "tools/net/ynl/lib/ynl.py", line 909, in dump
>>     return self._op(method, vals, [], dump=True)
>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>   File "tools/net/ynl/lib/ynl.py", line 894, in _op
>>     rsp_msg = self._decode(decoded.raw_attrs, op.attr_set.name)
>>               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>   File "tools/net/ynl/lib/ynl.py", line 639, in _decode
>>     self._rsp_add(rsp, attr_name, None, self._decode_unknown(attr))
>>                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
>>   File "tools/net/ynl/lib/ynl.py", line 569, in _decode_unknown
>>     return self._decode(NlAttrs(attr.raw), None)
>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>   File "tools/net/ynl/lib/ynl.py", line 630, in _decode
>>     search_attrs = SpaceAttrs(attr_space, rsp, outer_attrs)
>>                               ^^^^^^^^^^
>> UnboundLocalError: cannot access local variable 'attr_space' where it is not associated with a value
>> 
>> Fix this by setting attr_space to None in case space is arg None.
>> 
>> Fixes: bf8b832374fb ("tools/net/ynl: Support sub-messages in nested attribute spaces")
>> Signed-off-by: Jiri Pirko <jiri@nvidia.com>
>> ---
>>  tools/net/ynl/lib/ynl.py | 6 ++++--
>>  1 file changed, 4 insertions(+), 2 deletions(-)
>> 
>> diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py
>> index 03c7ca6aaae9..b16d24b7e288 100644
>> --- a/tools/net/ynl/lib/ynl.py
>> +++ b/tools/net/ynl/lib/ynl.py
>> @@ -588,10 +588,12 @@ class YnlFamily(SpecFamily):
>>          revalue = search_attrs.lookup(selector)turn decoded
>>  
>>      def _decode(self, attrs, space, outer_attrs = None):
>> +        rsp = dict()
>>          if space:
>>              attr_space = self.attr_sets[space]
>> -        rsp = dict()
>> -        search_attrs = SpaceAttrs(attr_space, rsp, outer_attrs)
>> +            search_attrs = SpaceAttrs(attr_space, rsp, outer_attrs)
>> +        else:
>> +            search_attrs = None
>
>It looks like that later-on the code could call self._decode_sub_msg()
>-> self._resolve_selector() with search_attrs == None, and the latter
>will unconditionally do:
>
>	value = search_attrs.lookup(selector)

How exactly you can reach this? You won't get past:
            try:
                attr_spec = attr_space.attrs_by_val[attr.type]
            except (KeyError, UnboundLocalError):
                if not self.process_unknown:
                    raise Exception(f"Space '{space}' has no attribute with value '{attr.type}'")
                attr_name = f"UnknownAttr({attr.type})"
                self._rsp_add(rsp, attr_name, None, self._decode_unknown(attr))
                continue



>
>I think we need to explicitly handle the None value there.
>
>Thanks,
>
>Paolo
>

  reply	other threads:[~2024-02-15 12:13 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-13  7:04 [patch net-next] tools: ynl: fix attr_space variable to exist even if processing unknown attribute Jiri Pirko
2024-02-15 10:59 ` Paolo Abeni
2024-02-15 12:13   ` Jiri Pirko [this message]
2024-02-15 12:27     ` Jiri Pirko

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=Zc3_-YMMiCd6fc-9@nanopsycho \
    --to=jiri@resnulli.us \
    --cc=davem@davemloft.net \
    --cc=donald.hunter@gmail.com \
    --cc=edumazet@google.com \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    /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.