Lines Matching +full:data +full:- +full:size
2 * SPDX-License-Identifier: GPL-2.0-or-later
4 * uefi vars device - parse and generate efi signature databases
8 #include "qemu/error-report.h"
11 #include "hw/uefi/var-service.h"
18 void *data, uint64_t size) in uefi_vars_siglist_add_x509() argument
22 QTAILQ_FOREACH(c, &siglist->x509, next) { in uefi_vars_siglist_add_x509()
23 if (c->size != size) { in uefi_vars_siglist_add_x509()
26 if (memcmp(c->data, data, size) != 0) { in uefi_vars_siglist_add_x509()
32 c = g_malloc(sizeof(*c) + size); in uefi_vars_siglist_add_x509()
33 c->owner = *owner; in uefi_vars_siglist_add_x509()
34 c->size = size; in uefi_vars_siglist_add_x509()
35 memcpy(c->data, data, size); in uefi_vars_siglist_add_x509()
36 QTAILQ_INSERT_TAIL(&siglist->x509, c, next); in uefi_vars_siglist_add_x509()
44 void *data) in uefi_vars_siglist_add_sha256() argument
48 QTAILQ_FOREACH(h, &siglist->sha256, next) { in uefi_vars_siglist_add_sha256()
49 if (memcmp(h->data, data, 32) != 0) { in uefi_vars_siglist_add_sha256()
56 h->owner = *owner; in uefi_vars_siglist_add_sha256()
57 memcpy(h->data, data, 32); in uefi_vars_siglist_add_sha256()
58 QTAILQ_INSERT_TAIL(&siglist->sha256, h, next); in uefi_vars_siglist_add_sha256()
64 QTAILQ_INIT(&siglist->x509); in uefi_vars_siglist_init()
65 QTAILQ_INIT(&siglist->sha256); in uefi_vars_siglist_init()
73 QTAILQ_FOREACH_SAFE(c, &siglist->x509, next, cs) { in uefi_vars_siglist_free()
74 QTAILQ_REMOVE(&siglist->x509, c, next); in uefi_vars_siglist_free()
77 QTAILQ_FOREACH_SAFE(h, &siglist->sha256, next, hs) { in uefi_vars_siglist_free()
78 QTAILQ_REMOVE(&siglist->sha256, h, next); in uefi_vars_siglist_free()
87 void *data, uint64_t size) in uefi_vars_siglist_parse() argument
92 while (size) { in uefi_vars_siglist_parse()
93 if (size < sizeof(*efilist)) { in uefi_vars_siglist_parse()
96 efilist = data; in uefi_vars_siglist_parse()
97 if (size < efilist->siglist_size) { in uefi_vars_siglist_parse()
101 if (uadd64_overflow(sizeof(*efilist), efilist->header_size, &start)) { in uefi_vars_siglist_parse()
104 if (efilist->sig_size <= sizeof(QemuUUID)) { in uefi_vars_siglist_parse()
108 if (qemu_uuid_is_equal(&efilist->guid_type, &EfiCertX509Guid)) { in uefi_vars_siglist_parse()
109 if (start + efilist->sig_size != efilist->siglist_size) { in uefi_vars_siglist_parse()
113 (QemuUUID *)(data + start), in uefi_vars_siglist_parse()
114 data + start + sizeof(QemuUUID), in uefi_vars_siglist_parse()
115 efilist->sig_size - sizeof(QemuUUID)); in uefi_vars_siglist_parse()
117 } else if (qemu_uuid_is_equal(&efilist->guid_type, &EfiCertSha256Guid)) { in uefi_vars_siglist_parse()
118 if (efilist->sig_size != sizeof(QemuUUID) + 32) { in uefi_vars_siglist_parse()
121 if (start + efilist->sig_size > efilist->siglist_size) { in uefi_vars_siglist_parse()
124 while (start <= efilist->siglist_size - efilist->sig_size) { in uefi_vars_siglist_parse()
126 (QemuUUID *)(data + start), in uefi_vars_siglist_parse()
127 data + start + sizeof(QemuUUID)); in uefi_vars_siglist_parse()
128 start += efilist->sig_size; in uefi_vars_siglist_parse()
132 QemuUUID be = qemu_uuid_bswap(efilist->guid_type); in uefi_vars_siglist_parse()
138 data += efilist->siglist_size; in uefi_vars_siglist_parse()
139 size -= efilist->siglist_size; in uefi_vars_siglist_parse()
147 uint64_t size = 0; in uefi_vars_siglist_blob_size() local
149 QTAILQ_FOREACH(c, &siglist->x509, next) { in uefi_vars_siglist_blob_size()
150 size += sizeof(efi_siglist) + sizeof(QemuUUID) + c->size; in uefi_vars_siglist_blob_size()
153 if (!QTAILQ_EMPTY(&siglist->sha256)) { in uefi_vars_siglist_blob_size()
154 size += sizeof(efi_siglist); in uefi_vars_siglist_blob_size()
155 QTAILQ_FOREACH(h, &siglist->sha256, next) { in uefi_vars_siglist_blob_size()
156 size += sizeof(QemuUUID) + 32; in uefi_vars_siglist_blob_size()
160 return size; in uefi_vars_siglist_blob_size()
167 void *data, uint64_t size) in uefi_vars_siglist_blob_generate() argument
175 QTAILQ_FOREACH(c, &siglist->x509, next) { in uefi_vars_siglist_blob_generate()
176 efilist = data + pos; in uefi_vars_siglist_blob_generate()
177 efilist->guid_type = EfiCertX509Guid; in uefi_vars_siglist_blob_generate()
178 efilist->sig_size = sizeof(QemuUUID) + c->size; in uefi_vars_siglist_blob_generate()
179 efilist->header_size = 0; in uefi_vars_siglist_blob_generate()
182 memcpy(data + start, in uefi_vars_siglist_blob_generate()
183 &c->owner, sizeof(QemuUUID)); in uefi_vars_siglist_blob_generate()
184 memcpy(data + start + sizeof(QemuUUID), in uefi_vars_siglist_blob_generate()
185 c->data, c->size); in uefi_vars_siglist_blob_generate()
187 efilist->siglist_size = sizeof(efi_siglist) + efilist->sig_size; in uefi_vars_siglist_blob_generate()
188 pos += efilist->siglist_size; in uefi_vars_siglist_blob_generate()
191 if (!QTAILQ_EMPTY(&siglist->sha256)) { in uefi_vars_siglist_blob_generate()
192 efilist = data + pos; in uefi_vars_siglist_blob_generate()
193 efilist->guid_type = EfiCertSha256Guid; in uefi_vars_siglist_blob_generate()
194 efilist->sig_size = sizeof(QemuUUID) + 32; in uefi_vars_siglist_blob_generate()
195 efilist->header_size = 0; in uefi_vars_siglist_blob_generate()
199 QTAILQ_FOREACH(h, &siglist->sha256, next) { in uefi_vars_siglist_blob_generate()
200 memcpy(data + start + efilist->sig_size * i, in uefi_vars_siglist_blob_generate()
201 &h->owner, sizeof(QemuUUID)); in uefi_vars_siglist_blob_generate()
202 memcpy(data + start + efilist->sig_size * i + sizeof(QemuUUID), in uefi_vars_siglist_blob_generate()
203 h->data, 32); in uefi_vars_siglist_blob_generate()
207 efilist->siglist_size = sizeof(efi_siglist) + efilist->sig_size * i; in uefi_vars_siglist_blob_generate()
208 pos += efilist->siglist_size; in uefi_vars_siglist_blob_generate()
211 assert(pos == size); in uefi_vars_siglist_blob_generate()