Re: scsi_host_alloc does not check for used shost->host_no

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Daniel Debonzi wrote:
> Hi everyone,
> 
> First of all, it is the first time I am sending something to one of the
> kernel mail lists. So, if it is not the right place for that, if it is
> not the only place for that, or I am doing something wrong, or wherever,
> please, just let me know.

A couple of comments regarding patch submission..

1. Read Documentation/SubmittingPatches and follow the guidelines contained
   within regarding patch format.
2. Subject should be something like:
	[PATCH] SCSI: scsi_host_alloc does not check for used shost->host_no

> diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
> index c6457bf..2e191f4 100644
> --- a/drivers/scsi/hosts.c
> +++ b/drivers/scsi/hosts.c
> @@ -310,7 +310,7 @@ struct device_type scsi_host_type = {
>   **/
>  struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
>  {
> -	struct Scsi_Host *shost;
> +	struct Scsi_Host *shost, *tmp_shost;
>  	gfp_t gfp_mask = GFP_KERNEL;
>  	int rval;
> 
> @@ -332,7 +332,18 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
> 
>  	mutex_init(&shost->scan_mutex);
> 
> +	/* 
> +	 * Look if host_no is not been used somewhere else. Is is used to
> +	 * happen when scsi_host_next_hn overflows and goes back to 0.
> +	 */
> + host_no_already_exists:
>  	shost->host_no = scsi_host_next_hn++; /* XXX(hch): still racy */
> +        if(!IS_ERR(tmp_shost = scsi_host_lookup(shost->host_no)))
> +          {

This needs to follow Documentation/CodingStyle, in this particular case, K&R braces.

> +            scsi_host_put(tmp_shost);
> +            goto host_no_already_exists;
> +          }
> +

Do we need to worry about a host in the SHOST_DEL state? In that case, it will still
exist to some degree, but scsi_host_get will fail. For example, what happens if a
shell is in /sys/class/scsi_host/host5/ and you delete host 5 and try to add another.
Couldn't you run into the same problem? In that case the scsi_host_get will fail.
I suppose you could check specifically for -ENXIO getting returned...

-Brian

-- 
Brian King
Linux on Power Virtualization
IBM Linux Technology Center
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux