113 lines
3.5 KiB
Diff
113 lines
3.5 KiB
Diff
From 7930678ce9b0913ed355a6294f842d3e473f810d Mon Sep 17 00:00:00 2001
|
|
From: liujian <liujianliu.liu@huawei.com>
|
|
Date: Mon, 31 May 2021 22:43:51 +0800
|
|
Subject: [PATCH] bash-4.2-coverity
|
|
|
|
---
|
|
execute_cmd.c | 27 ++++++++++++++-------------
|
|
1 file changed, 14 insertions(+), 13 deletions(-)
|
|
|
|
diff --git a/execute_cmd.c b/execute_cmd.c
|
|
index c78881e..d59a1fa 100644
|
|
--- a/execute_cmd.c
|
|
+++ b/execute_cmd.c
|
|
@@ -6045,7 +6045,7 @@ shell_execve (command, args, env)
|
|
Elf32_Ehdr ehdr;
|
|
Elf32_Phdr *phdr;
|
|
Elf32_Shdr *shdr;
|
|
- int nphdr, nshdr;
|
|
+ Elf32_Half nphdr, nshdr;
|
|
|
|
/* We have to copy the data since the sample buffer
|
|
might not be aligned correctly to be accessed as
|
|
@@ -6053,12 +6053,12 @@ shell_execve (command, args, env)
|
|
memcpy (&ehdr, sample, sizeof (Elf32_Ehdr));
|
|
|
|
nshdr = ehdr.e_shnum;
|
|
- shdr = (Elf32_Shdr *) malloc (nshdr * ehdr.e_shentsize);
|
|
+ shdr = (Elf32_Shdr *) malloc ((size_t)nshdr * (size_t)ehdr.e_shentsize);
|
|
|
|
if (shdr != NULL)
|
|
{
|
|
#ifdef HAVE_PREAD
|
|
- sample_len = pread (fd, shdr, nshdr * ehdr.e_shentsize,
|
|
+ sample_len = pread (fd, shdr, (size_t)nshdr * (size_t)ehdr.e_shentsize,
|
|
ehdr.e_shoff);
|
|
#else
|
|
if (lseek (fd, ehdr.e_shoff, SEEK_SET) != -1)
|
|
@@ -6100,11 +6100,11 @@ shell_execve (command, args, env)
|
|
}
|
|
|
|
nphdr = ehdr.e_phnum;
|
|
- phdr = (Elf32_Phdr *) malloc (nphdr * ehdr.e_phentsize);
|
|
+ phdr = (Elf32_Phdr *) malloc ((size_t)nphdr * (size_t)ehdr.e_phentsize);
|
|
if (phdr != NULL)
|
|
{
|
|
#ifdef HAVE_PREAD
|
|
- sample_len = pread (fd, phdr, nphdr * ehdr.e_phentsize,
|
|
+ sample_len = pread (fd, phdr, (size_t)nphdr * (size_t)ehdr.e_phentsize,
|
|
ehdr.e_phoff);
|
|
#else
|
|
if (lseek (fd, ehdr.e_phoff, SEEK_SET) != -1)
|
|
@@ -6129,7 +6129,7 @@ shell_execve (command, args, env)
|
|
Elf64_Ehdr ehdr;
|
|
Elf64_Phdr *phdr;
|
|
Elf64_Shdr *shdr;
|
|
- int nphdr, nshdr;
|
|
+ Elf32_Half nphdr, nshdr;
|
|
|
|
/* We have to copy the data since the sample buffer
|
|
might not be aligned correctly to be accessed as
|
|
@@ -6137,11 +6137,11 @@ shell_execve (command, args, env)
|
|
memcpy (&ehdr, sample, sizeof (Elf64_Ehdr));
|
|
|
|
nshdr = ehdr.e_shnum;
|
|
- shdr = (Elf64_Shdr *) malloc (nshdr * ehdr.e_shentsize);
|
|
+ shdr = (Elf64_Shdr *) malloc ((size_t)nshdr * (size_t)ehdr.e_shentsize);
|
|
if (shdr != NULL)
|
|
{
|
|
#ifdef HAVE_PREAD
|
|
- sample_len = pread (fd, shdr, nshdr * ehdr.e_shentsize,
|
|
+ sample_len = pread (fd, shdr, (size_t)nshdr * (size_t)ehdr.e_shentsize,
|
|
ehdr.e_shoff);
|
|
#else
|
|
if (lseek (fd, ehdr.e_shoff, SEEK_SET) != -1)
|
|
@@ -6183,11 +6183,11 @@ shell_execve (command, args, env)
|
|
}
|
|
|
|
nphdr = ehdr.e_phnum;
|
|
- phdr = (Elf64_Phdr *) malloc (nphdr * ehdr.e_phentsize);
|
|
+ phdr = (Elf64_Phdr *) malloc ((size_t)nphdr * (size_t)ehdr.e_phentsize);
|
|
if (phdr != NULL)
|
|
{
|
|
#ifdef HAVE_PREAD
|
|
- sample_len = pread (fd, phdr, nphdr * ehdr.e_phentsize,
|
|
+ sample_len = pread (fd, phdr, (size_t)nphdr * (size_t)ehdr.e_phentsize,
|
|
ehdr.e_phoff);
|
|
#else
|
|
if (lseek (fd, ehdr.e_phoff, SEEK_SET) != -1)
|
|
@@ -6209,8 +6209,8 @@ shell_execve (command, args, env)
|
|
|
|
if (offset != -1)
|
|
{
|
|
- size_t maxlen = 0;
|
|
- size_t actlen = 0;
|
|
+ ssize_t maxlen = 0;
|
|
+ ssize_t actlen = 0;
|
|
char *interp = NULL;
|
|
|
|
do
|
|
@@ -6259,7 +6259,8 @@ shell_execve (command, args, env)
|
|
}
|
|
#endif
|
|
#if defined (HAVE_HASH_BANG_EXEC) || defined (HAVE_ELF_H)
|
|
- close (fd);
|
|
+ if (fd >= 0)
|
|
+ close (fd);
|
|
#endif
|
|
|
|
errno = i;
|
|
--
|
|
2.33.0
|
|
|