blob: make blob_parse_untrusted more permissive
authorMatthias Schiffer <mschiffer@universe-factory.net>
Sat, 16 May 2020 20:22:10 +0000 (22:22 +0200)
committerMatthias Schiffer <mschiffer@universe-factory.net>
Sun, 24 May 2020 14:54:37 +0000 (16:54 +0200)
Some tools like ucert use concatenations of multiple blobs. Account for
this case by allowing the underlying buffer length to be greater than
the blob length.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
blob.c
tests/cram/inputs/signature.ucert [new file with mode: 0644]
tests/cram/test_blob_parse.t

diff --git a/blob.c b/blob.c
index 528e717615d6313285e3c28c56c9a60a0d7821b1..433becb904f54d4e0b3fb186756f62c71beb0ba5 100644 (file)
--- a/blob.c
+++ b/blob.c
@@ -277,7 +277,7 @@ blob_parse_untrusted(struct blob_attr *attr, size_t attr_len, struct blob_attr *
                return 0;
 
        len = blob_raw_len(attr);
-       if (len != attr_len)
+       if (attr_len < len)
                return 0;
 
        memset(data, 0, sizeof(struct blob_attr *) * max);
diff --git a/tests/cram/inputs/signature.ucert b/tests/cram/inputs/signature.ucert
new file mode 100644 (file)
index 0000000..4a1da75
Binary files /dev/null and b/tests/cram/inputs/signature.ucert differ
index b6cbbaa811b73c80d745891cf83834ed6d49c8a3..5e8b5ff571715f684a20be1dfaa33b6e32cc201c 100644 (file)
@@ -21,6 +21,29 @@ check that blob_parse is producing expected results:
   }
   ---
 
+  $ valgrind --quiet --leak-check=full test-blob-parse $TEST_INPUTS/signature.ucert
+  === CHAIN ELEMENT 01 ===
+  signature:
+  ---
+  untrusted comment: signed by key ca85add129e64bab
+  RWTKha3RKeZLq0Sb8kCH9p/3BcFFud8rJnZiRICyRNhjbbpeZSwO2VhkwGaMd7ujW2/YSvT3O67pB0QguV6czgpP5kLX4AKBaQ4=
+  ---
+  payload:
+  ---
+  "ucert": {
+  \t"certtype": 1, (esc)
+  \t"validfrom": 1588532405, (esc)
+  \t"expiresat": 1620068405, (esc)
+  \t"pubkey": "untrusted comment: Local build key\\nRWTKha3RKeZLq1EaPsqvnXu+FqLMHZIS7nvDgwjpRo69j+th6eihGvQo\\n" (esc)
+  }
+  ---
+  === CHAIN ELEMENT 02 ===
+  signature:
+  ---
+  untrusted comment: signed by key ca85add129e64bab
+  RWTKha3RKeZLq9VW9CIMyumCQ4J0iFPLQYXr/YvUhw0OTrwpSh2XpKaRZQNZCXfO8ooMOCvG2TPor2veDjskHP1R2RGPIHp57wA=
+  ---
+
   $ valgrind --quiet --leak-check=full test-blob-parse $TEST_INPUTS/invalid.ucert
   cannot parse cert invalid.ucert
 
@@ -41,6 +64,29 @@ check that blob_parse is producing expected results:
   }
   ---
 
+  $ test-blob-parse-san $TEST_INPUTS/signature.ucert
+  === CHAIN ELEMENT 01 ===
+  signature:
+  ---
+  untrusted comment: signed by key ca85add129e64bab
+  RWTKha3RKeZLq0Sb8kCH9p/3BcFFud8rJnZiRICyRNhjbbpeZSwO2VhkwGaMd7ujW2/YSvT3O67pB0QguV6czgpP5kLX4AKBaQ4=
+  ---
+  payload:
+  ---
+  "ucert": {
+  \t"certtype": 1, (esc)
+  \t"validfrom": 1588532405, (esc)
+  \t"expiresat": 1620068405, (esc)
+  \t"pubkey": "untrusted comment: Local build key\\nRWTKha3RKeZLq1EaPsqvnXu+FqLMHZIS7nvDgwjpRo69j+th6eihGvQo\\n" (esc)
+  }
+  ---
+  === CHAIN ELEMENT 02 ===
+  signature:
+  ---
+  untrusted comment: signed by key ca85add129e64bab
+  RWTKha3RKeZLq9VW9CIMyumCQ4J0iFPLQYXr/YvUhw0OTrwpSh2XpKaRZQNZCXfO8ooMOCvG2TPor2veDjskHP1R2RGPIHp57wA=
+  ---
+
   $ test-blob-parse-san $TEST_INPUTS/invalid.ucert
   cannot parse cert invalid.ucert