diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-12 17:52:13 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-12 17:52:13 -0400 |
| commit | 983dfa4b6ee556563f7963348e4e2f97fc8a15b8 (patch) | |
| tree | 394ca60456f251e0308cf55816407261b1bd39d2 | |
| parent | 47782361aca21a32ad4198f1b72f1655a7c9f7e5 (diff) | |
| parent | 1987b1b8f9f17a06255877e7917d0bb5b5377774 (diff) | |
Merge tag 'for-linus-5.2-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/rw/uml
Pull UML updates from Richard Weinberger:
- Kconfig cleanups
- Fix cpu_all_mask() usage
- Various bug fixes
* tag 'for-linus-5.2-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/rw/uml:
um: irq: don't set the chip for all irqs
um: define set_pte_at() as a static inline function, not a macro
um: remove uses of variable length arrays
um: remove unused variable
uml: fix a boot splat wrt use of cpu_all_mask
um: Do not unlock mutex that is not hold.
hostfs: fix mismatch between link_file definition and declaration
arch: um: drivers: Kconfig: pedantic formatting
arch: um: Kconfig: pedantic indention cleanups
um: Revert to using stack for pt_regs in signal handling
| -rw-r--r-- | arch/um/Kconfig | 58 | ||||
| -rw-r--r-- | arch/um/drivers/Kconfig | 352 | ||||
| -rw-r--r-- | arch/um/drivers/ubd_kern.c | 4 | ||||
| -rw-r--r-- | arch/um/include/asm/pgtable.h | 7 | ||||
| -rw-r--r-- | arch/um/kernel/irq.c | 2 | ||||
| -rw-r--r-- | arch/um/kernel/skas/uaccess.c | 1 | ||||
| -rw-r--r-- | arch/um/kernel/time.c | 2 | ||||
| -rw-r--r-- | arch/um/os-Linux/signal.c | 28 | ||||
| -rw-r--r-- | arch/um/os-Linux/umid.c | 36 | ||||
| -rw-r--r-- | fs/hostfs/hostfs.h | 2 |
10 files changed, 253 insertions, 239 deletions
diff --git a/arch/um/Kconfig b/arch/um/Kconfig index ec9711d068b7..6b6eb938fcc1 100644 --- a/arch/um/Kconfig +++ b/arch/um/Kconfig | |||
| @@ -80,46 +80,46 @@ config LD_SCRIPT_DYN | |||
| 80 | bool | 80 | bool |
| 81 | default y | 81 | default y |
| 82 | depends on !LD_SCRIPT_STATIC | 82 | depends on !LD_SCRIPT_STATIC |
| 83 | select MODULE_REL_CRCS if MODVERSIONS | 83 | select MODULE_REL_CRCS if MODVERSIONS |
| 84 | 84 | ||
| 85 | config HOSTFS | 85 | config HOSTFS |
| 86 | tristate "Host filesystem" | 86 | tristate "Host filesystem" |
| 87 | help | 87 | help |
| 88 | While the User-Mode Linux port uses its own root file system for | 88 | While the User-Mode Linux port uses its own root file system for |
| 89 | booting and normal file access, this module lets the UML user | 89 | booting and normal file access, this module lets the UML user |
| 90 | access files stored on the host. It does not require any | 90 | access files stored on the host. It does not require any |
| 91 | network connection between the Host and UML. An example use of | 91 | network connection between the Host and UML. An example use of |
| 92 | this might be: | 92 | this might be: |
| 93 | 93 | ||
| 94 | mount none /tmp/fromhost -t hostfs -o /tmp/umlshare | 94 | mount none /tmp/fromhost -t hostfs -o /tmp/umlshare |
| 95 | 95 | ||
| 96 | where /tmp/fromhost is an empty directory inside UML and | 96 | where /tmp/fromhost is an empty directory inside UML and |
| 97 | /tmp/umlshare is a directory on the host with files the UML user | 97 | /tmp/umlshare is a directory on the host with files the UML user |
| 98 | wishes to access. | 98 | wishes to access. |
| 99 | 99 | ||
| 100 | For more information, see | 100 | For more information, see |
| 101 | <http://user-mode-linux.sourceforge.net/hostfs.html>. | 101 | <http://user-mode-linux.sourceforge.net/hostfs.html>. |
| 102 | 102 | ||
| 103 | If you'd like to be able to work with files stored on the host, | 103 | If you'd like to be able to work with files stored on the host, |
| 104 | say Y or M here; otherwise say N. | 104 | say Y or M here; otherwise say N. |
| 105 | 105 | ||
| 106 | config MCONSOLE | 106 | config MCONSOLE |
| 107 | bool "Management console" | 107 | bool "Management console" |
| 108 | depends on PROC_FS | 108 | depends on PROC_FS |
| 109 | default y | 109 | default y |
| 110 | help | 110 | help |
| 111 | The user mode linux management console is a low-level interface to | 111 | The user mode linux management console is a low-level interface to |
| 112 | the kernel, somewhat like the i386 SysRq interface. Since there is | 112 | the kernel, somewhat like the i386 SysRq interface. Since there is |
| 113 | a full-blown operating system running under every user mode linux | 113 | a full-blown operating system running under every user mode linux |
| 114 | instance, there is much greater flexibility possible than with the | 114 | instance, there is much greater flexibility possible than with the |
| 115 | SysRq mechanism. | 115 | SysRq mechanism. |
| 116 | 116 | ||
| 117 | If you answer 'Y' to this option, to use this feature, you need the | 117 | If you answer 'Y' to this option, to use this feature, you need the |
| 118 | mconsole client (called uml_mconsole) which is present in CVS in | 118 | mconsole client (called uml_mconsole) which is present in CVS in |
| 119 | 2.4.5-9um and later (path /tools/mconsole), and is also in the | 119 | 2.4.5-9um and later (path /tools/mconsole), and is also in the |
| 120 | distribution RPM package in 2.4.6 and later. | 120 | distribution RPM package in 2.4.6 and later. |
| 121 | 121 | ||
| 122 | It is safe to say 'Y' here. | 122 | It is safe to say 'Y' here. |
| 123 | 123 | ||
| 124 | config MAGIC_SYSRQ | 124 | config MAGIC_SYSRQ |
| 125 | bool "Magic SysRq key" | 125 | bool "Magic SysRq key" |
| @@ -142,13 +142,17 @@ config MAGIC_SYSRQ | |||
| 142 | 142 | ||
| 143 | config KERNEL_STACK_ORDER | 143 | config KERNEL_STACK_ORDER |
| 144 | int "Kernel stack size order" | 144 | int "Kernel stack size order" |
| 145 | default 1 if 64BIT | 145 | default 2 if 64BIT |
| 146 | range 1 10 if 64BIT | 146 | range 2 10 if 64BIT |
| 147 | default 0 if !64BIT | 147 | default 1 if !64BIT |
| 148 | help | 148 | help |
| 149 | This option determines the size of UML kernel stacks. They will | 149 | This option determines the size of UML kernel stacks. They will |
| 150 | be 1 << order pages. The default is OK unless you're running Valgrind | 150 | be 1 << order pages. The default is OK unless you're running Valgrind |
| 151 | on UML, in which case, set this to 3. | 151 | on UML, in which case, set this to 3. |
| 152 | It is possible to reduce the stack to 1 for 64BIT and 0 for 32BIT on | ||
| 153 | older (pre-2017) CPUs. It is not recommended on newer CPUs due to the | ||
| 154 | increase in the size of the state which needs to be saved when handling | ||
| 155 | signals. | ||
| 152 | 156 | ||
| 153 | config MMAPPER | 157 | config MMAPPER |
| 154 | tristate "iomem emulation driver" | 158 | tristate "iomem emulation driver" |
diff --git a/arch/um/drivers/Kconfig b/arch/um/drivers/Kconfig index 2b1aaf7755aa..2638e46f50cc 100644 --- a/arch/um/drivers/Kconfig +++ b/arch/um/drivers/Kconfig | |||
| @@ -11,58 +11,58 @@ config STDERR_CONSOLE | |||
| 11 | config SSL | 11 | config SSL |
| 12 | bool "Virtual serial line" | 12 | bool "Virtual serial line" |
| 13 | help | 13 | help |
| 14 | The User-Mode Linux environment allows you to create virtual serial | 14 | The User-Mode Linux environment allows you to create virtual serial |
| 15 | lines on the UML that are usually made to show up on the host as | 15 | lines on the UML that are usually made to show up on the host as |
| 16 | ttys or ptys. | 16 | ttys or ptys. |
| 17 | 17 | ||
| 18 | See <http://user-mode-linux.sourceforge.net/old/input.html> for more | 18 | See <http://user-mode-linux.sourceforge.net/old/input.html> for more |
| 19 | information and command line examples of how to use this facility. | 19 | information and command line examples of how to use this facility. |
| 20 | 20 | ||
| 21 | Unless you have a specific reason for disabling this, say Y. | 21 | Unless you have a specific reason for disabling this, say Y. |
| 22 | 22 | ||
| 23 | config NULL_CHAN | 23 | config NULL_CHAN |
| 24 | bool "null channel support" | 24 | bool "null channel support" |
| 25 | help | 25 | help |
| 26 | This option enables support for attaching UML consoles and serial | 26 | This option enables support for attaching UML consoles and serial |
| 27 | lines to a device similar to /dev/null. Data written to it disappears | 27 | lines to a device similar to /dev/null. Data written to it disappears |
| 28 | and there is never any data to be read. | 28 | and there is never any data to be read. |
| 29 | 29 | ||
| 30 | config PORT_CHAN | 30 | config PORT_CHAN |
| 31 | bool "port channel support" | 31 | bool "port channel support" |
| 32 | help | 32 | help |
| 33 | This option enables support for attaching UML consoles and serial | 33 | This option enables support for attaching UML consoles and serial |
| 34 | lines to host portals. They may be accessed with 'telnet <host> | 34 | lines to host portals. They may be accessed with 'telnet <host> |
| 35 | <port number>'. Any number of consoles and serial lines may be | 35 | <port number>'. Any number of consoles and serial lines may be |
| 36 | attached to a single portal, although what UML device you get when | 36 | attached to a single portal, although what UML device you get when |
| 37 | you telnet to that portal will be unpredictable. | 37 | you telnet to that portal will be unpredictable. |
| 38 | It is safe to say 'Y' here. | 38 | It is safe to say 'Y' here. |
| 39 | 39 | ||
| 40 | config PTY_CHAN | 40 | config PTY_CHAN |
| 41 | bool "pty channel support" | 41 | bool "pty channel support" |
| 42 | help | 42 | help |
| 43 | This option enables support for attaching UML consoles and serial | 43 | This option enables support for attaching UML consoles and serial |
| 44 | lines to host pseudo-terminals. Access to both traditional | 44 | lines to host pseudo-terminals. Access to both traditional |
| 45 | pseudo-terminals (/dev/pty*) and pts pseudo-terminals are controlled | 45 | pseudo-terminals (/dev/pty*) and pts pseudo-terminals are controlled |
| 46 | with this option. The assignment of UML devices to host devices | 46 | with this option. The assignment of UML devices to host devices |
| 47 | will be announced in the kernel message log. | 47 | will be announced in the kernel message log. |
| 48 | It is safe to say 'Y' here. | 48 | It is safe to say 'Y' here. |
| 49 | 49 | ||
| 50 | config TTY_CHAN | 50 | config TTY_CHAN |
| 51 | bool "tty channel support" | 51 | bool "tty channel support" |
| 52 | help | 52 | help |
| 53 | This option enables support for attaching UML consoles and serial | 53 | This option enables support for attaching UML consoles and serial |
| 54 | lines to host terminals. Access to both virtual consoles | 54 | lines to host terminals. Access to both virtual consoles |
| 55 | (/dev/tty*) and the slave side of pseudo-terminals (/dev/ttyp* and | 55 | (/dev/tty*) and the slave side of pseudo-terminals (/dev/ttyp* and |
| 56 | /dev/pts/*) are controlled by this option. | 56 | /dev/pts/*) are controlled by this option. |
| 57 | It is safe to say 'Y' here. | 57 | It is safe to say 'Y' here. |
| 58 | 58 | ||
| 59 | config XTERM_CHAN | 59 | config XTERM_CHAN |
| 60 | bool "xterm channel support" | 60 | bool "xterm channel support" |
| 61 | help | 61 | help |
| 62 | This option enables support for attaching UML consoles and serial | 62 | This option enables support for attaching UML consoles and serial |
| 63 | lines to xterms. Each UML device so assigned will be brought up in | 63 | lines to xterms. Each UML device so assigned will be brought up in |
| 64 | its own xterm. | 64 | its own xterm. |
| 65 | It is safe to say 'Y' here. | 65 | It is safe to say 'Y' here. |
| 66 | 66 | ||
| 67 | config NOCONFIG_CHAN | 67 | config NOCONFIG_CHAN |
| 68 | bool | 68 | bool |
| @@ -72,43 +72,43 @@ config CON_ZERO_CHAN | |||
| 72 | string "Default main console channel initialization" | 72 | string "Default main console channel initialization" |
| 73 | default "fd:0,fd:1" | 73 | default "fd:0,fd:1" |
| 74 | help | 74 | help |
| 75 | This is the string describing the channel to which the main console | 75 | This is the string describing the channel to which the main console |
| 76 | will be attached by default. This value can be overridden from the | 76 | will be attached by default. This value can be overridden from the |
| 77 | command line. The default value is "fd:0,fd:1", which attaches the | 77 | command line. The default value is "fd:0,fd:1", which attaches the |
| 78 | main console to stdin and stdout. | 78 | main console to stdin and stdout. |
| 79 | It is safe to leave this unchanged. | 79 | It is safe to leave this unchanged. |
| 80 | 80 | ||
| 81 | config CON_CHAN | 81 | config CON_CHAN |
| 82 | string "Default console channel initialization" | 82 | string "Default console channel initialization" |
| 83 | default "xterm" | 83 | default "xterm" |
| 84 | help | 84 | help |
| 85 | This is the string describing the channel to which all consoles | 85 | This is the string describing the channel to which all consoles |
| 86 | except the main console will be attached by default. This value can | 86 | except the main console will be attached by default. This value can |
| 87 | be overridden from the command line. The default value is "xterm", | 87 | be overridden from the command line. The default value is "xterm", |
| 88 | which brings them up in xterms. | 88 | which brings them up in xterms. |
| 89 | It is safe to leave this unchanged, although you may wish to change | 89 | It is safe to leave this unchanged, although you may wish to change |
| 90 | this if you expect the UML that you build to be run in environments | 90 | this if you expect the UML that you build to be run in environments |
| 91 | which don't have X or xterm available. | 91 | which don't have X or xterm available. |
| 92 | 92 | ||
| 93 | config SSL_CHAN | 93 | config SSL_CHAN |
| 94 | string "Default serial line channel initialization" | 94 | string "Default serial line channel initialization" |
| 95 | default "pty" | 95 | default "pty" |
| 96 | help | 96 | help |
| 97 | This is the string describing the channel to which the serial lines | 97 | This is the string describing the channel to which the serial lines |
| 98 | will be attached by default. This value can be overridden from the | 98 | will be attached by default. This value can be overridden from the |
| 99 | command line. The default value is "pty", which attaches them to | 99 | command line. The default value is "pty", which attaches them to |
| 100 | traditional pseudo-terminals. | 100 | traditional pseudo-terminals. |
| 101 | It is safe to leave this unchanged, although you may wish to change | 101 | It is safe to leave this unchanged, although you may wish to change |
| 102 | this if you expect the UML that you build to be run in environments | 102 | this if you expect the UML that you build to be run in environments |
| 103 | which don't have a set of /dev/pty* devices. | 103 | which don't have a set of /dev/pty* devices. |
| 104 | 104 | ||
| 105 | config UML_SOUND | 105 | config UML_SOUND |
| 106 | tristate "Sound support" | 106 | tristate "Sound support" |
| 107 | help | 107 | help |
| 108 | This option enables UML sound support. If enabled, it will pull in | 108 | This option enables UML sound support. If enabled, it will pull in |
| 109 | soundcore and the UML hostaudio relay, which acts as a intermediary | 109 | soundcore and the UML hostaudio relay, which acts as a intermediary |
| 110 | between the host's dsp and mixer devices and the UML sound system. | 110 | between the host's dsp and mixer devices and the UML sound system. |
| 111 | It is safe to say 'Y' here. | 111 | It is safe to say 'Y' here. |
| 112 | 112 | ||
| 113 | config SOUND | 113 | config SOUND |
| 114 | tristate | 114 | tristate |
| @@ -131,107 +131,107 @@ menu "UML Network Devices" | |||
| 131 | config UML_NET | 131 | config UML_NET |
| 132 | bool "Virtual network device" | 132 | bool "Virtual network device" |
| 133 | help | 133 | help |
| 134 | While the User-Mode port cannot directly talk to any physical | 134 | While the User-Mode port cannot directly talk to any physical |
| 135 | hardware devices, this choice and the following transport options | 135 | hardware devices, this choice and the following transport options |
| 136 | provide one or more virtual network devices through which the UML | 136 | provide one or more virtual network devices through which the UML |
| 137 | kernels can talk to each other, the host, and with the host's help, | 137 | kernels can talk to each other, the host, and with the host's help, |
| 138 | machines on the outside world. | 138 | machines on the outside world. |
| 139 | 139 | ||
| 140 | For more information, including explanations of the networking and | 140 | For more information, including explanations of the networking and |
| 141 | sample configurations, see | 141 | sample configurations, see |
| 142 | <http://user-mode-linux.sourceforge.net/old/networking.html>. | 142 | <http://user-mode-linux.sourceforge.net/old/networking.html>. |
| 143 | 143 | ||
| 144 | If you'd like to be able to enable networking in the User-Mode | 144 | If you'd like to be able to enable networking in the User-Mode |
| 145 | linux environment, say Y; otherwise say N. Note that you must | 145 | linux environment, say Y; otherwise say N. Note that you must |
| 146 | enable at least one of the following transport options to actually | 146 | enable at least one of the following transport options to actually |
| 147 | make use of UML networking. | 147 | make use of UML networking. |
| 148 | 148 | ||
| 149 | config UML_NET_ETHERTAP | 149 | config UML_NET_ETHERTAP |
| 150 | bool "Ethertap transport" | 150 | bool "Ethertap transport" |
| 151 | depends on UML_NET | 151 | depends on UML_NET |
| 152 | help | 152 | help |
| 153 | The Ethertap User-Mode Linux network transport allows a single | 153 | The Ethertap User-Mode Linux network transport allows a single |
| 154 | running UML to exchange packets with its host over one of the | 154 | running UML to exchange packets with its host over one of the |
| 155 | host's Ethertap devices, such as /dev/tap0. Additional running | 155 | host's Ethertap devices, such as /dev/tap0. Additional running |
| 156 | UMLs can use additional Ethertap devices, one per running UML. | 156 | UMLs can use additional Ethertap devices, one per running UML. |
| 157 | While the UML believes it's on a (multi-device, broadcast) virtual | 157 | While the UML believes it's on a (multi-device, broadcast) virtual |
| 158 | Ethernet network, it's in fact communicating over a point-to-point | 158 | Ethernet network, it's in fact communicating over a point-to-point |
| 159 | link with the host. | 159 | link with the host. |
| 160 | 160 | ||
| 161 | To use this, your host kernel must have support for Ethertap | 161 | To use this, your host kernel must have support for Ethertap |
| 162 | devices. Also, if your host kernel is 2.4.x, it must have | 162 | devices. Also, if your host kernel is 2.4.x, it must have |
| 163 | CONFIG_NETLINK_DEV configured as Y or M. | 163 | CONFIG_NETLINK_DEV configured as Y or M. |
| 164 | 164 | ||
| 165 | For more information, see | 165 | For more information, see |
| 166 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site | 166 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site |
| 167 | has examples of the UML command line to use to enable Ethertap | 167 | has examples of the UML command line to use to enable Ethertap |
| 168 | networking. | 168 | networking. |
| 169 | 169 | ||
| 170 | If you'd like to set up an IP network with the host and/or the | 170 | If you'd like to set up an IP network with the host and/or the |
| 171 | outside world, say Y to this, the Daemon Transport and/or the | 171 | outside world, say Y to this, the Daemon Transport and/or the |
| 172 | Slip Transport. You'll need at least one of them, but may choose | 172 | Slip Transport. You'll need at least one of them, but may choose |
| 173 | more than one without conflict. If you don't need UML networking, | 173 | more than one without conflict. If you don't need UML networking, |
| 174 | say N. | 174 | say N. |
| 175 | 175 | ||
| 176 | config UML_NET_TUNTAP | 176 | config UML_NET_TUNTAP |
| 177 | bool "TUN/TAP transport" | 177 | bool "TUN/TAP transport" |
| 178 | depends on UML_NET | 178 | depends on UML_NET |
| 179 | help | 179 | help |
| 180 | The UML TUN/TAP network transport allows a UML instance to exchange | 180 | The UML TUN/TAP network transport allows a UML instance to exchange |
| 181 | packets with the host over a TUN/TAP device. This option will only | 181 | packets with the host over a TUN/TAP device. This option will only |
| 182 | work with a 2.4 host, unless you've applied the TUN/TAP patch to | 182 | work with a 2.4 host, unless you've applied the TUN/TAP patch to |
| 183 | your 2.2 host kernel. | 183 | your 2.2 host kernel. |
| 184 | 184 | ||
| 185 | To use this transport, your host kernel must have support for TUN/TAP | 185 | To use this transport, your host kernel must have support for TUN/TAP |
| 186 | devices, either built-in or as a module. | 186 | devices, either built-in or as a module. |
| 187 | 187 | ||
| 188 | config UML_NET_SLIP | 188 | config UML_NET_SLIP |
| 189 | bool "SLIP transport" | 189 | bool "SLIP transport" |
| 190 | depends on UML_NET | 190 | depends on UML_NET |
| 191 | help | 191 | help |
| 192 | The slip User-Mode Linux network transport allows a running UML to | 192 | The slip User-Mode Linux network transport allows a running UML to |
| 193 | network with its host over a point-to-point link. Unlike Ethertap, | 193 | network with its host over a point-to-point link. Unlike Ethertap, |
| 194 | which can carry any Ethernet frame (and hence even non-IP packets), | 194 | which can carry any Ethernet frame (and hence even non-IP packets), |
| 195 | the slip transport can only carry IP packets. | 195 | the slip transport can only carry IP packets. |
| 196 | 196 | ||
| 197 | To use this, your host must support slip devices. | 197 | To use this, your host must support slip devices. |
| 198 | 198 | ||
| 199 | For more information, see | 199 | For more information, see |
| 200 | <http://user-mode-linux.sourceforge.net/old/networking.html>. | 200 | <http://user-mode-linux.sourceforge.net/old/networking.html>. |
| 201 | has examples of the UML command line to use to enable slip | 201 | has examples of the UML command line to use to enable slip |
| 202 | networking, and details of a few quirks with it. | 202 | networking, and details of a few quirks with it. |
| 203 | 203 | ||
| 204 | The Ethertap Transport is preferred over slip because of its | 204 | The Ethertap Transport is preferred over slip because of its |
| 205 | limitations. If you prefer slip, however, say Y here. Otherwise | 205 | limitations. If you prefer slip, however, say Y here. Otherwise |
| 206 | choose the Multicast transport (to network multiple UMLs on | 206 | choose the Multicast transport (to network multiple UMLs on |
| 207 | multiple hosts), Ethertap (to network with the host and the | 207 | multiple hosts), Ethertap (to network with the host and the |
| 208 | outside world), and/or the Daemon transport (to network multiple | 208 | outside world), and/or the Daemon transport (to network multiple |
| 209 | UMLs on a single host). You may choose more than one without | 209 | UMLs on a single host). You may choose more than one without |
| 210 | conflict. If you don't need UML networking, say N. | 210 | conflict. If you don't need UML networking, say N. |
| 211 | 211 | ||
| 212 | config UML_NET_DAEMON | 212 | config UML_NET_DAEMON |
| 213 | bool "Daemon transport" | 213 | bool "Daemon transport" |
| 214 | depends on UML_NET | 214 | depends on UML_NET |
| 215 | help | 215 | help |
| 216 | This User-Mode Linux network transport allows one or more running | 216 | This User-Mode Linux network transport allows one or more running |
| 217 | UMLs on a single host to communicate with each other, but not to | 217 | UMLs on a single host to communicate with each other, but not to |
| 218 | the host. | 218 | the host. |
| 219 | 219 | ||
| 220 | To use this form of networking, you'll need to run the UML | 220 | To use this form of networking, you'll need to run the UML |
| 221 | networking daemon on the host. | 221 | networking daemon on the host. |
| 222 | 222 | ||
| 223 | For more information, see | 223 | For more information, see |
| 224 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site | 224 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site |
| 225 | has examples of the UML command line to use to enable Daemon | 225 | has examples of the UML command line to use to enable Daemon |
| 226 | networking. | 226 | networking. |
| 227 | 227 | ||
| 228 | If you'd like to set up a network with other UMLs on a single host, | 228 | If you'd like to set up a network with other UMLs on a single host, |
| 229 | say Y. If you need a network between UMLs on multiple physical | 229 | say Y. If you need a network between UMLs on multiple physical |
| 230 | hosts, choose the Multicast Transport. To set up a network with | 230 | hosts, choose the Multicast Transport. To set up a network with |
| 231 | the host and/or other IP machines, say Y to the Ethertap or Slip | 231 | the host and/or other IP machines, say Y to the Ethertap or Slip |
| 232 | transports. You'll need at least one of them, but may choose | 232 | transports. You'll need at least one of them, but may choose |
| 233 | more than one without conflict. If you don't need UML networking, | 233 | more than one without conflict. If you don't need UML networking, |
| 234 | say N. | 234 | say N. |
| 235 | 235 | ||
| 236 | config UML_NET_VECTOR | 236 | config UML_NET_VECTOR |
| 237 | bool "Vector I/O high performance network devices" | 237 | bool "Vector I/O high performance network devices" |
| @@ -270,26 +270,26 @@ config UML_NET_MCAST | |||
| 270 | bool "Multicast transport" | 270 | bool "Multicast transport" |
| 271 | depends on UML_NET | 271 | depends on UML_NET |
| 272 | help | 272 | help |
| 273 | This Multicast User-Mode Linux network transport allows multiple | 273 | This Multicast User-Mode Linux network transport allows multiple |
| 274 | UMLs (even ones running on different host machines!) to talk to | 274 | UMLs (even ones running on different host machines!) to talk to |
| 275 | each other over a virtual ethernet network. However, it requires | 275 | each other over a virtual ethernet network. However, it requires |
| 276 | at least one UML with one of the other transports to act as a | 276 | at least one UML with one of the other transports to act as a |
| 277 | bridge if any of them need to be able to talk to their hosts or any | 277 | bridge if any of them need to be able to talk to their hosts or any |
| 278 | other IP machines. | 278 | other IP machines. |
| 279 | 279 | ||
| 280 | To use this, your host kernel(s) must support IP Multicasting. | 280 | To use this, your host kernel(s) must support IP Multicasting. |
| 281 | 281 | ||
| 282 | For more information, see | 282 | For more information, see |
| 283 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site | 283 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site |
| 284 | has examples of the UML command line to use to enable Multicast | 284 | has examples of the UML command line to use to enable Multicast |
| 285 | networking, and notes about the security of this approach. | 285 | networking, and notes about the security of this approach. |
| 286 | 286 | ||
| 287 | If you need UMLs on multiple physical hosts to communicate as if | 287 | If you need UMLs on multiple physical hosts to communicate as if |
| 288 | they shared an Ethernet network, say Y. If you need to communicate | 288 | they shared an Ethernet network, say Y. If you need to communicate |
| 289 | with other IP machines, make sure you select one of the other | 289 | with other IP machines, make sure you select one of the other |
| 290 | transports (possibly in addition to Multicast; they're not | 290 | transports (possibly in addition to Multicast; they're not |
| 291 | exclusive). If you don't need to network UMLs say N to each of | 291 | exclusive). If you don't need to network UMLs say N to each of |
| 292 | the transports. | 292 | the transports. |
| 293 | 293 | ||
| 294 | config UML_NET_PCAP | 294 | config UML_NET_PCAP |
| 295 | bool "pcap transport" | 295 | bool "pcap transport" |
| @@ -300,9 +300,9 @@ config UML_NET_PCAP | |||
| 300 | UML act as a network monitor for the host. You must have libcap | 300 | UML act as a network monitor for the host. You must have libcap |
| 301 | installed in order to build the pcap transport into UML. | 301 | installed in order to build the pcap transport into UML. |
| 302 | 302 | ||
| 303 | For more information, see | 303 | For more information, see |
| 304 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site | 304 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site |
| 305 | has examples of the UML command line to use to enable this option. | 305 | has examples of the UML command line to use to enable this option. |
| 306 | 306 | ||
| 307 | If you intend to use UML as a network monitor for the host, say | 307 | If you intend to use UML as a network monitor for the host, say |
| 308 | Y here. Otherwise, say N. | 308 | Y here. Otherwise, say N. |
| @@ -311,27 +311,27 @@ config UML_NET_SLIRP | |||
| 311 | bool "SLiRP transport" | 311 | bool "SLiRP transport" |
| 312 | depends on UML_NET | 312 | depends on UML_NET |
| 313 | help | 313 | help |
| 314 | The SLiRP User-Mode Linux network transport allows a running UML | 314 | The SLiRP User-Mode Linux network transport allows a running UML |
| 315 | to network by invoking a program that can handle SLIP encapsulated | 315 | to network by invoking a program that can handle SLIP encapsulated |
| 316 | packets. This is commonly (but not limited to) the application | 316 | packets. This is commonly (but not limited to) the application |
| 317 | known as SLiRP, a program that can re-socket IP packets back onto | 317 | known as SLiRP, a program that can re-socket IP packets back onto |
| 318 | the host on which it is run. Only IP packets are supported, | 318 | he host on which it is run. Only IP packets are supported, |
| 319 | unlike other network transports that can handle all Ethernet | 319 | unlike other network transports that can handle all Ethernet |
| 320 | frames. In general, slirp allows the UML the same IP connectivity | 320 | frames. In general, slirp allows the UML the same IP connectivity |
| 321 | to the outside world that the host user is permitted, and unlike | 321 | to the outside world that the host user is permitted, and unlike |
| 322 | other transports, SLiRP works without the need of root level | 322 | other transports, SLiRP works without the need of root level |
| 323 | privleges, setuid binaries, or SLIP devices on the host. This | 323 | privleges, setuid binaries, or SLIP devices on the host. This |
| 324 | also means not every type of connection is possible, but most | 324 | also means not every type of connection is possible, but most |
| 325 | situations can be accommodated with carefully crafted slirp | 325 | situations can be accommodated with carefully crafted slirp |
| 326 | commands that can be passed along as part of the network device's | 326 | commands that can be passed along as part of the network device's |
| 327 | setup string. The effect of this transport on the UML is similar | 327 | setup string. The effect of this transport on the UML is similar |
| 328 | that of a host behind a firewall that masquerades all network | 328 | that of a host behind a firewall that masquerades all network |
| 329 | connections passing through it (but is less secure). | 329 | connections passing through it (but is less secure). |
| 330 | 330 | ||
| 331 | To use this you should first have slirp compiled somewhere | 331 | To use this you should first have slirp compiled somewhere |
| 332 | accessible on the host, and have read its documentation. If you | 332 | accessible on the host, and have read its documentation. If you |
| 333 | don't need UML networking, say N. | 333 | don't need UML networking, say N. |
| 334 | 334 | ||
| 335 | Startup example: "eth0=slirp,FE:FD:01:02:03:04,/usr/local/bin/slirp" | 335 | Startup example: "eth0=slirp,FE:FD:01:02:03:04,/usr/local/bin/slirp" |
| 336 | 336 | ||
| 337 | endmenu | 337 | endmenu |
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index aca09be2373e..33c1cd6a12ac 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c | |||
| @@ -276,14 +276,14 @@ static int ubd_setup_common(char *str, int *index_out, char **error_out) | |||
| 276 | str++; | 276 | str++; |
| 277 | if(!strcmp(str, "sync")){ | 277 | if(!strcmp(str, "sync")){ |
| 278 | global_openflags = of_sync(global_openflags); | 278 | global_openflags = of_sync(global_openflags); |
| 279 | goto out1; | 279 | return err; |
| 280 | } | 280 | } |
| 281 | 281 | ||
| 282 | err = -EINVAL; | 282 | err = -EINVAL; |
| 283 | major = simple_strtoul(str, &end, 0); | 283 | major = simple_strtoul(str, &end, 0); |
| 284 | if((*end != '\0') || (end == str)){ | 284 | if((*end != '\0') || (end == str)){ |
| 285 | *error_out = "Didn't parse major number"; | 285 | *error_out = "Didn't parse major number"; |
| 286 | goto out1; | 286 | return err; |
| 287 | } | 287 | } |
| 288 | 288 | ||
| 289 | mutex_lock(&ubd_lock); | 289 | mutex_lock(&ubd_lock); |
diff --git a/arch/um/include/asm/pgtable.h b/arch/um/include/asm/pgtable.h index 9c04562310b3..b377df76cc28 100644 --- a/arch/um/include/asm/pgtable.h +++ b/arch/um/include/asm/pgtable.h | |||
| @@ -263,7 +263,12 @@ static inline void set_pte(pte_t *pteptr, pte_t pteval) | |||
| 263 | *pteptr = pte_mknewpage(*pteptr); | 263 | *pteptr = pte_mknewpage(*pteptr); |
| 264 | if(pte_present(*pteptr)) *pteptr = pte_mknewprot(*pteptr); | 264 | if(pte_present(*pteptr)) *pteptr = pte_mknewprot(*pteptr); |
| 265 | } | 265 | } |
| 266 | #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval) | 266 | |
| 267 | static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, | ||
| 268 | pte_t *pteptr, pte_t pteval) | ||
| 269 | { | ||
| 270 | set_pte(pteptr, pteval); | ||
| 271 | } | ||
| 267 | 272 | ||
| 268 | #define __HAVE_ARCH_PTE_SAME | 273 | #define __HAVE_ARCH_PTE_SAME |
| 269 | static inline int pte_same(pte_t pte_a, pte_t pte_b) | 274 | static inline int pte_same(pte_t pte_a, pte_t pte_b) |
diff --git a/arch/um/kernel/irq.c b/arch/um/kernel/irq.c index f4874b7ec503..598d7b3d9355 100644 --- a/arch/um/kernel/irq.c +++ b/arch/um/kernel/irq.c | |||
| @@ -479,7 +479,7 @@ void __init init_IRQ(void) | |||
| 479 | irq_set_chip_and_handler(TIMER_IRQ, &SIGVTALRM_irq_type, handle_edge_irq); | 479 | irq_set_chip_and_handler(TIMER_IRQ, &SIGVTALRM_irq_type, handle_edge_irq); |
| 480 | 480 | ||
| 481 | 481 | ||
| 482 | for (i = 1; i < NR_IRQS; i++) | 482 | for (i = 1; i < LAST_IRQ; i++) |
| 483 | irq_set_chip_and_handler(i, &normal_irq_type, handle_edge_irq); | 483 | irq_set_chip_and_handler(i, &normal_irq_type, handle_edge_irq); |
| 484 | /* Initialize EPOLL Loop */ | 484 | /* Initialize EPOLL Loop */ |
| 485 | os_setup_epoll(); | 485 | os_setup_epoll(); |
diff --git a/arch/um/kernel/skas/uaccess.c b/arch/um/kernel/skas/uaccess.c index 7f06fdbc7ee1..bd3cb694322c 100644 --- a/arch/um/kernel/skas/uaccess.c +++ b/arch/um/kernel/skas/uaccess.c | |||
| @@ -59,7 +59,6 @@ static pte_t *maybe_map(unsigned long virt, int is_write) | |||
| 59 | static int do_op_one_page(unsigned long addr, int len, int is_write, | 59 | static int do_op_one_page(unsigned long addr, int len, int is_write, |
| 60 | int (*op)(unsigned long addr, int len, void *arg), void *arg) | 60 | int (*op)(unsigned long addr, int len, void *arg), void *arg) |
| 61 | { | 61 | { |
| 62 | jmp_buf buf; | ||
| 63 | struct page *page; | 62 | struct page *page; |
| 64 | pte_t *pte; | 63 | pte_t *pte; |
| 65 | int n; | 64 | int n; |
diff --git a/arch/um/kernel/time.c b/arch/um/kernel/time.c index 052de4c8acb2..0c572a48158e 100644 --- a/arch/um/kernel/time.c +++ b/arch/um/kernel/time.c | |||
| @@ -56,7 +56,7 @@ static int itimer_one_shot(struct clock_event_device *evt) | |||
| 56 | static struct clock_event_device timer_clockevent = { | 56 | static struct clock_event_device timer_clockevent = { |
| 57 | .name = "posix-timer", | 57 | .name = "posix-timer", |
| 58 | .rating = 250, | 58 | .rating = 250, |
| 59 | .cpumask = cpu_all_mask, | 59 | .cpumask = cpu_possible_mask, |
| 60 | .features = CLOCK_EVT_FEAT_PERIODIC | | 60 | .features = CLOCK_EVT_FEAT_PERIODIC | |
| 61 | CLOCK_EVT_FEAT_ONESHOT, | 61 | CLOCK_EVT_FEAT_ONESHOT, |
| 62 | .set_state_shutdown = itimer_shutdown, | 62 | .set_state_shutdown = itimer_shutdown, |
diff --git a/arch/um/os-Linux/signal.c b/arch/um/os-Linux/signal.c index bf0acb8aad8b..75b10235d369 100644 --- a/arch/um/os-Linux/signal.c +++ b/arch/um/os-Linux/signal.c | |||
| @@ -31,29 +31,23 @@ void (*sig_info[NSIG])(int, struct siginfo *, struct uml_pt_regs *) = { | |||
| 31 | 31 | ||
| 32 | static void sig_handler_common(int sig, struct siginfo *si, mcontext_t *mc) | 32 | static void sig_handler_common(int sig, struct siginfo *si, mcontext_t *mc) |
| 33 | { | 33 | { |
| 34 | struct uml_pt_regs *r; | 34 | struct uml_pt_regs r; |
| 35 | int save_errno = errno; | 35 | int save_errno = errno; |
| 36 | 36 | ||
| 37 | r = uml_kmalloc(sizeof(struct uml_pt_regs), UM_GFP_ATOMIC); | 37 | r.is_user = 0; |
| 38 | if (!r) | ||
| 39 | panic("out of memory"); | ||
| 40 | |||
| 41 | r->is_user = 0; | ||
| 42 | if (sig == SIGSEGV) { | 38 | if (sig == SIGSEGV) { |
| 43 | /* For segfaults, we want the data from the sigcontext. */ | 39 | /* For segfaults, we want the data from the sigcontext. */ |
| 44 | get_regs_from_mc(r, mc); | 40 | get_regs_from_mc(&r, mc); |
| 45 | GET_FAULTINFO_FROM_MC(r->faultinfo, mc); | 41 | GET_FAULTINFO_FROM_MC(r.faultinfo, mc); |
| 46 | } | 42 | } |
| 47 | 43 | ||
| 48 | /* enable signals if sig isn't IRQ signal */ | 44 | /* enable signals if sig isn't IRQ signal */ |
| 49 | if ((sig != SIGIO) && (sig != SIGWINCH) && (sig != SIGALRM)) | 45 | if ((sig != SIGIO) && (sig != SIGWINCH) && (sig != SIGALRM)) |
| 50 | unblock_signals(); | 46 | unblock_signals(); |
| 51 | 47 | ||
| 52 | (*sig_info[sig])(sig, si, r); | 48 | (*sig_info[sig])(sig, si, &r); |
| 53 | 49 | ||
| 54 | errno = save_errno; | 50 | errno = save_errno; |
| 55 | |||
| 56 | free(r); | ||
| 57 | } | 51 | } |
| 58 | 52 | ||
| 59 | /* | 53 | /* |
| @@ -91,17 +85,11 @@ void sig_handler(int sig, struct siginfo *si, mcontext_t *mc) | |||
| 91 | 85 | ||
| 92 | static void timer_real_alarm_handler(mcontext_t *mc) | 86 | static void timer_real_alarm_handler(mcontext_t *mc) |
| 93 | { | 87 | { |
| 94 | struct uml_pt_regs *regs; | 88 | struct uml_pt_regs regs; |
| 95 | |||
| 96 | regs = uml_kmalloc(sizeof(struct uml_pt_regs), UM_GFP_ATOMIC); | ||
| 97 | if (!regs) | ||
| 98 | panic("out of memory"); | ||
| 99 | 89 | ||
| 100 | if (mc != NULL) | 90 | if (mc != NULL) |
| 101 | get_regs_from_mc(regs, mc); | 91 | get_regs_from_mc(®s, mc); |
| 102 | timer_handler(SIGALRM, NULL, regs); | 92 | timer_handler(SIGALRM, NULL, ®s); |
| 103 | |||
| 104 | free(regs); | ||
| 105 | } | 93 | } |
| 106 | 94 | ||
| 107 | void timer_alarm_handler(int sig, struct siginfo *unused_si, mcontext_t *mc) | 95 | void timer_alarm_handler(int sig, struct siginfo *unused_si, mcontext_t *mc) |
diff --git a/arch/um/os-Linux/umid.c b/arch/um/os-Linux/umid.c index 998fbb445458..e261656fe9d7 100644 --- a/arch/um/os-Linux/umid.c +++ b/arch/um/os-Linux/umid.c | |||
| @@ -135,12 +135,18 @@ out: | |||
| 135 | */ | 135 | */ |
| 136 | static inline int is_umdir_used(char *dir) | 136 | static inline int is_umdir_used(char *dir) |
| 137 | { | 137 | { |
| 138 | char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")]; | 138 | char pid[sizeof("nnnnn\0")], *end, *file; |
| 139 | char pid[sizeof("nnnnn\0")], *end; | ||
| 140 | int dead, fd, p, n, err; | 139 | int dead, fd, p, n, err; |
| 140 | size_t filelen; | ||
| 141 | 141 | ||
| 142 | n = snprintf(file, sizeof(file), "%s/pid", dir); | 142 | err = asprintf(&file, "%s/pid", dir); |
| 143 | if (n >= sizeof(file)) { | 143 | if (err < 0) |
| 144 | return 0; | ||
| 145 | |||
| 146 | filelen = strlen(file); | ||
| 147 | |||
| 148 | n = snprintf(file, filelen, "%s/pid", dir); | ||
| 149 | if (n >= filelen) { | ||
| 144 | printk(UM_KERN_ERR "is_umdir_used - pid filename too long\n"); | 150 | printk(UM_KERN_ERR "is_umdir_used - pid filename too long\n"); |
| 145 | err = -E2BIG; | 151 | err = -E2BIG; |
| 146 | goto out; | 152 | goto out; |
| @@ -185,6 +191,7 @@ static inline int is_umdir_used(char *dir) | |||
| 185 | out_close: | 191 | out_close: |
| 186 | close(fd); | 192 | close(fd); |
| 187 | out: | 193 | out: |
| 194 | free(file); | ||
| 188 | return 0; | 195 | return 0; |
| 189 | } | 196 | } |
| 190 | 197 | ||
| @@ -210,18 +217,21 @@ static int umdir_take_if_dead(char *dir) | |||
| 210 | 217 | ||
| 211 | static void __init create_pid_file(void) | 218 | static void __init create_pid_file(void) |
| 212 | { | 219 | { |
| 213 | char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")]; | 220 | char pid[sizeof("nnnnn\0")], *file; |
| 214 | char pid[sizeof("nnnnn\0")]; | ||
| 215 | int fd, n; | 221 | int fd, n; |
| 216 | 222 | ||
| 217 | if (umid_file_name("pid", file, sizeof(file))) | 223 | file = malloc(strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")); |
| 224 | if (!file) | ||
| 218 | return; | 225 | return; |
| 219 | 226 | ||
| 227 | if (umid_file_name("pid", file, sizeof(file))) | ||
| 228 | goto out; | ||
| 229 | |||
| 220 | fd = open(file, O_RDWR | O_CREAT | O_EXCL, 0644); | 230 | fd = open(file, O_RDWR | O_CREAT | O_EXCL, 0644); |
| 221 | if (fd < 0) { | 231 | if (fd < 0) { |
| 222 | printk(UM_KERN_ERR "Open of machine pid file \"%s\" failed: " | 232 | printk(UM_KERN_ERR "Open of machine pid file \"%s\" failed: " |
| 223 | "%s\n", file, strerror(errno)); | 233 | "%s\n", file, strerror(errno)); |
| 224 | return; | 234 | goto out; |
| 225 | } | 235 | } |
| 226 | 236 | ||
| 227 | snprintf(pid, sizeof(pid), "%d\n", getpid()); | 237 | snprintf(pid, sizeof(pid), "%d\n", getpid()); |
| @@ -231,6 +241,8 @@ static void __init create_pid_file(void) | |||
| 231 | errno); | 241 | errno); |
| 232 | 242 | ||
| 233 | close(fd); | 243 | close(fd); |
| 244 | out: | ||
| 245 | free(file); | ||
| 234 | } | 246 | } |
| 235 | 247 | ||
| 236 | int __init set_umid(char *name) | 248 | int __init set_umid(char *name) |
| @@ -385,13 +397,19 @@ __uml_setup("uml_dir=", set_uml_dir, | |||
| 385 | 397 | ||
| 386 | static void remove_umid_dir(void) | 398 | static void remove_umid_dir(void) |
| 387 | { | 399 | { |
| 388 | char dir[strlen(uml_dir) + UMID_LEN + 1], err; | 400 | char *dir, err; |
| 401 | |||
| 402 | dir = malloc(strlen(uml_dir) + UMID_LEN + 1); | ||
| 403 | if (!dir) | ||
| 404 | return; | ||
| 389 | 405 | ||
| 390 | sprintf(dir, "%s%s", uml_dir, umid); | 406 | sprintf(dir, "%s%s", uml_dir, umid); |
| 391 | err = remove_files_and_dir(dir); | 407 | err = remove_files_and_dir(dir); |
| 392 | if (err) | 408 | if (err) |
| 393 | os_warn("%s - remove_files_and_dir failed with err = %d\n", | 409 | os_warn("%s - remove_files_and_dir failed with err = %d\n", |
| 394 | __func__, err); | 410 | __func__, err); |
| 411 | |||
| 412 | free(dir); | ||
| 395 | } | 413 | } |
| 396 | 414 | ||
| 397 | __uml_exitcall(remove_umid_dir); | 415 | __uml_exitcall(remove_umid_dir); |
diff --git a/fs/hostfs/hostfs.h b/fs/hostfs/hostfs.h index 33b8423ef0c9..f4295aa19350 100644 --- a/fs/hostfs/hostfs.h +++ b/fs/hostfs/hostfs.h | |||
| @@ -87,7 +87,7 @@ extern int do_mkdir(const char *file, int mode); | |||
| 87 | extern int hostfs_do_rmdir(const char *file); | 87 | extern int hostfs_do_rmdir(const char *file); |
| 88 | extern int do_mknod(const char *file, int mode, unsigned int major, | 88 | extern int do_mknod(const char *file, int mode, unsigned int major, |
| 89 | unsigned int minor); | 89 | unsigned int minor); |
| 90 | extern int link_file(const char *from, const char *to); | 90 | extern int link_file(const char *to, const char *from); |
| 91 | extern int hostfs_do_readlink(char *file, char *buf, int size); | 91 | extern int hostfs_do_readlink(char *file, char *buf, int size); |
| 92 | extern int rename_file(char *from, char *to); | 92 | extern int rename_file(char *from, char *to); |
| 93 | extern int rename2_file(char *from, char *to, unsigned int flags); | 93 | extern int rename2_file(char *from, char *to, unsigned int flags); |
