diff options
Diffstat (limited to 'nixpkgs/pkgs/os-specific/linux/usbip')
3 files changed, 81 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/os-specific/linux/usbip/default.nix b/nixpkgs/pkgs/os-specific/linux/usbip/default.nix new file mode 100644 index 000000000000..f927eaefb4eb --- /dev/null +++ b/nixpkgs/pkgs/os-specific/linux/usbip/default.nix @@ -0,0 +1,31 @@ +{ lib, stdenv, kernel, udev, autoconf, automake, libtool }: + +stdenv.mkDerivation { + name = "usbip-${kernel.name}"; + + src = kernel.src; + + patches = lib.optionals (lib.versionAtLeast "5.4" kernel.version) [ + # fixes build with gcc8 + ./fix-snprintf-truncation.patch + # fixes build with gcc9 + ./fix-strncpy-truncation.patch + ]; + + nativeBuildInputs = [ autoconf automake libtool ]; + buildInputs = [ udev ]; + + NIX_CFLAGS_COMPILE = [ "-Wno-error=address-of-packed-member" ]; + + preConfigure = '' + cd tools/usb/usbip + ./autogen.sh + ''; + + meta = with stdenv.lib; { + homepage = https://github.com/torvalds/linux/tree/master/tools/usb/usbip; + description = "allows to pass USB device from server to client over the network"; + license = licenses.gpl2; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/os-specific/linux/usbip/fix-snprintf-truncation.patch b/nixpkgs/pkgs/os-specific/linux/usbip/fix-snprintf-truncation.patch new file mode 100644 index 000000000000..63fca9ddbfe5 --- /dev/null +++ b/nixpkgs/pkgs/os-specific/linux/usbip/fix-snprintf-truncation.patch @@ -0,0 +1,13 @@ +diff --git a/tools/usb/usbip/libsrc/vhci_driver.c b/tools/usb/usbip/libsrc/vhci_driver.c +index 8159fd98680b..7d6eb3e3fe1e 100644 +--- a/tools/usb/usbip/libsrc/vhci_driver.c ++++ b/tools/usb/usbip/libsrc/vhci_driver.c +@@ -111,7 +111,7 @@ static int parse_status(const char *value) + static int refresh_imported_device_list(void) + { + const char *attr_status; +- char status[MAX_STATUS_NAME+1] = "status"; ++ char status[MAX_STATUS_NAME+2] = "status"; + int i, ret; + + for (i = 0; i < vhci_driver->ncontrollers; i++) { diff --git a/nixpkgs/pkgs/os-specific/linux/usbip/fix-strncpy-truncation.patch b/nixpkgs/pkgs/os-specific/linux/usbip/fix-strncpy-truncation.patch new file mode 100644 index 000000000000..a5c4c97bbc08 --- /dev/null +++ b/nixpkgs/pkgs/os-specific/linux/usbip/fix-strncpy-truncation.patch @@ -0,0 +1,37 @@ +diff --git a/tools/usb/usbip/libsrc/usbip_common.c b/tools/usb/usbip/libsrc/usbip_common.c +index bb424638d75b..2fc5837e609a 100644 +--- a/tools/usb/usbip/libsrc/usbip_common.c ++++ b/tools/usb/usbip/libsrc/usbip_common.c +@@ -226,8 +226,8 @@ int read_usb_device(struct udev_device *sdev, struct usbip_usb_device *udev) + path = udev_device_get_syspath(sdev); + name = udev_device_get_sysname(sdev); + +- strncpy(udev->path, path, SYSFS_PATH_MAX); +- strncpy(udev->busid, name, SYSFS_BUS_ID_SIZE); ++ strncpy(udev->path, path, SYSFS_PATH_MAX-1); ++ strncpy(udev->busid, name, SYSFS_BUS_ID_SIZE-1); + + sscanf(name, "%u-%u", &busnum, &devnum); + udev->busnum = busnum; +diff --git a/tools/usb/usbip/libsrc/usbip_device_driver.c b/tools/usb/usbip/libsrc/usbip_device_driver.c +index 5a3726eb44ab..95b416af8b99 100644 +--- a/tools/usb/usbip/libsrc/usbip_device_driver.c ++++ b/tools/usb/usbip/libsrc/usbip_device_driver.c +@@ -91,7 +91,7 @@ int read_usb_vudc_device(struct udev_device *sdev, struct usbip_usb_device *dev) + copy_descr_attr16(dev, &descr, idProduct); + copy_descr_attr16(dev, &descr, bcdDevice); + +- strncpy(dev->path, path, SYSFS_PATH_MAX); ++ strncpy(dev->path, path, SYSFS_PATH_MAX-1); + + dev->speed = USB_SPEED_UNKNOWN; + speed = udev_device_get_sysattr_value(sdev, "current_speed"); +@@ -110,7 +110,7 @@ int read_usb_vudc_device(struct udev_device *sdev, struct usbip_usb_device *dev) + dev->busnum = 0; + + name = udev_device_get_sysname(plat); +- strncpy(dev->busid, name, SYSFS_BUS_ID_SIZE); ++ strncpy(dev->busid, name, SYSFS_BUS_ID_SIZE-1); + return 0; + err: + fclose(fd); |