]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
libkmod: modinfo: implement signature output
authorYauheni Kaliuta <yauheni.kaliuta@redhat.com>
Tue, 11 Apr 2017 12:15:03 +0000 (15:15 +0300)
committerLucas De Marchi <lucas.demarchi@intel.com>
Tue, 11 Apr 2017 16:04:28 +0000 (09:04 -0700)
Signature was ignored from the modinfo. Implement its parsing
from the module data and add its output to the modinfo utility.

Signed-off-by: Yauheni Kaliuta <yauheni.kaliuta@redhat.com>
libkmod/libkmod-internal.h
libkmod/libkmod-module.c
libkmod/libkmod-signature.c

index 4d9db6bc78457d7e321116614cc7e7b78154f931..346579c71aabc731adaa63c6d4b4edd0efc092f0 100644 (file)
@@ -186,5 +186,7 @@ struct kmod_signature_info {
        const char *key_id;
        size_t key_id_len;
        const char *algo, *hash_algo, *id_type;
+       const char *sig;
+       size_t sig_len;
 };
 bool kmod_module_signature_info(const struct kmod_file *file, struct kmod_signature_info *sig_info) _must_check_ __attribute__((nonnull(1, 2)));
index 9e155f08027734dc7828da634122e6f5c56ade64..0a3ef11c860fb180d4188257c6965d7c2a8ce259 100644 (file)
@@ -2344,6 +2344,15 @@ KMOD_EXPORT int kmod_module_get_info(const struct kmod_module *mod, struct kmod_
                 * Omit sig_info.algo for now, as these
                 * are currently constant.
                 */
+               n = kmod_module_info_append_hex(list, "signature",
+                                               strlen("signature"),
+                                               sig_info.sig,
+                                               sig_info.sig_len);
+
+               if (n == NULL)
+                       goto list_error;
+               count++;
+
        }
        ret = count;
 
index ef5fe6e7bb7f456ffbbab6508d696f53d751374d..1f3e26dea2038a4fb7f2635d3ba9590240c4f6d6 100644 (file)
@@ -134,7 +134,11 @@ bool kmod_module_signature_info(const struct kmod_file *file, struct kmod_signat
            size < (int64_t)(modsig->signer_len + modsig->key_id_len + sig_len))
                return false;
 
-       size -= modsig->key_id_len + sig_len;
+       size -= sig_len;
+       sig_info->sig = mem + size;
+       sig_info->sig_len = sig_len;
+
+       size -= modsig->key_id_len;
        sig_info->key_id = mem + size;
        sig_info->key_id_len = modsig->key_id_len;