Skip to content

Commit 38616cc

Browse files
pixelflingerAndroid (Google) Code Review
authored andcommitted
Merge "Fix a stack corruption in sensorservice" into jb-dev
2 parents fb910e8 + 8fd03f4 commit 38616cc

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

services/sensorservice/SensorService.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -225,9 +225,10 @@ bool SensorService::threadLoop()
225225
{
226226
ALOGD("nuSensorService thread starting...");
227227

228-
const size_t numEventMax = 16 * (1 + mVirtualSensorList.size());
229-
sensors_event_t buffer[numEventMax];
230-
sensors_event_t scratch[numEventMax];
228+
const size_t numEventMax = 16;
229+
const size_t minBufferSize = numEventMax * mVirtualSensorList.size();
230+
sensors_event_t buffer[minBufferSize];
231+
sensors_event_t scratch[minBufferSize];
231232
SensorDevice& device(SensorDevice::getInstance());
232233
const size_t vcount = mVirtualSensorList.size();
233234

@@ -255,10 +256,17 @@ bool SensorService::threadLoop()
255256
fusion.process(event[i]);
256257
}
257258
}
258-
for (size_t i=0 ; i<size_t(count) ; i++) {
259+
for (size_t i=0 ; i<size_t(count) && k<minBufferSize ; i++) {
259260
for (size_t j=0 ; j<activeVirtualSensorCount ; j++) {
261+
if (count + k >= minBufferSize) {
262+
ALOGE("buffer too small to hold all events: "
263+
"count=%u, k=%u, size=%u",
264+
count, k, minBufferSize);
265+
break;
266+
}
260267
sensors_event_t out;
261-
if (virtualSensors.valueAt(j)->process(&out, event[i])) {
268+
SensorInterface* si = virtualSensors.valueAt(j);
269+
if (si->process(&out, event[i])) {
262270
buffer[count + k] = out;
263271
k++;
264272
}

0 commit comments

Comments
 (0)