diff mbox series

linux-user: fix Coverity CID 1464101

Message ID 20211121151711.331653-1-laurent@vivier.eu
State New
Headers show
Series linux-user: fix Coverity CID 1464101 | expand

Commit Message

Laurent Vivier Nov. 21, 2021, 3:17 p.m. UTC
target_mmap() can fail and return -1, but we don't check for that and
instead assume it's always valid.

Fixes: db2af69d6ba8 ("linux-user: Add infrastructure for a signal trampoline page")
Cc: richard.henderson@linaro.org
Reported-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
 linux-user/elfload.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

Comments

Richard Henderson Nov. 21, 2021, 3:51 p.m. UTC | #1
On 11/21/21 4:17 PM, Laurent Vivier wrote:
> target_mmap() can fail and return -1, but we don't check for that and
> instead assume it's always valid.
> 
> Fixes: db2af69d6ba8 ("linux-user: Add infrastructure for a signal trampoline page")
> Cc: richard.henderson@linaro.org
> Reported-by: Peter Maydell <peter.maydell@linaro.org>
> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
> ---
>   linux-user/elfload.c | 10 +++++++---
>   1 file changed, 7 insertions(+), 3 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~

> 
> diff --git a/linux-user/elfload.c b/linux-user/elfload.c
> index 5da8c02d0822..767f54c76dc5 100644
> --- a/linux-user/elfload.c
> +++ b/linux-user/elfload.c
> @@ -3254,9 +3254,13 @@ int load_elf_binary(struct linux_binprm *bprm, struct image_info *info)
>        * Otherwise, allocate a private page to hold them.
>        */
>       if (TARGET_ARCH_HAS_SIGTRAMP_PAGE) {
> -        abi_ulong tramp_page = target_mmap(0, TARGET_PAGE_SIZE,
> -                                           PROT_READ | PROT_WRITE,
> -                                           MAP_PRIVATE | MAP_ANON, -1, 0);
> +        abi_long tramp_page = target_mmap(0, TARGET_PAGE_SIZE,
> +                                          PROT_READ | PROT_WRITE,
> +                                          MAP_PRIVATE | MAP_ANON, -1, 0);
> +        if (tramp_page == -1) {
> +            return -errno;
> +        }
> +
>           setup_sigtramp(tramp_page);
>           target_mprotect(tramp_page, TARGET_PAGE_SIZE, PROT_READ | PROT_EXEC);
>       }
>
Laurent Vivier Nov. 22, 2021, 8:16 a.m. UTC | #2
Le 21/11/2021 à 16:17, Laurent Vivier a écrit :
> target_mmap() can fail and return -1, but we don't check for that and
> instead assume it's always valid.
> 
> Fixes: db2af69d6ba8 ("linux-user: Add infrastructure for a signal trampoline page")
> Cc: richard.henderson@linaro.org
> Reported-by: Peter Maydell <peter.maydell@linaro.org>
> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
> ---
>   linux-user/elfload.c | 10 +++++++---
>   1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/linux-user/elfload.c b/linux-user/elfload.c
> index 5da8c02d0822..767f54c76dc5 100644
> --- a/linux-user/elfload.c
> +++ b/linux-user/elfload.c
> @@ -3254,9 +3254,13 @@ int load_elf_binary(struct linux_binprm *bprm, struct image_info *info)
>        * Otherwise, allocate a private page to hold them.
>        */
>       if (TARGET_ARCH_HAS_SIGTRAMP_PAGE) {
> -        abi_ulong tramp_page = target_mmap(0, TARGET_PAGE_SIZE,
> -                                           PROT_READ | PROT_WRITE,
> -                                           MAP_PRIVATE | MAP_ANON, -1, 0);
> +        abi_long tramp_page = target_mmap(0, TARGET_PAGE_SIZE,
> +                                          PROT_READ | PROT_WRITE,
> +                                          MAP_PRIVATE | MAP_ANON, -1, 0);
> +        if (tramp_page == -1) {
> +            return -errno;
> +        }
> +
>           setup_sigtramp(tramp_page);
>           target_mprotect(tramp_page, TARGET_PAGE_SIZE, PROT_READ | PROT_EXEC);
>       }
> 

Applied to my linux-user-for-6.2 branch.

Thanks,
Laurent
diff mbox series

Patch

diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 5da8c02d0822..767f54c76dc5 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -3254,9 +3254,13 @@  int load_elf_binary(struct linux_binprm *bprm, struct image_info *info)
      * Otherwise, allocate a private page to hold them.
      */
     if (TARGET_ARCH_HAS_SIGTRAMP_PAGE) {
-        abi_ulong tramp_page = target_mmap(0, TARGET_PAGE_SIZE,
-                                           PROT_READ | PROT_WRITE,
-                                           MAP_PRIVATE | MAP_ANON, -1, 0);
+        abi_long tramp_page = target_mmap(0, TARGET_PAGE_SIZE,
+                                          PROT_READ | PROT_WRITE,
+                                          MAP_PRIVATE | MAP_ANON, -1, 0);
+        if (tramp_page == -1) {
+            return -errno;
+        }
+
         setup_sigtramp(tramp_page);
         target_mprotect(tramp_page, TARGET_PAGE_SIZE, PROT_READ | PROT_EXEC);
     }