2
1

0065-kern-partition-Add-sanity-check-after-grub_strtoul-c.patch 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. From d5385ae4e4d0c443e188e43c2b0703b68aaf55a3 Mon Sep 17 00:00:00 2001
  2. From: Lidong Chen <lidong.chen@oracle.com>
  3. Date: Thu, 6 Feb 2025 18:16:56 +0000
  4. Subject: [PATCH] kern/partition: Add sanity check after grub_strtoul() call
  5. The current code incorrectly assumes that both the input and the values
  6. returned by grub_strtoul() are always valid which can lead to potential
  7. errors. This fix ensures proper validation to prevent any unintended issues.
  8. Fixes: CID 473843
  9. Signed-off-by: Lidong Chen <lidong.chen@oracle.com>
  10. Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
  11. Upstream: 8e6e87e7923ca2ae880021cb42a35cc9bb4c8fe2
  12. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
  13. ---
  14. grub-core/kern/partition.c | 12 ++++++++++--
  15. 1 file changed, 10 insertions(+), 2 deletions(-)
  16. diff --git a/grub-core/kern/partition.c b/grub-core/kern/partition.c
  17. index 704512a20..c6a578cf4 100644
  18. --- a/grub-core/kern/partition.c
  19. +++ b/grub-core/kern/partition.c
  20. @@ -125,14 +125,22 @@ grub_partition_probe (struct grub_disk *disk, const char *str)
  21. for (ptr = str; *ptr;)
  22. {
  23. grub_partition_map_t partmap;
  24. - int num;
  25. + unsigned long num;
  26. const char *partname, *partname_end;
  27. partname = ptr;
  28. while (*ptr && grub_isalpha (*ptr))
  29. ptr++;
  30. partname_end = ptr;
  31. - num = grub_strtoul (ptr, &ptr, 0) - 1;
  32. +
  33. + num = grub_strtoul (ptr, &ptr, 0);
  34. + if (*ptr != '\0' || num == 0 || num > GRUB_INT_MAX)
  35. + {
  36. + grub_error (GRUB_ERR_BAD_NUMBER, N_("invalid partition number"));
  37. + return 0;
  38. + }
  39. +
  40. + num -= 1;
  41. curpart = 0;
  42. /* Use the first partition map type found. */
  43. --
  44. 2.50.1