Whom based his on the Keyspan driver by Hugh Blemings <hugh@blemings.org>
 */
 
-#define DRIVER_VERSION "v.1.2.7"
+#define DRIVER_VERSION "v.1.2.8"
 #define DRIVER_AUTHOR "Kevin Lloyd <linux@sierrawireless.com>"
 #define DRIVER_DESC "USB Driver for Sierra Wireless USB modems"
 
        spinlock_t lock;        /* lock the structure */
        int outstanding_urbs;   /* number of out urbs in flight */
 
-       /* Input endpoints and buffer for this port */
+       /* Input endpoints and buffers for this port */
        struct urb *in_urbs[N_IN_URB];
-       char in_buffer[N_IN_URB][IN_BUFLEN];
+       char *in_buffer[N_IN_URB];
 
        /* Settings for the port */
        int rts_state;  /* Handshaking pins (outputs) */
                        return -ENOMEM;
                }
                spin_lock_init(&portdata->lock);
+               for (j = 0; j < N_IN_URB; j++) {
+                       portdata->in_buffer[j] = kmalloc(IN_BUFLEN, GFP_KERNEL);
+                       if (!portdata->in_buffer[j]) {
+                               for (--j; j >= 0; j--)
+                                       kfree(portdata->in_buffer[j]);
+                               kfree(portdata);
+                               return -ENOMEM;
+                       }
+               }
 
                usb_set_serial_port_data(port, portdata);
 
                for (j = 0; j < N_IN_URB; j++) {
                        usb_kill_urb(portdata->in_urbs[j]);
                        usb_free_urb(portdata->in_urbs[j]);
-                       portdata->in_urbs[j] = NULL;
+                       kfree(portdata->in_buffer[j]);
                }
                kfree(portdata);
                usb_set_serial_port_data(port, NULL);