diff options
Diffstat (limited to 'external/poky/meta/recipes-devtools/pseudo/files/xattr_version.patch')
-rw-r--r-- | external/poky/meta/recipes-devtools/pseudo/files/xattr_version.patch | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/external/poky/meta/recipes-devtools/pseudo/files/xattr_version.patch b/external/poky/meta/recipes-devtools/pseudo/files/xattr_version.patch new file mode 100644 index 00000000..a8b14bdd --- /dev/null +++ b/external/poky/meta/recipes-devtools/pseudo/files/xattr_version.patch @@ -0,0 +1,54 @@ +On a tumbleweed system, "install X Y" was showing the error: + +pseudo: ENOSYS for 'fsetxattr'. + +which was being caused by dlsym() for that function returning NULL. This +appears to be due to it finding an unresolved symbol in libacl for this +symbol in libattr. It hasn't been resolved so its NULL. dlerror() returns +nothing since this is a valid symbol entry, its just not the one we want. + +We can add the glibc version string for the symbol we actually want so we get +that version rather than the libattr/libacl one. + +To quote libattr: +""" + These dumb wrappers are for backwards compatibility only. + Actual syscall wrappers are long gone to libc. +""" +and they are simply wrappers around the libc version so our attaching +to the libc versions should intercept any accesses via these too. + +RP 2020/06/22 +Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org +Upstream-Status: Pending [discussed with seebs on irc and appears the correct fix] + + +Index: git/ports/linux/xattr/wrapfuncs.in +=================================================================== +--- git.orig/ports/linux/xattr/wrapfuncs.in ++++ git/ports/linux/xattr/wrapfuncs.in +@@ -1,12 +1,12 @@ +-ssize_t getxattr(const char *path, const char *name, void *value, size_t size); /* flags=0 */ +-ssize_t lgetxattr(const char *path, const char *name, void *value, size_t size); /* flags=AT_SYMLINK_NOFOLLOW */ +-ssize_t fgetxattr(int filedes, const char *name, void *value, size_t size); +-int setxattr(const char *path, const char *name, const void *value, size_t size, int xflags); /* flags=0 */ +-int lsetxattr(const char *path, const char *name, const void *value, size_t size, int xflags); /* flags=AT_SYMLINK_NOFOLLOW */ +-int fsetxattr(int filedes, const char *name, const void *value, size_t size, int xflags); +-ssize_t listxattr(const char *path, char *list, size_t size); /* flags=0 */ +-ssize_t llistxattr(const char *path, char *list, size_t size); /* flags=AT_SYMLINK_NOFOLLOW */ +-ssize_t flistxattr(int filedes, char *list, size_t size); +-int removexattr(const char *path, const char *name); /* flags=0 */ +-int lremovexattr(const char *path, const char *name); /* flags=AT_SYMLINK_NOFOLLOW */ +-int fremovexattr(int filedes, const char *name); ++ssize_t getxattr(const char *path, const char *name, void *value, size_t size); /* flags=0, version="GLIBC_2.3" */ ++ssize_t lgetxattr(const char *path, const char *name, void *value, size_t size); /* flags=AT_SYMLINK_NOFOLLOW, version="GLIBC_2.3" */ ++ssize_t fgetxattr(int filedes, const char *name, void *value, size_t size); /* version="GLIBC_2.3" */ ++int setxattr(const char *path, const char *name, const void *value, size_t size, int xflags); /* flags=0, version="GLIBC_2.3" */ ++int lsetxattr(const char *path, const char *name, const void *value, size_t size, int xflags); /* flags=AT_SYMLINK_NOFOLLOW, version="GLIBC_2.3" */ ++int fsetxattr(int filedes, const char *name, const void *value, size_t size, int xflags); /* version="GLIBC_2.3" */ ++ssize_t listxattr(const char *path, char *list, size_t size); /* flags=0, version="GLIBC_2.3" */ ++ssize_t llistxattr(const char *path, char *list, size_t size); /* flags=AT_SYMLINK_NOFOLLOW, version="GLIBC_2.3" */ ++ssize_t flistxattr(int filedes, char *list, size_t size); /* version="GLIBC_2.3" */ ++int removexattr(const char *path, const char *name); /* flags=0, version="GLIBC_2.3" */ ++int lremovexattr(const char *path, const char *name); /* flags=AT_SYMLINK_NOFOLLOW, version="GLIBC_2.3" */ ++int fremovexattr(int filedes, const char *name); /* version="GLIBC_2.3" */ |