Don't open device session when installing payloads... defer to usb helpers

This commit is contained in:
2020-01-07 11:15:39 -05:00
parent 3945238173
commit bf9e8e94c8

View File

@@ -136,7 +136,7 @@ int *dev_unlink_payload(struct pwned_device *dev, struct payload *pl)
int install_payload(struct pwned_device *dev, PAYLOAD_T p, LOCATION_T loc) int install_payload(struct pwned_device *dev, PAYLOAD_T p, LOCATION_T loc)
{ {
checkm8_debug_indent("install_payload(dev = %p, p = %i, loc = %i)\n", dev, p, loc); checkm8_debug_indent("install_payload(dev = %p, p = %i, loc = %i)\n", dev, p, loc);
int ret;
struct dev_cmd_resp *resp = NULL; struct dev_cmd_resp *resp = NULL;
struct payload *pl = get_payload(p); struct payload *pl = get_payload(p);
long long addr = get_address(dev, loc); long long addr = get_address(dev, loc);
@@ -147,9 +147,6 @@ int install_payload(struct pwned_device *dev, PAYLOAD_T p, LOCATION_T loc)
return CHECKM8_FAIL_INVARGS; return CHECKM8_FAIL_INVARGS;
} }
ret = open_device_session(dev);
if(IS_CHECKM8_FAIL(ret)) return ret;
resp = dev_write_memory(dev, addr, pl->data, pl->len); resp = dev_write_memory(dev, addr, pl->data, pl->len);
if(IS_CHECKM8_FAIL(resp->ret)) if(IS_CHECKM8_FAIL(resp->ret))
{ {
@@ -163,8 +160,7 @@ int install_payload(struct pwned_device *dev, PAYLOAD_T p, LOCATION_T loc)
dev_link_payload(dev, pl); dev_link_payload(dev, pl);
free_dev_cmd_resp(resp); free_dev_cmd_resp(resp);
close_device_session(dev); return CHECKM8_SUCCESS;
return ret;
} }
int uninstall_payload(struct pwned_device *dev, PAYLOAD_T p) int uninstall_payload(struct pwned_device *dev, PAYLOAD_T p)
@@ -176,7 +172,7 @@ int uninstall_payload(struct pwned_device *dev, PAYLOAD_T p)
struct dev_cmd_resp *execute_payload(struct pwned_device *dev, PAYLOAD_T p, int response_len, int nargs, ...) struct dev_cmd_resp *execute_payload(struct pwned_device *dev, PAYLOAD_T p, int response_len, int nargs, ...)
{ {
checkm8_debug_indent("execute_payload(dev = %p, p = %i, nargs = %i, ...)\n", dev, p, nargs); checkm8_debug_indent("execute_payload(dev = %p, p = %i, nargs = %i, ...)\n", dev, p, nargs);
int ret, i; int i;
struct dev_cmd_resp *resp; struct dev_cmd_resp *resp;
struct payload *pl; struct payload *pl;
@@ -188,14 +184,6 @@ struct dev_cmd_resp *execute_payload(struct pwned_device *dev, PAYLOAD_T p, int
return resp; return resp;
} }
ret = open_device_session(dev);
if(IS_CHECKM8_FAIL(ret))
{
resp = calloc(1, sizeof(struct dev_cmd_resp));
resp->ret = ret;
return resp;
}
unsigned long long args[nargs + 1]; unsigned long long args[nargs + 1];
args[0] = pl->install_base; args[0] = pl->install_base;
checkm8_debug_indent("\tinstall base is 0x%lX\n", args[0]); checkm8_debug_indent("\tinstall base is 0x%lX\n", args[0]);
@@ -209,9 +197,7 @@ struct dev_cmd_resp *execute_payload(struct pwned_device *dev, PAYLOAD_T p, int
} }
va_end(arg_list); va_end(arg_list);
resp = dev_exec(dev, response_len, nargs + 1, args); return dev_exec(dev, response_len, nargs + 1, args);
close_device_session(dev);
return resp;
} }
struct dev_cmd_resp *read_gadget(struct pwned_device *dev, long long addr, int len) struct dev_cmd_resp *read_gadget(struct pwned_device *dev, long long addr, int len)