diff options
author | Dave Cobbley <david.j.cobbley@linux.intel.com> | 2018-08-14 20:05:37 +0300 |
---|---|---|
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2018-08-23 04:26:31 +0300 |
commit | eb8dc40360f0cfef56fb6947cc817a547d6d9bc6 (patch) | |
tree | de291a73dc37168da6370e2cf16c347d1eba9df8 /poky/meta/recipes-core/systemd/systemd/0032-memfd.patch | |
parent | 9c3cf826d853102535ead04cebc2d6023eff3032 (diff) | |
download | openbmc-eb8dc40360f0cfef56fb6947cc817a547d6d9bc6.tar.xz |
[Subtree] Removing import-layers directory
As part of the move to subtrees, need to bring all the import layers
content to the top level.
Change-Id: I4a163d10898cbc6e11c27f776f60e1a470049d8f
Signed-off-by: Dave Cobbley <david.j.cobbley@linux.intel.com>
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Diffstat (limited to 'poky/meta/recipes-core/systemd/systemd/0032-memfd.patch')
-rw-r--r-- | poky/meta/recipes-core/systemd/systemd/0032-memfd.patch | 272 |
1 files changed, 272 insertions, 0 deletions
diff --git a/poky/meta/recipes-core/systemd/systemd/0032-memfd.patch b/poky/meta/recipes-core/systemd/systemd/0032-memfd.patch new file mode 100644 index 000000000..f7cfd60a3 --- /dev/null +++ b/poky/meta/recipes-core/systemd/systemd/0032-memfd.patch @@ -0,0 +1,272 @@ +missing_syscall: when adding syscall replacements, use different names ( + +#8229) + +In meson.build we check that functions are available using: + meson.get_compiler('c').has_function('foo') +which checks the following: +- if __stub_foo or __stub___foo are defined, return false +- if foo is declared (a pointer to the function can be taken), return true +- otherwise check for __builtin_memfd_create + +_stub is documented by glibc as + It defines a symbol '__stub_FUNCTION' for each function + in the C library which is a stub, meaning it will fail + every time called, usually setting errno to ENOSYS. + +So if __stub is defined, we know we don't want to use the glibc version, but +this doesn't tell us if the name itself is defined or not. If it _is_ defined, +and we define our replacement as an inline static function, we get an error: + +In file included from ../src/basic/missing.h:1358:0, + from ../src/basic/util.h:47, + from ../src/basic/calendarspec.h:29, + from ../src/basic/calendarspec.c:34: +../src/basic/missing_syscall.h:65:19: error: static declaration of 'memfd_create' follows non-static declaration + static inline int memfd_create(const char *name, unsigned int flags) { + ^~~~~~~~~~~~ +.../usr/include/bits/mman-shared.h:46:5: note: previous declaration of 'memfd_create' was here + int memfd_create (const char *__name, unsigned int __flags) __THROW; + ^~~~~~~~~~~~ + +To avoid this problem, call our inline functions different than glibc, +and use a #define to map the official name to our replacement. + +Fixes #8099. + +v2: +- use "missing_" as the prefix instead of "_" + +v3: +- rebase and update for statx() + + Unfortunately "statx" is also present in "struct statx", so the define + causes issues. Work around this by using a typedef. + +I checked that systemd compiles with current glibc +(glibc-devel-2.26-24.fc27.x86_64) if HAVE_MEMFD_CREATE, HAVE_GETTID, +HAVE_PIVOT_ROOT, HAVE_SETNS, HAVE_RENAMEAT2, HAVE_KCMP, HAVE_KEYCTL, +HAVE_COPY_FILE_RANGE, HAVE_BPF, HAVE_STATX are forced to 0. + +Setting HAVE_NAME_TO_HANDLE_AT to 0 causes an issue, but it's not because of +the define, but because of struct file_handle. + + +backport https://github.com/systemd/systemd/commit/5187dd2c403caf92d09f3491e41f1ceb3f10491f + +Signed-off-by: Khem Raj <raj.khem@gmail.com> +Upstream-Status: Backport [https://github.com/systemd/systemd/issues/8099] +Index: git/src/basic/missing_syscall.h +=================================================================== +--- git.orig/src/basic/missing_syscall.h ++++ git/src/basic/missing_syscall.h +@@ -26,9 +26,11 @@ + #include <sys/types.h> + + #if !HAVE_PIVOT_ROOT +-static inline int pivot_root(const char *new_root, const char *put_old) { ++static inline int missing_pivot_root(const char *new_root, const char *put_old) { + return syscall(SYS_pivot_root, new_root, put_old); + } ++ ++# define pivot_root missing_pivot_root + #endif + + #if !HAVE_CANONICALIZE_FILE_NAME +@@ -68,7 +70,7 @@ static inline char *canonicalize_file_na + # endif + # endif + +-static inline int memfd_create(const char *name, unsigned int flags) { ++static inline int missing_memfd_create(const char *name, unsigned int flags) { + # ifdef __NR_memfd_create + return syscall(__NR_memfd_create, name, flags); + # else +@@ -76,6 +78,8 @@ static inline int memfd_create(const cha + return -1; + # endif + } ++ ++# define memfd_create missing_memfd_create + #endif + + /* ======================================================================= */ +@@ -115,7 +119,7 @@ static inline int memfd_create(const cha + # endif + # endif + +-static inline int getrandom(void *buffer, size_t count, unsigned flags) { ++static inline int missing_getrandom(void *buffer, size_t count, unsigned flags) { + # ifdef __NR_getrandom + return syscall(__NR_getrandom, buffer, count, flags); + # else +@@ -123,14 +127,18 @@ static inline int getrandom(void *buffer + return -1; + # endif + } ++ ++# define getrandom missing_getrandom + #endif + + /* ======================================================================= */ + + #if !HAVE_GETTID +-static inline pid_t gettid(void) { ++static inline pid_t missing_gettid(void) { + return (pid_t) syscall(SYS_gettid); + } ++ ++# define gettid missing_gettid + #endif + + /* ======================================================================= */ +@@ -158,7 +166,7 @@ struct file_handle { + unsigned char f_handle[0]; + }; + +-static inline int name_to_handle_at(int fd, const char *name, struct file_handle *handle, int *mnt_id, int flags) { ++static inline int missing_name_to_handle_at(int fd, const char *name, struct file_handle *handle, int *mnt_id, int flags) { + # ifdef __NR_name_to_handle_at + return syscall(__NR_name_to_handle_at, fd, name, handle, mnt_id, flags); + # else +@@ -166,6 +174,8 @@ static inline int name_to_handle_at(int + return -1; + # endif + } ++ ++# define name_to_handle_at missing_name_to_handle_at + #endif + + /* ======================================================================= */ +@@ -183,7 +193,7 @@ static inline int name_to_handle_at(int + # endif + # endif + +-static inline int setns(int fd, int nstype) { ++static inline int missing_setns(int fd, int nstype) { + # ifdef __NR_setns + return syscall(__NR_setns, fd, nstype); + # else +@@ -191,6 +201,8 @@ static inline int setns(int fd, int nsty + return -1; + # endif + } ++ ++# define setns missing_setns + #endif + + /* ======================================================================= */ +@@ -236,7 +248,7 @@ static inline pid_t raw_getpid(void) { + # endif + # endif + +-static inline int renameat2(int oldfd, const char *oldname, int newfd, const char *newname, unsigned flags) { ++static inline int missing_renameat2(int oldfd, const char *oldname, int newfd, const char *newname, unsigned flags) { + # ifdef __NR_renameat2 + return syscall(__NR_renameat2, oldfd, oldname, newfd, newname, flags); + # else +@@ -244,12 +256,14 @@ static inline int renameat2(int oldfd, c + return -1; + # endif + } ++ ++# define renameat2 missing_renameat2 + #endif + + /* ======================================================================= */ + + #if !HAVE_KCMP +-static inline int kcmp(pid_t pid1, pid_t pid2, int type, unsigned long idx1, unsigned long idx2) { ++static inline int missing_kcmp(pid_t pid1, pid_t pid2, int type, unsigned long idx1, unsigned long idx2) { + # ifdef __NR_kcmp + return syscall(__NR_kcmp, pid1, pid2, type, idx1, idx2); + # else +@@ -257,36 +271,44 @@ static inline int kcmp(pid_t pid1, pid_t + return -1; + # endif + } ++ ++# define kcmp missing_kcmp + #endif + + /* ======================================================================= */ + + #if !HAVE_KEYCTL +-static inline long keyctl(int cmd, unsigned long arg2, unsigned long arg3, unsigned long arg4,unsigned long arg5) { ++static inline long missing_keyctl(int cmd, unsigned long arg2, unsigned long arg3, unsigned long arg4,unsigned long arg5) { + # ifdef __NR_keyctl + return syscall(__NR_keyctl, cmd, arg2, arg3, arg4, arg5); + # else + errno = ENOSYS; + return -1; + # endif ++ ++# define keyctl missing_keyctl + } + +-static inline key_serial_t add_key(const char *type, const char *description, const void *payload, size_t plen, key_serial_t ringid) { ++static inline key_serial_t missing_add_key(const char *type, const char *description, const void *payload, size_t plen, key_serial_t ringid) { + # ifdef __NR_add_key + return syscall(__NR_add_key, type, description, payload, plen, ringid); + # else + errno = ENOSYS; + return -1; + # endif ++ ++# define add_key missing_add_key + } + +-static inline key_serial_t request_key(const char *type, const char *description, const char * callout_info, key_serial_t destringid) { ++static inline key_serial_t missing_request_key(const char *type, const char *description, const char * callout_info, key_serial_t destringid) { + # ifdef __NR_request_key + return syscall(__NR_request_key, type, description, callout_info, destringid); + # else + errno = ENOSYS; + return -1; + # endif ++ ++# define request_key missing_request_key + } + #endif + +@@ -313,10 +335,10 @@ static inline key_serial_t request_key(c + # endif + # endif + +-static inline ssize_t copy_file_range(int fd_in, loff_t *off_in, +- int fd_out, loff_t *off_out, +- size_t len, +- unsigned int flags) { ++static inline ssize_t missing_copy_file_range(int fd_in, loff_t *off_in, ++ int fd_out, loff_t *off_out, ++ size_t len, ++ unsigned int flags) { + # ifdef __NR_copy_file_range + return syscall(__NR_copy_file_range, fd_in, off_in, fd_out, off_out, len, flags); + # else +@@ -324,6 +346,8 @@ static inline ssize_t copy_file_range(in + return -1; + # endif + } ++ ++# define copy_file_range missing_copy_file_range + #endif + + /* ======================================================================= */ +@@ -351,7 +375,7 @@ static inline ssize_t copy_file_range(in + + union bpf_attr; + +-static inline int bpf(int cmd, union bpf_attr *attr, size_t size) { ++static inline int missing_bpf(int cmd, union bpf_attr *attr, size_t size) { + #ifdef __NR_bpf + return (int) syscall(__NR_bpf, cmd, attr, size); + #else +@@ -360,6 +384,7 @@ static inline int bpf(int cmd, union bpf + #endif + } + ++# define bpf missing_bpf + #endif + + /* ======================================================================= */ |