uml: update to linux 4.14

Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
Felix Fietkau 2018-09-29 18:04:39 +02:00
parent c3a0102195
commit 6bf3a86ed6
9 changed files with 68 additions and 353 deletions

View file

@ -22,7 +22,7 @@ BOARDNAME:=User Mode Linux
FEATURES:=squashfs ext4 audio source-only FEATURES:=squashfs ext4 audio source-only
MAINTAINER:=Florian Fainelli <florian@openwrt.org> MAINTAINER:=Florian Fainelli <florian@openwrt.org>
KERNEL_PATCHVER:=4.9 KERNEL_PATCHVER:=4.14
include $(INCLUDE_DIR)/target.mk include $(INCLUDE_DIR)/target.mk

View file

@ -2,14 +2,21 @@
# CONFIG_64BIT is not set # CONFIG_64BIT is not set
CONFIG_ARCH_DEFCONFIG="arch/um/configs/i386_defconfig" CONFIG_ARCH_DEFCONFIG="arch/um/configs/i386_defconfig"
# CONFIG_ARCH_HAS_GCOV_PROFILE_ALL is not set # CONFIG_ARCH_HAS_GCOV_PROFILE_ALL is not set
CONFIG_ARCH_HAS_KCOV=y
CONFIG_ARCH_HAS_SC_SIGNALS=y CONFIG_ARCH_HAS_SC_SIGNALS=y
# CONFIG_ARCH_HAS_SG_CHAIN is not set # CONFIG_ARCH_HAS_SG_CHAIN is not set
# CONFIG_ARCH_HAS_STRICT_KERNEL_RWX is not set
# CONFIG_ARCH_HAS_STRICT_MODULE_RWX is not set
# CONFIG_ARCH_OPTIONAL_KERNEL_RWX is not set
# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set
CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA=y CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA=y
CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
CONFIG_BLK_DEV_COW_COMMON=y CONFIG_BLK_DEV_COW_COMMON=y
CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_UBD=y CONFIG_BLK_DEV_UBD=y
CONFIG_BLK_DEV_UBD_SYNC=y CONFIG_BLK_DEV_UBD_SYNC=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_CLONE_BACKWARDS=y CONFIG_CLONE_BACKWARDS=y
CONFIG_CON_CHAN="xterm" CONFIG_CON_CHAN="xterm"
CONFIG_CON_ZERO_CHAN="fd:0,fd:1" CONFIG_CON_ZERO_CHAN="fd:0,fd:1"
@ -21,12 +28,12 @@ CONFIG_CPU_SUP_TRANSMETA_32=y
CONFIG_CPU_SUP_UMC_32=y CONFIG_CPU_SUP_UMC_32=y
# CONFIG_CRASHLOG is not set # CONFIG_CRASHLOG is not set
CONFIG_CRC16=y CONFIG_CRC16=y
CONFIG_CRYPTO_CRC32=y
CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_HASH=y CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG2=y CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_WORKQUEUE=y CONFIG_CRYPTO_WORKQUEUE=y
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_MEMORY_INIT=y CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_DECOMPRESS_BZIP2=y CONFIG_DECOMPRESS_BZIP2=y
CONFIG_DECOMPRESS_GZIP=y CONFIG_DECOMPRESS_GZIP=y
@ -43,17 +50,19 @@ CONFIG_F2FS_FS=y
CONFIG_F2FS_FS_XATTR=y CONFIG_F2FS_FS_XATTR=y
CONFIG_F2FS_STAT_FS=y CONFIG_F2FS_STAT_FS=y
CONFIG_FS_MBCACHE=y CONFIG_FS_MBCACHE=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CPU_DEVICES=y CONFIG_GENERIC_CPU_DEVICES=y
CONFIG_GENERIC_FIND_FIRST_BIT=y CONFIG_GENERIC_FIND_FIRST_BIT=y
CONFIG_GENERIC_IO=y CONFIG_GENERIC_IO=y
CONFIG_GENERIC_IRQ_SHOW=y CONFIG_GENERIC_IRQ_SHOW=y
# CONFIG_GRO_CELLS is not set
# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set # CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
CONFIG_HAVE_AOUT=y CONFIG_HAVE_AOUT=y
CONFIG_HAVE_ARCH_AUDITSYSCALL=y CONFIG_HAVE_ARCH_AUDITSYSCALL=y
# CONFIG_HAVE_ARCH_BITREVERSE is not set # CONFIG_HAVE_ARCH_BITREVERSE is not set
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
CONFIG_HAVE_DEBUG_KMEMLEAK=y
CONFIG_HAVE_FUTEX_CMPXCHG=y CONFIG_HAVE_FUTEX_CMPXCHG=y
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
CONFIG_HAVE_NET_DSA=y CONFIG_HAVE_NET_DSA=y
@ -67,7 +76,6 @@ CONFIG_IOSCHED_CFQ=y
CONFIG_IRQ_WORK=y CONFIG_IRQ_WORK=y
CONFIG_ISO9660_FS=y CONFIG_ISO9660_FS=y
CONFIG_JBD2=y CONFIG_JBD2=y
# CONFIG_JFFS2_CMODE_PRIORITY is not set
# CONFIG_JFFS2_FS is not set # CONFIG_JFFS2_FS is not set
CONFIG_KALLSYMS=y CONFIG_KALLSYMS=y
CONFIG_KERNEL_STACK_ORDER=2 CONFIG_KERNEL_STACK_ORDER=2
@ -85,6 +93,7 @@ CONFIG_MCONSOLE=y
# CONFIG_MCORE2 is not set # CONFIG_MCORE2 is not set
# CONFIG_MCRUSOE is not set # CONFIG_MCRUSOE is not set
# CONFIG_MCYRIXIII is not set # CONFIG_MCYRIXIII is not set
# CONFIG_MDIO_BUS is not set
# CONFIG_MEFFICEON is not set # CONFIG_MEFFICEON is not set
# CONFIG_MELAN is not set # CONFIG_MELAN is not set
# CONFIG_MGEODEGX1 is not set # CONFIG_MGEODEGX1 is not set
@ -109,6 +118,7 @@ CONFIG_NLS=y
# CONFIG_NOCONFIG_CHAN is not set # CONFIG_NOCONFIG_CHAN is not set
CONFIG_NO_DMA=y CONFIG_NO_DMA=y
CONFIG_NO_IOMEM=y CONFIG_NO_IOMEM=y
CONFIG_NR_CPUS=1
# CONFIG_NSC_GPIO is not set # CONFIG_NSC_GPIO is not set
CONFIG_NULL_CHAN=y CONFIG_NULL_CHAN=y
# CONFIG_OF is not set # CONFIG_OF is not set
@ -118,10 +128,10 @@ CONFIG_PGTABLE_LEVELS=2
CONFIG_PORT_CHAN=y CONFIG_PORT_CHAN=y
CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE=y
CONFIG_POSIX_MQUEUE_SYSCTL=y CONFIG_POSIX_MQUEUE_SYSCTL=y
CONFIG_PRINT_QUOTA_WARNING=y
# CONFIG_PROCESSOR_SELECT is not set # CONFIG_PROCESSOR_SELECT is not set
CONFIG_PROC_PAGE_MONITOR=y CONFIG_PROC_PAGE_MONITOR=y
CONFIG_PTY_CHAN=y CONFIG_PTY_CHAN=y
# CONFIG_RCU_NEED_SEGCBLIST is not set
# CONFIG_RCU_STALL_COMMON is not set # CONFIG_RCU_STALL_COMMON is not set
CONFIG_RD_BZIP2=y CONFIG_RD_BZIP2=y
CONFIG_RD_GZIP=y CONFIG_RD_GZIP=y
@ -134,7 +144,6 @@ CONFIG_SOFT_WATCHDOG=m
CONFIG_SOUND=m CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE=y CONFIG_SOUND_OSS_CORE=y
CONFIG_SOUND_OSS_CORE_PRECLAIM=y CONFIG_SOUND_OSS_CORE_PRECLAIM=y
CONFIG_SQUASHFS_EMBEDDED=y
CONFIG_SRCU=y CONFIG_SRCU=y
CONFIG_SSL=y CONFIG_SSL=y
CONFIG_SSL_CHAN="pty" CONFIG_SSL_CHAN="pty"
@ -142,7 +151,7 @@ CONFIG_STACKTRACE=y
CONFIG_STATIC_LINK=y CONFIG_STATIC_LINK=y
CONFIG_STDERR_CONSOLE=y CONFIG_STDERR_CONSOLE=y
CONFIG_TICK_CPU_ACCOUNTING=y CONFIG_TICK_CPU_ACCOUNTING=y
# CONFIG_TRACE_IRQFLAGS_SUPPORT is not set CONFIG_TINY_SRCU=y
CONFIG_TTY_CHAN=y CONFIG_TTY_CHAN=y
CONFIG_UML=y CONFIG_UML=y
CONFIG_UML_NET=y CONFIG_UML_NET=y
@ -175,4 +184,3 @@ CONFIG_X86_TSC=y
CONFIG_X86_USE_PPRO_CHECKSUM=y CONFIG_X86_USE_PPRO_CHECKSUM=y
CONFIG_XTERM_CHAN=y CONFIG_XTERM_CHAN=y
CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_INFLATE=y
CONFIG_ZONE_DMA_FLAG=0

View file

@ -2,14 +2,21 @@ CONFIG_3_LEVEL_PGTABLES=y
CONFIG_64BIT=y CONFIG_64BIT=y
CONFIG_ARCH_DEFCONFIG="arch/um/configs/x86_64_defconfig" CONFIG_ARCH_DEFCONFIG="arch/um/configs/x86_64_defconfig"
# CONFIG_ARCH_HAS_GCOV_PROFILE_ALL is not set # CONFIG_ARCH_HAS_GCOV_PROFILE_ALL is not set
CONFIG_ARCH_HAS_KCOV=y
# CONFIG_ARCH_HAS_SC_SIGNALS is not set # CONFIG_ARCH_HAS_SC_SIGNALS is not set
# CONFIG_ARCH_HAS_SG_CHAIN is not set # CONFIG_ARCH_HAS_SG_CHAIN is not set
# CONFIG_ARCH_HAS_STRICT_KERNEL_RWX is not set
# CONFIG_ARCH_HAS_STRICT_MODULE_RWX is not set
# CONFIG_ARCH_OPTIONAL_KERNEL_RWX is not set
# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set
# CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA is not set # CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA is not set
CONFIG_BINFMT_MISC=m CONFIG_BINFMT_MISC=m
CONFIG_BLK_DEV_COW_COMMON=y CONFIG_BLK_DEV_COW_COMMON=y
CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_UBD=y CONFIG_BLK_DEV_UBD=y
CONFIG_BLK_DEV_UBD_SYNC=y CONFIG_BLK_DEV_UBD_SYNC=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_CON_CHAN="xterm" CONFIG_CON_CHAN="xterm"
CONFIG_CON_ZERO_CHAN="fd:0,fd:1" CONFIG_CON_ZERO_CHAN="fd:0,fd:1"
CONFIG_CPU_SUP_AMD=y CONFIG_CPU_SUP_AMD=y
@ -18,16 +25,15 @@ CONFIG_CPU_SUP_INTEL=y
# CONFIG_CRASHLOG is not set # CONFIG_CRASHLOG is not set
CONFIG_CRC16=y CONFIG_CRC16=y
# CONFIG_CRYPTO_AES_X86_64 is not set # CONFIG_CRYPTO_AES_X86_64 is not set
CONFIG_CRYPTO_CRC32=y
CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_HASH=y CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG2=y CONFIG_CRYPTO_RNG2=y
# CONFIG_CRYPTO_SALSA20_X86_64 is not set
CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_SHA1=y
# CONFIG_CRYPTO_SKEIN is not set # CONFIG_CRYPTO_SKEIN is not set
# CONFIG_CRYPTO_TWOFISH_X86_64 is not set # CONFIG_CRYPTO_TWOFISH_X86_64 is not set
CONFIG_CRYPTO_WORKQUEUE=y CONFIG_CRYPTO_WORKQUEUE=y
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_MEMORY_INIT=y CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_DECOMPRESS_BZIP2=y CONFIG_DECOMPRESS_BZIP2=y
CONFIG_DECOMPRESS_GZIP=y CONFIG_DECOMPRESS_GZIP=y
@ -43,17 +49,19 @@ CONFIG_F2FS_FS=y
CONFIG_F2FS_FS_XATTR=y CONFIG_F2FS_FS_XATTR=y
CONFIG_F2FS_STAT_FS=y CONFIG_F2FS_STAT_FS=y
CONFIG_FS_MBCACHE=y CONFIG_FS_MBCACHE=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS=y
# CONFIG_GENERIC_CPU is not set # CONFIG_GENERIC_CPU is not set
CONFIG_GENERIC_CPU_DEVICES=y CONFIG_GENERIC_CPU_DEVICES=y
CONFIG_GENERIC_FIND_FIRST_BIT=y CONFIG_GENERIC_FIND_FIRST_BIT=y
CONFIG_GENERIC_IO=y CONFIG_GENERIC_IO=y
CONFIG_GENERIC_IRQ_SHOW=y CONFIG_GENERIC_IRQ_SHOW=y
# CONFIG_GRO_CELLS is not set
CONFIG_HAVE_64BIT_ALIGNED_ACCESS=y CONFIG_HAVE_64BIT_ALIGNED_ACCESS=y
CONFIG_HAVE_ARCH_AUDITSYSCALL=y CONFIG_HAVE_ARCH_AUDITSYSCALL=y
# CONFIG_HAVE_ARCH_BITREVERSE is not set # CONFIG_HAVE_ARCH_BITREVERSE is not set
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
CONFIG_HAVE_DEBUG_KMEMLEAK=y
CONFIG_HAVE_FUTEX_CMPXCHG=y CONFIG_HAVE_FUTEX_CMPXCHG=y
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
CONFIG_HAVE_NET_DSA=y CONFIG_HAVE_NET_DSA=y
@ -77,6 +85,7 @@ CONFIG_LEGACY_PTY_COUNT=256
# CONFIG_MATOM is not set # CONFIG_MATOM is not set
CONFIG_MCONSOLE=y CONFIG_MCONSOLE=y
# CONFIG_MCORE2 is not set # CONFIG_MCORE2 is not set
# CONFIG_MDIO_BUS is not set
CONFIG_MK8=y CONFIG_MK8=y
# CONFIG_MMAPPER is not set # CONFIG_MMAPPER is not set
CONFIG_MODULES_USE_ELF_RELA=y CONFIG_MODULES_USE_ELF_RELA=y
@ -88,6 +97,7 @@ CONFIG_NLS=y
# CONFIG_NOCONFIG_CHAN is not set # CONFIG_NOCONFIG_CHAN is not set
CONFIG_NO_DMA=y CONFIG_NO_DMA=y
CONFIG_NO_IOMEM=y CONFIG_NO_IOMEM=y
CONFIG_NR_CPUS=1
CONFIG_NULL_CHAN=y CONFIG_NULL_CHAN=y
# CONFIG_OF is not set # CONFIG_OF is not set
CONFIG_PGTABLE_LEVELS=3 CONFIG_PGTABLE_LEVELS=3
@ -98,6 +108,7 @@ CONFIG_POSIX_MQUEUE_SYSCTL=y
# CONFIG_PROCESSOR_SELECT is not set # CONFIG_PROCESSOR_SELECT is not set
CONFIG_PROC_PAGE_MONITOR=y CONFIG_PROC_PAGE_MONITOR=y
CONFIG_PTY_CHAN=y CONFIG_PTY_CHAN=y
# CONFIG_RCU_NEED_SEGCBLIST is not set
# CONFIG_RCU_STALL_COMMON is not set # CONFIG_RCU_STALL_COMMON is not set
CONFIG_RD_BZIP2=y CONFIG_RD_BZIP2=y
CONFIG_RD_GZIP=y CONFIG_RD_GZIP=y
@ -110,7 +121,6 @@ CONFIG_SOFT_WATCHDOG=m
CONFIG_SOUND=m CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE=y CONFIG_SOUND_OSS_CORE=y
CONFIG_SOUND_OSS_CORE_PRECLAIM=y CONFIG_SOUND_OSS_CORE_PRECLAIM=y
CONFIG_SQUASHFS_EMBEDDED=y
CONFIG_SRCU=y CONFIG_SRCU=y
CONFIG_SSL=y CONFIG_SSL=y
CONFIG_SSL_CHAN="pty" CONFIG_SSL_CHAN="pty"
@ -118,7 +128,7 @@ CONFIG_STACKTRACE=y
CONFIG_STATIC_LINK=y CONFIG_STATIC_LINK=y
CONFIG_STDERR_CONSOLE=y CONFIG_STDERR_CONSOLE=y
CONFIG_TICK_CPU_ACCOUNTING=y CONFIG_TICK_CPU_ACCOUNTING=y
# CONFIG_TRACE_IRQFLAGS_SUPPORT is not set CONFIG_TINY_SRCU=y
CONFIG_TTY_CHAN=y CONFIG_TTY_CHAN=y
CONFIG_UML=y CONFIG_UML=y
CONFIG_UML_NET=y CONFIG_UML_NET=y
@ -150,4 +160,3 @@ CONFIG_X86_TSC=y
CONFIG_X86_USE_PPRO_CHECKSUM=y CONFIG_X86_USE_PPRO_CHECKSUM=y
CONFIG_XTERM_CHAN=y CONFIG_XTERM_CHAN=y
CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_INFLATE=y
CONFIG_ZONE_DMA_FLAG=0

View file

@ -31,19 +31,19 @@
* Licensed under the GPL * Licensed under the GPL
*/ */
+#include "linux/kmod.h" +#include <linux/kmod.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/ctype.h> #include <linux/ctype.h>
#include <linux/string.h> #include <linux/string.h>
@@ -24,6 +25,7 @@ @@ -26,6 +27,7 @@
#include <linux/fs.h>
#include <linux/mount.h> #include <linux/mount.h>
#include <linux/file.h> #include <linux/file.h>
#include <linux/uaccess.h>
+#include <linux/completion.h> +#include <linux/completion.h>
#include <asm/uaccess.h>
#include <asm/switch_to.h> #include <asm/switch_to.h>
@@ -121,6 +123,59 @@ void mconsole_log(struct mc_request *req #include <init.h>
@@ -122,6 +124,59 @@ void mconsole_log(struct mc_request *req
mconsole_reply(req, "", 0, 0); mconsole_reply(req, "", 0, 0);
} }
@ -103,7 +103,7 @@
void mconsole_proc(struct mc_request *req) void mconsole_proc(struct mc_request *req)
{ {
struct vfsmount *mnt = task_active_pid_ns(current)->proc_mnt; struct vfsmount *mnt = task_active_pid_ns(current)->proc_mnt;
@@ -187,6 +242,7 @@ void mconsole_proc(struct mc_request *re @@ -183,6 +238,7 @@ void mconsole_proc(struct mc_request *re
stop - pause the UML; it will do nothing until it receives a 'go' \n\ stop - pause the UML; it will do nothing until it receives a 'go' \n\
go - continue the UML after a 'stop' \n\ go - continue the UML after a 'stop' \n\
log <string> - make UML enter <string> into the kernel log\n\ log <string> - make UML enter <string> into the kernel log\n\
@ -134,32 +134,34 @@
err = bind(sock, (struct sockaddr *) &addr, sizeof(addr)); err = bind(sock, (struct sockaddr *) &addr, sizeof(addr));
--- a/include/linux/kmod.h --- a/include/linux/kmod.h
+++ b/include/linux/kmod.h +++ b/include/linux/kmod.h
@@ -62,6 +62,7 @@ struct subprocess_info { @@ -45,4 +45,6 @@ static inline int request_module_nowait(
int wait; #define try_then_request_module(x, mod...) (x)
int retval; #endif
int (*init)(struct subprocess_info *info, struct cred *new);
+ struct file *stdout;
void (*cleanup)(struct subprocess_info *info);
void *data;
};
@@ -102,4 +103,6 @@ extern int usermodehelper_read_trylock(v
extern long usermodehelper_read_lock_wait(long timeout);
extern void usermodehelper_read_unlock(void);
+int call_usermodehelper_stdoutpipe(struct subprocess_info *sub_info, struct file **filp); +int call_usermodehelper_stdoutpipe(struct subprocess_info *sub_info, struct file **filp);
+ +
#endif /* __LINUX_KMOD_H__ */ #endif /* __LINUX_KMOD_H__ */
--- a/kernel/kmod.c --- a/include/linux/umh.h
+++ b/kernel/kmod.c +++ b/include/linux/umh.h
@@ -39,6 +39,7 @@ @@ -22,6 +22,7 @@ struct subprocess_info {
#include <linux/rwsem.h> const char *path;
char **argv;
char **envp;
+ struct file *stdout;
int wait;
int retval;
int (*init)(struct subprocess_info *info, struct cred *new);
--- a/kernel/umh.c
+++ b/kernel/umh.c
@@ -25,6 +25,7 @@
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/async.h> #include <linux/async.h>
#include <linux/uaccess.h>
+#include <linux/pipe_fs_i.h> +#include <linux/pipe_fs_i.h>
#include <asm/uaccess.h>
#include <trace/events/module.h> #include <trace/events/module.h>
@@ -222,6 +223,28 @@ static int call_usermodehelper_exec_asyn
@@ -70,6 +71,28 @@ static int call_usermodehelper_exec_asyn
flush_signal_handlers(current, 1); flush_signal_handlers(current, 1);
spin_unlock_irq(&current->sighand->siglock); spin_unlock_irq(&current->sighand->siglock);
@ -188,23 +190,23 @@
/* /*
* Our parent (unbound workqueue) runs with elevated scheduling * Our parent (unbound workqueue) runs with elevated scheduling
* priority. Avoid propagating that into the userspace child. * priority. Avoid propagating that into the userspace child.
@@ -540,6 +563,20 @@ struct subprocess_info *call_usermodehel @@ -393,6 +416,20 @@ struct subprocess_info *call_usermodehel
} }
EXPORT_SYMBOL(call_usermodehelper_setup); EXPORT_SYMBOL(call_usermodehelper_setup);
+int call_usermodehelper_stdoutpipe(struct subprocess_info *sub_info, +int call_usermodehelper_stdoutpipe(struct subprocess_info *sub_info,
+ struct file **filp) + struct file **filp)
+{ +{
+ struct file *f[2]; + struct file *f[2];
+ +
+ if (create_pipe_files(f, 0)<0) + if (create_pipe_files(f, 0) < 0)
+ return PTR_ERR(f); + return PTR_ERR(f);
+ sub_info->stdout = f[1]; +
+ *filp = f[0]; + sub_info->stdout = f[1];
+ return 0; + *filp = f[0];
+ return 0;
+} +}
+EXPORT_SYMBOL(call_usermodehelper_stdoutpipe); +EXPORT_SYMBOL(call_usermodehelper_stdoutpipe);
+
+ +
/** /**
* call_usermodehelper_exec - start a usermode application * call_usermodehelper_exec - start a usermode application

View file

@ -11,7 +11,7 @@ Applies to vanilla kernel 3.9.4.
=============================================================================== ===============================================================================
--- a/arch/um/Kconfig.net --- a/arch/um/Kconfig.net
+++ b/arch/um/Kconfig.net +++ b/arch/um/Kconfig.net
@@ -21,6 +21,19 @@ config UML_NET @@ -22,6 +22,19 @@ config UML_NET
enable at least one of the following transport options to actually enable at least one of the following transport options to actually
make use of UML networking. make use of UML networking.
@ -48,7 +48,7 @@ Applies to vanilla kernel 3.9.4.
#define DRIVER_NAME "uml-netdev" #define DRIVER_NAME "uml-netdev"
static DEFINE_SPINLOCK(opened_lock); static DEFINE_SPINLOCK(opened_lock);
@@ -295,11 +303,53 @@ static void uml_net_user_timer_expire(un @@ -288,11 +296,53 @@ static void uml_net_user_timer_expire(un
#endif #endif
} }
@ -102,7 +102,7 @@ Applies to vanilla kernel 3.9.4.
if (str == NULL) if (str == NULL)
goto random; goto random;
@@ -340,9 +390,26 @@ static void setup_etheraddr(struct net_d @@ -333,9 +383,26 @@ static void setup_etheraddr(struct net_d
return; return;
random: random:

View file

@ -1,130 +0,0 @@
From f44f1e7da7c8e3f4575d5d61c4df978496903fcc Mon Sep 17 00:00:00 2001
From: Florian Fainelli <f.fainelli@gmail.com>
Date: Tue, 23 May 2017 17:32:31 -0700
Subject: [PATCH] um: Avoid longjmp/setjmp symbol clashes with libpthread.a
[ Upstream commit f44f1e7da7c8e3f4575d5d61c4df978496903fcc ]
Building a statically linked UML kernel on a Centos 6.9 host resulted in
the following linking failure (GCC 4.4, glibc-2.12):
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/libpthread.a(libpthread.o):
In function `siglongjmp':
(.text+0x8490): multiple definition of `longjmp'
arch/x86/um/built-in.o:/local/users/fainelli/openwrt/trunk/build_dir/target-x86_64_musl/linux-uml/linux-4.4.69/arch/x86/um/setjmp_64.S:44:
first defined here
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/libpthread.a(libpthread.o):
In function `sem_open':
(.text+0x77cd): warning: the use of `mktemp' is dangerous, better use
`mkstemp'
collect2: ld returned 1 exit status
make[4]: *** [vmlinux] Error 1
Adopt a solution similar to the one done for vmap where we define
longjmp/setjmp to be kernel_longjmp/setjmp. In the process, make sure we
do rename the functions in arch/x86/um/setjmp_*.S accordingly.
Fixes: a7df4716d195 ("um: link with -lpthread")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
---
arch/um/Makefile | 4 ++++
arch/x86/um/setjmp_32.S | 16 ++++++++--------
arch/x86/um/setjmp_64.S | 16 ++++++++--------
3 files changed, 20 insertions(+), 16 deletions(-)
--- a/arch/um/Makefile
+++ b/arch/um/Makefile
@@ -59,10 +59,14 @@ KBUILD_CPPFLAGS += -I$(srctree)/$(HOST_D
# Same things for in6addr_loopback and mktime - found in libc. For these two we
# only get link-time error, luckily.
#
+# -Dlongjmp=kernel_longjmp prevents anything from referencing the libpthread.a
+# embedded copy of longjmp, same thing for setjmp.
+#
# These apply to USER_CFLAGS to.
KBUILD_CFLAGS += $(CFLAGS) $(CFLAGS-y) -D__arch_um__ \
$(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap \
+ -Dlongjmp=kernel_longjmp -Dsetjmp=kernel_setjmp \
-Din6addr_loopback=kernel_in6addr_loopback \
-Din6addr_any=kernel_in6addr_any -Dstrrchr=kernel_strrchr
--- a/arch/x86/um/setjmp_32.S
+++ b/arch/x86/um/setjmp_32.S
@@ -16,9 +16,9 @@
.text
.align 4
- .globl setjmp
- .type setjmp, @function
-setjmp:
+ .globl kernel_setjmp
+ .type kernel_setjmp, @function
+kernel_setjmp:
#ifdef _REGPARM
movl %eax,%edx
#else
@@ -35,13 +35,13 @@ setjmp:
movl %ecx,20(%edx) # Return address
ret
- .size setjmp,.-setjmp
+ .size kernel_setjmp,.-kernel_setjmp
.text
.align 4
- .globl longjmp
- .type longjmp, @function
-longjmp:
+ .globl kernel_longjmp
+ .type kernel_longjmp, @function
+kernel_longjmp:
#ifdef _REGPARM
xchgl %eax,%edx
#else
@@ -55,4 +55,4 @@ longjmp:
movl 16(%edx),%edi
jmp *20(%edx)
- .size longjmp,.-longjmp
+ .size kernel_longjmp,.-kernel_longjmp
--- a/arch/x86/um/setjmp_64.S
+++ b/arch/x86/um/setjmp_64.S
@@ -18,9 +18,9 @@
.text
.align 4
- .globl setjmp
- .type setjmp, @function
-setjmp:
+ .globl kernel_setjmp
+ .type kernel_setjmp, @function
+kernel_setjmp:
pop %rsi # Return address, and adjust the stack
xorl %eax,%eax # Return value
movq %rbx,(%rdi)
@@ -34,13 +34,13 @@ setjmp:
movq %rsi,56(%rdi) # Return address
ret
- .size setjmp,.-setjmp
+ .size kernel_setjmp,.-kernel_setjmp
.text
.align 4
- .globl longjmp
- .type longjmp, @function
-longjmp:
+ .globl kernel_longjmp
+ .type kernel_longjmp, @function
+kernel_longjmp:
movl %esi,%eax # Return value (int)
movq (%rdi),%rbx
movq 8(%rdi),%rsp
@@ -51,4 +51,4 @@ longjmp:
movq 48(%rdi),%r15
jmp *56(%rdi)
- .size longjmp,.-longjmp
+ .size kernel_longjmp,.-kernel_longjmp

View file

@ -1,99 +0,0 @@
From 0a987645672ebde7844a9c0732a5a25f3d4bb6c6 Mon Sep 17 00:00:00 2001
From: Florian Fainelli <f.fainelli@gmail.com>
Date: Thu, 25 May 2017 11:36:26 -0700
Subject: [PATCH] um: Allow building and running on older hosts
[ Upstream commit 0a987645672ebde7844a9c0732a5a25f3d4bb6c6 ]
Commit a78ff1112263 ("um: add extended processor state save/restore
support") and b6024b21fec8 ("um: extend fpstate to _xstate to support
YMM registers") forced the use of the x86 FP _xstate and
PTRACE_GETREGSET/SETREGSET. On older hosts, we would neither be able to
build UML nor run it anymore with these two commits applied because we
don't have definitions for struct _xstate nor these two ptrace requests.
We can determine at build time which fp context structure to check
against, just like we can keep using the old i387 fp save/restore if
PTRACE_GETRESET/SETREGSET are not defined.
Fixes: a78ff1112263 ("um: add extended processor state save/restore support")
Fixes: b6024b21fec8 ("um: extend fpstate to _xstate to support YMM registers")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
---
arch/x86/um/os-Linux/registers.c | 12 ++++++++----
arch/x86/um/user-offsets.c | 4 ++++
2 files changed, 12 insertions(+), 4 deletions(-)
--- a/arch/x86/um/os-Linux/registers.c
+++ b/arch/x86/um/os-Linux/registers.c
@@ -26,6 +26,7 @@ int save_i387_registers(int pid, unsigne
int save_fp_registers(int pid, unsigned long *fp_regs)
{
+#ifdef PTRACE_GETREGSET
struct iovec iov;
if (have_xstate_support) {
@@ -34,9 +35,9 @@ int save_fp_registers(int pid, unsigned
if (ptrace(PTRACE_GETREGSET, pid, NT_X86_XSTATE, &iov) < 0)
return -errno;
return 0;
- } else {
+ } else
+#endif
return save_i387_registers(pid, fp_regs);
- }
}
int restore_i387_registers(int pid, unsigned long *fp_regs)
@@ -48,6 +49,7 @@ int restore_i387_registers(int pid, unsi
int restore_fp_registers(int pid, unsigned long *fp_regs)
{
+#ifdef PTRACE_SETREGSET
struct iovec iov;
if (have_xstate_support) {
@@ -56,9 +58,9 @@ int restore_fp_registers(int pid, unsign
if (ptrace(PTRACE_SETREGSET, pid, NT_X86_XSTATE, &iov) < 0)
return -errno;
return 0;
- } else {
+ } else
+#endif
return restore_i387_registers(pid, fp_regs);
- }
}
#ifdef __i386__
@@ -122,6 +124,7 @@ int put_fp_registers(int pid, unsigned l
void arch_init_registers(int pid)
{
+#ifdef PTRACE_GETREGSET
struct _xstate fp_regs;
struct iovec iov;
@@ -129,6 +132,7 @@ void arch_init_registers(int pid)
iov.iov_len = sizeof(struct _xstate);
if (ptrace(PTRACE_GETREGSET, pid, NT_X86_XSTATE, &iov) == 0)
have_xstate_support = 1;
+#endif
}
#endif
--- a/arch/x86/um/user-offsets.c
+++ b/arch/x86/um/user-offsets.c
@@ -50,7 +50,11 @@ void foo(void)
DEFINE(HOST_GS, GS);
DEFINE(HOST_ORIG_AX, ORIG_EAX);
#else
+#if defined(PTRACE_GETREGSET) && defined(PTRACE_SETREGSET)
DEFINE(HOST_FP_SIZE, sizeof(struct _xstate) / sizeof(unsigned long));
+#else
+ DEFINE(HOST_FP_SIZE, sizeof(struct _fpstate) / sizeof(unsigned long));
+#endif
DEFINE_LONGS(HOST_BX, RBX);
DEFINE_LONGS(HOST_CX, RCX);
DEFINE_LONGS(HOST_DI, RDI);

View file

@ -1,29 +0,0 @@
From 61e8d462457f202bf0c6393133425ad387825e22 Mon Sep 17 00:00:00 2001
From: Richard Weinberger <richard@nod.at>
Date: Thu, 6 Jul 2017 09:35:27 +0200
Subject: [PATCH] um: Correctly check for PTRACE_GETRESET/SETREGSET
[ Upstream commit 61e8d462457f202bf0c6393133425ad387825e22 ]
When checking for PTRACE_GETRESET/SETREGSET, make sure that
the correct header file is included. We need linux/ptrace.h
which contains all ptrace UAPI related defines.
Otherwise #if defined(PTRACE_GETRESET) is always false.
Cc: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
---
arch/x86/um/user-offsets.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/arch/x86/um/user-offsets.c
+++ b/arch/x86/um/user-offsets.c
@@ -5,7 +5,7 @@
#include <sys/mman.h>
#include <sys/user.h>
#define __FRAME_OFFSETS
-#include <asm/ptrace.h>
+#include <linux/ptrace.h>
#include <asm/types.h>
#ifdef __i386__

View file

@ -1,46 +0,0 @@
From 2fb44600fe784449404c6639de26af8361999ec7 Mon Sep 17 00:00:00 2001
From: Florian Fainelli <f.fainelli@gmail.com>
Date: Tue, 18 Jul 2017 16:43:47 -0700
Subject: [PATCH] um: Fix check for _xstate for older hosts
Commit 0a987645672e ("um: Allow building and running on older
hosts") attempted to check for PTRACE_{GET,SET}REGSET under the premise
that these ptrace(2) parameters were directly linked with the presence
of the _xstate structure.
After Richard's commit 61e8d462457f ("um: Correctly check for
PTRACE_GETRESET/SETREGSET") which properly included linux/ptrace.h
instead of asm/ptrace.h, we could get into the original build failure
that I reported:
arch/x86/um/user-offsets.c: In function 'foo':
arch/x86/um/user-offsets.c:54: error: invalid application of 'sizeof' to
incomplete type 'struct _xstate'
On this particular host, we do have PTRACE_GETREGSET and
PTRACE_SETREGSET defined in linux/ptrace.h, but not the structure
_xstate that should be pulled from the following include chain: signal.h
-> bits/sigcontext.h.
Correctly fix this by checking for FP_XSTATE_MAGIC1 which is the correct
way to see if struct _xstate is available or not on the host.
Fixes: 61e8d462457f ("um: Correctly check for PTRACE_GETRESET/SETREGSET")
Fixes: 0a987645672e ("um: Allow building and running on older hosts")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
---
arch/x86/um/user-offsets.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/arch/x86/um/user-offsets.c
+++ b/arch/x86/um/user-offsets.c
@@ -50,7 +50,7 @@ void foo(void)
DEFINE(HOST_GS, GS);
DEFINE(HOST_ORIG_AX, ORIG_EAX);
#else
-#if defined(PTRACE_GETREGSET) && defined(PTRACE_SETREGSET)
+#ifdef FP_XSTATE_MAGIC1
DEFINE(HOST_FP_SIZE, sizeof(struct _xstate) / sizeof(unsigned long));
#else
DEFINE(HOST_FP_SIZE, sizeof(struct _fpstate) / sizeof(unsigned long));