patchelf: Fix corrupted file mode patch

The recent patchelf upgrades corrupted the file permissions patch we
carry as upstream inserted an early exit to the funciton.

This showed up as corrupted file modes when testing a new uninative tarball
containing this patchelf.

Rework and tweak the patch to fix this.

(From OE-Core rev: bcdba091d99f9a3ae67c0ba17fcf27329698a0c0)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2022-02-11 13:42:54 +00:00
parent 6c9e94f318
commit a28c145aa4

View File

@@ -14,11 +14,11 @@ Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
src/patchelf.cc | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/src/patchelf.cc b/src/patchelf.cc
index 1aeae88..6b77afe 100644
--- a/src/patchelf.cc
+++ b/src/patchelf.cc
@@ -534,9 +534,19 @@ void ElfFile<ElfFileParamNames>::sortShdrs()
Index: git/src/patchelf.cc
===================================================================
--- git.orig/src/patchelf.cc
+++ git/src/patchelf.cc
@@ -534,9 +534,19 @@ void ElfFile<ElfFileParamNames>::sortShd
static void writeFile(const std::string & fileName, const FileContents & contents)
{
@@ -39,17 +39,27 @@ index 1aeae88..6b77afe 100644
if (fd == -1)
error("open");
@@ -564,6 +574,10 @@ static void writeFile(const std::string & fileName, const FileContents & content
if (errno == EINTR)
return;
error("close");
@@ -551,8 +561,6 @@ static void writeFile(const std::string
bytesWritten += portion;
}
- if (close(fd) >= 0)
- return;
/*
* Just ignore EINTR; a retry loop is the wrong thing to do.
*
@@ -561,9 +569,11 @@ static void writeFile(const std::string
* http://utcc.utoronto.ca/~cks/space/blog/unix/CloseEINTR
* https://sites.google.com/site/michaelsafyan/software-engineering/checkforeintrwheninvokingclosethinkagain
*/
- if (errno == EINTR)
- return;
- error("close");
+ if ((close(fd) < 0) && errno != EINTR)
+ error("close");
+
+ if (chmod(fileName.c_str(), st.st_mode) != 0)
+ error("chmod");
+
}
--
2.25.1