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

Commit 69b0515d authored by Martijn Coenen's avatar Martijn Coenen
Browse files

Add vndservicemanager.

vndservicemanager is the context manager for
binder services that are exclusively used from
the vendor binder domain, "/dev/vndbinder";
these services can only be registered and accessed
by vendor processes.

To facilitate code re-use, vndservicemanager
is just framework servicemanager accessing the
vendor binder devnode.

Bug: 36052864
Test: modified binder_test to use /dev/vndbinder

Change-Id: Iac19a1180321a5be78d7be5ceb4ba211c593dc47
parent 55d871cc
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -34,3 +34,15 @@ cc_binary {
    shared_libs: ["libcutils", "libselinux"],
    init_rc: ["servicemanager.rc"],
}

cc_binary {
    name: "vndservicemanager",
    defaults: ["servicemanager_flags"],
    proprietary: true,
    srcs: [
        "service_manager.c",
        "binder.c",
    ],
    shared_libs: ["libcutils", "libselinux"],
    init_rc: ["vndservicemanager.rc"],
}
+1 −1
Original line number Diff line number Diff line
@@ -62,7 +62,7 @@ int main(int argc, char **argv)
    uint32_t svcmgr = BINDER_SERVICE_MANAGER;
    uint32_t handle;

    bs = binder_open(128*1024);
    bs = binder_open("/dev/binder", 128*1024);
    if (!bs) {
        fprintf(stderr, "failed to open binder driver\n");
        return -1;
+4 −4
Original line number Diff line number Diff line
@@ -94,7 +94,7 @@ struct binder_state
    size_t mapsize;
};

struct binder_state *binder_open(size_t mapsize)
struct binder_state *binder_open(const char* driver, size_t mapsize)
{
    struct binder_state *bs;
    struct binder_version vers;
@@ -105,10 +105,10 @@ struct binder_state *binder_open(size_t mapsize)
        return NULL;
    }

    bs->fd = open("/dev/binder", O_RDWR | O_CLOEXEC);
    bs->fd = open(driver, O_RDWR | O_CLOEXEC);
    if (bs->fd < 0) {
        fprintf(stderr,"binder: cannot open device (%s)\n",
                strerror(errno));
        fprintf(stderr,"binder: cannot open %s (%s)\n",
                driver, strerror(errno));
        goto fail_open;
    }

+1 −1
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@ typedef int (*binder_handler)(struct binder_state *bs,
                              struct binder_io *msg,
                              struct binder_io *reply);

struct binder_state *binder_open(size_t mapsize);
struct binder_state *binder_open(const char* driver, size_t mapsize);
void binder_close(struct binder_state *bs);

/* initiate a blocking binder call
+10 −3
Original line number Diff line number Diff line
@@ -360,14 +360,21 @@ static int audit_callback(void *data, __unused security_class_t cls, char *buf,
    return 0;
}

int main()
int main(int argc, char** argv)
{
    struct binder_state *bs;
    union selinux_callback cb;
    char *driver;

    bs = binder_open(128*1024);
    if (argc > 1) {
        driver = argv[1];
    } else {
        driver = "/dev/binder";
    }

    bs = binder_open(driver, 128*1024);
    if (!bs) {
        ALOGE("failed to open binder driver\n");
        ALOGE("failed to open binder driver %s\n", driver);
        return -1;
    }

Loading