mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-28 13:22:57 +00:00
scsi: stex: Properly zero out the passthrough command structure
commit 6022f21046
upstream.
The passthrough structure is declared off of the stack, so it needs to be
set to zero before copied back to userspace to prevent any unintentional
data leakage. Switch things to be statically allocated which will fill the
unused fields with 0 automatically.
Link: https://lore.kernel.org/r/YxrjN3OOw2HHl9tx@kroah.com
Cc: stable@kernel.org
Cc: "James E.J. Bottomley" <jejb@linux.ibm.com>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: Dan Carpenter <dan.carpenter@oracle.com>
Reported-by: hdthky <hdthky0@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
7efc637a6c
commit
5c8395d775
2 changed files with 10 additions and 9 deletions
|
@ -673,16 +673,17 @@ stex_queuecommand_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
|
|||
return 0;
|
||||
case PASSTHRU_CMD:
|
||||
if (cmd->cmnd[1] == PASSTHRU_GET_DRVVER) {
|
||||
struct st_drvver ver;
|
||||
const struct st_drvver ver = {
|
||||
.major = ST_VER_MAJOR,
|
||||
.minor = ST_VER_MINOR,
|
||||
.oem = ST_OEM,
|
||||
.build = ST_BUILD_VER,
|
||||
.signature[0] = PASSTHRU_SIGNATURE,
|
||||
.console_id = host->max_id - 1,
|
||||
.host_no = hba->host->host_no,
|
||||
};
|
||||
size_t cp_len = sizeof(ver);
|
||||
|
||||
ver.major = ST_VER_MAJOR;
|
||||
ver.minor = ST_VER_MINOR;
|
||||
ver.oem = ST_OEM;
|
||||
ver.build = ST_BUILD_VER;
|
||||
ver.signature[0] = PASSTHRU_SIGNATURE;
|
||||
ver.console_id = host->max_id - 1;
|
||||
ver.host_no = hba->host->host_no;
|
||||
cp_len = scsi_sg_copy_from_buffer(cmd, &ver, cp_len);
|
||||
cmd->result = sizeof(ver) == cp_len ?
|
||||
DID_OK << 16 | COMMAND_COMPLETE << 8 :
|
||||
|
|
|
@ -225,7 +225,7 @@ static inline struct scsi_data_buffer *scsi_out(struct scsi_cmnd *cmd)
|
|||
}
|
||||
|
||||
static inline int scsi_sg_copy_from_buffer(struct scsi_cmnd *cmd,
|
||||
void *buf, int buflen)
|
||||
const void *buf, int buflen)
|
||||
{
|
||||
return sg_copy_from_buffer(scsi_sglist(cmd), scsi_sg_count(cmd),
|
||||
buf, buflen);
|
||||
|
|
Loading…
Reference in a new issue