projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
4ea7244
)
mlx5: use after free in mlx5_cmd_comp_handler()
author
Dan Carpenter
<
[email protected]
>
Mon, 22 Jul 2013 08:02:01 +0000
(11:02 +0300)
committer
David S. Miller
<
[email protected]
>
Wed, 24 Jul 2013 22:44:51 +0000
(15:44 -0700)
We can't dereference "ent" after passing it to free_cmd().
Signed-off-by: Dan Carpenter <
[email protected]
>
Signed-off-by: David S. Miller <
[email protected]
>
drivers/net/ethernet/mellanox/mlx5/core/cmd.c
patch
|
blob
|
history
diff --git
a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
index 205753a04cfcb22e8904dbe2e3e203d82df32552..40374063c01ecadd862fa40e75729158e1022a42 100644
(file)
--- a/
drivers/net/ethernet/mellanox/mlx5/core/cmd.c
+++ b/
drivers/net/ethernet/mellanox/mlx5/core/cmd.c
@@
-1113,7
+1113,13
@@
void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, unsigned long vector)
for (i = 0; i < (1 << cmd->log_sz); i++) {
if (test_bit(i, &vector)) {
+ struct semaphore *sem;
+
ent = cmd->ent_arr[i];
+ if (ent->page_queue)
+ sem = &cmd->pages_sem;
+ else
+ sem = &cmd->sem;
ktime_get_ts(&ent->ts2);
memcpy(ent->out->first.data, ent->lay->out, sizeof(ent->lay->out));
dump_command(dev, ent, 0);
@@
-1136,10
+1142,7
@@
void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, unsigned long vector)
} else {
complete(&ent->done);
}
- if (ent->page_queue)
- up(&cmd->pages_sem);
- else
- up(&cmd->sem);
+ up(sem);
}
}
}