From 86e67b7bbb578337d9b2cff3ff1165b2ad51627d Mon Sep 17 00:00:00 2001 From: Hari Date: Thu, 23 Jul 2015 15:34:03 +0530 Subject: [PATCH] Check that the address sent via thrift is Ipv4. In case an IPv6 address is sent in the ip_address field of AddPort thrift, it is accepted and later when to_v4() is invoked, bad_cast exception is thrown. Change-Id: I0a8e8991c6891ab61fd00c9eaa0e21f3e3ffaff5 partial-bug: 1476613 --- src/vnsw/agent/openstack/instance_service_server.cc | 3 ++- .../agent/openstack/test/test_instance_service.cc | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/vnsw/agent/openstack/instance_service_server.cc b/src/vnsw/agent/openstack/instance_service_server.cc index 6f716e5987d..3b5cbc77755 100644 --- a/src/vnsw/agent/openstack/instance_service_server.cc +++ b/src/vnsw/agent/openstack/instance_service_server.cc @@ -66,10 +66,11 @@ InstanceServiceAsyncHandler::AddPort(const PortList& port_list) { boost::system::error_code ec; IpAddress ip = IpAddress::from_string(port.ip_address, ec); bool v4_valid = (ec.value() == 0); - if (v4_valid == false) { + if (v4_valid == false || ip.is_v4() == false) { CFG_TRACE(IntfInfo, "IPv4 address is not correct, " + port.ip_address); v4_valid = false; + ip = IpAddress(); } bool v6_valid = false; diff --git a/src/vnsw/agent/openstack/test/test_instance_service.cc b/src/vnsw/agent/openstack/test/test_instance_service.cc index ed18abea318..34c196c38af 100644 --- a/src/vnsw/agent/openstack/test/test_instance_service.cc +++ b/src/vnsw/agent/openstack/test/test_instance_service.cc @@ -290,6 +290,17 @@ TEST_F(InstanceServiceTest, AddPortWrongIP) { TASK_UTIL_EXPECT_EQ(0, cfg_table_->Size()); } +// Wrong IP address : send IPv6 address +TEST_F(InstanceServiceTest, AddPortWrongIPIsv6) { + Port port; + InitPortInfo(port, 2, 2, 2, PortTypes::NovaVMPort); + port.ip_address = "30:32::03"; + AddPort(port); + client->WaitForIdle(); + + TASK_UTIL_EXPECT_EQ(0, cfg_table_->Size()); +} + // Null uuids, ports do get created TEST_F(InstanceServiceTest, NullUUIDTest) { Port port;