Skip to content

Commit 2268209

Browse files
committed
Fix nullptr dereference in init_k8s_ssl()
1 parent 21335a1 commit 2268209

File tree

2 files changed

+17
-16
lines changed

2 files changed

+17
-16
lines changed

userspace/libsinsp/sinsp.cpp

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1872,46 +1872,47 @@ void sinsp::init_mesos_client(string* api_server, bool verbose)
18721872
}
18731873
}
18741874

1875-
void sinsp::init_k8s_ssl(const string &ssl_cert)
1875+
void sinsp::init_k8s_ssl(const string *ssl_cert)
18761876
{
18771877
#ifdef HAS_CAPTURE
1878-
if(!ssl_cert.empty() && (!m_k8s_ssl || ! m_k8s_bt))
1878+
if(ssl_cert != nullptr && !ssl_cert->empty()
1879+
&& (!m_k8s_ssl || ! m_k8s_bt))
18791880
{
18801881
std::string cert;
18811882
std::string key;
18821883
std::string key_pwd;
18831884
std::string ca_cert;
18841885

18851886
// -K <bt_file> | <cert_file>:<key_file[#password]>[:<ca_cert_file>]
1886-
std::string::size_type pos = ssl_cert.find(':');
1887+
std::string::size_type pos = ssl_cert->find(':');
18871888
if(pos == std::string::npos) // ca_cert-only is obsoleted, single entry is now bearer token
18881889
{
1889-
m_k8s_bt = std::make_shared<sinsp_bearer_token>(ssl_cert);
1890+
m_k8s_bt = std::make_shared<sinsp_bearer_token>(*ssl_cert);
18901891
}
18911892
else
18921893
{
1893-
cert = ssl_cert.substr(0, pos);
1894+
cert = ssl_cert->substr(0, pos);
18941895
if(cert.empty())
18951896
{
1896-
throw sinsp_exception(string("Invalid K8S SSL entry: ") + ssl_cert);
1897+
throw sinsp_exception(string("Invalid K8S SSL entry: ") + *ssl_cert);
18971898
}
18981899

1899-
// pos < ssl_cert.length() so it's safe to take
1900+
// pos < ssl_cert->length() so it's safe to take
19001901
// substr() from head, but it may be empty
19011902
std::string::size_type head = pos + 1;
1902-
pos = ssl_cert.find(':', head);
1903+
pos = ssl_cert->find(':', head);
19031904
if (pos == std::string::npos)
19041905
{
1905-
key = ssl_cert.substr(head);
1906+
key = ssl_cert->substr(head);
19061907
}
19071908
else
19081909
{
1909-
key = ssl_cert.substr(head, pos - head);
1910-
ca_cert = ssl_cert.substr(pos + 1);
1910+
key = ssl_cert->substr(head, pos - head);
1911+
ca_cert = ssl_cert->substr(pos + 1);
19111912
}
19121913
if(key.empty())
19131914
{
1914-
throw sinsp_exception(string("Invalid K8S SSL entry: ") + ssl_cert);
1915+
throw sinsp_exception(string("Invalid K8S SSL entry: ") + *ssl_cert);
19151916
}
19161917

19171918
// Parse the password if it exists
@@ -1967,7 +1968,7 @@ void sinsp::init_k8s_client(string* api_server, string* ssl_cert, bool verbose)
19671968
delete m_k8s_client;
19681969
m_k8s_client = nullptr;
19691970
}
1970-
init_k8s_ssl(*ssl_cert);
1971+
init_k8s_ssl(ssl_cert);
19711972
make_k8s_client();
19721973
}
19731974
}
@@ -2021,7 +2022,7 @@ void sinsp::k8s_discover_ext()
20212022
{
20222023
m_k8s_collector = std::make_shared<k8s_handler::collector_t>();
20232024
}
2024-
if(uri(*m_k8s_api_server).is_secure()) { init_k8s_ssl(*m_k8s_api_cert); }
2025+
if(uri(*m_k8s_api_server).is_secure()) { init_k8s_ssl(m_k8s_api_cert); }
20252026
m_k8s_ext_handler.reset(new k8s_api_handler(m_k8s_collector, *m_k8s_api_server,
20262027
"/apis/extensions/v1beta1", "[.resources[].name]",
20272028
"1.1", m_k8s_ssl, m_k8s_bt, true));
@@ -2094,7 +2095,7 @@ void sinsp::update_k8s_state()
20942095
}
20952096
if(uri(*m_k8s_api_server).is_secure() && (!m_k8s_ssl || ! m_k8s_bt))
20962097
{
2097-
init_k8s_ssl(*m_k8s_api_cert);
2098+
init_k8s_ssl(m_k8s_api_cert);
20982099
}
20992100
m_k8s_api_handler.reset(new k8s_api_handler(m_k8s_collector, *m_k8s_api_server,
21002101
"/api", ".versions", "1.1",

userspace/libsinsp/sinsp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -747,7 +747,7 @@ class SINSP_PUBLIC sinsp
747747
*/
748748
double get_read_progress();
749749

750-
void init_k8s_ssl(const string &ssl_cert);
750+
void init_k8s_ssl(const string *ssl_cert);
751751
void init_k8s_client(string* api_server, string* ssl_cert, bool verbose = false);
752752
void make_k8s_client();
753753
k8s* get_k8s_client() const { return m_k8s_client; }

0 commit comments

Comments
 (0)