summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBalazs Gibizer <balazs.gibizer@ericsson.com>2017-03-17 11:24:49 +0100
committerMatt Riedemann <mriedem.os@gmail.com>2017-03-17 13:19:07 -0400
commit305cdb38db47258909ef83d5918c7c85ef9d7a5b (patch)
tree763268a47c988df9641f1f2ca9544a214af01be7
parentd27c1b0fd30c1aa13b1f7ffd26afbe388d97eeda (diff)
downloadnova-305cdb38db47258909ef83d5918c7c85ef9d7a5b.tar.gz
do not include context to exception notification
The wrap_exception decorator optionally emited a notification. Based on the code comments the original intention was not to include the context to that notification due to security reasons. However the implementation did included the context to the payload of the legacy notification. Recently we saw circural reference errors during the payload serialization of this notification. Based on the logs the only complex data structure that could cause circural reference is the context. So this patch removes the context from the legacy exception notification. The versioned exception notification is not affected as it does not contain the args of the decorated function. Conflicts: nova/exception_wrapper.py nova/tests/unit/test_exception.py NOTE(mriedem): The conflict is due to some refactor in Newton: 6329d721ef326488d5d660e4f68febf563ed93ab Closes-Bug: #1673375 Change-Id: I1d217620e52d45595a3e0e49ed57b4ab33cd1688 (cherry picked from commit 3bf177a59cfd0b4e74dba256c3466ba2ea9bfbf7) (cherry picked from commit a8a1915456a86f504d23f215867da730d436fe33) (cherry picked from commit d0ee248bab6727555561c15998c58a0f11a5351b)
-rw-r--r--nova/exception.py4
-rw-r--r--nova/tests/unit/test_exception.py1
2 files changed, 5 insertions, 0 deletions
diff --git a/nova/exception.py b/nova/exception.py
index 40b82bf583..848b0f0938 100644
--- a/nova/exception.py
+++ b/nova/exception.py
@@ -97,6 +97,10 @@ def wrap_exception(notifier=None, get_notifier=None):
# self can't be serialized and shouldn't be in the
# payload
call_dict.pop('self', None)
+ # NOTE(gibi) remove context as well as it contains
+ # sensitive information and it can also contain
+ # circular references
+ call_dict.pop('context', None)
cleansed = _cleanse_dict(call_dict)
payload.update({'args': cleansed})
diff --git a/nova/tests/unit/test_exception.py b/nova/tests/unit/test_exception.py
index 6a3b2b70a0..17f61efd8e 100644
--- a/nova/tests/unit/test_exception.py
+++ b/nova/tests/unit/test_exception.py
@@ -62,6 +62,7 @@ class WrapExceptionTestCase(test.NoDBTestCase):
self.assertEqual(3, notifier.provided_payload['args']['extra'])
for key in ['exception', 'args']:
self.assertIn(key, notifier.provided_payload.keys())
+ self.assertNotIn('context', notifier.provided_payload['args'].keys())
class NovaExceptionTestCase(test.NoDBTestCase):