diff options
author | Mark Salyzyn | 2016-08-18 16:59:41 -0500 |
---|---|---|
committer | Mark Salyzyn | 2016-08-23 16:51:50 -0500 |
commit | 305374cf0f8cf28b58a108cf4f45df92fc0dde86 (patch) | |
tree | 4f7ae56a180ae568508f5da1f4f83e25a054d712 /logd/tests | |
parent | 82b67fff06363c8e7a17058cb5ce748f21a27f11 (diff) | |
download | platform-system-core-305374cf0f8cf28b58a108cf4f45df92fc0dde86.tar.gz platform-system-core-305374cf0f8cf28b58a108cf4f45df92fc0dde86.tar.xz platform-system-core-305374cf0f8cf28b58a108cf4f45df92fc0dde86.zip |
logger: validate hdr_size field in logger entry
- check hdr_size to make sure it is in the expected range
from sizeof entry_v1 to entry (entry_v4).
- alter msg() method to report NULL on invalid hdr_size
- alter all users of msg() method.
Bug: 30947841
Change-Id: I9bc1740d7aa9f37df5be966c18de1fb9de63d5dd
Diffstat (limited to 'logd/tests')
-rw-r--r-- | logd/tests/logd_test.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/logd/tests/logd_test.cpp b/logd/tests/logd_test.cpp index 2014374e7..301ede92b 100644 --- a/logd/tests/logd_test.cpp +++ b/logd/tests/logd_test.cpp | |||
@@ -213,9 +213,15 @@ static void dump_log_msg(const char *prefix, | |||
213 | version = 1; | 213 | version = 1; |
214 | break; | 214 | break; |
215 | 215 | ||
216 | case sizeof(msg->entry_v2): | 216 | case sizeof(msg->entry_v2): /* PLUS case sizeof(msg->entry_v3): */ |
217 | if (version == 0) { | 217 | if (version == 0) { |
218 | version = 2; | 218 | version = (msg->entry_v3.lid < LOG_ID_MAX) ? 3 : 2; |
219 | } | ||
220 | break; | ||
221 | |||
222 | case sizeof(msg->entry_v4): | ||
223 | if (version == 0) { | ||
224 | version = 4; | ||
219 | } | 225 | } |
220 | break; | 226 | break; |
221 | } | 227 | } |
@@ -269,6 +275,11 @@ static void dump_log_msg(const char *prefix, | |||
269 | unsigned int len = msg->entry.len; | 275 | unsigned int len = msg->entry.len; |
270 | fprintf(stderr, "msg[%u]={", len); | 276 | fprintf(stderr, "msg[%u]={", len); |
271 | unsigned char *cp = reinterpret_cast<unsigned char *>(msg->msg()); | 277 | unsigned char *cp = reinterpret_cast<unsigned char *>(msg->msg()); |
278 | if (!cp) { | ||
279 | static const unsigned char garbage[] = "<INVALID>"; | ||
280 | cp = const_cast<unsigned char *>(garbage); | ||
281 | len = strlen(reinterpret_cast<const char *>(garbage)); | ||
282 | } | ||
272 | while(len) { | 283 | while(len) { |
273 | unsigned char *p = cp; | 284 | unsigned char *p = cp; |
274 | while (*p && (((' ' <= *p) && (*p < 0x7F)) || (*p == '\n'))) { | 285 | while (*p && (((' ' <= *p) && (*p < 0x7F)) || (*p == '\n'))) { |