diff options
Diffstat (limited to 'drivers/scsi/aacraid')
| -rw-r--r-- | drivers/scsi/aacraid/aacraid.h | 2 | ||||
| -rw-r--r-- | drivers/scsi/aacraid/commctrl.c | 3 | ||||
| -rw-r--r-- | drivers/scsi/aacraid/linit.c | 3 | ||||
| -rw-r--r-- | drivers/scsi/aacraid/rx.c | 9 | ||||
| -rw-r--r-- | drivers/scsi/aacraid/sa.c | 3 | ||||
| -rw-r--r-- | drivers/scsi/aacraid/src.c | 4 | 
6 files changed, 14 insertions, 10 deletions
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h index 9323d058706..eaaf8705a5f 100644 --- a/drivers/scsi/aacraid/aacraid.h +++ b/drivers/scsi/aacraid/aacraid.h @@ -12,7 +12,7 @@   *----------------------------------------------------------------------------*/  #ifndef AAC_DRIVER_BUILD -# define AAC_DRIVER_BUILD 30200 +# define AAC_DRIVER_BUILD 30300  # define AAC_DRIVER_BRANCH "-ms"  #endif  #define MAXIMUM_NUM_CONTAINERS	32 diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c index d85ac1a9d2c..fbcd48d0bfc 100644 --- a/drivers/scsi/aacraid/commctrl.c +++ b/drivers/scsi/aacraid/commctrl.c @@ -511,7 +511,8 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg)  		goto cleanup;  	} -	if (fibsize > (dev->max_fib_size - sizeof(struct aac_fibhdr))) { +	if ((fibsize < (sizeof(struct user_aac_srb) - sizeof(struct user_sgentry))) || +	    (fibsize > (dev->max_fib_size - sizeof(struct aac_fibhdr)))) {  		rcode = -EINVAL;  		goto cleanup;  	} diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index 408a42ef787..4921ed19a02 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c @@ -771,6 +771,8 @@ static long aac_compat_do_ioctl(struct aac_dev *dev, unsigned cmd, unsigned long  static int aac_compat_ioctl(struct scsi_device *sdev, int cmd, void __user *arg)  {  	struct aac_dev *dev = (struct aac_dev *)sdev->host->hostdata; +	if (!capable(CAP_SYS_RAWIO)) +		return -EPERM;  	return aac_compat_do_ioctl(dev, cmd, (unsigned long)arg);  } @@ -1079,6 +1081,7 @@ static struct scsi_host_template aac_driver_template = {  #endif  	.use_clustering			= ENABLE_CLUSTERING,  	.emulated			= 1, +	.no_write_same			= 1,  };  static void __aac_shutdown(struct aac_dev * aac) diff --git a/drivers/scsi/aacraid/rx.c b/drivers/scsi/aacraid/rx.c index dada38aeacc..5c6a8703f53 100644 --- a/drivers/scsi/aacraid/rx.c +++ b/drivers/scsi/aacraid/rx.c @@ -480,7 +480,7 @@ static int aac_rx_ioremap(struct aac_dev * dev, u32 size)  static int aac_rx_restart_adapter(struct aac_dev *dev, int bled)  { -	u32 var; +	u32 var = 0;  	if (!(dev->supplement_adapter_info.SupportedOptions2 &  	  AAC_OPTION_MU_RESET) || (bled >= 0) || (bled == -2)) { @@ -500,13 +500,14 @@ static int aac_rx_restart_adapter(struct aac_dev *dev, int bled)  		if (bled && (bled != -ETIMEDOUT))  			return -EINVAL;  	} -	if (bled || (var == 0x3803000F)) { /* USE_OTHER_METHOD */ +	if (bled && (var == 0x3803000F)) { /* USE_OTHER_METHOD */  		rx_writel(dev, MUnit.reserved2, 3);  		msleep(5000); /* Delay 5 seconds */  		var = 0x00000001;  	} -	if (var != 0x00000001) +	if (bled && (var != 0x00000001))  		return -EINVAL; +	ssleep(5);  	if (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC)  		return -ENODEV;  	if (startup_timeout < 300) @@ -646,7 +647,7 @@ int _aac_rx_init(struct aac_dev *dev)  	dev->sync_mode = 0;	/* sync. mode not supported */  	dev->msi = aac_msi && !pci_enable_msi(dev->pdev);  	if (request_irq(dev->pdev->irq, dev->a_ops.adapter_intr, -			IRQF_SHARED|IRQF_DISABLED, "aacraid", dev) < 0) { +			IRQF_SHARED, "aacraid", dev) < 0) {  		if (dev->msi)  			pci_disable_msi(dev->pdev);  		printk(KERN_ERR "%s%d: Interrupt unavailable.\n", diff --git a/drivers/scsi/aacraid/sa.c b/drivers/scsi/aacraid/sa.c index 2244f315f33..e66477c9824 100644 --- a/drivers/scsi/aacraid/sa.c +++ b/drivers/scsi/aacraid/sa.c @@ -387,8 +387,7 @@ int aac_sa_init(struct aac_dev *dev)  		goto error_irq;  	dev->sync_mode = 0;	/* sync. mode not supported */  	if (request_irq(dev->pdev->irq, dev->a_ops.adapter_intr, -			IRQF_SHARED|IRQF_DISABLED, -			"aacraid", (void *)dev ) < 0) { +			IRQF_SHARED, "aacraid", (void *)dev) < 0) {  		printk(KERN_WARNING "%s%d: Interrupt unavailable.\n",  			name, instance);  		goto error_iounmap; diff --git a/drivers/scsi/aacraid/src.c b/drivers/scsi/aacraid/src.c index 7e17107643d..9c65aed2621 100644 --- a/drivers/scsi/aacraid/src.c +++ b/drivers/scsi/aacraid/src.c @@ -647,7 +647,7 @@ int aac_src_init(struct aac_dev *dev)  	dev->msi = aac_msi && !pci_enable_msi(dev->pdev);  	if (request_irq(dev->pdev->irq, dev->a_ops.adapter_intr, -			IRQF_SHARED|IRQF_DISABLED, "aacraid", dev) < 0) { +			IRQF_SHARED, "aacraid", dev) < 0) {  		if (dev->msi)  			pci_disable_msi(dev->pdev); @@ -804,7 +804,7 @@ int aac_srcv_init(struct aac_dev *dev)  		goto error_iounmap;  	dev->msi = aac_msi && !pci_enable_msi(dev->pdev);  	if (request_irq(dev->pdev->irq, dev->a_ops.adapter_intr, -		IRQF_SHARED|IRQF_DISABLED, "aacraid", dev) < 0) { +		IRQF_SHARED, "aacraid", dev) < 0) {  		if (dev->msi)  			pci_disable_msi(dev->pdev);  		printk(KERN_ERR "%s%d: Interrupt unavailable.\n",  | 
