In the Linux kernel, the following vulnerability has been resolved:
batman-adv: mcast: linearize skbuff for packet generation
batadv_mcast_forw_packet() and batadv_mcast_forw_scrape() is not only
called (indirectly) by the unsharing+linearizing batadv_recv_mcast_packet()
handler. When it is called (indirectly) by batadv_mcast_forw_mcsend() then
it will be unshared but not linearized. The SKB_LINEAR_ASSERT() can
therefore cause a fatal BUG().
The linearization should happen during the expansion of the head because
the scrape function can be hit already during the initial
batadv_mcast_forw_mode() selection code:
- batadv_interface_tx
- batadv_mcast_forw_mode
- batadv_mcast_forw_mode_by_count()
- batadv_mcast_forw_push()
-> calls batadv_mcast_forw_expand_head() before everything else
- batadv_mcast_forw_push_tvlvs()
- batadv_mcast_forw_push_dests()
- batadv_mcast_forw_push_adjust_padding()
- batadv_mcast_forw_scrape()