summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2025-02-17 08:36:42 +0000
committerCoprDistGit <infra@openeuler.org>2025-02-17 08:36:42 +0000
commite6a44fcd23fbac27ba5f1fb35c403dce97370b2d (patch)
treecf670a10ed95a50a80e7fc96b9762b490e1cc4e0
parent670a36699a5fcfe0e35f368b3ecf00910fd95a9b (diff)
automatic import of nosyncopeneuler24.03_LTS_SP1
-rw-r--r--.gitignore1
-rw-r--r--4.patch67
-rw-r--r--nosync.spec43
-rw-r--r--sources1
4 files changed, 112 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..344ef54 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/nosync-1.1.tar.gz
diff --git a/4.patch b/4.patch
new file mode 100644
index 0000000..5d7814a
--- /dev/null
+++ b/4.patch
@@ -0,0 +1,67 @@
+From 9497a56f7158339b56421b932760851feb39e5ad Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer@redhat.com>
+Date: Wed, 20 May 2020 19:38:35 +0200
+Subject: [PATCH] open, open64: Eliminate dependency on ELF constructor
+ ordering
+
+Another shared object may call open or open64 before the nosync
+ELF constructor has run. Relocation dependencies do not factor
+into ELF constructor ordering.
+---
+ open.c | 33 ++++++++++++++++-----------------
+ 1 file changed, 16 insertions(+), 17 deletions(-)
+
+diff --git a/open.c b/open.c
+index 89c896d..f96f542 100644
+--- a/open.c
++++ b/open.c
+@@ -17,33 +17,32 @@
+ #include <dlfcn.h>
+ #include <errno.h>
+ #include <fcntl.h>
++#include <stddef.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
+
++/* Avoid infinite recursion if called from dlsym(). The implementation
++ assumes that open is called before the process goes multi-threaded. */
+ static int dlsym_pending;
+
+ #define OPEN(open) \
+ \
+-static int (*real_ ## open)(const char *, int, ...); \
+- \
+ int __nosync_ ## open(const char *path, int flags, mode_t mode) \
+ { \
+- /* Avoid infinite recursion if called from dlsym(). */ \
+- if (__builtin_expect(dlsym_pending, 0)) { \
+- errno = ENOSYS; \
+- return -1; \
++ static int (*real)(const char *, int, ...); \
++ int (*real_copy)(const char *, int, ...) \
++ = __atomic_load_n(&real, __ATOMIC_RELAXED); \
++ if (real_copy == NULL) { \
++ if (dlsym_pending) { \
++ errno = ENOSYS; \
++ return -1; \
++ } \
++ dlsym_pending = 1; \
++ real_copy = dlsym(RTLD_NEXT, #open); \
++ dlsym_pending = 0; \
++ __atomic_store_n(&real, real_copy, __ATOMIC_RELAXED); \
+ } \
+- \
+- return real_ ## open(path, flags & ~(O_SYNC | O_DSYNC), mode); \
+-} \
+- \
+-__attribute__((constructor)) \
+-static void \
+-init_ ## open(void) \
+-{ \
+- dlsym_pending = 1; \
+- real_ ## open = dlsym(RTLD_NEXT, #open); \
+- dlsym_pending = 0; \
++ return real_copy(path, flags & ~(O_SYNC | O_DSYNC), mode); \
+ } \
+ \
+ int open(const char *, int, ...) \
diff --git a/nosync.spec b/nosync.spec
new file mode 100644
index 0000000..36299bf
--- /dev/null
+++ b/nosync.spec
@@ -0,0 +1,43 @@
+Name: nosync
+Version: 1.1
+Release: 1
+Summary: Preload library for disabling file's content synchronization
+License: ASL 2.0
+URL: http://github.com/kjn/%{name}
+Source0: http://github.com/kjn/%{name}/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz
+
+# Eliminate dependency on ELF constructor ordering
+# Solves segfaults during buildroot population in mock with nosync
+# enabled for builds with openssl
+# "FIPS module installed state definition is modified" changes
+# https://bugzilla.redhat.com/show_bug.cgi?id=1837809
+# https://github.com/kjn/nosync/pull/4
+Patch0: 4.patch
+
+BuildRequires: make
+BuildRequires: gcc
+
+%description
+nosync is a small preload library that can be used to disable
+synchronization of file's content with storage devices on GNU/Linux.
+It works by overriding implementations of certain standard functions
+like fsync or open.
+
+%prep
+%autosetup -p1
+
+%build
+make CFLAGS="%{optflags}" %{?_smp_mflags}
+
+%install
+%makeinstall
+
+%files
+%doc AUTHORS README.md
+%{!?_licensedir:%global license %%doc}
+%license LICENSE NOTICE
+%{_libdir}/%{name}
+
+%changelog
+* Fri Mar 24 2023 lichaoran <pkwarcraft@hotmail.com> - 1.1-1
+- Initial packaging
diff --git a/sources b/sources
new file mode 100644
index 0000000..dfc74a6
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+6b49297ef2f953bbcc8c8ce71b57e609 nosync-1.1.tar.gz