Rejecting non-Linux pivot_root(2).
Some non-Linux systems implement pivot_root(2), even if they don't document that. An example is MacOS: $ grepc pivot_root / 2>/dev/null .../sys/sysproto.h:3012: int pivot_root(struct proc *, struct pivot_root_args *, int *); Since the prototype of the syscall differs from that of Linux, we can't use that syscall. Let's make sure the test only detects pivot_root(2) under Linux. Also, rename the feature macro to make clear that it's only about Linux's pivot_root(2). This closes #737 issue on GitHub.
This commit is contained in:
@@ -61,11 +61,14 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
nxt_feature="Linux pivot_root()"
|
nxt_feature="Linux pivot_root()"
|
||||||
nxt_feature_name=NXT_HAVE_PIVOT_ROOT
|
nxt_feature_name=NXT_HAVE_LINUX_PIVOT_ROOT
|
||||||
nxt_feature_run=no
|
nxt_feature_run=no
|
||||||
nxt_feature_incs=
|
nxt_feature_incs=
|
||||||
nxt_feature_libs=
|
nxt_feature_libs=
|
||||||
nxt_feature_test="#include <sys/syscall.h>
|
nxt_feature_test="#include <sys/syscall.h>
|
||||||
|
#if !defined(__linux__)
|
||||||
|
# error
|
||||||
|
#endif
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
return SYS_pivot_root;
|
return SYS_pivot_root;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ static int nxt_cdecl nxt_isolation_mount_compare(const void *v1,
|
|||||||
const void *v2);
|
const void *v2);
|
||||||
static void nxt_isolation_unmount_all(nxt_task_t *task, nxt_process_t *process);
|
static void nxt_isolation_unmount_all(nxt_task_t *task, nxt_process_t *process);
|
||||||
|
|
||||||
#if (NXT_HAVE_PIVOT_ROOT) && (NXT_HAVE_CLONE_NEWNS)
|
#if (NXT_HAVE_LINUX_PIVOT_ROOT) && (NXT_HAVE_CLONE_NEWNS)
|
||||||
static nxt_int_t nxt_isolation_pivot_root(nxt_task_t *task, const char *rootfs);
|
static nxt_int_t nxt_isolation_pivot_root(nxt_task_t *task, const char *rootfs);
|
||||||
static nxt_int_t nxt_isolation_make_private_mount(nxt_task_t *task,
|
static nxt_int_t nxt_isolation_make_private_mount(nxt_task_t *task,
|
||||||
const char *rootfs);
|
const char *rootfs);
|
||||||
@@ -752,7 +752,7 @@ undo:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if (NXT_HAVE_PIVOT_ROOT) && (NXT_HAVE_CLONE_NEWNS)
|
#if (NXT_HAVE_LINUX_PIVOT_ROOT) && (NXT_HAVE_CLONE_NEWNS)
|
||||||
|
|
||||||
nxt_int_t
|
nxt_int_t
|
||||||
nxt_isolation_change_root(nxt_task_t *task, nxt_process_t *process)
|
nxt_isolation_change_root(nxt_task_t *task, nxt_process_t *process)
|
||||||
@@ -1007,7 +1007,7 @@ nxt_pivot_root(const char *new_root, const char *old_root)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#else /* !(NXT_HAVE_PIVOT_ROOT) || !(NXT_HAVE_CLONE_NEWNS) */
|
#else /* !(NXT_HAVE_LINUX_PIVOT_ROOT) || !(NXT_HAVE_CLONE_NEWNS) */
|
||||||
|
|
||||||
|
|
||||||
nxt_int_t
|
nxt_int_t
|
||||||
|
|||||||
Reference in New Issue
Block a user