diff options
author | Marco Neumann | 2015-06-08 20:30:34 +0200 |
---|---|---|
committer | Marco Neumann | 2015-06-08 20:30:34 +0200 |
commit | 4fec57de0894c5aeaef62f1173a39ab7ecf2239c (patch) | |
tree | 78daf7b67785250caa5fdf8bc8bdf56ff45eec0e | |
download | aur-4fec57de0894c5aeaef62f1173a39ab7ecf2239c.tar.gz |
Initial import
-rw-r--r-- | .SRCINFO | 22 | ||||
-rw-r--r-- | PKGBUILD | 41 | ||||
-rw-r--r-- | dkms.conf | 5 | ||||
-rw-r--r-- | grsecurity.patch | 157 | ||||
-rw-r--r-- | kernel-3.16.patch | 12 | ||||
-rw-r--r-- | sixfireusb.install | 19 |
6 files changed, 256 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..3cad008c2145 --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,22 @@ +pkgbase = sixfireusb-dkms + pkgdesc = Kernel modules for the Terratec DMX6FireUSB soundcard + pkgver = 0.6.1 + pkgrel = 2 + url = http://sourceforge.net/projects/sixfireusb + install = sixfireusb.install + arch = i686 + arch = x86_64 + license = GPL + depends = dkms + optdepends = linux-headers: build the module against Arch kernel + source = http://sourceforge.net/projects/sixfireusb/files/sixfireusb-0.6.1.tar.bz2 + source = kernel-3.16.patch + source = grsecurity.patch + source = dkms.conf + sha512sums = 6428fe074dd2717bcf6f2bdb38b5612694d66254021cc5a627ef5bccf2a7cbfd0e8cb9ca4be4f9855fe89d9be47a9943bbf368d8aec45eda08e4290ede9e9d34 + sha512sums = 9d612518c48873d1ae9bd28a55b7a54cbb8e4836a87cf9c8870ae5038850107539b3b13684610f31aa2543dae3123cc88f02e477a891d2c3baae6157b0151083 + sha512sums = 1c5ed0652f83f68c12c05b6675af85ded4b31696db0c07047555ee028f82ecf5c69a1de3d452e82ee137187254f6c27305ee650cc636e003ba1ebeedc007017a + sha512sums = 43880b03da504b390471084e140e3b119080621792a9aad41e92e7372fb56fe88321289419f04ce33687955d45dfff049d3ba9b2df5eefee3d061ecb597372d8 + +pkgname = sixfireusb-dkms + diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..b613d573653f --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,41 @@ +# Author (initial package): Patrick Auernig <patrick.auernig@gmail.com> +# Author (fixes): Marco Neumann <marco@crepererum.net> + +pkgname=sixfireusb-dkms +pkgver=0.6.1 +pkgrel=2 +pkgdesc="Kernel modules for the Terratec DMX6FireUSB soundcard" +arch=('i686' 'x86_64') +url="http://sourceforge.net/projects/sixfireusb" +license=('GPL') +depends=('dkms') +optdepends=('linux-headers: build the module against Arch kernel') +source=(http://sourceforge.net/projects/sixfireusb/files/sixfireusb-$pkgver.tar.bz2 + kernel-3.16.patch + grsecurity.patch + dkms.conf +) +sha512sums=( + '6428fe074dd2717bcf6f2bdb38b5612694d66254021cc5a627ef5bccf2a7cbfd0e8cb9ca4be4f9855fe89d9be47a9943bbf368d8aec45eda08e4290ede9e9d34' + '9d612518c48873d1ae9bd28a55b7a54cbb8e4836a87cf9c8870ae5038850107539b3b13684610f31aa2543dae3123cc88f02e477a891d2c3baae6157b0151083' + '1c5ed0652f83f68c12c05b6675af85ded4b31696db0c07047555ee028f82ecf5c69a1de3d452e82ee137187254f6c27305ee650cc636e003ba1ebeedc007017a' + '43880b03da504b390471084e140e3b119080621792a9aad41e92e7372fb56fe88321289419f04ce33687955d45dfff049d3ba9b2df5eefee3d061ecb597372d8' +) +install=sixfireusb.install + +build() { + cd "${srcdir}"/sixfireusb-$pkgver + patch -Np1 -i ../kernel-3.16.patch + patch -Np1 -i ../grsecurity.patch +} + +package() { + cd ${srcdir} + + install -dm755 "${pkgdir}/usr/src/sixfireusb-${pkgver}" + + cp -r ${srcdir}/sixfireusb-${pkgver}/* "${pkgdir}/usr/src/sixfireusb-${pkgver}/" + cp ${srcdir}/dkms.conf "${pkgdir}/usr/src/sixfireusb-${pkgver}/dkms.conf" + sed -i -e "s/@VERSION@/${pkgver}/" "${pkgdir}/usr/src/sixfireusb-${pkgver}/dkms.conf" +} + diff --git a/dkms.conf b/dkms.conf new file mode 100644 index 000000000000..8c2488752e64 --- /dev/null +++ b/dkms.conf @@ -0,0 +1,5 @@ +PACKAGE_NAME="sixfireusb" +PACKAGE_VERSION="@VERSION@" +BUILT_MODULE_NAME[0]="snd-usb-6fire" +DEST_MODULE_LOCATION[0]="/extramodules" +AUTOINSTALL="yes" diff --git a/grsecurity.patch b/grsecurity.patch new file mode 100644 index 000000000000..94c342d47658 --- /dev/null +++ b/grsecurity.patch @@ -0,0 +1,157 @@ +diff -aur sixfireusb-0.6.1/firmware.c sixfireusb-0.6.1/firmware.c +--- sixfireusb-0.6.1/firmware.c 2014-08-15 18:33:06.000000000 +0200 ++++ sixfireusb-0.6.1/firmware.c 2014-12-11 00:40:40.234928691 +0100 +@@ -207,7 +207,7 @@ + unsigned int postaddr, u8 *postdata, unsigned int postlen) + { + int ret; +- u8 data; ++ u8 *data; + struct usb_device *device = interface_to_usbdev(intf); + const struct firmware *fw = NULL; + struct ihex_record *rec = kmalloc(sizeof(struct ihex_record), +@@ -216,8 +216,15 @@ + if (!rec) + return -ENOMEM; + ++ data = kmalloc(1, GFP_KERNEL); ++ if (!data) { ++ kfree(rec); ++ return -ENOMEM; ++ } ++ + ret = request_firmware(&fw, fwname, &device->dev); + if (ret < 0) { ++ kfree(data); + kfree(rec); + snd_printk(KERN_ERR PREFIX "error requesting ezusb " + "firmware %s.\n", fwname); +@@ -225,6 +232,7 @@ + } + ret = usb6fire_fw_ihex_init(fw, rec); + if (ret < 0) { ++ kfree(data); + kfree(rec); + release_firmware(fw); + snd_printk(KERN_ERR PREFIX "error validating ezusb " +@@ -232,9 +240,10 @@ + return ret; + } + /* upload firmware image */ +- data = 0x01; /* stop ezusb cpu */ +- ret = usb6fire_fw_ezusb_write(device, 0xa0, 0xe600, &data, 1); ++ *data = 0x01; /* stop ezusb cpu */ ++ ret = usb6fire_fw_ezusb_write(device, 0xa0, 0xe600, data, 1); + if (ret < 0) { ++ kfree(data); + kfree(rec); + release_firmware(fw); + snd_printk(KERN_ERR PREFIX "unable to upload ezusb " +@@ -246,6 +255,7 @@ + ret = usb6fire_fw_ezusb_write(device, 0xa0, rec->address, + rec->data, rec->len); + if (ret < 0) { ++ kfree(data); + kfree(rec); + release_firmware(fw); + snd_printk(KERN_ERR PREFIX "unable to upload ezusb " +@@ -262,12 +272,14 @@ + if (ret < 0) { + snd_printk(KERN_ERR PREFIX "unable to upload ezusb " + "firmware %s: post urb.\n", fwname); ++ kfree(data); + return ret; + } + } + +- data = 0x00; /* resume ezusb cpu */ +- ret = usb6fire_fw_ezusb_write(device, 0xa0, 0xe600, &data, 1); ++ *data = 0x00; /* resume ezusb cpu */ ++ ret = usb6fire_fw_ezusb_write(device, 0xa0, 0xe600, data, 1); ++ kfree(data); + if (ret < 0) { + snd_printk(KERN_ERR PREFIX "unable to upload ezusb " + "firmware %s: end message.\n", fwname); +@@ -361,12 +373,13 @@ + struct usb_device *device = interface_to_usbdev(intf); + /* buffer: 8 receiving bytes from device and + * sizeof(EP_W_MAX_PACKET_SIZE) bytes for non-const copy */ +- u8 buffer[12]; ++ u8 *buffer = kmalloc(12, GFP_KERNEL); + + ret = usb6fire_fw_ezusb_read(device, 1, 0, buffer, 8); + if (ret < 0) { + snd_printk(KERN_ERR PREFIX "unable to receive device " + "firmware state.\n"); ++ kfree(buffer); + return ret; + } + +@@ -376,44 +389,60 @@ + for (i = 0; i < 8; i++) + snd_printk("%02x ", buffer[i]); + snd_printk("\n"); ++ kfree(buffer); + return -EIO; + } + /* do we need fpga loader ezusb firmware? */ + if (buffer[3] == 0x01) { + ret = usb6fire_fw_ezusb_upload(intf, + "6fire/dmx6firel2.ihx", 0, NULL, 0); +- if (ret < 0) ++ if (ret < 0) { ++ kfree(buffer); + return ret; ++ } ++ kfree(buffer); + return FW_NOT_READY; + } + /* do we need fpga firmware and application ezusb firmware? */ + else if (buffer[3] == 0x02) { + ret = usb6fire_fw_check(buffer + 4); +- if (ret < 0) ++ if (ret < 0) { ++ kfree(buffer); + return ret; ++ } + ret = usb6fire_fw_fpga_upload(intf, "6fire/dmx6firecf.bin"); +- if (ret < 0) ++ if (ret < 0) { ++ kfree(buffer); + return ret; ++ } + memcpy(buffer, ep_w_max_packet_size, + sizeof(ep_w_max_packet_size)); + ret = usb6fire_fw_ezusb_upload(intf, "6fire/dmx6fireap.ihx", + 0x0003, buffer, sizeof(ep_w_max_packet_size)); +- if (ret < 0) ++ if (ret < 0) { ++ kfree(buffer); + return ret; ++ } ++ kfree(buffer); + return FW_NOT_READY; + } + /* all fw loaded? */ +- else if (buffer[3] == 0x03) +- return usb6fire_fw_check(buffer + 4); ++ else if (buffer[3] == 0x03) { ++ ret = usb6fire_fw_check(buffer + 4);; ++ kfree(buffer); ++ return ret; + /* unknown data? */ +- else { ++ } else { + snd_printk(KERN_ERR PREFIX "unknown device firmware state " + "received from device: "); + for (i = 0; i < 8; i++) + snd_printk("%02x ", buffer[i]); + snd_printk("\n"); ++ kfree(buffer); + return -EIO; + } ++ ++ kfree(buffer); + return 0; + } + diff --git a/kernel-3.16.patch b/kernel-3.16.patch new file mode 100644 index 000000000000..5f5b197e819b --- /dev/null +++ b/kernel-3.16.patch @@ -0,0 +1,12 @@ +diff -aur sixfireusb-0.6.1/chip.c sixfireusb-0.6.1/chip.c +--- sixfireusb-0.6.1/chip.c 2013-12-10 04:46:22.000000000 +0100 ++++ sixfireusb-0.6.1/chip.c 2014-10-04 23:04:38.663734490 +0200 +@@ -143,7 +143,7 @@ + snd_printk(KERN_ERR PREFIX "can't set first interface.\n"); + return -EIO; + } +- ret = snd_card_create(index[regidx], id[regidx], THIS_MODULE, ++ ret = snd_card_new(&intf->dev, index[regidx], id[regidx], THIS_MODULE, + sizeof(struct sfire_chip), &card); + if (ret < 0) { + snd_printk(KERN_ERR PREFIX "cannot create alsa card.\n"); diff --git a/sixfireusb.install b/sixfireusb.install new file mode 100644 index 000000000000..ccd692eabf80 --- /dev/null +++ b/sixfireusb.install @@ -0,0 +1,19 @@ +post_install() { + dkms install -m sixfireusb -v ${1%%-*} +} + +pre_upgrade() { + local curver=${2%%-*} + # $2 is unset due to a bug. See, https://bugs.archlinux.org/task/32278 + # Query current version using pacman as fallback + [ -n "$curver" ] || curver=$(pacman -Q sixfireusb-dkms | cut -d' ' -f2) + pre_remove $curver +} + +post_upgrade() { + post_install ${1%%-*} +} + +pre_remove() { + dkms remove -m sixfireusb -v ${1%%-*} --all +} |