mirror of
https://github.com/systemd/systemd
synced 2024-09-06 16:56:43 +00:00
Use read_full_file_full() in read_smbios11_field()
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.
This commit is contained in:
parent
8c399057f4
commit
53ee7e0aa1
|
@ -33,10 +33,15 @@ int read_smbios11_field(unsigned i, size_t max_size, char **ret_data, size_t *re
|
|||
|
||||
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;
|
||||
|
|
Loading…
Reference in a new issue