On Tue, Jun 14, 2022 at 03:06:21PM +0200, Roberto Sassu wrote:
- if (child_pid == 0) {
snprintf(path, sizeof(path), "%s/signing_key.pem", tmp_dir);
return execlp("./sign-file", "./sign-file", "sha256",
path, path, signed_file_template, NULL);
Please use sign_only option, so it saves the signature and doesn't do 'struct module_signature' append. Parsing of that is unnecessary for the purpose of the helper. Checking MODULE_SIG_STRING is unnecessary, etc, etc. Long term we won't be following mod sig approach anyway. bpf maps and progs will have a different format.
- }
- waitpid(child_pid, &child_status, 0);
- ret = WEXITSTATUS(child_status);
- if (ret)
goto out;
- ret = stat(signed_file_template, &st);
- if (ret == -1) {
ret = -errno;
goto out;
- }
- if (st.st_size > sizeof(data_item->payload) - sizeof(u32)) {
ret = -EINVAL;
goto out;
- }
- *(u32 *)data_item->payload = __cpu_to_be32(st.st_size);
- fd = open(signed_file_template, O_RDONLY);
- if (fd == -1) {
ret = -errno;
goto out;
- }
- ret = read(fd, data_item->payload + sizeof(u32), st.st_size);
- close(fd);
- if (ret != st.st_size) {
ret = -EIO;
goto out;
- }
- ret = 0;
+out:
- unlink(signed_file_template);
- return ret;
+}
+void test_verify_pkcs7_sig(void) +{
- char tmp_dir_template[] = "/tmp/verify_sigXXXXXX";
- char *tmp_dir;
- char *buf = NULL;
- struct test_verify_pkcs7_sig *skel = NULL;
- struct bpf_map *map;
- struct data data;
- u32 saved_len;
- int ret, zero = 0;
- LIBBPF_OPTS(bpf_object_open_opts, opts);
- /* Trigger creation of session keyring. */
- syscall(__NR_request_key, "keyring", "_uid.0", NULL,
KEY_SPEC_SESSION_KEYRING);
My understanding that user space can receive a specific id here. It should pass it to bpf prog via global variable and prog should use that id instead of max_ulong hack.