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

Commit 18237c77 authored by Elliott Hughes's avatar Elliott Hughes Committed by Gerrit Code Review
Browse files

Merge "Add adb enable-verity"

parents b471f524 982089d8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -110,7 +110,7 @@ LOCAL_SRC_FILES := \
	jdwp_service.c \
	framebuffer_service.c \
	remount_service.c \
	disable_verity_service.c \
	set_verity_enable_state_service.c \
	usb_linux_client.c

LOCAL_CFLAGS := \
+3 −1
Original line number Diff line number Diff line
@@ -328,8 +328,10 @@ int handle_forward_request(const char* service, transport_type ttype, char* seri

#if !ADB_HOST
void framebuffer_service(int fd, void *cookie);
// Allow enable-verity to write to system and vendor block devices
int make_system_and_vendor_block_devices_writable();
void remount_service(int fd, void *cookie);
void disable_verity_service(int fd, void* cookie);
void set_verity_enabled_state_service(int fd, void* cookie);
#endif

/* packet allocator */
+4 −2
Original line number Diff line number Diff line
@@ -190,10 +190,11 @@ void help()
        "\n"
        "  adb restore <file>           - restore device contents from the <file> backup archive\n"
        "\n"
        "  adb disable-verity           - disable dm-verity checking on USERDEBUG builds\n"
        "  adb enable-verity            - re-enable dm-verity checking on USERDEBUG builds\n"
        "  adb keygen <file>            - generate adb public/private key. The private key is stored in <file>,\n"
        "                                 and the public key is stored in <file>.pub. Any existing files\n"
        "                                 are overwritten.\n"
        "  adb disable-verity           - disable dm-verity checking on USERDEBUG builds\n"
        "  adb help                     - show this help message\n"
        "  adb version                  - show version num\n"
        "\n"
@@ -1446,7 +1447,8 @@ top:
    if(!strcmp(argv[0], "remount") || !strcmp(argv[0], "reboot")
            || !strcmp(argv[0], "reboot-bootloader")
            || !strcmp(argv[0], "tcpip") || !strcmp(argv[0], "usb")
            || !strcmp(argv[0], "root") || !strcmp(argv[0], "disable-verity")) {
            || !strcmp(argv[0], "root") || !strcmp(argv[0], "disable-verity")
            || !strcmp(argv[0], "enable-verity")) {
        char command[100];
        if (!strcmp(argv[0], "reboot-bootloader"))
            snprintf(command, sizeof(command), "reboot:bootloader");
+58 −9
Original line number Diff line number Diff line
@@ -79,29 +79,57 @@ static int hasVendorPartition()
    return false;
}

static int make_block_device_writable(const char* dir)
{
    char *dev = 0;
    int fd = -1;
    int OFF = 0;
    int rc = -1;

    dev = find_mount(dir);
    if (!dev)
        goto errout;

    fd = unix_open(dev, O_RDONLY | O_CLOEXEC);
    if (fd < 0)
        goto errout;

    if (ioctl(fd, BLKROSET, &OFF)) {
        goto errout;
    }

    rc = 0;

errout:
    if (fd >= 0) {
        adb_close(fd);
    }

    if (dev) {
        free(dev);
    }
    return rc;
}

/* Init mounts /system as read only, remount to enable writes. */
static int remount(const char* dir, int* dir_ro)
{
    char *dev;
    int fd;
    int OFF = 0;

    if (dir_ro == 0) {
        return 0;
    }

    if (make_block_device_writable(dir)) {
        return -1;
    }

    dev = find_mount(dir);

    if (!dev)
        return -1;

    fd = unix_open(dev, O_RDONLY | O_CLOEXEC);
    if (fd < 0)
        return -1;

    ioctl(fd, BLKROSET, &OFF);
    adb_close(fd);

    *dir_ro = mount(dev, dir, "none", MS_REMOUNT, NULL);

    free(dev);
@@ -114,6 +142,28 @@ static void write_string(int fd, const char* str)
    writex(fd, str, strlen(str));
}

int make_system_and_vendor_block_devices_writable(int fd)
{
    char buffer[200];
    if (make_block_device_writable("/system")) {
        snprintf(buffer, sizeof(buffer),
                 "Failed to make system block device writable %s\n",
                 strerror(errno));
        write_string(fd, buffer);
        return -1;
    }

    if (hasVendorPartition() && make_block_device_writable("/vendor")) {
        snprintf(buffer, sizeof(buffer),
                 "Failed to make vendor block device writable: %s\n",
                 strerror(errno));
        write_string(fd, buffer);
        return -1;
    }

    return 0;
}

void remount_service(int fd, void *cookie)
{
    char buffer[200];
@@ -167,4 +217,3 @@ void remount_service(int fd, void *cookie)

    adb_close(fd);
}
+3 −1
Original line number Diff line number Diff line
@@ -472,7 +472,9 @@ int service_to_fd(const char *name)
            }
        }
    } else if(!strncmp(name, "disable-verity:", 15)) {
        ret = create_service_thread(disable_verity_service, NULL);
        ret = create_service_thread(set_verity_enabled_state_service, (void*)0);
    } else if(!strncmp(name, "enable-verity:", 15)) {
        ret = create_service_thread(set_verity_enabled_state_service, (void*)1);
#endif
    }
    if (ret >= 0) {
Loading