Skip to content

Commit e7dbeba

Browse files
Jack Morgensteindavem330
authored andcommitted
net/mlx4_core: Fix endianness bug in set_param_l
The set_param_l function assumes casting a u64 pointer to a u32 pointer allows to access the lower 32bits, but it results in writing the upper 32 bits on big endian systems. The fixed function reads the upper 32 bits of the 64 argument, and or's them with the 32 bits of the 32-bit value passed to the function. Since this is now a "read-modify-write" operation, we got many "unintialized variable" warnings which needed to be fixed as well. Reported-by: Alexander Schmidt <alexschm@de.ibm.com>. Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 0081c8f commit e7dbeba

8 files changed

Lines changed: 18 additions & 18 deletions

File tree

drivers/net/ethernet/mellanox/mlx4/cq.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ void __mlx4_cq_free_icm(struct mlx4_dev *dev, int cqn)
226226

227227
static void mlx4_cq_free_icm(struct mlx4_dev *dev, int cqn)
228228
{
229-
u64 in_param;
229+
u64 in_param = 0;
230230
int err;
231231

232232
if (mlx4_is_mfunc(dev)) {

drivers/net/ethernet/mellanox/mlx4/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1555,7 +1555,7 @@ void __mlx4_counter_free(struct mlx4_dev *dev, u32 idx)
15551555

15561556
void mlx4_counter_free(struct mlx4_dev *dev, u32 idx)
15571557
{
1558-
u64 in_param;
1558+
u64 in_param = 0;
15591559

15601560
if (mlx4_is_mfunc(dev)) {
15611561
set_param_l(&in_param, idx);

drivers/net/ethernet/mellanox/mlx4/mlx4.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1235,7 +1235,7 @@ int mlx4_get_qp_per_mgm(struct mlx4_dev *dev);
12351235

12361236
static inline void set_param_l(u64 *arg, u32 val)
12371237
{
1238-
*((u32 *)arg) = val;
1238+
*arg = (*arg & 0xffffffff00000000ULL) | (u64) val;
12391239
}
12401240

12411241
static inline void set_param_h(u64 *arg, u32 val)

drivers/net/ethernet/mellanox/mlx4/mr.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ u32 __mlx4_alloc_mtt_range(struct mlx4_dev *dev, int order)
183183

184184
static u32 mlx4_alloc_mtt_range(struct mlx4_dev *dev, int order)
185185
{
186-
u64 in_param;
186+
u64 in_param = 0;
187187
u64 out_param;
188188
int err;
189189

@@ -240,7 +240,7 @@ void __mlx4_free_mtt_range(struct mlx4_dev *dev, u32 offset, int order)
240240

241241
static void mlx4_free_mtt_range(struct mlx4_dev *dev, u32 offset, int order)
242242
{
243-
u64 in_param;
243+
u64 in_param = 0;
244244
int err;
245245

246246
if (mlx4_is_mfunc(dev)) {
@@ -351,7 +351,7 @@ void __mlx4_mpt_release(struct mlx4_dev *dev, u32 index)
351351

352352
static void mlx4_mpt_release(struct mlx4_dev *dev, u32 index)
353353
{
354-
u64 in_param;
354+
u64 in_param = 0;
355355

356356
if (mlx4_is_mfunc(dev)) {
357357
set_param_l(&in_param, index);
@@ -374,7 +374,7 @@ int __mlx4_mpt_alloc_icm(struct mlx4_dev *dev, u32 index)
374374

375375
static int mlx4_mpt_alloc_icm(struct mlx4_dev *dev, u32 index)
376376
{
377-
u64 param;
377+
u64 param = 0;
378378

379379
if (mlx4_is_mfunc(dev)) {
380380
set_param_l(&param, index);
@@ -395,7 +395,7 @@ void __mlx4_mpt_free_icm(struct mlx4_dev *dev, u32 index)
395395

396396
static void mlx4_mpt_free_icm(struct mlx4_dev *dev, u32 index)
397397
{
398-
u64 in_param;
398+
u64 in_param = 0;
399399

400400
if (mlx4_is_mfunc(dev)) {
401401
set_param_l(&in_param, index);

drivers/net/ethernet/mellanox/mlx4/pd.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ void __mlx4_xrcd_free(struct mlx4_dev *dev, u32 xrcdn)
101101

102102
void mlx4_xrcd_free(struct mlx4_dev *dev, u32 xrcdn)
103103
{
104-
u64 in_param;
104+
u64 in_param = 0;
105105
int err;
106106

107107
if (mlx4_is_mfunc(dev)) {

drivers/net/ethernet/mellanox/mlx4/port.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ EXPORT_SYMBOL_GPL(__mlx4_register_mac);
175175

176176
int mlx4_register_mac(struct mlx4_dev *dev, u8 port, u64 mac)
177177
{
178-
u64 out_param;
178+
u64 out_param = 0;
179179
int err;
180180

181181
if (mlx4_is_mfunc(dev)) {
@@ -222,7 +222,7 @@ EXPORT_SYMBOL_GPL(__mlx4_unregister_mac);
222222

223223
void mlx4_unregister_mac(struct mlx4_dev *dev, u8 port, u64 mac)
224224
{
225-
u64 out_param;
225+
u64 out_param = 0;
226226

227227
if (mlx4_is_mfunc(dev)) {
228228
set_param_l(&out_param, port);
@@ -361,7 +361,7 @@ static int __mlx4_register_vlan(struct mlx4_dev *dev, u8 port, u16 vlan,
361361

362362
int mlx4_register_vlan(struct mlx4_dev *dev, u8 port, u16 vlan, int *index)
363363
{
364-
u64 out_param;
364+
u64 out_param = 0;
365365
int err;
366366

367367
if (mlx4_is_mfunc(dev)) {
@@ -406,7 +406,7 @@ static void __mlx4_unregister_vlan(struct mlx4_dev *dev, u8 port, int index)
406406

407407
void mlx4_unregister_vlan(struct mlx4_dev *dev, u8 port, int index)
408408
{
409-
u64 in_param;
409+
u64 in_param = 0;
410410
int err;
411411

412412
if (mlx4_is_mfunc(dev)) {

drivers/net/ethernet/mellanox/mlx4/qp.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ int __mlx4_qp_reserve_range(struct mlx4_dev *dev, int cnt, int align,
222222

223223
int mlx4_qp_reserve_range(struct mlx4_dev *dev, int cnt, int align, int *base)
224224
{
225-
u64 in_param;
225+
u64 in_param = 0;
226226
u64 out_param;
227227
int err;
228228

@@ -255,7 +255,7 @@ void __mlx4_qp_release_range(struct mlx4_dev *dev, int base_qpn, int cnt)
255255

256256
void mlx4_qp_release_range(struct mlx4_dev *dev, int base_qpn, int cnt)
257257
{
258-
u64 in_param;
258+
u64 in_param = 0;
259259
int err;
260260

261261
if (mlx4_is_mfunc(dev)) {
@@ -319,7 +319,7 @@ int __mlx4_qp_alloc_icm(struct mlx4_dev *dev, int qpn)
319319

320320
static int mlx4_qp_alloc_icm(struct mlx4_dev *dev, int qpn)
321321
{
322-
u64 param;
322+
u64 param = 0;
323323

324324
if (mlx4_is_mfunc(dev)) {
325325
set_param_l(&param, qpn);
@@ -344,7 +344,7 @@ void __mlx4_qp_free_icm(struct mlx4_dev *dev, int qpn)
344344

345345
static void mlx4_qp_free_icm(struct mlx4_dev *dev, int qpn)
346346
{
347-
u64 in_param;
347+
u64 in_param = 0;
348348

349349
if (mlx4_is_mfunc(dev)) {
350350
set_param_l(&in_param, qpn);

drivers/net/ethernet/mellanox/mlx4/srq.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ void __mlx4_srq_free_icm(struct mlx4_dev *dev, int srqn)
149149

150150
static void mlx4_srq_free_icm(struct mlx4_dev *dev, int srqn)
151151
{
152-
u64 in_param;
152+
u64 in_param = 0;
153153

154154
if (mlx4_is_mfunc(dev)) {
155155
set_param_l(&in_param, srqn);

0 commit comments

Comments
 (0)