|
@@ -223,38 +223,38 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
|
|
seq = XFRM_SKB_CB(skb)->seq.input.low;
|
|
seq = XFRM_SKB_CB(skb)->seq.input.low;
|
|
goto resume;
|
|
goto resume;
|
|
}
|
|
}
|
|
|
|
+
|
|
/* encap_type < -1 indicates a GRO call. */
|
|
/* encap_type < -1 indicates a GRO call. */
|
|
encap_type = 0;
|
|
encap_type = 0;
|
|
seq = XFRM_SPI_SKB_CB(skb)->seq;
|
|
seq = XFRM_SPI_SKB_CB(skb)->seq;
|
|
- goto lock;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (xo && (xo->flags & CRYPTO_DONE)) {
|
|
|
|
- crypto_done = true;
|
|
|
|
- x = xfrm_input_state(skb);
|
|
|
|
- family = XFRM_SPI_SKB_CB(skb)->family;
|
|
|
|
|
|
|
|
- if (!(xo->status & CRYPTO_SUCCESS)) {
|
|
|
|
- if (xo->status &
|
|
|
|
- (CRYPTO_TRANSPORT_AH_AUTH_FAILED |
|
|
|
|
- CRYPTO_TRANSPORT_ESP_AUTH_FAILED |
|
|
|
|
- CRYPTO_TUNNEL_AH_AUTH_FAILED |
|
|
|
|
- CRYPTO_TUNNEL_ESP_AUTH_FAILED)) {
|
|
|
|
-
|
|
|
|
- xfrm_audit_state_icvfail(x, skb,
|
|
|
|
- x->type->proto);
|
|
|
|
- x->stats.integrity_failed++;
|
|
|
|
- XFRM_INC_STATS(net, LINUX_MIB_XFRMINSTATEPROTOERROR);
|
|
|
|
|
|
+ if (xo && (xo->flags & CRYPTO_DONE)) {
|
|
|
|
+ crypto_done = true;
|
|
|
|
+ x = xfrm_input_state(skb);
|
|
|
|
+ family = XFRM_SPI_SKB_CB(skb)->family;
|
|
|
|
+
|
|
|
|
+ if (!(xo->status & CRYPTO_SUCCESS)) {
|
|
|
|
+ if (xo->status &
|
|
|
|
+ (CRYPTO_TRANSPORT_AH_AUTH_FAILED |
|
|
|
|
+ CRYPTO_TRANSPORT_ESP_AUTH_FAILED |
|
|
|
|
+ CRYPTO_TUNNEL_AH_AUTH_FAILED |
|
|
|
|
+ CRYPTO_TUNNEL_ESP_AUTH_FAILED)) {
|
|
|
|
+
|
|
|
|
+ xfrm_audit_state_icvfail(x, skb,
|
|
|
|
+ x->type->proto);
|
|
|
|
+ x->stats.integrity_failed++;
|
|
|
|
+ XFRM_INC_STATS(net, LINUX_MIB_XFRMINSTATEPROTOERROR);
|
|
|
|
+ goto drop;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ XFRM_INC_STATS(net, LINUX_MIB_XFRMINBUFFERERROR);
|
|
goto drop;
|
|
goto drop;
|
|
}
|
|
}
|
|
|
|
|
|
- XFRM_INC_STATS(net, LINUX_MIB_XFRMINBUFFERERROR);
|
|
|
|
- goto drop;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if ((err = xfrm_parse_spi(skb, nexthdr, &spi, &seq)) != 0) {
|
|
|
|
- XFRM_INC_STATS(net, LINUX_MIB_XFRMINHDRERROR);
|
|
|
|
- goto drop;
|
|
|
|
|
|
+ if ((err = xfrm_parse_spi(skb, nexthdr, &spi, &seq)) != 0) {
|
|
|
|
+ XFRM_INC_STATS(net, LINUX_MIB_XFRMINHDRERROR);
|
|
|
|
+ goto drop;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
goto lock;
|
|
goto lock;
|