]> xenbits.xensource.com Git - libvirt.git/commitdiff
storage: Properly terminate secrets
authorMichal Privoznik <mprivozn@redhat.com>
Mon, 13 Aug 2018 08:35:37 +0000 (10:35 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 15 Aug 2018 15:11:16 +0000 (17:11 +0200)
The virSecretGetSecretString() helper looks up a secret for given
pool and returns its value in @secret_value and its length in
@secret_value_size. However, the trailing '\0' is not included in
either of the variables. This is because usually the value of the
secret is passed to some encoder (usually base64 encoder) where
the trailing zero must not be accounted for.

However, in two places we actually want the string as we don't
process it any further.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/storage/storage_backend_iscsi.c
src/storage/storage_backend_iscsi_direct.c

index 6242cd0fac26b2b4fab6d4b0c9c64a8685b5cea1..55fe47f5e107200e59ac9980b60fe3a17f93e649 100644 (file)
@@ -303,6 +303,11 @@ virStorageBackendISCSISetAuth(const char *portal,
                                  &secret_value, &secret_size) < 0)
         goto cleanup;
 
+    if (VIR_REALLOC_N(secret_value, secret_size + 1) < 0)
+        goto cleanup;
+
+    secret_value[secret_size] = '\0';
+
     if (virISCSINodeUpdate(portal,
                            source->devices[0].path,
                            "node.session.auth.authmethod",
index 1624066e9c06b85b427436ed36f1522e6df5167f..0d7d6ba9c36e83727891c6aff9df5017af61221f 100644 (file)
@@ -115,6 +115,11 @@ virStorageBackendISCSIDirectSetAuth(struct iscsi_context *iscsi,
                                  &secret_value, &secret_size) < 0)
         goto cleanup;
 
+    if (VIR_REALLOC_N(secret_value, secret_size + 1) < 0)
+        goto cleanup;
+
+    secret_value[secret_size] = '\0';
+
     if (iscsi_set_initiator_username_pwd(iscsi,
                                          authdef->username,
                                          (const char *)secret_value) < 0) {