Re: [PATCH] ata: fix when to fetch sense data for successful commands

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

 



On 7/23/23 22:03, Niklas Cassel wrote:
> From: Niklas Cassel <niklas.cassel@xxxxxxx>
> 
> The condition to fetch sense data was supposed to be:
> ATA_SENSE set AND either
> 1) Command was NCQ and ATA_DFLAG_CDL_ENABLED flag set (flag
>    ATA_DFLAG_CDL_ENABLED will only be set if the Successful NCQ command
>    sense data supported bit is set); or
> 2) Command was non-NCQ and regular sense data reporting is enabled.
> 
> However the check in 2) accidentally had the negation at the wrong place,
> causing it to try to fetch sense data if it was a non-NCQ command _or_
> if regular sense data reporting was _not_ enabled.
> 
> Fix this by removing the extra parentheses that should not be there,
> such that only the correct return (ata_is_ncq()) is negated.
> 
> Fixes: 18bd7718b5c4 ("scsi: ata: libata: Handle completion of CDL commands using policy 0xD")
> Reported-by: Borislav Petkov <bp@xxxxxxxxx>
> Closes: https://lore.kernel.org/linux-ide/20230722155621.GIZLv8JbURKzHtKvQE@fat_crate.local/
> Signed-off-by: Niklas Cassel <niklas.cassel@xxxxxxx>
> ---
>  drivers/ata/libata-core.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
> index d37ab6087f2f..04db0f2c683a 100644
> --- a/drivers/ata/libata-core.c
> +++ b/drivers/ata/libata-core.c
> @@ -4938,8 +4938,8 @@ void ata_qc_complete(struct ata_queued_cmd *qc)
>  		if (qc->result_tf.status & ATA_SENSE &&
>  		    ((ata_is_ncq(qc->tf.protocol) &&
>  		      dev->flags & ATA_DFLAG_CDL_ENABLED) ||
> -		     (!(ata_is_ncq(qc->tf.protocol) &&
> -			ata_id_sense_reporting_enabled(dev->id))))) {
> +		     (!ata_is_ncq(qc->tf.protocol) &&

Even though it is not necessary, to be extra clear, it would be nice to have
parenthesis around "!ata_is_ncq(qc->tf.protocol)". I will add that when applying.

> +		      ata_id_sense_reporting_enabled(dev->id)))) {
>  			/*
>  			 * Tell SCSI EH to not overwrite scmd->result even if
>  			 * this command is finished with result SAM_STAT_GOOD.

-- 
Damien Le Moal
Western Digital Research




[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux