2021-11-26 14:10:50 +08:00
|
|
|
From cbc3a30711701f0e8d7f5df14f84adfb2c9fec1f Mon Sep 17 00:00:00 2001
|
|
|
|
|
From: majun <majun65@huawei.com>
|
|
|
|
|
Date: Fri, 16 Apr 2021 14:52:42 +0800
|
|
|
|
|
Subject: [PATCH]
|
|
|
|
|
|
|
|
|
|
iptables: add null check for fw in X_entry
|
|
|
|
|
If the fw pointer is empty, a core dump occurs.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
iptables/ip6tables.c | 21 +++++++++++++++++++++
|
|
|
|
|
iptables/iptables.c | 20 ++++++++++++++++++++
|
|
|
|
|
2 files changed, 41 insertions(+)
|
|
|
|
|
|
|
|
|
|
diff --git a/iptables/ip6tables.c b/iptables/ip6tables.c
|
2023-02-28 20:56:31 +08:00
|
|
|
index 345af45..5885d41 100644
|
2021-11-26 14:10:50 +08:00
|
|
|
--- a/iptables/ip6tables.c
|
|
|
|
|
+++ b/iptables/ip6tables.c
|
2023-02-28 20:56:31 +08:00
|
|
|
@@ -218,6 +218,10 @@ append_entry(const xt_chainlabel chain,
|
2021-11-26 14:10:50 +08:00
|
|
|
unsigned int i, j;
|
|
|
|
|
int ret = 1;
|
|
|
|
|
|
|
|
|
|
+ if (!fw) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
for (i = 0; i < nsaddrs; i++) {
|
|
|
|
|
fw->ipv6.src = saddrs[i];
|
|
|
|
|
fw->ipv6.smsk = smasks[i];
|
2023-02-28 20:56:31 +08:00
|
|
|
@@ -242,6 +246,11 @@ replace_entry(const xt_chainlabel chain,
|
2021-11-26 14:10:50 +08:00
|
|
|
int verbose,
|
|
|
|
|
struct xtc_handle *handle)
|
|
|
|
|
{
|
|
|
|
|
+
|
|
|
|
|
+ if (!fw) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
fw->ipv6.src = *saddr;
|
|
|
|
|
fw->ipv6.dst = *daddr;
|
|
|
|
|
fw->ipv6.smsk = *smask;
|
2023-02-28 20:56:31 +08:00
|
|
|
@@ -268,6 +277,10 @@ insert_entry(const xt_chainlabel chain,
|
2021-11-26 14:10:50 +08:00
|
|
|
unsigned int i, j;
|
|
|
|
|
int ret = 1;
|
|
|
|
|
|
2023-02-28 20:56:31 +08:00
|
|
|
+ if (!fw) {
|
2021-11-26 14:10:50 +08:00
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
for (i = 0; i < nsaddrs; i++) {
|
|
|
|
|
fw->ipv6.src = saddrs[i];
|
|
|
|
|
fw->ipv6.smsk = smasks[i];
|
2023-02-28 20:56:31 +08:00
|
|
|
@@ -301,6 +314,10 @@ delete_entry(const xt_chainlabel chain,
|
2021-11-26 14:10:50 +08:00
|
|
|
int ret = 1;
|
|
|
|
|
unsigned char *mask;
|
|
|
|
|
|
2023-02-28 20:56:31 +08:00
|
|
|
+ if (!fw) {
|
2021-11-26 14:10:50 +08:00
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
2023-02-28 20:56:31 +08:00
|
|
|
mask = make_delete_mask(matches, target, sizeof(*fw));
|
2021-11-26 14:10:50 +08:00
|
|
|
for (i = 0; i < nsaddrs; i++) {
|
|
|
|
|
fw->ipv6.src = saddrs[i];
|
2023-02-28 20:56:31 +08:00
|
|
|
@@ -331,6 +348,10 @@ check_entry(const xt_chainlabel chain, struct ip6t_entry *fw,
|
2021-11-26 14:10:50 +08:00
|
|
|
int ret = 1;
|
|
|
|
|
unsigned char *mask;
|
|
|
|
|
|
2023-02-28 20:56:31 +08:00
|
|
|
+ if (!fw) {
|
2021-11-26 14:10:50 +08:00
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
2023-02-28 20:56:31 +08:00
|
|
|
mask = make_delete_mask(matches, target, sizeof(fw));
|
2021-11-26 14:10:50 +08:00
|
|
|
for (i = 0; i < nsaddrs; i++) {
|
|
|
|
|
fw->ipv6.src = saddrs[i];
|
|
|
|
|
diff --git a/iptables/iptables.c b/iptables/iptables.c
|
2023-02-28 20:56:31 +08:00
|
|
|
index 6f7b347..0d302e5 100644
|
2021-11-26 14:10:50 +08:00
|
|
|
--- a/iptables/iptables.c
|
|
|
|
|
+++ b/iptables/iptables.c
|
2023-02-28 20:56:31 +08:00
|
|
|
@@ -217,6 +217,10 @@ append_entry(const xt_chainlabel chain,
|
2021-11-26 14:10:50 +08:00
|
|
|
unsigned int i, j;
|
|
|
|
|
int ret = 1;
|
|
|
|
|
|
2023-02-28 20:56:31 +08:00
|
|
|
+ if (!fw) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
2021-11-26 14:10:50 +08:00
|
|
|
+
|
|
|
|
|
for (i = 0; i < nsaddrs; i++) {
|
|
|
|
|
fw->ip.src.s_addr = saddrs[i].s_addr;
|
|
|
|
|
fw->ip.smsk.s_addr = smasks[i].s_addr;
|
2023-02-28 20:56:31 +08:00
|
|
|
@@ -241,6 +245,10 @@ replace_entry(const xt_chainlabel chain,
|
2021-11-26 14:10:50 +08:00
|
|
|
int verbose,
|
|
|
|
|
struct xtc_handle *handle)
|
|
|
|
|
{
|
2023-02-28 20:56:31 +08:00
|
|
|
+ if (!fw) {
|
2021-11-26 14:10:50 +08:00
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
fw->ip.src.s_addr = saddr->s_addr;
|
|
|
|
|
fw->ip.dst.s_addr = daddr->s_addr;
|
|
|
|
|
fw->ip.smsk.s_addr = smask->s_addr;
|
2023-02-28 20:56:31 +08:00
|
|
|
@@ -267,6 +275,10 @@ insert_entry(const xt_chainlabel chain,
|
2021-11-26 14:10:50 +08:00
|
|
|
unsigned int i, j;
|
|
|
|
|
int ret = 1;
|
|
|
|
|
|
|
|
|
|
+ if (!fw) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
for (i = 0; i < nsaddrs; i++) {
|
|
|
|
|
fw->ip.src.s_addr = saddrs[i].s_addr;
|
|
|
|
|
fw->ip.smsk.s_addr = smasks[i].s_addr;
|
2023-02-28 20:56:31 +08:00
|
|
|
@@ -300,6 +312,10 @@ delete_entry(const xt_chainlabel chain,
|
2021-11-26 14:10:50 +08:00
|
|
|
int ret = 1;
|
|
|
|
|
unsigned char *mask;
|
|
|
|
|
|
2023-02-28 20:56:31 +08:00
|
|
|
+ if (!fw) {
|
2021-11-26 14:10:50 +08:00
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
2023-02-28 20:56:31 +08:00
|
|
|
mask = make_delete_mask(matches, target, sizeof(*fw));
|
2021-11-26 14:10:50 +08:00
|
|
|
for (i = 0; i < nsaddrs; i++) {
|
|
|
|
|
fw->ip.src.s_addr = saddrs[i].s_addr;
|
2023-02-28 20:56:31 +08:00
|
|
|
@@ -330,6 +346,10 @@ check_entry(const xt_chainlabel chain, struct ipt_entry *fw,
|
2021-11-26 14:10:50 +08:00
|
|
|
int ret = 1;
|
|
|
|
|
unsigned char *mask;
|
|
|
|
|
|
2023-02-28 20:56:31 +08:00
|
|
|
+ if (!fw) {
|
2021-11-26 14:10:50 +08:00
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
2023-02-28 20:56:31 +08:00
|
|
|
mask = make_delete_mask(matches, target, sizeof(*fw));
|
2021-11-26 14:10:50 +08:00
|
|
|
for (i = 0; i < nsaddrs; i++) {
|
|
|
|
|
fw->ip.src.s_addr = saddrs[i].s_addr;
|
|
|
|
|
--
|
2023-02-28 20:56:31 +08:00
|
|
|
2.23.0
|
2021-11-26 14:10:50 +08:00
|
|
|
|