lkml.org 
[lkml]   [2012]   [Sep]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[ 008/218] af_packet: remove BUG statement in tpacket_destruct_skb
    Date
    3.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------


    From: "danborkmann@iogearbox.net" <danborkmann@iogearbox.net>

    [ Upstream commit 7f5c3e3a80e6654cf48dfba7cf94f88c6b505467 ]

    Here's a quote of the comment about the BUG macro from asm-generic/bug.h:

    Don't use BUG() or BUG_ON() unless there's really no way out; one
    example might be detecting data structure corruption in the middle
    of an operation that can't be backed out of. If the (sub)system
    can somehow continue operating, perhaps with reduced functionality,
    it's probably not BUG-worthy.

    If you're tempted to BUG(), think again: is completely giving up
    really the *only* solution? There are usually better options, where
    users don't need to reboot ASAP and can mostly shut down cleanly.

    In our case, the status flag of a ring buffer slot is managed from both sides,
    the kernel space and the user space. This means that even though the kernel
    side might work as expected, the user space screws up and changes this flag
    right between the send(2) is triggered when the flag is changed to
    TP_STATUS_SENDING and a given skb is destructed after some time. Then, this
    will hit the BUG macro. As David suggested, the best solution is to simply
    remove this statement since it cannot be used for kernel side internal
    consistency checks. I've tested it and the system still behaves /stable/ in
    this case, so in accordance with the above comment, we should rather remove it.

    Signed-off-by: Daniel Borkmann <daniel.borkmann@tik.ee.ethz.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/packet/af_packet.c | 1 -
    1 file changed, 1 deletion(-)

    --- a/net/packet/af_packet.c
    +++ b/net/packet/af_packet.c
    @@ -1943,7 +1943,6 @@ static void tpacket_destruct_skb(struct

    if (likely(po->tx_ring.pg_vec)) {
    ph = skb_shinfo(skb)->destructor_arg;
    - BUG_ON(__packet_get_status(po, ph) != TP_STATUS_SENDING);
    BUG_ON(atomic_read(&po->tx_ring.pending) == 0);
    atomic_dec(&po->tx_ring.pending);
    __packet_set_status(po, ph, TP_STATUS_AVAILABLE);



    \
     
     \ /
      Last update: 2012-09-28 23:01    [W:4.163 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site