Hi,

You decrement/increment n_left_to_next/to_next twice in one iteration of the 
loop, so you are writing out of bounds. Have a look at other nodes that do 
packet copying like l2_flood.

/neale

From: vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> on behalf of Smith Beirvin via 
lists.fd.io <gbeirvin=gmail....@lists.fd.io>
Date: Monday, 7 March 2022 at 04:02
To: vpp-dev@lists.fd.io <vpp-dev@lists.fd.io>
Subject: [vpp-dev] Coredump occur when duplicate a packet at "interface-output" 
arc. #vpp
Hi fellows:
    I got a problem when duplicate a packet at "interface-output" arc, this 
will trigger a coredump as below. while I can't find any issue for the sorce 
code. So pls help me.

Coredump information;

Mar  7 02:54:24 localhost vnet[9542]: vlib_buffer_validate_alloc_free:367: 
freeing known-free buffer 0x9f947
Mar  7 02:54:24 localhost vnet[9542]: received signal SIGABRT, PC 0x7f2b4330ce87
Mar  7 02:54:24 localhost vnet[9542]: #0  0x00007f2b44e5e914 
unix_signal_handler + 0x2a4
Mar  7 02:54:24 localhost vnet[9542]: #1  0x00007f2b446f1980 0x7f2b446f1980
Mar  7 02:54:24 localhost vnet[9542]: #2  0x00007f2b4330ce87 gsignal + 0xc7
Mar  7 02:54:24 localhost vnet[9542]: #3  0x00007f2b4330e7f1 abort + 0x141
Mar  7 02:54:24 localhost vnet[9542]: #4  0x0000000000407263 0x407263
Mar  7 02:54:24 localhost vnet[9542]: #5  0x00007f2b441ed7f9 debugger + 0x9
Mar  7 02:54:24 localhost vnet[9542]: #6  0x00007f2b441ed577 _clib_error + 0x3b7
Mar  7 02:54:24 localhost vnet[9542]: #7  0x00007f2b44d6b4a7 
vlib_buffer_validate_alloc_free + 0x117
Mar  7 02:54:24 localhost vnet[9542]: #8  0x00007f2afa231267 
vlib_buffer_free_inline.constprop.9 + 0x1167
Mar  7 02:54:24 localhost vnet[9542]: #9  0x00007f2afa2328bb tap_inject_tx + 
0x64b
Mar  7 02:54:24 localhost vnet[9542]: #10 0x00007f2b44dd9fd5 dispatch_node + 
0x365
Mar  7 02:54:24 localhost vnet[9542]: #11 0x00007f2b44dda8a7 
dispatch_pending_node + 0x3c7
Mar  7 02:54:24 localhost vnet[9542]: #12 0x00007f2b44dd4d01 
vlib_main_or_worker_loop + 0xc51
Mar  7 02:54:24 localhost vnet[9542]: #13 0x00007f2b44dd6a4a vlib_main_loop + 
0x1a
Mar  7 02:54:24 localhost vnet[9542]: #14 0x00007f2b44dd681f vlib_main + 0xacf

Source Code:
// decode
typedef enum
{
    UDP_TCP_FAKE_OUT_NEXT_DROP,
    UDP_TCP_FAKE_OUT_NEXT_INT_TX,
    UDP_TCP_FAKE_OUT_N_NEXT,
} UDP_TCP_FAKE_OUT_NEXT_E;

always_inline uword
tcp_fake_out_inline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t 
* frame, u8 is_ip4)
{
    u32 n_left_from, *from, *to_next, next_index, matches;
    from = vlib_frame_vector_args (frame);
    n_left_from = frame->n_vectors;
    next_index = node->cached_next_index;
    matches = 0;

    while (n_left_from > 0)
    {
        u32 n_left_to_next;

        vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next);

        while (n_left_from > 0 && n_left_to_next > 0 && n_left_to_next <= 256)
        {
            u32 next0;
            vlib_buffer_t* b0;
            u32 bi0;

            bi0 = from[0];
            b0 = vlib_get_buffer (vm, bi0);

            vnet_feature_next (&next0, b0);

            if (is_ip4)
            {
                u8 is_send_syn = 1;

                if (is_send_syn && (1 < n_left_to_next))
                {
                    u32 syn_bi = 0;
                    vlib_buffer_t* syn_b;

                    // syn_b = vlib_buffer_copy3(vm, b0, &syn_bi);

                    syn_b = vlib_buffer_copy(vm, b0);

                    // send syn ack
                    if (syn_b)
                    {
                        syn_bi = vlib_get_buffer_index(vm, syn_b);
                        to_next[0] = syn_bi;
                        to_next += 1;
                        n_left_to_next -= 1;

                        vlib_validate_buffer_enqueue_x1 (vm, node, next_index,
                            to_next, n_left_to_next, bi0, next0);
                        printf("%s %d %s %s: tcp_fake track.\r\n", 
__FUNCTION__, __LINE__, __DATE__, __TIME__);
                    }
                    else
                    {
                        printf("beirvin note %s %d: syn_b is NULL;\r\n", 
__FUNCTION__, __LINE__);
                    }
                }
            }

            to_next[0] = bi0;
            from += 1;
            to_next += 1;
            n_left_from -= 1;
            n_left_to_next -= 1;

            vlib_validate_buffer_enqueue_x1 (vm, node, next_index,
                  to_next, n_left_to_next, bi0, next0);
        }

        vlib_put_next_frame (vm, node, next_index, n_left_to_next);
    }

    // vlib_node_increment_counter (vm, fast-vxlan-output.index, 
FWABF_ERROR_MATCHED, matches);
    return frame->n_vectors;
}

always_inline uword
tcp_fake_out_ipv4 (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * 
frame)
{
    return tcp_fake_out_inline (vm, node, frame, 1);
}


/* *INDENT-OFF* */
VLIB_REGISTER_NODE (tcp_fake_out_node) =
{
    .function = tcp_fake_out_ipv4,
    .name = "udp-tcp-fake-out",
      /* Takes a vector of packets. */
    .vector_size = sizeof (u32),
    .type = VLIB_NODE_TYPE_INTERNAL,
    .n_next_nodes = UDP_TCP_FAKE_OUT_N_NEXT,
    .next_nodes = {
      [UDP_TCP_FAKE_OUT_NEXT_DROP] = "error-drop",
      [UDP_TCP_FAKE_OUT_NEXT_INT_TX] = "interface-tx",
    },
    //.format_buffer = format_tcp_fake_header,
    //.format_trace = format_tcp_fake_trace,
};

VNET_FEATURE_INIT (tcp_fake_out_feat, static) =
{
    .arc_name = "interface-output",
    .node_name = "udp-tcp-fake-out",
    .runs_before = VNET_FEATURES ("interface-tx"),
};


static_always_inline clib_error_t *
tcp_fake_init (vlib_main_t * vm)
{
    tcp_fake_main_t * ufm = vnet_get_tcp_fake_main ();

    ufm->enable = 0;
    ufm->vm = vm;
    ufm->enable_interfaces = NULL;

    return 0;
}

VLIB_INIT_FUNCTION (tcp_fake_init);
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#20965): https://lists.fd.io/g/vpp-dev/message/20965
Mute This Topic: https://lists.fd.io/mt/89604305/21656
Mute #vpp:https://lists.fd.io/g/vpp-dev/mutehashtag/vpp
Group Owner: vpp-dev+ow...@lists.fd.io
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to