|
@@ -149,18 +149,33 @@ noinherit_mem(void *mem, size_t sz, inherit_res_t *inherit_result_out)
|
|
|
return 0;
|
|
|
}
|
|
|
#endif /* defined(FLAG_ZERO) */
|
|
|
+
|
|
|
#ifdef FLAG_NOINHERIT
|
|
|
int r2 = MINHERIT(mem, sz, FLAG_NOINHERIT);
|
|
|
if (r2 == 0) {
|
|
|
*inherit_result_out = INHERIT_RES_DROP;
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+#endif /* defined(FLAG_NOINHERIT) */
|
|
|
+
|
|
|
+#if defined(FLAG_ZERO) || defined(FLAG_NOINHERIT)
|
|
|
+ /* At least one operation was tried, and neither succeeded. */
|
|
|
+
|
|
|
+ if (errno == ENOSYS || errno == EINVAL) {
|
|
|
+ /* Syscall not supported, or flag not supported. */
|
|
|
+ return 0;
|
|
|
+ } else {
|
|
|
+ tor_log_err_sigsafe("Unexpected error from minherit: ",
|
|
|
+ strerror(errno),
|
|
|
+ NULL);
|
|
|
+ return -1;
|
|
|
}
|
|
|
- return r2;
|
|
|
-#else /* !(defined(FLAG_NOINHERIT)) */
|
|
|
+#else
|
|
|
(void)inherit_result_out;
|
|
|
(void)mem;
|
|
|
(void)sz;
|
|
|
return 0;
|
|
|
-#endif /* defined(FLAG_NOINHERIT) */
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
/**
|