bug-cpio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-cpio] [PATCH] fix 1-byte out-of-bounds write


From: Pavel Raiskup
Subject: Re: [Bug-cpio] [PATCH] fix 1-byte out-of-bounds write
Date: Mon, 13 Feb 2017 11:01:16 +0100
User-agent: KMail/5.3.3 (Linux/4.9.8-201.fc25.x86_64; KDE/5.29.0; x86_64; ; )

Just trying to ping with re-based patch.

Even though this is probably not very serious security issue, it might
lead to crash .. and I'm pushed to fix this downstream (Debian and other distros
already applied this patch and our clients are also requesting this).

I was thinking what to do better WRT original issue, but doing anything
more systematic in CPIO/PAXUTILS, the change would be probably much
larger.  OTOH, I'm fine to have a look if this is considered too bad fix.

Thanks for having a look!
Pavel


On Tuesday, January 26, 2016 11:17:54 PM CET Pavel Raiskup wrote:
> Other calls to cpio_safer_name_suffix seem to be safe.
> 
> * src/copyin.c (process_copy_in):  Make sure that file_hdr.c_name
> has at least two bytes allocated.
> * src/util.c (cpio_safer_name_suffix): Document that use of this
> function requires to be careful.
> ---
>  src/copyin.c | 2 ++
>  src/util.c   | 5 ++++-
>  2 files changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/src/copyin.c b/src/copyin.c
> index cde911e..032d35f 100644
> --- a/src/copyin.c
> +++ b/src/copyin.c
> @@ -1385,6 +1385,8 @@ process_copy_in ()
>         break;
>       }
>  
> +      if (file_hdr.c_namesize <= 1)
> +        file_hdr.c_name = xrealloc(file_hdr.c_name, 2);
>        cpio_safer_name_suffix (file_hdr.c_name, false, !no_abs_paths_flag,
>                             false);
>        
> diff --git a/src/util.c b/src/util.c
> index 6ff6032..2763ac1 100644
> --- a/src/util.c
> +++ b/src/util.c
> @@ -1411,7 +1411,10 @@ set_file_times (int fd,
>  }
>  
>  /* Do we have to ignore absolute paths, and if so, does the filename
> -   have an absolute path?  */
> +   have an absolute path?
> +   Before calling this function make sure that the allocated NAME buffer has
> +   capacity at least 2 bytes to allow us to store the "." string inside.  */
> +
>  void
>  cpio_safer_name_suffix (char *name, bool link_target, bool absolute_names,
>                       bool strip_leading_dots)
> 

Attachment: 0001-fix-1-byte-out-of-bounds-write.patch
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]