--- iputils-s20121221/ping_common.c 2014-03-26 10:41:49.905136743 +0100 +++ iputils-s20121221-new/ping_common.c 2014-03-26 10:57:38.259918104 +0100 @@ -525,10 +525,11 @@ resend: if (i > 0) { /* Apparently, it is some fatal bug. */ abort(); - } else if (errno == ENOBUFS || errno == ENOMEM) { + } else if (errno == ENOBUFS || errno == ENOMEM || errno == EPERM) { int nores_interval; - /* Device queue overflow or OOM. Packet is not sent. */ + /* Device queue overflow, OOM or operation not permitted. + * Packet is not sent. */ tokens = 0; /* Slowdown. This works only in adaptive mode (option -A) */ rtt_addend += (rtt < 8*50000 ? rtt/8 : 50000); @@ -537,7 +538,8 @@ resend: nores_interval = SCHINT(interval/2); if (nores_interval > 500) nores_interval = 500; - oom_count++; + if (errno != EPERM) + oom_count++; if (oom_count*nores_interval < lingertime) return nores_interval; i = 0;