|
@@ -180,17 +180,16 @@ next_hook:
|
|
|
if (ret == 0)
|
|
|
ret = -EPERM;
|
|
|
} else if ((verdict & NF_VERDICT_MASK) == NF_QUEUE) {
|
|
|
- ret = nf_queue(skb, elem, pf, hook, indev, outdev, okfn,
|
|
|
- verdict >> NF_VERDICT_QBITS);
|
|
|
- if (ret < 0) {
|
|
|
- if (ret == -ECANCELED)
|
|
|
+ int err = nf_queue(skb, elem, pf, hook, indev, outdev, okfn,
|
|
|
+ verdict >> NF_VERDICT_QBITS);
|
|
|
+ if (err < 0) {
|
|
|
+ if (err == -ECANCELED)
|
|
|
goto next_hook;
|
|
|
- if (ret == -ESRCH &&
|
|
|
+ if (err == -ESRCH &&
|
|
|
(verdict & NF_VERDICT_FLAG_QUEUE_BYPASS))
|
|
|
goto next_hook;
|
|
|
kfree_skb(skb);
|
|
|
}
|
|
|
- ret = 0;
|
|
|
}
|
|
|
rcu_read_unlock();
|
|
|
return ret;
|