diff --git a/iputils-20101006-ping-fallback-to-numeric-addresses-while-exiting.patch b/iputils-20101006-ping-fallback-to-numeric-addresses-while-exiting.patch new file mode 100644 index 0000000..58e6002 --- /dev/null +++ b/iputils-20101006-ping-fallback-to-numeric-addresses-while-exiting.patch @@ -0,0 +1,75 @@ +--- iputils-s20101006/ping.c 2012-06-25 09:43:53.247390215 +0200 ++++ iputils-s20101006-patch/ping.c 2012-06-25 09:46:01.333436372 +0200 +@@ -1243,12 +1243,17 @@ pr_addr(__u32 addr) + addr_cache = addr; + tmp_addr.s_addr = addr; + +- if ((options & F_NUMERIC) || ++ in_pr_addr = !setjmp(pr_addr_jmp); ++ ++ if (exiting || (options & F_NUMERIC) || + !(hp = gethostbyaddr((char *)&addr, 4, AF_INET))) + sprintf(buf, "%s", inet_ntoa(tmp_addr)); + else + snprintf(buf, sizeof(buf), "%s (%s)", hp->h_name, + inet_ntoa(tmp_addr)); ++ ++ in_pr_addr = 0; ++ + return(buf); + } + +--- iputils-s20101006/ping6.c 2012-06-25 09:43:53.233390208 +0200 ++++ iputils-s20101006-patch/ping6.c 2012-06-25 09:46:52.437450591 +0200 +@@ -1565,9 +1565,13 @@ char * pr_addr(struct in6_addr *addr) + return hp ? hp->h_name : pr_addr_n(addr); + memcpy(&addr_cache, addr, sizeof(addr_cache)); + +- if (!(options&F_NUMERIC)) ++ in_pr_addr = !setjmp(pr_addr_jmp); ++ ++ if (!(exiting || options&F_NUMERIC)) + hp = gethostbyaddr((__u8*)addr, sizeof(struct in6_addr), AF_INET6); + ++ in_pr_addr = 0; ++ + return hp ? hp->h_name : pr_addr_n(addr); + } + +--- iputils-s20101006/ping_common.h 2012-06-25 09:43:53.249390215 +0200 ++++ iputils-s20101006-patch/ping_common.h 2012-06-25 09:47:24.002458261 +0200 +@@ -16,6 +16,7 @@ + #include + #include + #include ++#include + + #ifdef HAVE_CAPABILITIES + #include +@@ -219,3 +220,6 @@ extern int gather_statistics(__u8 *ptr, + int csfailed, struct timeval *tv, char *from, + void (*pr_reply)(__u8 *ptr, int cc)); + extern void print_timestamp(void); ++ ++extern int in_pr_addr; ++extern jmp_buf pr_addr_jmp; +--- iputils-s20101006/ping_common.c 2012-06-25 09:43:53.252390217 +0200 ++++ iputils-s20101006-patch/ping_common.c 2012-06-25 09:49:04.972477402 +0200 +@@ -32,6 +32,8 @@ struct timeval start_time, cur_time; + volatile int exiting; + volatile int status_snapshot; + int confirm = 0; ++int in_pr_addr = 0; /* pr_addr() is executing */ ++jmp_buf pr_addr_jmp; + + /* Stupid workarounds for bugs/missing functionality in older linuces. + * confirm_flag fixes refusing service of kernels without MSG_CONFIRM. +@@ -252,6 +254,8 @@ void common_options(int ch) + static void sigexit(int signo) + { + exiting = 1; ++ if (in_pr_addr) ++ longjmp(pr_addr_jmp, 0); + } + + static void sigstatus(int signo) diff --git a/iputils-20101006-ping-integer-overflow.patch b/iputils-20101006-ping-integer-overflow.patch new file mode 100644 index 0000000..720e5e8 --- /dev/null +++ b/iputils-20101006-ping-integer-overflow.patch @@ -0,0 +1,11 @@ +--- iputils-s20101006/ping_common.c 2010-10-06 13:59:20.000000000 +0200 ++++ iputils-s20101006-patched/ping_common.c 2012-03-09 16:42:46.878151032 +0100 +@@ -590,7 +590,7 @@ + + /* If we are here, recvmsg() is unable to wait for + * required timeout. */ +- if (1000*next <= 1000000/(int)HZ) { ++ if (((uint64_t)1000*next) <= (uint64_t)1000000/(int)HZ) { + /* Very short timeout... So, if we wait for + * something, we sleep for MININTERVAL. + * Otherwise, spin! */ diff --git a/iputils.spec b/iputils.spec index a14b3a0..a6dc3d2 100644 --- a/iputils.spec +++ b/iputils.spec @@ -32,6 +32,8 @@ Patch16: iputils-20101006-man.patch Patch17: iputils-20101006-eth.patch Patch18: iputils-20101006-rr.patch Patch20: iputils-20101006-ping-defer-caps-drop-when-marking-packets.patch +Patch21: iputils-20101006-ping-integer-overflow.patch +Patch22: iputils-20101006-ping-fallback-to-numeric-addresses-while-exiting.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: docbook-utils perl-SGMLSpm @@ -90,6 +92,8 @@ The iputils-sysvinit contains SysV initscritps support. %patch17 -p1 -b .eth %patch18 -p1 -b .rr %patch20 -p1 +%patch21 -p1 +%patch22 -p1 %build %ifarch s390 s390x @@ -196,6 +200,8 @@ rm -rf ${RPM_BUILD_ROOT} * Mon Jun 25 2012 Jan Synáček 20101006-15 - Ping fixes: + enable marking packets when the correct capabilities are set (#802197) + + integer overflow (#834661) + + Fallback to numeric addresses while exiting (#834661) * Wed Jan 25 2012 Harald Hoyer 20101006-14 - install everything in /usr