Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 23b14a95 authored by Carlos Llamas's avatar Carlos Llamas Committed by Automerger Merge Worker
Browse files

Merge "libbinder: detect features supported by the driver" am: 9630721f am:...

Merge "libbinder: detect features supported by the driver" am: 9630721f am: c58e8c2a am: e3049d49

Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/2015375

Change-Id: Ie16b4d1a8e99b0fd467bb2479ee0d3e5bd6b92c2
parents 4eaf8abd e3049d49
Loading
Loading
Loading
Loading
+25 −1
Original line number Original line Diff line number Diff line
@@ -409,6 +409,28 @@ size_t ProcessState::getThreadPoolMaxThreadCount() const {
    return 0;
    return 0;
}
}


#define DRIVER_FEATURES_PATH "/dev/binderfs/features/"
bool ProcessState::isDriverFeatureEnabled(const DriverFeature feature) {
    static const char* const names[] = {
        [static_cast<int>(DriverFeature::ONEWAY_SPAM_DETECTION)] =
            DRIVER_FEATURES_PATH "oneway_spam_detection",
    };
    int fd = open(names[static_cast<int>(feature)], O_RDONLY | O_CLOEXEC);
    char on;
    if (fd == -1) {
        ALOGE_IF(errno != ENOENT, "%s: cannot open %s: %s", __func__,
                 names[static_cast<int>(feature)], strerror(errno));
        return false;
    }
    if (read(fd, &on, sizeof(on)) == -1) {
        ALOGE("%s: error reading to %s: %s", __func__,
                 names[static_cast<int>(feature)], strerror(errno));
        return false;
    }
    close(fd);
    return on == '1';
}

status_t ProcessState::enableOnewaySpamDetection(bool enable) {
status_t ProcessState::enableOnewaySpamDetection(bool enable) {
    uint32_t enableDetection = enable ? 1 : 0;
    uint32_t enableDetection = enable ? 1 : 0;
    if (ioctl(mDriverFD, BINDER_ENABLE_ONEWAY_SPAM_DETECTION, &enableDetection) == -1) {
    if (ioctl(mDriverFD, BINDER_ENABLE_ONEWAY_SPAM_DETECTION, &enableDetection) == -1) {
@@ -452,7 +474,9 @@ static base::Result<int> open_driver(const char* driver) {
    uint32_t enable = DEFAULT_ENABLE_ONEWAY_SPAM_DETECTION;
    uint32_t enable = DEFAULT_ENABLE_ONEWAY_SPAM_DETECTION;
    result = ioctl(fd, BINDER_ENABLE_ONEWAY_SPAM_DETECTION, &enable);
    result = ioctl(fd, BINDER_ENABLE_ONEWAY_SPAM_DETECTION, &enable);
    if (result == -1) {
    if (result == -1) {
        ALOGV("Binder ioctl to enable oneway spam detection failed: %s", strerror(errno));
        ALOGE_IF(ProcessState::isDriverFeatureEnabled(
                     ProcessState::DriverFeature::ONEWAY_SPAM_DETECTION),
                 "Binder ioctl to enable oneway spam detection failed: %s", strerror(errno));
    }
    }
    return fd;
    return fd;
}
}
+6 −0
Original line number Original line Diff line number Diff line
@@ -91,6 +91,12 @@ public:
     */
     */
    size_t getThreadPoolMaxThreadCount() const;
    size_t getThreadPoolMaxThreadCount() const;


    enum class DriverFeature {
        ONEWAY_SPAM_DETECTION,
    };
    // Determine whether a feature is supported by the binder driver.
    static bool isDriverFeatureEnabled(const DriverFeature feature);

private:
private:
    static sp<ProcessState> init(const char* defaultDriver, bool requireDefault);
    static sp<ProcessState> init(const char* defaultDriver, bool requireDefault);