iptables-1.8.10-11.el9
* Mon Dec 23 2024 Phil Sutter <psutter@redhat.com> [1.8.10-11.el9] - libxtables: Attenuate effects of functions' internal static buffers (Phil Sutter) [RHEL-72027] Resolves: RHEL-72027
This commit is contained in:
parent
1ce1b2c12f
commit
47d06c7f84
100
0017-libxtables-Attenuate-effects-of-functions-internal-s.patch
Normal file
100
0017-libxtables-Attenuate-effects-of-functions-internal-s.patch
Normal file
@ -0,0 +1,100 @@
|
||||
From 12006541787f7428bb9ca2f0b539c5bf87be27d2 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Sutter <psutter@redhat.com>
|
||||
Date: Mon, 23 Dec 2024 17:31:39 +0100
|
||||
Subject: [PATCH] libxtables: Attenuate effects of functions' internal static
|
||||
buffers
|
||||
|
||||
JIRA: https://issues.redhat.com/browse/RHEL-72027
|
||||
Upstream Status: iptables commit 8bf2bab8eb2e4f5ae2fef859ea7c877662854101
|
||||
|
||||
commit 8bf2bab8eb2e4f5ae2fef859ea7c877662854101
|
||||
Author: Phil Sutter <phil@nwl.cc>
|
||||
Date: Tue Apr 9 15:38:14 2024 +0200
|
||||
|
||||
libxtables: Attenuate effects of functions' internal static buffers
|
||||
|
||||
While functions returning pointers to internal static buffers have
|
||||
obvious limitations, users are likely unaware how they call each other
|
||||
internally and thus won't notice unsafe use. One such case is calling
|
||||
both xtables_ipaddr_to_numeric() and xtables_ipmask_to_numeric() as
|
||||
parameters for a single printf() call.
|
||||
|
||||
Defuse this trap by avoiding the internal calls to
|
||||
xtables_ip{,6}addr_to_numeric() which is easily doable since callers
|
||||
keep their own static buffers already.
|
||||
|
||||
While being at it, make use of inet_ntop() everywhere and also use
|
||||
INET_ADDRSTRLEN/INET6_ADDRSTRLEN defines for correct (and annotated)
|
||||
static buffer sizes.
|
||||
|
||||
Reported-by: Vitaly Chikunov <vt@altlinux.org>
|
||||
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||
Reviewed-by: Vitaly Chikunov <vt@altlinux.org>
|
||||
|
||||
Signed-off-by: Phil Sutter <psutter@redhat.com>
|
||||
---
|
||||
libxtables/xtables.c | 20 +++++++++-----------
|
||||
1 file changed, 9 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/libxtables/xtables.c b/libxtables/xtables.c
|
||||
index ba9ceae..a5e31f6 100644
|
||||
--- a/libxtables/xtables.c
|
||||
+++ b/libxtables/xtables.c
|
||||
@@ -1505,11 +1505,9 @@ void xtables_param_act(unsigned int status, const char *p1, ...)
|
||||
|
||||
const char *xtables_ipaddr_to_numeric(const struct in_addr *addrp)
|
||||
{
|
||||
- static char buf[16];
|
||||
- const unsigned char *bytep = (const void *)&addrp->s_addr;
|
||||
+ static char buf[INET_ADDRSTRLEN];
|
||||
|
||||
- sprintf(buf, "%u.%u.%u.%u", bytep[0], bytep[1], bytep[2], bytep[3]);
|
||||
- return buf;
|
||||
+ return inet_ntop(AF_INET, addrp, buf, sizeof(buf));
|
||||
}
|
||||
|
||||
static const char *ipaddr_to_host(const struct in_addr *addr)
|
||||
@@ -1569,13 +1567,14 @@ int xtables_ipmask_to_cidr(const struct in_addr *mask)
|
||||
|
||||
const char *xtables_ipmask_to_numeric(const struct in_addr *mask)
|
||||
{
|
||||
- static char buf[20];
|
||||
+ static char buf[INET_ADDRSTRLEN + 1];
|
||||
uint32_t cidr;
|
||||
|
||||
cidr = xtables_ipmask_to_cidr(mask);
|
||||
if (cidr == (unsigned int)-1) {
|
||||
/* mask was not a decent combination of 1's and 0's */
|
||||
- sprintf(buf, "/%s", xtables_ipaddr_to_numeric(mask));
|
||||
+ buf[0] = '/';
|
||||
+ inet_ntop(AF_INET, mask, buf + 1, sizeof(buf) - 1);
|
||||
return buf;
|
||||
} else if (cidr == 32) {
|
||||
/* we don't want to see "/32" */
|
||||
@@ -1855,9 +1854,8 @@ void xtables_ipparse_any(const char *name, struct in_addr **addrpp,
|
||||
|
||||
const char *xtables_ip6addr_to_numeric(const struct in6_addr *addrp)
|
||||
{
|
||||
- /* 0000:0000:0000:0000:0000:0000:000.000.000.000
|
||||
- * 0000:0000:0000:0000:0000:0000:0000:0000 */
|
||||
- static char buf[50+1];
|
||||
+ static char buf[INET6_ADDRSTRLEN];
|
||||
+
|
||||
return inet_ntop(AF_INET6, addrp, buf, sizeof(buf));
|
||||
}
|
||||
|
||||
@@ -1915,12 +1913,12 @@ int xtables_ip6mask_to_cidr(const struct in6_addr *k)
|
||||
|
||||
const char *xtables_ip6mask_to_numeric(const struct in6_addr *addrp)
|
||||
{
|
||||
- static char buf[50+2];
|
||||
+ static char buf[INET6_ADDRSTRLEN + 1];
|
||||
int l = xtables_ip6mask_to_cidr(addrp);
|
||||
|
||||
if (l == -1) {
|
||||
strcpy(buf, "/");
|
||||
- strcat(buf, xtables_ip6addr_to_numeric(addrp));
|
||||
+ inet_ntop(AF_INET6, addrp, buf + 1, sizeof(buf) - 1);
|
||||
return buf;
|
||||
}
|
||||
/* we don't want to see "/128" */
|
@ -1,5 +1,5 @@
|
||||
%define iptables_rpmversion 1.8.10
|
||||
%define iptables_specrelease 10
|
||||
%define iptables_specrelease 11
|
||||
|
||||
# install init scripts to /usr/libexec with systemd
|
||||
%global script_path %{_libexecdir}/iptables
|
||||
@ -47,6 +47,7 @@ Patch13: 0013-tests-shell-New-xtables-monitor-test.patch
|
||||
Patch14: 0014-xtables-monitor-Fix-for-ebtables-rule-events.patch
|
||||
Patch15: 0015-xtables-monitor-Ignore-ebtables-policy-rules-unless-.patch
|
||||
Patch16: 0016-Revert-xshared-Print-protocol-numbers-if-numeric-was.patch
|
||||
Patch17: 0017-libxtables-Attenuate-effects-of-functions-internal-s.patch
|
||||
|
||||
# pf.os: ISC license
|
||||
# iptables-apply: Artistic 2.0
|
||||
@ -500,6 +501,9 @@ fi
|
||||
%ghost %{_mandir}/man8/ebtables{,-translate}.8.gz
|
||||
|
||||
%changelog
|
||||
* Mon Dec 23 2024 Phil Sutter <psutter@redhat.com> [1.8.10-11.el9]
|
||||
- libxtables: Attenuate effects of functions' internal static buffers (Phil Sutter) [RHEL-72027]
|
||||
|
||||
* Sun Dec 22 2024 Phil Sutter <psutter@redhat.com> [1.8.10-10.el9]
|
||||
- spec: Fix build on c9s (Phil Sutter) [RHEL-72005]
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user