mirror of
https://git.yoctoproject.org/poky
synced 2026-06-02 01:19:52 +00:00
cpio: update patch to merged version
The segfault on append was fixed upstream with a different patch, so apply that instead. (From OE-Core rev: 24000d1fdba2684202e15371f80bb385722c9d91) Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
65d17cd92c
commit
b7ffedc262
@@ -1,87 +1,51 @@
|
|||||||
Upstream-Status: Submitted [bugs-cpio]
|
Upstream-Status: Backport
|
||||||
Signed-off-by: Ross Burton <ross.burton@intel.com>
|
Signed-off-by: Ross Burton <ross.burton@intel.com>
|
||||||
|
|
||||||
From 3f0bd5a40ad0ceaee78c74a52a7166ed7f08db81 Mon Sep 17 00:00:00 2001
|
From 32d95fe0c90c59352a0ce3102fc9866cbfb0f629 Mon Sep 17 00:00:00 2001
|
||||||
From: Pavel Raiskup <praiskup@redhat.com>
|
From: Sergey Poznyakoff <gray@gnu.org>
|
||||||
Date: Thu, 29 Nov 2018 07:03:48 +0100
|
Date: Sat, 1 Dec 2018 11:40:02 +0200
|
||||||
Subject: [PATCH] Fix segfault with --append
|
Subject: [PATCH] Fix sigfault when appending to archive
|
||||||
|
|
||||||
The --append mode combines both process_copy_in() and
|
Bug reported by Ross Burton. See
|
||||||
process_copy_out() methods, each of them working with different
|
<http://lists.gnu.org/archive/html/bug-cpio/2018-11/msg00000.html>
|
||||||
(local) file_hdr->c_name buffers. So ensure that
|
|
||||||
cpio_set_c_name() isn't using the same static variable for
|
|
||||||
maintaining length of different buffers.
|
|
||||||
|
|
||||||
Complements d36ec5f4e93130efb24fb9. Thanks to Ross Burton.
|
* src/util.c: Keep static copy of the buffer pointer; always
|
||||||
|
assign it to file_hdr->c_name. Use x2realloc for memory management.
|
||||||
* src/copyin.c (process_copy_in): Always initialize file_hdr.
|
|
||||||
* src/copyout.c (process_copy_out): Likewise.
|
|
||||||
* src/cpiohdr.h (cpio_file_stat): Add c_name_buflen variable.
|
|
||||||
* src/util.c (cpio_set_c_name): Use file_hdr->c_name_buflen.
|
|
||||||
---
|
---
|
||||||
src/copyin.c | 1 +
|
src/util.c | 17 ++++-------------
|
||||||
src/copyout.c | 1 +
|
1 file changed, 4 insertions(+), 13 deletions(-)
|
||||||
src/cpiohdr.h | 1 +
|
|
||||||
src/util.c | 3 ++-
|
|
||||||
4 files changed, 5 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/copyin.c b/src/copyin.c
|
|
||||||
index ba887ae..767c2f8 100644
|
|
||||||
--- a/src/copyin.c
|
|
||||||
+++ b/src/copyin.c
|
|
||||||
@@ -1213,6 +1213,7 @@ process_copy_in ()
|
|
||||||
|
|
||||||
newdir_umask = umask (0); /* Reset umask to preserve modes of
|
|
||||||
created files */
|
|
||||||
+ memset (&file_hdr, 0, sizeof (struct cpio_file_stat));
|
|
||||||
|
|
||||||
/* Initialize the copy in. */
|
|
||||||
if (pattern_file_name)
|
|
||||||
diff --git a/src/copyout.c b/src/copyout.c
|
|
||||||
index 7532dac..fb890cb 100644
|
|
||||||
--- a/src/copyout.c
|
|
||||||
+++ b/src/copyout.c
|
|
||||||
@@ -594,6 +594,7 @@ process_copy_out ()
|
|
||||||
|
|
||||||
/* Initialize the copy out. */
|
|
||||||
ds_init (&input_name, 128);
|
|
||||||
+ memset (&file_hdr, 0, sizeof (struct cpio_file_stat));
|
|
||||||
file_hdr.c_magic = 070707;
|
|
||||||
|
|
||||||
/* Check whether the output file might be a tape. */
|
|
||||||
diff --git a/src/cpiohdr.h b/src/cpiohdr.h
|
|
||||||
index 588135b..cf64f3e 100644
|
|
||||||
--- a/src/cpiohdr.h
|
|
||||||
+++ b/src/cpiohdr.h
|
|
||||||
@@ -127,6 +127,7 @@ struct cpio_file_stat /* Internal representation of a CPIO header */
|
|
||||||
uint32_t c_chksum;
|
|
||||||
char *c_name;
|
|
||||||
char *c_tar_linkname;
|
|
||||||
+ size_t c_name_buflen;
|
|
||||||
};
|
|
||||||
|
|
||||||
void cpio_set_c_name(struct cpio_file_stat *file_hdr, char *name);
|
|
||||||
diff --git a/src/util.c b/src/util.c
|
diff --git a/src/util.c b/src/util.c
|
||||||
index 10486dc..1256469 100644
|
index 10486dc..4e49124 100644
|
||||||
--- a/src/util.c
|
--- a/src/util.c
|
||||||
+++ b/src/util.c
|
+++ b/src/util.c
|
||||||
@@ -1413,7 +1413,7 @@ set_file_times (int fd,
|
@@ -1413,22 +1413,13 @@ set_file_times (int fd,
|
||||||
void
|
void
|
||||||
cpio_set_c_name (struct cpio_file_stat *file_hdr, char *name)
|
cpio_set_c_name (struct cpio_file_stat *file_hdr, char *name)
|
||||||
{
|
{
|
||||||
- static size_t buflen = 0;
|
+ static char *buf = NULL;
|
||||||
+ size_t buflen = file_hdr->c_name_buflen;
|
static size_t buflen = 0;
|
||||||
size_t len = strlen (name) + 1;
|
size_t len = strlen (name) + 1;
|
||||||
|
|
||||||
if (buflen == 0)
|
- if (buflen == 0)
|
||||||
@@ -1430,6 +1430,7 @@ cpio_set_c_name (struct cpio_file_stat *file_hdr, char *name)
|
- {
|
||||||
}
|
- buflen = len;
|
||||||
|
- if (buflen < 32)
|
||||||
|
- buflen = 32;
|
||||||
|
- file_hdr->c_name = xmalloc (buflen);
|
||||||
|
- }
|
||||||
|
- else if (buflen < len)
|
||||||
|
- {
|
||||||
|
- buflen = len;
|
||||||
|
- file_hdr->c_name = xrealloc (file_hdr->c_name, buflen);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
+ while (buflen < len)
|
||||||
|
+ buf = x2realloc (buf, &buflen);
|
||||||
|
+ file_hdr->c_name = buf;
|
||||||
file_hdr->c_namesize = len;
|
file_hdr->c_namesize = len;
|
||||||
+ file_hdr->c_name_buflen = buflen;
|
|
||||||
memmove (file_hdr->c_name, name, len);
|
memmove (file_hdr->c_name, name, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
--
|
--
|
||||||
2.11.0
|
2.18.0
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user