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: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
fca1287a3a
Коммит
66bf79182d
|
@ -1193,7 +1193,6 @@ static const struct sip_handler sip_handlers[] = {
|
|||
static int process_sip_response(struct sk_buff *skb,
|
||||
const char **dptr, unsigned int *datalen)
|
||||
{
|
||||
static const struct sip_handler *handler;
|
||||
enum ip_conntrack_info ctinfo;
|
||||
struct nf_conn *ct = nf_ct_get(skb, &ctinfo);
|
||||
unsigned int matchoff, matchlen;
|
||||
|
@ -1214,6 +1213,8 @@ static int process_sip_response(struct sk_buff *skb,
|
|||
dataoff = matchoff + matchlen + 1;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(sip_handlers); i++) {
|
||||
const struct sip_handler *handler;
|
||||
|
||||
handler = &sip_handlers[i];
|
||||
if (handler->response == NULL)
|
||||
continue;
|
||||
|
@ -1228,13 +1229,14 @@ static int process_sip_response(struct sk_buff *skb,
|
|||
static int process_sip_request(struct sk_buff *skb,
|
||||
const char **dptr, unsigned int *datalen)
|
||||
{
|
||||
static const struct sip_handler *handler;
|
||||
enum ip_conntrack_info ctinfo;
|
||||
struct nf_conn *ct = nf_ct_get(skb, &ctinfo);
|
||||
unsigned int matchoff, matchlen;
|
||||
unsigned int cseq, i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(sip_handlers); i++) {
|
||||
const struct sip_handler *handler;
|
||||
|
||||
handler = &sip_handlers[i];
|
||||
if (handler->request == NULL)
|
||||
continue;
|
||||
|
|
Загрузка…
Ссылка в новой задаче