From: bugzilla@dpdk.org
To: dev@dpdk.org
Subject: [Bug 1155] DPDK 22.07 RTE flow: Segmentation fault seen in i40e_flow_parse_fdir_filter() for raw item type
Date: Wed, 21 Dec 2022 02:47:03 +0000 [thread overview]
Message-ID: <bug-1155-3@http.bugs.dpdk.org/> (raw)
https://bugs.dpdk.org/show_bug.cgi?id=1155
Bug ID: 1155
Summary: DPDK 22.07 RTE flow: Segmentation fault seen in
i40e_flow_parse_fdir_filter() for raw item type
Product: DPDK
Version: 22.07
Hardware: x86
OS: Linux
Status: UNCONFIRMED
Severity: critical
Priority: Normal
Component: other
Assignee: dev@dpdk.org
Reporter: lthammin@usc.edu
Target Milestone: ---
I am using a RTE_FLOW_ITEM_TYPE_RAW to match a flow with specific src-ip
address from IP header. With this, it is recommended to use pre-defined
rte_flow_item_raw_mask(default mask) as the mask.
/** Default mask for RTE_FLOW_ITEM_TYPE_RAW. */
#ifndef __cplusplus
static const struct rte_flow_item_raw rte_flow_item_raw_mask = {
.relative = 1,
.search = 1,
.reserved = 0x3fffffff,
.offset = 0xffffffff,
.limit = 0xffff,
.length = 0xffff,
.pattern = NULL,
};
#endif
When I use this default mask and call rte_flow_validate(), I get a segmentation
fault. But, if I replace the NULL pattern by a non-NULL pointer having some
string then I don't see the segmentation fault (uncomment pattern[1].mask =
&raw_mask; in below code).
Below are my api and gdb backtrace.
void
dpdk_flow_add_raw_type (dpdk_device_t * xd)
{
/* create the attribute structure */
struct rte_flow_attr attr = { .ingress = 1 };
struct rte_flow_item pattern[3];
struct rte_flow_action actions[2];
struct rte_flow_item_raw raw_src_ip;
struct rte_flow_item_raw raw_mask;
uint8_t src_ip_str[5];
uint8_t raw_mask_str[5];
struct rte_flow_action_queue queue = { .index = 3 };
struct rte_flow_error error;
int rv;
/* setting the eth to pass all packets */
pattern[0].type = RTE_FLOW_ITEM_TYPE_ETH;
pattern[0].spec = NULL;
pattern[0].mask = NULL;
pattern[0].last = NULL;
/* Match src-ip 44.45.46.47 */
src_ip_str[0] = 44;
src_ip_str[1] = 45;
src_ip_str[2] = 46;
src_ip_str[3] = 47;
src_ip_str[4] = '\0';
/* Setting raw item mask's pattern to all 1s. Not sure if this is right
*/
raw_mask_str[0] = 0xff;
raw_mask_str[1] = 0xff;
raw_mask_str[2] = 0xff;
raw_mask_str[3] = 0xff;
raw_mask_str[4] = '\0';
/* Same as rte_flow_item_raw_mask (default raw mask) except that
pattern is non-NULL */
raw_mask.relative = 1;
raw_mask.search = 1;
raw_mask.reserved = 0x3fffffff;
raw_mask.offset = 0xffffffff;
raw_mask.limit = 0xffff;
raw_mask.length = 0xffff;
//raw_mask.pattern = NULL,
raw_mask.pattern = raw_mask_str;
pattern[1].type = RTE_FLOW_ITEM_TYPE_RAW;
raw_src_ip.relative = 1;
raw_src_ip.search = 0;
raw_src_ip.offset = 12; // src-ip in IP header starts after 12 bytes
raw_src_ip.limit = 0;
raw_src_ip.length = 4; // src-ip is 4 bytes long
raw_src_ip.pattern = src_ip_str; // Match 44.45.46.47 of length 4 bytes
after 12 bytes
pattern[1].spec = &raw_src_ip;
pattern[1].mask = &rte_flow_item_raw_mask;
//pattern[1].mask = &raw_mask; // comment above line and un-comment
this. Then segmentation fault is not seen.
pattern[1].last = NULL;
pattern[2].type = RTE_FLOW_ITEM_TYPE_END;
/* create the queue action */
actions[0].type = RTE_FLOW_ACTION_TYPE_QUEUE;
actions[0].conf = &queue;
// redirect to queue 3
actions[1].type = RTE_FLOW_ACTION_TYPE_END;
/* validate and create the flow rule */
if (!(rv = rte_flow_validate(xd->port_id, &attr, pattern, actions,
&error)))
rte_flow_create(xd->port_id, &attr, pattern, actions, &error);
}
Thread 1 "vpp_main" received signal SIGSEGV, Segmentation fault.
0x00007fffb4c9b35b in i40e_flow_parse_fdir_filter () from
build-root/install-vpp_debug-native/vpp/lib/x86_64-linux-gnu/vpp_plugins/dpdk_plugin.so
(gdb) bt
#0 0x00007fffb4c9b35b in i40e_flow_parse_fdir_filter () from
build-root/install-vpp_debug-native/vpp/lib/x86_64-linux-gnu/vpp_plugins/dpdk_plugin.so
#1 0x00007fffb4c97c6e in i40e_flow_validate () from
build-root/install-vpp_debug-native/vpp/lib/x86_64-linux-gnu/vpp_plugins/dpdk_plugin.so
#2 0x00007fffb4aa50f2 in rte_flow_validate () from
build-root/install-vpp_debug-native/vpp/lib/x86_64-linux-gnu/vpp_plugins/dpdk_plugin.so
#3 0x00007fffb4fdab1e in dpdk_flow_add_raw_type (xd=0x7fffbda2b200) at
Please check this out and let me know.
Thanks,
Nikhil
--
You are receiving this mail because:
You are the assignee for the bug.
reply other threads:[~2022-12-21 2:47 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bug-1155-3@http.bugs.dpdk.org/ \
--to=bugzilla@dpdk.org \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).