return sizeof(*mvar);
}
+static bool check_buffer_size(uefi_vars_state *uv, uint64_t length)
+{
+ /* uefi_vars_cmd_mm() checks that */
+ g_assert(uv->buf_size >= sizeof(mm_header));
+
+ if (uv->buf_size - sizeof(mm_header) < length) {
+ return false;
+ }
+ return true;
+}
+
static size_t uefi_vars_mm_get_variable(uefi_vars_state *uv, mm_header *mhdr,
mm_variable *mvar, void *func)
{
if (uadd64_overflow(length, va->data_size, &length)) {
return uefi_vars_mm_error(mhdr, mvar, EFI_BAD_BUFFER_SIZE);
}
- if (uv->buf_size < length) {
+ if (!check_buffer_size(uv, length)) {
return uefi_vars_mm_error(mhdr, mvar, EFI_BAD_BUFFER_SIZE);
}
}
length = sizeof(*mvar) + sizeof(*nv) + var->name_size;
- if (uv->buf_size < length) {
+ if (!check_buffer_size(uv, length)) {
return uefi_vars_mm_error(mhdr, mvar, EFI_BAD_BUFFER_SIZE);
}
uint64_t length;
length = sizeof(*mvar) + sizeof(*vi);
- if (uv->buf_size < length) {
+ if (!check_buffer_size(uv, length)) {
return uefi_vars_mm_error(mhdr, mvar, EFI_BAD_BUFFER_SIZE);
}
uint64_t length;
length = sizeof(*mvar) + sizeof(*ps);
- if (uv->buf_size < length) {
+ if (!check_buffer_size(uv, length)) {
return uefi_vars_mm_error(mhdr, mvar, EFI_BAD_BUFFER_SIZE);
}