> On 21 Aug 2025, at 8:38 AM, Gary Lin <g...@suse.com> wrote:
> 
> On Thu, Aug 21, 2025 at 10:34:18AM +0800, Gary Lin wrote:
>> On Tue, Aug 19, 2025 at 06:43:15PM +0530, Sudhakar Kuppusamy wrote:
>>> If secure boot is enabled with static key management mode, the trusted
>>> certificates will be extracted from the GRUB ELF Note and added to db list.
>>> This is introduced by a subsequent patch.
>>> 
>>> If secure boot is enabled with dynamic key management mode, the trusted
>>> certificates and certificate/binary hash will be extracted from the PKS
>>> and added to db list. The distrusted certificates, certificate/binary hash
>>> are read from the PKS and added to dbx list. Both dbx and db lists are 
>>> introduced by
>>> a subsequent patch.
>>> 
>>> Note:-
>>> 
>>> If the certificate or the certificate hash exists in the dbx list, then
>>> do not add that certificate/certificate hash to the db list.
>>> 
>>> Signed-off-by: Sudhakar Kuppusamy <sudha...@linux.ibm.com>
>>> Reviewed-by: Stefan Berger <stef...@linux.ibm.com>
>>> Reviewed-by: Avnish Chouhan <avn...@linux.ibm.com>
>>> ---
>>> grub-core/commands/appendedsig/appendedsig.c | 452 ++++++++++++++++++-
>>> include/grub/crypto.h                        |   1 +
>>> include/grub/efi/pks.h                       | 112 +++++
>>> include/grub/types.h                         |   4 +
>>> 4 files changed, 563 insertions(+), 6 deletions(-)
>>> create mode 100644 include/grub/efi/pks.h
>>> 
> 
> -->8--
>>> +/* Add the certificate/binary hash into the db/dbx list. */
>>> +static grub_err_t
>>> +add_hash (const grub_uint8_t **data, const grub_size_t data_size,
>> Do you intend to make 'data' a const variable in 'add_hash()'? If so, it
>> should be 'grub_uint8_t ** const data'. With 'const grub_uint8_t **',
>> 'data' becomes a pointer to a constant, and it doesn't match the
>> parameter passed in create_dbx_list().
>> 
>>> +          grub_uint8_t ***signature_list, grub_size_t 
>>> **signature_size_list,
>>> +          grub_uint32_t *signature_list_entries)
>>> +{
>>> +  grub_uint8_t **signatures;
>>> +  grub_size_t *signature_size;
>>> +  grub_uint32_t signature_entries = *signature_list_entries;
>>> +
>>> +  if (*data == NULL || data_size == 0)
>>> +    return grub_error (GRUB_ERR_OUT_OF_RANGE, "certificate/binary-hash 
>>> data or size is not available");
>>> +
>>> +  signatures = grub_realloc (*signature_list, sizeof (grub_uint8_t *) * 
>>> (signature_entries + 1));
>>> +  if (signatures == NULL)
>>> +    return grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory");
>>> +
>>> +  signature_size = grub_realloc (*signature_size_list,
>>> +                                 sizeof (grub_size_t) * (signature_entries 
>>> + 1));
>>> +  if (signature_size == NULL)
>>> +    {
>>> +      /*
>>> +       * Allocated memory will be freed by
>>> +       * free_db_list/free_dbx_list.
>>> +       */
>>> +      signatures[signature_entries + 1] = NULL;
>>> +      *signature_list = signatures;
>>> +      *signature_list_entries = signature_entries + 1;
>>> +
>>> +      return grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory");
>>> +    }
>>> +
> 
>>> +  signatures[signature_entries] = (grub_uint8_t *) *data;
>>> +  signature_size[signature_entries] = data_size;
>>> +  signature_entries++;
>>> +  *data = NULL;
> It seems that you want to use the memory from '*data' directly instead of
> allocating a new buffer for the signature entry. It may be fine for some
> local variables in other functions, but 'grub_pks_keystore.db[].data' and
> 'grub_pks_keystore.dbx[].data' are also the candidates of 'data'. By
> setting '*data' to 'NULL', the data pointers of PKS variables were clean
> up after invoking 'add_hash()'. It doesn't look an expected behavior to
> me.
> 
> I'd suggest to declare 'data' as 'grub_uint8_t *' or 'grub_uint8_t *
> const' and allocate a new buffer for signatures[signature_entries].
> This keeps the 'data' pointer valid after invoking 'add_hash()' and
> also prevents the 'address-of-packed-member' error mentioned in the
> previous mail.
> 

Thanks a lot Gary for the review and pointing this out.

Will do it.

Thanks,
Sudhakar

> Cheers,
> 
> Gary Lin
> 
>>> +
>>> +  *signature_list = signatures;
>>> +  *signature_size_list = signature_size;
>>> +  *signature_list_entries = signature_entries;
>>> +
>>> +  return GRUB_ERR_NONE;
>>> +}
>>> +



_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to