mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-10 07:10:27 +00:00
[SCSI] bfa: Fix endian bug in bfad_iocmd_debug_fw_core().
Casting pointer from native data type to other type is endian-sensitive. "iocmd->offset" is 64 bit but we use only first 32 bit. It works in little-endian system but in big-endian system it will break. Signed-off-by: Santosh Nayak <santoshprasadnayak@gmail.com> Acked-by: Jing Huang <huangj@brocade.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
6d76222e1a
commit
76c8ae4b2f
@ -1918,6 +1918,7 @@ bfad_iocmd_debug_fw_core(struct bfad_s *bfad, void *cmd,
|
|||||||
struct bfa_bsg_debug_s *iocmd = (struct bfa_bsg_debug_s *)cmd;
|
struct bfa_bsg_debug_s *iocmd = (struct bfa_bsg_debug_s *)cmd;
|
||||||
void *iocmd_bufptr;
|
void *iocmd_bufptr;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
u32 offset;
|
||||||
|
|
||||||
if (bfad_chk_iocmd_sz(payload_len, sizeof(struct bfa_bsg_debug_s),
|
if (bfad_chk_iocmd_sz(payload_len, sizeof(struct bfa_bsg_debug_s),
|
||||||
BFA_DEBUG_FW_CORE_CHUNK_SZ) != BFA_STATUS_OK) {
|
BFA_DEBUG_FW_CORE_CHUNK_SZ) != BFA_STATUS_OK) {
|
||||||
@ -1935,8 +1936,10 @@ bfad_iocmd_debug_fw_core(struct bfad_s *bfad, void *cmd,
|
|||||||
|
|
||||||
iocmd_bufptr = (char *)iocmd + sizeof(struct bfa_bsg_debug_s);
|
iocmd_bufptr = (char *)iocmd + sizeof(struct bfa_bsg_debug_s);
|
||||||
spin_lock_irqsave(&bfad->bfad_lock, flags);
|
spin_lock_irqsave(&bfad->bfad_lock, flags);
|
||||||
|
offset = iocmd->offset;
|
||||||
iocmd->status = bfa_ioc_debug_fwcore(&bfad->bfa.ioc, iocmd_bufptr,
|
iocmd->status = bfa_ioc_debug_fwcore(&bfad->bfa.ioc, iocmd_bufptr,
|
||||||
(u32 *)&iocmd->offset, &iocmd->bufsz);
|
&offset, &iocmd->bufsz);
|
||||||
|
iocmd->offset = offset;
|
||||||
spin_unlock_irqrestore(&bfad->bfad_lock, flags);
|
spin_unlock_irqrestore(&bfad->bfad_lock, flags);
|
||||||
out:
|
out:
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user