aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Konovalov <andreyknvl@google.com>2019-12-11 18:45:13 +0100
committerAndrey Konovalov <andreyknvl@gmail.com>2019-12-11 19:20:07 +0100
commitd973f52833e0e3cec5406aa9cdf606a463d85c46 (patch)
treef45b613d6a74f235489f1735285ea6c4ce1fc5c1
parent0d368675f84a2d7f3389d4204bdd6a20d1989006 (diff)
executor: update raw gadget interface
-rw-r--r--executor/common_usb.h12
-rw-r--r--pkg/csource/generated.go12
-rw-r--r--tools/syz-usbgen/keyboard.c12
3 files changed, 21 insertions, 15 deletions
diff --git a/executor/common_usb.h b/executor/common_usb.h
index d036128de..687baf095 100644
--- a/executor/common_usb.h
+++ b/executor/common_usb.h
@@ -76,10 +76,12 @@ static bool parse_usb_descriptor(char* buffer, size_t length, struct usb_device_
return true;
}
+#define UDC_NAME_LENGTH_MAX 128
+
struct usb_raw_init {
- __u64 speed;
- const __u8* driver_name;
- const __u8* device_name;
+ __u8 driver_name[UDC_NAME_LENGTH_MAX];
+ __u8 device_name[UDC_NAME_LENGTH_MAX];
+ __u8 speed;
};
enum usb_raw_event_type {
@@ -121,9 +123,9 @@ static int usb_raw_open()
static int usb_raw_init(int fd, uint32 speed, const char* driver, const char* device)
{
struct usb_raw_init arg;
+ strncpy((char*)&arg.driver_name[0], driver, sizeof(arg.driver_name));
+ strncpy((char*)&arg.device_name[0], device, sizeof(arg.device_name));
arg.speed = speed;
- arg.driver_name = (const __u8*)driver;
- arg.device_name = (const __u8*)device;
return ioctl(fd, USB_RAW_IOCTL_INIT, &arg);
}
diff --git a/pkg/csource/generated.go b/pkg/csource/generated.go
index efdbb0090..1361402c8 100644
--- a/pkg/csource/generated.go
+++ b/pkg/csource/generated.go
@@ -2073,10 +2073,12 @@ static bool parse_usb_descriptor(char* buffer, size_t length, struct usb_device_
return true;
}
+#define UDC_NAME_LENGTH_MAX 128
+
struct usb_raw_init {
- __u64 speed;
- const __u8* driver_name;
- const __u8* device_name;
+ __u8 driver_name[UDC_NAME_LENGTH_MAX];
+ __u8 device_name[UDC_NAME_LENGTH_MAX];
+ __u8 speed;
};
enum usb_raw_event_type {
@@ -2118,9 +2120,9 @@ static int usb_raw_open()
static int usb_raw_init(int fd, uint32 speed, const char* driver, const char* device)
{
struct usb_raw_init arg;
+ strncpy((char*)&arg.driver_name[0], driver, sizeof(arg.driver_name));
+ strncpy((char*)&arg.device_name[0], device, sizeof(arg.device_name));
arg.speed = speed;
- arg.driver_name = (const __u8*)driver;
- arg.device_name = (const __u8*)device;
return ioctl(fd, USB_RAW_IOCTL_INIT, &arg);
}
diff --git a/tools/syz-usbgen/keyboard.c b/tools/syz-usbgen/keyboard.c
index 9efa53c2e..00ae7914d 100644
--- a/tools/syz-usbgen/keyboard.c
+++ b/tools/syz-usbgen/keyboard.c
@@ -42,10 +42,12 @@ struct hid_descriptor {
/*----------------------------------------------------------------------*/
+#define UDC_NAME_LENGTH_MAX 128
+
struct usb_raw_init {
- __u64 speed;
- const __u8 *driver_name;
- const __u8 *device_name;
+ __u8 driver_name[UDC_NAME_LENGTH_MAX];
+ __u8 device_name[UDC_NAME_LENGTH_MAX];
+ __u8 speed;
};
enum usb_raw_event_type {
@@ -92,9 +94,9 @@ int usb_raw_open() {
void usb_raw_init(int fd, enum usb_device_speed speed) {
struct usb_raw_init arg;
+ strcpy(&arg.driver_name[0], "dummy_udc");
+ strcpy(&arg.device_name[0], "dummy_udc.0");
arg.speed = speed;
- arg.driver_name = "dummy_udc";
- arg.device_name = "dummy_udc.0";
int rv = ioctl(fd, USB_RAW_IOCTL_INIT, &arg);
if (rv < 0) {
perror("ioctl(USB_RAW_IOCTL_INIT)");