summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/pseudo/files
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2020-10-01 18:20:06 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-10-07 11:18:38 +0100
commit958447ff2f130ece0e3f40eb2b5df5ed61f77366 (patch)
treea10288eadf801280b84d2ecbd32e6fe9fe677058 /meta/recipes-devtools/pseudo/files
parent842de9dbba53d04644e1c491fc0d4681d66680fd (diff)
downloadpoky-958447ff2f130ece0e3f40eb2b5df5ed61f77366.tar.gz
pseudo: Fix xattr segfault
Fix a NULL pointer dereference exposed by the path ignore code in xattr handling. (From OE-Core rev: 929a27bf6cbca94d1141d2094ae0c915d93bd3f4) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools/pseudo/files')
-rw-r--r--meta/recipes-devtools/pseudo/files/xattr_fix.patch40
1 files changed, 40 insertions, 0 deletions
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 @@
1
2In the xattr handling functions, if result is NULL, which it can be
3with the path ignore code, there is a NULL pointer dereference and
4segfault. Everywhere else checks result first, this appears to just
5be an omission.
6
7Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
8Upstream-Status: Pending
9
10Index: git/ports/linux/xattr/pseudo_wrappers.c
11===================================================================
12--- git.orig/ports/linux/xattr/pseudo_wrappers.c
13+++ git/ports/linux/xattr/pseudo_wrappers.c
14@@ -134,7 +134,7 @@ static ssize_t shared_getxattr(const cha
15 pseudo_debug(PDBGF_XATTR, "getxattr(%s [fd %d], %s)\n",
16 path ? path : "<no path>", fd, name);
17 pseudo_msg_t *result = pseudo_client_op(OP_GET_XATTR, 0, fd, -1, path, &buf, name);
18- if (result->result != RESULT_SUCCEED) {
19+ if (!result || result->result != RESULT_SUCCEED) {
20 errno = ENOATTR;
21 return -1;
22 }
23@@ -254,7 +254,7 @@ static int shared_setxattr(const char *p
24 static ssize_t shared_listxattr(const char *path, int fd, char *list, size_t size) {
25 RC_AND_BUF
26 pseudo_msg_t *result = pseudo_client_op(OP_LIST_XATTR, 0, fd, -1, path, &buf);
27- if (result->result != RESULT_SUCCEED) {
28+ if (!result || result->result != RESULT_SUCCEED) {
29 pseudo_debug(PDBGF_XATTR, "listxattr: no success.\n");
30 errno = ENOATTR;
31 return -1;
32@@ -276,7 +276,7 @@ static int shared_removexattr(const char
33 RC_AND_BUF
34 pseudo_msg_t *result = pseudo_client_op(OP_REMOVE_XATTR, 0, fd, -1, path, &buf, name);
35
36- if (result->result != RESULT_SUCCEED) {
37+ if (!result || result->result != RESULT_SUCCEED) {
38 /* docs say ENOATTR, but I don't have one */
39 errno = ENOENT;
40 return -1;