浏览代码

[image] Use image_asn1() to extract data from CMS signature images

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 7 年前
父节点
当前提交
829fedafcb
共有 2 个文件被更改,包括 11 次插入12 次删除
  1. 1
    0
      src/hci/commands/image_trust_cmd.c
  2. 10
    12
      src/usr/imgtrust.c

+ 1
- 0
src/hci/commands/image_trust_cmd.c 查看文件

181
 REQUIRE_OBJECT ( md5 );
181
 REQUIRE_OBJECT ( md5 );
182
 REQUIRE_OBJECT ( sha1 );
182
 REQUIRE_OBJECT ( sha1 );
183
 REQUIRE_OBJECT ( sha256 );
183
 REQUIRE_OBJECT ( sha256 );
184
+REQUIRE_OBJECT ( der );

+ 10
- 12
src/usr/imgtrust.c 查看文件

50
  */
50
  */
51
 int imgverify ( struct image *image, struct image *signature,
51
 int imgverify ( struct image *image, struct image *signature,
52
 		const char *name ) {
52
 		const char *name ) {
53
-	size_t len;
54
-	void *data;
53
+	struct asn1_cursor *data;
55
 	struct cms_signature *sig;
54
 	struct cms_signature *sig;
56
 	struct cms_signer_info *info;
55
 	struct cms_signer_info *info;
57
 	time_t now;
56
 	time_t now;
57
+	int next;
58
 	int rc;
58
 	int rc;
59
 
59
 
60
 	/* Mark image as untrusted */
60
 	/* Mark image as untrusted */
61
 	image_untrust ( image );
61
 	image_untrust ( image );
62
 
62
 
63
-	/* Copy signature to internal memory */
64
-	len = signature->len;
65
-	data = malloc ( len );
66
-	if ( ! data ) {
67
-		rc = -ENOMEM;
68
-		goto err_alloc;
63
+	/* Get raw signature data */
64
+	next = image_asn1 ( signature, 0, &data );
65
+	if ( next < 0 ) {
66
+		rc = next;
67
+		goto err_asn1;
69
 	}
68
 	}
70
-	copy_from_user ( data, signature->data, 0, len );
71
 
69
 
72
 	/* Parse signature */
70
 	/* Parse signature */
73
-	if ( ( rc = cms_signature ( data, len, &sig ) ) != 0 )
71
+	if ( ( rc = cms_signature ( data->data, data->len, &sig ) ) != 0 )
74
 		goto err_parse;
72
 		goto err_parse;
75
 
73
 
76
-	/* Free internal copy of signature */
74
+	/* Free raw signature data */
77
 	free ( data );
75
 	free ( data );
78
 	data = NULL;
76
 	data = NULL;
79
 
77
 
107
 	cms_put ( sig );
105
 	cms_put ( sig );
108
  err_parse:
106
  err_parse:
109
 	free ( data );
107
 	free ( data );
110
- err_alloc:
108
+ err_asn1:
111
 	syslog ( LOG_ERR, "Image \"%s\" signature bad: %s\n",
109
 	syslog ( LOG_ERR, "Image \"%s\" signature bad: %s\n",
112
 		 image->name, strerror ( rc ) );
110
 		 image->name, strerror ( rc ) );
113
 	return rc;
111
 	return rc;

正在加载...
取消
保存