提交 66bf7918 编写于 作者: A Alexey Dobriyan 提交者: David S. Miller

netfilter: nf_conntrack_sip: de-static helper pointers

Helper's ->help hook can run concurrently with itself, so iterating over
SIP helpers with static pointer won't work reliably.
Signed-off-by: NAlexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: NPatrick McHardy <kaber@trash.net>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 fca1287a
...@@ -1193,7 +1193,6 @@ static const struct sip_handler sip_handlers[] = { ...@@ -1193,7 +1193,6 @@ static const struct sip_handler sip_handlers[] = {
static int process_sip_response(struct sk_buff *skb, static int process_sip_response(struct sk_buff *skb,
const char **dptr, unsigned int *datalen) const char **dptr, unsigned int *datalen)
{ {
static const struct sip_handler *handler;
enum ip_conntrack_info ctinfo; enum ip_conntrack_info ctinfo;
struct nf_conn *ct = nf_ct_get(skb, &ctinfo); struct nf_conn *ct = nf_ct_get(skb, &ctinfo);
unsigned int matchoff, matchlen; unsigned int matchoff, matchlen;
...@@ -1214,6 +1213,8 @@ static int process_sip_response(struct sk_buff *skb, ...@@ -1214,6 +1213,8 @@ static int process_sip_response(struct sk_buff *skb,
dataoff = matchoff + matchlen + 1; dataoff = matchoff + matchlen + 1;
for (i = 0; i < ARRAY_SIZE(sip_handlers); i++) { for (i = 0; i < ARRAY_SIZE(sip_handlers); i++) {
const struct sip_handler *handler;
handler = &sip_handlers[i]; handler = &sip_handlers[i];
if (handler->response == NULL) if (handler->response == NULL)
continue; continue;
...@@ -1228,13 +1229,14 @@ static int process_sip_response(struct sk_buff *skb, ...@@ -1228,13 +1229,14 @@ static int process_sip_response(struct sk_buff *skb,
static int process_sip_request(struct sk_buff *skb, static int process_sip_request(struct sk_buff *skb,
const char **dptr, unsigned int *datalen) const char **dptr, unsigned int *datalen)
{ {
static const struct sip_handler *handler;
enum ip_conntrack_info ctinfo; enum ip_conntrack_info ctinfo;
struct nf_conn *ct = nf_ct_get(skb, &ctinfo); struct nf_conn *ct = nf_ct_get(skb, &ctinfo);
unsigned int matchoff, matchlen; unsigned int matchoff, matchlen;
unsigned int cseq, i; unsigned int cseq, i;
for (i = 0; i < ARRAY_SIZE(sip_handlers); i++) { for (i = 0; i < ARRAY_SIZE(sip_handlers); i++) {
const struct sip_handler *handler;
handler = &sip_handlers[i]; handler = &sip_handlers[i];
if (handler->request == NULL) if (handler->request == NULL)
continue; continue;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册