![]() C (but not C++) has a concept of a flexible array member, which is documented at https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html . Using a flexible array member indicates that the structure is really a header for a variable length object. In logd's case, the variable length structure android_event_string_t was embedded within another structure called android_log_event_string_t. This makes gcc's __builtin_object_size() function really confused. When compiling with C++, __builtin_object_size(android_log_event_string_t.payload.data, 1) would return 0, whereas if you compiled the code with C, the same call would (properly) return -1. Code which does automatic bounds checking, such as the proposed patch at https://android-review.googlesource.com/145411 , will cause problems for logd if this syntax is used. Don't try to embed a variable length structure within another structure. This doesn't appear to be valid C nor C++, and while it's worked, it seems problematic. Instead, inline the structure so it's one big happy structure. Change-Id: I8ac02b7142a4f6560f5f80df2effcf720f9896fc |
||
---|---|---|
.. | ||
tests | ||
Android.mk | ||
CommandListener.cpp | ||
CommandListener.h | ||
FlushCommand.cpp | ||
FlushCommand.h | ||
LogAudit.cpp | ||
LogAudit.h | ||
LogBuffer.cpp | ||
LogBuffer.h | ||
LogBufferElement.cpp | ||
LogBufferElement.h | ||
LogCommand.cpp | ||
LogCommand.h | ||
LogListener.cpp | ||
LogListener.h | ||
LogReader.cpp | ||
LogReader.h | ||
LogStatistics.cpp | ||
LogStatistics.h | ||
LogTimes.cpp | ||
LogTimes.h | ||
LogWhiteBlackList.cpp | ||
LogWhiteBlackList.h | ||
README.auditd | ||
README.property | ||
event.logtags | ||
libaudit.c | ||
libaudit.h | ||
main.cpp |
README.property
The properties that logd responds to are: name type default description logd.auditd bool true Enable selinux audit daemon logd.auditd.dmesg bool true selinux audit messages duplicated and sent on to dmesg log logd.statistics bool depends Enable logcat -S statistics. ro.config.low_ram bool false if true, logd.statistics default false ro.build.type string if user, logd.statistics default false persist.logd.size number 256K default size of the buffer for all log ids at initial startup, at runtime use: logcat -b all -G <value> persist.logd.size.main number 256K Size of the buffer for the main log persist.logd.size.system number 256K Size of the buffer for the system log persist.logd.size.radio number 256K Size of the buffer for the radio log persist.logd.size.event number 256K Size of the buffer for the event log persist.logd.size.crash number 256K Size of the buffer for the crash log NB: - number support multipliers (K or M) for convenience. Range is limited to between 64K and 256M for log buffer sizes. Individual logs override the global default.