diff --git a/src/write_rpm_pgp_sig.c b/src/write_rpm_pgp_sig.c index eb2a5f0511e9609c8dbd511c1ae5bcddf91140dc..3f8b9040ce813557646db929529c12b8894157ae 100644 --- a/src/write_rpm_pgp_sig.c +++ b/src/write_rpm_pgp_sig.c @@ -27,7 +27,7 @@ int main(int argc, char *argv[]) u16 algo; int ret, fd; - if (argc != 3) { + if (argc < 3) { printf("Missing argument\n"); return -EINVAL; } @@ -41,6 +41,15 @@ int main(int argc, char *argv[]) if (ret < 0) goto out; + if (argc == 4) { + free(sig); + + ret = read_file_from_path(-1, argv[3], (void **)&sig, + (loff_t *)&sig_len); + if (ret < 0) + goto out; + } + write_ima_xattr(-1, argv[1], issuer, sizeof(uint32_t), sig, sig_len, pgp_algo_mapping[algo]); @@ -55,6 +64,9 @@ int main(int argc, char *argv[]) out: munmap(pgp_sig, pgp_sig_len); free(data); - free(sig); + if (argc == 4) + munmap(sig, sig_len); + else + free(sig); return ret; }