Don't open device session when installing payloads... defer to usb helpers
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user