• Toke Høiland-Jørgensen's avatar
    gen_stats: Fix netlink stats dumping in the presence of padding · d5a672ac
    Toke Høiland-Jørgensen authored
    The gen_stats facility will add a header for the toplevel nlattr of type
    TCA_STATS2 that contains all stats added by qdisc callbacks. A reference
    to this header is stored in the gnet_dump struct, and when all the
    per-qdisc callbacks have finished adding their stats, the length of the
    containing header will be adjusted to the right value.
    
    However, on architectures that need padding (i.e., that don't set
    CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS), the padding nlattr is added
    before the stats, which means that the stored pointer will point to the
    padding, and so when the header is fixed up, the result is just a very
    big padding nlattr. Because most qdiscs also supply the legacy TCA_STATS
    struct, this problem has been mostly invisible, but we exposed it with
    the netlink attribute-based statistics in CAKE.
    
    Fix the issue by fixing up the stored pointer if it points to a padding
    nlattr.
    Tested-by: default avatarPete Heist <pete@heistp.net>
    Tested-by: default avatarKevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk>
    Signed-off-by: default avatarToke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d5a672ac
gen_stats.c 10.6 KB