cxgb4: Fix unintentional sign extension issues
[ Upstream commitdd2c796773] The shifting of the u8 integers f->fs.nat_lip[] by 24 bits to the left will be promoted to a 32 bit signed int and then sign-extended to a u64. In the event that the top bit of the u8 is set then all then all the upper 32 bits of the u64 end up as also being set because of the sign-extension. Fix this by casting the u8 values to a u64 before the 24 bit left shift. Addresses-Coverity: ("Unintended sign extension") Fixes:12b276fbf6("cxgb4: add support to create hash filters") Signed-off-by: Colin Ian King <colin.king@canonical.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
52fd8005a2
commit
6a61307e58
1 changed files with 11 additions and 11 deletions
|
|
@ -174,31 +174,31 @@ static void set_nat_params(struct adapter *adap, struct filter_entry *f,
|
|||
WORD_MASK, f->fs.nat_lip[15] |
|
||||
f->fs.nat_lip[14] << 8 |
|
||||
f->fs.nat_lip[13] << 16 |
|
||||
f->fs.nat_lip[12] << 24, 1);
|
||||
(u64)f->fs.nat_lip[12] << 24, 1);
|
||||
|
||||
set_tcb_field(adap, f, tid, TCB_SND_UNA_RAW_W + 1,
|
||||
WORD_MASK, f->fs.nat_lip[11] |
|
||||
f->fs.nat_lip[10] << 8 |
|
||||
f->fs.nat_lip[9] << 16 |
|
||||
f->fs.nat_lip[8] << 24, 1);
|
||||
(u64)f->fs.nat_lip[8] << 24, 1);
|
||||
|
||||
set_tcb_field(adap, f, tid, TCB_SND_UNA_RAW_W + 2,
|
||||
WORD_MASK, f->fs.nat_lip[7] |
|
||||
f->fs.nat_lip[6] << 8 |
|
||||
f->fs.nat_lip[5] << 16 |
|
||||
f->fs.nat_lip[4] << 24, 1);
|
||||
(u64)f->fs.nat_lip[4] << 24, 1);
|
||||
|
||||
set_tcb_field(adap, f, tid, TCB_SND_UNA_RAW_W + 3,
|
||||
WORD_MASK, f->fs.nat_lip[3] |
|
||||
f->fs.nat_lip[2] << 8 |
|
||||
f->fs.nat_lip[1] << 16 |
|
||||
f->fs.nat_lip[0] << 24, 1);
|
||||
(u64)f->fs.nat_lip[0] << 24, 1);
|
||||
} else {
|
||||
set_tcb_field(adap, f, tid, TCB_RX_FRAG3_LEN_RAW_W,
|
||||
WORD_MASK, f->fs.nat_lip[3] |
|
||||
f->fs.nat_lip[2] << 8 |
|
||||
f->fs.nat_lip[1] << 16 |
|
||||
f->fs.nat_lip[0] << 24, 1);
|
||||
(u64)f->fs.nat_lip[0] << 25, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -208,25 +208,25 @@ static void set_nat_params(struct adapter *adap, struct filter_entry *f,
|
|||
WORD_MASK, f->fs.nat_fip[15] |
|
||||
f->fs.nat_fip[14] << 8 |
|
||||
f->fs.nat_fip[13] << 16 |
|
||||
f->fs.nat_fip[12] << 24, 1);
|
||||
(u64)f->fs.nat_fip[12] << 24, 1);
|
||||
|
||||
set_tcb_field(adap, f, tid, TCB_RX_FRAG2_PTR_RAW_W + 1,
|
||||
WORD_MASK, f->fs.nat_fip[11] |
|
||||
f->fs.nat_fip[10] << 8 |
|
||||
f->fs.nat_fip[9] << 16 |
|
||||
f->fs.nat_fip[8] << 24, 1);
|
||||
(u64)f->fs.nat_fip[8] << 24, 1);
|
||||
|
||||
set_tcb_field(adap, f, tid, TCB_RX_FRAG2_PTR_RAW_W + 2,
|
||||
WORD_MASK, f->fs.nat_fip[7] |
|
||||
f->fs.nat_fip[6] << 8 |
|
||||
f->fs.nat_fip[5] << 16 |
|
||||
f->fs.nat_fip[4] << 24, 1);
|
||||
(u64)f->fs.nat_fip[4] << 24, 1);
|
||||
|
||||
set_tcb_field(adap, f, tid, TCB_RX_FRAG2_PTR_RAW_W + 3,
|
||||
WORD_MASK, f->fs.nat_fip[3] |
|
||||
f->fs.nat_fip[2] << 8 |
|
||||
f->fs.nat_fip[1] << 16 |
|
||||
f->fs.nat_fip[0] << 24, 1);
|
||||
(u64)f->fs.nat_fip[0] << 24, 1);
|
||||
|
||||
} else {
|
||||
set_tcb_field(adap, f, tid,
|
||||
|
|
@ -234,13 +234,13 @@ static void set_nat_params(struct adapter *adap, struct filter_entry *f,
|
|||
WORD_MASK, f->fs.nat_fip[3] |
|
||||
f->fs.nat_fip[2] << 8 |
|
||||
f->fs.nat_fip[1] << 16 |
|
||||
f->fs.nat_fip[0] << 24, 1);
|
||||
(u64)f->fs.nat_fip[0] << 24, 1);
|
||||
}
|
||||
}
|
||||
|
||||
set_tcb_field(adap, f, tid, TCB_PDU_HDR_LEN_W, WORD_MASK,
|
||||
(dp ? (nat_lp[1] | nat_lp[0] << 8) : 0) |
|
||||
(sp ? (nat_fp[1] << 16 | nat_fp[0] << 24) : 0),
|
||||
(sp ? (nat_fp[1] << 16 | (u64)nat_fp[0] << 24) : 0),
|
||||
1);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue