From: Richard Purdie <richard.pur...@linuxfoundation.org>

Fix a NULL pointer dereference exposed by the path ignore code in
xattr handling.

Signed-off-by: Richard Purdie <richard.pur...@linuxfoundation.org>
(cherry picked from commit 929a27bf6cbca94d1141d2094ae0c915d93bd3f4)
Signed-off-by: Steve Sakoman <st...@sakoman.com>
---
 .../pseudo/files/xattr_fix.patch              | 40 +++++++++++++++++++
 meta/recipes-devtools/pseudo/pseudo_git.bb    |  1 +
 2 files changed, 41 insertions(+)
 create mode 100644 meta/recipes-devtools/pseudo/files/xattr_fix.patch

diff --git a/meta/recipes-devtools/pseudo/files/xattr_fix.patch 
b/meta/recipes-devtools/pseudo/files/xattr_fix.patch
new file mode 100644
index 0000000000..61d0030b10
--- /dev/null
+++ b/meta/recipes-devtools/pseudo/files/xattr_fix.patch
@@ -0,0 +1,40 @@
+
+In the xattr handling functions, if result is NULL, which it can be 
+with the path ignore code, there is a NULL pointer dereference and 
+segfault. Everywhere else checks result first, this appears to just 
+be an omission.
+
+Signed-off-by: Richard Purdie <richard.pur...@linuxfoundation.org>
+Upstream-Status: Pending
+
+Index: git/ports/linux/xattr/pseudo_wrappers.c
+===================================================================
+--- git.orig/ports/linux/xattr/pseudo_wrappers.c
++++ git/ports/linux/xattr/pseudo_wrappers.c
+@@ -134,7 +134,7 @@ static ssize_t shared_getxattr(const cha
+       pseudo_debug(PDBGF_XATTR, "getxattr(%s [fd %d], %s)\n",
+               path ? path : "<no path>", fd, name);
+       pseudo_msg_t *result = pseudo_client_op(OP_GET_XATTR, 0, fd, -1, path, 
&buf, name);
+-      if (result->result != RESULT_SUCCEED) {
++      if (!result || result->result != RESULT_SUCCEED) {
+               errno = ENOATTR;
+               return -1;
+       }
+@@ -254,7 +254,7 @@ static int shared_setxattr(const char *p
+ static ssize_t shared_listxattr(const char *path, int fd, char *list, size_t 
size) {
+       RC_AND_BUF
+       pseudo_msg_t *result = pseudo_client_op(OP_LIST_XATTR, 0, fd, -1, path, 
&buf);
+-      if (result->result != RESULT_SUCCEED) {
++      if (!result || result->result != RESULT_SUCCEED) {
+               pseudo_debug(PDBGF_XATTR, "listxattr: no success.\n");
+               errno = ENOATTR;
+               return -1;
+@@ -276,7 +276,7 @@ static int shared_removexattr(const char
+       RC_AND_BUF
+       pseudo_msg_t *result = pseudo_client_op(OP_REMOVE_XATTR, 0, fd, -1, 
path, &buf, name);
+ 
+-      if (result->result != RESULT_SUCCEED) {
++      if (!result || result->result != RESULT_SUCCEED) {
+               /* docs say ENOATTR, but I don't have one */
+               errno = ENOENT;
+               return -1;
diff --git a/meta/recipes-devtools/pseudo/pseudo_git.bb 
b/meta/recipes-devtools/pseudo/pseudo_git.bb
index a5e79ec9a5..7857b4f1b1 100644
--- a/meta/recipes-devtools/pseudo/pseudo_git.bb
+++ b/meta/recipes-devtools/pseudo/pseudo_git.bb
@@ -6,6 +6,7 @@ SRC_URI = "git://git.yoctoproject.org/pseudo;branch=oe-core \
            file://add_ignore_paths.patch \
            file://abort_on_mismatch.patch \
            file://track_link_fds.patch \
+           file://xattr_fix.patch \
            file://fallback-passwd \
            file://fallback-group \
            "
-- 
2.17.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#145218): 
https://lists.openembedded.org/g/openembedded-core/message/145218
Mute This Topic: https://lists.openembedded.org/mt/78686060/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to