[PATCH v2] ipcpd: Add validity checks for eth-dix

  • From: Dimitri Staessens <dimitri.staessens@xxxxxxxx>
  • To: ouroboros@xxxxxxxxxxxxx
  • Date: Sun, 11 Mar 2018 10:30:30 +0100

This will check if the Ethertype value is a valid Ethertype in the irm
tool and the eth-dix IPCPd.

Signed-off-by: Dimitri Staessens <dimitri.staessens@xxxxxxxx>
---
 src/ipcpd/eth/eth.c                | 4 ++++
 src/tools/irm/irm_ipcp_bootstrap.c | 8 +++++++-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/ipcpd/eth/eth.c b/src/ipcpd/eth/eth.c
index d17f462..57f30a0 100644
--- a/src/ipcpd/eth/eth.c
+++ b/src/ipcpd/eth/eth.c
@@ -1106,6 +1106,10 @@ static int eth_ipcp_bootstrap(const struct ipcp_config * 
conf)
         memcpy(ifr.ifr_name, conf->dev, strlen(conf->dev));
 
 #ifdef BUILD_ETH_DIX
+        if (conf->ethertype < 0x0600 || conf->ethertype == 0xFFFF) {
+                log_err("Invalid Ethertype.");
+                return -1;
+        }
         eth_data.ethertype = htons(conf->ethertype);
 #endif
 
diff --git a/src/tools/irm/irm_ipcp_bootstrap.c 
b/src/tools/irm/irm_ipcp_bootstrap.c
index 9a0a30e..4eeedbd 100644
--- a/src/tools/irm/irm_ipcp_bootstrap.c
+++ b/src/tools/irm/irm_ipcp_bootstrap.c
@@ -182,11 +182,17 @@ int do_bootstrap_ipcp(int     argc,
                 } else if (matches(*argv, "device") == 0) {
                         dev = *(argv + 1);
                 } else if (matches(*argv, "ethertype") == 0) {
-                        /* NOTE: We might do some checks on this. */
+                        /* NOTE: We might do some more checks on strtol. */
                         if (matches(*(argv + 1), "0x") == 0)
                                 ethertype = strtol(*(argv + 1), NULL, 0);
                         else
                                 ethertype = strtol(*(argv + 1), NULL, 16);
+                        if (ethertype < 0x0600 || ethertype == 0xFFFF) {
+                                printf("Invalid Ethertype: \"%s\".\n"
+                                       "Recommended range: 0xA000-0xEFFF.\n",
+                                       *(argv + 1));
+                                return -1;
+                        }
                 } else if (matches(*argv, "addr") == 0) {
                         addr_size = atoi(*(argv + 1));
                 } else if (matches(*argv, "eid") == 0) {
-- 
2.16.2


Other related posts: