cmdline: fix overflow on bsd
When using test-pmd with flow director in FreeBSD, the application will segfault/Bus error while parsing the command-line. This is due to how each commands result structure is represented during parsing, where the offsets for each tokens value is stored in a character array(char result_buf[BUFSIZ]) in cmdline_parse()(./lib/librte_cmdline/cmdline_parse.c). The overflow occurs where BUFSIZ is less than the size of a commands result structure, in this case "struct cmd_pkt_filter_result" (app/test-pmd/cmdline.c) is 1088 bytes and BUFSIZ on FreeBSD is 1024 bytes as opposed to 8192 bytes on Linux. This patch removes the OS dependency on BUFSIZ and defines and uses a library #define CMDLINE_PARSE_RESULT_BUFSIZE 8192 The problem can be reproduced by running test-pmd on FreeBSD: ./testpmd -c 0x3 -n 4 -- -i --portmask=0x3 --pkt-filter-mode=perfect And adding a filter: add_perfect_filter 0 udp src 192.168.0.0 1024 dst 192.168.0.0 1024 flexbytes 0x800 vlan 0 queue 0 soft 0x17 Signed-off-by: Alan Carew <alan.carew@intel.com> Acked-by: Olivier Matz <olivier.matz@6wind.com>
This commit is contained in:
parent
999284fcc3
commit
a0547e0a75
@ -219,7 +219,7 @@ cmdline_parse(struct cmdline *cl, const char * buf)
|
||||
unsigned int inst_num=0;
|
||||
cmdline_parse_inst_t *inst;
|
||||
const char *curbuf;
|
||||
char result_buf[BUFSIZ];
|
||||
char result_buf[CMDLINE_PARSE_RESULT_BUFSIZE];
|
||||
void (*f)(void *, struct cmdline *, void *) = NULL;
|
||||
void *data = NULL;
|
||||
int comment = 0;
|
||||
|
@ -80,6 +80,9 @@ extern "C" {
|
||||
#define CMDLINE_PARSE_COMPLETE_AGAIN 1
|
||||
#define CMDLINE_PARSE_COMPLETED_BUFFER 2
|
||||
|
||||
/* maximum buffer size for parsed result */
|
||||
#define CMDLINE_PARSE_RESULT_BUFSIZE 8192
|
||||
|
||||
/**
|
||||
* Stores a pointer to the ops struct, and the offset: the place to
|
||||
* write the parsed result in the destination structure.
|
||||
|
Loading…
Reference in New Issue
Block a user