* [PATCH][pseudo 1/7] pseudo_util: don't overrun strings when looking for keys @ 2021-01-08 14:06 Ross Burton 2021-01-08 14:06 ` [PATCH][pseudo 2/7] Silence switch block warnings Ross Burton ` (5 more replies) 0 siblings, 6 replies; 8+ messages in thread From: Ross Burton @ 2021-01-08 14:06 UTC (permalink / raw) To: openembedded-core Use strcmp() insead of memcmp() when searching for keys as otherwise the comparison will run off the end of the NULL-terminated string. Signed-off-by: Ross Burton <ross.burton@arm.com> --- pseudo_util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pseudo_util.c b/pseudo_util.c index 1d06009..51c07c2 100644 --- a/pseudo_util.c +++ b/pseudo_util.c @@ -159,7 +159,7 @@ pseudo_get_value(const char *key) { if (pseudo_util_initted == -1) pseudo_init_util(); - for (i = 0; pseudo_env[i].key && memcmp(pseudo_env[i].key, key, pseudo_env[i].key_len + 1); i++) + for (i = 0; pseudo_env[i].key && strcmp(pseudo_env[i].key, key); i++) ; /* Check if the environment has it and we don't ... @@ -188,7 +188,7 @@ pseudo_set_value(const char *key, const char *value) { if (pseudo_util_initted == -1) pseudo_init_util(); - for (i = 0; pseudo_env[i].key && memcmp(pseudo_env[i].key, key, pseudo_env[i].key_len + 1); i++) + for (i = 0; pseudo_env[i].key && strcmp(pseudo_env[i].key, key); i++) ; if (pseudo_env[i].key) { -- 2.25.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH][pseudo 2/7] Silence switch block warnings 2021-01-08 14:06 [PATCH][pseudo 1/7] pseudo_util: don't overrun strings when looking for keys Ross Burton @ 2021-01-08 14:06 ` Ross Burton 2021-01-08 14:06 ` [PATCH][pseudo 3/7] Disable deprecated function warnings Ross Burton ` (4 subsequent siblings) 5 siblings, 0 replies; 8+ messages in thread From: Ross Burton @ 2021-01-08 14:06 UTC (permalink / raw) To: openembedded-core Slightly alter a fallthrough comment so that GCC recognises it, and add a default: case to a switch which explicitly only handles a few values. Signed-off-by: Ross Burton <ross.burton@arm.com> --- pseudo.c | 2 ++ pseudo_client.c | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pseudo.c b/pseudo.c index ff8e1b9..55f0f18 100644 --- a/pseudo.c +++ b/pseudo.c @@ -1036,6 +1036,8 @@ pseudo_op(pseudo_msg_t *msg, const char *program, const char *tag, char **respon pdb_may_unlink_file(msg, msg->client); } break; + default: + break; } op_exit: diff --git a/pseudo_client.c b/pseudo_client.c index 3c49644..eeb1fdc 100644 --- a/pseudo_client.c +++ b/pseudo_client.c @@ -1860,7 +1860,8 @@ pseudo_client_op(pseudo_op_t op, int access, int fd, int dirfd, const char *path break; case OP_OPEN: pseudo_client_path(fd, path); - case OP_EXEC: /* fallthrough */ + /* fallthrough */ + case OP_EXEC: do_request = pseudo_client_logging; break; case OP_CLOSE: -- 2.25.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH][pseudo 3/7] Disable deprecated function warnings 2021-01-08 14:06 [PATCH][pseudo 1/7] pseudo_util: don't overrun strings when looking for keys Ross Burton 2021-01-08 14:06 ` [PATCH][pseudo 2/7] Silence switch block warnings Ross Burton @ 2021-01-08 14:06 ` Ross Burton 2021-01-08 14:06 ` [PATCH][pseudo 4/7] Fix some memory leaks Ross Burton ` (3 subsequent siblings) 5 siblings, 0 replies; 8+ messages in thread From: Ross Burton @ 2021-01-08 14:06 UTC (permalink / raw) To: openembedded-core Pseudo has to call deprecated functions because it is wrapping them, so disable deprecation warnings. Signed-off-by: Ross Burton <ross.burton@arm.com> --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index b43d2d6..d1f77d5 100644 --- a/Makefile.in +++ b/Makefile.in @@ -42,7 +42,7 @@ LOCALSTATE=var/pseudo BINDIR=$(PREFIX)/$(BIN) LOCALSTATEDIR=$(PREFIX)/$(LOCALSTATE) -CFLAGS_BASE=-pipe -std=gnu99 -Wall -W -Wextra +CFLAGS_BASE=-pipe -std=gnu99 -Wall -W -Wextra -Wno-deprecated-declarations CFLAGS_CODE=-fPIC -D_LARGEFILE64_SOURCE -D_ATFILE_SOURCE $(ARCH_FLAGS) CFLAGS_DEFS=-DPSEUDO_PREFIX='"$(PREFIX)"' -DPSEUDO_SUFFIX='"$(SUFFIX)"' -DPSEUDO_BINDIR='"$(BIN)"' -DPSEUDO_LIBDIR='"$(LIB)"' -DPSEUDO_LOCALSTATEDIR='"$(LOCALSTATE)"' -DPSEUDO_VERSION='"$(VERSION)"' $(SQLITE_MEMORY) $(FORCE_ASYNC) -DPSEUDO_PASSWD_FALLBACK='$(PASSWD_FALLBACK)' $(OPTDEFS) $(EPOLL) CFLAGS_DEBUG=-O2 -g -- 2.25.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH][pseudo 4/7] Fix some memory leaks 2021-01-08 14:06 [PATCH][pseudo 1/7] pseudo_util: don't overrun strings when looking for keys Ross Burton 2021-01-08 14:06 ` [PATCH][pseudo 2/7] Silence switch block warnings Ross Burton 2021-01-08 14:06 ` [PATCH][pseudo 3/7] Disable deprecated function warnings Ross Burton @ 2021-01-08 14:06 ` Ross Burton 2021-01-08 16:01 ` [OE-core] " Seebs 2021-01-08 14:06 ` [PATCH][pseudo 5/7] makewrappers: fix Python 2 hangover Ross Burton ` (2 subsequent siblings) 5 siblings, 1 reply; 8+ messages in thread From: Ross Burton @ 2021-01-08 14:06 UTC (permalink / raw) To: openembedded-core pseudo_get_value() returns newly allocated memory that the caller must free, so add some free() calls. Signed-off-by: Ross Burton <ross.burton@arm.com> --- pseudo.c | 4 +++- pseudo_client.c | 9 +++++++++ pseudo_util.c | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pseudo.c b/pseudo.c index 55f0f18..f2e2f87 100644 --- a/pseudo.c +++ b/pseudo.c @@ -245,10 +245,12 @@ main(int argc, char *argv[]) { /* Options are processed, preserve them... */ pseudo_set_value("PSEUDO_OPTS", opts); - if (!pseudo_get_prefix(argv[0])) { + s = pseudo_get_prefix(argv[0]); + if (!s) { pseudo_diag("Can't figure out prefix. Set PSEUDO_PREFIX or invoke with full path.\n"); exit(PSEUDO_EXIT_PSEUDO_PREFIX); } + free(s); /* move database */ if (opt_m || opt_M) { diff --git a/pseudo_client.c b/pseudo_client.c index eeb1fdc..6310b99 100644 --- a/pseudo_client.c +++ b/pseudo_client.c @@ -431,6 +431,7 @@ pseudo_profile_report(void) { void pseudo_init_client(void) { char *env; + int need_free = 0; pseudo_antimagic(); pseudo_new_pid(); @@ -450,9 +451,11 @@ pseudo_init_client(void) { * or it may have gone away, in which case we'd enable * pseudo (and cause it to reinit the defaults). */ + need_free = 0; env = getenv("PSEUDO_DISABLED"); if (!env) { env = pseudo_get_value("PSEUDO_DISABLED"); + need_free = 1; } if (env) { int actually_disabled = 1; @@ -487,15 +490,19 @@ pseudo_init_client(void) { } else { pseudo_set_value("PSEUDO_DISABLED", "0"); } + if (need_free) + free(env); /* ALLOW_FSYNC is here because some crazy hosts will otherwise * report incorrect values for st_size/st_blocks. I can sort of * understand st_blocks, but bogus values for st_size? Not cool, * dudes, not cool. */ + need_free = 0; env = getenv("PSEUDO_ALLOW_FSYNC"); if (!env) { env = pseudo_get_value("PSEUDO_ALLOW_FSYNC"); + need_free = 1; } else { pseudo_set_value("PSEUDO_ALLOW_FSYNC", env); } @@ -504,6 +511,8 @@ pseudo_init_client(void) { } else { pseudo_allow_fsync = 0; } + if (need_free) + free(env); /* in child processes, PSEUDO_UNLOAD may become set to * some truthy value, in which case we're being asked to diff --git a/pseudo_util.c b/pseudo_util.c index 51c07c2..b6980c2 100644 --- a/pseudo_util.c +++ b/pseudo_util.c @@ -967,6 +967,7 @@ pseudo_setupenv() { } snprintf(newenv, len, "%s:%s64", libdir_path, libdir_path); SETENV(PRELINK_PATH, newenv, 1); + free(newenv); } else if (!strstr(ld_library_path, libdir_path)) { size_t len = strlen(ld_library_path) + 1 + strlen(libdir_path) + 1 + (strlen(libdir_path) + 2) + 1; char *newenv = malloc(len); @@ -975,6 +976,7 @@ pseudo_setupenv() { } snprintf(newenv, len, "%s:%s:%s64", ld_library_path, libdir_path, libdir_path); SETENV(PRELINK_PATH, newenv, 1); + free(newenv); } else { /* nothing to do, ld_library_path exists and contains * our preferred path */ -- 2.25.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [OE-core] [PATCH][pseudo 4/7] Fix some memory leaks 2021-01-08 14:06 ` [PATCH][pseudo 4/7] Fix some memory leaks Ross Burton @ 2021-01-08 16:01 ` Seebs 0 siblings, 0 replies; 8+ messages in thread From: Seebs @ 2021-01-08 16:01 UTC (permalink / raw) To: Ross Burton; +Cc: openembedded-core For reference, I believe the rationale on these originally was "none of these functions happen repeatedly, in general, and the extra complexity and potential to get the logic wrong isn't appealing", but I don't think I object to these. -s ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH][pseudo 5/7] makewrappers: fix Python 2 hangover 2021-01-08 14:06 [PATCH][pseudo 1/7] pseudo_util: don't overrun strings when looking for keys Ross Burton ` (2 preceding siblings ...) 2021-01-08 14:06 ` [PATCH][pseudo 4/7] Fix some memory leaks Ross Burton @ 2021-01-08 14:06 ` Ross Burton 2021-01-08 14:06 ` [PATCH][pseudo 6/7] makewrappers: support architecture-overrides in wrapper modifiers Ross Burton 2021-01-08 14:06 ` [PATCH][pseudo 7/7] ports/linux/xattr: add arm64 versions for xattr calls Ross Burton 5 siblings, 0 replies; 8+ messages in thread From: Ross Burton @ 2021-01-08 14:06 UTC (permalink / raw) To: openembedded-core An except statement was still using Python 2 syntax so caused SyntaxErrors if the exception was raised. Signed-off-by: Ross Burton <ross.burton@arm.com> --- makewrappers | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makewrappers b/makewrappers index 232c08d..e68f6a9 100755 --- a/makewrappers +++ b/makewrappers @@ -593,7 +593,7 @@ def process_wrapfuncs(port): func.directory = directory funcs[func.name] = func sys.stdout.write(".") - except Exception(e): + except Exception as e: print("Parsing failed:", e) exit(1) funclist.close() -- 2.25.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH][pseudo 6/7] makewrappers: support architecture-overrides in wrapper modifiers 2021-01-08 14:06 [PATCH][pseudo 1/7] pseudo_util: don't overrun strings when looking for keys Ross Burton ` (3 preceding siblings ...) 2021-01-08 14:06 ` [PATCH][pseudo 5/7] makewrappers: fix Python 2 hangover Ross Burton @ 2021-01-08 14:06 ` Ross Burton 2021-01-08 14:06 ` [PATCH][pseudo 7/7] ports/linux/xattr: add arm64 versions for xattr calls Ross Burton 5 siblings, 0 replies; 8+ messages in thread From: Ross Burton @ 2021-01-08 14:06 UTC (permalink / raw) To: openembedded-core Pseudo allows wrappers to define special comments in the wrapper lists to pass extra arguments such as version=GLIBC_2.3 to control which symbol version to search for. However, these arguments can be architecture-specific. When parsing the arguments, check for flags that end in the architecture name (as returned by platform.machine()) and use those values instead. Signed-off-by: Ross Burton <ross.burton@arm.com> --- makewrappers | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/makewrappers b/makewrappers index e68f6a9..6681e11 100755 --- a/makewrappers +++ b/makewrappers @@ -11,6 +11,7 @@ import glob import sys import re import os.path +import platform import string import subprocess from templatefile import TemplateFile @@ -290,10 +291,18 @@ class Function: # handle special comments, such as flags=AT_SYMLINK_NOFOLLOW if self.comments: - modifiers = self.comments.split(', ') - for mod in modifiers: - key, value = mod.split('=') - value = value.rstrip() + # Build a dictionary of key=value, key=value pairs + modifiers = dict(mod.split("=") for mod in self.comments.split(',')) + # Strip all leading/trailing whitespace + modifiers = {k.strip():v.strip() for k, v in modifiers.items()} + + arch = "-" + platform.machine() + # Sorted so that versions-foo appear after versions, so overrides are easy + for key in sorted(modifiers): + value = modifiers[key] + # If the key is version-arm64 and we're on arm64 then rename this to version + if key.endswith(arch): + key = key.replace(arch, "") setattr(self, key, value) def maybe_inode64(self): -- 2.25.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH][pseudo 7/7] ports/linux/xattr: add arm64 versions for xattr calls 2021-01-08 14:06 [PATCH][pseudo 1/7] pseudo_util: don't overrun strings when looking for keys Ross Burton ` (4 preceding siblings ...) 2021-01-08 14:06 ` [PATCH][pseudo 6/7] makewrappers: support architecture-overrides in wrapper modifiers Ross Burton @ 2021-01-08 14:06 ` Ross Burton 5 siblings, 0 replies; 8+ messages in thread From: Ross Burton @ 2021-01-08 14:06 UTC (permalink / raw) To: openembedded-core The xattr functions need to use a specific version of the symbols to avoid calling into libattr.so, which on Tumbleweed causes failures[1]. However on arm64 systems the glibc version is different. This means that searching for llistattr(GLIBC_2.3) fails to initially match the symbol in libc.so, and instead if libattr.so is linked then the symbol in that library is used. This is simply a wrapper that is intended to call the symbol in libc.so but instead calls the symbol in pseudo, so infinite loops. Using the just-added architecture overrides, add the right versions for arm64 systems so the correct symbols in libc.so are found. [ YOCTO #14133 ] [1] b94fa2fc81cde25865ee223ca437d07377229a53 Signed-off-by: Ross Burton <ross.burton@arm.com> --- ports/linux/xattr/wrapfuncs.in | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/ports/linux/xattr/wrapfuncs.in b/ports/linux/xattr/wrapfuncs.in index b8e007d..09eba23 100644 --- a/ports/linux/xattr/wrapfuncs.in +++ b/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, 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" */ +ssize_t getxattr(const char *path, const char *name, void *value, size_t size); /* flags=0, version="GLIBC_2.3", version-aarch64="GLIBC_2.17" */ +ssize_t lgetxattr(const char *path, const char *name, void *value, size_t size); /* flags=AT_SYMLINK_NOFOLLOW, version="GLIBC_2.3", version-aarch64="GLIBC_2.17" */ +ssize_t fgetxattr(int filedes, const char *name, void *value, size_t size); /* version="GLIBC_2.3", version-aarch64="GLIBC_2.17" */ +int setxattr(const char *path, const char *name, const void *value, size_t size, int xflags); /* flags=0, version="GLIBC_2.3", version-aarch64="GLIBC_2.17" */ +int lsetxattr(const char *path, const char *name, const void *value, size_t size, int xflags); /* flags=AT_SYMLINK_NOFOLLOW, version="GLIBC_2.3", version-aarch64="GLIBC_2.17" */ +int fsetxattr(int filedes, const char *name, const void *value, size_t size, int xflags); /* version="GLIBC_2.3", version-aarch64="GLIBC_2.17" */ +ssize_t listxattr(const char *path, char *list, size_t size); /* flags=0, version="GLIBC_2.3", version-aarch64="GLIBC_2.17" */ +ssize_t llistxattr(const char *path, char *list, size_t size); /* flags=AT_SYMLINK_NOFOLLOW, version="GLIBC_2.3", version-aarch64="GLIBC_2.17" */ +ssize_t flistxattr(int filedes, char *list, size_t size); /* version="GLIBC_2.3", version-aarch64="GLIBC_2.17" */ +int removexattr(const char *path, const char *name); /* flags=0, version="GLIBC_2.3", version-aarch64="GLIBC_2.17" */ +int lremovexattr(const char *path, const char *name); /* flags=AT_SYMLINK_NOFOLLOW, version="GLIBC_2.3", version-aarch64="GLIBC_2.17" */ +int fremovexattr(int filedes, const char *name); /* version="GLIBC_2.3", version-aarch64="GLIBC_2.17" */ -- 2.25.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2021-01-08 16:01 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-01-08 14:06 [PATCH][pseudo 1/7] pseudo_util: don't overrun strings when looking for keys Ross Burton 2021-01-08 14:06 ` [PATCH][pseudo 2/7] Silence switch block warnings Ross Burton 2021-01-08 14:06 ` [PATCH][pseudo 3/7] Disable deprecated function warnings Ross Burton 2021-01-08 14:06 ` [PATCH][pseudo 4/7] Fix some memory leaks Ross Burton 2021-01-08 16:01 ` [OE-core] " Seebs 2021-01-08 14:06 ` [PATCH][pseudo 5/7] makewrappers: fix Python 2 hangover Ross Burton 2021-01-08 14:06 ` [PATCH][pseudo 6/7] makewrappers: support architecture-overrides in wrapper modifiers Ross Burton 2021-01-08 14:06 ` [PATCH][pseudo 7/7] ports/linux/xattr: add arm64 versions for xattr calls Ross Burton
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.