bnx2x: fix AFEX memory overflow
authorYuval Mintz <yuvalmin@broadcom.com>
Sun, 5 Jan 2014 16:33:53 +0000 (18:33 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 6 Jan 2014 01:22:25 +0000 (20:22 -0500)
There are 2 different (related) flows in the slowpath configuration
that utilize the same pointer and cast it to different structs;
This is obviously incorrect as the intended allocated memory is that
of the smaller struct, possibly causing the flow utilizing the larger
struct to corrupt other slowpath configuration.

Since both flows are exclusive, set the allocated memory to be a union
of both structs.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnx2x/bnx2x.h

index cb30d1a3d3adfef673fe76b86e4df9b40519a59c..2d5fce4c97516276672edbdf6c0b469bb04d595c 100644 (file)
@@ -1250,7 +1250,10 @@ struct bnx2x_slowpath {
         * Therefore, if they would have been defined in the same union,
         * data can get corrupted.
         */
-       struct afex_vif_list_ramrod_data func_afex_rdata;
+       union {
+               struct afex_vif_list_ramrod_data        viflist_data;
+               struct function_update_data             func_update;
+       } func_afex_rdata;
 
        /* used by dmae command executer */
        struct dmae_command             dmae[MAX_DMAE_C];