[Skiboot] [PATCH V6 15/21] core/pldm: Find lid attribute from bios tables
Christophe Lombard
clombard at linux.vnet.ibm.com
Thu Apr 13 22:47:26 AEST 2023
Le 12/04/2023 à 17:33, Frederic Barrat a écrit :
>
>
> On 13/09/2022 12:26, Christophe Lombard wrote:
>> This specification defines the data structures and messages for
>> communicating BIOS settings, BIOS attributes, boot configurations, and
>> boot order settings.
>>
>> Use the GetBIOSTable command to get STRING, Attribute and Attribute
>> values
>> tables from the BIOS.
>>
>> The contents of these tables are needed to read/write the desired lid
>> files located on the BMC.
>>
>> Signed-off-by: Christophe Lombard <clombard at linux.vnet.ibm.com>
>> ---
>> core/pldm/pldm-bios-requests.c | 149 +++++++++++++++++++++++++++++++++
>> core/pldm/pldm.h | 2 +
>> 2 files changed, 151 insertions(+)
>>
>> diff --git a/core/pldm/pldm-bios-requests.c
>> b/core/pldm/pldm-bios-requests.c
>> index 05c3c8db..de03776a 100644
>> --- a/core/pldm/pldm-bios-requests.c
>> +++ b/core/pldm/pldm-bios-requests.c
>> @@ -84,6 +84,155 @@ static void bios_init_complete(bool success)
>> bios_ready = true;
>> }
>> +/*
>> + * parse a string, format:
>> + * <ATTR_a>=<lid_id_1>,<ATTR_b>=<lid_id_2>
>> + */
>> +static int find_lid_by_attr_name(char *str, const char *name,
>> + char **lid)
>> +{
>> + const char *pp = "=";
>> + char *attr, *attr_end;
>> + char *p;
>> +
>> + for (p = strtok(str, ","); p != NULL; p = strtok(NULL, ",")) {
>> + /* parse now the following string <ATTR>=<lid_id> */
>> + attr = p;
>> + while (*pp != *p)
>> + p++;
>
>
> We risk an infinite loop in case of a malformed expression. We could
> bound it by the length of p.
>
right, we have to handle this case.
>
>> +
>> + attr_end = p;
>> + *attr_end = '\0';
>> +
>> + if (!strncmp(attr, name, strlen(name)) &&
>> + (strlen(attr) == strlen(name))) {
>> + *lid = strdup(++p);
>> + p += strlen(name) + 1;
>
>
> The above line is useless.
>
correct. Thanks
> Fred
More information about the Skiboot
mailing list