read_virtual_file() will only read up to page size bytes of data
from /sys/firmware/dmi/entries/.../raw so let's use read_full_file_full()
instead to make sure we read all data.
This should be safe since smbios11 data can be considered immutable
during the lifetime of the system.
assert_cc(offsetof(struct dmi_field_header, contents) == 5);
- r = read_virtual_file(
- p,
+ /* We don't use read_virtual_file() because it only reads a single page of bytes from the DMI sysfs
+ * file. Since the SMBIOS data is immutable after boot, it's safe to use read_full_file_full() here. */
+ r = read_full_file_full(
+ AT_FDCWD, p,
+ /* offset = */ UINT64_MAX,
max_size >= SIZE_MAX - offsetof(struct dmi_field_header, contents) ? SIZE_MAX :
sizeof(dmi_field_header) + max_size,
+ /* flags = */ 0,
+ /* bind_name = */ NULL,
(char**) &data, &size);
if (r < 0)
return r;