data_buffer_length_adjusted = (data_buffer_length + 511) & ~511;
 
        /* Now allocate ioctl buf memory */
-       cpu_addr = dma_alloc_coherent(&tw_dev->tw_pci_dev->dev, data_buffer_length_adjusted+sizeof(TW_New_Ioctl) - 1, &dma_handle, GFP_KERNEL);
+       cpu_addr = dma_alloc_coherent(&tw_dev->tw_pci_dev->dev, data_buffer_length_adjusted + sizeof(TW_New_Ioctl), &dma_handle, GFP_KERNEL);
        if (cpu_addr == NULL) {
                retval = -ENOMEM;
                goto out;
        tw_ioctl = (TW_New_Ioctl *)cpu_addr;
 
        /* Now copy down the entire ioctl */
-       if (copy_from_user(tw_ioctl, argp, data_buffer_length + sizeof(TW_New_Ioctl) - 1))
+       if (copy_from_user(tw_ioctl, argp, data_buffer_length + sizeof(TW_New_Ioctl)))
                goto out2;
 
        passthru = (TW_Passthru *)&tw_ioctl->firmware_command;
                        /* Load the sg list */
                        switch (TW_SGL_OUT(tw_ioctl->firmware_command.opcode__sgloffset)) {
                        case 2:
-                               tw_ioctl->firmware_command.byte8.param.sgl[0].address = dma_handle + sizeof(TW_New_Ioctl) - 1;
+                               tw_ioctl->firmware_command.byte8.param.sgl[0].address = dma_handle + sizeof(TW_New_Ioctl);
                                tw_ioctl->firmware_command.byte8.param.sgl[0].length = data_buffer_length_adjusted;
                                break;
                        case 3:
-                               tw_ioctl->firmware_command.byte8.io.sgl[0].address = dma_handle + sizeof(TW_New_Ioctl) - 1;
+                               tw_ioctl->firmware_command.byte8.io.sgl[0].address = dma_handle + sizeof(TW_New_Ioctl);
                                tw_ioctl->firmware_command.byte8.io.sgl[0].length = data_buffer_length_adjusted;
                                break;
                        case 5:
-                               passthru->sg_list[0].address = dma_handle + sizeof(TW_New_Ioctl) - 1;
+                               passthru->sg_list[0].address = dma_handle + sizeof(TW_New_Ioctl);
                                passthru->sg_list[0].length = data_buffer_length_adjusted;
                                break;
                        }
        }
 
        /* Now copy the response to userspace */
-       if (copy_to_user(argp, tw_ioctl, sizeof(TW_New_Ioctl) + data_buffer_length - 1))
+       if (copy_to_user(argp, tw_ioctl, sizeof(TW_New_Ioctl) + data_buffer_length))
                goto out2;
        retval = 0;
 out2:
        /* Now free ioctl buf memory */
-       dma_free_coherent(&tw_dev->tw_pci_dev->dev, data_buffer_length_adjusted+sizeof(TW_New_Ioctl) - 1, cpu_addr, dma_handle);
+       dma_free_coherent(&tw_dev->tw_pci_dev->dev, data_buffer_length_adjusted + sizeof(TW_New_Ioctl), cpu_addr, dma_handle);
 out:
        mutex_unlock(&tw_dev->ioctl_lock);
        mutex_unlock(&tw_mutex);