mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-26 09:10:53 +00:00
fs: Use safe math macros to prevent overflows
Replace direct arithmetic operations with macros from include/grub/safemath.h to prevent potential overflow issues when calculating the memory sizes. Signed-off-by: Lidong Chen <lidong.chen@oracle.com> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
1 parent
fbaddcca54
commit
6608163b08
8 files changed
+104
-19
No files matched your search
@@ -24,6 +24,7 @@
|
||||
#include <grub/dl.h>
|
||||
#include <grub/i18n.h>
|
||||
#include <grub/archelp.h>
|
||||
#include <grub/safemath.h>
|
||||
|
||||
GRUB_MOD_LICENSE ("GPLv3+");
|
||||
|
||||
@@ -48,6 +49,7 @@ grub_cpio_find_file (struct grub_archelp_data *data, char **name,
|
||||
struct head hd;
|
||||
grub_size_t namesize;
|
||||
grub_uint32_t modeval;
|
||||
grub_size_t sz;
|
||||
|
||||
data->hofs = data->next_hofs;
|
||||
|
||||
@@ -76,7 +78,10 @@ grub_cpio_find_file (struct grub_archelp_data *data, char **name,
|
||||
|
||||
*mode = modeval;
|
||||
|
||||
*name = grub_malloc (namesize + 1);
|
||||
if (grub_add (namesize, 1, &sz))
|
||||
return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("file name size overflow"));
|
||||
|
||||
*name = grub_malloc (sz);
|
||||
if (*name == NULL)
|
||||
return grub_errno;
|
||||
|
||||
@@ -110,10 +115,17 @@ grub_cpio_get_link_target (struct grub_archelp_data *data)
|
||||
{
|
||||
char *ret;
|
||||
grub_err_t err;
|
||||
grub_size_t sz;
|
||||
|
||||
if (data->size == 0)
|
||||
return grub_strdup ("");
|
||||
ret = grub_malloc (data->size + 1);
|
||||
|
||||
if (grub_add (data->size, 1, &sz))
|
||||
{
|
||||
grub_error (GRUB_ERR_OUT_OF_RANGE, N_("target data size overflow"));
|
||||
return NULL;
|
||||
}
|
||||
ret = grub_malloc (sz);
|
||||
if (!ret)
|
||||
return NULL;
|
||||
|
||||
|
||||
Reference in new issue
Block a user