Re: [PATCH v4 1/3] scsi: Restrict user space SCSI device state changes to "running" and "offfline"

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

 



On 6/17/19 5:18 PM, Bart Van Assche wrote:
> The ability to modify the SCSI device state was introduced by commit
> 638127e579a4 ("[PATCH] Fix error handler offline behaviour"; v2.6.12). That
> same commit introduced the following device states:
> 
>        { SDEV_CREATED, "created" },
>        { SDEV_RUNNING, "running" },
>        { SDEV_CANCEL,  "cancel"  },
>        { SDEV_DEL,     "deleted" },
>        { SDEV_QUIESCE, "quiesce" },
>        { SDEV_OFFLINE, "offline" },
> 
> The SDEV_BLOCK state was introduced later to avoid that an FC cable pull
> would immediately result in an I/O error (commit 1094e682310e; "[PATCH]
> suspending I/Os to a device"; v2.6.12). That same patch introduced the
> ability to set the SDEV_BLOCK state from user space. I'm not sure whether
> that ability was introduced on purpose or accidentally.
> 
> Since there is agreement that only writing "running" or "offline" into
> the SCSI sysfs device state attribute makes sense, restrict sysfs writes
> to these values.
> 
> This patch makes sure that SDEV_BLOCK is only used for its original
> purpose, namely to allow transport drivers and LLDs to block further
> .queuecommand() calls while transport layer or adapter recovery is in
> progress.
> 
> Note: a web search for "/sys/class/scsi_device" AND "device/state"
> revealed several storage configuration guides. The instructions I found
> in these guides tell users to write the value "running" or "offline" in
> the SCSI device state sysfs attribute and no other values.
> 
> Cc: Christoph Hellwig <hch@xxxxxx>
> Cc: Ming Lei <ming.lei@xxxxxxxxxx>
> Cc: Hannes Reinecke <hare@xxxxxxx>
> Cc: Johannes Thumshirn <jthumshirn@xxxxxxx>
> Cc: James Smart <james.smart@xxxxxxxxxxxx>
> Cc: Ewan D. Milne <emilne@xxxxxxxxxx>
> Cc: Laurence Oberman <loberman@xxxxxxxxxx>
> Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx>
> ---
>  drivers/scsi/scsi_sysfs.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
> index 3b119ca0cc0c..850cdc731a1f 100644
> --- a/drivers/scsi/scsi_sysfs.c
> +++ b/drivers/scsi/scsi_sysfs.c
> @@ -766,8 +766,13 @@ store_state_field(struct device *dev, struct device_attribute *attr,
>  			break;
>  		}
>  	}
> -	if (!state)
> +	switch (state) {
> +	case SDEV_RUNNING:
> +	case SDEV_OFFLINE:
> +		break;
> +	default:
>  		return -EINVAL;
> +	}
>  
>  	mutex_lock(&sdev->state_mutex);
>  	ret = scsi_device_set_state(sdev, state);
> 
Reviewed-by: Hannes Reinecke <hare@xxxxxxxx>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		               zSeries & Storage
hare@xxxxxxxx			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)



[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