The problem is a variable defined as char to keep the name of the firmware file which is always 11 chars long.
It should be a char to fit the trailing "\0".
--- irda-usb.c.wrong 2009-01-10 09:50:49.000000000 +0100
+++ irda-usb.c.ok 2009-01-10 09:50:12.000000000 +0100
@@ -1075,7 +1075,7 @@
unsigned int i;
- char stir421x_fw_name;
+ char stir421x_fw_name;
const struct firmware *fw;
const unsigned char *fw_version_ptr; /* pointer to version string */
unsigned long fw_version = 0;
The assignment to stir421x_fw_name is made one line later:
* Known firmware patch file names for STIR421x dongles
* are "42101001.sb" or "42101002.sb"
ret = request_firmware(&fw, stir421x_fw_name, &self->usbdev->dev);
This function has been working through several versions of the kernel but it started to fail after my last ubuntu upgrade.