err = ah_mac_digest(ahp, skb, ah->auth_data);
                if (err)
                        goto unlock;
-               if (memcmp(ahp->work_icv, auth_data, ahp->icv_trunc_len)) {
-                       xfrm_audit_state_icvfail(x, skb, IPPROTO_AH);
+               if (memcmp(ahp->work_icv, auth_data, ahp->icv_trunc_len))
                        err = -EBADMSG;
-               }
        }
 unlock:
        spin_unlock(&x->lock);
 
                        BUG();
 
                if (unlikely(memcmp(esp->auth.work_icv, sum, alen))) {
-                       xfrm_audit_state_icvfail(x, skb, IPPROTO_ESP);
                        err = -EBADMSG;
                        goto unlock;
                }
 
                err = ah_mac_digest(ahp, skb, ah->auth_data);
                if (err)
                        goto unlock;
-               if (memcmp(ahp->work_icv, auth_data, ahp->icv_trunc_len)) {
-                       xfrm_audit_state_icvfail(x, skb, IPPROTO_AH);
+               if (memcmp(ahp->work_icv, auth_data, ahp->icv_trunc_len))
                        err = -EBADMSG;
-               }
        }
 unlock:
        spin_unlock(&x->lock);
 
                        BUG();
 
                if (unlikely(memcmp(esp->auth.work_icv, sum, alen))) {
-                       xfrm_audit_state_icvfail(x, skb, IPPROTO_ESP);
                        ret = -EBADMSG;
                        goto unlock;
                }
 
 resume:
                spin_lock(&x->lock);
                if (nexthdr <= 0) {
-                       if (nexthdr == -EBADMSG)
+                       if (nexthdr == -EBADMSG) {
+                               xfrm_audit_state_icvfail(x, skb,
+                                                        x->type->proto);
                                x->stats.integrity_failed++;
+                       }
                        XFRM_INC_STATS(LINUX_MIB_XFRMINSTATEPROTOERROR);
                        goto drop_unlock;
                }