[PATCH 1/1] fs: Allows for the pivot_root syscall to be optional

Brian Ashworth
2017-02-26T01:04:05Z

The pivot_root syscall is not needed on systems that do not use
any intermediate filesystem. Allowing for pivot_root to be
ommitted from the kernel will aid in the tinification efforts.

Without CONFIG_PIVOT_ROOT_SYSCALL set
add/remove: 0/2 grow/shrink: 1/0 up/down: 45/-707 (-662)
function old new delta
attach_recursive_mnt 349 394 +45
attach_mnt 71 - -71
sys_pivot_root 636 - -636
Total: Before=1899893, After=1899231, chg -0.03%

Signed-off-by: Brian Ashworth <bosrsf04@gmail.com>
---
fs/namespace.c | 2 ++
init/Kconfig | 10 ++++++++++
kernel/sys_ni.c | 1 +
3 files changed, 13 insertions(+)

diff --git a/fs/namespace.c b/fs/namespace.c
index 487ba30bb5c6..5e24a08bfb36 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -3058,6 +3058,7 @@ bool path_is_under(const struct path *path1, const struct path *path2)
}
EXPORT_SYMBOL(path_is_under);

+#ifdef CONFIG_PIVOT_ROOT_SYSCALL
/*
* pivot_root Semantics:
* Moves the root file system of the current process to the directory put_old,
@@ -3180,6 +3181,7 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root,
out0:
return error;
}
+#endif /* CONFIG_PIVOT_ROOT_SYSCALL */

static void __init init_mount_tree(void)
{
diff --git a/init/Kconfig b/init/Kconfig
index 8c39615165b7..4ea9ab25ec30 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1450,6 +1450,16 @@ config SYSCTL_SYSCALL

If unsure say N here.

+config PIVOT_ROOT_SYSCALL
+ bool "Pivot_root syscall support" if EXPERT
+ default y
+ help
+ pivot_root is a system call that allows the root to be moved and
+ replaced by another root. This is needed for intermediate file
+ systems such as initrd.
+
+ If unsure say Y here.
+
config POSIX_TIMERS
bool "Posix Clocks & timers" if EXPERT
default y
diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
index 8acef8576ce9..7bd207571f87 100644
--- a/kernel/sys_ni.c
+++ b/kernel/sys_ni.c
@@ -178,6 +178,7 @@ cond_syscall(sys_setfsgid);
cond_syscall(sys_capget);
cond_syscall(sys_capset);
cond_syscall(sys_copy_file_range);
+cond_syscall(sys_pivot_root);

/* arch-specific weak syscall entries */
cond_syscall(sys_pciconfig_read);
--
2.11.1