Skip to content

Commit

Permalink
sensors: Always advertise unsupported capabilities as unsupported
Browse files Browse the repository at this point in the history
Always advertise injectSensorData, registerDirectChannel, unregisterDirectChannel and configDirectReport as unsupported.
These are not supported by our HAL and it should fix the following segfault occasionally seen:

Build fingerprint: 'motorola/addison/addison:8.0.0/OPNS27.76-12-22-9/10:user/release-keys'
Revision: '0'
ABI: 'arm64'
pid: 1286, tid: 1376, name: system-server-i  >>> system_server <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x7a81e700d4
    x0  0000007aa31425a0  x1  0000000000000000  x2  00000000ffffffff  x3  000000000000001b
    x4  000000000000008a  x5  0000007a997a8e08  x6  0000007a9b1a5b30  x7  0000007a85cf89e1
    x8  0000007a81e70548  x9  00000000ffffffff  x10 0000007a81e700d4  x11 0000000000000000
    x12 0000000000000000  x13 0000007a9b1a5c00  x14 00000000ffffffff  x15 05136f2600000000
    x16 0000007a878f3850  x17 0000007b240d0918  x18 0000007a85cf782a  x19 0000007a85cf8ac0
    x20 0000007a85cf8ac0  x21 0000007a85cf9588  x22 0000007b2393c100  x23 0000007b2393c050
    x24 0000007b24f50528  x25 00000000700d0690  x26 0000000012dc0128  x27 0000000013645970
    x28 0000000000000000  x29 0000007a85cf8960
    sp  0000007a85cf8950  lr  0000007a8598f144  pc  0000007a81e700d4

backtrace:
    #00 pc 0000007a81e700d4  <unknown>
    Alberto97#1 pc 0000000000008140  /system/vendor/lib64/hw/android.hardware.sensors@1.0-impl.so (android::hardware::sensors::V1_0::implementation::Sensors::unregisterDirectChannel(int)+48)
    Alberto97#2 pc 00000000000176a0  /system/lib64/android.hardware.sensors@1.0.so (android::hardware::sensors::V1_0::BsSensors::unregisterDirectChannel(int)+128)
    #03 pc 00000000000147d0  /system/lib64/libsensorservice.so (android::SensorDevice::SensorDevice()+560)
    #04 pc 000000000001f7d8  /system/lib64/libsensorservice.so (android::SensorService::onFirstRef()+112)
    #05 pc 0000000000061a34  /system/lib64/libandroid_servers.so (android::BinderService<android::SensorService>::publish(bool, int)+116)
    #06 pc 0000000000061754  /system/lib64/libandroid_servers.so (android::android_server_SystemServer_startSensorService(_JNIEnv*, _jobject*)+76)
    #07 pc 0000000000715190  /system/framework/oat/arm64/services.odex (offset 0x60c000) (com.android.server.HardwarePropertiesManagerService.nativeInit [DEDUPED]+144)
    #08 pc 000000000067dbf4  /system/framework/oat/arm64/services.odex (offset 0x60c000) (com.android.server.-$$Lambda$SystemServer$UyrPns7R814g-ZEylCbDKhe8It4.run+196)
    #09 pc 000000000079b838  /system/framework/oat/arm64/services.odex (offset 0x60c000) (com.android.server.SystemServerInitThreadPool.lambda$submit$0+280)
    #10 pc 000000000067e0bc  /system/framework/oat/arm64/services.odex (offset 0x60c000) (com.android.server.-$$Lambda$SystemServerInitThreadPool$7wfLGkZF7FvYZv7xj3ghvuiJJGk.run+76)
    #11 pc 00000000002ca0c4  /system/framework/arm64/boot.oat (offset 0x114000) (java.util.concurrent.Executors$RunnableAdapter.call+68)
    #12 pc 000000000037075c  /system/framework/arm64/boot.oat (offset 0x114000) (java.util.concurrent.FutureTask.run+204)
    #13 pc 00000000003d9524  /system/framework/arm64/boot.oat (offset 0x114000) (java.util.concurrent.ThreadPoolExecutor.runWorker+996)
    #14 pc 00000000003d6290  /system/framework/arm64/boot.oat (offset 0x114000) (java.util.concurrent.ThreadPoolExecutor$Worker.run+64)
    #15 pc 0000000000e1d918  /system/framework/arm64/boot-framework.oat (offset 0x3cd000) (com.android.internal.util.ConcurrentUtils$1$1.run+104)
    #16 pc 000000000055c988  /system/lib64/libart.so (art_quick_invoke_stub+584)
    #17 pc 00000000000cf740  /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
    #18 pc 00000000004633b8  /system/lib64/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+104)
    #19 pc 0000000000464480  /system/lib64/libart.so (art::InvokeVirtualOrInterfaceWithJValues(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, jvalue*)+424)
    #20 pc 000000000048f7f0  /system/lib64/libart.so (art::Thread::CreateCallback(void*)+1120)
    #21 pc 000000000008309c  /system/lib64/libc.so (__pthread_start(void*)+36)
    #22 pc 0000000000023344  /system/lib64/libc.so (__start_thread+68)
  • Loading branch information
Alberto97 authored and Artx-II committed Jul 10, 2019
1 parent 82d0379 commit 30464f0
Showing 1 changed file with 14 additions and 59 deletions.
73 changes: 14 additions & 59 deletions sensors/Sensors.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -249,82 +249,37 @@ Return<Result> Sensors::flush(int32_t sensor_handle) {
}

Return<Result> Sensors::injectSensorData(const Event& event) {
if (getHalDeviceVersion() < SENSORS_DEVICE_API_VERSION_1_4
|| mSensorDevice->inject_sensor_data == nullptr) {
return Result::INVALID_OPERATION;
}
(void)event;

sensors_event_t out;
convertToSensorEvent(event, &out);

return ResultFromStatus(
mSensorDevice->inject_sensor_data(mSensorDevice, &out));
// HAL does not support
return Result::INVALID_OPERATION;
}

Return<void> Sensors::registerDirectChannel(
const SharedMemInfo& mem, registerDirectChannel_cb _hidl_cb) {
if (mSensorDevice->register_direct_channel == nullptr
|| mSensorDevice->config_direct_report == nullptr) {
// HAL does not support
_hidl_cb(Result::INVALID_OPERATION, -1);
return Void();
}

sensors_direct_mem_t m;
if (!convertFromSharedMemInfo(mem, &m)) {
_hidl_cb(Result::BAD_VALUE, -1);
return Void();
}
(void)mem;

int err = mSensorDevice->register_direct_channel(mSensorDevice, &m, -1);

if (err < 0) {
_hidl_cb(ResultFromStatus(err), -1);
} else {
int32_t channelHandle = static_cast<int32_t>(err);
_hidl_cb(Result::OK, channelHandle);
}
// HAL does not support
_hidl_cb(Result::INVALID_OPERATION, -1);
return Void();
}

Return<Result> Sensors::unregisterDirectChannel(int32_t channelHandle) {
if (mSensorDevice->register_direct_channel == nullptr
|| mSensorDevice->config_direct_report == nullptr) {
// HAL does not support
return Result::INVALID_OPERATION;
}
(void)channelHandle;

mSensorDevice->register_direct_channel(mSensorDevice, nullptr, channelHandle);

return Result::OK;
// HAL does not support
return Result::INVALID_OPERATION;
}

Return<void> Sensors::configDirectReport(
int32_t sensorHandle, int32_t channelHandle, RateLevel rate,
configDirectReport_cb _hidl_cb) {
if (mSensorDevice->register_direct_channel == nullptr
|| mSensorDevice->config_direct_report == nullptr) {
// HAL does not support
_hidl_cb(Result::INVALID_OPERATION, -1);
return Void();
}
(void)sensorHandle;
(void)channelHandle;
(void)rate;

sensors_direct_cfg_t cfg = {
.rate_level = convertFromRateLevel(rate)
};
if (cfg.rate_level < 0) {
_hidl_cb(Result::BAD_VALUE, -1);
return Void();
}

int err = mSensorDevice->config_direct_report(mSensorDevice,
sensorHandle, channelHandle, &cfg);

if (rate == RateLevel::STOP) {
_hidl_cb(ResultFromStatus(err), -1);
} else {
_hidl_cb(err > 0 ? Result::OK : ResultFromStatus(err), err);
}
// HAL does not support
_hidl_cb(Result::INVALID_OPERATION, -1);
return Void();
}

Expand Down

0 comments on commit 30464f0

Please sign in to comment.