Skip to content

Commit

Permalink
net: Remove state argument from skb_find_text()
Browse files Browse the repository at this point in the history
Although it is clear that textsearch state is intentionally passed to
skb_find_text() as uninitialized argument, it was never used by the
callers. Therefore, we can simplify skb_find_text() by making it
local variable.

Signed-off-by: Bojan Prtvar <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
Bojan Prtvar authored and davem330 committed Feb 22, 2015
1 parent d340c86 commit 059a244
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 18 deletions.
3 changes: 1 addition & 2 deletions include/linux/skbuff.h
Original file line number Diff line number Diff line change
Expand Up @@ -870,8 +870,7 @@ unsigned int skb_seq_read(unsigned int consumed, const u8 **data,
void skb_abort_seq_read(struct skb_seq_state *st);

unsigned int skb_find_text(struct sk_buff *skb, unsigned int from,
unsigned int to, struct ts_config *config,
struct ts_state *state);
unsigned int to, struct ts_config *config);

/*
* Packet hash types specify the type of hash in skb_set_hash.
Expand Down
9 changes: 4 additions & 5 deletions net/core/skbuff.c
Original file line number Diff line number Diff line change
Expand Up @@ -2865,25 +2865,24 @@ static void skb_ts_finish(struct ts_config *conf, struct ts_state *state)
* @from: search offset
* @to: search limit
* @config: textsearch configuration
* @state: uninitialized textsearch state variable
*
* Finds a pattern in the skb data according to the specified
* textsearch configuration. Use textsearch_next() to retrieve
* subsequent occurrences of the pattern. Returns the offset
* to the first occurrence or UINT_MAX if no match was found.
*/
unsigned int skb_find_text(struct sk_buff *skb, unsigned int from,
unsigned int to, struct ts_config *config,
struct ts_state *state)
unsigned int to, struct ts_config *config)
{
struct ts_state state;
unsigned int ret;

config->get_next_block = skb_ts_get_next_block;
config->finish = skb_ts_finish;

skb_prepare_seq_read(skb, from, to, TS_SKB_CB(state));
skb_prepare_seq_read(skb, from, to, TS_SKB_CB(&state));

ret = textsearch_find(config, state);
ret = textsearch_find(config, &state);
return (ret <= to - from ? ret : UINT_MAX);
}
EXPORT_SYMBOL(skb_find_text);
Expand Down
10 changes: 3 additions & 7 deletions net/netfilter/nf_conntrack_amanda.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@ static int amanda_help(struct sk_buff *skb,
struct nf_conn *ct,
enum ip_conntrack_info ctinfo)
{
struct ts_state ts;
struct nf_conntrack_expect *exp;
struct nf_conntrack_tuple *tuple;
unsigned int dataoff, start, stop, off, i;
Expand All @@ -113,23 +112,20 @@ static int amanda_help(struct sk_buff *skb,
return NF_ACCEPT;
}

memset(&ts, 0, sizeof(ts));
start = skb_find_text(skb, dataoff, skb->len,
search[SEARCH_CONNECT].ts, &ts);
search[SEARCH_CONNECT].ts);
if (start == UINT_MAX)
goto out;
start += dataoff + search[SEARCH_CONNECT].len;

memset(&ts, 0, sizeof(ts));
stop = skb_find_text(skb, start, skb->len,
search[SEARCH_NEWLINE].ts, &ts);
search[SEARCH_NEWLINE].ts);
if (stop == UINT_MAX)
goto out;
stop += start;

for (i = SEARCH_DATA; i <= SEARCH_INDEX; i++) {
memset(&ts, 0, sizeof(ts));
off = skb_find_text(skb, start, stop, search[i].ts, &ts);
off = skb_find_text(skb, start, stop, search[i].ts);
if (off == UINT_MAX)
continue;
off += start + search[i].len;
Expand Down
3 changes: 1 addition & 2 deletions net/netfilter/xt_string.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,12 @@ static bool
string_mt(const struct sk_buff *skb, struct xt_action_param *par)
{
const struct xt_string_info *conf = par->matchinfo;
struct ts_state state;
bool invert;

invert = conf->u.v1.flags & XT_STRING_FLAG_INVERT;

return (skb_find_text((struct sk_buff *)skb, conf->from_offset,
conf->to_offset, conf->config, &state)
conf->to_offset, conf->config)
!= UINT_MAX) ^ invert;
}

Expand Down
3 changes: 1 addition & 2 deletions net/sched/em_text.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,14 @@ static int em_text_match(struct sk_buff *skb, struct tcf_ematch *m,
{
struct text_match *tm = EM_TEXT_PRIV(m);
int from, to;
struct ts_state state;

from = tcf_get_base_ptr(skb, tm->from_layer) - skb->data;
from += tm->from_offset;

to = tcf_get_base_ptr(skb, tm->to_layer) - skb->data;
to += tm->to_offset;

return skb_find_text(skb, from, to, tm->config, &state) != UINT_MAX;
return skb_find_text(skb, from, to, tm->config) != UINT_MAX;
}

static int em_text_change(struct net *net, void *data, int len,
Expand Down

0 comments on commit 059a244

Please sign in to comment.