Skip to content

Commit

Permalink
Bump max_buffer_size for Deserializer
Browse files Browse the repository at this point in the history
Since msgpack 0.6.0, some limits were introduced for the
deserializer which were put in to avoid any denial of service
attacks using msgpack.  These limits were raised to 100MiB
in the release of msgpack 1.0.0.

The default buffer sizes that were implemented were quite low
and when running certain `privsep` commands, especially for
Neutron when using linux bridge, where there is a large amount
of netdevs, privsep would crash since msgpack would fail to
decode the message since it considers it too big:

  ValueError: 1174941 exceeds max_str_len(1048576)

In this commit, the `max_buffer_size` is bumped to the value
that ships with msgpack==1.0.0 to allow for users who don't
have that to continue to function. Also, since `msgpack` is
only being used by the internal API, we're not worried about
a third party coming in and overwhelming the system by
deserializing calls.

This fix also addresses some weird behaviour where privsep
will die and certain OpenStack agents would start to behave
in a strange way once they hit a certain number of ports (since
any privsep calls would start to fail).

Closes-Bug: #1844822
Closes-Bug: #1896734
Related-Bug: #1928764
Closes-Bug: #1952611
Change-Id: I135917522daff95377d07566317ef0fc0d16e7cb
  • Loading branch information
mnaser committed Dec 1, 2021
1 parent fa13840 commit c223dbc
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion oslo_privsep/comm.py
Expand Up @@ -72,7 +72,8 @@ def __init__(self, readsock):
self.readsock = readsock
self.unpacker = msgpack.Unpacker(use_list=False, raw=False,
strict_map_key=False,
unicode_errors='surrogateescape')
unicode_errors='surrogateescape',
max_buffer_size=100 * 1024 * 1024)

def __iter__(self):
return self
Expand Down

0 comments on commit c223dbc

Please sign in to comment.