about summary refs log tree commit diff
path: root/src/unistd/setxid.c
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2015-01-15 07:09:14 -0500
committerRich Felker <dalias@aerifal.cx>2015-01-15 07:09:14 -0500
commit472e8b71f7a90ab23f1499fd721b872541f52de9 (patch)
tree4b4be3ff0e05264ce4929eb80e02dee5a42e3029 /src/unistd/setxid.c
parent996d148bf14b477b07fa3691bffeb930c67b2b62 (diff)
downloadmusl-472e8b71f7a90ab23f1499fd721b872541f52de9.tar.gz
musl-472e8b71f7a90ab23f1499fd721b872541f52de9.tar.xz
musl-472e8b71f7a90ab23f1499fd721b872541f52de9.zip
for multithreaded set*id/setrlimit, handle case where callback does not run
in the current version of __synccall, the callback is always run, so
failure to handle this case did not matter. however, the upcoming
overhaul of __synccall will have failure cases, in which case the
callback does not run and errno is already set. the changes being
committed now are in preparation for that.
Diffstat (limited to 'src/unistd/setxid.c')
-rw-r--r--src/unistd/setxid.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/unistd/setxid.c b/src/unistd/setxid.c
index 9e37ddc4..0239f8af 100644
--- a/src/unistd/setxid.c
+++ b/src/unistd/setxid.c
@@ -32,7 +32,7 @@ int __setxid(int nr, int id, int eid, int sid)
 	struct ctx c = { .nr = nr, .id = id, .eid = eid, .sid = sid, .err = -1 };
 	__synccall(do_setxid, &c);
 	if (c.err) {
-		errno = c.err;
+		if (c.err>0) errno = c.err;
 		return -1;
 	}
 	return 0;