From d0ef71e9e8cd0aceb63827a74ea5f86fdd8c2fe9 Mon Sep 17 00:00:00 2001 From: lifeng68 Date: Wed, 15 Jul 2020 09:43:19 +0800 Subject: [PATCH] 4.0.3: update base version to lxc_4.0.3 Signed-off-by: lifeng68 --- 0001-huawei-adapt-to-huawei-4.0.3.patch | 22319 ++++++++++++++++ 0001-iSulad-add-HAVE_ISULAD-macro.patch | 50 - ...xc.isulad.init.args-config-interface.patch | 213 - ...lxc.isulad.populate.device-interface.patch | 1284 - 0004-confile-add-support-umask.patch | 132 - 0005-cgroup-refact-cgroup-implemt.patch | 1149 - ...-container-exit-code-and-stop-signal.patch | 112 - 0007-check-and-save-pid-info-file.patch | 545 - 0008-support-block-device-as-rootfs.patch | 331 - ...upport-mount-squashfs-in-mount-entry.patch | 393 - 0010-IO-refact-terminal-progress.patch | 3568 --- ...fifo-to-monitor-state-of-lxc-monitor.patch | 271 - 0012-Adapt-to-isulad-log.patch | 142 - 0013-set-env-in-container.patch | 143 - 0014-exec-refact-attach-progress.patch | 452 - ...-add-masked-paths-and-readonly-paths.patch | 357 - 0016-start-separate-i-and-t.patch | 369 - ...nal_fifos-Add-terminal-fifos-dynamic.patch | 289 - ...pty-after-setup-rootfs-mount-options.patch | 157 - ...lement-resize-function-in-exec-start.patch | 963 - ...e-decode-escape-charactors-in-config.patch | 104 - ...cgroup-add-retry-for-destory-cgroups.patch | 387 - 0022-support-terminal-log.patch | 313 - ...-Supporting-rootfs-mount-propagation.patch | 933 - ...not-check-ppid-when-set-death-signal.patch | 40 - 0025-support-oci-hooks.patch | 1244 - 0026-Supporting-UID-GID-configuration.patch | 306 - ...apabilites-security-feature-enhanced.patch | 240 - 0028-Supporting-workdir-configuration.patch | 167 - ...ting-additional-groups-configuration.patch | 103 - ...et-negative-files.limit-value-to-max.patch | 71 - ...-macro-HAVE_ISULAD-in-installed-head.patch | 115 - 0032-link-proc-mounts-to-etc-mtab.patch | 68 - 0033-build-add-secure-build-flags.patch | 423 - 0034-support-timeout.patch | 726 - 0035-Seccomp-security-feature-enhanced.patch | 659 - 0036-Security-coding-modification.patch | 99 - ...build-error-device_cgroup_rule_parse.patch | 35 - ...gnore-errors-when-loading-rules-fail.patch | 31 - 0039-net-adapt-to-isulad.patch | 51 - ...ainer-full-path-in-cgfsng_get_cgroup.patch | 29 - 0041-build-fix-some-bug-in-free-memory.patch | 52 - ...ontainer-full-path-in-destory-cgroup.patch | 29 - 0043-support-error-report.patch | 683 - 0044-remove-filelock-in-destroy-dir.patch | 153 - 0045-restore-default-signal-handler.patch | 120 - 0046-add-support-systemd.patch | 117 - ...ed-kernel-params-can-be-changed-in-s.patch | 103 - ...ified-hierarchy-for-the-systemd-cgro.patch | 52 - ...unt-from-host-tmpfs-for-system-conta.patch | 99 - ...dd-init-fd-in-lxc_init_clean_handler.patch | 27 - ...add-init-fd-in-lxc_init_pids_handler.patch | 26 - ...d-judge-whether-have-mount-dev-entry.patch | 132 - 0053-attach-seprate-i-and-t-flags.patch | 288 - ...not-check-pid-die-when-lxc_poll-exit.patch | 31 - ...al-not-close-pipe-when-lxc_poll-exit.patch | 64 - ...add-sigfd-to-monitor-the-exit-of-pid.patch | 178 - ...tach-add-read-data-from-attach-sigfd.patch | 34 - 0058-support-syslog-for-console.patch | 251 - 0059-set-state-to-stopped.patch | 29 - ...nd-error-msg-when-call-attach-failed.patch | 49 - ...nt-fix-symlink-error-use-parsed-path.patch | 41 - 0062-change-log-level-of-seccomp-setup.patch | 113 - 0063-hook-fix-memeory-leak.patch | 27 - ...ermainal-fix-console-log-memory-leak.patch | 26 - ...rminal-stdout-stderr-pipe-O_NONBLOCK.patch | 32 - 0066-lxc-fix-tests-build-error.patch | 65 - ...n-populate-exist-device-successfully.patch | 25 - ...nfig-default-cgroup-pattern-to-lxc-n.patch | 26 - ...-use-host-rootfs-as-container-rootfs.patch | 41 - ...mmunicate-to-lxc-parent-when-unpause.patch | 72 - apply-patches | 4 +- lxc-4.0.1.tar.gz | Bin 1352119 -> 0 bytes lxc-4.0.3.tar.gz | Bin 0 -> 1368461 bytes lxc.spec | 89 +- 75 files changed, 22331 insertions(+), 20130 deletions(-) create mode 100644 0001-huawei-adapt-to-huawei-4.0.3.patch delete mode 100644 0001-iSulad-add-HAVE_ISULAD-macro.patch delete mode 100644 0002-confile-add-lxc.isulad.init.args-config-interface.patch delete mode 100644 0003-confile-add-lxc.isulad.populate.device-interface.patch delete mode 100644 0004-confile-add-support-umask.patch delete mode 100644 0005-cgroup-refact-cgroup-implemt.patch delete mode 100644 0006-modify-container-exit-code-and-stop-signal.patch delete mode 100644 0007-check-and-save-pid-info-file.patch delete mode 100644 0008-support-block-device-as-rootfs.patch delete mode 100644 0009-support-mount-squashfs-in-mount-entry.patch delete mode 100644 0010-IO-refact-terminal-progress.patch delete mode 100644 0011-add-exit-fifo-to-monitor-state-of-lxc-monitor.patch delete mode 100644 0012-Adapt-to-isulad-log.patch delete mode 100644 0013-set-env-in-container.patch delete mode 100644 0014-exec-refact-attach-progress.patch delete mode 100644 0015-add-masked-paths-and-readonly-paths.patch delete mode 100644 0016-start-separate-i-and-t.patch delete mode 100644 0017-attach-add_terminal_fifos-Add-terminal-fifos-dynamic.patch delete mode 100644 0018-pty-setup-pty-after-setup-rootfs-mount-options.patch delete mode 100644 0019-resize-implement-resize-function-in-exec-start.patch delete mode 100644 0020-confile-decode-escape-charactors-in-config.patch delete mode 100644 0021-cgroup-add-retry-for-destory-cgroups.patch delete mode 100644 0022-support-terminal-log.patch delete mode 100644 0023-Supporting-rootfs-mount-propagation.patch delete mode 100644 0024-start-do-not-check-ppid-when-set-death-signal.patch delete mode 100644 0025-support-oci-hooks.patch delete mode 100644 0026-Supporting-UID-GID-configuration.patch delete mode 100644 0027-Capabilites-security-feature-enhanced.patch delete mode 100644 0028-Supporting-workdir-configuration.patch delete mode 100644 0029-Supporting-additional-groups-configuration.patch delete mode 100644 0030-set-negative-files.limit-value-to-max.patch delete mode 100644 0031-head-file-remove-macro-HAVE_ISULAD-in-installed-head.patch delete mode 100644 0032-link-proc-mounts-to-etc-mtab.patch delete mode 100644 0033-build-add-secure-build-flags.patch delete mode 100644 0034-support-timeout.patch delete mode 100644 0035-Seccomp-security-feature-enhanced.patch delete mode 100644 0036-Security-coding-modification.patch delete mode 100644 0037-cgfsng-fix-build-error-device_cgroup_rule_parse.patch delete mode 100644 0038-Ignore-errors-when-loading-rules-fail.patch delete mode 100644 0039-net-adapt-to-isulad.patch delete mode 100644 0040-cgfsng-make-container-full-path-in-cgfsng_get_cgroup.patch delete mode 100644 0041-build-fix-some-bug-in-free-memory.patch delete mode 100644 0042-cgfsng-make-container-full-path-in-destory-cgroup.patch delete mode 100644 0043-support-error-report.patch delete mode 100644 0044-remove-filelock-in-destroy-dir.patch delete mode 100644 0045-restore-default-signal-handler.patch delete mode 100644 0046-add-support-systemd.patch delete mode 100644 0047-support-namespaced-kernel-params-can-be-changed-in-s.patch delete mode 100644 0048-don-t-use-the-unified-hierarchy-for-the-systemd-cgro.patch delete mode 100644 0049-make-dev-bind-mount-from-host-tmpfs-for-system-conta.patch delete mode 100644 0050-clean-add-init-fd-in-lxc_init_clean_handler.patch delete mode 100644 0051-init-pids-add-init-fd-in-lxc_init_pids_handler.patch delete mode 100644 0052-setupdev-add-judge-whether-have-mount-dev-entry.patch delete mode 100644 0053-attach-seprate-i-and-t-flags.patch delete mode 100644 0054-start-do-not-check-pid-die-when-lxc_poll-exit.patch delete mode 100644 0055-terminal-not-close-pipe-when-lxc_poll-exit.patch delete mode 100644 0056-attach-add-sigfd-to-monitor-the-exit-of-pid.patch delete mode 100644 0057-attach-add-read-data-from-attach-sigfd.patch delete mode 100644 0058-support-syslog-for-console.patch delete mode 100644 0059-set-state-to-stopped.patch delete mode 100644 0060-attach-append-error-msg-when-call-attach-failed.patch delete mode 100644 0061-mount-fix-symlink-error-use-parsed-path.patch delete mode 100644 0062-change-log-level-of-seccomp-setup.patch delete mode 100644 0063-hook-fix-memeory-leak.patch delete mode 100644 0064-termainal-fix-console-log-memory-leak.patch delete mode 100644 0065-lxc-disable-terminal-stdout-stderr-pipe-O_NONBLOCK.patch delete mode 100644 0066-lxc-fix-tests-build-error.patch delete mode 100644 0067-set-normal-ret-value-when-populate-exist-device-successfully.patch delete mode 100644 0068-lxc-config-default-cgroup-pattern-to-lxc-n.patch delete mode 100644 0069-rootfs-support-use-host-rootfs-as-container-rootfs.patch delete mode 100644 0070-freeze-do-not-communicate-to-lxc-parent-when-unpause.patch delete mode 100644 lxc-4.0.1.tar.gz create mode 100644 lxc-4.0.3.tar.gz diff --git a/0001-huawei-adapt-to-huawei-4.0.3.patch b/0001-huawei-adapt-to-huawei-4.0.3.patch new file mode 100644 index 0000000..ec4901b --- /dev/null +++ b/0001-huawei-adapt-to-huawei-4.0.3.patch @@ -0,0 +1,22319 @@ +From 8a62b519510080bb361cdd058d0e7a5edd955a95 Mon Sep 17 00:00:00 2001 +From: lifeng68 +Date: Wed, 15 Jul 2020 09:32:32 +0800 +Subject: [PATCH] huawei: adapt to huawei 4.0.3 + +Signed-off-by: lifeng68 +--- + CODING_STYLE.md | 13 +- + .../apparmor/abstractions/start-container.in | 2 - + config/init/common/lxc-net.in | 2 +- + config/templates/common.conf.in | 31 - + config/templates/userns.conf.in | 8 - + config/yum/lxc-patch.py | 1 + + configure.ac | 59 +- + doc/ja/lxc.container.conf.sgml.in | 20 +- + doc/lxc.container.conf.sgml.in | 18 +- + hooks/Makefile.am | 3 + + src/include/fexecve.c | 6 +- + src/include/openpty.c | 28 +- + src/include/openpty.h | 10 +- + src/lxc/Makefile.am | 47 +- + src/lxc/af_unix.c | 37 +- + src/lxc/af_unix.h | 34 +- + src/lxc/api_extensions.h | 1 - + src/lxc/attach.c | 543 +++- + src/lxc/attach.h | 6 + + src/lxc/attach_options.h | 21 +- + src/lxc/cgroups/cgfsng.c | 1363 +++++++-- + src/lxc/cgroups/cgroup.c | 2 +- + src/lxc/cgroups/cgroup.h | 27 +- + src/lxc/cgroups/cgroup2_devices.c | 41 +- + src/lxc/cmd/lxc-update-config.in | 2 +- + src/lxc/cmd/lxc_init.c | 2 +- + src/lxc/cmd/lxc_monitord.c | 2 +- + src/lxc/cmd/lxc_user_nic.c | 60 +- + src/lxc/cmd/lxc_usernsexec.c | 10 +- + src/lxc/commands.c | 293 +- + src/lxc/commands.h | 18 +- + src/lxc/commands_utils.c | 5 +- + src/lxc/compiler.h | 18 - + src/lxc/conf.c | 2517 ++++++++++++++--- + src/lxc/conf.h | 111 +- + src/lxc/confile.c | 645 ++++- + src/lxc/confile.h | 11 +- + src/lxc/confile_utils.c | 12 - + src/lxc/confile_utils.h | 10 +- + src/lxc/criu.c | 27 +- + src/lxc/exec_commands.c | 416 +++ + src/lxc/exec_commands.h | 73 + + src/lxc/execute.c | 23 +- + src/lxc/file_utils.h | 49 +- + src/lxc/initutils.c | 4 + + src/lxc/isulad_utils.c | 99 + + src/lxc/isulad_utils.h | 20 + + src/lxc/json/defs.c | 205 ++ + src/lxc/json/defs.h | 37 + + src/lxc/json/json_common.c | 1153 ++++++++ + src/lxc/json/json_common.h | 185 ++ + src/lxc/json/logger_json_file.c | 246 ++ + src/lxc/json/logger_json_file.h | 45 + + src/lxc/json/oci_runtime_hooks.c | 52 + + src/lxc/json/oci_runtime_hooks.h | 15 + + src/lxc/json/oci_runtime_spec.c | 195 ++ + src/lxc/json/oci_runtime_spec.h | 37 + + src/lxc/json/read-file.c | 95 + + src/lxc/json/read-file.h | 11 + + src/lxc/log.c | 72 +- + src/lxc/log.h | 23 +- + src/lxc/lsm/apparmor.c | 12 +- + src/lxc/lxc.h | 20 +- + src/lxc/lxccontainer.c | 674 ++++- + src/lxc/lxccontainer.h | 129 +- + src/lxc/lxclock.c | 27 + + src/lxc/lxclock.h | 4 + + src/lxc/macro.h | 17 - + src/lxc/mainloop.c | 15 +- + src/lxc/mainloop.h | 4 - + src/lxc/memory_utils.h | 8 +- + src/lxc/namespace.c | 27 + + src/lxc/namespace.h | 90 + + src/lxc/network.c | 105 +- + src/lxc/network.h | 4 +- + src/lxc/path.c | 655 +++++ + src/lxc/path.h | 65 + + src/lxc/process_utils.h | 290 -- + src/lxc/{process_utils.c => raw_syscalls.c} | 71 +- + src/lxc/raw_syscalls.h | 94 + + src/lxc/rexec.c | 14 +- + src/lxc/seccomp.c | 582 +++- + src/lxc/start.c | 1052 ++++++- + src/lxc/start.h | 43 +- + src/lxc/storage/block.c | 86 + + src/lxc/storage/block.h | 41 + + src/lxc/storage/btrfs.c | 11 + + src/lxc/storage/dir.c | 36 +- + src/lxc/storage/loop.c | 36 +- + src/lxc/storage/overlay.c | 8 + + src/lxc/storage/rsync.c | 8 +- + src/lxc/storage/storage.c | 29 +- + src/lxc/storage/storage_utils.c | 56 +- + src/lxc/storage/zfs.c | 15 +- + src/lxc/string_utils.c | 1 + + src/lxc/sync.h | 4 + + src/lxc/syscall_numbers.h | 112 +- + src/lxc/syscall_wrappers.h | 24 - + src/lxc/terminal.c | 1113 +++++++- + src/lxc/terminal.h | 67 +- + src/lxc/tools/arguments.h | 23 + + src/lxc/tools/lxc_attach.c | 399 ++- + src/lxc/tools/lxc_ls.c | 16 +- + src/lxc/tools/lxc_start.c | 95 + + src/lxc/utils.c | 297 +- + src/lxc/utils.h | 95 +- + src/lxc/uuid.c | 2 +- + src/tests/Makefile.am | 10 +- + src/tests/attach.c | 9 + + src/tests/console.c | 24 +- + src/tests/containertests.c | 2 +- + src/tests/lxc-test-no-new-privs | 6 +- + src/tests/lxc-test-usernsexec | 368 --- + src/tests/lxc_raw_clone.c | 2 +- + templates/lxc-oci.in | 3 +- + 115 files changed, 13657 insertions(+), 2464 deletions(-) + create mode 100644 src/lxc/exec_commands.c + create mode 100644 src/lxc/exec_commands.h + create mode 100644 src/lxc/isulad_utils.c + create mode 100644 src/lxc/isulad_utils.h + create mode 100644 src/lxc/json/defs.c + create mode 100644 src/lxc/json/defs.h + create mode 100755 src/lxc/json/json_common.c + create mode 100755 src/lxc/json/json_common.h + create mode 100644 src/lxc/json/logger_json_file.c + create mode 100644 src/lxc/json/logger_json_file.h + create mode 100644 src/lxc/json/oci_runtime_hooks.c + create mode 100644 src/lxc/json/oci_runtime_hooks.h + create mode 100644 src/lxc/json/oci_runtime_spec.c + create mode 100644 src/lxc/json/oci_runtime_spec.h + create mode 100644 src/lxc/json/read-file.c + create mode 100644 src/lxc/json/read-file.h + create mode 100644 src/lxc/path.c + create mode 100644 src/lxc/path.h + delete mode 100644 src/lxc/process_utils.h + rename src/lxc/{process_utils.c => raw_syscalls.c} (68%) + create mode 100644 src/lxc/raw_syscalls.h + create mode 100644 src/lxc/storage/block.c + create mode 100644 src/lxc/storage/block.h + delete mode 100755 src/tests/lxc-test-usernsexec + +diff --git a/CODING_STYLE.md b/CODING_STYLE.md +index bf8b304a5..6e2ad8562 100644 +--- a/CODING_STYLE.md ++++ b/CODING_STYLE.md +@@ -733,11 +733,11 @@ __do_closedir __attribute__((__cleanup__(__auto_closedir__))) + ``` + For example: + ```c +-void turn_into_dependent_mounts(void) ++void remount_all_slave(void) + { + __do_free char *line = NULL; + __do_fclose FILE *f = NULL; +- __do_close int memfd = -EBADF, mntinfo_fd = -EBADF; ++ __do_close_prot_errno int memfd = -EBADF, mntinfo_fd = -EBADF; + int ret; + ssize_t copied; + size_t len = 0; +@@ -780,7 +780,7 @@ again: + return; + } + +- f = fdopen(memfd, "re"); ++ f = fdopen(memfd, "r"); + if (!f) { + SYSERROR("Failed to open copy of \"/proc/self/mountinfo\" to mark all shared. Continuing"); + return; +@@ -810,11 +810,12 @@ again: + null_endofword(target); + ret = mount(NULL, target, NULL, MS_SLAVE, NULL); + if (ret < 0) { +- SYSERROR("Failed to recursively turn old root mount tree into dependent mount. Continuing..."); ++ SYSERROR("Failed to make \"%s\" MS_SLAVE", target); ++ ERROR("Continuing..."); + continue; + } +- TRACE("Recursively turned old root mount tree into dependent mount"); ++ TRACE("Remounted \"%s\" as MS_SLAVE", target); + } +- TRACE("Turned all mount table entries into dependent mount"); ++ TRACE("Remounted all mount table entries as MS_SLAVE"); + } + ``` +diff --git a/config/apparmor/abstractions/start-container.in b/config/apparmor/abstractions/start-container.in +index 9998f1121..f2b48235d 100644 +--- a/config/apparmor/abstractions/start-container.in ++++ b/config/apparmor/abstractions/start-container.in +@@ -21,8 +21,6 @@ + # allow pre-mount hooks to stage mounts under /var/lib/lxc// + mount -> /var/lib/lxc/{**,}, + +- mount /dev/.lxc-boot-id -> /proc/sys/kernel/random/boot_id, +- + # required for some pre-mount hooks + mount fstype=overlayfs, + mount fstype=aufs, +diff --git a/config/init/common/lxc-net.in b/config/init/common/lxc-net.in +index a7dfa6f19..df9f1181d 100644 +--- a/config/init/common/lxc-net.in ++++ b/config/init/common/lxc-net.in +@@ -46,7 +46,7 @@ _ifdown() { + _ifup() { + MASK=`_netmask2cidr ${LXC_NETMASK}` + CIDR_ADDR="${LXC_ADDR}/${MASK}" +- ip addr add ${CIDR_ADDR} broadcast + dev ${LXC_BRIDGE} ++ ip addr add ${CIDR_ADDR} dev ${LXC_BRIDGE} + ip link set dev ${LXC_BRIDGE} address $LXC_BRIDGE_MAC + ip link set dev ${LXC_BRIDGE} up + } +diff --git a/config/templates/common.conf.in b/config/templates/common.conf.in +index 286c5e4a3..c4b3bdcce 100644 +--- a/config/templates/common.conf.in ++++ b/config/templates/common.conf.in +@@ -15,8 +15,6 @@ lxc.cap.drop = mac_admin mac_override sys_time sys_module sys_rawio + # Ensure hostname is changed on clone + lxc.hook.clone = @LXCHOOKDIR@/clonehostname + +-# Default legacy cgroup configuration +-# + # CGroup whitelist + lxc.cgroup.devices.deny = a + ## Allow any mknod (but not reading/writing the node) +@@ -44,35 +42,6 @@ lxc.cgroup.devices.allow = c 136:* rwm + ### fuse + lxc.cgroup.devices.allow = c 10:229 rwm + +-# Default unified cgroup configuration +-# +-# CGroup whitelist +-lxc.cgroup2.devices.deny = a +-## Allow any mknod (but not reading/writing the node) +-lxc.cgroup2.devices.allow = c *:* m +-lxc.cgroup2.devices.allow = b *:* m +-## Allow specific devices +-### /dev/null +-lxc.cgroup2.devices.allow = c 1:3 rwm +-### /dev/zero +-lxc.cgroup2.devices.allow = c 1:5 rwm +-### /dev/full +-lxc.cgroup2.devices.allow = c 1:7 rwm +-### /dev/tty +-lxc.cgroup2.devices.allow = c 5:0 rwm +-### /dev/console +-lxc.cgroup2.devices.allow = c 5:1 rwm +-### /dev/ptmx +-lxc.cgroup2.devices.allow = c 5:2 rwm +-### /dev/random +-lxc.cgroup2.devices.allow = c 1:8 rwm +-### /dev/urandom +-lxc.cgroup2.devices.allow = c 1:9 rwm +-### /dev/pts/* +-lxc.cgroup2.devices.allow = c 136:* rwm +-### fuse +-lxc.cgroup2.devices.allow = c 10:229 rwm +- + # Setup the default mounts + lxc.mount.auto = cgroup:mixed proc:mixed sys:mixed + lxc.mount.entry = /sys/fs/fuse/connections sys/fs/fuse/connections none bind,optional 0 0 +diff --git a/config/templates/userns.conf.in b/config/templates/userns.conf.in +index 69d992680..19013da5b 100644 +--- a/config/templates/userns.conf.in ++++ b/config/templates/userns.conf.in +@@ -1,15 +1,7 @@ + # CAP_SYS_ADMIN in init-user-ns is required for cgroup.devices +-# +-# Default legacy cgroup configuration +-# + lxc.cgroup.devices.deny = + lxc.cgroup.devices.allow = + +-# Default unified cgroup configuration +-# +-lxc.cgroup2.devices.deny = +-lxc.cgroup2.devices.allow = +- + # Start with a full set of capabilities in user namespaces. + lxc.cap.drop = + lxc.cap.keep = +diff --git a/config/yum/lxc-patch.py b/config/yum/lxc-patch.py +index fd48298d6..d639e8425 100644 +--- a/config/yum/lxc-patch.py ++++ b/config/yum/lxc-patch.py +@@ -24,6 +24,7 @@ + import os + from fnmatch import fnmatch + from yum.plugins import TYPE_INTERACTIVE ++from yum.plugins import PluginYumExit + + requires_api_version = '2.0' + plugin_type = (TYPE_INTERACTIVE,) +diff --git a/configure.ac b/configure.ac +index 059d57d38..9eb6dcb2b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -43,6 +43,7 @@ AM_INIT_AUTOMAKE([-Wall -Werror -Wno-portability subdir-objects]) + AC_CANONICAL_HOST + AM_PROG_CC_C_O + AC_USE_SYSTEM_EXTENSIONS ++CFLAGS=`echo "${CFLAGS#\-g}"` + + # Test if we have a new enough compiler. + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +@@ -119,6 +120,9 @@ AM_CONDITIONAL([DISTRO_UBUNTU], [test "x$with_distro" = "xubuntu"]) + + AC_CONFIG_LINKS([config/etc/default.conf:config/etc/${distroconf}]) + ++# Check yajl ++PKG_CHECK_MODULES([YAJL], [yajl >= 2],[],[AC_MSG_ERROR([You must install yajl >= 2])]) ++ + # Check for init system type + AC_MSG_CHECKING([for init system type]) + AC_ARG_WITH([init-script], +@@ -187,6 +191,11 @@ AC_ARG_ENABLE([werror], + [AS_HELP_STRING([--disable-werror], [do not treat warnings as errors])], + [enable_werror=$enableval], [enable_werror=yes]) + ++AC_ARG_ENABLE([debug], ++ [AC_HELP_STRING([--enable-debug], ++ [set -g into cflags [default=no]])], ++ [], [enable_debug=no]) ++ + # Allow disabling rpath + AC_ARG_ENABLE([rpath], + [AS_HELP_STRING([--enable-rpath], [set rpath in executables [default=no]])], +@@ -487,7 +496,7 @@ AC_ARG_WITH([rootfs-path], + # cgroup pattern specification + AC_ARG_WITH([cgroup-pattern], + [AS_HELP_STRING([--with-cgroup-pattern=pattern], [pattern for container cgroups])], +- [with_cgroup_pattern=$withval], [with_cgroup_pattern=['']]) ++ [with_cgroup_pattern=$withval], [with_cgroup_pattern=['lxc/%n']]) + + # The path for the apparmor_parser's cache for generated apparmor profiles + AC_ARG_WITH([apparmor-cache-dir], +@@ -622,10 +631,7 @@ AC_CHECK_HEADER([ifaddrs.h], + AC_HEADER_MAJOR + + # Check for some syscalls functions +-AC_CHECK_FUNCS([setns pivot_root sethostname unshare rand_r confstr faccessat gettid memfd_create move_mount open_tree execveat clone3]) +-AC_CHECK_TYPES([struct clone_args], [], [], [[#include ]]) +-AC_CHECK_MEMBERS([struct clone_args.set_tid],[],[],[[#include ]]) +-AC_CHECK_MEMBERS([struct clone_args.cgroup],[],[],[[#include ]]) ++AC_CHECK_FUNCS([setns pivot_root sethostname unshare rand_r confstr faccessat gettid memfd_create]) + + # Check for strerror_r() support. Defines: + # - HAVE_STRERROR_R if available +@@ -732,7 +738,6 @@ AX_CHECK_COMPILE_FLAG([-fno-strict-aliasing], [CFLAGS="$CFLAGS -fno-strict-alias + AX_CHECK_COMPILE_FLAG([-fstack-clash-protection], [CFLAGS="$CFLAGS -fstack-clash-protection"],,[-Werror]) + AX_CHECK_LINK_FLAG([-fstack-protector-strong], [CFLAGS="$CFLAGS -fstack-protector-strong"],,[-Werror]) + AX_CHECK_LINK_FLAG([--param=ssp-buffer-size=4], [CFLAGS="$CFLAGS --param=ssp-buffer-size=4"],,[-Werror]) +-AX_CHECK_COMPILE_FLAG([-g], [CFLAGS="$CFLAGS -g"],,[-Werror]) + AX_CHECK_COMPILE_FLAG([--mcet -fcf-protection], [CFLAGS="$CFLAGS --mcet -fcf-protection"],,[-Werror]) + AX_CHECK_COMPILE_FLAG([-Werror=implicit-function-declaration], [CFLAGS="$CFLAGS -Werror=implicit-function-declaration"],,[-Werror]) + AX_CHECK_COMPILE_FLAG([-Wlogical-op], [CFLAGS="$CFLAGS -Wlogical-op"],,[-Werror]) +@@ -756,40 +761,24 @@ AX_CHECK_COMPILE_FLAG([-Wnested-externs], [CFLAGS="$CFLAGS -Wnested-externs"],,[ + AX_CHECK_COMPILE_FLAG([-fasynchronous-unwind-tables], [CFLAGS="$CFLAGS -fasynchronous-unwind-tables"],,[-Werror]) + AX_CHECK_COMPILE_FLAG([-pipe], [CFLAGS="$CFLAGS -pipe"],,[-Werror]) + AX_CHECK_COMPILE_FLAG([-fexceptions], [CFLAGS="$CFLAGS -fexceptions"],,[-Werror]) +-AX_CHECK_COMPILE_FLAG([-Warray-bounds], [CFLAGS="$CFLAGS -Warray-bounds"],,[-Werror]) +-AX_CHECK_COMPILE_FLAG([-Wrestrict], [CFLAGS="$CFLAGS -Wrestrict"],,[-Werror]) +-AX_CHECK_COMPILE_FLAG([-Wreturn-local-addr], [CFLAGS="$CFLAGS -Wreturn-local-addr"],,[-Werror]) +-AX_CHECK_COMPILE_FLAG([-Wstringop-overflow], [CFLAGS="$CFLAGS -Wstringop-overflow"],,[-Werror]) + + AX_CHECK_LINK_FLAG([-z relro], [LDFLAGS="$LDFLAGS -z relro"],,[]) + AX_CHECK_LINK_FLAG([-z now], [LDFLAGS="$LDFLAGS -z now"],,[]) ++AX_CHECK_LINK_FLAG([-z noexecstack], [LDFLAGS="$LDFLAGS -z noexecstack"],,[]) + +-CFLAGS="$CFLAGS -Wvla -std=gnu11 -fms-extensions" ++CFLAGS="$CFLAGS -Wvla -std=gnu11 -D_FORTIFY_SOURCE=2 -Wall -fPIC -fPIE -pie" + if test "x$enable_werror" = "xyes"; then + CFLAGS="$CFLAGS -Werror" + fi + ++if test "x$enable_debug" = "xyes"; then ++ CFLAGS="$CFLAGS -g" ++fi ++ + AC_ARG_ENABLE([thread-safety], + [AS_HELP_STRING([--enable-thread-safety], [enforce thread-safety otherwise fail the build [default=yes]])], + [enable_thread_safety=$enableval], [enable_thread_safety=yes]) + AM_CONDITIONAL([ENFORCE_THREAD_SAFETY], [test "x$enable_thread_safety" = "xyes"]) +-if test "x$enable_thread_safety" = "xyes"; then +- AC_DEFINE([ENFORCE_THREAD_SAFETY], 1, [enforce thread-safety otherwise fail the build]) +- AC_MSG_RESULT([yes]) +-else +- AC_MSG_RESULT([no]) +-fi +- +-AC_ARG_ENABLE([coverity-build], +- [AS_HELP_STRING([--enable-coverity-build], [build for use with Coverity [default=no]])], +- [enable_coverity_build=$enableval], [enable_coverity_build=no]) +-AM_CONDITIONAL([ENABLE_COVERITY_BUILD], [test "x$enable_coverity_build" = "xyes"]) +-if test "x$enable_coverity_build" = "xyes"; then +- AC_DEFINE([ENABLE_COVERITY_BUILD], 1, [build for use with Coverity]) +- AC_MSG_RESULT([yes]) +-else +- AC_MSG_RESULT([no]) +-fi + + AC_ARG_ENABLE([dlog], + [AS_HELP_STRING([--enable-dlog], [enable dlog support [default=no]])], +@@ -815,6 +804,17 @@ else + AC_MSG_RESULT([no]) + fi + ++AC_MSG_CHECKING([Whether adapt to iSulad]) ++AC_ARG_ENABLE([isulad], ++ [AC_HELP_STRING([--enable-isulad], [enable adapt to iSulad [default=yes]])], ++ [adapt_isulad=$enableval], [adapt_isulad=yes]) ++AM_CONDITIONAL([HAVE_ISULAD], [test "x$adapt_isulad" = "xyes"]) ++if test "x$adapt_isulad" = "xyes"; then ++ AC_DEFINE([HAVE_ISULAD], 1, [adapt to iSulad]) ++ AC_MSG_RESULT([yes]) ++else ++ AC_MSG_RESULT([no]) ++fi + # Files requiring some variable expansion + AC_CONFIG_FILES([ + Makefile +@@ -1061,10 +1061,9 @@ Documentation: + - user documentation: $enable_doc + + Debugging: ++ - tests: $enable_tests + - ASAN: $enable_asan +- - Coverity: $enable_coverity_build + - mutex debugging: $enable_mutex_debugging +- - tests: $enable_tests + + Paths: + - Logs in configpath: $enable_configpath_log +diff --git a/doc/ja/lxc.container.conf.sgml.in b/doc/ja/lxc.container.conf.sgml.in +index 38b623243..fc692b409 100644 +--- a/doc/ja/lxc.container.conf.sgml.in ++++ b/doc/ja/lxc.container.conf.sgml.in +@@ -713,25 +713,25 @@ by KATOH Yasufumi + modes are , and + . It defaults to mode. + In mode TX processing up to L3 happens on the stack instance +- attached to the dependent device and packets are switched to the stack instance of the +- parent device for the L2 processing and routing from that instance will be +- used before packets are queued on the outbound device. In this mode the dependent devices ++ attached to the slave device and packets are switched to the stack instance of the ++ master device for the L2 processing and routing from that instance will be ++ used before packets are queued on the outbound device. In this mode the slaves + will not receive nor can send multicast / broadcast traffic. + In mode TX processing is very similar to the L3 mode except that + iptables (conn-tracking) works in this mode and hence it is L3-symmetric (L3s). + This will have slightly less performance but that shouldn't matter since you are + choosing this mode over plain-L3 mode to make conn-tracking work. + In mode TX processing happens on the stack instance attached to +- the dependent device and packets are switched and queued to the parent device to send +- out. In this mode the dependent devices will RX/TX multicast and broadcast (if applicable) as well. ++ the slave device and packets are switched and queued to the master device to send ++ out. In this mode the slaves will RX/TX multicast and broadcast (if applicable) as well. + specifies the isolation mode. + The accepted isolation values are , + and . + It defaults to . +- In isolation mode dependent devices can cross-talk among themselves +- apart from talking through the parent device. ++ In isolation mode slaves can cross-talk among themselves ++ apart from talking through the master device. + In isolation mode the port is set in private mode. +- i.e. port won't allow cross communication between dependent devices. ++ i.e. port won't allow cross communication between slaves. + In isolation mode the port is set in VEPA mode. + i.e. port will offload switching functionality to the external entity as + described in 802.1Qbg. +@@ -1548,7 +1548,7 @@ by KATOH Yasufumi + fstab フォーマットの一行と同じフォーマットのマウントポイントの指定をします。 + + +- 加えて、LXC では rshared や rprivate といったマウント・プロパゲーションオプションと、独自の 3 つのマウントオプションが使えます。 ++ 加えて、LXC では rslave や rprivate といったマウント・プロパゲーションオプションと、独自の 3 つのマウントオプションが使えます。 + は、マウントが失敗しても失敗を返さずに無視します。 + は、マウントポイントをマウントする際にディレクトリもしくはファイルを作成します。 + を指定すると、マウントされたコンテナルートからの相対パスとして取得されます。 +diff --git a/doc/lxc.container.conf.sgml.in b/doc/lxc.container.conf.sgml.in +index 3ed71c214..ae04e3af3 100644 +--- a/doc/lxc.container.conf.sgml.in ++++ b/doc/lxc.container.conf.sgml.in +@@ -530,25 +530,25 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + modes are , and + . It defaults to mode. + In mode TX processing up to L3 happens on the stack instance +- attached to the dependent device and packets are switched to the stack instance of the +- parent device for the L2 processing and routing from that instance will be +- used before packets are queued on the outbound device. In this mode the dependent devices ++ attached to the slave device and packets are switched to the stack instance of the ++ master device for the L2 processing and routing from that instance will be ++ used before packets are queued on the outbound device. In this mode the slaves + will not receive nor can send multicast / broadcast traffic. + In mode TX processing is very similar to the L3 mode except that + iptables (conn-tracking) works in this mode and hence it is L3-symmetric (L3s). + This will have slightly less performance but that shouldn't matter since you are + choosing this mode over plain-L3 mode to make conn-tracking work. + In mode TX processing happens on the stack instance attached to +- the dependent device and packets are switched and queued to the parent device to send devices +- out. In this mode the dependent devices will RX/TX multicast and broadcast (if applicable) as well. ++ the slave device and packets are switched and queued to the master device to send ++ out. In this mode the slaves will RX/TX multicast and broadcast (if applicable) as well. + specifies the isolation mode. + The accepted isolation values are , + and . + It defaults to . +- In isolation mode dependent devices can cross-talk among themselves +- apart from talking through the parent device. ++ In isolation mode slaves can cross-talk among themselves ++ apart from talking through the master device. + In isolation mode the port is set in private mode. +- i.e. port won't allow cross communication between dependent devices. ++ i.e. port won't allow cross communication between slaves. + In isolation mode the port is set in VEPA mode. + i.e. port will offload switching functionality to the external entity as + described in 802.1Qbg. +@@ -1164,7 +1164,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Specify a mount point corresponding to a line in the + fstab format. + +- Moreover lxc supports mount propagation, such as rshared or ++ Moreover lxc supports mount propagation, such as rslave or + rprivate, and adds three additional mount options. + don't fail if mount does not work. + or +diff --git a/hooks/Makefile.am b/hooks/Makefile.am +index 5ae73d72c..ddfd4bc32 100644 +--- a/hooks/Makefile.am ++++ b/hooks/Makefile.am +@@ -10,6 +10,8 @@ hooks_SCRIPTS = \ + squid-deb-proxy-client \ + nvidia + ++ ++if !HAVE_ISULAD + binhooks_PROGRAMS = \ + unmount-namespace + +@@ -20,5 +22,6 @@ if IS_BIONIC + unmount_namespace_SOURCES += \ + ../src/include/lxcmntent.c ../src/include/lxcmntent.h + endif ++endif + + EXTRA_DIST=$(hooks_SCRIPTS) +diff --git a/src/include/fexecve.c b/src/include/fexecve.c +index 40d2b5b46..123f27309 100644 +--- a/src/include/fexecve.c ++++ b/src/include/fexecve.c +@@ -29,7 +29,7 @@ + #include + #include "config.h" + #include "macro.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + + int fexecve(int fd, char *const argv[], char *const envp[]) + { +@@ -41,9 +41,11 @@ int fexecve(int fd, char *const argv[], char *const envp[]) + return -1; + } + +- execveat(fd, "", argv, envp, AT_EMPTY_PATH); ++#ifdef __NR_execveat ++ lxc_raw_execveat(fd, "", argv, envp, AT_EMPTY_PATH); + if (errno != ENOSYS) + return -1; ++#endif + + ret = snprintf(procfd, sizeof(procfd), "/proc/self/fd/%d", fd); + if (ret < 0 || (size_t)ret >= sizeof(procfd)) { +diff --git a/src/include/openpty.c b/src/include/openpty.c +index 7804d4c98..01579c517 100644 +--- a/src/include/openpty.c ++++ b/src/include/openpty.c +@@ -34,43 +34,43 @@ + + #define _PATH_DEVPTMX "/dev/ptmx" + +-int openpty (int *aptmx, int *apts, char *name, struct termios *termp, ++int openpty (int *amaster, int *aslave, char *name, struct termios *termp, + struct winsize *winp) + { + char buf[PATH_MAX]; +- int ptmx, pts; ++ int master, slave; + +- ptmx = open(_PATH_DEVPTMX, O_RDWR); +- if (ptmx == -1) ++ master = open(_PATH_DEVPTMX, O_RDWR); ++ if (master == -1) + return -1; + +- if (grantpt(ptmx)) ++ if (grantpt(master)) + goto fail; + +- if (unlockpt(ptmx)) ++ if (unlockpt(master)) + goto fail; + +- if (ptsname_r(ptmx, buf, sizeof buf)) ++ if (ptsname_r(master, buf, sizeof buf)) + goto fail; + +- pts = open(buf, O_RDWR | O_NOCTTY); +- if (pts == -1) ++ slave = open(buf, O_RDWR | O_NOCTTY); ++ if (slave == -1) + goto fail; + + /* XXX Should we ignore errors here? */ + if (termp) +- tcsetattr(pts, TCSAFLUSH, termp); ++ tcsetattr(slave, TCSAFLUSH, termp); + if (winp) +- ioctl(pts, TIOCSWINSZ, winp); ++ ioctl(slave, TIOCSWINSZ, winp); + +- *aptmx = ptmx; +- *apts = pts; ++ *amaster = master; ++ *aslave = slave; + if (name != NULL) + strcpy(name, buf); + + return 0; + + fail: +- close(ptmx); ++ close(master); + return -1; + } +diff --git a/src/include/openpty.h b/src/include/openpty.h +index cb452e52a..6e7bf8d2d 100644 +--- a/src/include/openpty.h ++++ b/src/include/openpty.h +@@ -27,12 +27,10 @@ + #include + #include + +-/* +- * Create pseudo tty ptmx pts pair with @__name and set terminal +- * attributes according to @__termp and @__winp and return handles for both +- * ends in @__aptmx and @__apts. +- */ +-extern int openpty (int *__aptmx, int *__apts, char *__name, ++/* Create pseudo tty master slave pair with NAME and set terminal ++ attributes according to TERMP and WINP and return handles for both ++ ends in AMASTER and ASLAVE. */ ++extern int openpty (int *__amaster, int *__aslave, char *__name, + const struct termios *__termp, + const struct winsize *__winp); + +diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am +index d1e23647e..0e1ba8da9 100644 +--- a/src/lxc/Makefile.am ++++ b/src/lxc/Makefile.am +@@ -27,7 +27,7 @@ noinst_HEADERS = api_extensions.h \ + memory_utils.h \ + monitor.h \ + namespace.h \ +- process_utils.h \ ++ raw_syscalls.h \ + rexec.h \ + start.h \ + state.h \ +@@ -52,6 +52,16 @@ noinst_HEADERS = api_extensions.h \ + utils.h \ + uuid.h + ++if HAVE_ISULAD ++noinst_HEADERS += isulad_utils.h path.h \ ++ json/json_common.h json/defs.h \ ++ json/oci_runtime_hooks.h \ ++ json/logger_json_file.h \ ++ json/oci_runtime_spec.h \ ++ json/read-file.h \ ++ exec_commands.h ++endif ++ + if IS_BIONIC + noinst_HEADERS += ../include/fexecve.h \ + ../include/lxcmntent.h \ +@@ -128,13 +138,14 @@ liblxc_la_SOURCES = af_unix.c af_unix.h \ + network.c network.h \ + monitor.c monitor.h \ + parse.c parse.h \ +- process_utils.c process_utils.h \ ++ raw_syscalls.c raw_syscalls.h \ + ringbuf.c ringbuf.h \ + rtnl.c rtnl.h \ + state.c state.h \ + start.c start.h \ + storage/btrfs.c storage/btrfs.h \ + storage/dir.c storage/dir.h \ ++ storage/block.c storage/block.h \ + storage/loop.c storage/loop.h \ + storage/lvm.c storage/lvm.h \ + storage/nbd.c storage/nbd.h \ +@@ -154,6 +165,18 @@ liblxc_la_SOURCES = af_unix.c af_unix.h \ + version.h \ + $(LSM_SOURCES) + ++if HAVE_ISULAD ++liblxc_la_SOURCES += isulad_utils.c isulad_utils.h \ ++ path.c path.h \ ++ json/json_common.c json/json_common.h \ ++ json/defs.h json/defs.c \ ++ json/oci_runtime_hooks.c json/oci_runtime_hooks.h \ ++ json/logger_json_file.c json/logger_json_file.h \ ++ json/oci_runtime_spec.c json/oci_runtime_spec.h \ ++ json/read-file.c json/read-file.h \ ++ exec_commands.c exec_commands.h ++endif ++ + if IS_BIONIC + liblxc_la_SOURCES += ../include/fexecve.c ../include/fexecve.h \ + ../include/lxcmntent.c ../include/lxcmntent.h \ +@@ -212,6 +235,10 @@ AM_CFLAGS = -DLXCROOTFSMOUNT=\"$(LXCROOTFSMOUNT)\" \ + -I $(top_srcdir)/src/lxc/storage \ + -I $(top_srcdir)/src/lxc/cgroups + ++if HAVE_ISULAD ++AM_CFLAGS += -I $(top_srcdir)/src/lxc/json ++AM_CFLAGS += -DHAVE_ISULAD ++endif + if ENABLE_APPARMOR + AM_CFLAGS += -DHAVE_APPARMOR + endif +@@ -249,6 +276,10 @@ liblxc_la_CFLAGS += -fsanitize=address \ + -fno-omit-frame-pointer + endif + ++if HAVE_ISULAD ++liblxc_la_CFLAGS += -D_FORTIFY_SOURCE=2 -Wall ++endif ++ + if ENABLE_UBSAN + liblxc_la_CFLAGS += -fsanitize=undefined + endif +@@ -258,6 +289,12 @@ liblxc_la_LDFLAGS = -pthread \ + -Wl,-soname,liblxc.so.$(firstword $(subst ., ,@LXC_ABI@)) \ + -version-info @LXC_ABI_MAJOR@ + ++if HAVE_ISULAD ++liblxc_la_LDFLAGS += @YAJL_LIBS@ -Wl,-z,relro \ ++ -Wl,-z,now \ ++ -Wl,-z,noexecstack ++endif ++ + liblxc_la_LIBADD = $(CAP_LIBS) \ + $(OPENSSL_LIBS) \ + $(SELINUX_LIBS) \ +@@ -384,7 +421,7 @@ init_lxc_SOURCES = cmd/lxc_init.c \ + initutils.c initutils.h \ + memory_utils.h \ + parse.c parse.h \ +- process_utils.c process_utils.h \ ++ raw_syscalls.c raw_syscalls.h \ + syscall_numbers.h \ + string_utils.c string_utils.h + +@@ -395,7 +432,7 @@ lxc_monitord_SOURCES = cmd/lxc_monitord.c \ + log.c log.h \ + mainloop.c mainloop.h \ + monitor.c monitor.h \ +- process_utils.c process_utils.h \ ++ raw_syscalls.c raw_syscalls.h \ + syscall_numbers.h \ + utils.c utils.h + lxc_user_nic_SOURCES = cmd/lxc_user_nic.c \ +@@ -404,7 +441,7 @@ lxc_user_nic_SOURCES = cmd/lxc_user_nic.c \ + memory_utils.h \ + network.c network.h \ + parse.c parse.h \ +- process_utils.c process_utils.h \ ++ raw_syscalls.c raw_syscalls.h \ + syscall_numbers.h \ + file_utils.c file_utils.h \ + string_utils.c string_utils.h \ +diff --git a/src/lxc/af_unix.c b/src/lxc/af_unix.c +index 5cf54917f..9f268be60 100644 +--- a/src/lxc/af_unix.c ++++ b/src/lxc/af_unix.c +@@ -18,7 +18,7 @@ + #include "log.h" + #include "macro.h" + #include "memory_utils.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "utils.h" + + #ifndef HAVE_STRLCPY +@@ -168,7 +168,7 @@ int lxc_unix_send_fds(int fd, int *sendfds, int num_sendfds, void *data, + } + + static int lxc_abstract_unix_recv_fds_iov(int fd, int *recvfds, int num_recvfds, +- struct iovec *iov, size_t iovlen) ++ struct iovec *iov, size_t iovlen, unsigned int timeout) + { + __do_free char *cmsgbuf = NULL; + int ret; +@@ -188,8 +188,24 @@ static int lxc_abstract_unix_recv_fds_iov(int fd, int *recvfds, int num_recvfds, + msg.msg_iov = iov; + msg.msg_iovlen = iovlen; + ++#ifdef HAVE_ISULAD ++ struct timeval out; ++ if (timeout > 0) { ++ memset(&out, 0, sizeof(out)); ++ out.tv_sec = timeout / 1000000; ++ out.tv_usec = timeout % 1000000; ++ ret = setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, ++ (const void *)&out, sizeof(out)); ++ if (ret < 0) { ++ ERROR("Failed to set %u timeout on containter " ++ "state socket", timeout); ++ return ret; ++ } ++ } ++#endif ++ + do { +- ret = recvmsg(fd, &msg, MSG_CMSG_CLOEXEC); ++ ret = recvmsg(fd, &msg, 0); + } while (ret < 0 && errno == EINTR); + if (ret < 0 || ret == 0) + return ret; +@@ -220,8 +236,21 @@ int lxc_abstract_unix_recv_fds(int fd, int *recvfds, int num_recvfds, + .iov_base = data ? data : buf, + .iov_len = data ? size : sizeof(buf), + }; +- return lxc_abstract_unix_recv_fds_iov(fd, recvfds, num_recvfds, &iov, 1); ++ return lxc_abstract_unix_recv_fds_iov(fd, recvfds, num_recvfds, &iov, 1, 0); ++} ++ ++#ifdef HAVE_ISULAD ++int lxc_abstract_unix_recv_fds_timeout(int fd, int *recvfds, int num_recvfds, ++ void *data, size_t size, unsigned int timeout) ++{ ++ char buf[1] = {0}; ++ struct iovec iov = { ++ .iov_base = data ? data : buf, ++ .iov_len = data ? size : sizeof(buf), ++ }; ++ return lxc_abstract_unix_recv_fds_iov(fd, recvfds, num_recvfds, &iov, 1, timeout); + } ++#endif + + int lxc_abstract_unix_send_credential(int fd, void *data, size_t size) + { +diff --git a/src/lxc/af_unix.h b/src/lxc/af_unix.h +index 5a1482c35..6943a61ee 100644 +--- a/src/lxc/af_unix.h ++++ b/src/lxc/af_unix.h +@@ -7,38 +7,28 @@ + #include + #include + +-#include "compiler.h" +- + /* does not enforce \0-termination */ + extern int lxc_abstract_unix_open(const char *path, int type, int flags); + extern void lxc_abstract_unix_close(int fd); + /* does not enforce \0-termination */ + extern int lxc_abstract_unix_connect(const char *path); +- + extern int lxc_abstract_unix_send_fds(int fd, int *sendfds, int num_sendfds, +- void *data, size_t size) +-__access_r(2, 3) __access_r(4, 5); +- +-extern int lxc_abstract_unix_send_fds_iov(int fd, int *sendfds, int num_sendfds, +- struct iovec *iov, size_t iovlen) +-__access_r(2, 3); +- +-extern int lxc_abstract_unix_recv_fds(int fd, int *recvfds, int num_recvfds, +- void *data, size_t size) +-__access_r(2, 3) __access_r(4, 5); +- ++ void *data, size_t size); ++extern int lxc_abstract_unix_send_fds_iov(int fd, int *sendfds, ++ int num_sendfds, struct iovec *iov, ++ size_t iovlen); + extern int lxc_unix_send_fds(int fd, int *sendfds, int num_sendfds, void *data, + size_t size); +- +-extern int lxc_abstract_unix_send_credential(int fd, void *data, size_t size) +-__access_r(2, 3); +- +-extern int lxc_abstract_unix_rcv_credential(int fd, void *data, size_t size) +-__access_w(2, 3); +- ++extern int lxc_abstract_unix_recv_fds(int fd, int *recvfds, int num_recvfds, ++ void *data, size_t size); ++extern int lxc_abstract_unix_send_credential(int fd, void *data, size_t size); ++extern int lxc_abstract_unix_rcv_credential(int fd, void *data, size_t size); + extern int lxc_unix_sockaddr(struct sockaddr_un *ret, const char *path); + extern int lxc_unix_connect(struct sockaddr_un *addr); + extern int lxc_unix_connect_type(struct sockaddr_un *addr, int type); + extern int lxc_socket_set_timeout(int fd, int rcv_timeout, int snd_timeout); +- ++#ifdef HAVE_ISULAD ++int lxc_abstract_unix_recv_fds_timeout(int fd, int *recvfds, int num_recvfds, ++ void *data, size_t size, unsigned int timeout); ++#endif + #endif /* __LXC_AF_UNIX_H */ +diff --git a/src/lxc/api_extensions.h b/src/lxc/api_extensions.h +index 3afdc35b9..9ff071edf 100644 +--- a/src/lxc/api_extensions.h ++++ b/src/lxc/api_extensions.h +@@ -38,7 +38,6 @@ static char *api_extensions[] = { + "cgroup2_devices", + #endif + "cgroup2", +- "pidfd", + }; + + static size_t nr_api_extensions = sizeof(api_extensions) / sizeof(*api_extensions); +diff --git a/src/lxc/attach.c b/src/lxc/attach.c +index 38e16f2d1..068cc5f8e 100644 +--- a/src/lxc/attach.c ++++ b/src/lxc/attach.c +@@ -40,7 +40,7 @@ + #include "mainloop.h" + #include "memory_utils.h" + #include "namespace.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "syscall_wrappers.h" + #include "terminal.h" + #include "utils.h" +@@ -49,6 +49,25 @@ + #include + #endif + ++#ifdef HAVE_ISULAD ++#include "exec_commands.h" ++ ++typedef enum { ++ ATTACH_INIT, ++ ATTACH_TIMEOUT, ++ ATTACH_MAX, ++} attach_timeout_t; ++ ++static volatile attach_timeout_t g_attach_timeout_state = ATTACH_INIT; ++ ++struct attach_timeout_conf { ++ int64_t timeout; ++ unsigned long long start_time; ++ pid_t pid; ++}; ++ ++#endif ++ + lxc_log_define(attach, lxc); + + /* Define default options if no options are supplied by the user. */ +@@ -194,8 +213,12 @@ int lxc_attach_remount_sys_proc(void) + if (ret < 0) + return log_error_errno(-1, errno, "Failed to unshare mount namespace"); + +- if (detect_shared_rootfs() && mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL)) +- SYSERROR("Failed to recursively turn root mount tree into dependent mount. Continuing..."); ++ if (detect_shared_rootfs()) { ++ if (mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL)) { ++ SYSERROR("Failed to make / rslave"); ++ ERROR("Continuing..."); ++ } ++ } + + /* Assume /proc is always mounted, so remount it. */ + ret = umount2("/proc", MNT_DETACH); +@@ -625,23 +648,69 @@ static signed long get_personality(const char *name, const char *lxcpath) + + struct attach_clone_payload { + int ipc_socket; +- int terminal_pts_fd; ++ int terminal_slave_fd; + lxc_attach_options_t *options; + struct lxc_proc_context_info *init_ctx; + lxc_attach_exec_t exec_function; + void *exec_payload; ++#ifdef HAVE_ISULAD ++ struct lxc_terminal *terminal; ++#endif + }; + + static void lxc_put_attach_clone_payload(struct attach_clone_payload *p) + { + close_prot_errno_disarm(p->ipc_socket); +- close_prot_errno_disarm(p->terminal_pts_fd); ++ close_prot_errno_disarm(p->terminal_slave_fd); + if (p->init_ctx) { + lxc_proc_put_context_info(p->init_ctx); + p->init_ctx = NULL; + } + } + ++#ifdef HAVE_ISULAD ++static int isulad_set_attach_pipes(struct lxc_terminal *terminal) ++{ ++ int ret = 0; ++ if (terminal->pipes[0][1] >= 0) { ++ close(terminal->pipes[0][1]); ++ terminal->pipes[0][1] = -1; ++ } ++ ++ if (terminal->pipes[0][0] >= 0) { ++ ret = dup2(terminal->pipes[0][0], STDIN_FILENO); ++ if (ret < 0) ++ goto out; ++ } ++ ++ if (terminal->pipes[1][0] >= 0) { ++ close(terminal->pipes[1][0]); ++ terminal->pipes[1][0] = -1; ++ } ++ ++ if (terminal->pipes[1][1] >= 0) { ++ ret = dup2(terminal->pipes[1][1], STDOUT_FILENO); ++ if (ret < 0) ++ goto out; ++ } ++ if (terminal->pipes[2][0] >= 0) { ++ close(terminal->pipes[2][0]); ++ terminal->pipes[2][0] = -1; ++ } ++ ++ if (terminal->pipes[2][1] >= 0) { ++ ret = dup2(terminal->pipes[2][1], STDERR_FILENO); ++ if (ret < 0) ++ goto out; ++ } ++ ++ setsid(); ++out: ++ return ret; ++} ++ ++#endif ++ + static int attach_child_main(struct attach_clone_payload *payload) + { + int lsm_fd, ret; +@@ -654,6 +723,31 @@ static int attach_child_main(struct attach_clone_payload *payload) + bool needs_lsm = (options->namespaces & CLONE_NEWNS) && + (options->attach_flags & LXC_ATTACH_LSM) && + init_ctx->lsm_label; ++#ifdef HAVE_ISULAD ++ int msg_fd = -1; ++ sigset_t mask; ++ ++ /*isulad: record errpipe fd*/ ++ msg_fd = init_ctx->container->lxc_conf->errpipe[1]; ++ init_ctx->container->lxc_conf->errpipe[1] = -1; ++ /*isulad: set system umask */ ++ umask(init_ctx->container->lxc_conf->umask); ++ ++ /*isulad: restore default signal handlers and unblock all signals*/ ++ for (int i = 1; i < NSIG; i++) ++ signal(i, SIG_DFL); ++ ++ ret = sigfillset(&mask); ++ if (ret < 0) { ++ SYSERROR("Failed to fill signal mask"); ++ goto on_error;; ++ } ++ ret = sigprocmask(SIG_UNBLOCK, &mask, NULL); ++ if (ret < 0) { ++ SYSERROR("Failed to set signal mask"); ++ goto on_error; ++ } ++#endif + + /* A description of the purpose of this functionality is provided in the + * lxc-attach(1) manual page. We have to remount here and not in the +@@ -695,6 +789,24 @@ static int attach_child_main(struct attach_clone_payload *payload) + TRACE("Dropped capabilities"); + } + ++#ifdef HAVE_ISULAD ++ /* isulad: set workdir */ ++ if (init_ctx->container->lxc_conf->init_cwd) { ++ char *init_cwd; ++ init_cwd = init_ctx->container->lxc_conf->init_cwd; ++ /* try to create workdir if not exist */ ++ struct stat st; ++ if (stat(init_cwd, &st) < 0 && mkdir_p(init_cwd, 0750) < 0) { ++ SYSERROR("Try to create directory \"%s\" as workdir failed when attach", init_cwd); ++ goto on_error; ++ } ++ if (chdir(init_cwd)) { ++ SYSERROR("Could not change directory to \"%s\" when attach", init_cwd); ++ goto on_error; ++ } ++ } ++#endif ++ + /* Always set the environment (specify (LXC_ATTACH_KEEP_ENV, NULL, NULL) + * if you want this to be a no-op). + */ +@@ -736,8 +848,10 @@ static int attach_child_main(struct attach_clone_payload *payload) + goto on_error; + } + ++#ifndef HAVE_ISULAD + if (!lxc_setgroups(0, NULL) && errno != EPERM) + goto on_error; ++#endif + + if (options->namespaces & CLONE_NEWUSER) { + /* Check whether nsuid 0 has a mapping. */ +@@ -770,6 +884,13 @@ static int attach_child_main(struct attach_clone_payload *payload) + else + new_gid = ns_root_gid; + ++#ifdef HAVE_ISULAD ++ // isulad: set env home in container ++ if (lxc_setup_env_home(new_uid) < 0) { ++ goto on_error; ++ } ++#endif ++ + if ((init_ctx->container && init_ctx->container->lxc_conf && + init_ctx->container->lxc_conf->no_new_privs) || + (options->attach_flags & LXC_ATTACH_NO_NEW_PRIVS)) { +@@ -810,10 +931,12 @@ static int attach_child_main(struct attach_clone_payload *payload) + goto on_error; + } + ++#ifndef HAVE_ISULAD + close(payload->ipc_socket); + payload->ipc_socket = -EBADF; + lxc_proc_put_context_info(init_ctx); + payload->init_ctx = NULL; ++#endif + + /* The following is done after the communication socket is shut down. + * That way, all errors that might (though unlikely) occur up until this +@@ -856,13 +979,33 @@ static int attach_child_main(struct attach_clone_payload *payload) + } + + if (options->attach_flags & LXC_ATTACH_TERMINAL) { +- ret = lxc_terminal_prepare_login(payload->terminal_pts_fd); ++ ++#ifdef HAVE_ISULAD ++ /* isulad: dup2 pipe[0][0] to container stdin, pipe[1][1] to container stdout, pipe[2][1] to container stderr */ ++ if (payload->terminal->disable_pty) { ++ ret = isulad_set_attach_pipes(payload->terminal); ++ if (ret < 0) { ++ SYSERROR("Failed to prepare terminal file pipes"); ++ goto on_error; ++ } ++ } ++ ++ if(!payload->terminal->disable_pty && payload->terminal_slave_fd >= 0) { ++ ret = lxc_terminal_prepare_login(payload->terminal_slave_fd); ++ if (ret < 0) { ++ SYSERROR("Failed to prepare terminal file descriptor %d", payload->terminal_slave_fd); ++ goto on_error; ++ } ++ } ++#else ++ ret = lxc_terminal_prepare_login(payload->terminal_slave_fd); + if (ret < 0) { +- SYSERROR("Failed to prepare terminal file descriptor %d", payload->terminal_pts_fd); ++ SYSERROR("Failed to prepare terminal file descriptor %d", payload->terminal_slave_fd); + goto on_error; + } + +- TRACE("Prepared terminal file descriptor %d", payload->terminal_pts_fd); ++ TRACE("Prepared terminal file descriptor %d", payload->terminal_slave_fd); ++#endif + } + + /* Avoid unnecessary syscalls. */ +@@ -872,6 +1015,17 @@ static int attach_child_main(struct attach_clone_payload *payload) + if (new_gid == ns_root_gid) + new_gid = LXC_INVALID_GID; + ++#ifdef HAVE_ISULAD ++ if (prctl(PR_SET_KEEPCAPS, 1) < 0) { ++ SYSERROR("Failed to keep permitted capabilities"); ++ goto on_error; ++ } ++ ++ if (!lxc_setgroups(init_ctx->container->lxc_conf->init_groups_len, ++ init_ctx->container->lxc_conf->init_groups)) ++ goto on_error; ++#endif ++ + /* Make sure that the processes STDIO is correctly owned by the user that we are switching to */ + ret = fix_stdio_permissions(new_uid); + if (ret) +@@ -880,8 +1034,27 @@ static int attach_child_main(struct attach_clone_payload *payload) + if (!lxc_switch_uid_gid(new_uid, new_gid)) + goto on_error; + ++#ifdef HAVE_ISULAD ++ if (prctl(PR_SET_KEEPCAPS, 0) < 0) { ++ SYSERROR("Failed to clear permitted capabilities"); ++ goto on_error; ++ } ++ ++ if (lxc_drop_caps(init_ctx->container->lxc_conf) != 0) { ++ ERROR("Failed to drop caps."); ++ goto on_error; ++ } ++ ++ close(payload->ipc_socket); ++ payload->ipc_socket = -EBADF; ++ lxc_proc_put_context_info(init_ctx); ++ payload->init_ctx = NULL; ++ _exit(payload->exec_function(payload->exec_payload, msg_fd)); ++#else + /* We're done, so we can now do whatever the user intended us to do. */ + _exit(payload->exec_function(payload->exec_payload)); ++#endif ++ + + on_error: + lxc_put_attach_clone_payload(payload); +@@ -889,12 +1062,31 @@ on_error: + } + + static int lxc_attach_terminal(struct lxc_conf *conf, +- struct lxc_terminal *terminal) ++ struct lxc_terminal *terminal, lxc_attach_options_t *options) + { + int ret; + + lxc_terminal_init(terminal); + ++#ifdef HAVE_ISULAD ++ /* isulad: if we pass fifo in option, use them as init fifos */ ++ if (options->init_fifo[0]) { ++ free(terminal->init_fifo[0]); ++ terminal->init_fifo[0] = safe_strdup(options->init_fifo[0]); ++ } ++ if (options->init_fifo[1]) { ++ free(terminal->init_fifo[1]); ++ terminal->init_fifo[1] = safe_strdup(options->init_fifo[1]); ++ } ++ if (options->init_fifo[2]) { ++ free(terminal->init_fifo[2]); ++ terminal->init_fifo[2] = safe_strdup(options->init_fifo[2]); ++ } ++ ++ terminal->disable_pty = options->disable_pty; ++ terminal->open_stdin = options->open_stdin; ++#endif ++ + ret = lxc_terminal_create(terminal); + if (ret < 0) + return log_error(-1, "Failed to create terminal"); +@@ -932,14 +1124,14 @@ static int lxc_attach_terminal_mainloop_init(struct lxc_terminal *terminal, + return 0; + } + +-static inline void lxc_attach_terminal_close_ptmx(struct lxc_terminal *terminal) ++static inline void lxc_attach_terminal_close_master(struct lxc_terminal *terminal) + { +- close_prot_errno_disarm(terminal->ptmx); ++ close_prot_errno_disarm(terminal->master); + } + +-static inline void lxc_attach_terminal_close_pts(struct lxc_terminal *terminal) ++static inline void lxc_attach_terminal_close_slave(struct lxc_terminal *terminal) + { +- close_prot_errno_disarm(terminal->pts); ++ close_prot_errno_disarm(terminal->slave); + } + + static inline void lxc_attach_terminal_close_peer(struct lxc_terminal *terminal) +@@ -952,9 +1144,125 @@ static inline void lxc_attach_terminal_close_log(struct lxc_terminal *terminal) + close_prot_errno_disarm(terminal->log_fd); + } + ++#ifdef HAVE_ISULAD ++/* isulad: attach timeout thread function */ ++static void* wait_attach_timeout(void *arg) ++{ ++ struct attach_timeout_conf *conf = (struct attach_timeout_conf *)arg; ++ ++ if (!conf || conf->timeout < 1) ++ goto out; ++ sleep(conf->timeout); ++ if (lxc_process_alive(conf->pid, conf->start_time)) { ++ g_attach_timeout_state = ATTACH_TIMEOUT; ++ if (kill(conf->pid, SIGKILL) < 0) { ++ ERROR("Failed to send signal %d to pid %d", SIGKILL, conf->pid); ++ } ++ } ++ ++out: ++ free(conf); ++ return ((void *)0); ++} ++ ++/* isulad: create attach timeout thread */ ++static int create_attach_timeout_thread(int64_t attach_timeout, pid_t pid) ++{ ++ int ret = 0; ++ pthread_t ptid; ++ pthread_attr_t attr; ++ struct attach_timeout_conf *timeout_conf = NULL; ++ ++ timeout_conf = malloc(sizeof(struct attach_timeout_conf)); ++ if (timeout_conf == NULL) { ++ ERROR("Failed to malloc attach timeout conf"); ++ ret = -1; ++ goto out; ++ } ++ ++ memset(timeout_conf, 0, sizeof(struct attach_timeout_conf)); ++ timeout_conf->timeout = attach_timeout; ++ timeout_conf->pid = pid; ++ timeout_conf->start_time = lxc_get_process_startat(pid); ++ ++ pthread_attr_init(&attr); ++ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); ++ ret = pthread_create(&ptid, &attr, wait_attach_timeout, timeout_conf); ++ if (ret != 0) { ++ ERROR("Create attach wait timeout thread failed"); ++ free(timeout_conf); ++ goto out; ++ } ++ ++out: ++ return ret; ++} ++ ++static int attach_signal_handler(int fd, uint32_t events, void *data, ++ struct lxc_epoll_descr *descr) ++{ ++ int ret; ++ siginfo_t info; ++ struct signalfd_siginfo siginfo; ++ pid_t *pid = data; ++ ++ ret = lxc_read_nointr(fd, &siginfo, sizeof(siginfo)); ++ if (ret < 0) ++ return log_error(LXC_MAINLOOP_ERROR, "Failed to read signal info from signal file descriptor %d", fd); ++ ++ if (ret != sizeof(siginfo)) ++ return log_error(LXC_MAINLOOP_ERROR, "Unexpected size for struct signalfd_siginfo"); ++ ++ /* Check whether init is running. */ ++ info.si_pid = 0; ++ ret = waitid(P_PID, *pid, &info, WEXITED | WNOWAIT | WNOHANG); ++ if (ret == 0 && info.si_pid == *pid) { ++ return log_error(LXC_MAINLOOP_CLOSE, "Container attach init process %d exited", *pid); ++ } ++ ++ return LXC_MAINLOOP_CONTINUE; ++} ++ ++static int isulad_setup_signal_fd(sigset_t *oldmask) ++{ ++ int ret; ++ sigset_t mask; ++ const int signals[] = {SIGBUS, SIGILL, SIGSEGV, SIGWINCH}; ++ ++ /* Block everything except serious error signals. */ ++ ret = sigfillset(&mask); ++ if (ret < 0) ++ return -EBADF; ++ ++ for (int sig = 0; sig < (sizeof(signals) / sizeof(signals[0])); sig++) { ++ ret = sigdelset(&mask, signals[sig]); ++ if (ret < 0) ++ return -EBADF; ++ } ++ ++ ret = pthread_sigmask(SIG_BLOCK, &mask, oldmask); ++ if (ret < 0) ++ return log_error_errno(-EBADF, errno, ++ "Failed to set signal mask"); ++ ++ ret = signalfd(-1, &mask, SFD_CLOEXEC); ++ if (ret < 0) ++ return log_error_errno(-EBADF, ++ errno, "Failed to create signal file descriptor"); ++ ++ TRACE("Created signal file descriptor %d", ret); ++ ++ return ret; ++} ++ ++int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, ++ void *exec_payload, lxc_attach_options_t *options, ++ pid_t *attached_process, char **err_msg) ++#else + int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + void *exec_payload, lxc_attach_options_t *options, + pid_t *attached_process) ++#endif + { + int i, ret, status; + int ipc_sockets[2]; +@@ -966,6 +1274,13 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + struct lxc_conf *conf; + char *name, *lxcpath; + struct attach_clone_payload payload = {0}; ++#ifdef HAVE_ISULAD ++ struct lxc_exec_command_handler exec_command; ++ const char *suffix = options->suffix; ++ ++ exec_command.maincmd_fd = -1; ++ exec_command.terminal = &terminal; ++#endif + + ret = access("/proc/self/ns", X_OK); + if (ret) +@@ -1014,8 +1329,14 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + } + } + conf = init_ctx->container->lxc_conf; +- if (!conf) +- return log_error_errno(-EINVAL, EINVAL, "Missing container confifg"); ++ ++#ifdef HAVE_ISULAD ++ // always switch uid and gid for attach ++ if (options->uid == -1) ++ options->uid = init_ctx->container->lxc_conf->init_uid; ++ if (options->gid == -1) ++ options->gid = init_ctx->container->lxc_conf->init_gid; ++#endif + + if (!fetch_seccomp(init_ctx->container, options)) + WARN("Failed to get seccomp policy"); +@@ -1090,7 +1411,7 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + } + + if (options->attach_flags & LXC_ATTACH_TERMINAL) { +- ret = lxc_attach_terminal(conf, &terminal); ++ ret = lxc_attach_terminal(conf, &terminal, options); + if (ret < 0) { + ERROR("Failed to setup new terminal"); + free(cwd); +@@ -1099,6 +1420,12 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + } + + terminal.log_fd = options->log_fd; ++#ifdef HAVE_ISULAD ++ if (suffix != NULL) { ++ exec_command.maincmd_fd = lxc_exec_cmd_init(name, lxcpath, suffix); ++ exec_command.terminal = &terminal; ++ } ++#endif + } else { + lxc_terminal_init(&terminal); + } +@@ -1139,10 +1466,38 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + ret = socketpair(PF_LOCAL, SOCK_STREAM | SOCK_CLOEXEC, 0, ipc_sockets); + if (ret < 0) { + SYSERROR("Could not set up required IPC mechanism for attaching"); ++#ifdef HAVE_ISULAD ++ if (options->attach_flags & LXC_ATTACH_TERMINAL) { ++ lxc_terminal_delete(&terminal); ++ lxc_terminal_conf_free(&terminal); ++ if (exec_command.maincmd_fd != -1) { ++ close(exec_command.maincmd_fd); ++ } ++ } ++#endif ++ free(cwd); ++ lxc_proc_put_context_info(init_ctx); ++ return -1; ++ } ++ ++#ifdef HAVE_ISULAD ++ /* isulad: pipdfd for get error message of child or grandchild process. */ ++ if (pipe2(conf->errpipe, O_CLOEXEC) != 0) { ++ SYSERROR("Failed to init errpipe"); ++ if (options->attach_flags & LXC_ATTACH_TERMINAL) { ++ lxc_terminal_delete(&terminal); ++ lxc_terminal_conf_free(&terminal); ++ if (exec_command.maincmd_fd != -1) { ++ close(exec_command.maincmd_fd); ++ } ++ } ++ close(ipc_sockets[0]); ++ close(ipc_sockets[1]); + free(cwd); + lxc_proc_put_context_info(init_ctx); + return -1; + } ++#endif + + /* Create intermediate subprocess, two reasons: + * 1. We can't setns() in the child itself, since we want to make +@@ -1154,6 +1509,17 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + pid = fork(); + if (pid < 0) { + SYSERROR("Failed to create first subprocess"); ++#ifdef HAVE_ISULAD ++ if (options->attach_flags & LXC_ATTACH_TERMINAL) { ++ lxc_terminal_delete(&terminal); ++ lxc_terminal_conf_free(&terminal); ++ if (exec_command.maincmd_fd != -1) { ++ close(exec_command.maincmd_fd); ++ } ++ } ++ close(ipc_sockets[0]); ++ close(ipc_sockets[1]); ++#endif + free(cwd); + lxc_proc_put_context_info(init_ctx); + return -1; +@@ -1163,13 +1529,38 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + int ret_parent = -1; + pid_t to_cleanup_pid = pid; + struct lxc_epoll_descr descr = {0}; ++#ifdef HAVE_ISULAD ++ int isulad_sigfd; ++ sigset_t isulad_oldmask; ++ struct lxc_epoll_descr isulad_descr = {0}; ++#endif + + /* close unneeded file descriptors */ + close(ipc_sockets[1]); + free(cwd); ++#ifdef HAVE_ISULAD ++ /* isulad: close errpipe */ ++ close(conf->errpipe[1]); ++ conf->errpipe[1] = -1; ++ /* isulad: close pipe after clone */ ++ if (terminal.pipes[0][0] >= 0) { ++ close(terminal.pipes[0][0]); ++ terminal.pipes[0][0] = -1; ++ } ++ ++ if (terminal.pipes[1][1] >= 0) { ++ close(terminal.pipes[1][1]); ++ terminal.pipes[1][1] = -1; ++ } ++ ++ if (terminal.pipes[2][1] >= 0) { ++ close(terminal.pipes[2][1]); ++ terminal.pipes[2][1] = -1; ++ } ++#endif + lxc_proc_close_ns_fd(init_ctx); + if (options->attach_flags & LXC_ATTACH_TERMINAL) +- lxc_attach_terminal_close_pts(&terminal); ++ lxc_attach_terminal_close_slave(&terminal); + + /* Attach to cgroup, if requested. */ + if (options->attach_flags & LXC_ATTACH_MOVE_TO_CGROUP) { +@@ -1200,7 +1591,11 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + + /* Setup resource limits */ + if (!lxc_list_empty(&conf->limits)) { ++#ifdef HAVE_ISULAD ++ ret = setup_resource_limits(&conf->limits, pid, -1); ++#else + ret = setup_resource_limits(&conf->limits, pid); ++#endif + if (ret < 0) + goto on_error; + } +@@ -1210,9 +1605,28 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + if (ret < 0) + goto on_error; + ++#ifdef HAVE_ISULAD ++ ret = lxc_attach_terminal_mainloop_init(&terminal, &isulad_descr); ++ if (ret < 0) ++ goto on_error; ++ ++ if (suffix != NULL) { ++ (void)lxc_exec_cmd_mainloop_add(&descr, &exec_command); ++ } ++#endif + TRACE("Initialized terminal mainloop"); + } + ++#ifdef HAVE_ISULAD ++ /* The signal fd has to be created before forking otherwise if the child ++ * process exits before we setup the signal fd, the event will be lost ++ * and the command will be stuck. ++ */ ++ isulad_sigfd = isulad_setup_signal_fd(&isulad_oldmask); ++ if (isulad_sigfd < 0) ++ goto close_mainloop; ++#endif ++ + /* Let the child process know to go ahead. */ + status = 0; + ret = lxc_write_nointr(ipc_sockets[0], &status, sizeof(status)); +@@ -1273,7 +1687,7 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + TRACE("Sent LSM label file descriptor %d to child", labelfd); + } + +- if (conf->seccomp.seccomp) { ++ if (conf && conf->seccomp.seccomp) { + ret = lxc_seccomp_recv_notifier_fd(&conf->seccomp, ipc_sockets[0]); + if (ret < 0) + goto close_mainloop; +@@ -1290,6 +1704,34 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + + *attached_process = attached_pid; + ++#ifdef HAVE_ISULAD ++ if (options->timeout > 0) { ++ ret = create_attach_timeout_thread(options->timeout, *attached_process); ++ if (ret) { ++ ERROR("Failed to create attach timeout thread for container."); ++ goto close_mainloop; ++ } ++ } ++ /* isulad: read error msg from pipe */ ++ ssize_t size_read; ++ char errbuf[BUFSIZ + 1] = {0}; ++ pid_t tmp_pid = *attached_process; ++ ++ size_read = read(conf->errpipe[0], errbuf, BUFSIZ); ++ if (size_read > 0) { ++ if (err_msg) ++ *err_msg = safe_strdup(errbuf); ++ goto close_mainloop; ++ } ++ if (options->attach_flags & LXC_ATTACH_TERMINAL) { ++ ret = lxc_mainloop_add_handler(&descr, isulad_sigfd, attach_signal_handler, &tmp_pid); ++ if (ret < 0) { ++ ERROR("Failed to add signal handler for %d to mainloop", tmp_pid); ++ goto close_mainloop; ++ } ++ } ++#endif ++ + /* Now shut down communication with child, we're done. */ + shutdown(ipc_sockets[0], SHUT_RDWR); + close(ipc_sockets[0]); +@@ -1298,6 +1740,15 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + ret_parent = 0; + to_cleanup_pid = -1; + ++ #ifdef HAVE_ISULAD ++ // iSulad: close stdin pipe if we do not want open_stdin with container stdin ++ if (!terminal.open_stdin) { ++ if (terminal.pipes[0][1] > 0) { ++ close(terminal.pipes[0][1]); ++ terminal.pipes[0][1] = -1; ++ } ++ } ++ #endif + if (options->attach_flags & LXC_ATTACH_TERMINAL) { + ret = lxc_mainloop(&descr, -1); + if (ret < 0) { +@@ -1306,9 +1757,20 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + } + } + ++#ifdef HAVE_ISULAD ++ // do lxc_mainloop to make sure we do not lose any output ++ (void)lxc_mainloop(&isulad_descr, 100); ++ if (g_attach_timeout_state == ATTACH_TIMEOUT && err_msg != NULL && *err_msg == NULL) { ++ *err_msg = safe_strdup("Attach exceeded timeout"); ++ } ++#endif + close_mainloop: +- if (options->attach_flags & LXC_ATTACH_TERMINAL) ++ if (options->attach_flags & LXC_ATTACH_TERMINAL) { ++#ifdef HAVE_ISULAD ++ lxc_mainloop_close(&isulad_descr); ++#endif + lxc_mainloop_close(&descr); ++ } + + on_error: + if (ipc_sockets[0] >= 0) { +@@ -1322,6 +1784,11 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + if (options->attach_flags & LXC_ATTACH_TERMINAL) { + lxc_terminal_delete(&terminal); + lxc_terminal_conf_free(&terminal); ++#ifdef HAVE_ISULAD ++ if (exec_command.maincmd_fd != -1) { ++ close(exec_command.maincmd_fd); ++ } ++#endif + } + + lxc_proc_put_context_info(init_ctx); +@@ -1331,10 +1798,21 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + /* close unneeded file descriptors */ + close_prot_errno_disarm(ipc_sockets[0]); + ++#ifdef HAVE_ISULAD ++ /* isulad: close errpipe */ ++ close(conf->errpipe[0]); ++ conf->errpipe[0] = -1; ++#endif ++ + if (options->attach_flags & LXC_ATTACH_TERMINAL) { +- lxc_attach_terminal_close_ptmx(&terminal); ++ lxc_attach_terminal_close_master(&terminal); + lxc_attach_terminal_close_peer(&terminal); + lxc_attach_terminal_close_log(&terminal); ++#ifdef HAVE_ISULAD ++ if (exec_command.maincmd_fd != -1) { ++ close(exec_command.maincmd_fd); ++ } ++#endif + } + + /* Wait for the parent to have setup cgroups. */ +@@ -1377,9 +1855,12 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + payload.ipc_socket = ipc_sockets[1]; + payload.options = options; + payload.init_ctx = init_ctx; +- payload.terminal_pts_fd = terminal.pts; ++ payload.terminal_slave_fd = terminal.slave; + payload.exec_function = exec_function; + payload.exec_payload = exec_payload; ++#ifdef HAVE_ISULAD ++ payload.terminal = &terminal; ++#endif + + pid = lxc_raw_clone(CLONE_PARENT, NULL); + if (pid < 0) { +@@ -1390,7 +1871,7 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + } + + if (pid == 0) { +- if (options->attach_flags & LXC_ATTACH_TERMINAL) { ++ if (options->attach_flags & LXC_ATTACH_TERMINAL && terminal.tty_state) { + ret = pthread_sigmask(SIG_SETMASK, + &terminal.tty_state->oldmask, NULL); + if (ret < 0) { +@@ -1406,9 +1887,9 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + _exit(EXIT_FAILURE); + } + +- if (options->attach_flags & LXC_ATTACH_TERMINAL) +- lxc_attach_terminal_close_pts(&terminal); +- ++ if (options->attach_flags & LXC_ATTACH_TERMINAL) { ++ lxc_attach_terminal_close_slave(&terminal); ++ } + /* Tell grandparent the pid of the pid of the newly created child. */ + ret = lxc_write_nointr(ipc_sockets[1], &pid, sizeof(pid)); + if (ret != sizeof(pid)) { +@@ -1430,7 +1911,11 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, + _exit(EXIT_SUCCESS); + } + ++#ifdef HAVE_ISULAD ++int lxc_attach_run_command(void *payload, int msg_fd) ++#else + int lxc_attach_run_command(void *payload) ++#endif + { + int ret = -1; + lxc_attach_command_t *cmd = payload; +@@ -1446,11 +1931,19 @@ int lxc_attach_run_command(void *payload) + break; + } + } ++#ifdef HAVE_ISULAD ++ /* isulad: write error messages */ ++ lxc_write_error_message(msg_fd, "exec: \"%s\": %s.", cmd->program, strerror(errno)); ++#endif + + return log_error_errno(ret, errno, "Failed to exec \"%s\"", cmd->program); + } + ++#ifdef HAVE_ISULAD ++int lxc_attach_run_shell(void* payload, int msg_fd) ++#else + int lxc_attach_run_shell(void* payload) ++#endif + { + __do_free char *buf = NULL; + uid_t uid; +diff --git a/src/lxc/attach.h b/src/lxc/attach.h +index ef5a6c19c..831634424 100644 +--- a/src/lxc/attach.h ++++ b/src/lxc/attach.h +@@ -20,9 +20,15 @@ struct lxc_proc_context_info { + int ns_fd[LXC_NS_MAX]; + }; + ++#ifdef HAVE_ISULAD ++extern int lxc_attach(struct lxc_container *container, ++ lxc_attach_exec_t exec_function, void *exec_payload, ++ lxc_attach_options_t *options, pid_t *attached_process, char **err_msg); ++#else + extern int lxc_attach(struct lxc_container *container, + lxc_attach_exec_t exec_function, void *exec_payload, + lxc_attach_options_t *options, pid_t *attached_process); ++#endif + + extern int lxc_attach_remount_sys_proc(void); + +diff --git a/src/lxc/attach_options.h b/src/lxc/attach_options.h +index 63e62d4ff..5767560fe 100644 +--- a/src/lxc/attach_options.h ++++ b/src/lxc/attach_options.h +@@ -26,7 +26,7 @@ enum { + + /* The following are off by default: */ + LXC_ATTACH_REMOUNT_PROC_SYS = 0x00010000, /*!< Remount /proc filesystem */ +- LXC_ATTACH_LSM_NOW = 0x00020000, /*!< TODO: currently unused */ ++ LXC_ATTACH_LSM_NOW = 0x00020000, /*!< FIXME: unknown */ + /* Set PR_SET_NO_NEW_PRIVS to block execve() gainable privileges. */ + LXC_ATTACH_NO_NEW_PRIVS = 0x00040000, /*!< PR_SET_NO_NEW_PRIVS */ + LXC_ATTACH_TERMINAL = 0x00080000, /*!< Allocate new terminal for attached process. */ +@@ -49,7 +49,11 @@ enum { + * + * \return Function should return \c 0 on success, and any other value to denote failure. + */ ++#ifdef HAVE_ISULAD ++typedef int (*lxc_attach_exec_t)(void* payload, int msg_fd); ++#else + typedef int (*lxc_attach_exec_t)(void* payload); ++#endif + + /*! + * LXC attach options for \ref lxc_container \c attach(). +@@ -113,6 +117,12 @@ typedef struct lxc_attach_options_t { + + /*! File descriptor to log output. */ + int log_fd; ++ ++ char *init_fifo[3]; /* isulad: default fifos for the start */ ++ int64_t timeout;/* isulad: Seconds for waiting on a container to attach/exec before it is killed*/ ++ const char *suffix; ++ bool disable_pty; ++ bool open_stdin; + } lxc_attach_options_t; + + /*! Default attach options to use */ +@@ -131,6 +141,7 @@ typedef struct lxc_attach_options_t { + /* .stdout_fd = */ 1, \ + /* .stderr_fd = */ 2, \ + /* .log_fd = */ -EBADF, \ ++ /* .init_fifo = */ {NULL, NULL, NULL}, \ + } + + /*! +@@ -148,7 +159,11 @@ typedef struct lxc_attach_command_t { + * + * \return \c -1 on error, exit code of lxc_attach_command_t program on success. + */ ++#ifdef HAVE_ISULAD ++extern int lxc_attach_run_command(void* payload, int msg_fd); ++#else + extern int lxc_attach_run_command(void* payload); ++#endif + + /*! + * \brief Run a shell command in the container. +@@ -157,7 +172,11 @@ extern int lxc_attach_run_command(void* payload); + * + * \return Exit code of shell. + */ ++#ifdef HAVE_ISULAD ++extern int lxc_attach_run_shell(void* payload, int msg_fd); ++#else + extern int lxc_attach_run_shell(void* payload); ++#endif + + #ifdef __cplusplus + } +diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c +index 603940683..4a0961f13 100644 +--- a/src/lxc/cgroups/cgfsng.c ++++ b/src/lxc/cgroups/cgfsng.c +@@ -27,7 +27,6 @@ + #include + #include + #include +-#include + #include + #include + +@@ -215,6 +214,7 @@ static char *read_file(const char *fnam) + return move_ptr(buf); + } + ++#ifndef HAVE_ISULAD + /* Taken over modified from the kernel sources. */ + #define NBITS 32 /* bits in uint32_t */ + #define DIV_ROUND_UP(n, d) (((n) + (d)-1) / (d)) +@@ -477,12 +477,14 @@ static bool copy_parent_file(const char *parent_cgroup, + value, child_cgroup, file); + return true; + } ++#endif + + static inline bool is_unified_hierarchy(const struct hierarchy *h) + { + return h->version == CGROUP2_SUPER_MAGIC; + } + ++#ifndef HAVE_ISULAD + /* + * Initialize the cpuset hierarchy in first directory of @cgroup_leaf and set + * cgroup.clone_children so that children inherit settings. Since the +@@ -562,6 +564,7 @@ static int cg_legacy_handle_cpuset_hierarchy(struct hierarchy *h, + + return fret; + } ++#endif + + /* Given two null-terminated lists of strings, return true if any string is in + * both. +@@ -673,7 +676,7 @@ static char **cg_hybrid_get_controllers(char **klist, char **nlist, char *line, + if (!dup) + return NULL; + +- lxc_iterate_parts(tok, dup, sep) ++ lxc_iterate_parts (tok, dup, sep) + must_append_controller(klist, nlist, &aret, tok); + } + *p2 = ' '; +@@ -726,7 +729,6 @@ static struct hierarchy *add_hierarchy(struct hierarchy ***h, char **clist, char + new->container_base_path = container_base_path; + new->version = type; + new->cgfd_con = -EBADF; +- new->cgfd_limit = -EBADF; + new->cgfd_mon = -EBADF; + + newentry = append_null_to_list((void ***)h); +@@ -948,6 +950,115 @@ static void lxc_cgfsng_print_basecg_debuginfo(char *basecginfo, char **klist, + TRACE("named subsystem %d: %s", k, *it); + } + ++struct generic_userns_exec_data { ++ struct hierarchy **hierarchies; ++ const char *container_cgroup; ++ struct lxc_conf *conf; ++ uid_t origuid; /* target uid in parent namespace */ ++ char *path; ++}; ++ ++#ifdef HAVE_ISULAD ++ ++static int isulad_cgroup_tree_remove(struct hierarchy **hierarchies, ++ const char *container_cgroup) ++{ ++ if (!container_cgroup || !hierarchies) ++ return 0; ++ ++ for (int i = 0; hierarchies[i]; i++) { ++ struct hierarchy *h = hierarchies[i]; ++ int ret; ++ ++ if (!h->container_full_path) { ++ h->container_full_path = must_make_path(h->mountpoint, h->container_base_path, container_cgroup, NULL); ++ } ++ ++ ret = lxc_rm_rf(h->container_full_path); ++ if (ret < 0) { ++ SYSERROR("Failed to destroy \"%s\"", h->container_full_path); ++ return -1; ++ } ++ ++ free_disarm(h->container_full_path); ++ } ++ ++ return 0; ++} ++ ++static int isulad_cgroup_tree_remove_wrapper(void *data) ++{ ++ struct generic_userns_exec_data *arg = data; ++ uid_t nsuid = (arg->conf->root_nsuid_map != NULL) ? 0 : arg->conf->init_uid; ++ gid_t nsgid = (arg->conf->root_nsgid_map != NULL) ? 0 : arg->conf->init_gid; ++ int ret; ++ ++ if (!lxc_setgroups(0, NULL) && errno != EPERM) ++ return log_error_errno(-1, errno, "Failed to setgroups(0, NULL)"); ++ ++ ret = setresgid(nsgid, nsgid, nsgid); ++ if (ret < 0) ++ return log_error_errno(-1, errno, "Failed to setresgid(%d, %d, %d)", ++ (int)nsgid, (int)nsgid, (int)nsgid); ++ ++ ret = setresuid(nsuid, nsuid, nsuid); ++ if (ret < 0) ++ return log_error_errno(-1, errno, "Failed to setresuid(%d, %d, %d)", ++ (int)nsuid, (int)nsuid, (int)nsuid); ++ ++ return isulad_cgroup_tree_remove(arg->hierarchies, arg->container_cgroup); ++} ++ ++__cgfsng_ops static bool isulad_cgfsng_payload_destroy(struct cgroup_ops *ops, ++ struct lxc_handler *handler) ++{ ++ int ret; ++ ++ if (!ops) { ++ ERROR("Called with uninitialized cgroup operations"); ++ return false; ++ } ++ ++ if (!ops->hierarchies) { ++ return false; ++ } ++ ++ if (!handler) { ++ ERROR("Called with uninitialized handler"); ++ return false; ++ } ++ ++ if (!handler->conf) { ++ ERROR("Called with uninitialized conf"); ++ return false; ++ } ++ ++#ifdef HAVE_STRUCT_BPF_CGROUP_DEV_CTX ++ ret = bpf_program_cgroup_detach(handler->conf->cgroup2_devices); ++ if (ret < 0) ++ WARN("Failed to detach bpf program from cgroup"); ++#endif ++ ++ if (handler->conf && !lxc_list_empty(&handler->conf->id_map)) { ++ struct generic_userns_exec_data wrap = { ++ .conf = handler->conf, ++ .container_cgroup = ops->container_cgroup, ++ .hierarchies = ops->hierarchies, ++ .origuid = 0, ++ }; ++ ret = userns_exec_1(handler->conf, isulad_cgroup_tree_remove_wrapper, ++ &wrap, "cgroup_tree_remove_wrapper"); ++ } else { ++ ret = isulad_cgroup_tree_remove(ops->hierarchies, ops->container_cgroup); ++ } ++ if (ret < 0) { ++ SYSWARN("Failed to destroy cgroups"); ++ return false; ++ } ++ ++ return true; ++} ++#else + static int cgroup_tree_remove(struct hierarchy **hierarchies, + const char *container_cgroup) + { +@@ -958,29 +1069,19 @@ static int cgroup_tree_remove(struct hierarchy **hierarchies, + struct hierarchy *h = hierarchies[i]; + int ret; + +- if (!h->container_limit_path) ++ if (!h->container_full_path) + continue; + +- ret = lxc_rm_rf(h->container_limit_path); ++ ret = lxc_rm_rf(h->container_full_path); + if (ret < 0) +- WARN("Failed to destroy \"%s\"", h->container_limit_path); ++ WARN("Failed to destroy \"%s\"", h->container_full_path); + +- if (h->container_limit_path != h->container_full_path) +- free_disarm(h->container_limit_path); + free_disarm(h->container_full_path); + } + + return 0; + } + +-struct generic_userns_exec_data { +- struct hierarchy **hierarchies; +- const char *container_cgroup; +- struct lxc_conf *conf; +- uid_t origuid; /* target uid in parent namespace */ +- char *path; +-}; +- + static int cgroup_tree_remove_wrapper(void *data) + { + struct generic_userns_exec_data *arg = data; +@@ -1048,7 +1149,15 @@ __cgfsng_ops static void cgfsng_payload_destroy(struct cgroup_ops *ops, + if (ret < 0) + SYSWARN("Failed to destroy cgroups"); + } ++#endif + ++#ifdef HAVE_ISULAD ++__cgfsng_ops static void cgfsng_monitor_destroy(struct cgroup_ops *ops, ++ struct lxc_handler *handler) ++{ ++ return; ++} ++#else + __cgfsng_ops static void cgfsng_monitor_destroy(struct cgroup_ops *ops, + struct lxc_handler *handler) + { +@@ -1082,7 +1191,6 @@ __cgfsng_ops static void cgfsng_monitor_destroy(struct cgroup_ops *ops, + for (int i = 0; ops->hierarchies[i]; i++) { + __do_free char *pivot_path = NULL; + struct hierarchy *h = ops->hierarchies[i]; +- size_t offset; + int ret; + + if (!h->monitor_full_path) +@@ -1094,21 +1202,16 @@ __cgfsng_ops static void cgfsng_monitor_destroy(struct cgroup_ops *ops, + goto try_lxc_rm_rf; + } + +- if (conf && conf->cgroup_meta.monitor_dir) +- pivot_path = must_make_path(h->mountpoint, h->container_base_path, +- conf->cgroup_meta.monitor_dir, CGROUP_PIVOT, NULL); +- else if (conf && conf->cgroup_meta.dir) +- pivot_path = must_make_path(h->mountpoint, h->container_base_path, +- conf->cgroup_meta.dir, CGROUP_PIVOT, NULL); ++ if (conf && conf->cgroup_meta.dir) ++ pivot_path = must_make_path(h->mountpoint, ++ h->container_base_path, ++ conf->cgroup_meta.dir, ++ CGROUP_PIVOT, NULL); + else +- pivot_path = must_make_path(h->mountpoint, h->container_base_path, ++ pivot_path = must_make_path(h->mountpoint, ++ h->container_base_path, + CGROUP_PIVOT, NULL); + +- offset = strlen(h->mountpoint) + strlen(h->container_base_path); +- +- if (cg_legacy_handle_cpuset_hierarchy(h, pivot_path + offset)) +- SYSWARN("Failed to initialize cpuset %s/" CGROUP_PIVOT, pivot_path); +- + ret = mkdir_p(pivot_path, 0755); + if (ret < 0 && errno != EEXIST) { + ERROR("Failed to create %s", pivot_path); +@@ -1127,6 +1230,15 @@ try_lxc_rm_rf: + WARN("Failed to destroy \"%s\"", h->monitor_full_path); + } + } ++#endif ++ ++#ifdef HAVE_ISULAD ++__cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, ++ struct lxc_handler *handler) ++{ ++ return true; ++} ++#else + + static int mkdir_eexist_on_last(const char *dir, mode_t mode) + { +@@ -1150,18 +1262,16 @@ static int mkdir_eexist_on_last(const char *dir, mode_t mode) + + ret = mkdir(makeme, mode); + if (ret < 0 && ((errno != EEXIST) || (orig_len == cur_len))) +- return log_warn_errno(-1, errno, "Failed to create directory \"%s\"", makeme); ++ return log_error_errno(-1, errno, "Failed to create directory \"%s\"", makeme); + } while (tmp != dir); + + return 0; + } + +-static bool cgroup_tree_create(struct cgroup_ops *ops, struct lxc_conf *conf, +- struct hierarchy *h, const char *cgroup_tree, +- const char *cgroup_leaf, bool payload, +- const char *cgroup_limit_dir) ++static bool cgroup_tree_create(struct hierarchy *h, const char *cgroup_tree, ++ const char *cgroup_leaf, bool payload) + { +- __do_free char *path = NULL, *limit_path = NULL; ++ __do_free char *path = NULL; + int ret, ret_cpuset; + + path = must_make_path(h->mountpoint, h->container_base_path, cgroup_leaf, NULL); +@@ -1172,37 +1282,6 @@ static bool cgroup_tree_create(struct cgroup_ops *ops, struct lxc_conf *conf, + if (ret_cpuset < 0) + return log_error_errno(false, errno, "Failed to handle legacy cpuset controller"); + +- if (payload && cgroup_limit_dir) { +- /* with isolation both parts need to not already exist */ +- limit_path = must_make_path(h->mountpoint, +- h->container_base_path, +- cgroup_limit_dir, NULL); +- +- ret = mkdir_eexist_on_last(limit_path, 0755); +- if (ret < 0) +- return log_debug_errno(false, +- errno, "Failed to create %s limiting cgroup", +- limit_path); +- +- h->cgfd_limit = lxc_open_dirfd(limit_path); +- if (h->cgfd_limit < 0) +- return log_error_errno(false, errno, +- "Failed to open %s", path); +- h->container_limit_path = move_ptr(limit_path); +- +- /* +- * With isolation the devices legacy cgroup needs to be +- * iinitialized early, as it typically contains an 'a' (all) +- * line, which is not possible once a subdirectory has been +- * created. +- */ +- if (string_in_list(h->controllers, "devices")) { +- ret = ops->setup_limits_legacy(ops, conf, true); +- if (ret < 0) +- return ret; +- } +- } +- + ret = mkdir_eexist_on_last(path, 0755); + if (ret < 0) { + /* +@@ -1211,7 +1290,7 @@ static bool cgroup_tree_create(struct cgroup_ops *ops, struct lxc_conf *conf, + * directory for us to ensure correct initialization. + */ + if (ret_cpuset != 1 || cgroup_tree) +- return log_debug_errno(false, errno, "Failed to create %s cgroup", path); ++ return log_error_errno(false, errno, "Failed to create %s cgroup", path); + } + + if (payload) { +@@ -1219,10 +1298,6 @@ static bool cgroup_tree_create(struct cgroup_ops *ops, struct lxc_conf *conf, + if (h->cgfd_con < 0) + return log_error_errno(false, errno, "Failed to open %s", path); + h->container_full_path = move_ptr(path); +- if (h->cgfd_limit < 0) +- h->cgfd_limit = h->cgfd_con; +- if (!h->container_limit_path) +- h->container_limit_path = h->container_full_path; + } else { + h->cgfd_mon = lxc_open_dirfd(path); + if (h->cgfd_mon < 0) +@@ -1235,15 +1310,11 @@ static bool cgroup_tree_create(struct cgroup_ops *ops, struct lxc_conf *conf, + + static void cgroup_tree_leaf_remove(struct hierarchy *h, bool payload) + { +- __do_free char *full_path = NULL, *__limit_path = NULL; +- char *limit_path = NULL; ++ __do_free char *full_path = NULL; + + if (payload) { + __lxc_unused __do_close int fd = move_fd(h->cgfd_con); + full_path = move_ptr(h->container_full_path); +- limit_path = move_ptr(h->container_limit_path); +- if (limit_path != full_path) +- __limit_path = limit_path; + } else { + __lxc_unused __do_close int fd = move_fd(h->cgfd_mon); + full_path = move_ptr(h->monitor_full_path); +@@ -1251,38 +1322,6 @@ static void cgroup_tree_leaf_remove(struct hierarchy *h, bool payload) + + if (full_path && rmdir(full_path)) + SYSWARN("Failed to rmdir(\"%s\") cgroup", full_path); +- if (limit_path && rmdir(limit_path)) +- SYSWARN("Failed to rmdir(\"%s\") cgroup", limit_path); +-} +- +-/* +- * Check we have no lxc.cgroup.dir, and that lxc.cgroup.dir.limit_prefix is a +- * proper prefix directory of lxc.cgroup.dir.payload. +- * +- * Returns the prefix length if it is set, otherwise zero on success. +- */ +-static bool check_cgroup_dir_config(struct lxc_conf *conf) +-{ +- const char *monitor_dir = conf->cgroup_meta.monitor_dir, +- *container_dir = conf->cgroup_meta.container_dir, +- *namespace_dir = conf->cgroup_meta.namespace_dir; +- +- /* none of the new options are set, all is fine */ +- if (!monitor_dir && !container_dir && !namespace_dir) +- return true; +- +- /* some are set, make sure lxc.cgroup.dir is not also set*/ +- if (conf->cgroup_meta.dir) +- return log_error_errno(false, EINVAL, +- "lxc.cgroup.dir conflicts with lxc.cgroup.dir.payload/monitor"); +- +- /* make sure both monitor and payload are set */ +- if (!monitor_dir || !container_dir) +- return log_error_errno(false, EINVAL, +- "lxc.cgroup.dir.payload and lxc.cgroup.dir.monitor must both be set"); +- +- /* namespace_dir may be empty */ +- return true; + } + + __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, +@@ -1293,7 +1332,7 @@ __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, + int idx = 0; + int i; + size_t len; +- char *suffix = NULL; ++ char *suffix; + struct lxc_conf *conf; + + if (!ops) +@@ -1310,13 +1349,7 @@ __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, + + conf = handler->conf; + +- if (!check_cgroup_dir_config(conf)) +- return false; +- +- if (conf->cgroup_meta.monitor_dir) { +- cgroup_tree = NULL; +- monitor_cgroup = strdup(conf->cgroup_meta.monitor_dir); +- } else if (conf->cgroup_meta.dir) { ++ if (conf->cgroup_meta.dir) { + cgroup_tree = conf->cgroup_meta.dir; + monitor_cgroup = must_concat(&len, conf->cgroup_meta.dir, "/", + DEFAULT_MONITOR_CGROUP_PREFIX, +@@ -1340,36 +1373,252 @@ __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, + if (!monitor_cgroup) + return ret_set_errno(false, ENOMEM); + +- if (!conf->cgroup_meta.monitor_dir) { +- suffix = monitor_cgroup + len - CGROUP_CREATE_RETRY_LEN; +- *suffix = '\0'; +- } ++ suffix = monitor_cgroup + len - CGROUP_CREATE_RETRY_LEN; ++ *suffix = '\0'; + do { +- if (idx && suffix) ++ if (idx) + sprintf(suffix, "-%d", idx); + + for (i = 0; ops->hierarchies[i]; i++) { +- if (cgroup_tree_create(ops, handler->conf, +- ops->hierarchies[i], cgroup_tree, +- monitor_cgroup, false, NULL)) ++ if (cgroup_tree_create(ops->hierarchies[i], cgroup_tree, monitor_cgroup, false)) + continue; + +- DEBUG("Failed to create cgroup \"%s\"", ops->hierarchies[i]->monitor_full_path ?: "(null)"); ++ ERROR("Failed to create cgroup \"%s\"", ops->hierarchies[i]->monitor_full_path ?: "(null)"); + for (int j = 0; j < i; j++) + cgroup_tree_leaf_remove(ops->hierarchies[j], false); + + idx++; + break; + } +- } while (ops->hierarchies[i] && idx > 0 && idx < 1000 && suffix); ++ } while (ops->hierarchies[i] && idx > 0 && idx < 1000); + +- if (idx == 1000 || (!suffix && idx != 0)) +- return log_error_errno(false, ERANGE, "Failed to create monitor cgroup"); ++ if (idx == 1000) ++ return ret_set_errno(false, ERANGE); + + ops->monitor_cgroup = move_ptr(monitor_cgroup); + return log_info(true, "The monitor process uses \"%s\" as cgroup", ops->monitor_cgroup); + } ++#endif ++ ++#ifdef HAVE_ISULAD ++ ++static bool isulad_copy_parent_file(char *path, char *file) ++{ ++ int ret; ++ int len = 0; ++ char *value = NULL; ++ char *current = NULL; ++ char *fpath = NULL; ++ char *lastslash = NULL; ++ char oldv; ++ ++ fpath = must_make_path(path, file, NULL); ++ current = read_file(fpath); ++ ++ if (current == NULL) { ++ SYSERROR("Failed to read file \"%s\"", fpath); ++ free(fpath); ++ return false; ++ } ++ ++ if (strcmp(current, "\n") != 0) { ++ free(fpath); ++ free(current); ++ return true; ++ } ++ ++ free(fpath); ++ free(current); ++ ++ lastslash = strrchr(path, '/'); ++ if (lastslash == NULL) { ++ ERROR("Failed to detect \"/\" in \"%s\"", path); ++ return false; ++ } ++ oldv = *lastslash; ++ *lastslash = '\0'; ++ fpath = must_make_path(path, file, NULL); ++ *lastslash = oldv; ++ len = lxc_read_from_file(fpath, NULL, 0); ++ if (len <= 0) ++ goto on_error; ++ ++ value = must_realloc(NULL, len + 1); ++ ret = lxc_read_from_file(fpath, value, len); ++ if (ret != len) ++ goto on_error; ++ free(fpath); ++ ++ fpath = must_make_path(path, file, NULL); ++ ret = lxc_write_to_file(fpath, value, len, false, 0666); ++ if (ret < 0) ++ SYSERROR("Failed to write \"%s\" to file \"%s\"", value, fpath); ++ free(fpath); ++ free(value); ++ return ret >= 0; ++ ++on_error: ++ SYSERROR("Failed to read file \"%s\"", fpath); ++ free(fpath); ++ free(value); ++ return false; ++} ++ ++static bool build_sub_cpuset_cgroup_dir(char *cgpath) ++{ ++ int ret; ++ ++ ret = mkdir_p(cgpath, 0755); ++ if (ret < 0) { ++ if (errno != EEXIST) { ++ SYSERROR("Failed to create directory \"%s\"", cgpath); ++ return false; ++ } ++ } ++ ++ /* copy parent's settings */ ++ if (!isulad_copy_parent_file(cgpath, "cpuset.cpus")) { ++ SYSERROR("Failed to copy \"cpuset.cpus\" settings"); ++ return false; ++ } ++ ++ /* copy parent's settings */ ++ if (!isulad_copy_parent_file(cgpath, "cpuset.mems")) { ++ SYSERROR("Failed to copy \"cpuset.mems\" settings"); ++ return false; ++ } ++ ++ return true; ++} ++ ++static bool isulad_cg_legacy_handle_cpuset_hierarchy(struct hierarchy *h, char *cgname) ++{ ++ char *cgpath, *slash; ++ bool sub_mk_success = false; ++ ++ if (!string_in_list(h->controllers, "cpuset")) ++ return true; ++ ++ cgname += strspn(cgname, "/"); ++ ++ slash = strchr(cgname, '/'); ++ ++ if (slash != NULL) { ++ while (slash) { ++ *slash = '\0'; ++ cgpath = must_make_path(h->mountpoint, h->container_base_path, cgname, NULL); ++ sub_mk_success = build_sub_cpuset_cgroup_dir(cgpath); ++ free(cgpath); ++ *slash = '/'; ++ if (!sub_mk_success) { ++ return false; ++ } ++ slash = strchr(slash + 1, '/'); ++ } ++ } ++ ++ cgpath = must_make_path(h->mountpoint, h->container_base_path, cgname, NULL); ++ sub_mk_success = build_sub_cpuset_cgroup_dir(cgpath); ++ free(cgpath); ++ if (!sub_mk_success) { ++ return false; ++ } ++ ++ return true; ++} ++ ++static int isulad_mkdir_eexist_on_last(const char *dir, mode_t mode) ++{ ++ const char *tmp = dir; ++ const char *orig = dir; ++ ++ do { ++ int ret; ++ size_t cur_len; ++ char *makeme; ++ ++ dir = tmp + strspn(tmp, "/"); ++ tmp = dir + strcspn(dir, "/"); ++ ++ errno = ENOMEM; ++ cur_len = dir - orig; ++ makeme = strndup(orig, cur_len); ++ if (!makeme) ++ return -1; ++ ++ ret = mkdir(makeme, mode); ++ if (ret < 0) { ++ if (errno != EEXIST) { ++ SYSERROR("Failed to create directory \"%s\"", makeme); ++ free(makeme); ++ return -1; ++ } ++ } ++ free(makeme); ++ ++ } while (tmp != dir); ++ ++ return 0; ++} + ++static bool create_path_for_hierarchy(struct hierarchy *h, char *cgname, int errfd) ++{ ++ int ret; ++ __do_free char *path = NULL; ++ ++ path = must_make_path(h->mountpoint, h->container_base_path, cgname, NULL); ++ ++ if (file_exists(path)) { // it must not already exist ++ ERROR("Cgroup path \"%s\" already exist.", path); ++ lxc_write_error_message(errfd, "%s:%d: Cgroup path \"%s\" already exist.", ++ __FILE__, __LINE__, path); ++ return false; ++ } ++ ++ if (!isulad_cg_legacy_handle_cpuset_hierarchy(h, cgname)) { ++ ERROR("Failed to handle legacy cpuset controller"); ++ return false; ++ } ++ ++ ret = isulad_mkdir_eexist_on_last(path, 0755); ++ if (ret < 0) { ++ ERROR("Failed to create cgroup \"%s\"", path); ++ return false; ++ } ++ ++ h->cgfd_con = lxc_open_dirfd(path); ++ if (h->cgfd_con < 0) ++ return log_error_errno(false, errno, "Failed to open %s", path); ++ ++ if (h->container_full_path == NULL) { ++ h->container_full_path = move_ptr(path); ++ } ++ ++ return true; ++} ++ ++/* isulad: create hierarchies path, if fail, return the error */ ++__cgfsng_ops static inline bool cgfsng_payload_create(struct cgroup_ops *ops, ++ struct lxc_handler *handler) ++{ ++ int i; ++ char *container_cgroup = ops->container_cgroup; ++ ++ if (!container_cgroup) { ++ ERROR("cgfsng_create container_cgroup is invalid"); ++ return false; ++ } ++ ++ for (i = 0; ops->hierarchies[i]; i++) { ++ if (!create_path_for_hierarchy(ops->hierarchies[i], container_cgroup, ops->errfd)) { ++ SYSERROR("Failed to create %s", ops->hierarchies[i]->container_full_path); ++ return false; ++ } ++ } ++ ++ return true; ++} ++#else + /* + * Try to create the same cgroup in all hierarchies. Start with cgroup_pattern; + * next cgroup_pattern-1, -2, ..., -999. +@@ -1377,14 +1626,12 @@ __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, + __cgfsng_ops static inline bool cgfsng_payload_create(struct cgroup_ops *ops, + struct lxc_handler *handler) + { +- __do_free char *container_cgroup = NULL, +- *__cgroup_tree = NULL, +- *limiting_cgroup = NULL; ++ __do_free char *container_cgroup = NULL, *__cgroup_tree = NULL; + const char *cgroup_tree; + int idx = 0; + int i; + size_t len; +- char *suffix = NULL; ++ char *suffix; + struct lxc_conf *conf; + + if (!ops) +@@ -1401,25 +1648,7 @@ __cgfsng_ops static inline bool cgfsng_payload_create(struct cgroup_ops *ops, + + conf = handler->conf; + +- if (!check_cgroup_dir_config(conf)) +- return false; +- +- if (conf->cgroup_meta.container_dir) { +- cgroup_tree = NULL; +- +- limiting_cgroup = strdup(conf->cgroup_meta.container_dir); +- if (!limiting_cgroup) +- return ret_set_errno(false, ENOMEM); +- +- if (conf->cgroup_meta.namespace_dir) { +- container_cgroup = must_make_path(limiting_cgroup, +- conf->cgroup_meta.namespace_dir, +- NULL); +- } else { +- /* explicit paths but without isolation */ +- container_cgroup = move_ptr(limiting_cgroup); +- } +- } else if (conf->cgroup_meta.dir) { ++ if (conf->cgroup_meta.dir) { + cgroup_tree = conf->cgroup_meta.dir; + container_cgroup = must_concat(&len, cgroup_tree, "/", + DEFAULT_PAYLOAD_CGROUP_PREFIX, +@@ -1443,38 +1672,41 @@ __cgfsng_ops static inline bool cgfsng_payload_create(struct cgroup_ops *ops, + if (!container_cgroup) + return ret_set_errno(false, ENOMEM); + +- if (!conf->cgroup_meta.container_dir) { +- suffix = container_cgroup + len - CGROUP_CREATE_RETRY_LEN; +- *suffix = '\0'; +- } ++ suffix = container_cgroup + len - CGROUP_CREATE_RETRY_LEN; ++ *suffix = '\0'; + do { +- if (idx && suffix) ++ if (idx) + sprintf(suffix, "-%d", idx); + + for (i = 0; ops->hierarchies[i]; i++) { +- if (cgroup_tree_create(ops, handler->conf, +- ops->hierarchies[i], cgroup_tree, +- container_cgroup, true, +- limiting_cgroup)) ++ if (cgroup_tree_create(ops->hierarchies[i], cgroup_tree, container_cgroup, true)) + continue; + +- DEBUG("Failed to create cgroup \"%s\"", ops->hierarchies[i]->container_full_path ?: "(null)"); ++ ERROR("Failed to create cgroup \"%s\"", ops->hierarchies[i]->container_full_path ?: "(null)"); + for (int j = 0; j < i; j++) + cgroup_tree_leaf_remove(ops->hierarchies[j], true); + + idx++; + break; + } +- } while (ops->hierarchies[i] && idx > 0 && idx < 1000 && suffix); ++ } while (ops->hierarchies[i] && idx > 0 && idx < 1000); + +- if (idx == 1000 || (!suffix && idx != 0)) +- return log_error_errno(false, ERANGE, "Failed to create container cgroup"); ++ if (idx == 1000) ++ return ret_set_errno(false, ERANGE); + + ops->container_cgroup = move_ptr(container_cgroup); + INFO("The container process uses \"%s\" as cgroup", ops->container_cgroup); + return true; + } ++#endif + ++#ifdef HAVE_ISULAD ++__cgfsng_ops static bool cgfsng_monitor_enter(struct cgroup_ops *ops, ++ struct lxc_handler *handler) ++{ ++ return true; ++} ++#else + __cgfsng_ops static bool cgfsng_monitor_enter(struct cgroup_ops *ops, + struct lxc_handler *handler) + { +@@ -1526,7 +1758,58 @@ __cgfsng_ops static bool cgfsng_monitor_enter(struct cgroup_ops *ops, + + return true; + } ++#endif + ++#ifdef HAVE_ISULAD ++__cgfsng_ops static bool cgfsng_payload_enter(struct cgroup_ops *ops, ++ struct lxc_handler *handler) ++{ ++ int len; ++ char pidstr[INTTYPE_TO_STRLEN(pid_t)]; ++ ++ if (!ops) ++ return ret_set_errno(false, ENOENT); ++ ++ if (!ops->hierarchies) ++ return true; ++ ++ if (!ops->container_cgroup) ++ return ret_set_errno(false, ENOENT); ++ ++ if (!handler || !handler->conf) ++ return ret_set_errno(false, EINVAL); ++ ++ len = snprintf(pidstr, sizeof(pidstr), "%d", handler->pid); ++ ++ for (int i = 0; ops->hierarchies[i]; i++) { ++ int ret; ++ char *fullpath; ++ int retry_count = 0; ++ int max_retry = 10; ++ ++ fullpath = must_make_path(ops->hierarchies[i]->container_full_path, ++ "cgroup.procs", NULL); ++retry: ++ ret = lxc_write_to_file(fullpath, pidstr, len, false, 0666); ++ if (ret != 0) { ++ if (retry_count < max_retry) { ++ SYSERROR("Failed to enter cgroup \"%s\" with retry count:%d", fullpath, retry_count); ++ (void)isulad_cg_legacy_handle_cpuset_hierarchy(ops->hierarchies[i], ops->container_cgroup); ++ (void)isulad_mkdir_eexist_on_last(ops->hierarchies[i]->container_full_path, 0755); ++ usleep(100 * 1000); /* 100 millisecond */ ++ retry_count++; ++ goto retry; ++ } ++ SYSERROR("Failed to enter cgroup \"%s\"", fullpath); ++ free(fullpath); ++ return false; ++ } ++ free(fullpath); ++ } ++ ++ return true; ++} ++#else + __cgfsng_ops static bool cgfsng_payload_enter(struct cgroup_ops *ops, + struct lxc_handler *handler) + { +@@ -1558,6 +1841,7 @@ __cgfsng_ops static bool cgfsng_payload_enter(struct cgroup_ops *ops, + + return true; + } ++#endif + + static int fchowmodat(int dirfd, const char *path, uid_t chown_uid, + gid_t chown_gid, mode_t chmod_mode) +@@ -1805,6 +2089,196 @@ static inline int cg_mount_cgroup_full(int type, struct hierarchy *h, + return __cg_mount_direct(type, h, controllerpath); + } + ++#ifdef HAVE_ISULAD ++__cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, ++ struct lxc_handler *handler, ++ const char *root, int type) ++{ ++ int i, ret; ++ char *tmpfspath = NULL; ++ char *systemdpath = NULL; ++ char *unifiedpath = NULL; ++ bool has_cgns = false, retval = false, wants_force_mount = false; ++ char **merged = NULL; ++ ++ if ((type & LXC_AUTO_CGROUP_MASK) == 0) ++ return true; ++ ++ if (type & LXC_AUTO_CGROUP_FORCE) { ++ type &= ~LXC_AUTO_CGROUP_FORCE; ++ wants_force_mount = true; ++ } ++ ++ if (!wants_force_mount) { ++ if (!lxc_list_empty(&handler->conf->keepcaps)) ++ wants_force_mount = !in_caplist(CAP_SYS_ADMIN, &handler->conf->keepcaps); ++ else ++ wants_force_mount = in_caplist(CAP_SYS_ADMIN, &handler->conf->caps); ++ } ++ ++ has_cgns = cgns_supported(); ++ if (has_cgns && !wants_force_mount) ++ return true; ++ ++ if (type == LXC_AUTO_CGROUP_NOSPEC) ++ type = LXC_AUTO_CGROUP_MIXED; ++ else if (type == LXC_AUTO_CGROUP_FULL_NOSPEC) ++ type = LXC_AUTO_CGROUP_FULL_MIXED; ++ ++ /* Mount tmpfs */ ++ tmpfspath = must_make_path(root, "/sys/fs/cgroup", NULL); ++ if (mkdir_p(tmpfspath, 0755) < 0) { ++ ERROR("Failed to create directory: %s", tmpfspath); ++ goto on_error; ++ } ++ ret = safe_mount(NULL, tmpfspath, "tmpfs", ++ MS_NOSUID | MS_NODEV | MS_NOEXEC | MS_RELATIME, ++ "size=10240k,mode=755", root); ++ if (ret < 0) ++ goto on_error; ++ ++ for (i = 0; ops->hierarchies[i]; i++) { ++ char *controllerpath = NULL; ++ char *path2 = NULL; ++ struct hierarchy *h = ops->hierarchies[i]; ++ char *controller = strrchr(h->mountpoint, '/'); ++ ++ if (!controller) ++ continue; ++ controller++; ++ ++ // isulad: symlink subcgroup ++ if (strchr(controller, ',') != NULL) { ++ int pret; ++ pret = lxc_append_string(&merged, controller); ++ if (pret < 0) ++ goto on_error; ++ } ++ ++ controllerpath = must_make_path(tmpfspath, controller, NULL); ++ if (dir_exists(controllerpath)) { ++ free(controllerpath); ++ continue; ++ } ++ ++ ret = mkdir(controllerpath, 0755); ++ if (ret < 0) { ++ SYSERROR("Error creating cgroup path: %s", controllerpath); ++ free(controllerpath); ++ goto on_error; ++ } ++ ++ if (has_cgns && wants_force_mount) { ++ /* If cgroup namespaces are supported but the container ++ * will not have CAP_SYS_ADMIN after it has started we ++ * need to mount the cgroups manually. ++ */ ++ ret = cg_mount_in_cgroup_namespace(type, h, controllerpath); ++ free(controllerpath); ++ if (ret < 0) ++ goto on_error; ++ ++ continue; ++ } ++ ++ ret = cg_mount_cgroup_full(type, h, controllerpath); ++ if (ret < 0) { ++ free(controllerpath); ++ goto on_error; ++ } ++ ++ if (!cg_mount_needs_subdirs(type)) { ++ free(controllerpath); ++ continue; ++ } ++ ++ // isulad: ignore ops->container_cgroup so we will not see directory lxc after /sys/fs/cgroup/xxx in container, ++ // isulad: ignore h->container_base_path so we will not see subgroup of /sys/fs/cgroup/xxx/subgroup in container ++ path2 = must_make_path(controllerpath, NULL); ++ ret = mkdir_p(path2, 0755); ++ if (ret < 0) { ++ free(controllerpath); ++ free(path2); ++ goto on_error; ++ } ++ ++ ret = cg_legacy_mount_controllers(type, h, controllerpath, ++ path2, ops->container_cgroup); ++ free(controllerpath); ++ free(path2); ++ if (ret < 0) ++ goto on_error; ++ } ++ ++ // isulad: symlink subcgroup ++ if (merged) { ++ char **mc = NULL; ++ for (mc = merged; *mc; mc++) { ++ char *token = NULL; ++ char *copy = must_copy_string(*mc); ++ lxc_iterate_parts(token, copy, ",") { ++ int mret; ++ char *link; ++ link = must_make_path(tmpfspath, token, NULL); ++ mret = symlink(*mc, link); ++ if (mret < 0 && errno != EEXIST) { ++ SYSERROR("Failed to create link %s for target %s", link, *mc); ++ free(copy); ++ free(link); ++ goto on_error; ++ } ++ free(link); ++ } ++ free(copy); ++ } ++ } ++ ++ ++ // isulad: remount /sys/fs/cgroup to readonly ++ if (type == LXC_AUTO_CGROUP_FULL_RO || type == LXC_AUTO_CGROUP_RO) { ++ ret = mount(tmpfspath, tmpfspath, "bind", ++ MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_RELATIME|MS_RDONLY|MS_BIND|MS_REMOUNT, NULL); ++ if (ret < 0) { ++ SYSERROR("Failed to remount /sys/fs/cgroup."); ++ goto on_error; ++ } ++ } ++ ++ // isulad: remount /sys/fs/cgroup/systemd to readwrite for system container ++ if (handler->conf->systemd != NULL && strcmp(handler->conf->systemd, "true") == 0) { ++ // isulad: don't use the unified hierarchy for the systemd cgroup ++ unifiedpath = must_make_path(root, "/sys/fs/cgroup/unified", NULL); ++ if (dir_exists(unifiedpath)) { ++ ret = umount2(unifiedpath, MNT_DETACH); ++ if (ret < 0) { ++ SYSERROR("Failed to umount /sys/fs/cgroup/unified."); ++ goto on_error; ++ } ++ } ++ ++ systemdpath = must_make_path(root, "/sys/fs/cgroup/systemd", NULL); ++ ret = mount(systemdpath, systemdpath, "bind", ++ MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_RELATIME|MS_BIND|MS_REMOUNT, NULL); ++ if (ret < 0) { ++ SYSERROR("Failed to remount /sys/fs/cgroup/systemd."); ++ goto on_error; ++ } ++ } ++ ++ retval = true; ++ ++on_error: ++ free(tmpfspath); ++ if (systemdpath != NULL) { ++ free(systemdpath); ++ } ++ if (unifiedpath != NULL) { ++ free(unifiedpath); ++ } ++ lxc_free_array((void **)merged, free); ++ return retval; ++} ++#else + __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, + struct lxc_handler *handler, + const char *root, int type) +@@ -1830,24 +2304,11 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, + wants_force_mount = true; + } + +- if (!wants_force_mount) { ++ if (!wants_force_mount){ + if (!lxc_list_empty(&handler->conf->keepcaps)) + wants_force_mount = !in_caplist(CAP_SYS_ADMIN, &handler->conf->keepcaps); + else + wants_force_mount = in_caplist(CAP_SYS_ADMIN, &handler->conf->caps); +- +- /* +- * Most recent distro versions currently have init system that +- * do support cgroup2 but do not mount it by default unless +- * explicitly told so even if the host is cgroup2 only. That +- * means they often will fail to boot. Fix this by pre-mounting +- * cgroup2 by default. We will likely need to be doing this a +- * few years until all distros have switched over to cgroup2 at +- * which point we can safely assume that their init systems +- * will mount it themselves. +- */ +- if (pure_unified_layout(ops)) +- wants_force_mount = true; + } + + has_cgns = cgns_supported(); +@@ -1930,6 +2391,7 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, + + return true; + } ++#endif + + /* Only root needs to escape to the cgroup of its init. */ + __cgfsng_ops static bool cgfsng_escape(const struct cgroup_ops *ops, +@@ -2046,14 +2508,78 @@ static int freezer_cgroup_events_cb(int fd, uint32_t events, void *cbdata, + return LXC_MAINLOOP_CONTINUE; + } + +-static int cg_unified_freeze_do(struct cgroup_ops *ops, int timeout, +- const char *state_string, +- int state_num, +- const char *epoll_error, +- const char *wait_error) ++static int cg_unified_freeze(struct cgroup_ops *ops, int timeout) ++{ ++ __do_close int fd = -EBADF; ++ call_cleaner(lxc_mainloop_close) struct lxc_epoll_descr *descr_ptr = NULL; ++ int ret; ++ struct lxc_epoll_descr descr; ++ struct hierarchy *h; ++ ++ h = ops->unified; ++ if (!h) ++ return ret_set_errno(-1, ENOENT); ++ ++ if (!h->container_full_path) ++ return ret_set_errno(-1, EEXIST); ++ ++ if (timeout != 0) { ++ __do_free char *events_file = NULL; ++ ++ events_file = must_make_path(h->container_full_path, "cgroup.events", NULL); ++ fd = open(events_file, O_RDONLY | O_CLOEXEC); ++ if (fd < 0) ++ return log_error_errno(-1, errno, "Failed to open cgroup.events file"); ++ ++ ret = lxc_mainloop_open(&descr); ++ if (ret) ++ return log_error_errno(-1, errno, "Failed to create epoll instance to wait for container freeze"); ++ ++ /* automatically cleaned up now */ ++ descr_ptr = &descr; ++ ++ ret = lxc_mainloop_add_handler(&descr, fd, freezer_cgroup_events_cb, INT_TO_PTR((int){1})); ++ if (ret < 0) ++ return log_error_errno(-1, errno, "Failed to add cgroup.events fd handler to mainloop"); ++ } ++ ++ ret = lxc_write_openat(h->container_full_path, "cgroup.freeze", "1", 1); ++ if (ret < 0) ++ return log_error_errno(-1, errno, "Failed to open cgroup.freeze file"); ++ ++ if (timeout != 0 && lxc_mainloop(&descr, timeout)) ++ return log_error_errno(-1, errno, "Failed to wait for container to be frozen"); ++ ++ return 0; ++} ++ ++__cgfsng_ops static int cgfsng_freeze(struct cgroup_ops *ops, int timeout) ++{ ++ if (!ops->hierarchies) ++ return ret_set_errno(-1, ENOENT); ++ ++ if (ops->cgroup_layout != CGROUP_LAYOUT_UNIFIED) ++ return cg_legacy_freeze(ops); ++ ++ return cg_unified_freeze(ops, timeout); ++} ++ ++static int cg_legacy_unfreeze(struct cgroup_ops *ops) ++{ ++ struct hierarchy *h; ++ ++ h = get_hierarchy(ops, "freezer"); ++ if (!h) ++ return ret_set_errno(-1, ENOENT); ++ ++ return lxc_write_openat(h->container_full_path, "freezer.state", ++ "THAWED", STRLITERALLEN("THAWED")); ++} ++ ++static int cg_unified_unfreeze(struct cgroup_ops *ops, int timeout) + { + __do_close int fd = -EBADF; +- call_cleaner(lxc_mainloop_close) struct lxc_epoll_descr *descr_ptr = NULL; ++ call_cleaner(lxc_mainloop_close)struct lxc_epoll_descr *descr_ptr = NULL; + int ret; + struct lxc_epoll_descr descr; + struct hierarchy *h; +@@ -2075,63 +2601,26 @@ static int cg_unified_freeze_do(struct cgroup_ops *ops, int timeout, + + ret = lxc_mainloop_open(&descr); + if (ret) +- return log_error_errno(-1, errno, "%s", epoll_error); ++ return log_error_errno(-1, errno, "Failed to create epoll instance to wait for container unfreeze"); + + /* automatically cleaned up now */ + descr_ptr = &descr; + +- ret = lxc_mainloop_add_handler_events(&descr, fd, EPOLLPRI, freezer_cgroup_events_cb, INT_TO_PTR(state_num)); ++ ret = lxc_mainloop_add_handler(&descr, fd, freezer_cgroup_events_cb, INT_TO_PTR((int){0})); + if (ret < 0) + return log_error_errno(-1, errno, "Failed to add cgroup.events fd handler to mainloop"); + } + +- ret = lxc_write_openat(h->container_full_path, "cgroup.freeze", state_string, 1); ++ ret = lxc_write_openat(h->container_full_path, "cgroup.freeze", "0", 1); + if (ret < 0) + return log_error_errno(-1, errno, "Failed to open cgroup.freeze file"); + + if (timeout != 0 && lxc_mainloop(&descr, timeout)) +- return log_error_errno(-1, errno, "%s", wait_error); ++ return log_error_errno(-1, errno, "Failed to wait for container to be unfrozen"); + + return 0; + } + +-static int cg_unified_freeze(struct cgroup_ops *ops, int timeout) +-{ +- return cg_unified_freeze_do(ops, timeout, "1", 1, +- "Failed to create epoll instance to wait for container freeze", +- "Failed to wait for container to be frozen"); +-} +- +-__cgfsng_ops static int cgfsng_freeze(struct cgroup_ops *ops, int timeout) +-{ +- if (!ops->hierarchies) +- return ret_set_errno(-1, ENOENT); +- +- if (ops->cgroup_layout != CGROUP_LAYOUT_UNIFIED) +- return cg_legacy_freeze(ops); +- +- return cg_unified_freeze(ops, timeout); +-} +- +-static int cg_legacy_unfreeze(struct cgroup_ops *ops) +-{ +- struct hierarchy *h; +- +- h = get_hierarchy(ops, "freezer"); +- if (!h) +- return ret_set_errno(-1, ENOENT); +- +- return lxc_write_openat(h->container_full_path, "freezer.state", +- "THAWED", STRLITERALLEN("THAWED")); +-} +- +-static int cg_unified_unfreeze(struct cgroup_ops *ops, int timeout) +-{ +- return cg_unified_freeze_do(ops, timeout, "0", 0, +- "Failed to create epoll instance to wait for container unfreeze", +- "Failed to wait for container to be unfrozen"); +-} +- + __cgfsng_ops static int cgfsng_unfreeze(struct cgroup_ops *ops, int timeout) + { + if (!ops->hierarchies) +@@ -2143,8 +2632,8 @@ __cgfsng_ops static int cgfsng_unfreeze(struct cgroup_ops *ops, int timeout) + return cg_unified_unfreeze(ops, timeout); + } + +-static const char *cgfsng_get_cgroup_do(struct cgroup_ops *ops, +- const char *controller, bool limiting) ++__cgfsng_ops static const char *cgfsng_get_cgroup(struct cgroup_ops *ops, ++ const char *controller) + { + struct hierarchy *h; + +@@ -2153,27 +2642,33 @@ static const char *cgfsng_get_cgroup_do(struct cgroup_ops *ops, + return log_warn_errno(NULL, ENOENT, "Failed to find hierarchy for controller \"%s\"", + controller ? controller : "(null)"); + +- if (limiting) +- return h->container_limit_path +- ? h->container_limit_path + strlen(h->mountpoint) +- : NULL; ++#ifdef HAVE_ISULAD ++ if (!h->container_full_path) ++ h->container_full_path = must_make_path(h->mountpoint, h->container_base_path, ops->container_cgroup, NULL); ++#endif + + return h->container_full_path + ? h->container_full_path + strlen(h->mountpoint) + : NULL; + } + +-__cgfsng_ops static const char *cgfsng_get_cgroup(struct cgroup_ops *ops, ++#ifdef HAVE_ISULAD ++__cgfsng_ops static const char *cgfsng_get_cgroup_full_path(struct cgroup_ops *ops, + const char *controller) + { +- return cgfsng_get_cgroup_do(ops, controller, false); +-} ++ struct hierarchy *h; + +-__cgfsng_ops static const char *cgfsng_get_limiting_cgroup(struct cgroup_ops *ops, +- const char *controller) +-{ +- return cgfsng_get_cgroup_do(ops, controller, true); ++ h = get_hierarchy(ops, controller); ++ if (!h) ++ return log_warn_errno(NULL, ENOENT, "Failed to find hierarchy for controller \"%s\"", ++ controller ? controller : "(null)"); ++ ++ if (!h->container_full_path) ++ h->container_full_path = must_make_path(h->mountpoint, h->container_base_path, ops->container_cgroup, NULL); ++ ++ return h->container_full_path; + } ++#endif + + /* Given a cgroup path returned from lxc_cmd_get_cgroup_path, build a full path, + * which must be freed by the caller. +@@ -2481,6 +2976,44 @@ __cgfsng_ops static bool cgfsng_attach(struct cgroup_ops *ops, + return true; + } + ++#ifdef HAVE_ISULAD ++__cgfsng_ops static int cgfsng_get(struct cgroup_ops *ops, const char *filename, ++ char *value, size_t len, const char *name, ++ const char *lxcpath) ++{ ++ int ret = -1; ++ size_t controller_len; ++ char *controller, *p, *path; ++ struct hierarchy *h; ++ ++ controller_len = strlen(filename); ++ controller = alloca(controller_len + 1); ++ (void)strlcpy(controller, filename, controller_len + 1); ++ ++ p = strchr(controller, '.'); ++ if (p) ++ *p = '\0'; ++ ++ const char *ori_path = ops->get_cgroup(ops, controller); ++ if (ori_path == NULL) { ++ ERROR("Failed to get cgroup path:%s", controller); ++ return -1; ++ } ++ path = safe_strdup(ori_path); ++ ++ h = get_hierarchy(ops, controller); ++ if (h) { ++ char *fullpath; ++ ++ fullpath = build_full_cgpath_from_monitorpath(h, path, filename); ++ ret = lxc_read_from_file(fullpath, value, len); ++ free(fullpath); ++ } ++ free(path); ++ ++ return ret; ++} ++#else + /* Called externally (i.e. from 'lxc-cgroup') to query cgroup limits. Here we + * don't have a cgroup_data set up, so we ask the running container through the + * commands API for the cgroup path. +@@ -2503,7 +3036,7 @@ __cgfsng_ops static int cgfsng_get(struct cgroup_ops *ops, const char *filename, + if (p) + *p = '\0'; + +- path = lxc_cmd_get_limiting_cgroup_path(name, lxcpath, controller); ++ path = lxc_cmd_get_cgroup_path(name, lxcpath, controller); + /* not running */ + if (!path) + return -1; +@@ -2518,6 +3051,7 @@ __cgfsng_ops static int cgfsng_get(struct cgroup_ops *ops, const char *filename, + + return ret; + } ++#endif + + static int device_cgroup_parse_access(struct device_item *device, const char *val) + { +@@ -2544,7 +3078,7 @@ static int device_cgroup_parse_access(struct device_item *device, const char *va + return 0; + } + +-static int device_cgroup_rule_parse(struct device_item *device, const char *key, ++int device_cgroup_rule_parse(struct device_item *device, const char *key, + const char *val) + { + int count, ret; +@@ -2631,6 +3165,44 @@ static int device_cgroup_rule_parse(struct device_item *device, const char *key, + return device_cgroup_parse_access(device, ++val); + } + ++#ifdef HAVE_ISULAD ++__cgfsng_ops static int cgfsng_set(struct cgroup_ops *ops, ++ const char *filename, const char *value, ++ const char *name, const char *lxcpath) ++{ ++ int ret = -1; ++ size_t controller_len; ++ char *controller, *p, *path; ++ struct hierarchy *h; ++ ++ controller_len = strlen(filename); ++ controller = alloca(controller_len + 1); ++ (void)strlcpy(controller, filename, controller_len + 1); ++ ++ p = strchr(controller, '.'); ++ if (p) ++ *p = '\0'; ++ ++ const char *ori_path = ops->get_cgroup(ops, controller); ++ if (ori_path == NULL) { ++ ERROR("Failed to get cgroup path:%s", controller); ++ return -1; ++ } ++ path = safe_strdup(ori_path); ++ ++ h = get_hierarchy(ops, controller); ++ if (h) { ++ char *fullpath; ++ ++ fullpath = build_full_cgpath_from_monitorpath(h, path, filename); ++ ret = lxc_write_to_file(fullpath, value, strlen(value), false, 0666); ++ free(fullpath); ++ } ++ free(path); ++ ++ return ret; ++} ++#else + /* Called externally (i.e. from 'lxc-cgroup') to set new cgroup limits. Here we + * don't have a cgroup_data set up, so we ask the running container through the + * commands API for the cgroup path. +@@ -2668,7 +3240,7 @@ __cgfsng_ops static int cgfsng_set(struct cgroup_ops *ops, + return 0; + } + +- path = lxc_cmd_get_limiting_cgroup_path(name, lxcpath, controller); ++ path = lxc_cmd_get_cgroup_path(name, lxcpath, controller); + /* not running */ + if (!path) + return -1; +@@ -2683,6 +3255,7 @@ __cgfsng_ops static int cgfsng_set(struct cgroup_ops *ops, + + return ret; + } ++#endif + + /* take devices cgroup line + * /dev/foo rwx +@@ -2726,9 +3299,6 @@ static int device_cgroup_rule_parse_devpath(struct device_item *device, + return ret_set_errno(-1, EINVAL); + } + +- if (!mode) +- return ret_errno(EINVAL); +- + if (device_cgroup_parse_access(device, mode) < 0) + return -1; + +@@ -2777,11 +3347,12 @@ static int convert_devpath(const char *invalue, char *dest) + return 0; + } + ++#ifndef HAVE_ISULAD + /* Called from setup_limits - here we have the container's cgroup_data because + * we created the cgroups. + */ + static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename, +- const char *value, bool is_cpuset) ++ const char *value) + { + __do_free char *controller = NULL; + char *p; +@@ -2807,12 +3378,116 @@ static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename, + if (!h) + return log_error_errno(-ENOENT, ENOENT, "Failed to setup limits for the \"%s\" controller. The controller seems to be unused by \"cgfsng\" cgroup driver or not enabled on the cgroup hierarchy", controller); + +- if (is_cpuset) { +- int ret = lxc_write_openat(h->container_full_path, filename, value, strlen(value)); +- if (ret) ++ return lxc_write_openat(h->container_full_path, filename, value, strlen(value)); ++} ++#endif ++ ++#ifdef HAVE_ISULAD ++/* Called from setup_limits - here we have the container's cgroup_data because ++ * we created the cgroups. ++ */ ++static int isulad_cg_legacy_get_data(struct cgroup_ops *ops, const char *filename, ++ char *value, size_t len) ++{ ++ char *fullpath = NULL; ++ char *p = NULL; ++ struct hierarchy *h = NULL; ++ int ret = 0; ++ char *controller = NULL; ++ ++ len = strlen(filename); ++ if (SIZE_MAX - 1 < len) { ++ errno = EINVAL; ++ return -1; ++ } ++ controller = calloc(1, len + 1); ++ if (controller == NULL) { ++ errno = ENOMEM; ++ return -1; ++ } ++ (void)strlcpy(controller, filename, len + 1); ++ ++ p = strchr(controller, '.'); ++ if (p) ++ *p = '\0'; ++ ++ ++ h = get_hierarchy(ops, controller); ++ if (!h) { ++ ERROR("Failed to setup limits for the \"%s\" controller. " ++ "The controller seems to be unused by \"cgfsng\" cgroup " ++ "driver or not enabled on the cgroup hierarchy", ++ controller); ++ errno = ENOENT; ++ free(controller); ++ return -ENOENT; ++ } ++ ++ fullpath = must_make_path(h->container_full_path, filename, NULL); ++ ret = lxc_read_from_file(fullpath, value, len); ++ free(fullpath); ++ free(controller); ++ return ret; ++} ++ ++static int isulad_cg_legacy_set_data(struct cgroup_ops *ops, const char *filename, ++ const char *value) ++{ ++ size_t len; ++ char *fullpath, *p; ++ /* "b|c <2^64-1>:<2^64-1> r|w|m" = 47 chars max */ ++ char converted_value[50]; ++ struct hierarchy *h; ++ int ret = 0; ++ char *controller = NULL; ++ int retry_count = 0; ++ int max_retry = 10; ++ char *container_cgroup = ops->container_cgroup; ++ ++ len = strlen(filename); ++ controller = alloca(len + 1); ++ (void)strlcpy(controller, filename, len + 1); ++ ++ p = strchr(controller, '.'); ++ if (p) ++ *p = '\0'; ++ ++ if (strcmp("devices.allow", filename) == 0 && value[0] == '/') { ++ ret = convert_devpath(value, converted_value); ++ if (ret < 0) + return ret; ++ value = converted_value; + } +- return lxc_write_openat(h->container_limit_path, filename, value, strlen(value)); ++ ++ h = get_hierarchy(ops, controller); ++ if (!h) { ++ ERROR("Failed to setup limits for the \"%s\" controller. " ++ "The controller seems to be unused by \"cgfsng\" cgroup " ++ "driver or not enabled on the cgroup hierarchy", ++ controller); ++ errno = ENOENT; ++ return -ENOENT; ++ } ++ ++ fullpath = must_make_path(h->container_full_path, filename, NULL); ++ ++retry: ++ ret = lxc_write_to_file(fullpath, value, strlen(value), false, 0666); ++ if (ret != 0) { ++ if (retry_count < max_retry) { ++ SYSERROR("setting cgroup config for ready process caused \"failed to write %s to %s\".", value, fullpath); ++ (void)isulad_cg_legacy_handle_cpuset_hierarchy(h, container_cgroup); ++ (void)isulad_mkdir_eexist_on_last(h->container_full_path, 0755); ++ usleep(100 * 1000); /* 100 millisecond */ ++ retry_count++; ++ goto retry; ++ } ++ lxc_write_error_message(ops->errfd, ++ "%s:%d: setting cgroup config for ready process caused \"failed to write %s to %s: %s\".", ++ __FILE__, __LINE__, value, fullpath, strerror(errno)); ++ } ++ free(fullpath); ++ return ret; + } + + __cgfsng_ops static bool cgfsng_setup_limits_legacy(struct cgroup_ops *ops, +@@ -2824,6 +3499,8 @@ __cgfsng_ops static bool cgfsng_setup_limits_legacy(struct cgroup_ops *ops, + struct lxc_list *iterator, *next; + struct lxc_cgroup *cg; + bool ret = false; ++ char value[21 + 1] = { 0 }; ++ long long int readvalue, setvalue; + + if (!ops) + return ret_set_errno(false, ENOENT); +@@ -2838,8 +3515,99 @@ __cgfsng_ops static bool cgfsng_setup_limits_legacy(struct cgroup_ops *ops, + if (!ops->hierarchies) + return ret_set_errno(false, EINVAL); + +- if (pure_unified_layout(ops)) +- return log_warn_errno(true, EINVAL, "Ignoring legacy cgroup limits on pure cgroup2 system"); ++ sorted_cgroup_settings = sort_cgroup_settings(cgroup_settings); ++ if (!sorted_cgroup_settings) ++ return false; ++ ++ lxc_list_for_each(iterator, sorted_cgroup_settings) { ++ cg = iterator->elem; ++ ++ if (do_devices == !strncmp("devices", cg->subsystem, 7)) { ++ const char *cgvalue = cg->value; ++ if (strcmp(cg->subsystem, "files.limit") == 0) { ++ if (lxc_safe_long_long(cgvalue, &setvalue) != 0) { ++ SYSERROR("Invalid integer value %s", cgvalue); ++ goto out; ++ } ++ if (setvalue <= 0) { ++ cgvalue = "max"; ++ } ++ } ++ if (isulad_cg_legacy_set_data(ops, cg->subsystem, cgvalue)) { ++ if (do_devices && (errno == EACCES || errno == EPERM)) { ++ SYSWARN("Failed to set \"%s\" to \"%s\"", cg->subsystem, cgvalue); ++ continue; ++ } ++ SYSERROR("Failed to set \"%s\" to \"%s\"", cg->subsystem, cgvalue); ++ goto out; ++ } ++ DEBUG("Set controller \"%s\" set to \"%s\"", cg->subsystem, cgvalue); ++ } ++ ++ // isulad: check cpu shares ++ if (strcmp(cg->subsystem, "cpu.shares") == 0) { ++ if (isulad_cg_legacy_get_data(ops, cg->subsystem, value, sizeof(value) - 1) < 0) { ++ SYSERROR("Error get %s", cg->subsystem); ++ goto out; ++ } ++ trim(value); ++ if (lxc_safe_long_long(cg->value, &setvalue) != 0) { ++ SYSERROR("Invalid value %s", cg->value); ++ goto out; ++ } ++ if (lxc_safe_long_long(value, &readvalue) != 0) { ++ SYSERROR("Invalid value %s", value); ++ goto out; ++ } ++ if (setvalue > readvalue) { ++ ERROR("The maximum allowed cpu-shares is %s", value); ++ lxc_write_error_message(ops->errfd, ++ "%s:%d: setting cgroup config for ready process caused \"The maximum allowed cpu-shares is %s\".", ++ __FILE__, __LINE__, value); ++ goto out; ++ } else if (setvalue < readvalue) { ++ ERROR("The minimum allowed cpu-shares is %s", value); ++ lxc_write_error_message(ops->errfd, ++ "%s:%d: setting cgroup config for ready process caused \"The minimum allowed cpu-shares is %s\".", ++ __FILE__, __LINE__, value); ++ goto out; ++ } ++ } ++ } ++ ++ ret = true; ++ INFO("Limits for the legacy cgroup hierarchies have been setup"); ++out: ++ lxc_list_for_each_safe(iterator, sorted_cgroup_settings, next) { ++ lxc_list_del(iterator); ++ free(iterator); ++ } ++ ++ return ret; ++} ++#else ++__cgfsng_ops static bool cgfsng_setup_limits_legacy(struct cgroup_ops *ops, ++ struct lxc_conf *conf, ++ bool do_devices) ++{ ++ __do_free struct lxc_list *sorted_cgroup_settings = NULL; ++ struct lxc_list *cgroup_settings = &conf->cgroup; ++ struct lxc_list *iterator, *next; ++ struct lxc_cgroup *cg; ++ bool ret = false; ++ ++ if (!ops) ++ return ret_set_errno(false, ENOENT); ++ ++ if (!conf) ++ return ret_set_errno(false, EINVAL); ++ ++ cgroup_settings = &conf->cgroup; ++ if (lxc_list_empty(cgroup_settings)) ++ return true; ++ ++ if (!ops->hierarchies) ++ return ret_set_errno(false, EINVAL); + + sorted_cgroup_settings = sort_cgroup_settings(cgroup_settings); + if (!sorted_cgroup_settings) +@@ -2849,7 +3617,7 @@ __cgfsng_ops static bool cgfsng_setup_limits_legacy(struct cgroup_ops *ops, + cg = iterator->elem; + + if (do_devices == !strncmp("devices", cg->subsystem, 7)) { +- if (cg_legacy_set_data(ops, cg->subsystem, cg->value, strncmp("cpuset", cg->subsystem, 6) == 0)) { ++ if (cg_legacy_set_data(ops, cg->subsystem, cg->value)) { + if (do_devices && (errno == EACCES || errno == EPERM)) { + SYSWARN("Failed to set \"%s\" to \"%s\"", cg->subsystem, cg->value); + continue; +@@ -2871,6 +3639,7 @@ out: + + return ret; + } ++#endif + + /* + * Some of the parsing logic comes from the original cgroup device v1 +@@ -2918,12 +3687,9 @@ __cgfsng_ops static bool cgfsng_setup_limits(struct cgroup_ops *ops, + return ret_set_errno(false, EINVAL); + conf = handler->conf; + +- cgroup_settings = &conf->cgroup2; +- if (lxc_list_empty(cgroup_settings)) ++ if (lxc_list_empty(&conf->cgroup2)) + return true; +- +- if (!pure_unified_layout(ops)) +- return log_warn_errno(true, EINVAL, "Ignoring cgroup2 limits on legacy cgroup system"); ++ cgroup_settings = &conf->cgroup2; + + if (!ops->unified) + return false; +@@ -2937,7 +3703,7 @@ __cgfsng_ops static bool cgfsng_setup_limits(struct cgroup_ops *ops, + ret = bpf_device_cgroup_prepare(ops, conf, cg->subsystem, + cg->value); + } else { +- ret = lxc_write_openat(h->container_limit_path, ++ ret = lxc_write_openat(h->container_full_path, + cg->subsystem, cg->value, + strlen(cg->value)); + if (ret < 0) +@@ -3013,7 +3779,7 @@ __cgfsng_ops bool cgfsng_devices_activate(struct cgroup_ops *ops, + return log_error_errno(false, ENOMEM, "Failed to finalize bpf program"); + + ret = bpf_program_cgroup_attach(devices, BPF_CGROUP_DEVICE, +- unified->container_limit_path, ++ unified->container_full_path, + BPF_F_ALLOW_MULTI); + if (ret) + return log_error_errno(false, ENOMEM, "Failed to attach bpf program"); +@@ -3085,6 +3851,12 @@ bool __cgfsng_delegate_controllers(struct cgroup_ops *ops, const char *cgroup) + return true; + } + ++#ifdef HAVE_ISULAD ++__cgfsng_ops bool cgfsng_monitor_delegate_controllers(struct cgroup_ops *ops) ++{ ++ return true; ++} ++#else + __cgfsng_ops bool cgfsng_monitor_delegate_controllers(struct cgroup_ops *ops) + { + if (!ops) +@@ -3092,6 +3864,7 @@ __cgfsng_ops bool cgfsng_monitor_delegate_controllers(struct cgroup_ops *ops) + + return __cgfsng_delegate_controllers(ops, ops->monitor_cgroup); + } ++#endif + + __cgfsng_ops bool cgfsng_payload_delegate_controllers(struct cgroup_ops *ops) + { +@@ -3144,7 +3917,7 @@ static void cg_unified_delegate(char ***delegate) + return; + } + +- lxc_iterate_parts(token, buf, " \t\n") { ++ lxc_iterate_parts (token, buf, " \t\n") { + /* + * We always need to chown this for both cgroup and + * cgroup2. +@@ -3192,7 +3965,6 @@ static int cg_hybrid_init(struct cgroup_ops *ops, bool relative, bool unprivileg + __do_free char *base_cgroup = NULL, *mountpoint = NULL; + __do_free_string_list char **controller_list = NULL; + int type; +- bool writeable; + struct hierarchy *new; + + type = get_cgroup_version(line); +@@ -3242,6 +4014,23 @@ static int cg_hybrid_init(struct cgroup_ops *ops, bool relative, bool unprivileg + + trim(base_cgroup); + prune_init_scope(base_cgroup); ++#ifdef HAVE_ISULAD ++ /* isulad: do not test writeable, if we run isulad in docker without cgroup namespace. ++ * the base_cgroup will be docker/XXX.., mountpoint+base_cgroup may be not exist */ ++ ++ /* ++ * reason:base cgroup may be started with /system.slice when cg_hybrid_init ++ * read /proc/1/cgroup on host, and cgroup init will set all containers ++ * cgroup path under /sys/fs/cgroup//system.slice/xxx/lxc ++ * directory, this is not consistent with docker. The default cgroup path ++ * should be under /sys/fs/cgroup//lxc directory. ++ */ ++ ++ if (strlen(base_cgroup) > 1 && base_cgroup[0] == '/') { ++ base_cgroup[1] = '\0'; ++ } ++#else ++ bool writeable; + if (type == CGROUP2_SUPER_MAGIC) + writeable = test_writeable_v2(mountpoint, base_cgroup); + else +@@ -3250,7 +4039,7 @@ static int cg_hybrid_init(struct cgroup_ops *ops, bool relative, bool unprivileg + TRACE("The %s group is not writeable", base_cgroup); + continue; + } +- ++#endif + if (type == CGROUP2_SUPER_MAGIC) { + char *cgv2_ctrl_path; + +@@ -3403,7 +4192,45 @@ static int cg_init(struct cgroup_ops *ops, struct lxc_conf *conf) + return cg_hybrid_init(ops, relative, !lxc_list_empty(&conf->id_map)); + } + +-__cgfsng_ops static int cgfsng_data_init(struct cgroup_ops *ops) ++#ifdef HAVE_ISULAD ++__cgfsng_ops static int cgfsng_data_init(struct cgroup_ops *ops, struct lxc_conf *conf) ++{ ++ const char *cgroup_pattern; ++ const char *cgroup_tree; ++ __do_free char *container_cgroup = NULL, *__cgroup_tree = NULL; ++ size_t len; ++ ++ if (!ops) ++ return ret_set_errno(-1, ENOENT); ++ ++ /* copy system-wide cgroup information */ ++ cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern"); ++ if (cgroup_pattern && strcmp(cgroup_pattern, "") != 0) ++ ops->cgroup_pattern = must_copy_string(cgroup_pattern); ++ ++ if (conf->cgroup_meta.dir) { ++ cgroup_tree = conf->cgroup_meta.dir; ++ container_cgroup = must_concat(&len, cgroup_tree, "/", conf->name, NULL); ++ } else if (ops->cgroup_pattern) { ++ __cgroup_tree = lxc_string_replace("%n", conf->name, ops->cgroup_pattern); ++ if (!__cgroup_tree) ++ return ret_set_errno(-1, ENOMEM); ++ ++ cgroup_tree = __cgroup_tree; ++ container_cgroup = must_concat(&len, cgroup_tree, NULL); ++ } else { ++ cgroup_tree = NULL; ++ container_cgroup = must_concat(&len, conf->name, NULL); ++ } ++ if (!container_cgroup) ++ return ret_set_errno(-1, ENOMEM); ++ ++ ops->container_cgroup = move_ptr(container_cgroup); ++ ++ return 0; ++} ++#else ++__cgfsng_ops static int cgfsng_data_init(struct cgroup_ops *ops, struct lxc_conf *conf) + { + const char *cgroup_pattern; + +@@ -3417,6 +4244,7 @@ __cgfsng_ops static int cgfsng_data_init(struct cgroup_ops *ops) + + return 0; + } ++#endif + + struct cgroup_ops *cgfsng_ops_init(struct lxc_conf *conf) + { +@@ -3433,7 +4261,12 @@ struct cgroup_ops *cgfsng_ops_init(struct lxc_conf *conf) + return NULL; + + cgfsng_ops->data_init = cgfsng_data_init; ++#ifdef HAVE_ISULAD ++ cgfsng_ops->errfd = conf ? conf->errpipe[1] : -1; ++ cgfsng_ops->payload_destroy = isulad_cgfsng_payload_destroy; ++#else + cgfsng_ops->payload_destroy = cgfsng_payload_destroy; ++#endif + cgfsng_ops->monitor_destroy = cgfsng_monitor_destroy; + cgfsng_ops->monitor_create = cgfsng_monitor_create; + cgfsng_ops->monitor_enter = cgfsng_monitor_enter; +@@ -3446,6 +4279,9 @@ struct cgroup_ops *cgfsng_ops_init(struct lxc_conf *conf) + cgfsng_ops->num_hierarchies = cgfsng_num_hierarchies; + cgfsng_ops->get_hierarchies = cgfsng_get_hierarchies; + cgfsng_ops->get_cgroup = cgfsng_get_cgroup; ++#ifdef HAVE_ISULAD ++ cgfsng_ops->get_cgroup_full_path = cgfsng_get_cgroup_full_path; ++#endif + cgfsng_ops->get = cgfsng_get; + cgfsng_ops->set = cgfsng_set; + cgfsng_ops->freeze = cgfsng_freeze; +@@ -3458,7 +4294,6 @@ struct cgroup_ops *cgfsng_ops_init(struct lxc_conf *conf) + cgfsng_ops->chown = cgfsng_chown; + cgfsng_ops->mount = cgfsng_mount; + cgfsng_ops->devices_activate = cgfsng_devices_activate; +- cgfsng_ops->get_limiting_cgroup = cgfsng_get_limiting_cgroup; + + return move_ptr(cgfsng_ops); + } +diff --git a/src/lxc/cgroups/cgroup.c b/src/lxc/cgroups/cgroup.c +index 7c94fd83b..ad46d5c99 100644 +--- a/src/lxc/cgroups/cgroup.c ++++ b/src/lxc/cgroups/cgroup.c +@@ -31,7 +31,7 @@ struct cgroup_ops *cgroup_init(struct lxc_conf *conf) + if (!cgroup_ops) + return log_error_errno(NULL, errno, "Failed to initialize cgroup driver"); + +- if (cgroup_ops->data_init(cgroup_ops)) { ++ if (cgroup_ops->data_init(cgroup_ops, conf)) { + cgroup_exit(cgroup_ops); + return log_error_errno(NULL, errno, + "Failed to initialize cgroup data"); +diff --git a/src/lxc/cgroups/cgroup.h b/src/lxc/cgroups/cgroup.h +index c5bf7941a..a9048c44a 100644 +--- a/src/lxc/cgroups/cgroup.h ++++ b/src/lxc/cgroups/cgroup.h +@@ -54,11 +54,7 @@ typedef enum { + * init's cgroup (if root). + * + * @container_full_path +- * - The full path to the container's cgroup. +- * +- * @container_limit_path +- * - The full path to the container's limiting cgroup. May simply point to +- * container_full_path. ++ * - The full path to the containers cgroup. + * + * @monitor_full_path + * - The full path to the monitor's cgroup. +@@ -81,18 +77,15 @@ struct hierarchy { + char *mountpoint; + char *container_base_path; + char *container_full_path; +- char *container_limit_path; + char *monitor_full_path; + int version; + + /* cgroup2 only */ + unsigned int bpf_device_controller:1; + +- /* container cgroup fd */ +- int cgfd_con; +- /* limiting cgroup fd (may be equal to cgfd_con if not separated) */ +- int cgfd_limit; + /* monitor cgroup fd */ ++ int cgfd_con; ++ /* container cgroup fd */ + int cgfd_mon; + }; + +@@ -109,6 +102,10 @@ struct cgroup_ops { + char *container_cgroup; + char *monitor_cgroup; + ++#ifdef HAVE_ISULAD ++ int errfd; ++#endif ++ + /* @hierarchies + * - A NULL-terminated array of struct hierarchy, one per legacy + * hierarchy. No duplicates. First sufficient, writeable mounted +@@ -146,14 +143,21 @@ struct cgroup_ops { + */ + cgroup_layout_t cgroup_layout; + +- int (*data_init)(struct cgroup_ops *ops); ++ int (*data_init)(struct cgroup_ops *ops, struct lxc_conf *conf); ++#ifdef HAVE_ISULAD ++ bool (*payload_destroy)(struct cgroup_ops *ops, struct lxc_handler *handler); ++#else + void (*payload_destroy)(struct cgroup_ops *ops, struct lxc_handler *handler); ++#endif + void (*monitor_destroy)(struct cgroup_ops *ops, struct lxc_handler *handler); + bool (*monitor_create)(struct cgroup_ops *ops, struct lxc_handler *handler); + bool (*monitor_enter)(struct cgroup_ops *ops, struct lxc_handler *handler); + bool (*payload_create)(struct cgroup_ops *ops, struct lxc_handler *handler); + bool (*payload_enter)(struct cgroup_ops *ops, struct lxc_handler *handler); + const char *(*get_cgroup)(struct cgroup_ops *ops, const char *controller); ++#ifdef HAVE_ISULAD ++ const char *(*get_cgroup_full_path)(struct cgroup_ops *ops, const char *controller); ++#endif + bool (*escape)(const struct cgroup_ops *ops, struct lxc_conf *conf); + int (*num_hierarchies)(struct cgroup_ops *ops); + bool (*get_hierarchies)(struct cgroup_ops *ops, int n, char ***out); +@@ -176,7 +180,6 @@ struct cgroup_ops { + bool (*monitor_delegate_controllers)(struct cgroup_ops *ops); + bool (*payload_delegate_controllers)(struct cgroup_ops *ops); + void (*payload_finalize)(struct cgroup_ops *ops); +- const char *(*get_limiting_cgroup)(struct cgroup_ops *ops, const char *controller); + }; + + extern struct cgroup_ops *cgroup_init(struct lxc_conf *conf); +diff --git a/src/lxc/cgroups/cgroup2_devices.c b/src/lxc/cgroups/cgroup2_devices.c +index 04ba7b332..4efb28fbd 100644 +--- a/src/lxc/cgroups/cgroup2_devices.c ++++ b/src/lxc/cgroups/cgroup2_devices.c +@@ -167,7 +167,7 @@ struct bpf_program *bpf_program_new(uint32_t prog_type) + { + __do_free struct bpf_program *prog = NULL; + +- prog = zalloc(sizeof(struct bpf_program)); ++ prog = calloc(1, sizeof(struct bpf_program)); + if (!prog) + return NULL; + +@@ -183,6 +183,9 @@ struct bpf_program *bpf_program_new(uint32_t prog_type) + + int bpf_program_init(struct bpf_program *prog) + { ++ if (!prog) ++ return ret_set_errno(-1, EINVAL); ++ + const struct bpf_insn pre_insn[] = { + /* load device type to r2 */ + BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct bpf_cgroup_dev_ctx, access_type)), +@@ -199,17 +202,19 @@ int bpf_program_init(struct bpf_program *prog) + BPF_LDX_MEM(BPF_W, BPF_REG_5, BPF_REG_1, offsetof(struct bpf_cgroup_dev_ctx, minor)), + }; + +- if (!prog) +- return ret_set_errno(-1, EINVAL); +- + return bpf_program_add_instructions(prog, pre_insn, ARRAY_SIZE(pre_insn)); + } + + int bpf_program_append_device(struct bpf_program *prog, struct device_item *device) + { ++ int ret; + int jump_nr = 1; +- int access_mask, device_type, ret; +- struct bpf_insn bpf_access_decision[2]; ++ struct bpf_insn bpf_access_decision[] = { ++ BPF_MOV64_IMM(BPF_REG_0, device->allow), ++ BPF_EXIT_INSN(), ++ }; ++ int access_mask; ++ int device_type; + + if (!prog || !device) + return ret_set_errno(-1, EINVAL); +@@ -280,8 +285,6 @@ int bpf_program_append_device(struct bpf_program *prog, struct device_item *devi + return log_error_errno(-1, errno, "Failed to add instructions to bpf cgroup program"); + } + +- bpf_access_decision[0] = BPF_MOV64_IMM(BPF_REG_0, device->allow); +- bpf_access_decision[1] = BPF_EXIT_INSN(); + ret = bpf_program_add_instructions(prog, bpf_access_decision, + ARRAY_SIZE(bpf_access_decision)); + if (ret) +@@ -292,7 +295,10 @@ int bpf_program_append_device(struct bpf_program *prog, struct device_item *devi + + int bpf_program_finalize(struct bpf_program *prog) + { +- struct bpf_insn ins[2]; ++ struct bpf_insn ins[] = { ++ BPF_MOV64_IMM(BPF_REG_0, prog->device_list_type), ++ BPF_EXIT_INSN(), ++ }; + + if (!prog) + return ret_set_errno(-1, EINVAL); +@@ -301,9 +307,6 @@ int bpf_program_finalize(struct bpf_program *prog) + prog->device_list_type == LXC_BPF_DEVICE_CGROUP_BLACKLIST + ? "blacklist" + : "whitelist"); +- +- ins[0] = BPF_MOV64_IMM(BPF_REG_0, prog->device_list_type); +- ins[1] = BPF_EXIT_INSN(); + return bpf_program_add_instructions(prog, ins, ARRAY_SIZE(ins)); + } + +@@ -337,12 +340,12 @@ static int bpf_program_load_kernel(struct bpf_program *prog, char *log_buf, + int bpf_program_cgroup_attach(struct bpf_program *prog, int type, + const char *path, uint32_t flags) + { +- __do_close int fd = -EBADF; + __do_free char *copy = NULL; ++ __do_close int fd = -EBADF; + union bpf_attr attr; + int ret; + +- if (!path || !prog) ++ if (!prog) + return ret_set_errno(-1, EINVAL); + + if (flags & ~(BPF_F_ALLOW_OVERRIDE | BPF_F_ALLOW_MULTI)) +@@ -392,8 +395,8 @@ int bpf_program_cgroup_attach(struct bpf_program *prog, int type, + + int bpf_program_cgroup_detach(struct bpf_program *prog) + { +- __do_close int fd = -EBADF; + int ret; ++ __do_close int fd = -EBADF; + + if (!prog) + return 0; +@@ -441,9 +444,6 @@ int bpf_list_add_device(struct lxc_conf *conf, struct device_item *device) + __do_free struct device_item *new_device = NULL; + struct lxc_list *it; + +- if (!conf || !device) +- return ret_errno(EINVAL); +- + lxc_list_for_each(it, &conf->devices) { + struct device_item *cur = it->elem; + +@@ -502,11 +502,12 @@ int bpf_list_add_device(struct lxc_conf *conf, struct device_item *device) + + bool bpf_devices_cgroup_supported(void) + { +- __do_bpf_program_free struct bpf_program *prog = NULL; + const struct bpf_insn dummy[] = { + BPF_MOV64_IMM(BPF_REG_0, 1), + BPF_EXIT_INSN(), + }; ++ ++ __do_bpf_program_free struct bpf_program *prog = NULL; + int ret; + + if (geteuid() != 0) +@@ -514,7 +515,7 @@ bool bpf_devices_cgroup_supported(void) + "The bpf device cgroup requires real root"); + + prog = bpf_program_new(BPF_PROG_TYPE_CGROUP_DEVICE); +- if (!prog) ++ if (prog < 0) + return log_trace(false, "Failed to allocate new bpf device cgroup program"); + + ret = bpf_program_add_instructions(prog, dummy, ARRAY_SIZE(dummy)); +diff --git a/src/lxc/cmd/lxc-update-config.in b/src/lxc/cmd/lxc-update-config.in +index 0a03f06d0..95187d405 100644 +--- a/src/lxc/cmd/lxc-update-config.in ++++ b/src/lxc/cmd/lxc-update-config.in +@@ -74,7 +74,7 @@ sed -i \ + -e 's/\([[:blank:]*]\|#*\)\(lxc\.stopsignal\)\([[:blank:]*]\|=\)/\1lxc\.signal\.stop\3/g' \ + -e 's/\([[:blank:]*]\|#*\)\(lxc\.syslog\)\([[:blank:]*]\|=\)/\1lxc\.log\.syslog\3/g' \ + -e 's/\([[:blank:]*]\|#*\)\(lxc\.loglevel\)\([[:blank:]*]\|=\)/\1lxc\.log\.level\3/g' \ +--e 's/\([[:blank:]*]\|#*\)\(lxc\.logfile\)\([[:blank:]*]\|=\)/\1lxc\.log\.file\3/g' \ ++-e 's/\([[:blank:]*]\|#*\)\(lxc\.logfile\)\([[:blank:]*]\|=\)/1lxc\.log\.file\3/g' \ + -e 's/\([[:blank:]*]\|#*\)\(lxc\.init_cmd\)\([[:blank:]*]\|=\)/\1lxc\.init\.cmd\3/g' \ + -e 's/\([[:blank:]*]\|#*\)\(lxc\.init_uid\)\([[:blank:]*]\|=\)/\1lxc\.init\.uid\3/g' \ + -e 's/\([[:blank:]*]\|#*\)\(lxc\.init_gid\)\([[:blank:]*]\|=\)/\1lxc\.init\.gid\3/g' \ +diff --git a/src/lxc/cmd/lxc_init.c b/src/lxc/cmd/lxc_init.c +index a03631f1a..a52793343 100644 +--- a/src/lxc/cmd/lxc_init.c ++++ b/src/lxc/cmd/lxc_init.c +@@ -28,7 +28,7 @@ + #include "initutils.h" + #include "memory_utils.h" + #include "parse.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "string_utils.h" + + /* option keys for long only options */ +diff --git a/src/lxc/cmd/lxc_monitord.c b/src/lxc/cmd/lxc_monitord.c +index bcb289ca6..3ec7a756d 100644 +--- a/src/lxc/cmd/lxc_monitord.c ++++ b/src/lxc/cmd/lxc_monitord.c +@@ -28,7 +28,7 @@ + #include "log.h" + #include "mainloop.h" + #include "monitor.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "utils.h" + + #define CLIENTFDS_CHUNK 64 +diff --git a/src/lxc/cmd/lxc_user_nic.c b/src/lxc/cmd/lxc_user_nic.c +index 4160565f3..fd3455903 100644 +--- a/src/lxc/cmd/lxc_user_nic.c ++++ b/src/lxc/cmd/lxc_user_nic.c +@@ -36,7 +36,7 @@ + #include "memory_utils.h" + #include "network.h" + #include "parse.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "string_utils.h" + #include "syscall_wrappers.h" + #include "utils.h" +@@ -133,14 +133,26 @@ static char *get_username(void) + return strdup(pwent.pw_name); + } + ++static void free_groupnames(char **groupnames) ++{ ++ int i; ++ ++ if (!groupnames) ++ return; ++ ++ for (i = 0; groupnames[i]; i++) ++ free(groupnames[i]); ++ ++ free(groupnames); ++} + + static char **get_groupnames(void) + { + __do_free char *buf = NULL; + __do_free gid_t *group_ids = NULL; +- __do_free_string_list char **groupnames = NULL; + int ngroups; + int ret, i; ++ char **groupnames; + struct group grent; + struct group *grentp = NULL; + size_t bufsize; +@@ -149,10 +161,9 @@ static char **get_groupnames(void) + if (ngroups < 0) { + CMD_SYSERROR("Failed to get number of groups the user belongs to\n"); + return NULL; +- } +- +- if (ngroups == 0) ++ } else if (ngroups == 0) { + return NULL; ++ } + + group_ids = malloc(sizeof(gid_t) * ngroups); + if (!group_ids) { +@@ -166,53 +177,66 @@ static char **get_groupnames(void) + return NULL; + } + +- groupnames = zalloc(sizeof(char *) * (ngroups + 1)); ++ groupnames = malloc(sizeof(char *) * (ngroups + 1)); + if (!groupnames) { + CMD_SYSERROR("Failed to allocate memory while getting group names\n"); + return NULL; + } + ++ memset(groupnames, 0, sizeof(char *) * (ngroups + 1)); ++ + bufsize = sysconf(_SC_GETGR_R_SIZE_MAX); + if (bufsize == -1) + bufsize = 1024; + + buf = malloc(bufsize); + if (!buf) { ++ free_groupnames(groupnames); + CMD_SYSERROR("Failed to allocate memory while getting group names\n"); + return NULL; + } + + for (i = 0; i < ngroups; i++) { + while ((ret = getgrgid_r(group_ids[i], &grent, buf, bufsize, &grentp)) == ERANGE) { +- char *new_buf; +- + bufsize <<= 1; + if (bufsize > MAX_GRBUF_SIZE) { +- usernic_error("Failed to get group members: %u\n", group_ids[i]); ++ usernic_error("Failed to get group members: %u\n", ++ group_ids[i]); ++ free(buf); ++ free(group_ids); ++ free_groupnames(groupnames); + return NULL; + } +- +- new_buf = realloc(buf, bufsize); ++ char *new_buf = realloc(buf, bufsize); + if (!new_buf) { +- usernic_error("Failed to allocate memory while getting group names: %s\n", ++ usernic_error("Failed to allocate memory while getting group " ++ "names: %s\n", + strerror(errno)); ++ free(buf); ++ free(group_ids); ++ free_groupnames(groupnames); + return NULL; + } + buf = new_buf; + } ++ if (!grentp) { ++ if (ret == 0) ++ usernic_error("%s", "Could not find matched group record\n"); + +- /* If a group is not found, just ignore it. */ +- if (!grentp) +- continue; ++ CMD_SYSERROR("Failed to get group name: %u\n", group_ids[i]); ++ free_groupnames(groupnames); ++ return NULL; ++ } + + groupnames[i] = strdup(grent.gr_name); + if (!groupnames[i]) { + usernic_error("Failed to copy group name \"%s\"", grent.gr_name); ++ free_groupnames(groupnames); + return NULL; + } + } + +- return move_ptr(groupnames); ++ return groupnames; + } + + static bool name_is_in_groupnames(char *name, char **groupnames) +@@ -301,9 +325,9 @@ static int get_alloted(char *me, char *intype, char *link, + { + __do_free char *line = NULL; + __do_fclose FILE *fin = NULL; +- __do_free_string_list char **groups = NULL; + int n, ret; + char name[100], type[100], br[100]; ++ char **groups; + int count = 0; + size_t len = 0; + +@@ -355,6 +379,8 @@ static int get_alloted(char *me, char *intype, char *link, + count += n; + } + ++ free_groupnames(groups); ++ + /* Now return the total number of nics that this user can create. */ + return count; + } +diff --git a/src/lxc/cmd/lxc_usernsexec.c b/src/lxc/cmd/lxc_usernsexec.c +index aee7448ce..6441fb3c8 100644 +--- a/src/lxc/cmd/lxc_usernsexec.c ++++ b/src/lxc/cmd/lxc_usernsexec.c +@@ -61,7 +61,7 @@ static void opentty(const char *tty, int which) + + fd = open(tty, O_RDWR | O_NONBLOCK); + if (fd < 0) { +- CMD_SYSINFO("Failed to open tty"); ++ CMD_SYSERROR("Failed to open tty"); + return; + } + +@@ -87,13 +87,13 @@ static int do_child(void *vargv) + int ret; + char **argv = (char **)vargv; + +- if (!lxc_setgroups(0, NULL)) +- return -1; +- + /* Assume we want to become root */ + if (!lxc_switch_uid_gid(0, 0)) + return -1; + ++ if (!lxc_setgroups(0, NULL)) ++ return -1; ++ + ret = unshare(CLONE_NEWNS); + if (ret < 0) { + CMD_SYSERROR("Failed to unshare mount namespace"); +@@ -103,7 +103,7 @@ static int do_child(void *vargv) + if (detect_shared_rootfs()) { + ret = mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL); + if (ret < 0) { +- CMD_SYSINFO("Failed to recursively turn root mount tree into dependent mount"); ++ CMD_SYSINFO("Failed to make \"/\" rslave"); + return -1; + } + } +diff --git a/src/lxc/commands.c b/src/lxc/commands.c +index b6ae101fc..37354e87c 100644 +--- a/src/lxc/commands.c ++++ b/src/lxc/commands.c +@@ -75,8 +75,8 @@ static const char *lxc_cmd_str(lxc_cmd_t cmd) + [LXC_CMD_GET_CONFIG_ITEM] = "get_config_item", + [LXC_CMD_GET_NAME] = "get_name", + [LXC_CMD_GET_LXCPATH] = "get_lxcpath", +- [LXC_CMD_ADD_STATE_CLIENT] = "add_state_client", +- [LXC_CMD_CONSOLE_LOG] = "console_log", ++ [LXC_CMD_ADD_STATE_CLIENT] = "add_state_client", ++ [LXC_CMD_CONSOLE_LOG] = "console_log", + [LXC_CMD_SERVE_STATE_CLIENTS] = "serve_state_clients", + [LXC_CMD_SECCOMP_NOTIFY_ADD_LISTENER] = "seccomp_notify_add_listener", + [LXC_CMD_ADD_BPF_DEVICE_CGROUP] = "add_bpf_device_cgroup", +@@ -84,8 +84,10 @@ static const char *lxc_cmd_str(lxc_cmd_t cmd) + [LXC_CMD_UNFREEZE] = "unfreeze", + [LXC_CMD_GET_CGROUP2_FD] = "get_cgroup2_fd", + [LXC_CMD_GET_INIT_PIDFD] = "get_init_pidfd", +- [LXC_CMD_GET_LIMITING_CGROUP] = "get_limiting_cgroup", +- [LXC_CMD_GET_LIMITING_CGROUP2_FD] = "get_limiting_cgroup2_fd", ++#ifdef HAVE_ISULAD ++ [LXC_CMD_SET_TERMINAL_FIFOS] = "set_terminal_fifos", ++ [LXC_CMD_SET_TERMINAL_WINCH] = "set_terminal_winch", ++#endif + }; + + if (cmd >= LXC_CMD_MAX) +@@ -108,7 +110,7 @@ static const char *lxc_cmd_str(lxc_cmd_t cmd) + * stored directly in data and datalen will be 0. + * + * As a special case, the response for LXC_CMD_CONSOLE is created +- * here as it contains an fd for the ptmx pty passed through the ++ * here as it contains an fd for the master pty passed through the + * unix socket. + */ + static int lxc_cmd_rsp_recv(int sock, struct lxc_cmd_rr *cmd) +@@ -117,7 +119,15 @@ static int lxc_cmd_rsp_recv(int sock, struct lxc_cmd_rr *cmd) + int ret; + struct lxc_cmd_rsp *rsp = &cmd->rsp; + ++#ifdef HAVE_ISULAD ++ /*isulad: add timeout 1s to avoid long block due to [lxc monitor] error*/ ++ ret = lxc_abstract_unix_recv_fds_timeout(sock, &fd_rsp, 1, rsp, sizeof(*rsp), 1000 * 1000); ++ if (ret < 0 && (errno == ECONNRESET || errno == EAGAIN || errno == EWOULDBLOCK)) { ++ errno = ECONNRESET; /*isulad set errno ECONNRESET when timeout */ ++ } ++#else + ret = lxc_abstract_unix_recv_fds(sock, &fd_rsp, 1, rsp, sizeof(*rsp)); ++#endif + if (ret < 0) + return log_warn_errno(-1, + errno, "Failed to receive response for command \"%s\"", +@@ -139,14 +149,12 @@ static int lxc_cmd_rsp_recv(int sock, struct lxc_cmd_rr *cmd) + ENOMEM, "Failed to receive response for command \"%s\"", + lxc_cmd_str(cmd->req.cmd)); + +- rspdata->ptmxfd = move_fd(fd_rsp); ++ rspdata->masterfd = move_fd(fd_rsp); + rspdata->ttynum = PTR_TO_INT(rsp->data); + rsp->data = rspdata; + } + +- if (cmd->req.cmd == LXC_CMD_GET_CGROUP2_FD || +- cmd->req.cmd == LXC_CMD_GET_LIMITING_CGROUP2_FD) +- { ++ if (cmd->req.cmd == LXC_CMD_GET_CGROUP2_FD) { + int cgroup2_fd = move_fd(fd_rsp); + rsp->data = INT_TO_PTR(cgroup2_fd); + } +@@ -487,14 +495,25 @@ static int lxc_cmd_get_clone_flags_callback(int fd, struct lxc_cmd_req *req, + return 0; + } + +-static char *lxc_cmd_get_cgroup_path_do(const char *name, const char *lxcpath, +- const char *subsystem, +- lxc_cmd_t command) ++/* ++ * lxc_cmd_get_cgroup_path: Calculate a container's cgroup path for a ++ * particular subsystem. This is the cgroup path relative to the root ++ * of the cgroup filesystem. ++ * ++ * @name : name of container to connect to ++ * @lxcpath : the lxcpath in which the container is running ++ * @subsystem : the subsystem being asked about ++ * ++ * Returns the path on success, NULL on failure. The caller must free() the ++ * returned path. ++ */ ++char *lxc_cmd_get_cgroup_path(const char *name, const char *lxcpath, ++ const char *subsystem) + { + int ret, stopped; + struct lxc_cmd_rr cmd = { + .req = { +- .cmd = command, ++ .cmd = LXC_CMD_GET_CGROUP, + .data = subsystem, + .datalen = 0, + }, +@@ -509,21 +528,8 @@ static char *lxc_cmd_get_cgroup_path_do(const char *name, const char *lxcpath, + if (ret < 0) + return NULL; + +- if (ret == 0) { +- if (command == LXC_CMD_GET_LIMITING_CGROUP) { +- /* +- * This may indicate that the container was started +- * under an ealier version before +- * `cgroup_advanced_isolation` as implemented, there +- * it sees an unknown command and just closes the +- * socket, sending us an EOF. +- */ +- return lxc_cmd_get_cgroup_path_do(name, lxcpath, +- subsystem, +- LXC_CMD_GET_CGROUP); +- } ++ if (ret == 0) + return NULL; +- } + + if (cmd.rsp.ret < 0 || cmd.rsp.datalen < 0) + return NULL; +@@ -531,72 +537,24 @@ static char *lxc_cmd_get_cgroup_path_do(const char *name, const char *lxcpath, + return cmd.rsp.data; + } + +-/* +- * lxc_cmd_get_cgroup_path: Calculate a container's cgroup path for a +- * particular subsystem. This is the cgroup path relative to the root +- * of the cgroup filesystem. +- * +- * @name : name of container to connect to +- * @lxcpath : the lxcpath in which the container is running +- * @subsystem : the subsystem being asked about +- * +- * Returns the path on success, NULL on failure. The caller must free() the +- * returned path. +- */ +-char *lxc_cmd_get_cgroup_path(const char *name, const char *lxcpath, +- const char *subsystem) +-{ +- return lxc_cmd_get_cgroup_path_do(name, lxcpath, subsystem, +- LXC_CMD_GET_CGROUP); +-} +- +-/* +- * lxc_cmd_get_limiting_cgroup_path: Calculate a container's limiting cgroup +- * path for a particular subsystem. This is the cgroup path relative to the +- * root of the cgroup filesystem. This may be the same as the path returned by +- * lxc_cmd_get_cgroup_path if the container doesn't have a limiting path prefix +- * set. +- * +- * @name : name of container to connect to +- * @lxcpath : the lxcpath in which the container is running +- * @subsystem : the subsystem being asked about +- * +- * Returns the path on success, NULL on failure. The caller must free() the +- * returned path. +- */ +-char *lxc_cmd_get_limiting_cgroup_path(const char *name, const char *lxcpath, +- const char *subsystem) +-{ +- return lxc_cmd_get_cgroup_path_do(name, lxcpath, subsystem, +- LXC_CMD_GET_LIMITING_CGROUP); +-} +- +-static int lxc_cmd_get_cgroup_callback_do(int fd, struct lxc_cmd_req *req, +- struct lxc_handler *handler, +- struct lxc_epoll_descr *descr, +- bool limiting_cgroup) ++static int lxc_cmd_get_cgroup_callback(int fd, struct lxc_cmd_req *req, ++ struct lxc_handler *handler, ++ struct lxc_epoll_descr *descr) + { + int ret; + const char *path; +- const void *reqdata; + struct lxc_cmd_rsp rsp; + struct cgroup_ops *cgroup_ops = handler->cgroup_ops; +- const char *(*get_fn)(struct cgroup_ops *ops, const char *controller); + + if (req->datalen > 0) { + ret = validate_string_request(fd, req); + if (ret != 0) + return ret; +- reqdata = req->data; ++ ++ path = cgroup_ops->get_cgroup(cgroup_ops, req->data); + } else { +- reqdata = NULL; ++ path = cgroup_ops->get_cgroup(cgroup_ops, NULL); + } +- +- get_fn = (limiting_cgroup ? cgroup_ops->get_cgroup +- : cgroup_ops->get_limiting_cgroup); +- +- path = get_fn(cgroup_ops, reqdata); +- + if (!path) + return -1; + +@@ -611,20 +569,6 @@ static int lxc_cmd_get_cgroup_callback_do(int fd, struct lxc_cmd_req *req, + return 0; + } + +-static int lxc_cmd_get_cgroup_callback(int fd, struct lxc_cmd_req *req, +- struct lxc_handler *handler, +- struct lxc_epoll_descr *descr) +-{ +- return lxc_cmd_get_cgroup_callback_do(fd, req, handler, descr, false); +-} +- +-static int lxc_cmd_get_limiting_cgroup_callback(int fd, struct lxc_cmd_req *req, +- struct lxc_handler *handler, +- struct lxc_epoll_descr *descr) +-{ +- return ret_errno(ENOSYS); +-} +- + /* + * lxc_cmd_get_config_item: Get config item the running container + * +@@ -844,7 +788,7 @@ static int lxc_cmd_terminal_winch_callback(int fd, struct lxc_cmd_req *req, + * @name : name of container to connect to + * @ttynum : in: the tty to open or -1 for next available + * : out: the tty allocated +- * @fd : out: file descriptor for ptmx side of pty ++ * @fd : out: file descriptor for master side of pty + * @lxcpath : the lxcpath in which the container is running + * + * Returns fd holding tty allocated on success, < 0 on failure +@@ -871,11 +815,11 @@ int lxc_cmd_console(const char *name, int *ttynum, int *fd, const char *lxcpath) + if (ret == 0) + return log_error(-1, "tty number %d invalid, busy or all ttys busy", *ttynum); + +- if (rspdata->ptmxfd < 0) ++ if (rspdata->masterfd < 0) + return log_error(-1, "Unable to allocate fd for tty %d", rspdata->ttynum); + + ret = cmd.rsp.ret; /* socket fd */ +- *fd = rspdata->ptmxfd; ++ *fd = rspdata->masterfd; + *ttynum = rspdata->ttynum; + + return log_info(ret, "Alloced fd %d for tty %d via socket %d", *fd, rspdata->ttynum, ret); +@@ -885,17 +829,17 @@ static int lxc_cmd_console_callback(int fd, struct lxc_cmd_req *req, + struct lxc_handler *handler, + struct lxc_epoll_descr *descr) + { +- int ptmxfd, ret; ++ int masterfd, ret; + struct lxc_cmd_rsp rsp; + int ttynum = PTR_TO_INT(req->data); + +- ptmxfd = lxc_terminal_allocate(handler->conf, fd, &ttynum); +- if (ptmxfd < 0) ++ masterfd = lxc_terminal_allocate(handler->conf, fd, &ttynum); ++ if (masterfd < 0) + return LXC_CMD_REAP_CLIENT_FD; + + memset(&rsp, 0, sizeof(rsp)); + rsp.data = INT_TO_PTR(ttynum); +- ret = lxc_abstract_unix_send_fds(fd, &ptmxfd, 1, &rsp, sizeof(rsp)); ++ ret = lxc_abstract_unix_send_fds(fd, &masterfd, 1, &rsp, sizeof(rsp)); + if (ret < 0) { + lxc_terminal_free(handler->conf, fd); + return log_error_errno(LXC_CMD_REAP_CLIENT_FD, errno, +@@ -1434,47 +1378,146 @@ int lxc_cmd_get_cgroup2_fd(const char *name, const char *lxcpath) + return PTR_TO_INT(cmd.rsp.data); + } + +-static int lxc_cmd_get_cgroup2_fd_callback_do(int fd, struct lxc_cmd_req *req, +- struct lxc_handler *handler, +- struct lxc_epoll_descr *descr, +- bool limiting_cgroup) ++static int lxc_cmd_get_cgroup2_fd_callback(int fd, struct lxc_cmd_req *req, ++ struct lxc_handler *handler, ++ struct lxc_epoll_descr *descr) + { + struct lxc_cmd_rsp rsp = { + .ret = -EINVAL, + }; + struct cgroup_ops *ops = handler->cgroup_ops; +- int ret, send_fd; ++ int ret; + + if (!pure_unified_layout(ops) || !ops->unified) + return lxc_cmd_rsp_send(fd, &rsp); + +- send_fd = limiting_cgroup ? ops->unified->cgfd_limit +- : ops->unified->cgfd_con; +- + rsp.ret = 0; +- ret = lxc_abstract_unix_send_fds(fd, &send_fd, 1, &rsp, sizeof(rsp)); ++ ret = lxc_abstract_unix_send_fds(fd, &ops->unified->cgfd_con, 1, &rsp, ++ sizeof(rsp)); + if (ret < 0) + return log_error(LXC_CMD_REAP_CLIENT_FD, "Failed to send cgroup2 fd"); + + return 0; + } + +-static int lxc_cmd_get_cgroup2_fd_callback(int fd, struct lxc_cmd_req *req, +- struct lxc_handler *handler, +- struct lxc_epoll_descr *descr) ++#ifdef HAVE_ISULAD ++/* ++ * isulad: lxc_cmd_set_terminal_fifos: Set the fifos used for the container as terminal input/output ++ * ++ * @hashed_sock_name: hashed socket name ++ * ++ * Returns 0 when success, else when fail. ++ */ ++int lxc_cmd_set_terminal_fifos(const char *name, const char *lxcpath, const char *in_fifo, ++ const char *out_fifo, const char *err_fifo) + { +- return lxc_cmd_get_cgroup2_fd_callback_do(fd, req, handler, descr, +- false); ++ int ret = 0, stopped = 0; ++ int len = 0; ++ char *tmp = NULL; ++ const char *split = "&&&&", *none_fifo_name = "none"; ++ const char *cmd_in_fifo = in_fifo ? in_fifo : none_fifo_name; ++ const char *cmd_out_fifo = out_fifo ? out_fifo : none_fifo_name; ++ const char *cmd_err_fifo = err_fifo ? err_fifo : none_fifo_name; ++ ++ if (len + strlen(cmd_in_fifo) + strlen(split) + strlen(cmd_out_fifo) + ++ strlen(split) + strlen(cmd_err_fifo) == SIZE_MAX) ++ return -1; ++ len += strlen(cmd_in_fifo) + strlen(split) + strlen(cmd_out_fifo) + strlen(split) + strlen(cmd_err_fifo) + 1; ++ tmp = malloc(len); ++ if (tmp == NULL) ++ return -1; ++ ret = snprintf(tmp, len, "%s%s%s%s%s", cmd_in_fifo, split, cmd_out_fifo, split, cmd_err_fifo); ++ if (ret < 0 || ret >= len) { ++ ERROR("Failed to snprintf in fifo of command"); ++ free(tmp); ++ return -1; ++ } ++ ++ struct lxc_cmd_rr cmd = { ++ .req = { ++ .cmd = LXC_CMD_SET_TERMINAL_FIFOS, ++ .datalen = strlen(tmp)+1, ++ .data = tmp, ++ }, ++ }; ++ ++ ret = lxc_cmd(name, &cmd, &stopped, lxcpath, NULL); ++ if (ret < 0) { ++ ERROR("Failed to send command to container"); ++ free(tmp); ++ return -1; ++ } ++ ++ if (cmd.rsp.ret != 0) { ++ ERROR("Command response error:%d", cmd.rsp.ret); ++ free(tmp); ++ return -1; ++ } ++ ++ free(tmp); ++ return 0; + } + +-static int lxc_cmd_get_limiting_cgroup2_fd_callback(int fd, +- struct lxc_cmd_req *req, +- struct lxc_handler *handler, +- struct lxc_epoll_descr *descr) ++static int lxc_cmd_set_terminal_fifos_callback(int fd, struct lxc_cmd_req *req, ++ struct lxc_handler *handler, struct lxc_epoll_descr *descr) + { +- return ret_errno(ENOSYS); ++ struct lxc_cmd_rsp rsp; ++ memset(&rsp, 0, sizeof(rsp)); ++ ++ rsp.ret = lxc_terminal_add_fifos(handler->conf, req->data);; ++ ++ return lxc_cmd_rsp_send(fd, &rsp); ++} ++ ++struct lxc_cmd_set_terminal_winch_request { ++ unsigned int height; ++ unsigned int width; ++}; ++ ++int lxc_cmd_set_terminal_winch(const char *name, const char *lxcpath, unsigned int height, unsigned int width) ++{ ++ int ret = 0, stopped = 0; ++ struct lxc_cmd_set_terminal_winch_request data = { 0 }; ++ ++ data.height = height; ++ data.width = width; ++ ++ struct lxc_cmd_rr cmd = { ++ .req = { ++ .cmd = LXC_CMD_SET_TERMINAL_WINCH, ++ .datalen = sizeof(struct lxc_cmd_set_terminal_winch_request), ++ .data = &data, ++ }, ++ }; ++ ++ ret = lxc_cmd(name, &cmd, &stopped, lxcpath, NULL); ++ if (ret < 0) { ++ ERROR("Failed to send command to container"); ++ return -1; ++ } ++ ++ if (cmd.rsp.ret != 0) { ++ ERROR("Command response error:%d", cmd.rsp.ret); ++ return -1; ++ } ++ return 0; + } + ++static int lxc_cmd_set_terminal_winch_callback(int fd, struct lxc_cmd_req *req, ++ struct lxc_handler *handler, struct lxc_epoll_descr *descr) ++{ ++ struct lxc_cmd_rsp rsp; ++ struct lxc_cmd_set_terminal_winch_request *data = (struct lxc_cmd_set_terminal_winch_request *)(req->data); ++ memset(&rsp, 0, sizeof(rsp)); ++ ++ rsp.ret = lxc_set_terminal_winsz(&handler->conf->console, data->height, data->width);; ++ ++ return lxc_cmd_rsp_send(fd, &rsp); ++ ++} ++ ++#endif ++ + static int lxc_cmd_process(int fd, struct lxc_cmd_req *req, + struct lxc_handler *handler, + struct lxc_epoll_descr *descr) +@@ -1502,12 +1545,14 @@ static int lxc_cmd_process(int fd, struct lxc_cmd_req *req, + [LXC_CMD_UNFREEZE] = lxc_cmd_unfreeze_callback, + [LXC_CMD_GET_CGROUP2_FD] = lxc_cmd_get_cgroup2_fd_callback, + [LXC_CMD_GET_INIT_PIDFD] = lxc_cmd_get_init_pidfd_callback, +- [LXC_CMD_GET_LIMITING_CGROUP] = lxc_cmd_get_limiting_cgroup_callback, +- [LXC_CMD_GET_LIMITING_CGROUP2_FD] = lxc_cmd_get_limiting_cgroup2_fd_callback, ++#ifdef HAVE_ISULAD ++ [LXC_CMD_SET_TERMINAL_FIFOS] = lxc_cmd_set_terminal_fifos_callback, ++ [LXC_CMD_SET_TERMINAL_WINCH] = lxc_cmd_set_terminal_winch_callback, ++#endif + }; + + if (req->cmd >= LXC_CMD_MAX) +- return log_trace_errno(-1, EINVAL, "Invalid command id %d", req->cmd); ++ return log_error_errno(-1, ENOENT, "Undefined command id %d", req->cmd); + + return cb[req->cmd](fd, req, handler, descr); + } +diff --git a/src/lxc/commands.h b/src/lxc/commands.h +index 3624a1497..aa8289d7a 100644 +--- a/src/lxc/commands.h ++++ b/src/lxc/commands.h +@@ -38,8 +38,10 @@ typedef enum { + LXC_CMD_UNFREEZE, + LXC_CMD_GET_CGROUP2_FD, + LXC_CMD_GET_INIT_PIDFD, +- LXC_CMD_GET_LIMITING_CGROUP, +- LXC_CMD_GET_LIMITING_CGROUP2_FD, ++#ifdef HAVE_ISULAD ++ LXC_CMD_SET_TERMINAL_FIFOS, ++ LXC_CMD_SET_TERMINAL_WINCH, ++#endif + LXC_CMD_MAX, + } lxc_cmd_t; + +@@ -61,7 +63,7 @@ struct lxc_cmd_rr { + }; + + struct lxc_cmd_console_rsp_data { +- int ptmxfd; ++ int masterfd; + int ttynum; + }; + +@@ -131,9 +133,11 @@ extern int lxc_cmd_add_bpf_device_cgroup(const char *name, const char *lxcpath, + extern int lxc_cmd_freeze(const char *name, const char *lxcpath, int timeout); + extern int lxc_cmd_unfreeze(const char *name, const char *lxcpath, int timeout); + extern int lxc_cmd_get_cgroup2_fd(const char *name, const char *lxcpath); +-extern char *lxc_cmd_get_limiting_cgroup_path(const char *name, +- const char *lxcpath, +- const char *subsystem); +-extern int lxc_cmd_get_limiting_cgroup2_fd(const char *name, const char *lxcpath); ++ ++#ifdef HAVE_ISULAD ++extern int lxc_cmd_set_terminal_fifos(const char *name, const char *lxcpath, ++ const char *in_fifo, const char *out_fifo, const char *err_fifo); ++extern int lxc_cmd_set_terminal_winch(const char *name, const char *lxcpath, unsigned int height, unsigned int width); ++#endif + + #endif /* __commands_h */ +diff --git a/src/lxc/commands_utils.c b/src/lxc/commands_utils.c +index 2af722ca1..2f2670d74 100644 +--- a/src/lxc/commands_utils.c ++++ b/src/lxc/commands_utils.c +@@ -62,14 +62,11 @@ int lxc_cmd_sock_get_state(const char *name, const char *lxcpath, + + ret = lxc_cmd_add_state_client(name, lxcpath, states, &state_client_fd); + if (ret < 0) +- return ret_errno(EINVAL); ++ return -1; + + if (ret < MAX_STATE) + return ret; + +- if (state_client_fd < 0) +- return ret_errno(EBADF); +- + return lxc_cmd_sock_rcv_state(state_client_fd, timeout); + } + +diff --git a/src/lxc/compiler.h b/src/lxc/compiler.h +index 114fb81ba..92cd9fd14 100644 +--- a/src/lxc/compiler.h ++++ b/src/lxc/compiler.h +@@ -57,22 +57,4 @@ + + #define __cgfsng_ops + +-/* access attribute */ +-#define __access_r(x, y) +-#define __access_w(x, y) +-#define __access_rw(x, y) +- +-#ifdef __has_attribute +-#if __has_attribute(access) +-#undef __access_r +-#define __access_r(x, y) __attribute__((access(read_only, x, y))) +- +-#undef __access_w +-#define __access_w(x, y) __attribute__((access(write_only, x, y))) +- +-#undef __access_rw +-#define __access_rw(x, y) __attribute__((access(read_write, x, y))) +-#endif +-#endif +- + #endif /* __LXC_COMPILER_H */ +diff --git a/src/lxc/conf.c b/src/lxc/conf.c +index 00789961c..0744c19b3 100644 +--- a/src/lxc/conf.c ++++ b/src/lxc/conf.c +@@ -33,6 +33,11 @@ + #include + #include + ++#ifdef HAVE_ISULAD ++#include ++#include "sync.h" ++#endif ++ + #include "af_unix.h" + #include "caps.h" + #include "cgroup.h" +@@ -51,15 +56,18 @@ + #include "namespace.h" + #include "network.h" + #include "parse.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "ringbuf.h" + #include "start.h" + #include "storage.h" + #include "storage/overlay.h" + #include "syscall_wrappers.h" + #include "terminal.h" ++#include "loop.h" + #include "utils.h" + #include "uuid.h" ++#include "path.h" ++#include "utils.h" + + #ifdef MAJOR_IN_MKDEV + #include +@@ -118,7 +126,14 @@ char *lxchook_names[NUM_LXC_HOOKS] = { + "post-stop", + "clone", + "destroy", ++#ifdef HAVE_ISULAD ++ "start-host", ++ "oci-prestart", ++ "oci-poststart", ++ "oci-poststop" ++#else + "start-host" ++#endif + }; + + struct mount_opt { +@@ -637,8 +652,13 @@ static int lxc_mount_auto_mounts(struct lxc_conf *conf, int flags, struct lxc_ha + { LXC_AUTO_PROC_MASK, LXC_AUTO_PROC_MIXED, "%r/proc/sysrq-trigger", "%r/proc/sysrq-trigger", NULL, MS_BIND, NULL }, + { LXC_AUTO_PROC_MASK, LXC_AUTO_PROC_MIXED, NULL, "%r/proc/sysrq-trigger", NULL, MS_REMOUNT|MS_BIND|MS_RDONLY, NULL }, + { LXC_AUTO_PROC_MASK, LXC_AUTO_PROC_RW, "proc", "%r/proc", "proc", MS_NODEV|MS_NOEXEC|MS_NOSUID, NULL }, ++ #ifdef HAVE_ISULAD ++ { LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_RW, "sysfs", "%r/sys", "sysfs", MS_NODEV|MS_NOEXEC|MS_NOSUID, NULL }, ++ { LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_RO, "sysfs", "%r/sys", "sysfs", MS_RDONLY|MS_NODEV|MS_NOEXEC|MS_NOSUID, NULL }, ++ #else + { LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_RW, "sysfs", "%r/sys", "sysfs", 0, NULL }, + { LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_RO, "sysfs", "%r/sys", "sysfs", MS_RDONLY, NULL }, ++ #endif + { LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_MIXED, "sysfs", "%r/sys", "sysfs", MS_NODEV|MS_NOEXEC|MS_NOSUID, NULL }, + { LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_MIXED, "%r/sys", "%r/sys", NULL, MS_BIND, NULL }, + { LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_MIXED, NULL, "%r/sys", NULL, MS_REMOUNT|MS_BIND|MS_RDONLY, NULL }, +@@ -670,6 +690,13 @@ static int lxc_mount_auto_mounts(struct lxc_conf *conf, int flags, struct lxc_ha + if (!destination) + return -1; + ++#ifdef HAVE_ISULAD ++ if (mkdir_p(destination, 0755) < 0) { ++ SYSERROR("Failed to create mount target '%s'", destination); ++ return log_error(-1, "Failed to mkdir destination %s", destination); ++ } ++#endif ++ + mflags = add_required_remount_flags(source, destination, + default_mounts[i].flags); + r = safe_mount(source, destination, default_mounts[i].fstype, +@@ -901,13 +928,11 @@ static int lxc_setup_ttys(struct lxc_conf *conf) + return 0; + } + +-define_cleanup_function(struct lxc_tty_info *, lxc_delete_tty); +- + int lxc_allocate_ttys(struct lxc_conf *conf) + { +- struct lxc_terminal_info *tty_new = NULL; ++ __do_free struct lxc_terminal_info *tty_new = NULL; + int ret; +- call_cleaner(lxc_delete_tty) struct lxc_tty_info *ttys = &conf->ttys; ++ struct lxc_tty_info *ttys = &conf->ttys; + + /* no tty in the configuration */ + if (ttys->max == 0) +@@ -921,39 +946,41 @@ int lxc_allocate_ttys(struct lxc_conf *conf) + for (size_t i = 0; i < ttys->max; i++) { + struct lxc_terminal_info *tty = &ttys->tty[i]; + +- tty->ptmx = -EBADF; +- tty->pts = -EBADF; +- ret = openpty(&tty->ptmx, &tty->pts, NULL, NULL, NULL); ++ tty->master = -EBADF; ++ tty->slave = -EBADF; ++ ret = openpty(&tty->master, &tty->slave, NULL, NULL, NULL); + if (ret < 0) { + ttys->max = i; ++ lxc_delete_tty(ttys); + return log_error_errno(-ENOTTY, ENOTTY, "Failed to create tty %zu", i); + } + +- ret = ttyname_r(tty->pts, tty->name, sizeof(tty->name)); ++ ret = ttyname_r(tty->slave, tty->name, sizeof(tty->name)); + if (ret < 0) { + ttys->max = i; +- return log_error_errno(-ENOTTY, ENOTTY, "Failed to retrieve name of tty %zu pts", i); ++ lxc_delete_tty(ttys); ++ return log_error_errno(-ENOTTY, ENOTTY, "Failed to retrieve name of tty %zu slave", i); + } + +- DEBUG("Created tty \"%s\" with ptmx fd %d and pts fd %d", +- tty->name, tty->ptmx, tty->pts); ++ DEBUG("Created tty \"%s\" with master fd %d and slave fd %d", ++ tty->name, tty->master, tty->slave); + + /* Prevent leaking the file descriptors to the container */ +- ret = fd_cloexec(tty->ptmx, true); ++ ret = fd_cloexec(tty->master, true); + if (ret < 0) +- SYSWARN("Failed to set FD_CLOEXEC flag on ptmx fd %d of tty device \"%s\"", +- tty->ptmx, tty->name); ++ SYSWARN("Failed to set FD_CLOEXEC flag on master fd %d of tty device \"%s\"", ++ tty->master, tty->name); + +- ret = fd_cloexec(tty->pts, true); ++ ret = fd_cloexec(tty->slave, true); + if (ret < 0) +- SYSWARN("Failed to set FD_CLOEXEC flag on pts fd %d of tty device \"%s\"", +- tty->pts, tty->name); ++ SYSWARN("Failed to set FD_CLOEXEC flag on slave fd %d of tty device \"%s\"", ++ tty->slave, tty->name); + + tty->busy = -1; + } + + INFO("Finished creating %zu tty devices", ttys->max); +- move_ptr(ttys); ++ ttys->tty = move_ptr(tty_new); + return 0; + } + +@@ -964,8 +991,8 @@ void lxc_delete_tty(struct lxc_tty_info *ttys) + + for (int i = 0; i < ttys->max; i++) { + struct lxc_terminal_info *tty = &ttys->tty[i]; +- close_prot_errno_disarm(tty->ptmx); +- close_prot_errno_disarm(tty->pts); ++ close_prot_errno_disarm(tty->master); ++ close_prot_errno_disarm(tty->slave); + } + + free_disarm(ttys->tty); +@@ -986,15 +1013,15 @@ static int lxc_send_ttys_to_parent(struct lxc_handler *handler) + int ttyfds[2]; + struct lxc_terminal_info *tty = &ttys->tty[i]; + +- ttyfds[0] = tty->ptmx; +- ttyfds[1] = tty->pts; ++ ttyfds[0] = tty->master; ++ ttyfds[1] = tty->slave; + + ret = lxc_abstract_unix_send_fds(sock, ttyfds, 2, NULL, 0); + if (ret < 0) + break; + +- TRACE("Sent tty \"%s\" with ptmx fd %d and pts fd %d to parent", +- tty->name, tty->ptmx, tty->pts); ++ TRACE("Sent tty \"%s\" with master fd %d and slave fd %d to parent", ++ tty->name, tty->master, tty->slave); + } + + if (ret < 0) +@@ -1047,8 +1074,13 @@ on_error: + /* Just create a path for /dev under $lxcpath/$name and in rootfs If we hit an + * error, log it but don't fail yet. + */ ++#ifdef HAVE_ISULAD ++static int mount_autodev(const char *name, const struct lxc_rootfs *rootfs, ++ int autodevtmpfssize, const char *lxcpath, char *systemd) ++#else + static int mount_autodev(const char *name, const struct lxc_rootfs *rootfs, + int autodevtmpfssize, const char *lxcpath) ++#endif + { + __do_free char *path = NULL; + int ret; +@@ -1061,6 +1093,7 @@ static int mount_autodev(const char *name, const struct lxc_rootfs *rootfs, + /* $(rootfs->mount) + "/dev/pts" + '\0' */ + clen = (rootfs->path ? strlen(rootfs->mount) : 0) + 9; + path = must_realloc(NULL, clen); ++ + sprintf(mount_options, "size=%d,mode=755", (autodevtmpfssize != 0) ? autodevtmpfssize : 500000); + DEBUG("Using mount options: %s", mount_options); + +@@ -1076,6 +1109,23 @@ static int mount_autodev(const char *name, const struct lxc_rootfs *rootfs, + goto reset_umask; + } + ++#ifdef HAVE_ISULAD ++ if (systemd != NULL && !strcmp(systemd, "true")) { ++ ret = mount(path, path, "", MS_BIND, NULL); ++ if (ret < 0) { ++ SYSERROR("Failed to bind mount path \"%s\"", path); ++ goto reset_umask; ++ } ++ } else { ++ ret = safe_mount("none", path, "tmpfs", 0, mount_options, ++ rootfs->path ? rootfs->mount : NULL); ++ if (ret < 0) { ++ SYSERROR("Failed to mount tmpfs on \"%s\"", path); ++ goto reset_umask; ++ } ++ TRACE("Mounted tmpfs on \"%s\"", path); ++ } ++#else + ret = safe_mount("none", path, "tmpfs", 0, mount_options, + rootfs->path ? rootfs->mount : NULL ); + if (ret < 0) { +@@ -1083,6 +1133,7 @@ static int mount_autodev(const char *name, const struct lxc_rootfs *rootfs, + goto reset_umask; + } + TRACE("Mounted tmpfs on \"%s\"", path); ++#endif + + ret = snprintf(path, clen, "%s/dev/pts", rootfs->path ? rootfs->mount : ""); + if (ret < 0 || (size_t)ret >= clen) { +@@ -1223,16 +1274,118 @@ static int lxc_fill_autodev(const struct lxc_rootfs *rootfs) + return 0; + } + ++static void null_endofword(char *word) ++{ ++ while (*word && *word != ' ' && *word != '\t') ++ word++; ++ *word = '\0'; ++} ++ ++/* skip @nfields spaces in @src */ ++static char *get_field(char *src, int nfields) ++{ ++ int i; ++ char *p = src; ++ ++ for (i = 0; i < nfields; i++) { ++ while (*p && *p != ' ' && *p != '\t') ++ p++; ++ ++ if (!*p) ++ break; ++ ++ p++; ++ } ++ ++ return p; ++} ++ ++#ifdef HAVE_ISULAD ++static int rootfs_parent_mount_private(char *rootfs) ++{ ++ /* walk /proc/self/mountinfo and change parent of rootfs to private */ ++ FILE *f = fopen("/proc/self/mountinfo", "r"); ++ char *line = NULL; ++ char *parent = NULL, *options = NULL; ++ size_t len = 0; ++ int ret = 0; ++ ++ if (!f) { ++ SYSERROR("Failed to open /proc/self/mountinfo to make parent of rootfs to private"); ++ return -1; ++ } ++ ++ while (getline(&line, &len, f) != -1) { ++ char *target = NULL; ++ char *opts = NULL; ++ char *tmptarget = NULL; ++ target = get_field(line, 4); ++ if (!target) ++ continue; ++ tmptarget = safe_strdup(target); ++ null_endofword(tmptarget); ++ if (!strstr(rootfs, tmptarget)) { ++ free(tmptarget); ++ continue; ++ } ++ if (!parent || strlen(tmptarget) > strlen(parent)) { ++ free(parent); ++ parent = tmptarget; ++ } else { ++ free(tmptarget); ++ continue; ++ } ++ opts = get_field(target, 2); ++ if (!opts) ++ continue; ++ null_endofword(opts); ++ free(options); ++ options = safe_strdup(opts); ++ } ++ ++ if (!parent || !options) { ++ ERROR("Could not find parent mount of %s", rootfs); ++ ret = -1; ++ } else { ++ if (strstr(options, "shared")) { ++ if (mount(NULL, parent, NULL, MS_PRIVATE, NULL)) { ++ SYSERROR("Failed to make %s private", parent); ++ ret = -1; ++ } ++ DEBUG("Mounted parent %s of rootfs %s to private", parent, rootfs); ++ } ++ } ++ free(parent); ++ free(options); ++ fclose(f); ++ free(line); ++ return ret; ++} ++#endif ++ + static int lxc_mount_rootfs(struct lxc_conf *conf) + { + int ret; + struct lxc_storage *bdev; +- const struct lxc_rootfs *rootfs = &conf->rootfs; ++ struct lxc_rootfs *rootfs = &conf->rootfs; ++ ++#ifdef HAVE_ISULAD ++ unsigned long flags, mntflags, pflags; ++ char *mntdata = NULL; ++#endif + + if (!rootfs->path) { + ret = mount("", "/", NULL, MS_SLAVE | MS_REC, 0); + if (ret < 0) +- return log_error_errno(-1, errno, "Failed to recursively turn root mount tree into dependent mount"); ++ return log_error_errno(-1, errno, "Failed to remount \"/\" MS_REC | MS_SLAVE"); ++#ifdef HAVE_ISULAD ++ if (!access(rootfs->mount, F_OK)) { ++ rootfs->path = safe_strdup("/"); ++ if (mount("/", rootfs->mount, NULL, MS_BIND, 0)) { ++ return log_error_errno(-1, errno, "Failed to mount \"/\" to %s", rootfs->mount); ++ } ++ } ++#endif + + return 0; + } +@@ -1242,6 +1395,44 @@ static int lxc_mount_rootfs(struct lxc_conf *conf) + return log_error_errno(-1, errno, "Failed to access to \"%s\". Check it is present", + rootfs->mount); + ++#ifdef HAVE_ISULAD ++ // Support mount propagations of rootfs ++ // Get rootfs mnt propagation options, such as slave or shared ++ if (parse_mntopts(conf->rootfs.options, &mntflags, &pflags, &mntdata) < 0) { ++ free(mntdata); ++ return -1; ++ } ++ free(mntdata); ++ ++ flags = MS_SLAVE | MS_REC; ++ if (pflags) ++ flags = pflags; ++ ++ /* Mount propagation inside container can not greater than host. ++ * So we must change propagation of root according to flags, default is rslave. ++ * That means shared propagation inside container is disabled by default. ++ */ ++ ret = mount("", "/", NULL, flags, NULL); ++ if (ret < 0) { ++ return log_error_errno(-1, errno, "Failed to make / to propagation flags %lu.", flags); ++ } ++ ++ /* Make parent mount private to make sure following bind mount does ++ * not propagate in other namespaces. Also it will help with kernel ++ * check pass in pivot_root. (IS_SHARED(new_mnt->mnt_parent)) ++ */ ++ ret = rootfs_parent_mount_private(conf->rootfs.mount); ++ if (ret != 0) { ++ return log_error(-1, "Failed to make parent of rootfs %s to private.", conf->rootfs.mount); ++ } ++ ++ ret = mount(conf->rootfs.mount, conf->rootfs.mount, "bind", MS_BIND | MS_REC, NULL); ++ if (ret < 0) { ++ SYSERROR("Failed to mount rootfs %s", conf->rootfs.mount); ++ return -1; ++ } ++#endif ++ + bdev = storage_init(conf); + if (!bdev) + return log_error(-1, "Failed to mount rootfs \"%s\" onto \"%s\" with options \"%s\"", +@@ -1262,6 +1453,158 @@ static int lxc_mount_rootfs(struct lxc_conf *conf) + return 0; + } + ++#ifdef HAVE_ISULAD ++// maskPath masks the top of the specified path inside a container to avoid ++// security issues from processes reading information from non-namespace aware ++// mounts ( proc/kcore ). ++static bool mask_path(const char *path) ++{ ++ int ret; ++ ++ if (!path) ++ return true; ++ ++ ret = mount("/dev/null", path, "", MS_BIND, ""); ++ if (ret < 0 && errno != ENOENT) { ++ if (errno == ENOTDIR) { ++ ret = mount("tmpfs", path, "tmpfs", MS_RDONLY, ""); ++ if (ret < 0) ++ goto error; ++ return true; ++ } ++ goto error; ++ } ++ return true; ++ ++error: ++ SYSERROR("Failed to mask path \"%s\": %s", path, strerror(errno)); ++ return false; ++} ++ ++#ifdef HAVE_ISULAD ++static bool remount_readwrite(const char *path) ++{ ++ int ret, i; ++ ++ if (!path) ++ return true; ++ ++ for (i = 0; i < 5; i++) { ++ ret = mount("", path, "", MS_REMOUNT, ""); ++ if (ret < 0 && errno != ENOENT) { ++ if (errno == EINVAL) { ++ // Probably not a mountpoint, use bind-mount ++ ret = mount(path, path, "", MS_BIND, ""); ++ if (ret < 0) ++ goto on_error; ++ ret = mount(path, path, "", MS_BIND | MS_REMOUNT | MS_REC | \ ++ MS_NOEXEC | MS_NOSUID | MS_NODEV, ""); ++ if (ret < 0) ++ goto on_error; ++ } else if (errno == EBUSY) { ++ DEBUG("Try to mount \"%s\" to readonly after 100ms.", path); ++ usleep(100 * 1000); ++ continue; ++ } else { ++ goto on_error; ++ } ++ } ++ return true; ++ } ++ ++on_error: ++ SYSERROR("Unable to mount \"%s\" to readwrite", path); ++ return false; ++} ++ ++static int remount_proc_sys_mount_entries(struct lxc_list *mount_list, bool lsm_aa_allow_nesting) ++{ ++ char buf[4096]; ++ FILE *file; ++ struct mntent mntent; ++ ++ file = make_anonymous_mount_file(mount_list, lsm_aa_allow_nesting); ++ if (!file) ++ return -1; ++ ++ while (getmntent_r(file, &mntent, buf, sizeof(buf))) { ++ if (strstr(mntent.mnt_dir, "proc/sys") == NULL) { ++ continue; ++ } ++ ++ if (!remount_readwrite((const char*)mntent.mnt_dir)) { ++ fclose(file); ++ return -1; ++ } ++ } ++ ++ fclose(file); ++ return 0; ++} ++#endif ++ ++// remount_readonly will bind over the top of an existing path and ensure that it is read-only. ++static bool remount_readonly(const char *path) ++{ ++ int ret, i; ++ ++ if (!path) ++ return true; ++ ++ for (i = 0; i < 5; i++) { ++ ret = mount("", path, "", MS_REMOUNT | MS_RDONLY, ""); ++ if (ret < 0 && errno != ENOENT) { ++ if (errno == EINVAL) { ++ // Probably not a mountpoint, use bind-mount ++ ret = mount(path, path, "", MS_BIND, ""); ++ if (ret < 0) ++ goto on_error; ++ ret = mount(path, path, "", MS_BIND | MS_REMOUNT | MS_RDONLY | MS_REC | \ ++ MS_NOEXEC | MS_NOSUID | MS_NODEV, ""); ++ if (ret < 0) ++ goto on_error; ++ } else if (errno == EBUSY) { ++ DEBUG("Try to mount \"%s\" to readonly after 100ms.", path); ++ usleep(100 * 1000); ++ continue; ++ } else { ++ goto on_error; ++ } ++ } ++ return true; ++ } ++ ++on_error: ++ SYSERROR("Unable to mount \"%s\" to readonly", path); ++ return false; ++} ++ ++// isulad: setup rootfs masked paths ++static int setup_rootfs_maskedpaths(struct lxc_list *maskedpaths) ++{ ++ struct lxc_list *it; ++ ++ lxc_list_for_each(it, maskedpaths) { ++ if (!mask_path((char *)it->elem)) ++ return -1; ++ } ++ ++ return 0; ++} ++// isulad: setup rootfs ro paths ++static int setup_rootfs_ropaths(struct lxc_list *ropaths) ++{ ++ struct lxc_list *it; ++ ++ lxc_list_for_each(it, ropaths) { ++ if (!remount_readonly((char *)it->elem)) ++ return -1; ++ } ++ ++ return 0; ++} ++#endif ++ + int lxc_chroot(const struct lxc_rootfs *rootfs) + { + __do_free char *nroot = NULL; +@@ -1409,12 +1752,12 @@ static int lxc_pivot_root(const char *rootfs) + if (ret < 0) + return log_error_errno(-1, errno, "Failed to enter old root directory"); + +- /* Make oldroot a depedent mount to make sure our umounts don't propagate to the ++ /* Make oldroot rslave to make sure our umounts don't propagate to the + * host. + */ + ret = mount("", ".", "", MS_SLAVE | MS_REC, NULL); + if (ret < 0) +- return log_error_errno(-1, errno, "Failed to recursively turn old root mount tree into dependent mount"); ++ return log_error_errno(-1, errno, "Failed to make oldroot rslave"); + + ret = umount2(".", MNT_DETACH); + if (ret < 0) +@@ -1575,28 +1918,21 @@ static int setup_personality(int persona) + return 0; + } + +-static inline bool wants_console(const struct lxc_terminal *terminal) +-{ +- return !terminal->path || strcmp(terminal->path, "none"); +-} +- + static int lxc_setup_dev_console(const struct lxc_rootfs *rootfs, +- const struct lxc_terminal *console, +- int pts_mnt_fd) ++ const struct lxc_terminal *console) + { + int ret; + char path[PATH_MAX]; + char *rootfs_path = rootfs->path ? rootfs->mount : ""; + +- if (!wants_console(console)) ++ if (console->path && !strcmp(console->path, "none")) + return 0; + + ret = snprintf(path, sizeof(path), "%s/dev/console", rootfs_path); + if (ret < 0 || (size_t)ret >= sizeof(path)) + return -1; + +- /* +- * When we are asked to setup a console we remove any previous ++ /* When we are asked to setup a console we remove any previous + * /dev/console bind-mounts. + */ + if (file_exists(path)) { +@@ -1607,49 +1943,39 @@ static int lxc_setup_dev_console(const struct lxc_rootfs *rootfs, + DEBUG("Cleared all (%d) mounts from \"%s\"", ret, path); + } + +- /* +- * For unprivileged containers autodev or automounts will already have ++ /* For unprivileged containers autodev or automounts will already have + * taken care of creating /dev/console. + */ + ret = mknod(path, S_IFREG | 0000, 0); + if (ret < 0 && errno != EEXIST) + return log_error_errno(-errno, errno, "Failed to create console"); + +- ret = fchmod(console->pts, S_IXUSR | S_IXGRP); ++#ifdef HAVE_ISULAD ++ if (console->slave > 0) { ++#endif ++ ret = fchmod(console->slave, S_IXUSR | S_IXGRP); + if (ret < 0) + return log_error_errno(-errno, errno, "Failed to set mode \"0%o\" to \"%s\"", S_IXUSR | S_IXGRP, console->name); + +- if (pts_mnt_fd >= 0) { +- ret = move_mount(pts_mnt_fd, "", -EBADF, path, MOVE_MOUNT_F_EMPTY_PATH); +- if (!ret) { +- DEBUG("Moved mount \"%s\" onto \"%s\"", console->name, path); +- goto finish; +- } +- +- if (ret && errno != ENOSYS) +- return log_error_errno(-1, errno, +- "Failed to mount %d(%s) on \"%s\"", +- pts_mnt_fd, console->name, path); +- } +- + ret = safe_mount(console->name, path, "none", MS_BIND, 0, rootfs_path); + if (ret < 0) +- return log_error_errno(-1, errno, "Failed to mount %d(%s) on \"%s\"", pts_mnt_fd, console->name, path); +- +-finish: +- DEBUG("Mounted pts device %d(%s) onto \"%s\"", pts_mnt_fd, console->name, path); ++ return log_error_errno(-1, errno, "Failed to mount \"%s\" on \"%s\"", console->name, path); ++#ifdef HAVE_ISULAD ++ } ++#endif ++ DEBUG("Mounted pts device \"%s\" onto \"%s\"", console->name, path); + return 0; + } + + static int lxc_setup_ttydir_console(const struct lxc_rootfs *rootfs, + const struct lxc_terminal *console, +- char *ttydir, int pts_mnt_fd) ++ char *ttydir) + { + int ret; + char path[PATH_MAX], lxcpath[PATH_MAX]; + char *rootfs_path = rootfs->path ? rootfs->mount : ""; + +- if (!wants_console(console)) ++ if (console->path && !strcmp(console->path, "none")) + return 0; + + /* create rootfs/dev/ directory */ +@@ -1686,30 +2012,22 @@ static int lxc_setup_ttydir_console(const struct lxc_rootfs *rootfs, + if (ret < 0 && errno != EEXIST) + return log_error_errno(-errno, errno, "Failed to create console"); + +- ret = fchmod(console->pts, S_IXUSR | S_IXGRP); ++#ifdef HAVE_ISULAD ++ if (console->slave > 0) { ++#endif ++ ret = fchmod(console->slave, S_IXUSR | S_IXGRP); + if (ret < 0) + return log_error_errno(-errno, errno, "Failed to set mode \"0%o\" to \"%s\"", S_IXUSR | S_IXGRP, console->name); + + /* bind mount console->name to '/dev//console' */ +- if (pts_mnt_fd >= 0) { +- ret = move_mount(pts_mnt_fd, "", -EBADF, lxcpath, MOVE_MOUNT_F_EMPTY_PATH); +- if (!ret) { +- DEBUG("Moved mount \"%s\" onto \"%s\"", console->name, lxcpath); +- goto finish; +- } +- +- if (ret && errno != ENOSYS) +- return log_error_errno(-1, errno, +- "Failed to mount %d(%s) on \"%s\"", +- pts_mnt_fd, console->name, lxcpath); +- } +- + ret = safe_mount(console->name, lxcpath, "none", MS_BIND, 0, rootfs_path); + if (ret < 0) +- return log_error_errno(-1, errno, "Failed to mount %d(%s) on \"%s\"", pts_mnt_fd, console->name, lxcpath); ++ return log_error_errno(-1, errno, "Failed to mount \"%s\" on \"%s\"", console->name, lxcpath); + DEBUG("Mounted \"%s\" onto \"%s\"", console->name, lxcpath); ++#ifdef HAVE_ISULAD ++ } ++#endif + +-finish: + /* bind mount '/dev//console' to '/dev/console' */ + ret = safe_mount(lxcpath, path, "none", MS_BIND, 0, rootfs_path); + if (ret < 0) +@@ -1721,16 +2039,51 @@ finish: + } + + static int lxc_setup_console(const struct lxc_rootfs *rootfs, +- const struct lxc_terminal *console, char *ttydir, +- int pts_mnt_fd) ++ const struct lxc_terminal *console, char *ttydir) + { + + if (!ttydir) +- return lxc_setup_dev_console(rootfs, console, pts_mnt_fd); ++ return lxc_setup_dev_console(rootfs, console); + +- return lxc_setup_ttydir_console(rootfs, console, ttydir, pts_mnt_fd); ++ return lxc_setup_ttydir_console(rootfs, console, ttydir); + } ++#ifdef HAVE_ISULAD ++static void parse_mntopt(char *opt, unsigned long *mflags, unsigned long *pflags, char **data, size_t size) ++{ ++ struct mount_opt *mo; ++ ++ /* If opt is found in mount_opt, set or clear flags. ++ * Otherwise append it to data. */ ++ ++ for (mo = &mount_opt[0]; mo->name != NULL; mo++) { ++ if (strncmp(opt, mo->name, strlen(mo->name)) == 0) { ++ if (mo->clear) ++ *mflags &= ~mo->flag; ++ else ++ *mflags |= mo->flag; ++ return; ++ } ++ } ++ ++ /* If opt is found in propagation_opt, set or clear flags. */ ++ for (mo = &propagation_opt[0]; mo->name != NULL; mo++) { ++ if (strncmp(opt, mo->name, strlen(mo->name)) != 0) ++ continue; ++ ++ if (mo->clear) ++ *pflags &= ~mo->flag; ++ else ++ *pflags |= mo->flag; ++ ++ return; ++ } ++ ++ if (strlen(*data)) ++ (void)strlcat(*data, ",", size); + ++ (void)strlcat(*data, opt, size); ++} ++#else + static int parse_mntopt(char *opt, unsigned long *flags, char **data, size_t size) + { + ssize_t ret; +@@ -1767,7 +2120,43 @@ static int parse_mntopt(char *opt, unsigned long *flags, char **data, size_t siz + + return 0; + } ++#endif ++ ++#ifdef HAVE_ISULAD ++int parse_mntopts(const char *mntopts, unsigned long *mntflags, unsigned long *pflags, char **mntdata) ++{ ++ char *data, *p, *s; ++ size_t size; ++ ++ *mntdata = NULL; ++ *mntflags = 0L; ++ *pflags = 0L; + ++ if (!mntopts) ++ return 0; ++ ++ s = safe_strdup(mntopts); ++ ++ size = strlen(s) + 1; ++ data = malloc(size); ++ if (!data) { ++ free(s); ++ return -1; ++ } ++ *data = 0; ++ ++ lxc_iterate_parts(p, s, ",") ++ parse_mntopt(p, mntflags, pflags, &data, size); ++ ++ if (*data) ++ *mntdata = data; ++ else ++ free(data); ++ free(s); ++ ++ return 0; ++} ++#else + int parse_mntopts(const char *mntopts, unsigned long *mntflags, char **mntdata) + { + __do_free char *mntopts_new = NULL, *mntopts_dup = NULL; +@@ -1798,6 +2187,7 @@ int parse_mntopts(const char *mntopts, unsigned long *mntflags, char **mntdata) + + return 0; + } ++#endif + + static void parse_propagationopt(char *opt, unsigned long *flags) + { +@@ -1836,43 +2226,17 @@ int parse_propagationopts(const char *mntopts, unsigned long *pflags) + return 0; + } + +-static void null_endofword(char *word) ++static int mount_entry(const char *fsname, const char *target, ++ const char *fstype, unsigned long mountflags, ++ unsigned long pflags, const char *data, bool optional, ++ bool dev, bool relative, const char *rootfs) + { +- while (*word && *word != ' ' && *word != '\t') +- word++; +- *word = '\0'; +-} +- +-/* skip @nfields spaces in @src */ +-static char *get_field(char *src, int nfields) +-{ +- int i; +- char *p = src; +- +- for (i = 0; i < nfields; i++) { +- while (*p && *p != ' ' && *p != '\t') +- p++; +- +- if (!*p) +- break; +- +- p++; +- } +- +- return p; +-} +- +-static int mount_entry(const char *fsname, const char *target, +- const char *fstype, unsigned long mountflags, +- unsigned long pflags, const char *data, bool optional, +- bool dev, bool relative, const char *rootfs) +-{ +- int ret; +- char srcbuf[PATH_MAX]; +- const char *srcpath = fsname; +-#ifdef HAVE_STATVFS +- struct statvfs sb; +-#endif ++ int ret; ++ char srcbuf[PATH_MAX]; ++ const char *srcpath = fsname; ++#ifdef HAVE_STATVFS ++ struct statvfs sb; ++#endif + + if (relative) { + ret = snprintf(srcbuf, sizeof(srcbuf), "%s/%s", rootfs ? rootfs : "/", fsname ? fsname : ""); +@@ -2010,8 +2374,15 @@ static int mount_entry_create_dir_file(const struct mntent *mntent, + + if (hasmntopt(mntent, "create=dir")) { + ret = mkdir_p(path, 0755); ++#ifdef HAVE_ISULAD ++ if (ret < 0 && errno != EEXIST) { ++ lxc_write_error_message(rootfs->errfd, "%s:%d: mkdir %s: %s.", __FILE__, __LINE__, path, strerror(errno)); ++ return log_error_errno(-1, errno, "Failed to create directory \"%s\"", path); ++ } ++#else + if (ret < 0 && errno != EEXIST) + return log_error_errno(-1, errno, "Failed to create directory \"%s\"", path); ++#endif + } + + if (!hasmntopt(mntent, "create=file")) +@@ -2028,16 +2399,184 @@ static int mount_entry_create_dir_file(const struct mntent *mntent, + p2 = dirname(p1); + + ret = mkdir_p(p2, 0755); ++#ifdef HAVE_ISULAD ++ if (ret < 0 && errno != EEXIST) { ++ lxc_write_error_message(rootfs->errfd, "%s:%d: mkdir %s: %s.", __FILE__, __LINE__, path, strerror(errno)); ++ return log_error_errno(-1, errno, "Failed to create directory \"%s\"", path); ++ } ++#else + if (ret < 0 && errno != EEXIST) + return log_error_errno(-1, errno, "Failed to create directory \"%s\"", path); ++#endif + + ret = mknod(path, S_IFREG | 0000, 0); ++#ifdef HAVE_ISULAD ++ if (ret < 0 && errno != EEXIST) { ++ lxc_write_error_message(rootfs->errfd, "%s:%d: open %s: %s.", __FILE__, __LINE__, path, strerror(errno)); ++ return -errno; ++ } ++#else + if (ret < 0 && errno != EEXIST) + return -errno; ++#endif ++ ++ return 0; ++} ++ ++#ifdef HAVE_ISULAD ++static int mount_entry_with_loop_dev(const char *src, const char *dest, const char *fstype, ++ char *mnt_opts, const char *rootfs) ++{ ++ int srcfd = -1, destfd, ret, saved_errno; ++ char srcbuf[50], destbuf[50]; // only needs enough for /proc/self/fd/ ++ const char *mntsrc = src; ++ int max_retry = 5; ++ struct lxc_storage loop; ++ ++ if (!rootfs) ++ rootfs = ""; ++ ++ /* todo - allow symlinks for relative paths if 'allowsymlinks' option is passed */ ++ if (src && src[0] != '/') { ++ INFO("this is a relative mount"); ++ srcfd = open_without_symlink(src, NULL); ++ if (srcfd < 0) ++ return srcfd; ++ ret = snprintf(srcbuf, sizeof(srcbuf), "/proc/self/fd/%d", srcfd); ++ if (ret < 0 || ret > sizeof(srcbuf)) { ++ close(srcfd); ++ ERROR("Failed to print string"); ++ return -EINVAL; ++ } ++ mntsrc = srcbuf; ++ } ++ ++ destfd = open_without_symlink(dest, rootfs); ++ if (destfd < 0) { ++ if (srcfd != -1) { ++ saved_errno = errno; ++ close(srcfd); ++ errno = saved_errno; ++ } ++ return destfd; ++ } ++ ++ ret = snprintf(destbuf, sizeof(destbuf), "/proc/self/fd/%d", destfd); ++ if (ret < 0 || ret > sizeof(destbuf)) { ++ if (srcfd != -1) ++ close(srcfd); ++ close(destfd); ++ ERROR("Out of memory"); ++ return -EINVAL; ++ } ++ ++retry: ++ loop.src = (char *)mntsrc; ++ loop.dest = destbuf; ++ loop.mntopts = mnt_opts; ++ loop.type = "loop"; ++ loop.lofd = -1; ++ ret = loop_mount(&loop); ++ if (ret < 0) { ++ /* If loop is used by other program, mount may fail. So ++ * we do retry to ensure mount ok */ ++ if (max_retry > 0) { ++ max_retry--; ++ DEBUG("mount entry with loop dev failed, retry mount." ++ "retry count left %d", max_retry); ++ goto retry; ++ } ++ } ++ if (loop.lofd != -1) ++ close(loop.lofd); ++ if (srcfd != -1) ++ close(srcfd); ++ close(destfd); ++ if (ret < 0) { ++ SYSERROR("Failed to mount %s onto %s", src, dest); ++ return ret; ++ } + + return 0; + } + ++/* isulad: checkMountDestination checks to ensure that the mount destination is not over the top of /proc. ++ * dest is required to be an abs path and have any symlinks resolved before calling this function. */ ++static int check_mount_destination(const char *rootfs, const char *dest) ++{ ++ const char *invalid_destinations[] = { ++ "/proc", ++ NULL ++ }; ++ // White list, it should be sub directories of invalid destinations ++ const char *valid_destinations[] = { ++ // These entries can be bind mounted by files emulated by fuse, ++ // so commands like top, free displays stats in container. ++ "/proc/cpuinfo", ++ "/proc/diskstats", ++ "/proc/meminfo", ++ "/proc/stat", ++ "/proc/swaps", ++ "/proc/uptime", ++ "/proc/net/dev", ++ NULL ++ }; ++ const char **valid = NULL; ++ const char **invalid = NULL; ++ ++ for(valid = valid_destinations; *valid != NULL; valid++) { ++ char *fullpath = NULL; ++ char *relpath = NULL; ++ const char *parts[3] = { ++ rootfs, ++ *valid, ++ NULL ++ }; ++ fullpath = lxc_string_join("/", parts, false); ++ if (!fullpath) { ++ ERROR("Out of memory"); ++ return -1; ++ } ++ relpath = path_relative(fullpath, dest); ++ free(fullpath); ++ if (!relpath) ++ return -1; ++ if (!strcmp(relpath, ".")) { ++ free(relpath); ++ return 0; ++ } ++ free(relpath); ++ } ++ ++ for(invalid = invalid_destinations; *invalid != NULL; invalid++) { ++ char *fullpath = NULL; ++ char *relpath = NULL; ++ const char *parts[3] = { ++ rootfs, ++ *invalid, ++ NULL ++ }; ++ fullpath = lxc_string_join("/", parts, false); ++ if (!fullpath) { ++ ERROR("Out of memory"); ++ return -1; ++ } ++ relpath = path_relative(fullpath, dest); ++ free(fullpath); ++ if (!relpath) ++ return -1; ++ if (!strcmp(relpath, ".") || strncmp(relpath, "..", 2)) { ++ ERROR("%s cannot be mounted because it is located inside %s", dest, *invalid); ++ free(relpath); ++ return -1; ++ } ++ free(relpath); ++ } ++ ++ return 0; ++} ++#endif ++ + /* rootfs, lxc_name, and lxc_path can be NULL when the container is created + * without a rootfs. */ + static inline int mount_entry_on_generic(struct mntent *mntent, +@@ -2051,6 +2590,11 @@ static inline int mount_entry_on_generic(struct mntent *mntent, + char *rootfs_path = NULL; + int ret; + bool dev, optional, relative; ++ const char *dest = path; ++ ++#ifdef HAVE_ISULAD ++ char *rpath = NULL; ++#endif + + optional = hasmntopt(mntent, "optional") != NULL; + dev = hasmntopt(mntent, "dev") != NULL; +@@ -2059,9 +2603,38 @@ static inline int mount_entry_on_generic(struct mntent *mntent, + if (rootfs && rootfs->path) + rootfs_path = rootfs->mount; + +- ret = mount_entry_create_dir_file(mntent, path, rootfs, lxc_name, ++#ifdef HAVE_ISULAD ++ // isulad: ensure that the destination of the bind mount is resolved of symlinks at mount time because ++ // any previous mounts can invalidate the next mount's destination. ++ // this can happen when a user specifies mounts within other mounts to cause breakouts or other ++ // evil stuff to try to escape the container's rootfs. ++ if (rootfs_path) { ++ rpath = follow_symlink_in_scope(path, rootfs_path); ++ if (!rpath) { ++ ERROR("Failed to get real path of '%s' in scope '%s'.", path, rootfs_path); ++ lxc_write_error_message(rootfs->errfd, "%s:%d: failed to get real path of '%s' in scope '%s'.", ++ __FILE__, __LINE__, path, rootfs_path); ++ return -1; ++ } ++ dest = rpath; ++ ++ ret = check_mount_destination(rootfs_path, dest); ++ if (ret) { ++ ERROR("Mount destination is invalid: '%s'", dest); ++ lxc_write_error_message(rootfs->errfd, "%s:%d: mount destination is invalid: '%s'.", ++ __FILE__, __LINE__, dest); ++ free(rpath); ++ return -1; ++ } ++ } ++#endif ++ ++ ret = mount_entry_create_dir_file(mntent, dest, rootfs, lxc_name, + lxc_path); + if (ret < 0) { ++#ifdef HAVE_ISULAD ++ free(rpath); ++#endif + if (optional) + return 0; + +@@ -2069,6 +2642,29 @@ static inline int mount_entry_on_generic(struct mntent *mntent, + } + cull_mntent_opt(mntent); + ++#ifdef HAVE_ISULAD ++ ret = parse_mntopts(mntent->mnt_opts, &mntflags, &pflags, &mntdata); ++ if (ret < 0) { ++ free(rpath); ++ return -1; ++ } ++ ++ // support squashfs ++ if (strcmp(mntent->mnt_type, "squashfs") == 0) { ++ ret = mount_entry_with_loop_dev(mntent->mnt_fsname, dest, mntent->mnt_type, ++ mntent->mnt_opts, rootfs_path); ++ } else { ++ ret = mount_entry(mntent->mnt_fsname, dest, mntent->mnt_type, mntflags, ++ pflags, mntdata, optional, dev, relative, rootfs_path); ++ } ++ ++ if (ret < 0) { ++ lxc_write_error_message(rootfs->errfd, "%s:%d: failed to mount %s as type %s.", ++ __FILE__, __LINE__, mntent->mnt_fsname, mntent->mnt_type); ++ } ++ ++ free(rpath); ++#else + ret = parse_propagationopts(mntent->mnt_opts, &pflags); + if (ret < 0) + return -1; +@@ -2077,8 +2673,9 @@ static inline int mount_entry_on_generic(struct mntent *mntent, + if (ret < 0) + return ret; + +- ret = mount_entry(mntent->mnt_fsname, path, mntent->mnt_type, mntflags, +- pflags, mntdata, optional, dev, relative, rootfs_path); ++ ret = mount_entry(mntent->mnt_fsname, dest, mntent->mnt_type, mntflags, ++ pflags, mntdata, optional, dev, relative, rootfs_path); ++#endif + + return ret; + } +@@ -2169,6 +2766,28 @@ static int mount_file_entries(const struct lxc_conf *conf, + while (getmntent_r(file, &mntent, buf, sizeof(buf))) { + int ret; + ++#ifdef HAVE_ISULAD ++ //isulad, system contaienr, skip "proc/sys/xxx" path ++ if (conf->systemd != NULL && strcmp(conf->systemd, "true") == 0) { ++ if (strstr(mntent.mnt_dir, "proc/sys") != NULL) { ++ continue; ++ } ++ } ++ ++ /* Note: Workaround for volume file path with space*/ ++ mntent.mnt_fsname = lxc_string_replace(SPACE_MAGIC_STR, " ", mntent.mnt_fsname); ++ if(!mntent.mnt_fsname) { ++ SYSERROR("memory allocation error"); ++ return -1; ++ } ++ mntent.mnt_dir = lxc_string_replace(SPACE_MAGIC_STR, " ", mntent.mnt_dir); ++ if(!mntent.mnt_dir) { ++ SYSERROR("memory allocation error"); ++ free(mntent.mnt_fsname); ++ return -1; ++ } ++#endif ++ + if (!rootfs->path) + ret = mount_entry_on_systemfs(&mntent); + else if (mntent.mnt_dir[0] != '/') +@@ -2177,6 +2796,14 @@ static int mount_file_entries(const struct lxc_conf *conf, + else + ret = mount_entry_on_absolute_rootfs(&mntent, rootfs, + lxc_name, lxc_path); ++ ++#ifdef HAVE_ISULAD ++ free(mntent.mnt_fsname); ++ mntent.mnt_fsname = NULL; ++ free(mntent.mnt_dir); ++ mntent.mnt_dir = NULL; ++#endif ++ + if (ret < 0) + return -1; + } +@@ -2299,6 +2926,51 @@ static int setup_mount_entries(const struct lxc_conf *conf, + return mount_file_entries(conf, rootfs, f, lxc_name, lxc_path); + } + ++#ifdef HAVE_ISULAD ++static bool have_dev_bind_mount_entry(FILE *file) ++{ ++ bool have_bind_dev = false; ++ char buf[PATH_MAX]; ++ struct mntent mntent; ++ ++ while (getmntent_r(file, &mntent, buf, sizeof(buf))) { ++ mntent.mnt_dir = lxc_string_replace(SPACE_MAGIC_STR, " ", mntent.mnt_dir); ++ if(!mntent.mnt_dir) { ++ SYSERROR("memory allocation error"); ++ continue; ++ } ++ ++ if (strcmp(mntent.mnt_dir, "dev") == 0 && strcmp(mntent.mnt_type, "bind") == 0) { ++ have_bind_dev = true; ++ } ++ ++ free(mntent.mnt_dir); ++ mntent.mnt_dir = NULL; ++ ++ if (have_bind_dev) ++ return true; ++ } ++ ++ return false; ++} ++ ++// returns true if /dev needs to be set up. ++static bool need_setup_dev(const struct lxc_conf *conf, struct lxc_list *mount) ++{ ++ __do_fclose FILE *f = NULL; ++ ++ f = make_anonymous_mount_file(mount, conf->lsm_aa_allow_nesting); ++ if (!f) ++ return true; ++ ++ if (have_dev_bind_mount_entry(f)) { ++ return false; ++ } else { ++ return true; ++ } ++} ++#endif ++ + static int parse_cap(const char *cap) + { + size_t i; +@@ -2395,6 +3067,16 @@ static int dropcaps_except(struct lxc_list *caps) + lxc_list_for_each (iterator, caps) { + keep_entry = iterator->elem; + ++#ifdef HAVE_ISULAD ++ /* Do not keep any cap*/ ++ if (strcmp(keep_entry, "ISULAD_KEEP_NONE") == 0) { ++ DEBUG("Do not keep any capability"); ++ for(i = 0; i < numcaps; i++) { ++ caplist[i] = 0; ++ } ++ break; ++ } ++#endif + capid = parse_cap(keep_entry); + if (capid == -2) + continue; +@@ -2443,7 +3125,11 @@ static int parse_resource(const char *res) + return resid; + } + ++#ifdef HAVE_ISULAD ++int setup_resource_limits(struct lxc_list *limits, pid_t pid, int errfd) ++#else + int setup_resource_limits(struct lxc_list *limits, pid_t pid) ++#endif + { + int resid; + struct lxc_list *it; +@@ -2457,8 +3143,17 @@ int setup_resource_limits(struct lxc_list *limits, pid_t pid) + return log_error(-1, "Unknown resource %s", lim->resource); + + #if HAVE_PRLIMIT || HAVE_PRLIMIT64 ++#if HAVE_ISULAD ++ if (prlimit(pid, resid, &lim->limit, NULL) != 0) { ++ lxc_write_error_message(errfd, "%s:%d: Failed to set limit %s %lu %lu: %s.", ++ __FILE__, __LINE__, lim->resource, ++ lim->limit.rlim_cur, lim->limit.rlim_max, strerror(errno)); ++ return log_error_errno(-1, errno, "Failed to set limit %s", lim->resource); ++ } ++#else + if (prlimit(pid, resid, &lim->limit, NULL) != 0) + return log_error_errno(-1, errno, "Failed to set limit %s", lim->resource); ++#endif + + TRACE("Setup \"%s\" limit", lim->resource); + #else +@@ -2546,10 +3241,10 @@ struct lxc_conf *lxc_conf_init(void) + new->console.path = NULL; + new->console.peer = -1; + new->console.proxy.busy = -1; +- new->console.proxy.ptmx = -1; +- new->console.proxy.pts = -1; +- new->console.ptmx = -1; +- new->console.pts = -1; ++ new->console.proxy.master = -1; ++ new->console.proxy.slave = -1; ++ new->console.master = -1; ++ new->console.slave = -1; + new->console.name[0] = '\0'; + memset(&new->console.ringbuf, 0, sizeof(struct lxc_ringbuf)); + new->maincmd_fd = -1; +@@ -2601,6 +3296,27 @@ struct lxc_conf *lxc_conf_init(void) + memset(&new->ns_share, 0, sizeof(char *) * LXC_NS_MAX); + seccomp_conf_init(new); + ++#ifdef HAVE_ISULAD ++ lxc_list_init(&new->populate_devs); ++ lxc_list_init(&new->rootfs.maskedpaths); ++ lxc_list_init(&new->rootfs.ropaths); ++ new->exit_fd = -1; ++ new->umask = 0027; /*default umask 0027*/ ++ new->console.init_fifo[0] = NULL; ++ new->console.init_fifo[1] = NULL; ++ new->console.init_fifo[2] = NULL; ++ new->console.pipes[0][0] = -1; ++ new->console.pipes[0][1] = -1; ++ new->console.pipes[1][0] = -1; ++ new->console.pipes[1][1] = -1; ++ new->console.pipes[2][0] = -1; ++ new->console.pipes[2][1] = -1; ++ lxc_list_init(&new->console.fifos); ++ new->errmsg = NULL; ++ new->errpipe[0] = -1; ++ new->errpipe[1] = -1; ++#endif ++ + return new; + } + +@@ -2716,10 +3432,19 @@ int lxc_map_ids(struct lxc_list *idmap, pid_t pid) + struct id_map *map; + struct lxc_list *iterator; + enum idtype type; ++ /* strlen("new@idmap") = 9 ++ * + ++ * strlen(" ") = 1 ++ * + ++ * INTTYPE_TO_STRLEN(uint32_t) ++ * + ++ * strlen(" ") = 1 ++ * ++ * We add some additional space to make sure that we really have ++ * LXC_IDMAPLEN bytes available for our the {g,u]id mapping. ++ */ + int ret = 0, gidmap = 0, uidmap = 0; +- char mapbuf[STRLITERALLEN("new@idmap") + STRLITERALLEN(" ") + +- INTTYPE_TO_STRLEN(pid_t) + STRLITERALLEN(" ") + +- LXC_IDMAPLEN] = {0}; ++ char mapbuf[9 + 1 + INTTYPE_TO_STRLEN(uint32_t) + 1 + LXC_IDMAPLEN] = {0}; + bool had_entry = false, use_shadow = false; + int hostuid, hostgid; + +@@ -2828,11 +3553,11 @@ int lxc_map_ids(struct lxc_list *idmap, pid_t pid) + return 0; + } + +-/* +- * Return the host uid/gid to which the container root is mapped in val. ++/* Return the host uid/gid to which the container root is mapped in val. + * Return true if id was found, false otherwise. + */ +-static id_t get_mapped_rootid(const struct lxc_conf *conf, enum idtype idtype) ++static bool get_mapped_rootid(const struct lxc_conf *conf, enum idtype idtype, ++ unsigned long *val) + { + unsigned nsid; + struct id_map *map; +@@ -2849,13 +3574,11 @@ static id_t get_mapped_rootid(const struct lxc_conf *conf, enum idtype idtype) + continue; + if (map->nsid != nsid) + continue; +- return map->hostid; ++ *val = map->hostid; ++ return true; + } + +- if (idtype == ID_TYPE_UID) +- return LXC_INVALID_UID; +- +- return LXC_INVALID_GID; ++ return false; + } + + int mapped_hostid(unsigned id, const struct lxc_conf *conf, enum idtype idtype) +@@ -2896,6 +3619,129 @@ again: + return freeid; + } + ++int chown_mapped_root_exec_wrapper(void *args) ++{ ++ execvp("lxc-usernsexec", args); ++ return -1; ++} ++ ++/* chown_mapped_root: for an unprivileged user with uid/gid X to ++ * chown a dir to subuid/subgid Y, he needs to run chown as root ++ * in a userns where nsid 0 is mapped to hostuid/hostgid Y, and ++ * nsid Y is mapped to hostuid/hostgid X. That way, the container ++ * root is privileged with respect to hostuid/hostgid X, allowing ++ * him to do the chown. ++ */ ++int chown_mapped_root(const char *path, const struct lxc_conf *conf) ++{ ++ uid_t rootuid, rootgid; ++ unsigned long val; ++ int hostuid, hostgid, ret; ++ struct stat sb; ++ char map1[100], map2[100], map3[100], map4[100], map5[100]; ++ char ugid[100]; ++ const char *args1[] = {"lxc-usernsexec", ++ "-m", map1, ++ "-m", map2, ++ "-m", map3, ++ "-m", map5, ++ "--", "chown", ugid, path, ++ NULL}; ++ const char *args2[] = {"lxc-usernsexec", ++ "-m", map1, ++ "-m", map2, ++ "-m", map3, ++ "-m", map4, ++ "-m", map5, ++ "--", "chown", ugid, path, ++ NULL}; ++ char cmd_output[PATH_MAX]; ++ ++ hostuid = geteuid(); ++ hostgid = getegid(); ++ ++ if (!get_mapped_rootid(conf, ID_TYPE_UID, &val)) ++ return log_error(-1, "No uid mapping for container root"); ++ rootuid = (uid_t)val; ++ ++ if (!get_mapped_rootid(conf, ID_TYPE_GID, &val)) ++ return log_error(-1, "No gid mapping for container root"); ++ rootgid = (gid_t)val; ++ ++ if (hostuid == 0) { ++ if (chown(path, rootuid, rootgid) < 0) ++ return log_error(-1, "Error chowning %s", path); ++ ++ return 0; ++ } ++ ++ /* nothing to do */ ++ if (rootuid == hostuid) ++ return log_info(0, "Container root is our uid; no need to chown"); ++ ++ /* save the current gid of "path" */ ++ if (stat(path, &sb) < 0) ++ return log_error(-1, "Error stat %s", path); ++ ++ /* Update the path argument in case this was overlayfs. */ ++ args1[sizeof(args1) / sizeof(args1[0]) - 2] = path; ++ args2[sizeof(args2) / sizeof(args2[0]) - 2] = path; ++ ++ /* ++ * A file has to be group-owned by a gid mapped into the ++ * container, or the container won't be privileged over it. ++ */ ++ DEBUG("trying to chown \"%s\" to %d", path, hostgid); ++ if (sb.st_uid == hostuid && ++ mapped_hostid(sb.st_gid, conf, ID_TYPE_GID) < 0 && ++ chown(path, -1, hostgid) < 0) ++ return log_error(-1, "Failed chgrping %s", path); ++ ++ /* "u:0:rootuid:1" */ ++ ret = snprintf(map1, 100, "u:0:%d:1", rootuid); ++ if (ret < 0 || ret >= 100) ++ return log_error(-1, "Error uid printing map string"); ++ ++ /* "u:hostuid:hostuid:1" */ ++ ret = snprintf(map2, 100, "u:%d:%d:1", hostuid, hostuid); ++ if (ret < 0 || ret >= 100) ++ return log_error(-1, "Error uid printing map string"); ++ ++ /* "g:0:rootgid:1" */ ++ ret = snprintf(map3, 100, "g:0:%d:1", rootgid); ++ if (ret < 0 || ret >= 100) ++ return log_error(-1, "Error gid printing map string"); ++ ++ /* "g:pathgid:rootgid+pathgid:1" */ ++ ret = snprintf(map4, 100, "g:%d:%d:1", (gid_t)sb.st_gid, ++ rootgid + (gid_t)sb.st_gid); ++ if (ret < 0 || ret >= 100) ++ return log_error(-1, "Error gid printing map string"); ++ ++ /* "g:hostgid:hostgid:1" */ ++ ret = snprintf(map5, 100, "g:%d:%d:1", hostgid, hostgid); ++ if (ret < 0 || ret >= 100) ++ return log_error(-1, "Error gid printing map string"); ++ ++ /* "0:pathgid" (chown) */ ++ ret = snprintf(ugid, 100, "0:%d", (gid_t)sb.st_gid); ++ if (ret < 0 || ret >= 100) ++ return log_error(-1, "Error owner printing format string for chown"); ++ ++ if (hostgid == sb.st_gid) ++ ret = run_command(cmd_output, sizeof(cmd_output), ++ chown_mapped_root_exec_wrapper, ++ (void *)args1); ++ else ++ ret = run_command(cmd_output, sizeof(cmd_output), ++ chown_mapped_root_exec_wrapper, ++ (void *)args2); ++ if (ret < 0) ++ ERROR("lxc-usernsexec failed: %s", cmd_output); ++ ++ return ret; ++} ++ + /* NOTE: Must not be called from inside the container namespace! */ + int lxc_create_tmp_proc_mount(struct lxc_conf *conf) + { +@@ -2923,8 +3769,8 @@ void tmp_proc_unmount(struct lxc_conf *lxc_conf) + lxc_conf->tmp_umount_proc = false; + } + +-/* Walk /proc/mounts and change any shared entries to dependent mounts. */ +-void turn_into_dependent_mounts(void) ++/* Walk /proc/mounts and change any shared entries to slave. */ ++void remount_all_slave(void) + { + __do_free char *line = NULL; + __do_fclose FILE *f = NULL; +@@ -3001,12 +3847,13 @@ again: + null_endofword(target); + ret = mount(NULL, target, NULL, MS_SLAVE, NULL); + if (ret < 0) { +- SYSERROR("Failed to recursively turn old root mount tree into dependent mount. Continuing..."); ++ SYSERROR("Failed to make \"%s\" MS_SLAVE", target); ++ ERROR("Continuing..."); + continue; + } +- TRACE("Recursively turned old root mount tree into dependent mount"); ++ TRACE("Remounted \"%s\" as MS_SLAVE", target); + } +- TRACE("Turned all mount table entries into dependent mount"); ++ TRACE("Remounted all mount table entries as MS_SLAVE"); + } + + static int lxc_execute_bind_init(struct lxc_handler *handler) +@@ -3082,7 +3929,13 @@ int lxc_setup_rootfs_prepare_root(struct lxc_conf *conf, const char *name, + return log_trace(0, "Bind mounted container / onto itself"); + } + +- turn_into_dependent_mounts(); ++#ifdef HAVE_ISULAD ++ if (!conf->rootfs.options) { ++ remount_all_slave(); ++ } ++#else ++ remount_all_slave(); ++#endif + + ret = run_lxc_hooks(name, "pre-mount", conf, NULL); + if (ret < 0) +@@ -3123,7 +3976,7 @@ static bool verify_start_hooks(struct lxc_conf *conf) + + static bool execveat_supported(void) + { +- execveat(-1, "", NULL, NULL, AT_EMPTY_PATH); ++ lxc_raw_execveat(-1, "", NULL, NULL, AT_EMPTY_PATH); + if (errno == ENOSYS) + return false; + +@@ -3180,60 +4033,738 @@ static int lxc_setup_boot_id(void) + return 0; + } + +-int lxc_setup(struct lxc_handler *handler) ++#ifdef HAVE_ISULAD ++/* isulad: setup devices which will be populated in the container.*/ ++static int setup_populate_devs(const struct lxc_rootfs *rootfs, struct lxc_list *devs) + { +- __do_close int pts_mnt_fd = -EBADF; +- int ret; +- const char *lxcpath = handler->lxcpath, *name = handler->name; +- struct lxc_conf *lxc_conf = handler->conf; +- char *keyring_context = NULL; ++ int ret = 0; ++ char *pathdirname = NULL; ++ char path[MAXPATHLEN]; ++ mode_t file_mode = 0; ++ struct lxc_populate_devs *dev_elem = NULL; ++ struct lxc_list *it = NULL; ++ mode_t cur_mask; + +- ret = lxc_setup_rootfs_prepare_root(lxc_conf, name, lxcpath); +- if (ret < 0) +- return log_error(-1, "Failed to setup rootfs"); ++ INFO("Populating devices into container"); ++ cur_mask = umask(0000); ++ lxc_list_for_each(it, devs) { ++ ret = 0; ++ dev_elem = it->elem; + +- if (handler->nsfd[LXC_NS_UTS] == -EBADF) { +- ret = setup_utsname(lxc_conf->utsname); +- if (ret < 0) +- return log_error(-1, "Failed to setup the utsname %s", name); +- } ++ ret = snprintf(path, MAXPATHLEN, "%s/%s", rootfs->path ? rootfs->mount : "", dev_elem->name); ++ if (ret < 0 || ret >= MAXPATHLEN) { ++ ret = -1; ++ goto reset_umask; ++ } + +- if (!lxc_conf->keyring_disable_session) { +- if (lxc_conf->lsm_se_keyring_context) { +- keyring_context = lxc_conf->lsm_se_keyring_context; +- } else if (lxc_conf->lsm_se_context) { +- keyring_context = lxc_conf->lsm_se_context; ++ /* create any missing directories */ ++ pathdirname = safe_strdup(path); ++ pathdirname = dirname(pathdirname); ++ ret = mkdir_p(pathdirname, 0755); ++ free(pathdirname); ++ if (ret < 0) { ++ WARN("Failed to create target directory"); ++ ret = -1; ++ goto reset_umask; + } + +- ret = lxc_setup_keyring(keyring_context); +- if (ret < 0) +- return -1; +- } ++ if (!strcmp(dev_elem->type, "c")) { ++ file_mode = dev_elem->file_mode | S_IFCHR; ++ } else if (!strcmp(dev_elem->type, "b")) { ++ file_mode = dev_elem->file_mode | S_IFBLK; ++ } else { ++ ERROR("Failed to parse devices type '%s'", dev_elem->type); ++ ret = -1; ++ goto reset_umask; ++ } + +- if (handler->ns_clone_flags & CLONE_NEWNET) { +- ret = lxc_setup_network_in_child_namespaces(lxc_conf, +- &lxc_conf->network); +- if (ret < 0) +- return log_error(-1, "Failed to setup network"); ++ DEBUG("Try to mknod '%s':'%d':'%d':'%d'\n", path, ++ file_mode, dev_elem->maj, dev_elem->min); + +- ret = lxc_network_send_name_and_ifindex_to_parent(handler); +- if (ret < 0) +- return log_error(-1, "Failed to send network device names and ifindices to parent"); ++ ret = mknod(path, file_mode, makedev(dev_elem->maj, dev_elem->min)); ++ if (ret && errno != EEXIST) { ++ SYSERROR("Failed to mknod '%s':'%d':'%d':'%d'", dev_elem->name, ++ file_mode, dev_elem->maj, dev_elem->min); ++ ++ char hostpath[MAXPATHLEN]; ++ FILE *pathfile = NULL; ++ ++ // Unprivileged containers cannot create devices, so ++ // try to bind mount the device from the host ++ ret = snprintf(hostpath, MAXPATHLEN, "/dev/%s", dev_elem->name); ++ if (ret < 0 || ret >= MAXPATHLEN) { ++ ret = -1; ++ goto reset_umask; ++ } ++ pathfile = lxc_fopen(path, "wb"); ++ if (!pathfile) { ++ SYSERROR("Failed to create device mount target '%s'", path); ++ ret = -1; ++ goto reset_umask; ++ } ++ fclose(pathfile); ++ if (safe_mount(hostpath, path, 0, MS_BIND, NULL, ++ rootfs->path ? rootfs->mount : NULL) != 0) { ++ SYSERROR("Failed bind mounting device %s from host into container", ++ dev_elem->name); ++ ret = -1; ++ goto reset_umask; ++ } ++ } ++ if (chown(path, dev_elem->uid, dev_elem->gid) < 0) { ++ ERROR("Error chowning %s", path); ++ ret = -1; ++ goto reset_umask; ++ } ++ ret = 0; + } + +- if (wants_console(&lxc_conf->console)) { +- pts_mnt_fd = open_tree(-EBADF, lxc_conf->console.name, +- OPEN_TREE_CLONE | OPEN_TREE_CLOEXEC | AT_EMPTY_PATH); +- if (pts_mnt_fd < 0) +- SYSTRACE("Failed to create detached mount for container's console \"%s\"", +- lxc_conf->console.name); +- else +- TRACE("Created detached mount for container's console \"%s\"", +- lxc_conf->console.name); +- } ++reset_umask: ++ (void)umask(cur_mask); ++ ++ INFO("Populated devices into container /dev"); ++ return ret; ++} ++ ++// isulad: setup rootfs mountopts ++static int setup_rootfs_mountopts(const struct lxc_rootfs *rootfs) ++{ ++ unsigned long mflags, mntflags, pflags; ++ char *mntdata = NULL; ++ ++ if(!rootfs || !rootfs->options) ++ return 0; ++ ++ if (parse_mntopts(rootfs->options, &mntflags, &pflags, &mntdata) < 0) { ++ free(mntdata); ++ return -1; ++ } ++ free(mntdata); ++ ++ if (mntflags & MS_RDONLY) { ++ mflags = add_required_remount_flags("/", NULL, MS_BIND | MS_REC | mntflags | pflags | MS_REMOUNT); ++ DEBUG("remounting / as readonly"); ++ if (mount("/", "/", NULL, mflags, 0) < 0) { ++ SYSERROR("Failed to make / readonly."); ++ return -1; ++ } ++ } ++ return 0; ++} ++ ++struct oci_hook_conf { ++ defs_hook *ocihook; ++ ++ int errfd; ++ int which; ++}; ++ ++static int create_mtab_link() ++{ ++ ssize_t ret; ++ int mret; ++ struct stat sbuf; ++ const char *pathname = "/proc/mounts"; ++ const char *slink = "/etc/mtab"; ++ ++ if (file_exists(slink)) { ++ return 0; ++ } ++ ++ ret = stat(pathname, &sbuf); ++ if (ret < 0) { ++ SYSERROR("Failed to stat %s: %s", pathname, strerror(errno)); ++ return -1; ++ } ++ ++ mret = symlink(pathname, slink); ++ if (mret < 0 && errno != EEXIST) { ++ if (errno == EROFS) { ++ WARN("Failed to create link %s for target %s. Read-only filesystem", slink, pathname); ++ } else { ++ SYSERROR("Failed to create \"%s\"", slink); ++ return -1; ++ } ++ } ++ ++ return 0; ++} ++ ++struct wait_conf { ++ pid_t pid; ++ unsigned long long startat; ++ int timeout; ++ int errfd; ++ int which; ++}; ++ ++static char* generate_json_str(const char *name, const char *lxcpath, const char *rootfs) ++{ ++ char *cpid = NULL; ++ char *inmsg = NULL; ++ int rc = 0, ret = 0; ++ size_t size; ++ ++ if (!name || !lxcpath || !rootfs) { ++ ERROR("Invalid arguments"); ++ return NULL; ++ } ++ cpid = getenv("LXC_PID"); ++ if (!cpid) { ++ ERROR("Get container %s pid failed: %s", name, strerror(errno)); ++ cpid = "-1"; ++ } ++ ++ if ((strlen(name) + strlen(cpid) + strlen(rootfs) + strlen(lxcpath) + strlen(name)) > ++ SIZE_MAX - (strlen("{\"ociVersion\":\"\",\"id\":\"\",\"pid\":,\"root\":\"\",\"bundle\":\"\"}") - 1 - 1)) { ++ ERROR("Out of memory"); ++ ret = -1; ++ goto out_free; ++ } ++ ++ // {"ociVersion":"","id":"xxx","pid":777,"root":"xxx","bundle":"xxx"} ++ size = strlen("{\"ociVersion\":\"\",\"id\":\"\",\"pid\":,\"root\":\"\",\"bundle\":\"\"}") + ++ strlen(name) + strlen(cpid) + strlen(rootfs) + strlen(lxcpath) + 1 + strlen(name) + 1; ++ inmsg = malloc(size); ++ if (inmsg == NULL) { ++ ERROR("Out of memory"); ++ ret = -1; ++ goto out_free; ++ } ++ rc = snprintf(inmsg, size, ++ "{\"ociVersion\":\"\",\"id\":\"%s\",\"pid\":%s,\"root\":\"%s\",\"bundle\":\"%s/%s\"}", ++ name, cpid, rootfs, lxcpath, name); ++ if (rc < 0 || rc >= size) { ++ ERROR("Create json string failed"); ++ ret = -1; ++ } ++ ++out_free: ++ if (ret) { ++ free(inmsg); ++ inmsg = NULL; ++ } ++ return inmsg; ++} ++ ++static char **merge_ocihook_env(char **oldenvs, size_t env_len, size_t *merge_env_len) ++{ ++ char **result = NULL; ++ size_t result_len = env_len; ++ size_t i, j; ++ char *tmpenv = NULL; ++ char *lxc_envs[] = {"LD_LIBRARY_PATH", "PATH", "LXC_CGNS_AWARE", "LXC_PID", "LXC_ROOTFS_MOUNT", ++ "LXC_CONFIG_FILE", "LXC_CGROUP_PATH", "LXC_ROOTFS_PATH", "LXC_NAME" ++ }; ++ char *lxcenv_buf = NULL; ++ ++ if (result_len > SIZE_MAX - (sizeof(lxc_envs) / sizeof(char *)) - 1) ++ return NULL; ++ result_len += (sizeof(lxc_envs) / sizeof(char *)) + 1; ++ result = malloc(sizeof(char *) * result_len); ++ if (result == NULL) ++ return NULL; ++ memset(result, 0, sizeof(char *) * result_len); ++ ++ for(i = 0; i < env_len; i++) { ++ if (oldenvs[i]) ++ result[i] = safe_strdup(oldenvs[i]); ++ } ++ ++ for(j = 0; j < (sizeof(lxc_envs) / sizeof(char *)); j++) { ++ size_t env_buf_len = 0; ++ tmpenv = getenv(lxc_envs[j]); ++ if (tmpenv && i < (result_len - 1)) { ++ if (strlen(tmpenv) > (SIZE_MAX - 1 - 1 - strlen(lxc_envs[j]))) { ++ lxc_free_array((void **)result, free); ++ return NULL; ++ } ++ env_buf_len = ((strlen(tmpenv) + 1) + strlen(lxc_envs[j])) + 1; ++ lxcenv_buf = malloc(env_buf_len); ++ if (lxcenv_buf == NULL) { ++ lxc_free_array((void **)result, free); ++ return NULL; ++ } ++ if (snprintf(lxcenv_buf, env_buf_len, "%s=%s", lxc_envs[j], tmpenv) < 0) { ++ free(lxcenv_buf); ++ continue; ++ } ++ result[i++] = lxcenv_buf; ++ lxcenv_buf = NULL; ++ } ++ } ++ ++ *merge_env_len = i; ++ return result; ++} ++ ++static struct lxc_popen_FILE *lxc_popen_ocihook(const char *commandpath, char **args, int args_len, ++ char **envs, int env_len, const char *instr) ++{ ++ int ret; ++ struct lxc_popen_FILE *fp = NULL; ++ int pipe_fds[2] = {-1, -1}; ++ int pipe_msg[2] = {-1, -1}; ++ pid_t child_pid; ++ ++ ret = pipe2(pipe_fds, O_CLOEXEC | O_NONBLOCK); ++ if (ret < 0) ++ return NULL; ++ ++ ret = pipe2(pipe_msg, O_CLOEXEC | O_NONBLOCK); ++ if (ret < 0) { ++ ERROR("Pipe msg failure"); ++ close(pipe_fds[0]); ++ close(pipe_fds[1]); ++ return NULL; ++ } ++ ++ child_pid = fork(); ++ if (child_pid < 0) ++ goto on_error; ++ ++ if (child_pid == 0) { ++ close(pipe_msg[1]); ++ if (pipe_msg[0] != STDIN_FILENO) ++ dup2(pipe_msg[0], STDIN_FILENO); ++ else { ++ if (fcntl(pipe_msg[0], F_SETFD, 0) != 0) { ++ fprintf(stderr, "Failed to remove FD_CLOEXEC from fd."); ++ exit(127); ++ } ++ } ++ close(pipe_msg[0]); ++ ++ close(pipe_fds[0]); ++ ++ /* duplicate stdout */ ++ if (pipe_fds[1] != STDOUT_FILENO) ++ ret = dup2(pipe_fds[1], STDOUT_FILENO); ++ else ++ ret = fcntl(pipe_fds[1], F_SETFD, 0); ++ if (ret < 0) { ++ close(pipe_fds[1]); ++ _exit(EXIT_FAILURE); ++ } ++ ++ /* duplicate stderr */ ++ if (pipe_fds[1] != STDERR_FILENO) ++ ret = dup2(pipe_fds[1], STDERR_FILENO); ++ else ++ ret = fcntl(pipe_fds[1], F_SETFD, 0); ++ close(pipe_fds[1]); ++ if (ret < 0) ++ _exit(EXIT_FAILURE); ++ ++ if (lxc_check_inherited(NULL, true, NULL, 0) != 0) { ++ fprintf(stderr, "check inherited fd failed"); ++ exit(127); ++ } ++ ++ /* ++ * Unblock signals. ++ * This is the main/only reason ++ * why we do our lousy popen() emulation. ++ */ ++ { ++ sigset_t mask; ++ sigfillset(&mask); ++ sigprocmask(SIG_UNBLOCK, &mask, NULL); ++ } ++ ++ if (env_len > 0) ++ execvpe(commandpath, args, envs); ++ else ++ execvp(commandpath, args); ++ fprintf(stderr, "fork/exec %s: %s", commandpath, strerror(errno)); ++ exit(127); ++ } ++ ++ /* parent */ ++ ++ close(pipe_fds[1]); ++ pipe_fds[1] = -1; ++ ++ close(pipe_msg[0]); ++ pipe_msg[0]= -1; ++ if (instr) { ++ size_t len = strlen(instr); ++ if (lxc_write_nointr(pipe_msg[1], instr, len) != len) { ++ WARN("Write instr: %s failed", instr); ++ } ++ } ++ close(pipe_msg[1]); ++ pipe_msg[1]= -1; ++ ++ fp = calloc(1, sizeof(*fp)); ++ if (!fp) { ++ ERROR("Failed to allocate memory"); ++ goto on_error; ++ } ++ ++ fp->child_pid = child_pid; ++ fp->pipe = pipe_fds[0]; ++ ++ return fp; ++ ++on_error: ++ ++ if (pipe_fds[0] >= 0) ++ close(pipe_fds[0]); ++ ++ if (pipe_fds[1] >= 0) ++ close(pipe_fds[1]); ++ ++ if (pipe_msg[0] >= 0) ++ close(pipe_msg[0]); ++ ++ if (pipe_msg[1] >= 0) ++ close(pipe_msg[1]); ++ ++ if (fp) ++ free(fp); ++ ++ return NULL; ++} ++ ++void* wait_ocihook_timeout(void *arg) ++{ ++ bool alive = false; ++ struct wait_conf *conf = (struct wait_conf *)arg; ++ ++ if (!conf || conf->timeout < 1) ++ goto out; ++ ++ sleep(conf->timeout); ++ ++ alive = lxc_process_alive(conf->pid, conf->startat); ++ ++ if (alive) { ++ ERROR("%s:%d: running %s hook caused \"hook ran past specified timeout of %.1fs\"", ++ __FILE__, __LINE__, lxchook_names[conf->which], ++ (double)conf->timeout); ++ ++ lxc_write_error_message(conf->errfd, "%s:%d: running %s hook caused \"hook ran past specified timeout of %.1fs\".", ++ __FILE__, __LINE__, lxchook_names[conf->which], ++ (double)conf->timeout); ++ ++ if (kill(conf->pid, SIGKILL) && errno != ESRCH) { ++ ERROR("Send kill signal failed"); ++ goto out; ++ } ++ } ++ ++out: ++ free(conf); ++ return ((void *)0); ++} ++ ++static int run_ocihook_buffer(struct oci_hook_conf *oconf, const char *inmsg) ++{ ++ struct lxc_popen_FILE *f; ++ char output[LXC_LOG_BUFFER_SIZE] = {0}; ++ int ret; ++ pthread_t ptid; ++ int err; ++ struct wait_conf *conf = NULL; ++ pthread_attr_t attr; ++ char *buffer = oconf->ocihook->path; ++ char *err_args_msg = NULL; ++ char *err_envs_msg = NULL; ++ char **hookenvs = NULL; ++ size_t hookenvs_len = 0; ++ ++ hookenvs = merge_ocihook_env(oconf->ocihook->env, oconf->ocihook->env_len, &hookenvs_len); ++ if (!hookenvs) { ++ ERROR("Out of memory."); ++ return -1; ++ } ++ ++ f = lxc_popen_ocihook(buffer, oconf->ocihook->args, oconf->ocihook->args_len, hookenvs, hookenvs_len, inmsg); ++ lxc_free_array((void **)hookenvs, free); ++ if (!f) { ++ SYSERROR("Failed to popen() %s.", buffer); ++ return -1; ++ } ++ ++ conf = malloc(sizeof(struct wait_conf)); ++ if (conf == NULL) { ++ SYSERROR("Failed to malloc."); ++ goto on_error; ++ } ++ ++ memset(conf, 0x00, sizeof(struct wait_conf)); ++ ++ conf->pid = f->child_pid; ++ conf->startat = lxc_get_process_startat(conf->pid); ++ ++ INFO("hook_conf timeout %d", oconf->ocihook->timeout); ++ if(oconf->ocihook->timeout > 0) ++ conf->timeout = oconf->ocihook->timeout; ++ else { ++ conf->timeout = 30; ++ INFO("Set hook timeout 30s"); ++ } ++ conf->errfd = oconf->errfd; ++ conf->which = oconf->which; ++ ++ pthread_attr_init(&attr); ++ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); ++ err = pthread_create(&ptid, &attr, wait_ocihook_timeout, conf); ++ if (err != 0) { ++ ERROR("Create wait timeout thread failed"); ++ free(conf); ++ goto on_error; ++ } ++ ++ ret = lxc_wait_for_pid_status(f->child_pid); ++ ++ lxc_read_nointr(f->pipe, output, sizeof(output) - 1); ++ close(f->pipe); ++ free(f); ++ ++ if (ret == -1) { ++ SYSERROR("Script exited with error."); ++ goto print_hook; ++ } else if (WIFEXITED(ret) && WEXITSTATUS(ret) != 0) { ++ ERROR("Script exited with status %d. output: %s", WEXITSTATUS(ret), output); ++ lxc_write_error_message(oconf->errfd, "%s:%d: running %s hook caused \"error running hook: exit status %d, output: %s\".", ++ __FILE__, __LINE__, ++ (oconf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[oconf->which], ++ WEXITSTATUS(ret), output); ++ ++ goto print_hook; ++ } else if (WIFSIGNALED(ret)) { ++ ERROR("Script terminated by signal %d.", WTERMSIG(ret)); ++ lxc_write_error_message(oconf->errfd, "%s:%d: running %s hook caused \"error running hook: Script terminated by signal %d\".", ++ __FILE__, __LINE__, ++ (oconf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[oconf->which], ++ WTERMSIG(ret)); ++ ++ goto print_hook; ++ } ++ ++ return 0; ++ ++on_error: ++ if (f) { ++ if (f->pipe >= 0) ++ close(f->pipe); ++ free(f); ++ } ++ ++print_hook: ++ if (oconf->ocihook->args) ++ err_args_msg = lxc_string_join(" ", (const char **)oconf->ocihook->args, false); ++ if (oconf->ocihook->env) ++ err_envs_msg = lxc_string_join(" ", (const char **)oconf->ocihook->env, false); ++ ERROR("Hook script command: \"%s\", args: \"%s\", envs: \"%s\", timeout: %d.", ++ buffer, err_args_msg ? err_args_msg : "", ++ err_envs_msg ? err_envs_msg : "", oconf->ocihook->timeout); ++ ++ free(err_args_msg); ++ free(err_envs_msg); ++ return -1; ++} ++ ++static int run_ocihook_script_argv(const char *name, const char *section, ++ struct oci_hook_conf *oconf, ++ const char *lxcpath, const char *rootfs) ++{ ++ int ret; ++ const char *script = oconf->ocihook->path; ++ char *inmsg = NULL; ++ ++ INFO("Executing script \"%s\" for container \"%s\", config section \"%s\".", ++ script, name, section); ++ ++ inmsg = generate_json_str(name, lxcpath, rootfs); ++ if (!inmsg) { ++ return -1; ++ } ++ ++ ret = run_ocihook_buffer(oconf, inmsg); ++ free(inmsg); ++ inmsg = NULL; ++ return ret; ++} ++ ++static char *get_root_path(const char *path, const char *backend) ++{ ++ char *ret = NULL; ++ char *tmp = NULL; ++ ++ if (!path) { ++ ret = safe_strdup("/"); ++ return ret; ++ } ++ if (!backend) { ++ goto default_out; ++ } ++ ++ if (strcmp(backend, "aufs") == 0 || ++ strcmp(backend, "overlayfs") == 0 || ++ strcmp(backend, "loop") == 0) { ++ tmp = strrchr(path, ':'); ++ if (tmp == NULL) { ++ ERROR("Invalid root path format"); ++ return NULL; ++ } ++ tmp++; ++ ret = safe_strdup(tmp); ++ return ret; ++ } ++ ++default_out: ++ ret = safe_strdup(path); ++ return ret; ++} ++ ++static int do_run_oci_hooks(const char *name, const char *lxcpath, struct lxc_conf *lc, int which, int errfd) ++{ ++ struct oci_hook_conf work_conf = {0}; ++ size_t i; ++ int ret = 0; ++ int nret = 0; ++ char *rootpath = NULL; ++ ++ if (!lc) { ++ return -1; ++ } ++ if (!lc->ocihooks) { ++ return 0; ++ } ++ ++ rootpath = get_root_path(lc->rootfs.path, lc->rootfs.bdev_type); ++ if (!rootpath) { ++ ERROR("Get container %s rootpath failed.", name); ++ return -1; ++ } ++ ++ work_conf.errfd = errfd; ++ work_conf.which = which; ++ switch (which) { ++ case OCI_HOOK_PRESTART: ++ for (i = 0; i < lc->ocihooks->prestart_len; i++) { ++ work_conf.ocihook = lc->ocihooks->prestart[i]; ++ ret = run_ocihook_script_argv(name, "lxc", &work_conf, lxcpath, rootpath); ++ if (ret != 0) ++ break; ++ } ++ break; ++ case OCI_HOOK_POSTSTART: ++ for (i = 0; i < lc->ocihooks->poststart_len; i++) { ++ work_conf.ocihook = lc->ocihooks->poststart[i]; ++ nret = run_ocihook_script_argv(name, "lxc", &work_conf, lxcpath, rootpath); ++ if (nret != 0) ++ WARN("running poststart hook %zu failed, ContainerId: %s", i, name); ++ } ++ break; ++ case OCI_HOOK_POSTSTOP: ++ for (i = 0; i < lc->ocihooks->poststop_len; i++) { ++ work_conf.ocihook = lc->ocihooks->poststop[i]; ++ nret = run_ocihook_script_argv(name, "lxc", &work_conf, lxcpath, rootpath); ++ if (nret != 0) ++ WARN("running poststart hook %zu failed, ContainerId: %s", i, name); ++ } ++ break; ++ default: ++ ret = -1; ++ } ++ if (rootpath) ++ free(rootpath); ++ return ret; ++} ++ ++int run_oci_hooks(const char *name, const char *hookname, struct lxc_conf *conf, const char *lxcpath) ++{ ++ int which = -1; ++ ++ if (strcmp(hookname, "oci-prestart") == 0) { ++ which = OCI_HOOK_PRESTART; ++ if (!lxcpath) { ++ ERROR("oci hook require lxcpath"); ++ return -1; ++ } ++ return do_run_oci_hooks(name, lxcpath, conf, which, conf->errpipe[1]); ++ } else if (strcmp(hookname, "oci-poststart") == 0) { ++ which = OCI_HOOK_POSTSTART; ++ if (!lxcpath) { ++ ERROR("oci hook require lxcpath"); ++ return -1; ++ } ++ return do_run_oci_hooks(name, lxcpath, conf, which, conf->errpipe[1]); ++ } else if (strcmp(hookname, "oci-poststop") == 0) { ++ which = OCI_HOOK_POSTSTOP; ++ if (!lxcpath) { ++ ERROR("oci hook require lxcpath"); ++ return -1; ++ } ++ return do_run_oci_hooks(name, lxcpath, conf, which, conf->errpipe[1]); ++ } else ++ return -1; ++ ++ return 0; ++} ++#endif ++ ++int lxc_setup(struct lxc_handler *handler) ++{ ++ int ret; ++ const char *lxcpath = handler->lxcpath, *name = handler->name; ++ struct lxc_conf *lxc_conf = handler->conf; ++ char *keyring_context = NULL; ++#ifdef HAVE_ISULAD ++ bool setup_dev = true; ++#endif ++ ++ ret = lxc_setup_rootfs_prepare_root(lxc_conf, name, lxcpath); ++#ifdef HAVE_ISULAD ++ if (ret < 0) { ++ lxc_write_error_message(lxc_conf->errpipe[1], "%s:%d: failed to setup rootfs %s.", ++ __FILE__, __LINE__, lxc_conf->rootfs.path); ++ return log_error(-1, "Failed to setup rootfs"); ++ } ++#else ++ if (ret < 0) ++ return log_error(-1, "Failed to setup rootfs"); ++#endif ++ ++ if (handler->nsfd[LXC_NS_UTS] == -EBADF) { ++ ret = setup_utsname(lxc_conf->utsname); ++ if (ret < 0) ++ return log_error(-1, "Failed to setup the utsname %s", name); ++ } ++ ++ if (!lxc_conf->keyring_disable_session) { ++ if (lxc_conf->lsm_se_keyring_context) { ++ keyring_context = lxc_conf->lsm_se_keyring_context; ++ } else if (lxc_conf->lsm_se_context) { ++ keyring_context = lxc_conf->lsm_se_context; ++ } ++ ++ ret = lxc_setup_keyring(keyring_context); ++ if (ret < 0) ++ return -1; ++ } ++ ++ if (handler->ns_clone_flags & CLONE_NEWNET) { ++ ret = lxc_setup_network_in_child_namespaces(lxc_conf, ++ &lxc_conf->network); ++ if (ret < 0) ++ return log_error(-1, "Failed to setup network"); ++ ++ ret = lxc_network_send_name_and_ifindex_to_parent(handler); ++ if (ret < 0) ++ return log_error(-1, "Failed to send network device names and ifindices to parent"); ++ } + + if (lxc_conf->autodev > 0) { ++#ifdef HAVE_ISULAD ++ ret = mount_autodev(name, &lxc_conf->rootfs, lxc_conf->autodevtmpfssize, lxcpath, lxc_conf->systemd); ++#else + ret = mount_autodev(name, &lxc_conf->rootfs, lxc_conf->autodevtmpfssize, lxcpath); ++#endif + if (ret < 0) + return log_error(-1, "Failed to mount \"/dev\""); + } +@@ -3254,6 +4785,9 @@ int lxc_setup(struct lxc_handler *handler) + &lxc_conf->mount_list, name, lxcpath); + if (ret < 0) + return log_error(-1, "Failed to setup mount entries"); ++#ifdef HAVE_ISULAD ++ setup_dev = need_setup_dev(lxc_conf, &lxc_conf->mount_list); ++#endif + } + + if (lxc_conf->is_execute) { +@@ -3300,16 +4834,21 @@ int lxc_setup(struct lxc_handler *handler) + return log_error(-1, "Failed to populate \"/dev\""); + } + ++#ifdef HAVE_ISULAD ++ /* isulad: setup devices which will be populated in the container. */ ++ if (!lxc_list_empty(&lxc_conf->populate_devs) && setup_dev) { ++ if (setup_populate_devs(&lxc_conf->rootfs, &lxc_conf->populate_devs) != 0) { ++ return log_error(-1, "Failed to setup devices in the container"); ++ } ++ } ++#endif ++ + /* Make sure any start hooks are in the container */ + if (!verify_start_hooks(lxc_conf)) + return log_error(-1, "Failed to verify start hooks"); + +- ret = lxc_create_tmp_proc_mount(lxc_conf); +- if (ret < 0) +- return log_error(-1, "Failed to \"/proc\" LSMs"); +- + ret = lxc_setup_console(&lxc_conf->rootfs, &lxc_conf->console, +- lxc_conf->ttys.dir, pts_mnt_fd); ++ lxc_conf->ttys.dir); + if (ret < 0) + return log_error(-1, "Failed to setup console"); + +@@ -3317,50 +4856,201 @@ int lxc_setup(struct lxc_handler *handler) + if (ret < 0) + return log_error(-1, "Failed to setup \"/dev\" symlinks"); + ++ ret = lxc_create_tmp_proc_mount(lxc_conf); ++ if (ret < 0) ++ return log_error(-1, "Failed to \"/proc\" LSMs"); ++ ++#ifdef HAVE_ISULAD ++ /* Ask father to run oci prestart hooks and wait for him to finish. */ ++ if (lxc_sync_barrier_parent(handler, LXC_SYNC_OCI_PRESTART_HOOK)) { ++ return log_error(-1, "Failed to sync parent to start host hook"); ++ } ++#endif + ret = lxc_setup_rootfs_switch_root(&lxc_conf->rootfs); + if (ret < 0) + return log_error(-1, "Failed to pivot root into rootfs"); + +- /* Setting the boot-id is best-effort for now. */ +- if (lxc_conf->autodev > 0) +- (void)lxc_setup_boot_id(); ++ /* Setting the boot-id is best-effort for now. */ ++ if (lxc_conf->autodev > 0) ++ (void)lxc_setup_boot_id(); ++ ++#ifdef HAVE_ISULAD ++ if (setup_rootfs_mountopts(&lxc_conf->rootfs)) { ++ return log_error(-1, "failed to set rootfs for '%s'", name); ++ } ++ if (lxc_conf->rootfs.path != NULL && setup_dev) { ++ ret = lxc_setup_devpts(lxc_conf); ++ if (ret < 0) { ++ return log_error(-1, "Failed to setup new devpts instance for '%s'", name); ++ } ++ } ++#else ++ ret = lxc_setup_devpts(lxc_conf); ++ if (ret < 0) ++ return log_error(-1, "Failed to setup new devpts instance"); ++#endif ++ ++ ret = lxc_create_ttys(handler); ++ if (ret < 0) ++ return -1; ++ ++#ifdef HAVE_ISULAD ++ /*isulad: set system umask */ ++ umask(lxc_conf->umask); ++#endif ++ ++ ret = setup_personality(lxc_conf->personality); ++ if (ret < 0) ++ return log_error(-1, "Failed to set personality"); ++ ++ /* Set sysctl value to a path under /proc/sys as determined from the ++ * key. For e.g. net.ipv4.ip_forward translated to ++ * /proc/sys/net/ipv4/ip_forward. ++ */ ++ if (!lxc_list_empty(&lxc_conf->sysctls)) { ++ ret = setup_sysctl_parameters(&lxc_conf->sysctls); ++ if (ret < 0) ++ return log_error(-1, "Failed to setup sysctl parameters"); ++ } ++ ++#ifdef HAVE_ISULAD ++ // isulad: setup rootfs masked paths ++ if (!lxc_list_empty(&lxc_conf->rootfs.maskedpaths)) { ++ if (setup_rootfs_maskedpaths(&lxc_conf->rootfs.maskedpaths)) { ++ return log_error(-1, "failed to setup maskedpaths"); ++ } ++ } ++ ++ // isulad: setup rootfs ro paths ++ if (!lxc_list_empty(&lxc_conf->rootfs.ropaths)) { ++ if (setup_rootfs_ropaths(&lxc_conf->rootfs.ropaths)) { ++ return log_error(-1, "failed to setup readonlypaths"); ++ } ++ } ++ ++ //isulad: system container, remount /proc/sys/xxx by mount_list ++ if (lxc_conf->systemd != NULL && strcmp(lxc_conf->systemd, "true") == 0) { ++ if (!lxc_list_empty(&lxc_conf->mount_list)) { ++ if (remount_proc_sys_mount_entries(&lxc_conf->mount_list, ++ lxc_conf->lsm_aa_allow_nesting)) { ++ return log_error(-1, "failed to remount /proc/sys"); ++ } ++ } ++ } ++ ++ // isulad: create link /etc/mtab for /proc/mounts ++ if (create_mtab_link() != 0) { ++ return log_error(-1, "failed to create link /etc/mtab for target /proc/mounts"); ++ } ++#endif ++ ++ if (!lxc_list_empty(&lxc_conf->keepcaps)) { ++ if (!lxc_list_empty(&lxc_conf->caps)) ++ return log_error(-1, "Container requests lxc.cap.drop and lxc.cap.keep: either use lxc.cap.drop or lxc.cap.keep, not both"); ++ ++ if (dropcaps_except(&lxc_conf->keepcaps)) ++ return log_error(-1, "Failed to keep capabilities"); ++ } else if (setup_caps(&lxc_conf->caps)) { ++ return log_error(-1, "Failed to drop capabilities"); ++ } ++ ++ NOTICE("The container \"%s\" is set up", name); ++ ++ return 0; ++} ++ ++#ifdef HAVE_ISULAD ++/* isulad drop caps for container*/ ++int lxc_drop_caps(struct lxc_conf *conf) ++{ ++#define __DEF_CAP_TO_MASK(x) (1U << ((x) & 31)) ++#if HAVE_LIBCAP ++ int ret = 0; ++ struct lxc_list *iterator = NULL; ++ char *keep_entry = NULL; ++ size_t i = 0; ++ int capid; ++ size_t numcaps = (size_t)lxc_caps_last_cap() + 1; ++ struct lxc_list *caps = NULL; ++ int *caplist = NULL; ++ ++ if (lxc_list_empty(&conf->keepcaps)) ++ return 0; ++ ++ caps = &conf->keepcaps; ++ ++ if (numcaps <= 0 || numcaps > 200) ++ return -1; ++ ++ // caplist[i] is 1 if we keep capability i ++ caplist = malloc(numcaps * sizeof(int)); ++ if (caplist == NULL) { ++ ERROR("Out of memory"); ++ return -1; ++ } ++ (void)memset(caplist, 0, numcaps * sizeof(int)); ++ ++ lxc_list_for_each(iterator, caps) { ++ ++ keep_entry = iterator->elem; ++ /* isulad: Do not keep any cap*/ ++ if (strcmp(keep_entry, "ISULAD_KEEP_NONE") == 0) { ++ DEBUG("Do not keep any capability"); ++ for(i = 0; i < numcaps; i++) { ++ caplist[i] = 0; ++ } ++ break; ++ } ++ ++ capid = parse_cap(keep_entry); ++ ++ if (capid == -2) ++ continue; ++ ++ if (capid < 0) { ++ ERROR("unknown capability %s", keep_entry); ++ ret = -1; ++ goto out; ++ } ++ ++ DEBUG("keep capability '%s' (%d)", keep_entry, capid); ++ ++ caplist[capid] = 1; ++ } ++ ++ struct __user_cap_header_struct cap_header_data; ++ struct __user_cap_data_struct cap_data_data[2]; + +- ret = lxc_setup_devpts(lxc_conf); +- if (ret < 0) +- return log_error(-1, "Failed to setup new devpts instance"); ++ cap_user_header_t cap_header = &cap_header_data; ++ cap_user_data_t cap_data = &cap_data_data[0]; + +- ret = lxc_create_ttys(handler); +- if (ret < 0) +- return -1; ++ memset(cap_header, 0,sizeof(struct __user_cap_header_struct)); ++ memset(cap_data, 0, sizeof(struct __user_cap_data_struct) * 2); + +- ret = setup_personality(lxc_conf->personality); +- if (ret < 0) +- return log_error(-1, "Failed to set personality"); ++ cap_header->pid = 0; ++ cap_header->version = _LINUX_CAPABILITY_VERSION_3; + +- /* Set sysctl value to a path under /proc/sys as determined from the +- * key. For e.g. net.ipv4.ip_forward translated to +- * /proc/sys/net/ipv4/ip_forward. +- */ +- if (!lxc_list_empty(&lxc_conf->sysctls)) { +- ret = setup_sysctl_parameters(&lxc_conf->sysctls); +- if (ret < 0) +- return log_error(-1, "Failed to setup sysctl parameters"); ++ for (i = 0; i < numcaps; i++) { ++ if (caplist[i]) { ++ cap_data[CAP_TO_INDEX(i)].effective = cap_data[CAP_TO_INDEX(i)].effective | (i > 31 ? __DEF_CAP_TO_MASK(i % 32) : __DEF_CAP_TO_MASK(i)); ++ cap_data[CAP_TO_INDEX(i)].permitted = cap_data[CAP_TO_INDEX(i)].permitted | (i > 31 ? __DEF_CAP_TO_MASK(i % 32) : __DEF_CAP_TO_MASK(i)); ++ cap_data[CAP_TO_INDEX(i)].inheritable = cap_data[CAP_TO_INDEX(i)].inheritable | (i > 31 ? __DEF_CAP_TO_MASK(i % 32) : __DEF_CAP_TO_MASK(i)); ++ } + } + +- if (!lxc_list_empty(&lxc_conf->keepcaps)) { +- if (!lxc_list_empty(&lxc_conf->caps)) +- return log_error(-1, "Container requests lxc.cap.drop and lxc.cap.keep: either use lxc.cap.drop or lxc.cap.keep, not both"); +- +- if (dropcaps_except(&lxc_conf->keepcaps)) +- return log_error(-1, "Failed to keep capabilities"); +- } else if (setup_caps(&lxc_conf->caps)) { +- return log_error(-1, "Failed to drop capabilities"); ++ if (capset(cap_header, cap_data)) { ++ SYSERROR("Failed to set capabilitys"); ++ ret = -1; ++ goto out; + } + +- NOTICE("The container \"%s\" is set up", name); ++#endif + +- return 0; ++out: ++ free(caplist); ++ return ret; + } ++#endif + + int run_lxc_hooks(const char *name, char *hookname, struct lxc_conf *conf, + char *argv[]) +@@ -3406,7 +5096,7 @@ static int lxc_free_idmap(struct lxc_list *id_map) + { + struct lxc_list *it, *next; + +- lxc_list_for_each_safe(it, id_map, next) { ++ lxc_list_for_each_safe (it, id_map, next) { + lxc_list_del(it); + free(it->elem); + free(it); +@@ -3753,6 +5443,23 @@ void lxc_conf_free(struct lxc_conf *conf) + free(conf->cgroup_meta.controllers); + free(conf->shmount.path_host); + free(conf->shmount.path_cont); ++#ifdef HAVE_ISULAD ++ free(conf->container_info_file); ++ if (conf->exit_fd != -1) { ++ close(conf->exit_fd); ++ } ++ free(conf->systemd); ++ lxc_clear_init_args(conf); ++ lxc_clear_init_groups(conf); ++ lxc_clear_populate_devices(conf); ++ lxc_clear_rootfs_masked_paths(conf); ++ lxc_clear_rootfs_ro_paths(conf); ++ free(conf->errmsg); ++ lxc_close_error_pipe(conf->errpipe); ++ if (conf->ocihooks) { ++ free_oci_runtime_spec_hooks(conf->ocihooks); ++ } ++#endif + free(conf); + } + +@@ -3842,19 +5549,18 @@ static struct id_map *mapped_hostid_add(const struct lxc_conf *conf, uid_t id, + + /* Reuse existing mapping. */ + tmp = find_mapped_hostid_entry(conf, id, type); +- if (tmp) { +- memcpy(entry, tmp, sizeof(*entry)); +- } else { +- /* Find new mapping. */ +- hostid_mapped = find_unmapped_nsid(conf, type); +- if (hostid_mapped < 0) +- return log_debug(NULL, "Failed to find free mapping for id %d", id); ++ if (tmp) ++ return memcpy(entry, tmp, sizeof(*entry)); + +- entry->idtype = type; +- entry->nsid = hostid_mapped; +- entry->hostid = (unsigned long)id; +- entry->range = 1; +- } ++ /* Find new mapping. */ ++ hostid_mapped = find_unmapped_nsid(conf, type); ++ if (hostid_mapped < 0) ++ return log_debug(NULL, "Failed to find free mapping for id %d", id); ++ ++ entry->idtype = type; ++ entry->nsid = hostid_mapped; ++ entry->hostid = (unsigned long)id; ++ entry->range = 1; + + return move_ptr(entry); + } +@@ -3878,7 +5584,7 @@ static struct lxc_list *get_minimal_idmap(const struct lxc_conf *conf, + euid = geteuid(); + if (euid >= container_root_uid->hostid && + euid < (container_root_uid->hostid + container_root_uid->range)) +- host_uid_map = move_ptr(container_root_uid); ++ host_uid_map = container_root_uid; + + container_root_gid = mapped_nsid_add(conf, nsgid, ID_TYPE_GID); + if (!container_root_gid) +@@ -3886,7 +5592,7 @@ static struct lxc_list *get_minimal_idmap(const struct lxc_conf *conf, + egid = getegid(); + if (egid >= container_root_gid->hostid && + egid < (container_root_gid->hostid + container_root_gid->range)) +- host_gid_map = move_ptr(container_root_gid); ++ host_gid_map = container_root_gid; + + /* Check whether the {g,u}id of the user has a mapping. */ + if (!host_uid_map) +@@ -3909,35 +5615,45 @@ static struct lxc_list *get_minimal_idmap(const struct lxc_conf *conf, + tmplist = malloc(sizeof(*tmplist)); + if (!tmplist) + return NULL; +- /* idmap will now keep track of that memory. */ +- lxc_list_add_elem(tmplist, move_ptr(host_uid_map)); ++ lxc_list_add_elem(tmplist, container_root_uid); + lxc_list_add_tail(idmap, tmplist); + +- if (container_root_uid) { ++ if (host_uid_map && (host_uid_map != container_root_uid)) { ++ /* idmap will now keep track of that memory. */ ++ move_ptr(container_root_uid); ++ + /* Add container root to the map. */ + tmplist = malloc(sizeof(*tmplist)); + if (!tmplist) + return NULL; +- /* idmap will now keep track of that memory. */ +- lxc_list_add_elem(tmplist, move_ptr(container_root_uid)); ++ lxc_list_add_elem(tmplist, host_uid_map); + lxc_list_add_tail(idmap, tmplist); + } ++ /* idmap will now keep track of that memory. */ ++ move_ptr(container_root_uid); ++ /* idmap will now keep track of that memory. */ ++ move_ptr(host_uid_map); + + tmplist = malloc(sizeof(*tmplist)); + if (!tmplist) + return NULL; +- /* idmap will now keep track of that memory. */ +- lxc_list_add_elem(tmplist, move_ptr(host_gid_map)); ++ lxc_list_add_elem(tmplist, container_root_gid); + lxc_list_add_tail(idmap, tmplist); + +- if (container_root_gid) { ++ if (host_gid_map && (host_gid_map != container_root_gid)) { ++ /* idmap will now keep track of that memory. */ ++ move_ptr(container_root_gid); ++ + tmplist = malloc(sizeof(*tmplist)); + if (!tmplist) + return NULL; +- /* idmap will now keep track of that memory. */ +- lxc_list_add_elem(tmplist, move_ptr(container_root_gid)); ++ lxc_list_add_elem(tmplist, host_gid_map); + lxc_list_add_tail(idmap, tmplist); + } ++ /* idmap will now keep track of that memory. */ ++ move_ptr(container_root_gid); ++ /* idmap will now keep track of that memory. */ ++ move_ptr(host_gid_map); + + TRACE("Allocated minimal idmapping for ns uid %d and ns gid %d", nsuid, nsgid); + +@@ -3966,13 +5682,9 @@ int userns_exec_1(const struct lxc_conf *conf, int (*fn)(void *), void *data, + call_cleaner(lxc_free_idmap) struct lxc_list *idmap = NULL; + int ret = -1, status = -1; + char c = '1'; +- struct userns_fn_data d = { +- .arg = data, +- .fn = fn, +- .fn_name = fn_name, +- }; + pid_t pid; + int pipe_fds[2]; ++ struct userns_fn_data d; + + if (!conf) + return -EINVAL; +@@ -3985,6 +5697,9 @@ int userns_exec_1(const struct lxc_conf *conf, int (*fn)(void *), void *data, + if (ret < 0) + return -errno; + ++ d.fn = fn; ++ d.fn_name = fn_name; ++ d.arg = data; + d.p[0] = pipe_fds[0]; + d.p[1] = pipe_fds[1]; + +@@ -4344,226 +6059,6 @@ on_error: + return ret; + } + +-static int add_idmap_entry(struct lxc_list *idmap, enum idtype idtype, +- unsigned long nsid, unsigned long hostid, +- unsigned long range) +-{ +- __do_free struct id_map *new_idmap = NULL; +- __do_free struct lxc_list *new_list = NULL; +- +- new_idmap = zalloc(sizeof(*new_idmap)); +- if (!new_idmap) +- return ret_errno(ENOMEM); +- +- new_idmap->idtype = idtype; +- new_idmap->hostid = hostid; +- new_idmap->nsid = nsid; +- new_idmap->range = range; +- +- new_list = zalloc(sizeof(*new_list)); +- if (!new_list) +- return ret_errno(ENOMEM); +- +- new_list->elem = move_ptr(new_idmap); +- lxc_list_add_tail(idmap, move_ptr(new_list)); +- +- INFO("Adding id map: type %c nsid %lu hostid %lu range %lu", +- idtype == ID_TYPE_UID ? 'u' : 'g', nsid, hostid, range); +- return 0; +-} +- +-int userns_exec_mapped_root(const char *path, int path_fd, +- const struct lxc_conf *conf) +-{ +- call_cleaner(lxc_free_idmap) struct lxc_list *idmap = NULL; +- __do_close int fd = -EBADF; +- int target_fd = -EBADF; +- char c = '1'; +- ssize_t ret; +- pid_t pid; +- int sock_fds[2]; +- uid_t container_host_uid, hostuid; +- gid_t container_host_gid, hostgid; +- struct stat st; +- +- if (!conf || (!path && path_fd < 0)) +- return ret_errno(EINVAL); +- +- if (!path) +- path = "(null)"; +- +- container_host_uid = get_mapped_rootid(conf, ID_TYPE_UID); +- if (!uid_valid(container_host_uid)) +- return log_error(-1, "No uid mapping for container root"); +- +- container_host_gid = get_mapped_rootid(conf, ID_TYPE_GID); +- if (!gid_valid(container_host_gid)) +- return log_error(-1, "No gid mapping for container root"); +- +- if (path_fd < 0) { +- fd = open(path, O_CLOEXEC | O_NOCTTY); +- if (fd < 0) +- return log_error_errno(-errno, errno, "Failed to open \"%s\"", path); +- target_fd = fd; +- } else { +- target_fd = path_fd; +- } +- +- hostuid = geteuid(); +- /* We are root so chown directly. */ +- if (hostuid == 0) { +- ret = fchown(target_fd, container_host_uid, container_host_gid); +- if (ret) +- return log_error_errno(-errno, errno, +- "Failed to fchown(%d(%s), %d, %d)", +- target_fd, path, container_host_uid, +- container_host_gid); +- return log_trace(0, "Chowned %d(%s) to uid %d and %d", target_fd, path, +- container_host_uid, container_host_gid); +- } +- +- /* The container's root host id matches */ +- if (container_host_uid == hostuid) +- return log_info(0, "Container root id is mapped to our uid"); +- +- /* Get the current ids of our target. */ +- ret = fstat(target_fd, &st); +- if (ret) +- return log_error_errno(-errno, errno, "Failed to stat \"%s\"", path); +- +- hostgid = getegid(); +- if (st.st_uid == hostuid && mapped_hostid(st.st_gid, conf, ID_TYPE_GID) < 0) { +- ret = fchown(target_fd, -1, hostgid); +- if (ret) +- return log_error_errno(-errno, errno, +- "Failed to fchown(%d(%s), -1, %d)", +- target_fd, path, hostgid); +- TRACE("Chowned %d(%s) to -1:%d", target_fd, path, hostgid); +- } +- +- idmap = malloc(sizeof(*idmap)); +- if (!idmap) +- return -ENOMEM; +- lxc_list_init(idmap); +- +- /* "u:0:rootuid:1" */ +- ret = add_idmap_entry(idmap, ID_TYPE_UID, 0, container_host_uid, 1); +- if (ret < 0) +- return log_error_errno(ret, -ret, "Failed to add idmap entry"); +- +- /* "u:hostuid:hostuid:1" */ +- ret = add_idmap_entry(idmap, ID_TYPE_UID, hostuid, hostuid, 1); +- if (ret < 0) +- return log_error_errno(ret, -ret, "Failed to add idmap entry"); +- +- /* "g:0:rootgid:1" */ +- ret = add_idmap_entry(idmap, ID_TYPE_GID, 0, container_host_gid, 1); +- if (ret < 0) +- return log_error_errno(ret, -ret, "Failed to add idmap entry"); +- +- /* "g:hostgid:hostgid:1" */ +- ret = add_idmap_entry(idmap, ID_TYPE_GID, hostgid, hostgid, 1); +- if (ret < 0) +- return log_error_errno(ret, -ret, "Failed to add idmap entry"); +- +- if (hostgid != st.st_gid) { +- /* "g:pathgid:rootgid+pathgid:1" */ +- ret = add_idmap_entry(idmap, ID_TYPE_GID, st.st_gid, +- container_host_gid + (gid_t)st.st_gid, 1); +- if (ret < 0) +- return log_error_errno(ret, -ret, "Failed to add idmap entry"); +- } +- +- ret = socketpair(PF_LOCAL, SOCK_STREAM | SOCK_CLOEXEC, 0, sock_fds); +- if (ret < 0) +- return -errno; +- +- pid = fork(); +- if (pid < 0) { +- SYSERROR("Failed to create new process"); +- goto on_error; +- } +- +- if (pid == 0) { +- close_prot_errno_disarm(sock_fds[1]); +- +- ret = unshare(CLONE_NEWUSER); +- if (ret < 0) { +- SYSERROR("Failed to unshare new user namespace"); +- _exit(EXIT_FAILURE); +- } +- +- ret = lxc_write_nointr(sock_fds[0], &c, 1); +- if (ret != 1) +- _exit(EXIT_FAILURE); +- +- ret = lxc_read_nointr(sock_fds[0], &c, 1); +- if (ret != 1) +- _exit(EXIT_FAILURE); +- +- close_prot_errno_disarm(sock_fds[0]); +- +- if (!lxc_switch_uid_gid(0, 0)) +- _exit(EXIT_FAILURE); +- +- if (!lxc_setgroups(0, NULL)) +- _exit(EXIT_FAILURE); +- +- ret = fchown(target_fd, 0, st.st_gid); +- if (ret) { +- SYSERROR("Failed to chown %d(%s) to -1:%d", target_fd, path, st.st_gid); +- _exit(EXIT_FAILURE); +- } +- +- TRACE("Chowned %d(%s) to 0:%d", target_fd, path, st.st_gid); +- _exit(EXIT_SUCCESS); +- } +- +- close_prot_errno_disarm(sock_fds[0]); +- +- if (lxc_log_get_level() == LXC_LOG_LEVEL_TRACE || +- conf->loglevel == LXC_LOG_LEVEL_TRACE) { +- struct id_map *map; +- struct lxc_list *it; +- +- lxc_list_for_each(it, idmap) { +- map = it->elem; +- TRACE("Establishing %cid mapping for \"%d\" in new user namespace: nsuid %lu - hostid %lu - range %lu", +- (map->idtype == ID_TYPE_UID) ? 'u' : 'g', pid, map->nsid, map->hostid, map->range); +- } +- } +- +- ret = lxc_read_nointr(sock_fds[1], &c, 1); +- if (ret != 1) { +- SYSERROR("Failed waiting for child process %d\" to tell us to proceed", pid); +- goto on_error; +- } +- +- /* Set up {g,u}id mapping for user namespace of child process. */ +- ret = lxc_map_ids(idmap, pid); +- if (ret < 0) { +- ERROR("Error setting up {g,u}id mappings for child process \"%d\"", pid); +- goto on_error; +- } +- +- /* Tell child to proceed. */ +- ret = lxc_write_nointr(sock_fds[1], &c, 1); +- if (ret != 1) { +- SYSERROR("Failed telling child process \"%d\" to proceed", pid); +- goto on_error; +- } +- +-on_error: +- close_prot_errno_disarm(sock_fds[0]); +- close_prot_errno_disarm(sock_fds[1]); +- +- /* Wait for child to finish. */ +- if (pid < 0) +- return -1; +- +- return wait_for_pid(pid); +-} +- + /* not thread-safe, do not use from api without first forking */ + static char *getuname(void) + { +@@ -4775,3 +6270,89 @@ struct lxc_list *sort_cgroup_settings(struct lxc_list *cgroup_settings) + + return result; + } ++ ++#ifdef HAVE_ISULAD ++/*isulad clear init args*/ ++int lxc_clear_init_args(struct lxc_conf *lxc_conf) ++{ ++ int i; ++ ++ for (i = 0; i < lxc_conf->init_argc; i++) { ++ free(lxc_conf->init_argv[i]); ++ lxc_conf->init_argv[i] = NULL; ++ } ++ free(lxc_conf->init_argv); ++ lxc_conf->init_argv = NULL; ++ lxc_conf->init_argc = 0; ++ ++ return 0; ++} ++ ++/*isulad clear init groups*/ ++int lxc_clear_init_groups(struct lxc_conf *lxc_conf) ++{ ++ free(lxc_conf->init_groups); ++ lxc_conf->init_groups = NULL; ++ lxc_conf->init_groups_len = 0; ++ ++ return 0; ++} ++ ++/*isulad: clear populate devices*/ ++int lxc_clear_populate_devices(struct lxc_conf *c) ++{ ++ struct lxc_list *it = NULL; ++ struct lxc_list *next = NULL; ++ ++ lxc_list_for_each_safe(it, &c->populate_devs, next) { ++ struct lxc_populate_devs *dev_elem = it->elem; ++ lxc_list_del(it); ++ free(dev_elem->name); ++ free(dev_elem->type); ++ free(dev_elem); ++ free(it); ++ } ++ return 0; ++} ++ ++/*isulad: clear rootfs masked paths*/ ++int lxc_clear_rootfs_masked_paths(struct lxc_conf *c) ++{ ++ struct lxc_list *it = NULL; ++ struct lxc_list *next = NULL; ++ ++ lxc_list_for_each_safe(it, &c->rootfs.maskedpaths, next) { ++ lxc_list_del(it); ++ free(it->elem); ++ free(it); ++ } ++ return 0; ++} ++ ++/*isulad: clear rootfs ro paths*/ ++int lxc_clear_rootfs_ro_paths(struct lxc_conf *c) ++{ ++ struct lxc_list *it = NULL; ++ struct lxc_list *next = NULL; ++ ++ lxc_list_for_each_safe(it, &c->rootfs.ropaths, next) { ++ lxc_list_del(it); ++ free(it->elem); ++ free(it); ++ } ++ return 0; ++} ++ ++/*isulad: close error pipe */ ++void lxc_close_error_pipe(int *errpipe) ++{ ++ if (errpipe[0] >= 0) { ++ close(errpipe[0]); ++ errpipe[0] = -1; ++ } ++ if (errpipe[1] >= 0) { ++ close(errpipe[1]); ++ errpipe[1] = -1; ++ } ++} ++#endif +diff --git a/src/lxc/conf.h b/src/lxc/conf.h +index b72afbaa5..4b6409e3e 100644 +--- a/src/lxc/conf.h ++++ b/src/lxc/conf.h +@@ -23,6 +23,10 @@ + #include "start.h" + #include "terminal.h" + ++#ifdef HAVE_ISULAD ++#include "oci_runtime_hooks.h" ++#endif ++ + #if HAVE_SYS_RESOURCE_H + #include + #endif +@@ -60,9 +64,6 @@ struct lxc_cgroup { + struct /* meta */ { + char *controllers; + char *dir; +- char *monitor_dir; +- char *container_dir; +- char *namespace_dir; + bool relative; + }; + }; +@@ -146,6 +147,8 @@ struct lxc_tty_info { + * @mountflags : the portion of @options that are flags + * @data : the portion of @options that are not flags + * @managed : whether it is managed by LXC ++ * @maskedpaths: A list of paths to be msked over inside the container ++ * @ropaths : A list of paths to be remounted with readonly inside the container + */ + struct lxc_rootfs { + char *path; +@@ -155,6 +158,16 @@ struct lxc_rootfs { + unsigned long mountflags; + char *data; + bool managed; ++ ++#ifdef HAVE_ISULAD ++ /* isulad: maskedpaths */ ++ struct lxc_list maskedpaths; ++ /* isulad: ropaths */ ++ struct lxc_list ropaths; ++ /* isulad: errfd */ ++ int errfd; ++#endif ++ + }; + + /* +@@ -203,6 +216,11 @@ enum lxchooks { + LXCHOOK_CLONE, + LXCHOOK_DESTROY, + LXCHOOK_START_HOST, ++#ifdef HAVE_ISULAD ++ OCI_HOOK_PRESTART, ++ OCI_HOOK_POSTSTART, ++ OCI_HOOK_POSTSTOP, ++#endif + NUM_LXC_HOOKS + }; + +@@ -233,6 +251,27 @@ struct device_item { + int global_rule; + }; + ++#ifdef HAVE_ISULAD ++/* ++ * iSulad: Defines a structure to store the devices which will ++ * be attached in container ++ * @name : the target device name in container ++ * @type : the type of target device "c" or "b" ++ * @mode : file mode for the device ++ * @maj : major number for the device ++ * @min : minor number for the device ++ */ ++struct lxc_populate_devs { ++ char *name; ++ char *type; ++ mode_t file_mode; ++ int maj; ++ int min; ++ uid_t uid; ++ gid_t gid; ++}; ++#endif ++ + struct lxc_conf { + /* Pointer to the name of the container. Do not free! */ + const char *name; +@@ -401,11 +440,39 @@ struct lxc_conf { + /* Absolute path (in the container) to the shared mount point */ + char *path_cont; + } shmount; ++ ++#ifdef HAVE_ISULAD ++ /* ++ * isulad: support oci hook ++ * */ ++ oci_runtime_spec_hooks *ocihooks; ++ ++ /* isulad add: init args used to repalce init_cmd*/ ++ char **init_argv; ++ size_t init_argc; ++ ++ gid_t *init_groups; ++ size_t init_groups_len; ++ ++ /* populate devices*/ ++ struct lxc_list populate_devs; ++ mode_t umask; //umask value ++ ++ char *container_info_file; ++ ++ int exit_fd; /* exit fifo fd*/ ++ ++ char *errmsg; /* record error messages */ ++ ++ int errpipe[2];//pipdfd for get error message of child or grandchild process. ++ ++ char *systemd; //systemd value ++#endif ++ + }; + + extern int write_id_mapping(enum idtype idtype, pid_t pid, const char *buf, +- size_t buf_size) +-__access_r(3, 4); ++ size_t buf_size); + + #ifdef HAVE_TLS + extern thread_local struct lxc_conf *current_config; +@@ -439,19 +506,22 @@ extern int lxc_setup_rootfs_prepare_root(struct lxc_conf *conf, + const char *name, const char *lxcpath); + extern int lxc_setup(struct lxc_handler *handler); + extern int lxc_setup_parent(struct lxc_handler *handler); ++#ifdef HAVE_ISULAD ++extern int setup_resource_limits(struct lxc_list *limits, pid_t pid, int errfd); ++#else + extern int setup_resource_limits(struct lxc_list *limits, pid_t pid); ++#endif + extern int find_unmapped_nsid(const struct lxc_conf *conf, enum idtype idtype); + extern int mapped_hostid(unsigned id, const struct lxc_conf *conf, + enum idtype idtype); ++extern int chown_mapped_root(const char *path, const struct lxc_conf *conf); + extern int userns_exec_1(const struct lxc_conf *conf, int (*fn)(void *), + void *data, const char *fn_name); + extern int userns_exec_full(struct lxc_conf *conf, int (*fn)(void *), + void *data, const char *fn_name); +-extern int parse_mntopts(const char *mntopts, unsigned long *mntflags, +- char **mntdata); + extern int parse_propagationopts(const char *mntopts, unsigned long *pflags); + extern void tmp_proc_unmount(struct lxc_conf *lxc_conf); +-extern void turn_into_dependent_mounts(void); ++extern void remount_all_slave(void); + extern void suggest_default_idmap(void); + extern FILE *make_anonymous_mount_file(struct lxc_list *mount, + bool include_nesting_helpers); +@@ -473,11 +543,24 @@ extern int lxc_clear_namespace(struct lxc_conf *c); + extern int userns_exec_minimal(const struct lxc_conf *conf, + int (*fn_parent)(void *), void *fn_parent_data, + int (*fn_child)(void *), void *fn_child_data); +-extern int userns_exec_mapped_root(const char *path, int path_fd, +- const struct lxc_conf *conf); +-static inline int chown_mapped_root(const char *path, const struct lxc_conf *conf) +-{ +- return userns_exec_mapped_root(path, -EBADF, conf); +-} ++#ifdef HAVE_ISULAD ++// isulad modify ++extern int parse_mntopts(const char *mntopts, unsigned long *mntflags, ++ unsigned long *pflags, char **mntdata); ++#else ++extern int parse_mntopts(const char *mntopts, unsigned long *mntflags, ++ char **mntdata); ++#endif + ++#ifdef HAVE_ISULAD ++// isulad add ++int lxc_clear_init_args(struct lxc_conf *lxc_conf); ++int lxc_clear_init_groups(struct lxc_conf *lxc_conf); ++int lxc_clear_populate_devices(struct lxc_conf *c); ++int lxc_clear_rootfs_masked_paths(struct lxc_conf *c); ++int lxc_clear_rootfs_ro_paths(struct lxc_conf *c); ++int lxc_drop_caps(struct lxc_conf *conf); ++int run_oci_hooks(const char *name, const char *hookname, struct lxc_conf *conf, const char *lxcpath); ++void lxc_close_error_pipe(int *errpipe); ++#endif + #endif /* __LXC_CONF_H */ +diff --git a/src/lxc/confile.c b/src/lxc/confile.c +index 4c27e7d4b..b1d101a9d 100644 +--- a/src/lxc/confile.c ++++ b/src/lxc/confile.c +@@ -147,6 +147,18 @@ lxc_config_define(tty_dir); + lxc_config_define(uts_name); + lxc_config_define(sysctl); + lxc_config_define(proc); ++#ifdef HAVE_ISULAD ++lxc_config_define(init_args); ++lxc_config_define(init_groups); ++lxc_config_define(populate_device); ++lxc_config_define(umask); ++lxc_config_define(rootfs_masked_paths); ++lxc_config_define(rootfs_ro_paths); ++lxc_config_define(systemd); ++lxc_config_define(console_log_driver); ++lxc_config_define(console_syslog_tag); ++lxc_config_define(console_syslog_facility); ++#endif + + /* + * Important Note: +@@ -259,6 +271,18 @@ static struct lxc_config_t config_jump_table[] = { + { "lxc.uts.name", set_config_uts_name, get_config_uts_name, clr_config_uts_name, }, + { "lxc.sysctl", set_config_sysctl, get_config_sysctl, clr_config_sysctl, }, + { "lxc.proc", set_config_proc, get_config_proc, clr_config_proc, }, ++#ifdef HAVE_ISULAD ++ { "lxc.isulad.init.args", set_config_init_args, get_config_init_args, clr_config_init_args, }, ++ { "lxc.isulad.init.groups", set_config_init_groups, get_config_init_groups, clr_config_init_groups, }, ++ { "lxc.isulad.populate.device", set_config_populate_device, get_config_populate_device, clr_config_populate_device, }, ++ { "lxc.isulad.umask", set_config_umask, get_config_umask, clr_config_umask, }, ++ { "lxc.isulad.rootfs.maskedpaths", set_config_rootfs_masked_paths, get_config_rootfs_masked_paths, clr_config_rootfs_masked_paths, }, ++ { "lxc.isulad.rootfs.ropaths", set_config_rootfs_ro_paths, get_config_rootfs_ro_paths, clr_config_rootfs_ro_paths, }, ++ { "lxc.isulad.systemd", set_config_systemd, get_config_systemd, clr_config_systemd, }, ++ { "lxc.console.logdriver", set_config_console_log_driver, get_config_console_log_driver, clr_config_console_log_driver, }, ++ { "lxc.console.syslog_tag", set_config_console_syslog_tag, get_config_console_syslog_tag, clr_config_console_syslog_tag, }, ++ { "lxc.console.syslog_facility", set_config_console_syslog_facility, get_config_console_syslog_facility, clr_config_console_syslog_facility, }, ++#endif + }; + + static const size_t config_jump_table_size = sizeof(config_jump_table) / sizeof(struct lxc_config_t); +@@ -300,18 +324,14 @@ static int set_config_net_type(const char *key, const char *value, + netdev->type = LXC_NET_VETH; + lxc_list_init(&netdev->priv.veth_attr.ipv4_routes); + lxc_list_init(&netdev->priv.veth_attr.ipv6_routes); +- if (!lxc_veth_flag_to_mode(netdev->priv.veth_attr.mode)) +- lxc_veth_mode_to_flag(&netdev->priv.veth_attr.mode, "bridge"); ++ lxc_veth_mode_to_flag(&netdev->priv.veth_attr.mode, "bridge"); + } else if (strcmp(value, "macvlan") == 0) { + netdev->type = LXC_NET_MACVLAN; +- if (!lxc_macvlan_flag_to_mode(netdev->priv.veth_attr.mode)) +- lxc_macvlan_mode_to_flag(&netdev->priv.macvlan_attr.mode, "private"); ++ lxc_macvlan_mode_to_flag(&netdev->priv.macvlan_attr.mode, "private"); + } else if (strcmp(value, "ipvlan") == 0) { + netdev->type = LXC_NET_IPVLAN; +- if (!lxc_ipvlan_flag_to_mode(netdev->priv.ipvlan_attr.mode)) +- lxc_ipvlan_mode_to_flag(&netdev->priv.ipvlan_attr.mode, "l3"); +- if (!lxc_ipvlan_flag_to_isolation(netdev->priv.ipvlan_attr.isolation)) +- lxc_ipvlan_isolation_to_flag(&netdev->priv.ipvlan_attr.isolation, "bridge"); ++ lxc_ipvlan_mode_to_flag(&netdev->priv.ipvlan_attr.mode, "l3"); ++ lxc_ipvlan_isolation_to_flag(&netdev->priv.ipvlan_attr.isolation, "bridge"); + } else if (strcmp(value, "vlan") == 0) { + netdev->type = LXC_NET_VLAN; + } else if (strcmp(value, "phys") == 0) { +@@ -1348,6 +1368,10 @@ static int set_config_environment(const char *key, const char *value, + { + struct lxc_list *list_item = NULL; + ++#ifdef HAVE_ISULAD ++ char *replaced = NULL; ++#endif ++ + if (lxc_config_value_empty(value)) + return lxc_clear_environment(lxc_conf); + +@@ -1368,7 +1392,16 @@ static int set_config_environment(const char *key, const char *value, + env_var[1] = env_val; + list_item->elem = lxc_string_join("=", env_var, false); + } else { ++#ifdef HAVE_ISULAD ++ /* isulad: recover space replaced by SPACE_MAGIC_STR */ ++ replaced = lxc_string_replace(SPACE_MAGIC_STR, " ", value); ++ if(!replaced) ++ goto on_error; ++ ++ list_item->elem = replaced; ++#else + list_item->elem = strdup(value); ++#endif + } + + if (!list_item->elem) +@@ -2291,11 +2324,14 @@ static int set_config_console_rotate(const char *key, const char *value, + if (lxc_safe_uint(value, &lxc_conf->console.log_rotate) < 0) + return -1; + ++#ifndef HAVE_ISULAD ++ /* isulad: support rotate muti-files */ + if (lxc_conf->console.log_rotate > 1) { + ERROR("The \"lxc.console.rotate\" config key can only be set " + "to 0 or 1"); + return -1; + } ++#endif + + return 0; + } +@@ -2581,6 +2617,11 @@ static int set_config_rootfs_options(const char *key, const char *value, + int ret; + struct lxc_rootfs *rootfs = &lxc_conf->rootfs; + ++#ifdef HAVE_ISULAD ++ ret = parse_mntopts(value, &mflags, &pflags, &mdata); ++ if (ret < 0) ++ return -EINVAL; ++#else + ret = parse_mntopts(value, &mflags, &mdata); + if (ret < 0) + return -EINVAL; +@@ -2590,6 +2631,7 @@ static int set_config_rootfs_options(const char *key, const char *value, + free(mdata); + return -EINVAL; + } ++#endif + + ret = set_config_string_item(&opts, value); + if (ret < 0) { +@@ -2722,6 +2764,54 @@ struct parse_line_conf { + bool from_include; + }; + ++#ifdef HAVE_ISULAD ++// escape_string_decode compress some escape characters ++static char *escape_string_decode(const char *src) ++{ ++ size_t src_end = 0; ++ size_t dst_end = 0; ++ size_t len = 0; ++ char *dst = NULL; ++ ++ if (src == NULL) { ++ return NULL; ++ } ++ ++ len = strlen(src); ++ if (len == 0) { ++ return NULL; ++ } ++ ++ dst = calloc(1, len + 1); ++ if (dst == NULL) { ++ ERROR("Out of memory"); ++ return NULL; ++ } ++ ++ while(src_end < len) { ++ if (src[src_end] == '\\') { ++ switch (src[++src_end]) ++ { ++ case 'r': dst[dst_end] = '\r'; break; ++ case 'n': dst[dst_end] = '\n'; break; ++ case 'f': dst[dst_end] = '\f'; break; ++ case 'b': dst[dst_end] = '\b'; break; ++ case 't': dst[dst_end] = '\t'; break; ++ case '\\': dst[dst_end] = '\\'; break; ++ // default do not decode ++ default: dst[dst_end++] = '\\'; dst[dst_end] = src[src_end]; break; ++ } ++ } else { ++ dst[dst_end] = src[src_end]; ++ } ++ dst_end++; ++ src_end++; ++ } ++ ++ return dst; ++} ++#endif ++ + static int parse_line(char *buffer, void *data) + { + char *dot, *key, *line, *linep, *value; +@@ -2730,6 +2820,9 @@ static int parse_line(char *buffer, void *data) + int ret = 0; + char *dup = buffer; + struct parse_line_conf *plc = data; ++#ifdef HAVE_ISULAD ++ char *value_decode = NULL; ++#endif + + /* If there are newlines in the config file we should keep them. */ + empty_line = lxc_is_line_empty(dup); +@@ -2796,10 +2889,21 @@ static int parse_line(char *buffer, void *data) + goto on_error; + } + ++#ifdef HAVE_ISULAD ++ value_decode = escape_string_decode(value); ++ if (value_decode == NULL) { ++ ERROR("Value %s decode failed", value); ++ } ++ ret = config->set(key, value_decode ? value_decode: value, plc->conf, NULL); ++#else + ret = config->set(key, value, plc->conf, NULL); ++#endif + + on_error: + free(linep); ++#ifdef HAVE_ISULAD ++ free(value_decode); ++#endif + + return ret; + } +@@ -4192,7 +4296,12 @@ static int get_config_prlimit(const char *key, char *retv, int inlen, + + lxc_list_for_each(it, &c->limits) { + /* 2 colon separated 64 bit integers or the word 'unlimited' */ ++#ifdef HAVE_ISULAD ++#define MAX_LIMIT_BUF_LEN ((INTTYPE_TO_STRLEN(uint64_t) * 2) + 2) ++ char buf[MAX_LIMIT_BUF_LEN] = { 0 }; ++#else + char buf[INTTYPE_TO_STRLEN(uint64_t) * 2 + 2]; ++#endif + int partlen; + struct lxc_limit *lim = it->elem; + +@@ -4200,17 +4309,34 @@ static int get_config_prlimit(const char *key, char *retv, int inlen, + memcpy(buf, "unlimited", STRLITERALLEN("unlimited") + 1); + partlen = STRLITERALLEN("unlimited"); + } else { ++#ifdef HAVE_ISULAD ++ partlen = snprintf(buf, MAX_LIMIT_BUF_LEN, "%" PRIu64, (uint64_t)lim->limit.rlim_cur); ++ if (partlen < 0 || partlen >= MAX_LIMIT_BUF_LEN) { ++ return -1; ++ } ++#else + partlen = sprintf(buf, "%" PRIu64, + (uint64_t)lim->limit.rlim_cur); ++#endif + } + + if (lim->limit.rlim_cur != lim->limit.rlim_max) { + if (lim->limit.rlim_max == RLIM_INFINITY) + memcpy(buf + partlen, ":unlimited", + STRLITERALLEN(":unlimited") + 1); ++#ifdef HAVE_ISULAD ++ else { ++ int nret = snprintf(buf + partlen, (MAX_LIMIT_BUF_LEN - partlen), ++ ":%" PRIu64, (uint64_t)lim->limit.rlim_max); ++ if (nret < 0 || nret >= (MAX_LIMIT_BUF_LEN - partlen)) { ++ return -1; ++ } ++ } ++#else + else + sprintf(buf + partlen, ":%" PRIu64, + (uint64_t)lim->limit.rlim_max); ++#endif + } + + if (get_all) { +@@ -6098,3 +6224,506 @@ int lxc_list_net(struct lxc_conf *c, const char *key, char *retv, int inlen) + + return fulllen; + } ++ ++#ifdef HAVE_ISULAD ++/* isulad: set config for init args */ ++static int set_config_init_args(const char *key, const char *value, ++ struct lxc_conf *lxc_conf, void *data) ++{ ++ int ret = 0; ++ char *tmp = NULL; ++ char *new_value = NULL; ++ ++ ret = set_config_string_item(&new_value, value); ++ if (ret || !new_value) ++ return ret; ++ ++ tmp = realloc(lxc_conf->init_argv, (lxc_conf->init_argc + 1) * sizeof(char *)); ++ if (!tmp) { ++ ERROR("Out of memory"); ++ free(new_value); ++ return -1; ++ } ++ ++ lxc_conf->init_argv = (char **)tmp; ++ ++ lxc_conf->init_argv[lxc_conf->init_argc] = new_value; ++ lxc_conf->init_argc++; ++ ++ return 0; ++} ++ ++/* isulad: get config init args */ ++static int get_config_init_args(const char *key, char *retv, int inlen, ++ struct lxc_conf *c, void *data) ++{ ++ int i, len, fulllen = 0; ++ ++ if (!retv) ++ inlen = 0; ++ else ++ memset(retv, 0, inlen); ++ ++ for (i = 0; i < c->init_argc; i++) { ++ strprint(retv, inlen, "%s", c->init_argv[i]); ++ } ++ ++ return fulllen; ++} ++ ++/* isulad: clr config init args*/ ++static inline int clr_config_init_args(const char *key, struct lxc_conf *c, ++ void *data) ++{ ++ return lxc_clear_init_args(c); ++} ++ ++/* isulad: set config for init groups */ ++static int set_config_init_groups(const char *key, const char *value, ++ struct lxc_conf *lxc_conf, void *data) ++{ ++ char *groups = NULL; ++ char *token = NULL; ++ int ret = -1; ++ ++ if (lxc_config_value_empty(value)) ++ return lxc_clear_init_groups(lxc_conf); ++ ++ groups = strdup(value); ++ if (!groups) ++ return -1; ++ ++ /* In case several capability keep is specified in a single line ++ * split these caps in a single element for the list. ++ */ ++ lxc_iterate_parts(token, groups, " \t") { ++ gid_t *tmp = NULL; ++ if (lxc_mem_realloc((void **)&tmp, (lxc_conf->init_groups_len + 1) * sizeof(gid_t), lxc_conf->init_groups, ++ (lxc_conf->init_groups_len) * sizeof(gid_t)) != 0) { ++ ERROR("Out of memory"); ++ goto on_error; ++ } ++ lxc_conf->init_groups = tmp; ++ tmp[lxc_conf->init_groups_len] = atoll(token); ++ lxc_conf->init_groups_len++; ++ } ++ ++ ret = 0; ++ ++on_error: ++ free(groups); ++ ++ return ret; ++} ++ ++/* isulad: get config init groups */ ++static int get_config_init_groups(const char *key, char *retv, int inlen, ++ struct lxc_conf *c, void *data) ++{ ++ int i, len, fulllen = 0; ++ ++ if (!retv) ++ inlen = 0; ++ else ++ memset(retv, 0, inlen); ++ ++ for (i = 0; i < c->init_groups_len; i++) { ++ strprint(retv, inlen, "%u\n", c->init_groups[i]); ++ } ++ ++ return fulllen; ++} ++ ++/* isulad: clr config init args*/ ++static inline int clr_config_init_groups(const char *key, struct lxc_conf *c, ++ void *data) ++{ ++ return lxc_clear_init_groups(c); ++} ++ ++/* isulad: set config for populate device */ ++static int set_config_populate_device(const char *key, const char *value, ++ struct lxc_conf *lxc_conf, void *data) ++{ ++ int ret = 0, major = 0, minor = 0; ++ uid_t uid = (uid_t)-1; ++ gid_t gid = (gid_t)-1; ++ char name[4096] = {0}; /* MAX dev path name */ ++ char type[3] = {0}; ++ char *replace_value = NULL; ++ mode_t filemode = 0; ++ struct lxc_list *iter = NULL; ++ struct lxc_list *dev_list = NULL; ++ struct lxc_populate_devs *dev_elem = NULL; ++ ++ if (lxc_config_value_empty(value)) ++ return lxc_clear_populate_devices(lxc_conf); ++ ++ /* lxc.populate.device = PATH_IN_CONTAINER:DEVICETYPE:MAJOR:MINOR:MODE:UID:GID ++ * For e.g. lxc.populate.device = /dev/sda:b:8:0:0666:0:0 ++ */ ++ ret = sscanf(value, "%4095[^:]:%2[^:]:%i:%i:%i:%u:%u", name, type, &major, &minor, &filemode, &uid, &gid); ++ if (ret != 7) ++ return -1; ++ ++ /* find existing list element */ ++ lxc_list_for_each(iter, &lxc_conf->populate_devs) { ++ dev_elem = iter->elem; ++ ++ if (strcmp(name, dev_elem->name) != 0) ++ continue; ++ ++ replace_value = safe_strdup(type); ++ ++ free(dev_elem->type); ++ dev_elem->type = replace_value; ++ dev_elem->file_mode = filemode; ++ dev_elem->maj = major; ++ dev_elem->min = minor; ++ dev_elem->uid = (uid_t)uid; ++ dev_elem->gid = (gid_t)gid; ++ return 0; ++ } ++ ++ /* allocate list element */ ++ dev_list = malloc(sizeof(*dev_list)); ++ if (dev_list == NULL) ++ goto on_error; ++ ++ lxc_list_init(dev_list); ++ ++ dev_elem = malloc(sizeof(*dev_elem)); ++ if (dev_elem == NULL) ++ goto on_error; ++ memset(dev_elem, 0, sizeof(*dev_elem)); ++ ++ dev_elem->name = safe_strdup(name); ++ ++ dev_elem->type = safe_strdup(type); ++ ++ dev_elem->file_mode = filemode; ++ dev_elem->maj = major; ++ dev_elem->min = minor; ++ dev_elem->uid = (uid_t)uid; ++ dev_elem->gid = (gid_t)gid; ++ ++ lxc_list_add_elem(dev_list, dev_elem); ++ ++ lxc_list_add_tail(&lxc_conf->populate_devs, dev_list); ++ ++ return 0; ++ ++on_error: ++ free(dev_list); ++ if (dev_elem) { ++ free(dev_elem->name); ++ free(dev_elem->type); ++ free(dev_elem); ++ } ++ return -1; ++} ++ ++/* isulad: get config populate device ++ * If you ask for 'lxc.populate.device', then all populate device ++ * entries will be printed, in 'lxc.populate.device = path_in_container:type:major:minor:mode:uid:gid' format. ++ * For e.g. lxc.populate.device = /dev/sda:b:8:0:0666:0:0 ++ */ ++static int get_config_populate_device(const char *key, char *retv, int inlen, ++ struct lxc_conf *c, void *data) ++{ ++ int len; ++ struct lxc_list *it = NULL; ++ int fulllen = 0; ++ ++ if (!retv) ++ inlen = 0; ++ else ++ memset(retv, 0, inlen); ++ ++ lxc_list_for_each(it, &c->populate_devs) { ++ struct lxc_populate_devs *elem = it->elem; ++ strprint(retv, inlen, "lxc.populate.device = %s:%s:%d:%d:%o:%u:%u\n", ++ elem->name, elem->type, elem->maj, ++ elem->min, elem->file_mode, elem->uid, elem->gid); ++ } ++ ++ return fulllen; ++} ++ ++/* isulad: clr config populate devices*/ ++static inline int clr_config_populate_device(const char *key, struct lxc_conf *c, ++ void *data) ++{ ++ return lxc_clear_populate_devices(c); ++} ++ ++/* isulad: set config for umask */ ++static int set_config_umask(const char *key, const char *value, ++ struct lxc_conf *lxc_conf, void *data) ++{ ++ if (lxc_config_value_empty(value)) { ++ ERROR("Empty umask"); ++ return -1; ++ } ++ ++ if (strcmp(value, "normal") == 0) { ++ lxc_conf->umask = 0022; ++ return 0; ++ } else if (strcmp(value, "secure") == 0) { ++ lxc_conf->umask = 0027; ++ return 0; ++ } else { ++ ERROR("Invalid native umask: %s", value); ++ return -1; ++ } ++} ++ ++/* isulad add: get umask value*/ ++static int get_config_umask(const char *key, char *retv, int inlen, ++ struct lxc_conf *c, void *data) ++{ ++ return lxc_get_conf_size_t(c, retv, inlen, c->umask); ++} ++ ++/* isulad add: clear umask value */ ++static inline int clr_config_umask(const char *key, struct lxc_conf *c, ++ void *data) ++{ ++ c->umask = 0027; ++ return 0; ++} ++ ++/* isulad: set config for rootfs masked paths */ ++static int set_config_rootfs_masked_paths(const char *key, const char *value, ++ struct lxc_conf *lxc_conf, void *data) ++{ ++ struct lxc_list *list_item = NULL; ++ ++ if (lxc_config_value_empty(value)) ++ return lxc_clear_rootfs_masked_paths(lxc_conf); ++ ++ list_item = malloc(sizeof(*list_item)); ++ if (list_item == NULL) ++ goto on_error; ++ ++ list_item->elem = safe_strdup(value); ++ ++ lxc_list_add_tail(&lxc_conf->rootfs.maskedpaths, list_item); ++ ++ return 0; ++ ++on_error: ++ free(list_item); ++ ++ return -1; ++} ++ ++// isulad: get config rootfs masked paths ++static int get_config_rootfs_masked_paths(const char *key, char *retv, int inlen, ++ struct lxc_conf *c, void *data) ++{ ++ int len, fulllen = 0; ++ struct lxc_list *it = NULL; ++ ++ if (!retv) ++ inlen = 0; ++ else ++ memset(retv, 0, inlen); ++ ++ lxc_list_for_each(it, &c->rootfs.maskedpaths) { ++ strprint(retv, inlen, "%s\n", (char *)it->elem); ++ } ++ ++ return fulllen; ++} ++ ++/* isulad: set config for rootfs ro paths */ ++static int set_config_rootfs_ro_paths(const char *key, const char *value, ++ struct lxc_conf *lxc_conf, void *data) ++{ ++ struct lxc_list *list_item = NULL; ++ ++ if (lxc_config_value_empty(value)) ++ return lxc_clear_rootfs_ro_paths(lxc_conf); ++ ++ list_item = malloc(sizeof(*list_item)); ++ if (list_item == NULL) ++ goto on_error; ++ ++ list_item->elem = safe_strdup(value); ++ ++ lxc_list_add_tail(&lxc_conf->rootfs.ropaths, list_item); ++ ++ return 0; ++ ++on_error: ++ free(list_item); ++ ++ return -1; ++} ++ ++// isulad: get config rootfs ro paths ++static int get_config_rootfs_ro_paths(const char *key, char *retv, int inlen, ++ struct lxc_conf *c, void *data) ++{ ++ int len, fulllen = 0; ++ struct lxc_list *it = NULL; ++ ++ if (!retv) ++ inlen = 0; ++ else ++ memset(retv, 0, inlen); ++ ++ lxc_list_for_each(it, &c->rootfs.ropaths) { ++ strprint(retv, inlen, "%s\n", (char *)it->elem); ++ } ++ ++ return fulllen; ++} ++ ++/* isulad: clr config rootfs masked paths */ ++static inline int clr_config_rootfs_masked_paths(const char *key, struct lxc_conf *c, ++ void *data) ++{ ++ return lxc_clear_rootfs_masked_paths(c); ++} ++ ++/* isulad: clr config rootfs ro paths */ ++static inline int clr_config_rootfs_ro_paths(const char *key, struct lxc_conf *c, ++ void *data) ++{ ++ return lxc_clear_rootfs_ro_paths(c); ++} ++ ++/* isulad: set config for systemd */ ++static int set_config_systemd(const char *key, const char *value, ++ struct lxc_conf *lxc_conf, void *data) ++{ ++ if (lxc_config_value_empty(value)) { ++ ERROR("Empty umask"); ++ return -1; ++ } ++ lxc_conf->systemd = strdup(value); ++ return 0; ++} ++ ++/* isulad add: get systemd value*/ ++static int get_config_systemd(const char *key, char *retv, int inlen, ++ struct lxc_conf *c, void *data) ++{ ++ return lxc_get_conf_str(retv, inlen, c->systemd); ++} ++ ++/* isulad add: clear systemd value */ ++static inline int clr_config_systemd(const char *key, struct lxc_conf *c, ++ void *data) ++{ ++ free(c->systemd); ++ c->systemd = NULL; ++ return 0; ++} ++ ++static int set_config_console_log_driver(const char *key, const char *value, ++ struct lxc_conf *lxc_conf, void *data) ++{ ++ return set_config_string_item(&lxc_conf->console.log_driver, value); ++} ++ ++static int set_config_console_syslog_tag(const char *key, const char *value, ++ struct lxc_conf *lxc_conf, void *data) ++{ ++ char buf[16] = { 0 }; ++ ++ if (value == NULL) { ++ return -1; ++ } ++ (void)strlcpy(buf, value, 16); ++ return set_config_string_item(&lxc_conf->console.log_syslog_tag, buf); ++} ++ ++static int parse_facility(const char *facility) ++{ ++#define FACILITIES_LEN 20 ++ const char *facility_keys[FACILITIES_LEN] = { ++ "kern", "user", "mail", "daemon", "auth", ++ "syslog", "lpr", "news", "uucp", "cron", "authpriv", "ftp", ++ "local0", "local1", "local2", "local3", "local4", "local5", "local6", "local7" ++ }; ++ const int facilities[FACILITIES_LEN] = { ++ LOG_KERN, LOG_USER, LOG_MAIL, LOG_DAEMON, LOG_AUTH, LOG_SYSLOG, ++ LOG_LPR, LOG_NEWS, LOG_UUCP, LOG_CRON, LOG_AUTHPRIV, LOG_FTP, ++ LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3, LOG_LOCAL4, ++ LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7 ++ }; ++ int i = 0; ++ ++ if (facility == NULL) { ++ return -1; ++ } ++ ++ for (; i < FACILITIES_LEN; i++) { ++ if (strcmp(facility, facility_keys[i]) == 0) { ++ return facilities[i]; ++ } ++ } ++ ++ return -1; ++} ++ ++static int set_config_console_syslog_facility(const char *key, const char *value, ++ struct lxc_conf *lxc_conf, void *data) ++{ ++ int facility; ++ ++ facility = parse_facility(value); ++ if (facility < 0) { ++ NOTICE("Invalid facility: %s", value); ++ facility = LOG_DAEMON; ++ } ++ ++ lxc_conf->console.log_syslog_facility = facility; ++ return 0; ++} ++ ++static int get_config_console_log_driver(const char *key, char *retv, int inlen, ++ struct lxc_conf *c, void *data) ++{ ++ return lxc_get_conf_str(retv, inlen, c->console.log_driver); ++} ++ ++static int get_config_console_syslog_tag(const char *key, char *retv, int inlen, ++ struct lxc_conf *c, void *data) ++{ ++ return lxc_get_conf_str(retv, inlen, c->console.log_syslog_tag); ++} ++ ++static int get_config_console_syslog_facility(const char *key, char *retv, int inlen, ++ struct lxc_conf *c, void *data) ++{ ++ return lxc_get_conf_int(c, retv, inlen, c->console.log_syslog_facility); ++} ++ ++static inline int clr_config_console_log_driver(const char *key, ++ struct lxc_conf *c, void *data) ++{ ++ free(c->console.log_driver); ++ c->console.log_driver = NULL; ++ return 0; ++} ++ ++static inline int clr_config_console_syslog_tag(const char *key, ++ struct lxc_conf *c, void *data) ++{ ++ free(c->console.log_syslog_tag); ++ c->console.log_syslog_tag= NULL; ++ return 0; ++} ++ ++static inline int clr_config_console_syslog_facility(const char *key, ++ struct lxc_conf *c, void *data) ++{ ++ c->console.log_syslog_facility = LOG_DAEMON; ++ return 0; ++} ++ ++#endif +diff --git a/src/lxc/confile.h b/src/lxc/confile.h +index a457c9a17..624d9a0c2 100644 +--- a/src/lxc/confile.h ++++ b/src/lxc/confile.h +@@ -9,8 +9,6 @@ + #include + #include + +-#include "compiler.h" +- + struct lxc_conf; + struct lxc_list; + +@@ -48,24 +46,21 @@ struct new_config_item { + extern struct lxc_config_t *lxc_get_config(const char *key); + + /* List all available config items. */ +-extern int lxc_list_config_items(char *retv, int inlen) +-__access_rw(1, 2); ++extern int lxc_list_config_items(char *retv, int inlen); + + /* Given a configuration key namespace (e.g. lxc.apparmor) list all associated + * subkeys for that namespace. + * Must be implemented when adding a new configuration key. + */ + extern int lxc_list_subkeys(struct lxc_conf *conf, const char *key, char *retv, +- int inlen) +-__access_rw(3, 4); ++ int inlen); + + /* List all configuration items associated with a given network. For example + * pass "lxc.net.[i]" to retrieve all configuration items associated with + * the network associated with index [i]. + */ + extern int lxc_list_net(struct lxc_conf *c, const char *key, char *retv, +- int inlen) +-__access_rw(3, 4); ++ int inlen); + + extern int lxc_config_read(const char *file, struct lxc_conf *conf, + bool from_include); +diff --git a/src/lxc/confile_utils.c b/src/lxc/confile_utils.c +index 05dadf9ec..ff4ae7688 100644 +--- a/src/lxc/confile_utils.c ++++ b/src/lxc/confile_utils.c +@@ -506,18 +506,6 @@ int lxc_veth_mode_to_flag(int *mode, const char *value) + return ret_set_errno(-1, EINVAL); + } + +-char *lxc_veth_flag_to_mode(int mode) +-{ +- for (size_t i = 0; i < sizeof(veth_mode) / sizeof(veth_mode[0]); i++) { +- if (veth_mode[i].mode != mode) +- continue; +- +- return veth_mode[i].name; +- } +- +- return NULL; +-} +- + static struct lxc_macvlan_mode { + char *name; + int mode; +diff --git a/src/lxc/confile_utils.h b/src/lxc/confile_utils.h +index 7c59deae5..62990e98c 100644 +--- a/src/lxc/confile_utils.h ++++ b/src/lxc/confile_utils.h +@@ -5,7 +5,6 @@ + + #include + +-#include "compiler.h" + #include "conf.h" + #include "confile_utils.h" + +@@ -41,7 +40,6 @@ extern void lxc_log_configured_netdevs(const struct lxc_conf *conf); + extern bool lxc_remove_nic_by_idx(struct lxc_conf *conf, unsigned int idx); + extern void lxc_free_networks(struct lxc_list *networks); + extern int lxc_veth_mode_to_flag(int *mode, const char *value); +-extern char *lxc_veth_flag_to_mode(int mode); + extern int lxc_macvlan_mode_to_flag(int *mode, const char *value); + extern char *lxc_macvlan_flag_to_mode(int mode); + extern int lxc_ipvlan_mode_to_flag(int *mode, const char *value); +@@ -51,16 +49,12 @@ extern char *lxc_ipvlan_flag_to_isolation(int mode); + + extern int set_config_string_item(char **conf_item, const char *value); + extern int set_config_string_item_max(char **conf_item, const char *value, +- size_t max) +-__access_r(2, 3); +- ++ size_t max); + extern int set_config_path_item(char **conf_item, const char *value); + extern int set_config_bool_item(bool *conf_item, const char *value, + bool empty_conf_action); + extern int config_ip_prefix(struct in_addr *addr); +-extern int network_ifname(char *valuep, const char *value, size_t size) +-__access_r(2, 3); +- ++extern int network_ifname(char *valuep, const char *value, size_t size); + extern void rand_complete_hwaddr(char *hwaddr); + extern bool lxc_config_net_is_hwaddr(const char *line); + extern bool new_hwaddr(char *hwaddr); +diff --git a/src/lxc/criu.c b/src/lxc/criu.c +index 19f2a173f..14a8aae7d 100644 +--- a/src/lxc/criu.c ++++ b/src/lxc/criu.c +@@ -303,7 +303,7 @@ static void exec_criu(struct cgroup_ops *cgroup_ops, struct lxc_conf *conf, + * the handler the restore task created. + */ + if (!strcmp(opts->action, "dump") || !strcmp(opts->action, "pre-dump")) { +- path = lxc_cmd_get_limiting_cgroup_path(opts->c->name, opts->c->config_path, controllers[0]); ++ path = lxc_cmd_get_cgroup_path(opts->c->name, opts->c->config_path, controllers[0]); + if (!path) { + ERROR("failed to get cgroup path for %s", controllers[0]); + goto err; +@@ -311,7 +311,7 @@ static void exec_criu(struct cgroup_ops *cgroup_ops, struct lxc_conf *conf, + } else { + const char *p; + +- p = cgroup_ops->get_limiting_cgroup(cgroup_ops, controllers[0]); ++ p = cgroup_ops->get_cgroup(cgroup_ops, controllers[0]); + if (!p) { + ERROR("failed to get cgroup path for %s", controllers[0]); + goto err; +@@ -371,8 +371,15 @@ static void exec_criu(struct cgroup_ops *cgroup_ops, struct lxc_conf *conf, + char *mntdata = NULL; + char arg[2 * PATH_MAX + 2]; + ++#ifdef HAVE_ISULAD ++ unsigned long pflags; ++ ++ if (parse_mntopts(mntent.mnt_opts, &flags, &pflags, &mntdata) < 0) ++ goto err; ++#else + if (parse_mntopts(mntent.mnt_opts, &flags, &mntdata) < 0) + goto err; ++#endif + + free(mntdata); + +@@ -406,9 +413,9 @@ static void exec_criu(struct cgroup_ops *cgroup_ops, struct lxc_conf *conf, + DECLARE_ARG("-t"); + DECLARE_ARG(pid); + +- freezer_relative = lxc_cmd_get_limiting_cgroup_path(opts->c->name, +- opts->c->config_path, +- "freezer"); ++ freezer_relative = lxc_cmd_get_cgroup_path(opts->c->name, ++ opts->c->config_path, ++ "freezer"); + if (!freezer_relative) { + ERROR("failed getting freezer path"); + goto err; +@@ -942,7 +949,7 @@ static void do_restore(struct lxc_container *c, int status_pipe, struct migrate_ + close(fd); + } + +- handler = lxc_init_handler(NULL, c->name, c->lxc_conf, c->config_path, false); ++ handler = lxc_init_handler(c->name, c->lxc_conf, c->config_path, false); + if (!handler) + goto out; + +@@ -1011,7 +1018,7 @@ static void do_restore(struct lxc_container *c, int status_pipe, struct migrate_ + } + + if (mount(rootfs->path, rootfs->mount, NULL, MS_BIND, NULL) < 0) { +- (void)rmdir(rootfs->mount); ++ rmdir(rootfs->mount); + goto out_fini_handler; + } + } +@@ -1020,7 +1027,7 @@ static void do_restore(struct lxc_container *c, int status_pipe, struct migrate_ + os.action = "restore"; + os.user = opts; + os.c = c; +- os.console_fd = c->lxc_conf->console.pts; ++ os.console_fd = c->lxc_conf->console.slave; + os.criu_version = criu_version; + os.handler = handler; + +@@ -1046,7 +1053,7 @@ static void do_restore(struct lxc_container *c, int status_pipe, struct migrate_ + /* exec_criu() returning is an error */ + exec_criu(cgroup_ops, c->lxc_conf, &os); + umount(rootfs->mount); +- (void)rmdir(rootfs->mount); ++ rmdir(rootfs->mount); + goto out_fini_handler; + } else { + char title[2048]; +@@ -1323,7 +1330,7 @@ static bool do_dump(struct lxc_container *c, char *mode, struct migrate_opts *op + fail: + close(criuout[0]); + close(criuout[1]); +- (void)rmdir(opts->directory); ++ rmdir(opts->directory); + free(criu_version); + return false; + } +diff --git a/src/lxc/exec_commands.c b/src/lxc/exec_commands.c +new file mode 100644 +index 000000000..00129cb0e +--- /dev/null ++++ b/src/lxc/exec_commands.c +@@ -0,0 +1,416 @@ ++/****************************************************************************** ++ * Copyright (c) Huawei Technologies Co., Ltd. 2019. All rights reserved. ++ * Author: lifeng ++ * Create: 2019-12-08 ++ * Description: provide container definition ++ * lxc: linux Container library ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ ******************************************************************************/ ++ ++#ifndef _GNU_SOURCE ++#define _GNU_SOURCE 1 ++#endif ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "af_unix.h" ++#include "cgroup.h" ++#include "exec_commands.h" ++#include "commands_utils.h" ++#include "conf.h" ++#include "config.h" ++#include "confile.h" ++#include "log.h" ++#include "lxc.h" ++#include "lxclock.h" ++#include "mainloop.h" ++#include "monitor.h" ++#include "terminal.h" ++#include "utils.h" ++ ++lxc_log_define(commands_exec, lxc); ++ ++static const char *lxc_exec_cmd_str(lxc_exec_cmd_t cmd) ++{ ++ static const char *const cmdname[LXC_EXEC_CMD_MAX] = { ++ [LXC_EXEC_CMD_SET_TERMINAL_WINCH] = "set_exec_terminal_winch", ++ }; ++ ++ if (cmd >= LXC_EXEC_CMD_MAX) ++ return "Invalid request"; ++ ++ return cmdname[cmd]; ++} ++ ++static int lxc_exec_cmd_rsp_recv(int sock, struct lxc_exec_cmd_rr *cmd) ++{ ++ int ret, rspfd; ++ struct lxc_exec_cmd_rsp *rsp = &cmd->rsp; ++ ++ ret = lxc_abstract_unix_recv_fds_timeout(sock, &rspfd, 1, rsp, sizeof(*rsp), 1000 * 1000); ++ if (ret < 0) { ++ SYSERROR("Failed to receive response for command \"%s\"", ++ lxc_exec_cmd_str(cmd->req.cmd)); ++ ++ if (errno == ECONNRESET || errno == EAGAIN || errno == EWOULDBLOCK) { ++ errno = ECONNRESET; /*isulad set errno ECONNRESET when timeout */ ++ return -1; ++ } ++ ++ return -1; ++ } ++ TRACE("Command \"%s\" received response", lxc_exec_cmd_str(cmd->req.cmd)); ++ ++ if (rsp->datalen == 0) { ++ DEBUG("Response data length for command \"%s\" is 0", ++ lxc_exec_cmd_str(cmd->req.cmd)); ++ return ret; ++ } ++ ++ if (rsp->datalen > LXC_CMD_DATA_MAX) { ++ ERROR("Response data for command \"%s\" is too long: %d bytes > %d", ++ lxc_exec_cmd_str(cmd->req.cmd), rsp->datalen, LXC_CMD_DATA_MAX); ++ return -1; ++ } ++ ++ rsp->data = malloc(rsp->datalen); ++ if (!rsp->data) { ++ errno = ENOMEM; ++ ERROR("Failed to allocate response buffer for command \"%s\"", ++ lxc_exec_cmd_str(cmd->req.cmd)); ++ return -1; ++ } ++ ++ ret = lxc_recv_nointr(sock, rsp->data, rsp->datalen, 0); ++ if (ret != rsp->datalen) { ++ SYSERROR("Failed to receive response data for command \"%s\"", ++ lxc_exec_cmd_str(cmd->req.cmd)); ++ return -1; ++ } ++ ++ return ret; ++} ++ ++static int lxc_exec_cmd_rsp_send(int fd, struct lxc_exec_cmd_rsp *rsp) ++{ ++ ssize_t ret; ++ ++ errno = EMSGSIZE; ++ ret = lxc_send_nointr(fd, rsp, sizeof(*rsp), MSG_NOSIGNAL); ++ if (ret < 0 || (size_t)ret != sizeof(*rsp)) { ++ SYSERROR("Failed to send command response %zd", ret); ++ return -1; ++ } ++ ++ if (!rsp->data || rsp->datalen <= 0) ++ return 0; ++ ++ errno = EMSGSIZE; ++ ret = lxc_send_nointr(fd, rsp->data, rsp->datalen, MSG_NOSIGNAL); ++ if (ret < 0 || ret != (ssize_t)rsp->datalen) { ++ SYSWARN("Failed to send command response data %zd", ret); ++ return -1; ++ } ++ ++ return 0; ++} ++ ++static int lxc_exec_cmd_send(const char *name, struct lxc_exec_cmd_rr *cmd, ++ const char *lxcpath, const char *hashed_sock_name, const char *suffix) ++{ ++ int client_fd, saved_errno; ++ ssize_t ret = -1; ++ ++ client_fd = lxc_cmd_connect(name, lxcpath, hashed_sock_name, suffix); ++ if (client_fd < 0) ++ return -1; ++ ++ ret = lxc_abstract_unix_send_credential(client_fd, &cmd->req, ++ sizeof(cmd->req)); ++ if (ret < 0 || (size_t)ret != sizeof(cmd->req)) ++ goto on_error; ++ ++ if (cmd->req.datalen <= 0) ++ return client_fd; ++ ++ errno = EMSGSIZE; ++ ret = lxc_send_nointr(client_fd, (void *)cmd->req.data, ++ cmd->req.datalen, MSG_NOSIGNAL); ++ if (ret < 0 || ret != (ssize_t)cmd->req.datalen) ++ goto on_error; ++ ++ return client_fd; ++ ++on_error: ++ saved_errno = errno; ++ close(client_fd); ++ errno = saved_errno; ++ ++ return -1; ++} ++ ++static int lxc_exec_cmd(const char *name, struct lxc_exec_cmd_rr *cmd, const char *lxcpath, const char *hashed_sock_name, const char *suffix) ++{ ++ int client_fd = -1; ++ int saved_errno; ++ int ret = -1; ++ ++ client_fd = lxc_exec_cmd_send(name, cmd, lxcpath, hashed_sock_name, suffix); ++ if (client_fd < 0) { ++ SYSTRACE("Command \"%s\" failed to connect command socket", ++ lxc_exec_cmd_str(cmd->req.cmd)); ++ return -1; ++ } ++ ++ ret = lxc_exec_cmd_rsp_recv(client_fd, cmd); ++ ++ saved_errno = errno; ++ close(client_fd); ++ errno = saved_errno; ++ return ret; ++} ++ ++int lxc_exec_cmd_set_terminal_winch(const char *name, const char *lxcpath, const char *suffix, unsigned int height, unsigned int width) ++{ ++ int ret = 0; ++ struct lxc_exec_cmd_set_terminal_winch_request data = { 0 }; ++ ++ data.height = height; ++ data.width = width; ++ ++ struct lxc_exec_cmd_rr cmd = { ++ .req = { ++ .cmd = LXC_EXEC_CMD_SET_TERMINAL_WINCH, ++ .datalen = sizeof(struct lxc_exec_cmd_set_terminal_winch_request), ++ .data = &data, ++ }, ++ }; ++ ++ ret = lxc_exec_cmd(name, &cmd, lxcpath, NULL, suffix); ++ if (ret < 0) { ++ ERROR("Failed to send command to container"); ++ return -1; ++ } ++ ++ if (cmd.rsp.ret != 0) { ++ ERROR("Command response error:%d", cmd.rsp.ret); ++ return -1; ++ } ++ return 0; ++} ++ ++static int lxc_exec_cmd_set_terminal_winch_callback(int fd, struct lxc_exec_cmd_req *req, ++ struct lxc_exec_command_handler *handler) ++{ ++ struct lxc_exec_cmd_rsp rsp; ++ struct lxc_exec_cmd_set_terminal_winch_request *data = (struct lxc_exec_cmd_set_terminal_winch_request *)(req->data); ++ memset(&rsp, 0, sizeof(rsp)); ++ ++ rsp.ret = lxc_set_terminal_winsz(handler->terminal, data->height, data->width);; ++ ++ return lxc_exec_cmd_rsp_send(fd, &rsp); ++ ++} ++ ++static int lxc_exec_cmd_process(int fd, struct lxc_exec_cmd_req *req, ++ struct lxc_exec_command_handler *handler) ++{ ++ typedef int (*callback)(int, struct lxc_exec_cmd_req *, struct lxc_exec_command_handler *); ++ ++ callback cb[LXC_EXEC_CMD_MAX] = { ++ [LXC_EXEC_CMD_SET_TERMINAL_WINCH] = lxc_exec_cmd_set_terminal_winch_callback, ++ }; ++ ++ if (req->cmd >= LXC_EXEC_CMD_MAX) { ++ ERROR("Undefined command id %d", req->cmd); ++ return -1; ++ } ++ return cb[req->cmd](fd, req, handler); ++} ++ ++static void lxc_exec_cmd_fd_cleanup(int fd, struct lxc_epoll_descr *descr) ++{ ++ lxc_mainloop_del_handler(descr, fd); ++ close(fd); ++ return; ++} ++ ++static int lxc_exec_cmd_handler(int fd, uint32_t events, void *data, ++ struct lxc_epoll_descr *descr) ++{ ++ int ret; ++ struct lxc_exec_cmd_req req; ++ void *reqdata = NULL; ++ struct lxc_exec_command_handler *handler = data; ++ ++ ret = lxc_abstract_unix_rcv_credential(fd, &req, sizeof(req)); ++ if (ret < 0) { ++ SYSERROR("Failed to receive data on command socket for command " ++ "\"%s\"", lxc_exec_cmd_str(req.cmd)); ++ ++ if (errno == EACCES) { ++ /* We don't care for the peer, just send and close. */ ++ struct lxc_exec_cmd_rsp rsp = {.ret = ret}; ++ ++ lxc_exec_cmd_rsp_send(fd, &rsp); ++ } ++ ++ goto out_close; ++ } ++ ++ if (ret == 0) ++ goto out_close; ++ ++ if (ret != sizeof(req)) { ++ WARN("Failed to receive full command request. Ignoring request " ++ "for \"%s\"", lxc_exec_cmd_str(req.cmd)); ++ ret = -1; ++ goto out_close; ++ } ++ ++ if (req.datalen > LXC_CMD_DATA_MAX) { ++ ERROR("Received command data length %d is too large for " ++ "command \"%s\"", req.datalen, lxc_exec_cmd_str(req.cmd)); ++ errno = EFBIG; ++ ret = -EFBIG; ++ goto out_close; ++ } ++ ++ if (req.datalen > 0) { ++ reqdata = alloca(req.datalen); ++ if (!reqdata) { ++ ERROR("Failed to allocate memory for \"%s\" command", ++ lxc_exec_cmd_str(req.cmd)); ++ errno = ENOMEM; ++ ret = -ENOMEM; ++ goto out_close; ++ } ++ ++ ret = lxc_recv_nointr(fd, reqdata, req.datalen, 0); ++ if (ret != req.datalen) { ++ WARN("Failed to receive full command request. Ignoring " ++ "request for \"%s\"", lxc_exec_cmd_str(req.cmd)); ++ ret = LXC_MAINLOOP_ERROR; ++ goto out_close; ++ } ++ ++ req.data = reqdata; ++ } ++ ++ ret = lxc_exec_cmd_process(fd, &req, handler); ++ if (ret) { ++ /* This is not an error, but only a request to close fd. */ ++ ret = LXC_MAINLOOP_CONTINUE; ++ goto out_close; ++ } ++ ++out: ++ return ret; ++ ++out_close: ++ lxc_exec_cmd_fd_cleanup(fd, descr); ++ goto out; ++} ++ ++static int lxc_exec_cmd_accept(int fd, uint32_t events, void *data, ++ struct lxc_epoll_descr *descr) ++{ ++ int connection = -1; ++ int opt = 1, ret = -1; ++ ++ connection = accept(fd, NULL, 0); ++ if (connection < 0) { ++ SYSERROR("Failed to accept connection to run command"); ++ return LXC_MAINLOOP_ERROR; ++ } ++ ++ ret = fcntl(connection, F_SETFD, FD_CLOEXEC); ++ if (ret < 0) { ++ SYSERROR("Failed to set close-on-exec on incoming command connection"); ++ goto out_close; ++ } ++ ++ ret = setsockopt(connection, SOL_SOCKET, SO_PASSCRED, &opt, sizeof(opt)); ++ if (ret < 0) { ++ SYSERROR("Failed to enable necessary credentials on command socket"); ++ goto out_close; ++ } ++ ++ ret = lxc_mainloop_add_handler(descr, connection, lxc_exec_cmd_handler, data); ++ if (ret) { ++ ERROR("Failed to add command handler"); ++ goto out_close; ++ } ++ ++out: ++ return ret; ++ ++out_close: ++ close(connection); ++ goto out; ++} ++ ++int lxc_exec_cmd_init(const char *name, const char *lxcpath, const char *suffix) ++{ ++ int fd, ret; ++ char path[LXC_AUDS_ADDR_LEN] = {0}; ++ ++ ret = lxc_make_abstract_socket_name(path, sizeof(path), name, lxcpath, NULL, suffix); ++ if (ret < 0) ++ return -1; ++ TRACE("Creating abstract unix socket \"%s\"", &path[1]); ++ ++ fd = lxc_abstract_unix_open(path, SOCK_STREAM, 0); ++ if (fd < 0) { ++ SYSERROR("Failed to create command socket %s", &path[1]); ++ if (errno == EADDRINUSE) ++ ERROR("Container \"%s\" appears to be already running", name); ++ ++ return -1; ++ } ++ ++ ret = fcntl(fd, F_SETFD, FD_CLOEXEC); ++ if (ret < 0) { ++ SYSERROR("Failed to set FD_CLOEXEC on command socket file descriptor"); ++ close(fd); ++ return -1; ++ } ++ ++ return fd; ++} ++ ++int lxc_exec_cmd_mainloop_add(struct lxc_epoll_descr *descr, struct lxc_exec_command_handler *handler) ++{ ++ int ret; ++ int fd = handler->maincmd_fd; ++ ++ ret = lxc_mainloop_add_handler(descr, fd, lxc_exec_cmd_accept, handler); ++ if (ret < 0) { ++ ERROR("Failed to add handler for command socket"); ++ close(fd); ++ } ++ ++ return ret; ++} +diff --git a/src/lxc/exec_commands.h b/src/lxc/exec_commands.h +new file mode 100644 +index 000000000..2581ee903 +--- /dev/null ++++ b/src/lxc/exec_commands.h +@@ -0,0 +1,73 @@ ++/****************************************************************************** ++ * Copyright (c) Huawei Technologies Co., Ltd. 2019. All rights reserved. ++ * Author: lifeng ++ * Create: 2019-12-08 ++ * Description: provide container definition ++ * lxc: linux Container library ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ ******************************************************************************/ ++ ++#ifndef __LXC_EXEC_COMMANDS_H ++#define __LXC_EXEC_COMMANDS_H ++ ++#include ++#include ++#include ++ ++#include "lxccontainer.h" ++#include "macro.h" ++#include "state.h" ++#include "terminal.h" ++ ++struct lxc_exec_command_handler { ++ int maincmd_fd; ++ struct lxc_terminal *terminal; ++}; ++ ++typedef enum { ++ LXC_EXEC_CMD_SET_TERMINAL_WINCH, ++ LXC_EXEC_CMD_MAX, ++} lxc_exec_cmd_t; ++ ++struct lxc_exec_cmd_req { ++ lxc_exec_cmd_t cmd; ++ int datalen; ++ const void *data; ++}; ++ ++struct lxc_exec_cmd_rsp { ++ int ret; /* 0 on success, -errno on failure */ ++ int datalen; ++ void *data; ++}; ++ ++struct lxc_exec_cmd_rr { ++ struct lxc_exec_cmd_req req; ++ struct lxc_exec_cmd_rsp rsp; ++}; ++ ++struct lxc_exec_cmd_set_terminal_winch_request { ++ unsigned int height; ++ unsigned int width; ++}; ++ ++struct lxc_epoll_descr; ++struct lxc_handler; ++ ++extern int lxc_exec_cmd_init(const char *name, const char *lxcpath, const char *suffix); ++extern int lxc_exec_cmd_mainloop_add(struct lxc_epoll_descr *descr, struct lxc_exec_command_handler *handler); ++extern int lxc_exec_cmd_set_terminal_winch(const char *name, const char *lxcpath, const char *suffix, unsigned int height, unsigned int width); ++ ++#endif /* __exec_commands_h */ +diff --git a/src/lxc/execute.c b/src/lxc/execute.c +index 7175ef2cf..16c0fed05 100644 +--- a/src/lxc/execute.c ++++ b/src/lxc/execute.c +@@ -14,12 +14,16 @@ + #include "config.h" + #include "log.h" + #include "start.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "utils.h" + + lxc_log_define(execute, start); + ++#ifdef HAVE_ISULAD ++static int execute_start(struct lxc_handler *handler, void* data, int fd) ++#else + static int execute_start(struct lxc_handler *handler, void* data) ++#endif + { + int argc_add, j; + char **argv; +@@ -66,11 +70,14 @@ static int execute_start(struct lxc_handler *handler, void* data) + NOTICE("Exec'ing \"%s\"", my_args->argv[0]); + + if (my_args->init_fd >= 0) +- execveat(my_args->init_fd, "", argv, environ, AT_EMPTY_PATH); ++ lxc_raw_execveat(my_args->init_fd, "", argv, environ, AT_EMPTY_PATH); + else + execvp(argv[0], argv); + SYSERROR("Failed to exec %s", argv[0]); + ++#ifdef HAVE_ISULAD ++ lxc_write_error_message(fd, "Failed to exec: \"%s\": %s.", argv[0], strerror(errno)); ++#endif + free(argv); + out1: + return 1; +@@ -88,14 +95,26 @@ static struct lxc_operations execute_start_ops = { + .post_start = execute_post_start + }; + ++#ifdef HAVE_ISULAD ++int lxc_execute(const char *name, char *const argv[], int quiet, ++ struct lxc_handler *handler, const char *lxcpath, ++ bool daemonize, int *error_num, unsigned int start_timeout) ++#else + int lxc_execute(const char *name, char *const argv[], int quiet, + struct lxc_handler *handler, const char *lxcpath, + bool daemonize, int *error_num) ++#endif + { ++ + struct execute_args args = {.argv = argv, .quiet = quiet}; + + TRACE("Doing lxc_execute"); + handler->conf->is_execute = true; ++#ifdef HAVE_ISULAD ++ return __lxc_start(handler, &execute_start_ops, &args, lxcpath, ++ daemonize, error_num, start_timeout); ++#else + return __lxc_start(handler, &execute_start_ops, &args, lxcpath, + daemonize, error_num); ++#endif + } +diff --git a/src/lxc/file_utils.h b/src/lxc/file_utils.h +index f9c8abe03..6d5dbf68d 100644 +--- a/src/lxc/file_utils.h ++++ b/src/lxc/file_utils.h +@@ -12,52 +12,27 @@ + #include + #include + +-#include "compiler.h" +- + /* read and write whole files */ + extern int lxc_write_to_file(const char *filename, const void *buf, +- size_t count, bool add_newline, mode_t mode) +-__access_r(2, 3); +- +-extern int lxc_readat(int dirfd, const char *filename, void *buf, size_t count) +-__access_w(3, 4); +- ++ size_t count, bool add_newline, mode_t mode); ++extern int lxc_readat(int dirfd, const char *filename, void *buf, size_t count); + extern int lxc_writeat(int dirfd, const char *filename, const void *buf, +- size_t count) +-__access_r(3, 4); +- ++ size_t count); + extern int lxc_write_openat(const char *dir, const char *filename, +- const void *buf, size_t count) +-__access_r(3, 4); +- +-extern int lxc_read_from_file(const char *filename, void *buf, size_t count) +-__access_w(2, 3); ++ const void *buf, size_t count); ++extern int lxc_read_from_file(const char *filename, void *buf, size_t count); + + /* send and receive buffers completely */ +-extern ssize_t lxc_write_nointr(int fd, const void *buf, size_t count) +-__access_r(2, 3); +- ++extern ssize_t lxc_write_nointr(int fd, const void *buf, size_t count); + extern ssize_t lxc_pwrite_nointr(int fd, const void *buf, size_t count, +- off_t offset) +-__access_r(2, 3); +- +-extern ssize_t lxc_send_nointr(int sockfd, void *buf, size_t len, int flags) +-__access_r(2, 3); +- +-extern ssize_t lxc_read_nointr(int fd, void *buf, size_t count) +-__access_w(2, 3); +- ++ off_t offset); ++extern ssize_t lxc_send_nointr(int sockfd, void *buf, size_t len, int flags); ++extern ssize_t lxc_read_nointr(int fd, void *buf, size_t count); + extern ssize_t lxc_read_nointr_expect(int fd, void *buf, size_t count, +- const void *expected_buf) +-__access_w(2, 3); +- ++ const void *expected_buf); + extern ssize_t lxc_read_file_expect(const char *path, void *buf, size_t count, +- const void *expected_buf) +-__access_w(2, 3); +- +-extern ssize_t lxc_recv_nointr(int sockfd, void *buf, size_t len, int flags) +-__access_w(2, 3); +- ++ const void *expected_buf); ++extern ssize_t lxc_recv_nointr(int sockfd, void *buf, size_t len, int flags); + ssize_t lxc_recvmsg_nointr_iov(int sockfd, struct iovec *iov, size_t iovlen, + int flags); + +diff --git a/src/lxc/initutils.c b/src/lxc/initutils.c +index 5549c2e8f..76f00488a 100644 +--- a/src/lxc/initutils.c ++++ b/src/lxc/initutils.c +@@ -54,11 +54,15 @@ const char *lxc_global_config_value(const char *option_name) + { NULL, NULL }, + }; + ++#ifdef HAVE_ISULAD ++ static const char *values[sizeof(options) / sizeof(options[0])] = {0}; ++#else + /* placed in the thread local storage pool for non-bionic targets */ + #ifdef HAVE_TLS + static thread_local const char *values[sizeof(options) / sizeof(options[0])] = {0}; + #else + static const char *values[sizeof(options) / sizeof(options[0])] = {0}; ++#endif + #endif + + /* user_config_path is freed as soon as it is used */ +diff --git a/src/lxc/isulad_utils.c b/src/lxc/isulad_utils.c +new file mode 100644 +index 000000000..b2824045c +--- /dev/null ++++ b/src/lxc/isulad_utils.c +@@ -0,0 +1,99 @@ ++/* SPDX-License-Identifier: LGPL-2.1+ */ ++/****************************************************************************** ++ * Copyright (c) Huawei Technologies Co., Ltd. 2020. Allrights reserved ++ * Description: isulad utils ++ * Author: lifeng ++ * Create: 2020-04-11 ++******************************************************************************/ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "isulad_utils.h" ++#include "log.h" ++#include "path.h" ++#include "file_utils.h" ++ ++lxc_log_define(isulad_utils, lxc); ++ ++void *lxc_common_calloc_s(size_t size) ++{ ++ if (size == 0 || size > SIZE_MAX) { ++ return NULL; ++ } ++ ++ return calloc((size_t)1, size); ++} ++ ++int lxc_mem_realloc(void **newptr, size_t newsize, void *oldptr, size_t oldsize) ++{ ++ void *tmp = NULL; ++ ++ if (newsize == 0) { ++ goto err_out; ++ } ++ ++ tmp = lxc_common_calloc_s(newsize); ++ if (tmp == NULL) { ++ ERROR("Failed to malloc memory"); ++ goto err_out; ++ } ++ ++ if (oldptr != NULL) { ++ memcpy(tmp, oldptr, (newsize < oldsize) ? newsize : oldsize); ++ ++ memset(oldptr, 0, oldsize); ++ ++ free(oldptr); ++ } ++ ++ *newptr = tmp; ++ return 0; ++ ++err_out: ++ return -1; ++} ++ ++char *safe_strdup(const char *src) ++{ ++ char *dst = NULL; ++ ++ if (src == NULL) { ++ return NULL; ++ } ++ ++ dst = strdup(src); ++ if (dst == NULL) { ++ abort(); ++ } ++ ++ return dst; ++} ++ ++int lxc_open(const char *filename, int flags, mode_t mode) ++{ ++ char rpath[PATH_MAX] = {0x00}; ++ ++ if (cleanpath(filename, rpath, sizeof(rpath)) == NULL) { ++ return -1; ++ } ++ if (mode) { ++ return open(rpath, (int)((unsigned int)flags | O_CLOEXEC), mode); ++ } else { ++ return open(rpath, (int)((unsigned int)flags | O_CLOEXEC)); ++ } ++} ++ ++FILE *lxc_fopen(const char *filename, const char *mode) ++{ ++ char rpath[PATH_MAX] = {0x00}; ++ ++ if (cleanpath(filename, rpath, sizeof(rpath)) == NULL) { ++ return NULL; ++ } ++ ++ return fopen_cloexec(rpath, mode); ++} +diff --git a/src/lxc/isulad_utils.h b/src/lxc/isulad_utils.h +new file mode 100644 +index 000000000..7a6ab00e2 +--- /dev/null ++++ b/src/lxc/isulad_utils.h +@@ -0,0 +1,20 @@ ++/* SPDX-License-Identifier: LGPL-2.1+ */ ++/****************************************************************************** ++ * Copyright (c) Huawei Technologies Co., Ltd. 2020. Allrights reserved ++ * Description: isulad utils ++ * Author: lifeng ++ * Create: 2020-04-11 ++******************************************************************************/ ++#ifndef __iSULAD_UTILS_H ++#define __iSULAD_UTILS_H ++ ++#include ++ ++extern int lxc_mem_realloc(void **newptr, size_t newsize, void *oldptr, size_t oldsize); ++extern void *lxc_common_calloc_s(size_t size); ++extern char *safe_strdup(const char *src); ++ ++extern int lxc_open(const char *filename, int flags, mode_t mode); ++extern FILE *lxc_fopen(const char *filename, const char *mode); ++ ++#endif +diff --git a/src/lxc/json/defs.c b/src/lxc/json/defs.c +new file mode 100644 +index 000000000..4bf569a4e +--- /dev/null ++++ b/src/lxc/json/defs.c +@@ -0,0 +1,205 @@ ++// Generated from defs.json. Do not edit! ++#ifndef _GNU_SOURCE ++#define _GNU_SOURCE ++#endif ++#include ++#include ++#include "defs.h" ++ ++defs_hook *make_defs_hook(yajl_val tree, struct parser_context *ctx, parser_error *err) { ++ defs_hook *ret = NULL; ++ *err = 0; ++ if (tree == NULL) ++ return ret; ++ ret = safe_malloc(sizeof(*ret)); ++ { ++ yajl_val val = get_val(tree, "path", yajl_t_string); ++ if (val != NULL) { ++ char *str = YAJL_GET_STRING(val); ++ ret->path = safe_strdup(str ? str : ""); ++ } ++ } ++ { ++ yajl_val tmp = get_val(tree, "args", yajl_t_array); ++ if (tmp != NULL && YAJL_GET_ARRAY(tmp) != NULL && YAJL_GET_ARRAY(tmp)->len > 0) { ++ size_t i; ++ ret->args_len = YAJL_GET_ARRAY(tmp)->len; ++ if (YAJL_GET_ARRAY(tmp)->len > SIZE_MAX / sizeof(*ret->args) - 1) { ++ free_defs_hook(ret); ++ return NULL; ++ } ++ ret->args = safe_malloc((YAJL_GET_ARRAY(tmp)->len + 1) * sizeof(*ret->args)); ++ for (i = 0; i < YAJL_GET_ARRAY(tmp)->len; i++) { ++ yajl_val val = YAJL_GET_ARRAY(tmp)->values[i]; ++ if (val != NULL) { ++ char *str = YAJL_GET_STRING(val); ++ ret->args[i] = safe_strdup(str ? str : ""); ++ } ++ } ++ } ++ } ++ { ++ yajl_val tmp = get_val(tree, "env", yajl_t_array); ++ if (tmp != NULL && YAJL_GET_ARRAY(tmp) != NULL && YAJL_GET_ARRAY(tmp)->len > 0) { ++ size_t i; ++ ret->env_len = YAJL_GET_ARRAY(tmp)->len; ++ if (YAJL_GET_ARRAY(tmp)->len > SIZE_MAX / sizeof(*ret->env) - 1) { ++ free_defs_hook(ret); ++ return NULL; ++ } ++ ret->env = safe_malloc((YAJL_GET_ARRAY(tmp)->len + 1) * sizeof(*ret->env)); ++ for (i = 0; i < YAJL_GET_ARRAY(tmp)->len; i++) { ++ yajl_val val = YAJL_GET_ARRAY(tmp)->values[i]; ++ if (val != NULL) { ++ char *str = YAJL_GET_STRING(val); ++ ret->env[i] = safe_strdup(str ? str : ""); ++ } ++ } ++ } ++ } ++ { ++ yajl_val val = get_val(tree, "timeout", yajl_t_number); ++ if (val != NULL) { ++ int invalid = common_safe_int(YAJL_GET_NUMBER(val), (int *)&ret->timeout); ++ if (invalid) { ++ if (asprintf(err, "Invalid value '%s' with type 'integer' for key 'timeout': %s", YAJL_GET_NUMBER(val), strerror(-invalid)) < 0) ++ *err = safe_strdup("error allocating memory"); ++ free_defs_hook(ret); ++ return NULL; ++ } ++ } ++ } ++ if (ret->path == NULL) { ++ if (asprintf(err, "Required field '%s' not present", "path") < 0) ++ *err = safe_strdup("error allocating memory"); ++ free_defs_hook(ret); ++ return NULL; ++ } ++ ++ if (tree->type == yajl_t_object && (ctx->options & PARSE_OPTIONS_STRICT)) { ++ int i; ++ for (i = 0; i < tree->u.object.len; i++) ++ if (strcmp(tree->u.object.keys[i], "path") && ++ strcmp(tree->u.object.keys[i], "args") && ++ strcmp(tree->u.object.keys[i], "env") && ++ strcmp(tree->u.object.keys[i], "timeout")) { ++ if (ctx->stderr > 0) ++ fprintf(ctx->stderr, "WARNING: unknown key found: %s\n", tree->u.object.keys[i]); ++ } ++ } ++ return ret; ++} ++ ++void free_defs_hook(defs_hook *ptr) { ++ if (ptr == NULL) ++ return; ++ free(ptr->path); ++ ptr->path = NULL; ++ if (ptr->args != NULL) { ++ size_t i; ++ for (i = 0; i < ptr->args_len; i++) { ++ if (ptr->args[i] != NULL) { ++ free(ptr->args[i]); ++ ptr->args[i] = NULL; ++ } ++ } ++ free(ptr->args); ++ ptr->args = NULL; ++ } ++ if (ptr->env != NULL) { ++ size_t i; ++ for (i = 0; i < ptr->env_len; i++) { ++ if (ptr->env[i] != NULL) { ++ free(ptr->env[i]); ++ ptr->env[i] = NULL; ++ } ++ } ++ free(ptr->env); ++ ptr->env = NULL; ++ } ++ free(ptr); ++} ++ ++yajl_gen_status gen_defs_hook(yajl_gen g, defs_hook *ptr, struct parser_context *ctx, parser_error *err) { ++ yajl_gen_status stat = yajl_gen_status_ok; ++ *err = 0; ++ stat = reformat_start_map(g); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr != NULL && ptr->path != NULL)) { ++ char *str = ""; ++ stat = reformat_map_key(g, "path", strlen("path")); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if (ptr != NULL && ptr->path != NULL) { ++ str = ptr->path; ++ } ++ stat = reformat_string(g, str, strlen(str)); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) || (ptr != NULL && ptr->args != NULL)) { ++ size_t len = 0, i; ++ stat = reformat_map_key(g, "args", strlen("args")); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if (ptr != NULL && ptr->args != NULL) { ++ len = ptr->args_len; ++ } ++ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) ++ yajl_gen_config(g, yajl_gen_beautify, 0); ++ stat = reformat_start_array(g); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ for (i = 0; i < len; i++) { ++ stat = reformat_string(g, ptr->args[i], strlen(ptr->args[i])); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ stat = reformat_end_array(g); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) ++ yajl_gen_config(g, yajl_gen_beautify, 1); ++ } ++ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) || (ptr != NULL && ptr->env != NULL)) { ++ size_t len = 0, i; ++ stat = reformat_map_key(g, "env", strlen("env")); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if (ptr != NULL && ptr->env != NULL) { ++ len = ptr->env_len; ++ } ++ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) ++ yajl_gen_config(g, yajl_gen_beautify, 0); ++ stat = reformat_start_array(g); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ for (i = 0; i < len; i++) { ++ stat = reformat_string(g, ptr->env[i], strlen(ptr->env[i])); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ stat = reformat_end_array(g); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) ++ yajl_gen_config(g, yajl_gen_beautify, 1); ++ } ++ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr != NULL && ptr->timeout)) { ++ long long int num = 0; ++ stat = reformat_map_key(g, "timeout", strlen("timeout")); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if (ptr != NULL && ptr->timeout) { ++ num = (long long int)ptr->timeout; ++ } ++ stat = reformat_int(g, num); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ stat = reformat_end_map(g); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ return yajl_gen_status_ok; ++} +diff --git a/src/lxc/json/defs.h b/src/lxc/json/defs.h +new file mode 100644 +index 000000000..0bbd8ac89 +--- /dev/null ++++ b/src/lxc/json/defs.h +@@ -0,0 +1,37 @@ ++// Generated from defs.json. Do not edit! ++#ifndef DEFS_SCHEMA_H ++#define DEFS_SCHEMA_H ++ ++#include ++#include ++#include "json_common.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++typedef struct { ++ char *path; ++ ++ char **args; ++ size_t args_len; ++ ++ char **env; ++ size_t env_len; ++ ++ int timeout; ++ ++} ++defs_hook; ++ ++void free_defs_hook(defs_hook *ptr); ++ ++defs_hook *make_defs_hook(yajl_val tree, struct parser_context *ctx, parser_error *err); ++ ++yajl_gen_status gen_defs_hook(yajl_gen g, defs_hook *ptr, struct parser_context *ctx, parser_error *err); ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +diff --git a/src/lxc/json/json_common.c b/src/lxc/json/json_common.c +new file mode 100755 +index 000000000..ec20c5982 +--- /dev/null ++++ b/src/lxc/json/json_common.c +@@ -0,0 +1,1153 @@ ++// Auto generated file. Do not edit! ++#define _GNU_SOURCE ++#include ++#include ++#include ++#include "json_common.h" ++ ++#define MAX_NUM_STR_LEN 21 ++ ++yajl_gen_status reformat_number(void *ctx, const char *str, size_t len) { ++ yajl_gen g = (yajl_gen) ctx; ++ return yajl_gen_number(g, str, len); ++} ++ ++yajl_gen_status reformat_uint(void *ctx, long long unsigned int num) { ++ char numstr[MAX_NUM_STR_LEN]; ++ int ret; ++ ++ ret = snprintf(numstr, MAX_NUM_STR_LEN, "%llu", num); ++ if (ret < 0 || ret >= MAX_NUM_STR_LEN) { ++ return yajl_gen_in_error_state; ++ } ++ return reformat_number(ctx, (const char *)numstr, strlen(numstr)); ++} ++ ++yajl_gen_status reformat_int(void *ctx, long long int num) { ++ char numstr[MAX_NUM_STR_LEN]; ++ int ret; ++ ++ ret = snprintf(numstr, MAX_NUM_STR_LEN, "%lld", num); ++ if (ret < 0 || ret >= MAX_NUM_STR_LEN) { ++ return yajl_gen_in_error_state; ++ } ++ return reformat_number(ctx, (const char *)numstr, strlen(numstr)); ++} ++ ++yajl_gen_status reformat_double(void *ctx, double num) { ++ yajl_gen g = (yajl_gen) ctx; ++ return yajl_gen_double(g, num); ++} ++ ++yajl_gen_status reformat_string(void *ctx, const char *str, size_t len) { ++ yajl_gen g = (yajl_gen) ctx; ++ return yajl_gen_string(g, (const unsigned char *)str, len); ++} ++ ++yajl_gen_status reformat_null(void *ctx) { ++ yajl_gen g = (yajl_gen) ctx; ++ return yajl_gen_null(g); ++} ++ ++yajl_gen_status reformat_bool(void *ctx, int boolean) { ++ yajl_gen g = (yajl_gen) ctx; ++ return yajl_gen_bool(g, boolean); ++} ++ ++yajl_gen_status reformat_map_key(void *ctx, const char *str, size_t len) { ++ yajl_gen g = (yajl_gen) ctx; ++ return yajl_gen_string(g, (const unsigned char *)str, len); ++} ++ ++yajl_gen_status reformat_start_map(void *ctx) { ++ yajl_gen g = (yajl_gen) ctx; ++ return yajl_gen_map_open(g); ++} ++ ++yajl_gen_status reformat_end_map(void *ctx) { ++ yajl_gen g = (yajl_gen) ctx; ++ return yajl_gen_map_close(g); ++} ++ ++yajl_gen_status reformat_start_array(void *ctx) { ++ yajl_gen g = (yajl_gen) ctx; ++ return yajl_gen_array_open(g); ++} ++ ++yajl_gen_status reformat_end_array(void *ctx) { ++ yajl_gen g = (yajl_gen) ctx; ++ return yajl_gen_array_close(g); ++} ++ ++bool json_gen_init(yajl_gen *g, struct parser_context *ctx) { ++ *g = yajl_gen_alloc(NULL); ++ if (NULL == *g) { ++ return false; ++ ++ } ++ yajl_gen_config(*g, yajl_gen_beautify, !(ctx->options & GEN_OPTIONS_SIMPLIFY)); ++ yajl_gen_config(*g, yajl_gen_validate_utf8, !(ctx->options & GEN_OPTIONS_NOT_VALIDATE_UTF8)); ++ return true; ++} ++ ++yajl_val get_val(yajl_val tree, const char *name, yajl_type type) { ++ const char *path[] = { name, NULL }; ++ return yajl_tree_get(tree, path, type); ++} ++ ++void *safe_malloc(size_t size) { ++ void *ret = NULL; ++ if (size == 0) { ++ abort(); ++ } ++ ret = calloc(1, size); ++ if (ret == NULL) { ++ abort(); ++ } ++ return ret; ++} ++ ++int common_safe_double(const char *numstr, double *converted) { ++ char *err_str = NULL; ++ double d; ++ ++ if (numstr == NULL) { ++ return -EINVAL; ++ } ++ ++ errno = 0; ++ d = strtod(numstr, &err_str); ++ if (errno > 0) { ++ return -errno; ++ } ++ ++ if (err_str == NULL || err_str == numstr || *err_str != '\0') { ++ return -EINVAL; ++ } ++ ++ *converted = d; ++ return 0; ++} ++ ++int common_safe_uint8(const char *numstr, uint8_t *converted) { ++ char *err = NULL; ++ unsigned long int uli; ++ ++ if (numstr == NULL) { ++ return -EINVAL; ++ } ++ ++ errno = 0; ++ uli = strtoul(numstr, &err, 0); ++ if (errno > 0) { ++ return -errno; ++ } ++ ++ if (err == NULL || err == numstr || *err != '\0') { ++ return -EINVAL; ++ } ++ ++ if (uli > UINT8_MAX) { ++ return -ERANGE; ++ } ++ ++ *converted = (uint8_t)uli; ++ return 0; ++} ++ ++int common_safe_uint16(const char *numstr, uint16_t *converted) { ++ char *err = NULL; ++ unsigned long int uli; ++ ++ if (numstr == NULL) { ++ return -EINVAL; ++ } ++ ++ errno = 0; ++ uli = strtoul(numstr, &err, 0); ++ if (errno > 0) { ++ return -errno; ++ } ++ ++ if (err == NULL || err == numstr || *err != '\0') { ++ return -EINVAL; ++ } ++ ++ if (uli > UINT16_MAX) { ++ return -ERANGE; ++ } ++ ++ *converted = (uint16_t)uli; ++ return 0; ++} ++ ++int common_safe_uint32(const char *numstr, uint32_t *converted) { ++ char *err = NULL; ++ unsigned long long int ull; ++ ++ if (numstr == NULL) { ++ return -EINVAL; ++ } ++ ++ errno = 0; ++ ull = strtoull(numstr, &err, 0); ++ if (errno > 0) { ++ return -errno; ++ } ++ ++ if (err == NULL || err == numstr || *err != '\0') { ++ return -EINVAL; ++ } ++ ++ if (ull > UINT32_MAX) { ++ return -ERANGE; ++ } ++ ++ *converted = (uint32_t)ull; ++ return 0; ++} ++ ++int common_safe_uint64(const char *numstr, uint64_t *converted) { ++ char *err = NULL; ++ unsigned long long int ull; ++ ++ if (numstr == NULL) { ++ return -EINVAL; ++ } ++ ++ errno = 0; ++ ull = strtoull(numstr, &err, 0); ++ if (errno > 0) { ++ return -errno; ++ } ++ ++ if (err == NULL || err == numstr || *err != '\0') { ++ return -EINVAL; ++ } ++ ++ *converted = (uint64_t)ull; ++ return 0; ++} ++ ++int common_safe_uint(const char *numstr, unsigned int *converted) { ++ char *err = NULL; ++ unsigned long long int ull; ++ ++ if (numstr == NULL) { ++ return -EINVAL; ++ } ++ ++ errno = 0; ++ ull = strtoull(numstr, &err, 0); ++ if (errno > 0) { ++ return -errno; ++ } ++ ++ if (err == NULL || err == numstr || *err != '\0') { ++ return -EINVAL; ++ } ++ ++ if (ull > UINT_MAX) { ++ return -ERANGE; ++ } ++ ++ *converted = (unsigned int)ull; ++ return 0; ++} ++ ++int common_safe_int8(const char *numstr, int8_t *converted) { ++ char *err = NULL; ++ long int li; ++ ++ if (numstr == NULL) { ++ return -EINVAL; ++ } ++ ++ errno = 0; ++ li = strtol(numstr, &err, 0); ++ if (errno > 0) { ++ return -errno; ++ } ++ ++ if (err == NULL || err == numstr || *err != '\0') { ++ return -EINVAL; ++ } ++ ++ if (li > INT8_MAX || li < INT8_MIN) { ++ return -ERANGE; ++ } ++ ++ *converted = (int8_t)li; ++ return 0; ++} ++ ++int common_safe_int16(const char *numstr, int16_t *converted) { ++ char *err = NULL; ++ long int li; ++ ++ if (numstr == NULL) { ++ return -EINVAL; ++ } ++ ++ errno = 0; ++ li = strtol(numstr, &err, 0); ++ if (errno > 0) { ++ return -errno; ++ } ++ ++ if (err == NULL || err == numstr || *err != '\0') { ++ return -EINVAL; ++ } ++ ++ if (li > INT16_MAX || li < INT16_MIN) { ++ return -ERANGE; ++ } ++ ++ *converted = (int16_t)li; ++ return 0; ++} ++ ++int common_safe_int32(const char *numstr, int32_t *converted) { ++ char *err = NULL; ++ long long int lli; ++ ++ if (numstr == NULL) { ++ return -EINVAL; ++ } ++ ++ errno = 0; ++ lli = strtol(numstr, &err, 0); ++ if (errno > 0) { ++ return -errno; ++ } ++ ++ if (err == NULL || err == numstr || *err != '\0') { ++ return -EINVAL; ++ } ++ ++ if (lli > INT32_MAX || lli < INT32_MIN) { ++ return -ERANGE; ++ } ++ ++ *converted = (int32_t)lli; ++ return 0; ++} ++ ++int common_safe_int64(const char *numstr, int64_t *converted) { ++ char *err = NULL; ++ long long int lli; ++ ++ if (numstr == NULL) { ++ return -EINVAL; ++ } ++ ++ errno = 0; ++ lli = strtoll(numstr, &err, 0); ++ if (errno > 0) { ++ return -errno; ++ } ++ ++ if (err == NULL || err == numstr || *err != '\0') { ++ return -EINVAL; ++ } ++ ++ *converted = (int64_t)lli; ++ return 0; ++} ++ ++int common_safe_int(const char *numstr, int *converted) { ++ char *err = NULL; ++ long long int lli; ++ ++ if (numstr == NULL) { ++ return -EINVAL; ++ } ++ ++ errno = 0; ++ lli = strtol(numstr, &err, 0); ++ if (errno > 0) { ++ return -errno; ++ } ++ ++ if (err == NULL || err == numstr || *err != '\0') { ++ return -EINVAL; ++ } ++ ++ if (lli > INT_MAX || lli < INT_MIN) { ++ return -ERANGE; ++ } ++ ++ *converted = (int)lli; ++ return 0; ++} ++ ++yajl_gen_status gen_json_map_int_int(void *ctx, json_map_int_int *map, struct parser_context *ptx, parser_error *err) { ++ yajl_gen_status stat = yajl_gen_status_ok; ++ yajl_gen g = (yajl_gen) ctx; ++ size_t len = 0, i = 0; ++ if (map != NULL) { ++ len = map->len; ++ } ++ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { ++ yajl_gen_config(g, yajl_gen_beautify, 0); ++ } ++ stat = reformat_start_map(g); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ ++ } ++ for (i = 0; i < len; i++) { ++ char numstr[MAX_NUM_STR_LEN]; ++ int nret; ++ nret = snprintf(numstr, MAX_NUM_STR_LEN, "%lld", (long long int)map->keys[i]); ++ if (nret < 0 || nret >= MAX_NUM_STR_LEN) { ++ if (!*err && asprintf(err, "Error to print string") < 0) { ++ *(err) = safe_strdup("error allocating memory"); ++ } ++ return yajl_gen_in_error_state; ++ } ++ stat = reformat_string(g, numstr, strlen(numstr)); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ stat = reformat_int(g, map->values[i]); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ } ++ ++ stat = reformat_end_map(g); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { ++ yajl_gen_config(g, yajl_gen_beautify, 1); ++ } ++ return yajl_gen_status_ok; ++} ++ ++void free_json_map_int_int(json_map_int_int *map) { ++ if (map != NULL) { ++ size_t i; ++ for (i = 0; i < map->len; i++) { ++ // No need to free key for type int ++ // No need to free value for type int ++ } ++ free(map->keys); ++ map->keys = NULL; ++ free(map->values); ++ map->values = NULL; ++ free(map); ++ } ++} ++json_map_int_int *make_json_map_int_int(yajl_val src, struct parser_context *ctx, parser_error *err) { ++ json_map_int_int *ret = NULL; ++ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { ++ size_t i; ++ size_t len = YAJL_GET_OBJECT(src)->len; ++ if (len > SIZE_MAX / sizeof(int) - 1) { ++ return NULL; ++ } ++ ret = safe_malloc(sizeof(*ret)); ++ ret->len = len; ++ ret->keys = safe_malloc((len + 1) * sizeof(int)); ++ ret->values = safe_malloc((len + 1) * sizeof(int)); ++ for (i = 0; i < len; i++) { ++ const char *srckey = YAJL_GET_OBJECT(src)->keys[i]; ++ yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; ++ ++ if (srckey != NULL) { ++ int invalid; ++ invalid = common_safe_int(srckey, &(ret->keys[i])); ++ if (invalid) { ++ if (*err == NULL && asprintf(err, "Invalid key '%s' with type 'int': %s", srckey, strerror(-invalid)) < 0) { ++ *(err) = safe_strdup("error allocating memory"); ++ } ++ free_json_map_int_int(ret); ++ return NULL; ++ } ++ } ++ ++ if (srcval != NULL) { ++ int invalid; ++ if (!YAJL_IS_NUMBER(srcval)) { ++ if (*err == NULL && asprintf(err, "Invalid value with type 'int' for key '%s'", srckey) < 0) { ++ *(err) = safe_strdup("error allocating memory"); ++ } ++ free_json_map_int_int(ret); ++ return NULL; ++ } ++ invalid = common_safe_int(YAJL_GET_NUMBER(srcval), &(ret->values[i])); ++ if (invalid) { ++ if (*err == NULL && asprintf(err, "Invalid value with type 'int' for key '%s': %s", srckey, strerror(-invalid)) < 0) { ++ *(err) = safe_strdup("error allocating memory"); ++ } ++ free_json_map_int_int(ret); ++ return NULL; ++ } ++ } ++ } ++ } ++ return ret; ++} ++int append_json_map_int_int(json_map_int_int *map, int key, int val) { ++ size_t len; ++ int *keys = NULL; ++ int *vals = NULL; ++ ++ if (map == NULL) { ++ return -1; ++ } ++ ++ if ((SIZE_MAX / sizeof(int) - 1) < map->len) { ++ return -1; ++ } ++ ++ len = map->len + 1; ++ keys = safe_malloc(len * sizeof(int)); ++ vals = safe_malloc(len * sizeof(int)); ++ ++ if (map->len) { ++ (void)memcpy(keys, map->keys, map->len * sizeof(int)); ++ (void)memcpy(vals, map->values, map->len * sizeof(int)); ++ } ++ free(map->keys); ++ map->keys = keys; ++ free(map->values); ++ map->values = vals; ++ map->keys[map->len] = key; ++ map->values[map->len] = val; ++ ++ map->len++; ++ return 0; ++} ++ ++yajl_gen_status gen_json_map_int_bool(void *ctx, json_map_int_bool *map, struct parser_context *ptx, parser_error *err) { ++ yajl_gen_status stat = yajl_gen_status_ok; ++ yajl_gen g = (yajl_gen) ctx; ++ size_t len = 0, i = 0; ++ if (map != NULL) { ++ len = map->len; ++ } ++ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { ++ yajl_gen_config(g, yajl_gen_beautify, 0); ++ } ++ stat = reformat_start_map(g); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ ++ } ++ for (i = 0; i < len; i++) { ++ char numstr[MAX_NUM_STR_LEN]; ++ int nret; ++ nret = snprintf(numstr, MAX_NUM_STR_LEN, "%lld", (long long int)map->keys[i]); ++ if (nret < 0 || nret >= MAX_NUM_STR_LEN) { ++ if (!*err && asprintf(err, "Error to print string") < 0) { ++ *(err) = safe_strdup("error allocating memory"); ++ } ++ return yajl_gen_in_error_state; ++ } ++ stat = reformat_string(g, numstr, strlen(numstr)); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ stat = reformat_bool(g, map->values[i]); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ } ++ ++ stat = reformat_end_map(g); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { ++ yajl_gen_config(g, yajl_gen_beautify, 1); ++ } ++ return yajl_gen_status_ok; ++} ++ ++void free_json_map_int_bool(json_map_int_bool *map) { ++ if (map != NULL) { ++ free(map->keys); ++ map->keys = NULL; ++ free(map->values); ++ map->values = NULL; ++ free(map); ++ } ++} ++json_map_int_bool *make_json_map_int_bool(yajl_val src, struct parser_context *ctx, parser_error *err) { ++ json_map_int_bool *ret = NULL; ++ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { ++ size_t i; ++ size_t len = YAJL_GET_OBJECT(src)->len; ++ if (len > SIZE_MAX / sizeof(int) - 1) { ++ return NULL; ++ } ++ ret = safe_malloc(sizeof(*ret)); ++ ret->len = len; ++ ret->keys = safe_malloc((len + 1) * sizeof(int)); ++ ret->values = safe_malloc((len + 1) * sizeof(bool)); ++ for (i = 0; i < len; i++) { ++ const char *srckey = YAJL_GET_OBJECT(src)->keys[i]; ++ yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; ++ ++ if (srckey != NULL) { ++ int invalid; ++ invalid = common_safe_int(srckey, &(ret->keys[i])); ++ if (invalid) { ++ if (*err == NULL && asprintf(err, "Invalid key '%s' with type 'int': %s", srckey, strerror(-invalid)) < 0) { ++ *(err) = safe_strdup("error allocating memory"); ++ } ++ free_json_map_int_bool(ret); ++ return NULL; ++ } ++ } ++ ++ if (srcval != NULL) { ++ if (YAJL_IS_TRUE(srcval)) { ++ ret->values[i] = true; ++ } else if (YAJL_IS_FALSE(srcval)) { ++ ret->values[i] = false; ++ } else { ++ if (*err == NULL && asprintf(err, "Invalid value with type 'bool' for key '%s'", srckey) < 0) { ++ *(err) = safe_strdup("error allocating memory"); ++ } ++ free_json_map_int_bool(ret); ++ return NULL; ++ } ++ } ++ } ++ } ++ return ret; ++} ++int append_json_map_int_bool(json_map_int_bool *map, int key, bool val) { ++ size_t len; ++ int *keys = NULL; ++ bool *vals = NULL; ++ ++ if (map == NULL) { ++ return -1; ++ } ++ ++ if ((SIZE_MAX / sizeof(int) - 1) < map->len || (SIZE_MAX / sizeof(bool) - 1) < map->len) { ++ return -1; ++ } ++ ++ len = map->len + 1; ++ keys = safe_malloc(len * sizeof(int)); ++ vals = safe_malloc(len * sizeof(bool)); ++ ++ if (map->len) { ++ (void)memcpy(keys, map->keys, map->len * sizeof(int)); ++ (void)memcpy(vals, map->values, map->len * sizeof(bool)); ++ } ++ free(map->keys); ++ map->keys = keys; ++ free(map->values); ++ map->values = vals; ++ map->keys[map->len] = key; ++ map->values[map->len] = val; ++ ++ map->len++; ++ return 0; ++} ++ ++yajl_gen_status gen_json_map_int_string(void *ctx, json_map_int_string *map, struct parser_context *ptx, parser_error *err) { ++ yajl_gen_status stat = yajl_gen_status_ok; ++ yajl_gen g = (yajl_gen) ctx; ++ size_t len = 0, i = 0; ++ if (map != NULL) { ++ len = map->len; ++ } ++ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { ++ yajl_gen_config(g, yajl_gen_beautify, 0); ++ } ++ stat = reformat_start_map(g); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ ++ } ++ for (i = 0; i < len; i++) { ++ char numstr[MAX_NUM_STR_LEN]; ++ int nret; ++ nret = snprintf(numstr, MAX_NUM_STR_LEN, "%lld", (long long int)map->keys[i]); ++ if (nret < 0 || nret >= MAX_NUM_STR_LEN) { ++ if (!*err && asprintf(err, "Error to print string") < 0) { ++ *(err) = safe_strdup("error allocating memory"); ++ } ++ return yajl_gen_in_error_state; ++ } ++ stat = reformat_string(g, numstr, strlen(numstr)); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ stat = reformat_string(g, map->values[i], strlen(map->values[i]));; ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ } ++ ++ stat = reformat_end_map(g); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { ++ yajl_gen_config(g, yajl_gen_beautify, 1); ++ } ++ return yajl_gen_status_ok; ++} ++ ++void free_json_map_int_string(json_map_int_string *map) { ++ if (map != NULL) { ++ size_t i; ++ for (i = 0; i < map->len; i++) { ++ // No need to free key for type int ++ free(map->values[i]); ++ map->values[i] = NULL; ++ } ++ free(map->keys); ++ map->keys = NULL; ++ free(map->values); ++ map->values = NULL; ++ free(map); ++ } ++} ++json_map_int_string *make_json_map_int_string(yajl_val src, struct parser_context *ctx, parser_error *err) { ++ json_map_int_string *ret = NULL; ++ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { ++ size_t i; ++ size_t len = YAJL_GET_OBJECT(src)->len; ++ if (len > SIZE_MAX / sizeof(char *) - 1) { ++ return NULL; ++ } ++ ret = safe_malloc(sizeof(*ret)); ++ ret->len = len; ++ ret->keys = safe_malloc((len + 1) * sizeof(int)); ++ ret->values = safe_malloc((len + 1) * sizeof(char *)); ++ for (i = 0; i < len; i++) { ++ const char *srckey = YAJL_GET_OBJECT(src)->keys[i]; ++ yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; ++ ++ if (srckey != NULL) { ++ int invalid; ++ invalid = common_safe_int(srckey, &(ret->keys[i])); ++ if (invalid) { ++ if (*err == NULL && asprintf(err, "Invalid key '%s' with type 'int': %s", srckey, strerror(-invalid)) < 0) { ++ *(err) = safe_strdup("error allocating memory"); ++ } ++ free_json_map_int_string(ret); ++ return NULL; ++ } ++ } ++ ++ if (srcval != NULL) { ++ if (!YAJL_IS_STRING(srcval)) { ++ if (*err == NULL && asprintf(err, "Invalid value with type 'string' for key '%s'", srckey) < 0) { ++ *(err) = safe_strdup("error allocating memory"); ++ } ++ free_json_map_int_string(ret); ++ return NULL; ++ } ++ char *str = YAJL_GET_STRING(srcval); ++ ret->values[i] = safe_strdup(str ? str : ""); ++ } ++ } ++ } ++ return ret; ++} ++int append_json_map_int_string(json_map_int_string *map, int key, const char *val) { ++ size_t len; ++ int *keys = NULL; ++ char **vals = NULL; ++ ++ if (map == NULL) { ++ return -1; ++ } ++ ++ if ((SIZE_MAX / sizeof(int) - 1) < map->len || (SIZE_MAX / sizeof(char *) - 1) < map->len) { ++ return -1; ++ } ++ ++ len = map->len + 1; ++ keys = safe_malloc(len * sizeof(int)); ++ vals = safe_malloc(len * sizeof(char *)); ++ ++ if (map->len) { ++ (void)memcpy(keys, map->keys, map->len * sizeof(int)); ++ (void)memcpy(vals, map->values, map->len * sizeof(char *)); ++ } ++ free(map->keys); ++ map->keys = keys; ++ free(map->values); ++ map->values = vals; ++ map->keys[map->len] = key; ++ map->values[map->len] = safe_strdup(val ? val : ""); ++ ++ map->len++; ++ return 0; ++} ++ ++yajl_gen_status gen_json_map_string_int(void *ctx, json_map_string_int *map, struct parser_context *ptx, parser_error *err) { ++ yajl_gen_status stat = yajl_gen_status_ok; ++ yajl_gen g = (yajl_gen) ctx; ++ size_t len = 0, i = 0; ++ if (map != NULL) { ++ len = map->len; ++ } ++ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { ++ yajl_gen_config(g, yajl_gen_beautify, 0); ++ } ++ stat = reformat_start_map(g); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ ++ } ++ for (i = 0; i < len; i++) { ++ stat = reformat_string(g, map->keys[i], strlen(map->keys[i])); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ stat = reformat_int(g, map->values[i]); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ } ++ ++ stat = reformat_end_map(g); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { ++ yajl_gen_config(g, yajl_gen_beautify, 1); ++ } ++ return yajl_gen_status_ok; ++} ++ ++void free_json_map_string_int(json_map_string_int *map) { ++ if (map != NULL) { ++ size_t i; ++ for (i = 0; i < map->len; i++) { ++ free(map->keys[i]); ++ map->keys[i] = NULL; ++ // No need to free value for type int ++ } ++ free(map->keys); ++ map->keys = NULL; ++ free(map->values); ++ map->values = NULL; ++ free(map); ++ } ++} ++json_map_string_int *make_json_map_string_int(yajl_val src, struct parser_context *ctx, parser_error *err) { ++ json_map_string_int *ret = NULL; ++ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { ++ size_t i; ++ size_t len = YAJL_GET_OBJECT(src)->len; ++ if (len > SIZE_MAX / sizeof(char *) - 1) { ++ return NULL; ++ } ++ ret = safe_malloc(sizeof(*ret)); ++ ret->len = len; ++ ret->keys = safe_malloc((len + 1) * sizeof(char *)); ++ ret->values = safe_malloc((len + 1) * sizeof(int)); ++ for (i = 0; i < len; i++) { ++ const char *srckey = YAJL_GET_OBJECT(src)->keys[i]; ++ yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; ++ ret->keys[i] = safe_strdup(srckey ? srckey : ""); ++ ++ if (srcval != NULL) { ++ int invalid; ++ if (!YAJL_IS_NUMBER(srcval)) { ++ if (*err == NULL && asprintf(err, "Invalid value with type 'int' for key '%s'", srckey) < 0) { ++ *(err) = safe_strdup("error allocating memory"); ++ } ++ free_json_map_string_int(ret); ++ return NULL; ++ } ++ invalid = common_safe_int(YAJL_GET_NUMBER(srcval), &(ret->values[i])); ++ if (invalid) { ++ if (*err == NULL && asprintf(err, "Invalid value with type 'int' for key '%s': %s", srckey, strerror(-invalid)) < 0) { ++ *(err) = safe_strdup("error allocating memory"); ++ } ++ free_json_map_string_int(ret); ++ return NULL; ++ } ++ } ++ } ++ } ++ return ret; ++} ++int append_json_map_string_int(json_map_string_int *map, const char *key, int val) { ++ size_t len; ++ char **keys = NULL; ++ int *vals = NULL; ++ ++ if (map == NULL) { ++ return -1; ++ } ++ ++ if ((SIZE_MAX / sizeof(char *) - 1) < map->len || (SIZE_MAX / sizeof(int) - 1) < map->len) { ++ return -1; ++ } ++ ++ len = map->len + 1; ++ keys = safe_malloc(len * sizeof(char *)); ++ vals = safe_malloc(len * sizeof(int)); ++ ++ if (map->len) { ++ (void)memcpy(keys, map->keys, map->len * sizeof(char *)); ++ (void)memcpy(vals, map->values, map->len * sizeof(int)); ++ } ++ free(map->keys); ++ map->keys = keys; ++ free(map->values); ++ map->values = vals; ++ map->keys[map->len] = safe_strdup(key ? key : ""); ++ map->values[map->len] = val; ++ ++ map->len++; ++ return 0; ++} ++ ++yajl_gen_status gen_json_map_string_bool(void *ctx, json_map_string_bool *map, struct parser_context *ptx, parser_error *err) { ++ yajl_gen_status stat = yajl_gen_status_ok; ++ yajl_gen g = (yajl_gen) ctx; ++ size_t len = 0, i = 0; ++ if (map != NULL) { ++ len = map->len; ++ } ++ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { ++ yajl_gen_config(g, yajl_gen_beautify, 0); ++ } ++ stat = reformat_start_map(g); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ ++ } ++ for (i = 0; i < len; i++) { ++ stat = reformat_string(g, map->keys[i], strlen(map->keys[i])); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ stat = reformat_bool(g, map->values[i]); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ } ++ ++ stat = reformat_end_map(g); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { ++ yajl_gen_config(g, yajl_gen_beautify, 1); ++ } ++ return yajl_gen_status_ok; ++} ++ ++void free_json_map_string_bool(json_map_string_bool *map) { ++ if (map != NULL) { ++ size_t i; ++ for (i = 0; i < map->len; i++) { ++ free(map->keys[i]); ++ map->keys[i] = NULL; ++ // No need to free value for type bool ++ } ++ free(map->keys); ++ map->keys = NULL; ++ free(map->values); ++ map->values = NULL; ++ free(map); ++ } ++} ++json_map_string_bool *make_json_map_string_bool(yajl_val src, struct parser_context *ctx, parser_error *err) { ++ json_map_string_bool *ret = NULL; ++ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { ++ size_t i; ++ size_t len = YAJL_GET_OBJECT(src)->len; ++ if (len > SIZE_MAX / sizeof(char *) - 1) { ++ return NULL; ++ } ++ ret = safe_malloc(sizeof(*ret)); ++ ret->len = len; ++ ret->keys = safe_malloc((len + 1) * sizeof(char *)); ++ ret->values = safe_malloc((len + 1) * sizeof(bool)); ++ for (i = 0; i < len; i++) { ++ const char *srckey = YAJL_GET_OBJECT(src)->keys[i]; ++ yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; ++ ret->keys[i] = safe_strdup(srckey ? srckey : ""); ++ ++ if (srcval != NULL) { ++ if (YAJL_IS_TRUE(srcval)) { ++ ret->values[i] = true; ++ } else if (YAJL_IS_FALSE(srcval)) { ++ ret->values[i] = false; ++ } else { ++ if (*err == NULL && asprintf(err, "Invalid value with type 'bool' for key '%s'", srckey) < 0) { ++ *(err) = safe_strdup("error allocating memory"); ++ } ++ free_json_map_string_bool(ret); ++ return NULL; ++ } ++ } ++ } ++ } ++ return ret; ++} ++ ++int append_json_map_string_bool(json_map_string_bool *map, const char *key, bool val) { ++ size_t len; ++ char **keys = NULL; ++ bool *vals = NULL; ++ ++ if (map == NULL) { ++ return -1; ++ } ++ ++ if ((SIZE_MAX / sizeof(char *) - 1) < map->len || (SIZE_MAX / sizeof(bool) - 1) < map->len) { ++ return -1; ++ } ++ ++ len = map->len + 1; ++ keys = safe_malloc(len * sizeof(char *)); ++ vals = safe_malloc(len * sizeof(bool)); ++ ++ if (map->len) { ++ (void)memcpy(keys, map->keys, map->len * sizeof(char *)); ++ (void)memcpy(vals, map->values, map->len * sizeof(bool)); ++ } ++ free(map->keys); ++ map->keys = keys; ++ free(map->values); ++ map->values = vals; ++ map->keys[map->len] = safe_strdup(key ? key : ""); ++ map->values[map->len] = val; ++ ++ map->len++; ++ return 0; ++} ++ ++yajl_gen_status gen_json_map_string_string(void *ctx, json_map_string_string *map, struct parser_context *ptx, parser_error *err) { ++ yajl_gen_status stat = yajl_gen_status_ok; ++ yajl_gen g = (yajl_gen) ctx; ++ size_t len = 0, i = 0; ++ if (map != NULL) { ++ len = map->len; ++ } ++ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { ++ yajl_gen_config(g, yajl_gen_beautify, 0); ++ } ++ stat = reformat_start_map(g); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ ++ } ++ for (i = 0; i < len; i++) { ++ stat = reformat_string(g, map->keys[i], strlen(map->keys[i])); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ stat = reformat_string(g, map->values[i], strlen(map->values[i]));; ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ } ++ ++ stat = reformat_end_map(g); ++ if (yajl_gen_status_ok != stat) { ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { ++ yajl_gen_config(g, yajl_gen_beautify, 1); ++ } ++ return yajl_gen_status_ok; ++} ++ ++void free_json_map_string_string(json_map_string_string *map) { ++ if (map != NULL) { ++ size_t i; ++ for (i = 0; i < map->len; i++) { ++ free(map->keys[i]); ++ map->keys[i] = NULL; ++ free(map->values[i]); ++ map->values[i] = NULL; ++ } ++ free(map->keys); ++ map->keys = NULL; ++ free(map->values); ++ map->values = NULL; ++ free(map); ++ } ++} ++json_map_string_string *make_json_map_string_string(yajl_val src, struct parser_context *ctx, parser_error *err) { ++ json_map_string_string *ret = NULL; ++ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { ++ size_t i; ++ size_t len = YAJL_GET_OBJECT(src)->len; ++ if (len > SIZE_MAX / sizeof(char *) - 1) { ++ return NULL; ++ } ++ ret = safe_malloc(sizeof(*ret)); ++ ret->len = len; ++ ret->keys = safe_malloc((len + 1) * sizeof(char *)); ++ ret->values = safe_malloc((len + 1) * sizeof(char *)); ++ for (i = 0; i < len; i++) { ++ const char *srckey = YAJL_GET_OBJECT(src)->keys[i]; ++ yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; ++ ret->keys[i] = safe_strdup(srckey ? srckey : ""); ++ ++ if (srcval != NULL) { ++ if (!YAJL_IS_STRING(srcval)) { ++ if (*err == NULL && asprintf(err, "Invalid value with type 'string' for key '%s'", srckey) < 0) { ++ *(err) = safe_strdup("error allocating memory"); ++ } ++ free_json_map_string_string(ret); ++ return NULL; ++ } ++ char *str = YAJL_GET_STRING(srcval); ++ ret->values[i] = safe_strdup(str ? str : ""); ++ } ++ } ++ } ++ return ret; ++} ++int append_json_map_string_string(json_map_string_string *map, const char *key, const char *val) { ++ size_t len, i; ++ char **keys = NULL; ++ char **vals = NULL; ++ ++ if (map == NULL) { ++ return -1; ++ } ++ ++ for (i = 0; i < map->len; i++) { ++ if (strcmp(map->keys[i], key) == 0) { ++ free(map->values[i]); ++ map->values[i] = safe_strdup(val ? val : ""); ++ return 0; ++ } ++ } ++ ++ if ((SIZE_MAX / sizeof(char *) - 1) < map->len) { ++ return -1; ++ } ++ ++ len = map->len + 1; ++ keys = safe_malloc(len * sizeof(char *)); ++ vals = safe_malloc(len * sizeof(char *)); ++ ++ if (map->len) { ++ (void)memcpy(keys, map->keys, map->len * sizeof(char *)); ++ (void)memcpy(vals, map->values, map->len * sizeof(char *)); ++ } ++ free(map->keys); ++ map->keys = keys; ++ free(map->values); ++ map->values = vals; ++ map->keys[map->len] = safe_strdup(key ? key : ""); ++ map->values[map->len] = safe_strdup(val ? val : ""); ++ ++ map->len++; ++ return 0; ++} +diff --git a/src/lxc/json/json_common.h b/src/lxc/json/json_common.h +new file mode 100755 +index 000000000..60aa5fd93 +--- /dev/null ++++ b/src/lxc/json/json_common.h +@@ -0,0 +1,185 @@ ++// Auto generated file. Do not edit! ++#ifndef _JSON_COMMON_H ++#define _JSON_COMMON_H ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "utils.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++# undef linux ++ ++//options to report error if there is unknown key found in json ++# define PARSE_OPTIONS_STRICT 0x01 ++//options to generate all key and value ++# define GEN_OPTIONS_ALLKEYVALUE 0x02 ++//options to generate simplify(no indent) json string ++# define GEN_OPTIONS_SIMPLIFY 0x04 ++//options not to validate utf8 data ++# define GEN_OPTIONS_NOT_VALIDATE_UTF8 0x08 ++ ++#define GEN_SET_ERROR_AND_RETURN(stat, err) { \ ++ if (*(err) == NULL) {\ ++ if (asprintf(err, "%s: %s: %d: error generating json, errcode: %d", __FILE__, __func__, __LINE__, stat) < 0) { \ ++ *(err) = safe_strdup("error allocating memory"); \ ++ } \ ++ }\ ++ return stat; \ ++ } ++ ++typedef char *parser_error; ++ ++struct parser_context { ++ unsigned int options; ++ FILE *stderr; ++}; ++ ++yajl_gen_status reformat_number(void *ctx, const char *str, size_t len); ++ ++yajl_gen_status reformat_uint(void *ctx, long long unsigned int num); ++ ++yajl_gen_status reformat_int(void *ctx, long long int num); ++ ++yajl_gen_status reformat_double(void *ctx, double num); ++ ++yajl_gen_status reformat_string(void *ctx, const char *str, size_t len); ++ ++yajl_gen_status reformat_null(void *ctx); ++ ++yajl_gen_status reformat_bool(void *ctx, int boolean); ++ ++yajl_gen_status reformat_map_key(void *ctx, const char *str, size_t len); ++ ++yajl_gen_status reformat_start_map(void *ctx); ++ ++yajl_gen_status reformat_end_map(void *ctx); ++ ++yajl_gen_status reformat_start_array(void *ctx); ++ ++yajl_gen_status reformat_end_array(void *ctx); ++ ++bool json_gen_init(yajl_gen *g, struct parser_context *ctx); ++ ++yajl_val get_val(yajl_val tree, const char *name, yajl_type type); ++ ++void *safe_malloc(size_t size); ++ ++int common_safe_double(const char *numstr, double *converted); ++ ++int common_safe_uint8(const char *numstr, uint8_t *converted); ++ ++int common_safe_uint16(const char *numstr, uint16_t *converted); ++ ++int common_safe_uint32(const char *numstr, uint32_t *converted); ++ ++int common_safe_uint64(const char *numstr, uint64_t *converted); ++ ++int common_safe_uint(const char *numstr, unsigned int *converted); ++ ++int common_safe_int8(const char *numstr, int8_t *converted); ++ ++int common_safe_int16(const char *numstr, int16_t *converted); ++ ++int common_safe_int32(const char *numstr, int32_t *converted); ++ ++int common_safe_int64(const char *numstr, int64_t *converted); ++ ++int common_safe_int(const char *numstr, int *converted); ++ ++typedef struct { ++ int *keys; ++ int *values; ++ size_t len; ++} json_map_int_int; ++ ++void free_json_map_int_int(json_map_int_int *map); ++ ++json_map_int_int *make_json_map_int_int(yajl_val src, struct parser_context *ctx, parser_error *err); ++ ++yajl_gen_status gen_json_map_int_int(void *ctx, json_map_int_int *map, struct parser_context *ptx, parser_error *err); ++ ++int append_json_map_int_int(json_map_int_int *map, int key, int val); ++ ++typedef struct { ++ int *keys; ++ bool *values; ++ size_t len; ++} json_map_int_bool; ++ ++void free_json_map_int_bool(json_map_int_bool *map); ++ ++json_map_int_bool *make_json_map_int_bool(yajl_val src, struct parser_context *ctx, parser_error *err); ++ ++yajl_gen_status gen_json_map_int_bool(void *ctx, json_map_int_bool *map, struct parser_context *ptx, parser_error *err); ++ ++int append_json_map_int_bool(json_map_int_bool *map, int key, bool val); ++ ++typedef struct { ++ int *keys; ++ char **values; ++ size_t len; ++} json_map_int_string; ++ ++void free_json_map_int_string(json_map_int_string *map); ++ ++json_map_int_string *make_json_map_int_string(yajl_val src, struct parser_context *ctx, parser_error *err); ++ ++yajl_gen_status gen_json_map_int_string(void *ctx, json_map_int_string *map, struct parser_context *ptx, parser_error *err); ++ ++int append_json_map_int_string(json_map_int_string *map, int key, const char *val); ++ ++typedef struct { ++ char **keys; ++ int *values; ++ size_t len; ++} json_map_string_int; ++ ++void free_json_map_string_int(json_map_string_int *map); ++ ++json_map_string_int *make_json_map_string_int(yajl_val src, struct parser_context *ctx, parser_error *err); ++ ++yajl_gen_status gen_json_map_string_int(void *ctx, json_map_string_int *map, struct parser_context *ptx, parser_error *err); ++ ++int append_json_map_string_int(json_map_string_int *map, const char *key, int val); ++ ++typedef struct { ++ char **keys; ++ bool *values; ++ size_t len; ++} json_map_string_bool; ++ ++void free_json_map_string_bool(json_map_string_bool *map); ++ ++json_map_string_bool *make_json_map_string_bool(yajl_val src, struct parser_context *ctx, parser_error *err); ++ ++yajl_gen_status gen_json_map_string_bool(void *ctx, json_map_string_bool *map, struct parser_context *ptx, parser_error *err); ++ ++int append_json_map_string_bool(json_map_string_bool *map, const char *key, bool val); ++ ++typedef struct { ++ char **keys; ++ char **values; ++ size_t len; ++} json_map_string_string; ++ ++void free_json_map_string_string(json_map_string_string *map); ++ ++json_map_string_string *make_json_map_string_string(yajl_val src, struct parser_context *ctx, parser_error *err); ++ ++yajl_gen_status gen_json_map_string_string(void *ctx, json_map_string_string *map, struct parser_context *ptx, parser_error *err); ++ ++int append_json_map_string_string(json_map_string_string *map, const char *key, const char *val); ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +\ No newline at end of file +diff --git a/src/lxc/json/logger_json_file.c b/src/lxc/json/logger_json_file.c +new file mode 100644 +index 000000000..6abeef458 +--- /dev/null ++++ b/src/lxc/json/logger_json_file.c +@@ -0,0 +1,246 @@ ++// Generated from json-file.json. Do not edit! ++#ifndef _GNU_SOURCE ++#define _GNU_SOURCE ++#endif ++#include ++#include ++#include "logger_json_file.h" ++ ++logger_json_file *make_logger_json_file(yajl_val tree, struct parser_context *ctx, parser_error *err) { ++ logger_json_file *ret = NULL; ++ *err = 0; ++ if (tree == NULL) ++ return ret; ++ ret = safe_malloc(sizeof(*ret)); ++ { ++ yajl_val tmp = get_val(tree, "log", yajl_t_string); ++ if (tmp != NULL) { ++ char *str = YAJL_GET_STRING(tmp); ++ ret->log = (uint8_t *)safe_strdup(str ? str : ""); ++ ret->log_len = str != NULL ? strlen(str) : 0; ++ } ++ } ++ { ++ yajl_val val = get_val(tree, "stream", yajl_t_string); ++ if (val != NULL) { ++ char *str = YAJL_GET_STRING(val); ++ ret->stream = safe_strdup(str ? str : ""); ++ } ++ } ++ { ++ yajl_val val = get_val(tree, "time", yajl_t_string); ++ if (val != NULL) { ++ char *str = YAJL_GET_STRING(val); ++ ret->time = safe_strdup(str ? str : ""); ++ } ++ } ++ { ++ yajl_val tmp = get_val(tree, "attrs", yajl_t_string); ++ if (tmp != NULL) { ++ char *str = YAJL_GET_STRING(tmp); ++ ret->attrs = (uint8_t *)safe_strdup(str ? str : ""); ++ ret->attrs_len = str != NULL ? strlen(str) : 0; ++ } ++ } ++ ++ if (tree->type == yajl_t_object && (ctx->options & PARSE_OPTIONS_STRICT)) { ++ int i; ++ for (i = 0; i < tree->u.object.len; i++) ++ if (strcmp(tree->u.object.keys[i], "log") && ++ strcmp(tree->u.object.keys[i], "stream") && ++ strcmp(tree->u.object.keys[i], "time") && ++ strcmp(tree->u.object.keys[i], "attrs")) { ++ if (ctx->stderr > 0) ++ fprintf(ctx->stderr, "WARNING: unknown key found: %s\n", tree->u.object.keys[i]); ++ } ++ } ++ return ret; ++} ++ ++void free_logger_json_file(logger_json_file *ptr) { ++ if (ptr == NULL) ++ return; ++ free(ptr->log); ++ ptr->log = NULL; ++ free(ptr->stream); ++ ptr->stream = NULL; ++ free(ptr->time); ++ ptr->time = NULL; ++ free(ptr->attrs); ++ ptr->attrs = NULL; ++ free(ptr); ++} ++ ++yajl_gen_status gen_logger_json_file(yajl_gen g, logger_json_file *ptr, struct parser_context *ctx, parser_error *err) { ++ yajl_gen_status stat = yajl_gen_status_ok; ++ *err = 0; ++ stat = reformat_start_map(g); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) || (ptr != NULL && ptr->log != NULL && ptr->log_len)) { ++ const char *str = ""; ++ size_t len = 0; ++ stat = reformat_map_key(g, "log", strlen("log")); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if (ptr != NULL && ptr->log != NULL) { ++ str = (const char *)ptr->log; ++ len = ptr->log_len; ++ } ++ stat = reformat_string(g, str, len); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr != NULL && ptr->stream != NULL)) { ++ char *str = ""; ++ stat = reformat_map_key(g, "stream", strlen("stream")); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if (ptr != NULL && ptr->stream != NULL) { ++ str = ptr->stream; ++ } ++ stat = reformat_string(g, str, strlen(str)); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr != NULL && ptr->time != NULL)) { ++ char *str = ""; ++ stat = reformat_map_key(g, "time", strlen("time")); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if (ptr != NULL && ptr->time != NULL) { ++ str = ptr->time; ++ } ++ stat = reformat_string(g, str, strlen(str)); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) || (ptr != NULL && ptr->attrs != NULL && ptr->attrs_len)) { ++ const char *str = ""; ++ size_t len = 0; ++ stat = reformat_map_key(g, "attrs", strlen("attrs")); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if (ptr != NULL && ptr->attrs != NULL) { ++ str = (const char *)ptr->attrs; ++ len = ptr->attrs_len; ++ } ++ stat = reformat_string(g, str, len); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ stat = reformat_end_map(g); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ return yajl_gen_status_ok; ++} ++ ++ ++logger_json_file *logger_json_file_parse_file(const char *filename, struct parser_context *ctx, parser_error *err) { ++ logger_json_file *ptr = NULL; ++ size_t filesize; ++ char *content = NULL; ++ ++ if (filename == NULL || err == NULL) ++ return NULL; ++ ++ *err = NULL; ++ content = read_file(filename, &filesize); ++ if (content == NULL) { ++ if (asprintf(err, "cannot read the file: %s", filename) < 0) ++ *err = safe_strdup("error allocating memory"); ++ return NULL; ++ } ++ ptr = logger_json_file_parse_data(content, ctx, err); ++ free(content); ++ return ptr; ++} ++ ++logger_json_file *logger_json_file_parse_file_stream(FILE *stream, struct parser_context *ctx, parser_error *err) { ++ logger_json_file *ptr = NULL; ++ size_t filesize; ++ char *content = NULL ; ++ ++ if (stream == NULL || err == NULL) ++ return NULL; ++ ++ *err = NULL; ++ content = fread_file(stream, &filesize); ++ if (content == NULL) { ++ *err = safe_strdup("cannot read the file"); ++ return NULL; ++ } ++ ptr = logger_json_file_parse_data(content, ctx, err); ++ free(content); ++ return ptr; ++} ++ ++logger_json_file *logger_json_file_parse_data(const char *jsondata, struct parser_context *ctx, parser_error *err) { ++ logger_json_file *ptr = NULL; ++ yajl_val tree; ++ char errbuf[1024]; ++ struct parser_context tmp_ctx; ++ ++ if (jsondata == NULL || err == NULL) ++ return NULL; ++ ++ *err = NULL; ++ if (ctx == NULL) { ++ ctx = &tmp_ctx; ++ memset(&tmp_ctx, 0, sizeof(tmp_ctx)); ++ } ++ tree = yajl_tree_parse(jsondata, errbuf, sizeof(errbuf)); ++ if (tree == NULL) { ++ if (asprintf(err, "cannot parse the data: %s", errbuf) < 0) ++ *err = safe_strdup("error allocating memory"); ++ return NULL; ++ } ++ ptr = make_logger_json_file(tree, ctx, err); ++ yajl_tree_free(tree); ++ return ptr; ++} ++char *logger_json_file_generate_json(logger_json_file *ptr, struct parser_context *ctx, parser_error *err) { ++ yajl_gen g = NULL; ++ struct parser_context tmp_ctx; ++ const unsigned char *gen_buf = NULL; ++ char *json_buf = NULL; ++ size_t gen_len = 0; ++ ++ if (ptr == NULL || err == NULL) ++ return NULL; ++ ++ *err = NULL; ++ if (ctx == NULL) { ++ ctx = &tmp_ctx; ++ memset(&tmp_ctx, 0, sizeof(tmp_ctx)); ++ } ++ ++ if (!json_gen_init(&g, ctx)) { ++ *err = safe_strdup("Json_gen init failed"); ++ goto out; ++ } ++ if (yajl_gen_status_ok != gen_logger_json_file(g, ptr, ctx, err)) { ++ if (*err == NULL) ++ *err = safe_strdup("Failed to generate json"); ++ goto free_out; ++ } ++ yajl_gen_get_buf(g, &gen_buf, &gen_len); ++ if (gen_buf == NULL) { ++ *err = safe_strdup("Error to get generated json"); ++ goto free_out; ++ } ++ ++ if (gen_len == SIZE_MAX) { ++ *err = safe_strdup("Invalid buffer length"); ++ goto free_out; ++ } ++ json_buf = safe_malloc(gen_len + 1); ++ (void)memcpy(json_buf, gen_buf, gen_len); ++ json_buf[gen_len] = '\0'; ++ ++free_out: ++ yajl_gen_clear(g); ++ yajl_gen_free(g); ++out: ++ return json_buf; ++} +diff --git a/src/lxc/json/logger_json_file.h b/src/lxc/json/logger_json_file.h +new file mode 100644 +index 000000000..ad5af7b49 +--- /dev/null ++++ b/src/lxc/json/logger_json_file.h +@@ -0,0 +1,45 @@ ++// Generated from json-file.json. Do not edit! ++#ifndef LOGGER_JSON_FILE_SCHEMA_H ++#define LOGGER_JSON_FILE_SCHEMA_H ++ ++#include ++#include ++#include "json_common.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++typedef struct { ++ uint8_t *log; ++ size_t log_len; ++ ++ char *stream; ++ ++ char *time; ++ ++ uint8_t *attrs; ++ size_t attrs_len; ++ ++} ++logger_json_file; ++ ++void free_logger_json_file(logger_json_file *ptr); ++ ++logger_json_file *make_logger_json_file(yajl_val tree, struct parser_context *ctx, parser_error *err); ++ ++yajl_gen_status gen_logger_json_file(yajl_gen g, logger_json_file *ptr, struct parser_context *ctx, parser_error *err); ++ ++logger_json_file *logger_json_file_parse_file(const char *filename, struct parser_context *ctx, parser_error *err); ++ ++logger_json_file *logger_json_file_parse_file_stream(FILE *stream, struct parser_context *ctx, parser_error *err); ++ ++logger_json_file *logger_json_file_parse_data(const char *jsondata, struct parser_context *ctx, parser_error *err); ++ ++char *logger_json_file_generate_json(logger_json_file *ptr, struct parser_context *ctx, parser_error *err); ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +diff --git a/src/lxc/json/oci_runtime_hooks.c b/src/lxc/json/oci_runtime_hooks.c +new file mode 100644 +index 000000000..41ddb672d +--- /dev/null ++++ b/src/lxc/json/oci_runtime_hooks.c +@@ -0,0 +1,52 @@ ++/****************************************************************************** ++ * Copyright (C), 1988-1999, Huawei Tech. Co., Ltd. ++ * FileName: oci_runtime_hooks.c ++ * Author: maoweiyong Version: 0.1 Date: 2018-11-07 ++ * Explanation: provide oci runtime hooks functions ++ ******************************************************************************/ ++#ifndef _GNU_SOURCE ++#define _GNU_SOURCE ++#endif ++#include ++#include "oci_runtime_hooks.h" ++ ++#include "log.h" ++#include "utils.h" ++ ++#define PARSE_ERR_BUFFER_SIZE 1024 ++ ++oci_runtime_spec_hooks *oci_runtime_spec_hooks_parse_file(const char *filename, ++ struct parser_context *ctx, parser_error *err) ++{ ++ yajl_val tree; ++ size_t filesize; ++ ++ if (!filename || !err) { ++ return NULL; ++ } ++ *err = NULL; ++ struct parser_context tmp_ctx; ++ if (!ctx) { ++ ctx = &tmp_ctx; ++ memset(&tmp_ctx, 0, sizeof(tmp_ctx)); ++ } ++ char *content = read_file(filename, &filesize); ++ char errbuf[PARSE_ERR_BUFFER_SIZE]; ++ if (content == NULL) { ++ if (asprintf(err, "cannot read the file: %s", filename) < 0) { ++ *err = safe_strdup("error allocating memory"); ++ } ++ return NULL; ++ } ++ tree = yajl_tree_parse(content, errbuf, sizeof(errbuf)); ++ free(content); ++ if (tree == NULL) { ++ if (asprintf(err, "cannot parse the file: %s", errbuf) < 0) { ++ *err = safe_strdup("error allocating memory"); ++ } ++ return NULL; ++ } ++ oci_runtime_spec_hooks *ptr = make_oci_runtime_spec_hooks(tree, ctx, err); ++ yajl_tree_free(tree); ++ return ptr; ++} +diff --git a/src/lxc/json/oci_runtime_hooks.h b/src/lxc/json/oci_runtime_hooks.h +new file mode 100644 +index 000000000..bf570c9e0 +--- /dev/null ++++ b/src/lxc/json/oci_runtime_hooks.h +@@ -0,0 +1,15 @@ ++/****************************************************************************** ++ * Copyright (C), 1988-1999, Huawei Tech. Co., Ltd. ++ * FileName: oci_runtime_hooks.h ++ * Author: tanyifeng Version: 0.1 Date: 2018-11-08 ++ * Explanation: provide container oci runtime hooks function definition ++ ******************************************************************************/ ++#ifndef _CONTAINER_HOOKS_H ++# define _CONTAINER_HOOKS_H ++ ++# include "oci_runtime_spec.h" ++ ++oci_runtime_spec_hooks *oci_runtime_spec_hooks_parse_file(const char *filename, ++ struct parser_context *ctx, parser_error *err); ++ ++#endif +diff --git a/src/lxc/json/oci_runtime_spec.c b/src/lxc/json/oci_runtime_spec.c +new file mode 100644 +index 000000000..fd342deb9 +--- /dev/null ++++ b/src/lxc/json/oci_runtime_spec.c +@@ -0,0 +1,195 @@ ++// Generated from spec.json. Do not edit! ++#ifndef _GNU_SOURCE ++#define _GNU_SOURCE ++#endif ++#include ++#include ++#include "oci_runtime_spec.h" ++ ++oci_runtime_spec_hooks *make_oci_runtime_spec_hooks(yajl_val tree, struct parser_context *ctx, parser_error *err) { ++ oci_runtime_spec_hooks *ret = NULL; ++ *err = 0; ++ if (tree == NULL) ++ return ret; ++ ret = safe_malloc(sizeof(*ret)); ++ { ++ yajl_val tmp = get_val(tree, "prestart", yajl_t_array); ++ if (tmp != NULL && YAJL_GET_ARRAY(tmp) != NULL && YAJL_GET_ARRAY(tmp)->len > 0) { ++ size_t i; ++ ret->prestart_len = YAJL_GET_ARRAY(tmp)->len; ++ ret->prestart = safe_malloc((YAJL_GET_ARRAY(tmp)->len + 1) * sizeof(*ret->prestart)); ++ for (i = 0; i < YAJL_GET_ARRAY(tmp)->len; i++) { ++ yajl_val val = YAJL_GET_ARRAY(tmp)->values[i]; ++ ret->prestart[i] = make_defs_hook(val, ctx, err); ++ if (ret->prestart[i] == NULL) { ++ free_oci_runtime_spec_hooks(ret); ++ return NULL; ++ } ++ } ++ } ++ } ++ { ++ yajl_val tmp = get_val(tree, "poststart", yajl_t_array); ++ if (tmp != NULL && YAJL_GET_ARRAY(tmp) != NULL && YAJL_GET_ARRAY(tmp)->len > 0) { ++ size_t i; ++ ret->poststart_len = YAJL_GET_ARRAY(tmp)->len; ++ ret->poststart = safe_malloc((YAJL_GET_ARRAY(tmp)->len + 1) * sizeof(*ret->poststart)); ++ for (i = 0; i < YAJL_GET_ARRAY(tmp)->len; i++) { ++ yajl_val val = YAJL_GET_ARRAY(tmp)->values[i]; ++ ret->poststart[i] = make_defs_hook(val, ctx, err); ++ if (ret->poststart[i] == NULL) { ++ free_oci_runtime_spec_hooks(ret); ++ return NULL; ++ } ++ } ++ } ++ } ++ { ++ yajl_val tmp = get_val(tree, "poststop", yajl_t_array); ++ if (tmp != NULL && YAJL_GET_ARRAY(tmp) != NULL && YAJL_GET_ARRAY(tmp)->len > 0) { ++ size_t i; ++ ret->poststop_len = YAJL_GET_ARRAY(tmp)->len; ++ ret->poststop = safe_malloc((YAJL_GET_ARRAY(tmp)->len + 1) * sizeof(*ret->poststop)); ++ for (i = 0; i < YAJL_GET_ARRAY(tmp)->len; i++) { ++ yajl_val val = YAJL_GET_ARRAY(tmp)->values[i]; ++ ret->poststop[i] = make_defs_hook(val, ctx, err); ++ if (ret->poststop[i] == NULL) { ++ free_oci_runtime_spec_hooks(ret); ++ return NULL; ++ } ++ } ++ } ++ } ++ ++ if (tree->type == yajl_t_object && (ctx->options & PARSE_OPTIONS_STRICT)) { ++ int i; ++ for (i = 0; i < tree->u.object.len; i++) ++ if (strcmp(tree->u.object.keys[i], "prestart") && ++ strcmp(tree->u.object.keys[i], "poststart") && ++ strcmp(tree->u.object.keys[i], "poststop")) { ++ if (ctx->stderr > 0) ++ fprintf(ctx->stderr, "WARNING: unknown key found: %s\n", tree->u.object.keys[i]); ++ } ++ } ++ return ret; ++} ++ ++void free_oci_runtime_spec_hooks(oci_runtime_spec_hooks *ptr) { ++ if (ptr == NULL) ++ return; ++ if (ptr->prestart != NULL) { ++ size_t i; ++ for (i = 0; i < ptr->prestart_len; i++) ++ if (ptr->prestart[i] != NULL) { ++ free_defs_hook(ptr->prestart[i]); ++ ptr->prestart[i] = NULL; ++ } ++ free(ptr->prestart); ++ ptr->prestart = NULL; ++ } ++ if (ptr->poststart != NULL) { ++ size_t i; ++ for (i = 0; i < ptr->poststart_len; i++) ++ if (ptr->poststart[i] != NULL) { ++ free_defs_hook(ptr->poststart[i]); ++ ptr->poststart[i] = NULL; ++ } ++ free(ptr->poststart); ++ ptr->poststart = NULL; ++ } ++ if (ptr->poststop != NULL) { ++ size_t i; ++ for (i = 0; i < ptr->poststop_len; i++) ++ if (ptr->poststop[i] != NULL) { ++ free_defs_hook(ptr->poststop[i]); ++ ptr->poststop[i] = NULL; ++ } ++ free(ptr->poststop); ++ ptr->poststop = NULL; ++ } ++ free(ptr); ++} ++ ++yajl_gen_status gen_oci_runtime_spec_hooks(yajl_gen g, oci_runtime_spec_hooks *ptr, struct parser_context *ctx, parser_error *err) { ++ yajl_gen_status stat = yajl_gen_status_ok; ++ *err = 0; ++ stat = reformat_start_map(g); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr != NULL && ptr->prestart != NULL)) { ++ size_t len = 0, i; ++ stat = reformat_map_key(g, "prestart", strlen("prestart")); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if (ptr != NULL && ptr->prestart != NULL) { ++ len = ptr->prestart_len; ++ } ++ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) ++ yajl_gen_config(g, yajl_gen_beautify, 0); ++ stat = reformat_start_array(g); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ for (i = 0; i < len; i++) { ++ stat = gen_defs_hook(g, ptr->prestart[i], ctx, err); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ stat = reformat_end_array(g); ++ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) ++ yajl_gen_config(g, yajl_gen_beautify, 1); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr != NULL && ptr->poststart != NULL)) { ++ size_t len = 0, i; ++ stat = reformat_map_key(g, "poststart", strlen("poststart")); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if (ptr != NULL && ptr->poststart != NULL) { ++ len = ptr->poststart_len; ++ } ++ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) ++ yajl_gen_config(g, yajl_gen_beautify, 0); ++ stat = reformat_start_array(g); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ for (i = 0; i < len; i++) { ++ stat = gen_defs_hook(g, ptr->poststart[i], ctx, err); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ stat = reformat_end_array(g); ++ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) ++ yajl_gen_config(g, yajl_gen_beautify, 1); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr != NULL && ptr->poststop != NULL)) { ++ size_t len = 0, i; ++ stat = reformat_map_key(g, "poststop", strlen("poststop")); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ if (ptr != NULL && ptr->poststop != NULL) { ++ len = ptr->poststop_len; ++ } ++ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) ++ yajl_gen_config(g, yajl_gen_beautify, 0); ++ stat = reformat_start_array(g); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ for (i = 0; i < len; i++) { ++ stat = gen_defs_hook(g, ptr->poststop[i], ctx, err); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ stat = reformat_end_array(g); ++ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) ++ yajl_gen_config(g, yajl_gen_beautify, 1); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ } ++ stat = reformat_end_map(g); ++ if (yajl_gen_status_ok != stat) ++ GEN_SET_ERROR_AND_RETURN(stat, err); ++ return yajl_gen_status_ok; ++} +diff --git a/src/lxc/json/oci_runtime_spec.h b/src/lxc/json/oci_runtime_spec.h +new file mode 100644 +index 000000000..ef3f1619a +--- /dev/null ++++ b/src/lxc/json/oci_runtime_spec.h +@@ -0,0 +1,37 @@ ++// Generated from spec.json. Do not edit! ++#ifndef OCI_RUNTIME_SPEC_SCHEMA_H ++#define OCI_RUNTIME_SPEC_SCHEMA_H ++ ++#include ++#include ++#include "json_common.h" ++#include "defs.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++typedef struct { ++ defs_hook **prestart; ++ size_t prestart_len; ++ ++ defs_hook **poststart; ++ size_t poststart_len; ++ ++ defs_hook **poststop; ++ size_t poststop_len; ++ ++} ++oci_runtime_spec_hooks; ++ ++void free_oci_runtime_spec_hooks(oci_runtime_spec_hooks *ptr); ++ ++oci_runtime_spec_hooks *make_oci_runtime_spec_hooks(yajl_val tree, struct parser_context *ctx, parser_error *err); ++ ++yajl_gen_status gen_oci_runtime_spec_hooks(yajl_gen g, oci_runtime_spec_hooks *ptr, struct parser_context *ctx, parser_error *err); ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +diff --git a/src/lxc/json/read-file.c b/src/lxc/json/read-file.c +new file mode 100644 +index 000000000..70e73e51a +--- /dev/null ++++ b/src/lxc/json/read-file.c +@@ -0,0 +1,95 @@ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include "read-file.h" ++ ++#ifndef O_CLOEXEC ++#define O_CLOEXEC 02000000 ++#endif ++ ++char *fread_file(FILE *stream, size_t *length) ++{ ++ char *buf = NULL, *tmpbuf = NULL; ++ size_t off = 0; ++ ++ while (1) { ++ size_t ret, newsize; ++ ++ newsize = off + BUFSIZ + 1; ++ tmpbuf = (char *)calloc(1, newsize); ++ if (tmpbuf == NULL) { ++ goto out; ++ } ++ ++ if (buf) { ++ memcpy(tmpbuf, buf, off); ++ ++ memset(buf, 0, off); ++ ++ free(buf); ++ } ++ ++ buf = tmpbuf; ++ ret = fread(buf + off, 1, BUFSIZ, stream); ++ if (!ret && ferror(stream)) { ++ tmpbuf = NULL; ++ goto out; ++ } ++ if (ret < BUFSIZ || feof(stream)) { ++ *length = off + ret + 1; ++ buf[*length - 1] = '\0'; ++ return buf; ++ } ++ off += BUFSIZ; ++ } ++out: ++ if (buf) { ++ free(buf); ++ } ++ if (tmpbuf) { ++ free(tmpbuf); ++ } ++ return NULL; ++ ++} ++ ++char *read_file(const char *path, size_t *length) ++{ ++ char *buf = NULL; ++ char rpath[PATH_MAX + 1] = {0}; ++ int fd = -1; ++ int tmperrno; ++ FILE *fp = NULL; ++ ++ if (!path || !length) { ++ return NULL; ++ } ++ ++ if (strlen(path) > PATH_MAX || NULL == realpath(path, rpath)) { ++ return NULL; ++ } ++ ++ fd = open(rpath, O_RDONLY | O_CLOEXEC, 0640); ++ if (fd < 0) { ++ return NULL; ++ } ++ ++ fp = fdopen(fd, "r"); ++ tmperrno = errno; ++ if (!fp) { ++ close(fd); ++ errno = tmperrno; ++ return NULL; ++ } ++ ++ buf = fread_file(fp, length); ++ fclose(fp); ++ return buf; ++} +diff --git a/src/lxc/json/read-file.h b/src/lxc/json/read-file.h +new file mode 100644 +index 000000000..5d6e0eb62 +--- /dev/null ++++ b/src/lxc/json/read-file.h +@@ -0,0 +1,11 @@ ++#ifndef READ_FILE_H ++#define READ_FILE_H ++ ++#include ++#include ++ ++extern char *fread_file(FILE *stream, size_t *length); ++ ++extern char *read_file(const char *path, size_t *length); ++ ++#endif +diff --git a/src/lxc/log.c b/src/lxc/log.c +index 59644aa7a..79caa2cce 100644 +--- a/src/lxc/log.c ++++ b/src/lxc/log.c +@@ -44,7 +44,7 @@ + #define LXC_LOG_TIME_SIZE ((INTTYPE_TO_STRLEN(uint64_t)) * 2) + + int lxc_log_fd = -EBADF; +-static bool wants_syslog = false; ++static int syslog_enable = 0; + int lxc_quiet_specified; + int lxc_log_use_global_fd; + static int lxc_loglevel_specified; +@@ -55,6 +55,38 @@ static char *log_vmname = NULL; + + lxc_log_define(log, lxc); + ++#ifdef HAVE_ISULAD ++static inline const char *isulad_get_fifo_path(const char *file) ++{ ++#define ISULAD_FIFO_PREFIX "fifo:" ++ ++ if (strncmp(file, ISULAD_FIFO_PREFIX, strlen(ISULAD_FIFO_PREFIX)) == 0) { ++ return (file + strlen(ISULAD_FIFO_PREFIX)); ++ } ++ return NULL; ++} ++ ++static int isulad_open_fifo(const char *file_path) ++{ ++#define LOG_FIFO_SIZE (1024 * 1024) ++ int fd; ++ ++ fd = lxc_unpriv(open(file_path, O_RDWR | O_NONBLOCK | O_CLOEXEC, 0640)); ++ if (fd == -1) { ++ fprintf(stderr, "Open fifo %s failed: %s\n", file_path, strerror(errno)); ++ return -1; ++ } ++ ++ if (fcntl(fd, F_SETPIPE_SZ, LOG_FIFO_SIZE) == -1) { ++ printf("Set fifo buffer size failed: %s", strerror(errno)); ++ close(fd); ++ return -1; ++ } ++ ++ return fd; ++} ++#endif ++ + static int lxc_log_priority_to_syslog(int priority) + { + switch (priority) { +@@ -128,7 +160,7 @@ static int log_append_syslog(const struct lxc_log_appender *appender, + __do_free char *msg = NULL; + const char *log_container_name; + +- if (!wants_syslog) ++ if (!syslog_enable) + return 0; + + log_container_name = lxc_log_get_container_name(); +@@ -321,6 +353,12 @@ static int log_append_logfile(const struct lxc_log_appender *appender, + #endif + + log_container_name = lxc_log_get_container_name(); ++#ifdef HAVE_ISULAD ++ /* use isulad log format */ ++ if (log_container_name != NULL && strlen(log_container_name) > 15) { ++ log_container_name = log_container_name + (strlen(log_container_name) - 15); ++ } ++#endif + + if (fd_to_use < 0) + fd_to_use = lxc_log_fd; +@@ -333,9 +371,13 @@ static int log_append_logfile(const struct lxc_log_appender *appender, + return ret; + + n = snprintf(buffer, sizeof(buffer), ++#if HAVE_ISULAD ++ "%15s %s %-8s %s - %s:%s:%d -", ++#else + "%s%s%s %s %-8s %s - %s:%s:%d - ", + log_prefix, + log_container_name ? " " : "", ++#endif + log_container_name ? log_container_name : "", + date_time, + lxc_log_priority_to_string(event->priority), +@@ -485,9 +527,10 @@ static int build_dir(const char *name) + *p = '\0'; + + ret = lxc_unpriv(mkdir(n, 0755)); +- *p = '/'; + if (ret && errno != EEXIST) + return log_error_errno(-errno, errno, "Failed to create directory \"%s\"", n); ++ ++ *p = '/'; + } + + return 0; +@@ -589,6 +632,13 @@ static int __lxc_log_set_file(const char *fname, int create_dirs) + return ret_errno(EINVAL); + } + ++#ifdef HAVE_ISULAD ++ fname = isulad_get_fifo_path(fname); ++ if (fname == NULL) { ++ return ret_errno(EINVAL); ++ } ++#endif ++ + #if USE_CONFIGPATH_LOGS + /* We don't build_dir for the default if the default is i.e. + * /var/lib/lxc/$container/$container.log. +@@ -598,7 +648,11 @@ static int __lxc_log_set_file(const char *fname, int create_dirs) + if (build_dir(fname)) + return log_error_errno(-errno, errno, "Failed to create dir for log file \"%s\"", fname); + ++#if HAVE_ISULAD ++ lxc_log_fd = isulad_open_fifo(fname); ++#else + lxc_log_fd = log_open(fname); ++#endif + if (lxc_log_fd < 0) + return lxc_log_fd; + +@@ -694,6 +748,9 @@ int lxc_log_init(struct lxc_log *log) + + if (lxc_log_fd >= 0) { + lxc_log_category_lxc.appender = &log_appender_logfile; ++#ifdef HAVE_ISULAD ++ if (!lxc_quiet_specified && !log->quiet) ++#endif + lxc_log_category_lxc.appender->next = &log_appender_stderr; + } + +@@ -738,14 +795,9 @@ int lxc_log_syslog(int facility) + return 0; + } + +-void lxc_log_syslog_enable(void) +-{ +- wants_syslog = true; +-} +- +-void lxc_log_syslog_disable(void) ++inline void lxc_log_enable_syslog(void) + { +- wants_syslog = false; ++ syslog_enable = 1; + } + + /* +diff --git a/src/lxc/log.h b/src/lxc/log.h +index 3f91d9bc5..d28065624 100644 +--- a/src/lxc/log.h ++++ b/src/lxc/log.h +@@ -3,9 +3,6 @@ + #ifndef __LXC_LOG_H + #define __LXC_LOG_H + +-#ifndef _GNU_SOURCE +-#define _GNU_SOURCE 1 +-#endif + #include + #include + #include +@@ -17,7 +14,6 @@ + #include + + #include "conf.h" +-#include "config.h" + + #ifndef O_CLOEXEC + #define O_CLOEXEC 02000000 +@@ -392,7 +388,7 @@ __lxc_unused static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \ + LXC_FATAL(&locinfo, format, ##__VA_ARGS__); \ + } while (0) + +-#if HAVE_M_FORMAT && !ENABLE_COVERITY_BUILD ++#if HAVE_M_FORMAT + #define SYSTRACE(format, ...) \ + TRACE("%m - " format, ##__VA_ARGS__) + #else +@@ -403,7 +399,7 @@ __lxc_unused static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \ + } while (0) + #endif + +-#if HAVE_M_FORMAT && !ENABLE_COVERITY_BUILD ++#if HAVE_M_FORMAT + #define SYSDEBUG(format, ...) \ + DEBUG("%m - " format, ##__VA_ARGS__) + #else +@@ -415,7 +411,7 @@ __lxc_unused static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \ + #endif + + +-#if HAVE_M_FORMAT && !ENABLE_COVERITY_BUILD ++#if HAVE_M_FORMAT + #define SYSINFO(format, ...) \ + INFO("%m - " format, ##__VA_ARGS__) + #else +@@ -426,7 +422,7 @@ __lxc_unused static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \ + } while (0) + #endif + +-#if HAVE_M_FORMAT && !ENABLE_COVERITY_BUILD ++#if HAVE_M_FORMAT + #define SYSNOTICE(format, ...) \ + NOTICE("%m - " format, ##__VA_ARGS__) + #else +@@ -437,7 +433,7 @@ __lxc_unused static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \ + } while (0) + #endif + +-#if HAVE_M_FORMAT && !ENABLE_COVERITY_BUILD ++#if HAVE_M_FORMAT + #define SYSWARN(format, ...) \ + WARN("%m - " format, ##__VA_ARGS__) + #else +@@ -448,7 +444,7 @@ __lxc_unused static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \ + } while (0) + #endif + +-#if HAVE_M_FORMAT && !ENABLE_COVERITY_BUILD ++#if HAVE_M_FORMAT + #define SYSERROR(format, ...) \ + ERROR("%m - " format, ##__VA_ARGS__) + #else +@@ -459,7 +455,7 @@ __lxc_unused static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \ + } while (0) + #endif + +-#if HAVE_M_FORMAT && !ENABLE_COVERITY_BUILD ++#if HAVE_M_FORMAT + #define CMD_SYSERROR(format, ...) \ + fprintf(stderr, "%s: %d: %s - %m - " format "\n", __FILE__, __LINE__, \ + __func__, ##__VA_ARGS__); +@@ -472,7 +468,7 @@ __lxc_unused static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \ + } while (0) + #endif + +-#if HAVE_M_FORMAT && !ENABLE_COVERITY_BUILD ++#if HAVE_M_FORMAT + #define CMD_SYSINFO(format, ...) \ + printf("%s: %d: %s - %m - " format "\n", __FILE__, __LINE__, __func__, \ + ##__VA_ARGS__); +@@ -563,8 +559,7 @@ __lxc_unused static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \ + extern int lxc_log_fd; + + extern int lxc_log_syslog(int facility); +-extern void lxc_log_syslog_enable(void); +-extern void lxc_log_syslog_disable(void); ++extern void lxc_log_enable_syslog(void); + extern int lxc_log_set_level(int *dest, int level); + extern int lxc_log_get_level(void); + extern bool lxc_log_has_valid_level(void); +diff --git a/src/lxc/lsm/apparmor.c b/src/lxc/lsm/apparmor.c +index 02f824f97..f251e5e7e 100644 +--- a/src/lxc/lsm/apparmor.c ++++ b/src/lxc/lsm/apparmor.c +@@ -19,7 +19,7 @@ + #include "log.h" + #include "lsm.h" + #include "parse.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "utils.h" + + lxc_log_define(apparmor, lsm); +@@ -121,8 +121,8 @@ static const char AA_PROFILE_BASE[] = + " # deny reads from debugfs\n" + " deny /sys/kernel/debug/{,**} rwklx,\n" + "\n" +-" # allow paths to be made dependent, shared, private or unbindable\n" +-" # TODO: This currently doesn't work due to the apparmor parser treating those as allowing all mounts.\n" ++" # allow paths to be made slave, shared, private or unbindable\n" ++" # FIXME: This currently doesn't work due to the apparmor parser treating those as allowing all mounts.\n" + "# mount options=(rw,make-slave) -> **,\n" + "# mount options=(rw,make-rslave) -> **,\n" + "# mount options=(rw,make-shared) -> **,\n" +@@ -343,7 +343,7 @@ static const char AA_PROFILE_NESTING_BASE[] = + " mount /var/lib/lxd/shmounts/ -> /var/lib/lxd/shmounts/,\n" + " mount options=bind /var/lib/lxd/shmounts/** -> /var/lib/lxd/**,\n" + "\n" +-" # TODO: There doesn't seem to be a way to ask for:\n" ++" # FIXME: There doesn't seem to be a way to ask for:\n" + " # mount options=(ro,nosuid,nodev,noexec,remount,bind),\n" + " # as we always get mount to $cdir/proc/sys with those flags denied\n" + " # So allow all mounts until that is straightened out:\n" +@@ -538,7 +538,7 @@ static inline char *apparmor_namespace(const char *ctname, const char *lxcpath) + return full; + } + +-/* TODO: This is currently run only in the context of a constructor (via the ++/* FIXME: This is currently run only in the context of a constructor (via the + * initial lsm_init() called due to its __attribute__((constructor)), so we + * do not have ERROR/... macros available, so there are some fprintf(stderr)s + * in there. +@@ -560,7 +560,7 @@ static bool check_apparmor_parser_version() + lxc_pclose(parserpipe); + /* We stay silent for now as this most likely means the shell + * lxc_popen executed failed to find the apparmor_parser binary. +- * See the TODO comment above for details. ++ * See the FIXME comment above for details. + */ + return false; + } +diff --git a/src/lxc/lxc.h b/src/lxc/lxc.h +index 630eff0b4..ec2feaa5b 100644 +--- a/src/lxc/lxc.h ++++ b/src/lxc/lxc.h +@@ -32,9 +32,14 @@ struct lxc_handler; + * @daemonize : whether or not the container is daemonized + * Returns 0 on success, < 0 otherwise + */ ++#ifdef HAVE_ISULAD ++extern int lxc_start(char *const argv[], struct lxc_handler *handler, ++ const char *lxcpath, bool daemonize, int *error_num, ++ unsigned int start_timeout); ++#else + extern int lxc_start(char *const argv[], struct lxc_handler *handler, + const char *lxcpath, bool daemonize, int *error_num); +- ++#endif + /* + * Start the specified command inside an application container + * @name : the name of the container +@@ -44,9 +49,15 @@ extern int lxc_start(char *const argv[], struct lxc_handler *handler, + * @daemonize : whether or not the container is daemonized + * Returns 0 on success, < 0 otherwise + */ ++#ifdef HAVE_ISULAD ++extern int lxc_execute(const char *name, char *const argv[], int quiet, ++ struct lxc_handler *handler, const char *lxcpath, ++ bool daemonize, int *error_num, unsigned int start_timeout); ++#else + extern int lxc_execute(const char *name, char *const argv[], int quiet, + struct lxc_handler *handler, const char *lxcpath, + bool daemonize, int *error_num); ++#endif + + /* + * Close the fd associated with the monitoring +@@ -83,6 +94,13 @@ extern lxc_state_t lxc_state(const char *name, const char *lxcpath); + */ + extern struct lxc_container *lxc_container_new(const char *name, const char *configpath); + ++#ifdef HAVE_ISULAD ++/* ++ * Create a new container without loading config. ++ */ ++extern struct lxc_container *lxc_container_without_config_new(const char *name, const char *configpath); ++#endif ++ + /* + * Returns 1 on success, 0 on failure. + */ +diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c +index aac621482..eef98df67 100644 +--- a/src/lxc/lxccontainer.c ++++ b/src/lxc/lxccontainer.c +@@ -49,7 +49,7 @@ + #include "namespace.h" + #include "network.h" + #include "parse.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "start.h" + #include "state.h" + #include "storage.h" +@@ -62,6 +62,10 @@ + #include "utils.h" + #include "version.h" + ++#ifdef HAVE_ISULAD ++#include "exec_commands.h" ++#endif ++ + #if HAVE_OPENSSL + #include + #endif +@@ -281,6 +285,13 @@ static void lxc_container_free(struct lxc_container *c) + free(c->config_path); + c->config_path = NULL; + ++#ifdef HAVE_ISULAD ++ free(c->exit_fifo); ++ c->exit_fifo = NULL; ++ free(c->ocihookfile); ++ c->ocihookfile = NULL; ++#endif ++ + free(c); + } + +@@ -505,6 +516,20 @@ static bool do_lxcapi_is_running(struct lxc_container *c) + + WRAP_API(bool, lxcapi_is_running) + ++#ifdef HAVE_ISULAD ++static bool do_lxcapi_freeze(struct lxc_container *c) ++{ ++ if (!c || !c->lxc_conf) { ++ return false; ++ } ++ ++ if (lxc_freeze(c->lxc_conf, c->name, c->config_path) < 0) { ++ return false; ++ } ++ ++ return true; ++} ++#else + static bool do_lxcapi_freeze(struct lxc_container *c) + { + lxc_state_t s; +@@ -518,9 +543,25 @@ static bool do_lxcapi_freeze(struct lxc_container *c) + + return true; + } ++#endif ++ + + WRAP_API(bool, lxcapi_freeze) + ++#ifdef HAVE_ISULAD ++static bool do_lxcapi_unfreeze(struct lxc_container *c) ++{ ++ if (!c || !c->lxc_conf) { ++ return false; ++ } ++ ++ if (lxc_unfreeze(c->lxc_conf, c->name, c->config_path) < 0) { ++ return false; ++ } ++ ++ return true; ++} ++#else + static bool do_lxcapi_unfreeze(struct lxc_container *c) + { + lxc_state_t s; +@@ -534,15 +575,16 @@ static bool do_lxcapi_unfreeze(struct lxc_container *c) + + return true; + } ++#endif + + WRAP_API(bool, lxcapi_unfreeze) + +-static int do_lxcapi_console_getfd(struct lxc_container *c, int *ttynum, int *ptmxfd) ++static int do_lxcapi_console_getfd(struct lxc_container *c, int *ttynum, int *masterfd) + { + if (!c) + return -1; + +- return lxc_terminal_getfd(c, ttynum, ptmxfd); ++ return lxc_terminal_getfd(c, ttynum, masterfd); + } + + WRAP_API_2(int, lxcapi_console_getfd, int *, int *) +@@ -623,6 +665,66 @@ static bool load_config_locked(struct lxc_container *c, const char *fname) + return true; + } + ++#ifdef HAVE_ISULAD ++static bool load_ocihooks_locked(struct lxc_container *c) ++{ ++ parser_error err = NULL; ++ oci_runtime_spec_hooks *hooks = NULL; ++ ++ if (!c->lxc_conf) ++ c->lxc_conf = lxc_conf_init(); ++ ++ if (!c->lxc_conf) ++ return false; ++ ++ hooks = oci_runtime_spec_hooks_parse_file(c->ocihookfile, NULL, &err); ++ if (!hooks) { ++ fprintf(stderr, "parse oci hooks config failed: %s\n", err); ++ free(err); ++ return true; ++ } ++ c->lxc_conf->ocihooks = hooks; ++ ++ if (err) ++ free(err); ++ return true; ++} ++ ++/* ++ * isulad: set oci hook file path ++ * */ ++static bool set_oci_hook_config_filename(struct lxc_container *c) ++{ ++#define OCI_HOOK_JSON_FILE_NAME "ocihooks.json" ++ char *newpath = NULL; ++ int len, ret; ++ ++ if (!c->config_path) ++ return false; ++ ++ /* $lxc_path + "/" + c->name + "/" + "config" + '\0' */ ++ if (strlen(c->config_path) + strlen(c->name) > SIZE_MAX - strlen(OCI_HOOK_JSON_FILE_NAME) - 3) ++ return false; ++ len = strlen(c->config_path) + strlen(c->name) + strlen(OCI_HOOK_JSON_FILE_NAME) + 3; ++ ++ newpath = malloc(len); ++ if (newpath == NULL) ++ return false; ++ ++ ret = snprintf(newpath, len, "%s/%s/%s", c->config_path, c->name, OCI_HOOK_JSON_FILE_NAME); ++ if (ret < 0 || ret >= len) { ++ fprintf(stderr, "Error printing out config file name\n"); ++ free(newpath); ++ return false; ++ } ++ ++ free(c->ocihookfile); ++ c->ocihookfile = newpath; ++ ++ return true; ++} ++#endif ++ + static bool do_lxcapi_load_config(struct lxc_container *c, const char *alt_file) + { + int lret; +@@ -656,6 +758,11 @@ static bool do_lxcapi_load_config(struct lxc_container *c, const char *alt_file) + + ret = load_config_locked(c, fname); + ++#ifdef HAVE_ISULAD ++ if (ret && file_exists(c->ocihookfile)) ++ ret = load_ocihooks_locked(c); ++#endif ++ + if (need_disklock) + container_disk_unlock(c); + else +@@ -830,12 +937,14 @@ static bool wait_on_daemonized_start(struct lxc_handler *handler, int pid) + DEBUG("First child %d exited", pid); + + /* Close write end of the socket pair. */ +- close_prot_errno_disarm(handler->state_socket_pair[1]); ++ close(handler->state_socket_pair[1]); ++ handler->state_socket_pair[1] = -1; + + state = lxc_rcv_status(handler->state_socket_pair[0]); + + /* Close read end of the socket pair. */ +- close_prot_errno_disarm(handler->state_socket_pair[0]); ++ close(handler->state_socket_pair[0]); ++ handler->state_socket_pair[0] = -1; + + if (state < 0) { + SYSERROR("Failed to receive the container state"); +@@ -855,6 +964,33 @@ static bool wait_on_daemonized_start(struct lxc_handler *handler, int pid) + return true; + } + ++#ifdef HAVE_ISULAD ++/* isulad: use init argv as init cmd */ ++static char **use_init_args(char **init_argv, size_t init_args) ++{ ++ size_t i; ++ int nargs = 0; ++ char **argv; ++ ++ if (!init_argv) ++ return NULL; ++ ++ do { ++ argv = malloc(sizeof(char *)); ++ } while (!argv); ++ ++ argv[0] = NULL; ++ for (i = 0; i < init_args; i++) ++ push_arg(&argv, init_argv[i], &nargs); ++ ++ if (nargs == 0) { ++ free(argv); ++ return NULL; ++ } ++ return argv; ++} ++#endif ++ + static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const argv[]) + { + int ret; +@@ -865,6 +1001,13 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a + NULL, + }; + char **init_cmd = NULL; ++#ifdef HAVE_ISULAD ++ int keepfds[] = {-1, -1, -1, -1, -1}; ++ ssize_t size_read; ++ char errbuf[BUFSIZ + 1] = {0}; ++#else ++ int keepfds[3] = {-1, -1, -1}; ++#endif + + /* container does exist */ + if (!c) +@@ -898,7 +1041,7 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a + conf = c->lxc_conf; + + /* initialize handler */ +- handler = lxc_init_handler(NULL, c->name, conf, c->config_path, c->daemonize); ++ handler = lxc_init_handler(c->name, conf, c->config_path, c->daemonize); + + container_mem_unlock(c); + if (!handler) +@@ -911,11 +1054,17 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a + argv = init_cmd = split_init_cmd(conf->init_cmd); + } + ++#ifdef HAVE_ISULAD ++ if (!argv) { ++ argv = init_cmd = use_init_args(conf->init_argv, conf->init_argc); ++ } ++#endif ++ + /* ... otherwise use default_args. */ + if (!argv) { + if (useinit) { + ERROR("No valid init detected"); +- lxc_put_handler(handler); ++ lxc_free_handler(handler); + return false; + } + argv = default_args; +@@ -930,10 +1079,23 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a + char title[2048]; + pid_t pid_first, pid_second; + ++#ifdef HAVE_ISULAD ++ //isulad: pipdfd for get error message of child or grandchild process. ++ if (pipe2(conf->errpipe, O_CLOEXEC) != 0) { ++ SYSERROR("Failed to init errpipe"); ++ free_init_cmd(init_cmd); ++ lxc_free_handler(handler); ++ return false; ++ } ++#endif ++ + pid_first = fork(); + if (pid_first < 0) { + free_init_cmd(init_cmd); +- lxc_put_handler(handler); ++ lxc_free_handler(handler); ++#ifdef HAVE_ISULAD ++ lxc_close_error_pipe(conf->errpipe); ++#endif + return false; + } + +@@ -943,14 +1105,28 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a + * the PID file, child will do the free and unlink. + */ + c->pidfile = NULL; ++#ifdef HAVE_ISULAD ++ close(conf->errpipe[1]); ++ conf->errpipe[1] = -1; ++#endif + + /* Wait for container to tell us whether it started + * successfully. + */ + started = wait_on_daemonized_start(handler, pid_first); ++#ifdef HAVE_ISULAD ++ if (!started) { ++ size_read = read(conf->errpipe[0], errbuf, BUFSIZ); ++ if (size_read > 0) { ++ conf->errmsg = safe_strdup(errbuf); ++ } ++ } ++ close(conf->errpipe[0]); ++ conf->errpipe[0] = -1; ++#endif + + free_init_cmd(init_cmd); +- lxc_put_handler(handler); ++ lxc_free_handler(handler); + return started; + } + +@@ -982,7 +1158,10 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a + /* second parent */ + if (pid_second != 0) { + free_init_cmd(init_cmd); +- lxc_put_handler(handler); ++ lxc_free_handler(handler); ++#ifdef HAVE_ISULAD ++ lxc_close_error_pipe(conf->errpipe); ++#endif + _exit(EXIT_SUCCESS); + } + +@@ -995,7 +1174,16 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a + _exit(EXIT_FAILURE); + } + +- ret = inherit_fds(handler, true); ++ keepfds[0] = handler->conf->maincmd_fd; ++ keepfds[1] = handler->state_socket_pair[0]; ++ keepfds[2] = handler->state_socket_pair[1]; ++#ifdef HAVE_ISULAD ++ keepfds[4] = conf->errpipe[1]; ++ close(conf->errpipe[0]); ++ conf->errpipe[0] = -1; ++#endif ++ ret = lxc_check_inherited(conf, true, keepfds, ++ sizeof(keepfds) / sizeof(keepfds[0])); + if (ret < 0) + _exit(EXIT_FAILURE); + +@@ -1013,7 +1201,7 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a + } else if (!am_single_threaded()) { + ERROR("Cannot start non-daemonized container when threaded"); + free_init_cmd(init_cmd); +- lxc_put_handler(handler); ++ lxc_free_handler(handler); + return false; + } + +@@ -1027,7 +1215,10 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a + w = snprintf(pidstr, sizeof(pidstr), "%d", lxc_raw_getpid()); + if (w < 0 || (size_t)w >= sizeof(pidstr)) { + free_init_cmd(init_cmd); +- lxc_put_handler(handler); ++ lxc_free_handler(handler); ++#ifdef HAVE_ISULAD ++ lxc_close_error_pipe(conf->errpipe); ++#endif + + SYSERROR("Failed to write monitor pid to \"%s\"", c->pidfile); + +@@ -1040,7 +1231,10 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a + ret = lxc_write_to_file(c->pidfile, pidstr, w, false, 0600); + if (ret < 0) { + free_init_cmd(init_cmd); +- lxc_put_handler(handler); ++ lxc_free_handler(handler); ++#ifdef HAVE_ISULAD ++ lxc_close_error_pipe(conf->errpipe); ++#endif + + SYSERROR("Failed to write monitor pid to \"%s\"", c->pidfile); + +@@ -1051,6 +1245,19 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a + } + } + ++#ifdef HAVE_ISULAD ++ /* isulad: open exit fifo */ ++ if (c->exit_fifo) { ++ conf->exit_fd = lxc_open(c->exit_fifo, O_WRONLY | O_NONBLOCK | O_CLOEXEC, 0); ++ if (conf->exit_fd < 0) { ++ ERROR("Failed to open exit fifo %s: %s.", c->exit_fifo, strerror(errno)); ++ lxc_free_handler(handler); ++ ret = 1; ++ goto on_error; ++ } ++ } ++#endif ++ + conf->reboot = REBOOT_NONE; + + /* Unshare the mount namespace if requested */ +@@ -1058,15 +1265,15 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a + ret = unshare(CLONE_NEWNS); + if (ret < 0) { + SYSERROR("Failed to unshare mount namespace"); +- lxc_put_handler(handler); ++ lxc_free_handler(handler); + ret = 1; + goto on_error; + } + + ret = mount(NULL, "/", NULL, MS_SLAVE|MS_REC, NULL); + if (ret < 0) { +- SYSERROR("Failed to recursively turn root mount tree into dependent mount. Continuing..."); +- lxc_put_handler(handler); ++ SYSERROR("Failed to make / rslave at startup"); ++ lxc_free_handler(handler); + ret = 1; + goto on_error; + } +@@ -1075,26 +1282,55 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a + reboot: + if (conf->reboot == REBOOT_INIT) { + /* initialize handler */ +- handler = lxc_init_handler(handler, c->name, conf, c->config_path, c->daemonize); ++ handler = lxc_init_handler(c->name, conf, c->config_path, c->daemonize); + if (!handler) { + ret = 1; + goto on_error; + } + } + +- ret = inherit_fds(handler, c->daemonize); ++ keepfds[0] = handler->conf->maincmd_fd; ++ keepfds[1] = handler->state_socket_pair[0]; ++ keepfds[2] = handler->state_socket_pair[1]; ++ ++#ifdef HAVE_ISULAD ++ /* keep exit fifo fd */ ++ if (conf->exit_fd >= 0) { ++ keepfds[3] = conf->exit_fd; ++ } ++ /* isulad: keep errpipe fd */ ++ if (c->daemonize) ++ keepfds[4] = conf->errpipe[1]; ++#endif ++ ++ ret = lxc_check_inherited(conf, c->daemonize, keepfds, ++ sizeof(keepfds) / sizeof(keepfds[0])); + if (ret < 0) { +- lxc_put_handler(handler); ++ lxc_free_handler(handler); + ret = 1; + goto on_error; + } + +- if (useinit) ++#ifdef HAVE_ISULAD ++ if (useinit) { ++ ret = lxc_execute(c->name, argv, 1, handler, c->config_path, ++ c->daemonize, &c->error_num, c->start_timeout); ++ } ++ else { ++ handler->disable_pty = c->disable_pty; ++ handler->open_stdin = c->open_stdin; ++ ret = lxc_start(argv, handler, c->config_path, c->daemonize, ++ &c->error_num, c->start_timeout); ++#else ++ if (useinit) { + ret = lxc_execute(c->name, argv, 1, handler, c->config_path, + c->daemonize, &c->error_num); +- else ++ } ++ else { + ret = lxc_start(argv, handler, c->config_path, c->daemonize, + &c->error_num); ++#endif ++ } + + if (conf->reboot == REBOOT_REQ) { + INFO("Container requested reboot"); +@@ -1185,6 +1421,7 @@ WRAP_API(bool, lxcapi_stop) + + static int do_create_container_dir(const char *path, struct lxc_conf *conf) + { ++ __do_free char *p = NULL; + int lasterr; + int ret = -1; + +@@ -1200,8 +1437,10 @@ static int do_create_container_dir(const char *path, struct lxc_conf *conf) + ret = 0; + } + ++ p = must_copy_string(path); ++ + if (!lxc_list_empty(&conf->id_map)) { +- ret = chown_mapped_root(path, conf); ++ ret = chown_mapped_root(p, conf); + if (ret < 0) + ret = -1; + } +@@ -1345,8 +1584,14 @@ static bool create_run_template(struct lxc_container *c, char *tpath, + _exit(EXIT_FAILURE); + } + +- if (detect_shared_rootfs() && mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL)) +- SYSERROR("Failed to recursively turn root mount tree into dependent mount. Continuing..."); ++ ret = detect_shared_rootfs(); ++ if (ret == 1) { ++ ret = mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL); ++ if (ret < 0) { ++ SYSERROR("Failed to make \"/\" rslave"); ++ ERROR("Continuing..."); ++ } ++ } + } + + if (strcmp(bdev->type, "dir") != 0 && strcmp(bdev->type, "btrfs") != 0) { +@@ -2048,7 +2293,12 @@ WRAP_API_1(bool, lxcapi_reboot2, int) + static bool do_lxcapi_shutdown(struct lxc_container *c, int timeout) + { + __do_close int pidfd = -EBADF, state_client_fd = -EBADF; ++#ifdef HAVE_ISULAD ++ // isulad: keep default signal the same as docker ++ int haltsignal = SIGTERM; ++#else + int haltsignal = SIGPWR; ++#endif + pid_t pid = -1; + lxc_state_t states[MAX_STATE] = {0}; + int killret, ret; +@@ -2064,12 +2314,13 @@ static bool do_lxcapi_shutdown(struct lxc_container *c, int timeout) + if (pid <= 0) + return true; + +- /* Detect whether we should send SIGRTMIN + 3 (e.g. systemd). */ + if (c->lxc_conf && c->lxc_conf->haltsignal) + haltsignal = c->lxc_conf->haltsignal; ++#ifndef HAVE_ISULAD ++ /* Detect whether we should send SIGRTMIN + 3 (e.g. systemd). */ + else if (task_blocks_signal(pid, (SIGRTMIN + 3))) + haltsignal = (SIGRTMIN + 3); +- ++#endif + + /* + * Add a new state client before sending the shutdown signal so +@@ -2090,41 +2341,41 @@ static bool do_lxcapi_shutdown(struct lxc_container *c, int timeout) + + if (ret < MAX_STATE) + return false; +- } + +- if (pidfd >= 0) { +- struct pollfd pidfd_poll = { +- .events = POLLIN, +- .fd = pidfd, +- }; ++ if (pidfd >= 0) { ++ struct pollfd pidfd_poll = { ++ .events = POLLIN, ++ .fd = pidfd, ++ }; + +- killret = lxc_raw_pidfd_send_signal(pidfd, haltsignal, +- NULL, 0); +- if (killret < 0) +- return log_warn(false, "Failed to send signal %d to pidfd %d", +- haltsignal, pidfd); ++ killret = lxc_raw_pidfd_send_signal(pidfd, haltsignal, ++ NULL, 0); ++ if (killret < 0) ++ return log_warn(false, "Failed to send signal %d to pidfd %d", ++ haltsignal, pidfd); + +- TRACE("Sent signal %d to pidfd %d", haltsignal, pidfd); ++ TRACE("Sent signal %d to pidfd %d", haltsignal, pidfd); + +- /* +- * No need for going through all of the state server +- * complications anymore. We can just poll on pidfds. :) +- */ ++ /* ++ * No need for going through all of the state server ++ * complications anymore. We can just poll on pidfds. :) ++ */ + +- if (timeout != 0) { +- ret = poll(&pidfd_poll, 1, timeout * 1000); +- if (ret < 0 || !(pidfd_poll.revents & POLLIN)) +- return false; ++ if (timeout != 0) { ++ ret = poll(&pidfd_poll, 1, timeout * 1000); ++ if (ret < 0 || !(pidfd_poll.revents & POLLIN)) ++ return false; + +- TRACE("Pidfd polling detected container exit"); +- } +- } else { +- killret = kill(pid, haltsignal); +- if (killret < 0) +- return log_warn(false, "Failed to send signal %d to pid %d", +- haltsignal, pid); ++ TRACE("Pidfd polling detected container exit"); ++ } ++ } else { ++ killret = kill(pid, haltsignal); ++ if (killret < 0) ++ return log_warn(false, "Failed to send signal %d to pid %d", ++ haltsignal, pid); + +- TRACE("Sent signal %d to pid %d", haltsignal, pid); ++ TRACE("Sent signal %d to pid %d", haltsignal, pid); ++ } + } + + if (timeout == 0) +@@ -2948,8 +3199,19 @@ static bool container_destroy(struct lxc_container *c, + bool bret = false; + int ret = 0; + ++#ifdef HAVE_ISULAD ++ if (!c) ++ return false; ++ // isulad: if container is not defined, we need to remove disk lock file ++ // which is created in lxc_container_new. ++ if (!do_lxcapi_is_defined(c)) { ++ container_disk_removelock(c); ++ return false; ++ } ++#else + if (!c || !do_lxcapi_is_defined(c)) + return false; ++#endif + + conf = c->lxc_conf; + if (container_disk_lock(c)) +@@ -3069,6 +3331,15 @@ static bool container_destroy(struct lxc_container *c, + if (ret < 0) { + ERROR("Failed to destroy directory \"%s\" for \"%s\"", path, + c->name); ++#ifdef HAVE_ISULAD ++ char msg[BUFSIZ] = { 0 }; ++ ret = snprintf(msg, BUFSIZ, "Failed to destroy directory \"%s\": %s", path, errno ? strerror(errno) : "error"); ++ if (ret < 0 || ret >= BUFSIZ) { ++ ERROR("Sprintf failed"); ++ goto out; ++ } ++ c->error_string = safe_strdup(msg); ++#endif + goto out; + } + INFO("Destroyed directory \"%s\" for \"%s\"", path, c->name); +@@ -3081,13 +3352,23 @@ out: + free(path); + + container_disk_unlock(c); ++#ifdef HAVE_ISULAD ++ if (bret && container_disk_removelock(c)) { ++ bret = false; ++ } ++#endif + return bret; + } + + static bool do_lxcapi_destroy(struct lxc_container *c) + { ++#ifdef HAVE_ISULAD ++ if (!c) ++ return false; ++#else + if (!c || !lxcapi_is_defined(c)) + return false; ++#endif + + if (c->lxc_conf && c->lxc_conf->rootfs.managed) { + if (has_snapshots(c)) { +@@ -3665,8 +3946,12 @@ static int clone_update_rootfs(struct clone_update_data *data) + return -1; + } + +- if (detect_shared_rootfs() && mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL)) +- SYSERROR("Failed to recursively turn root mount tree into dependent mount. Continuing..."); ++ if (detect_shared_rootfs()) { ++ if (mount(NULL, "/", NULL, MS_SLAVE|MS_REC, NULL)) { ++ SYSERROR("Failed to make / rslave"); ++ ERROR("Continuing..."); ++ } ++ } + + if (bdev->ops->mount(bdev) < 0) { + storage_put(bdev); +@@ -4030,8 +4315,13 @@ static int lxcapi_attach(struct lxc_container *c, + + current_config = c->lxc_conf; + ++#ifdef HAVE_ISULAD ++ ret = lxc_attach(c, exec_function, exec_payload, options, ++ attached_process, &c->lxc_conf->errmsg); ++#else + ret = lxc_attach(c, exec_function, exec_payload, options, + attached_process); ++#endif + current_config = NULL; + return ret; + } +@@ -4051,7 +4341,11 @@ static int do_lxcapi_attach_run_wait(struct lxc_container *c, + command.program = (char *)program; + command.argv = (char **)argv; + ++#ifdef HAVE_ISULAD ++ ret = lxc_attach(c, lxc_attach_run_command, &command, options, &pid, NULL); ++#else + ret = lxc_attach(c, lxc_attach_run_command, &command, options, &pid); ++#endif + if (ret < 0) + return ret; + +@@ -5230,7 +5524,223 @@ static int do_lxcapi_seccomp_notify_fd(struct lxc_container *c) + + WRAP_API(int, lxcapi_seccomp_notify_fd) + ++#ifdef HAVE_ISULAD ++/* isulad add set console fifos*/ ++static bool do_lxcapi_set_terminal_default_fifos(struct lxc_container *c, const char *in, const char *out, const char *err) ++{ ++ struct lxc_conf *conf = NULL; ++ ++ if (!c || !c->lxc_conf) ++ return false; ++ if (container_mem_lock(c)) { ++ ERROR("Error getting mem lock"); ++ return false; ++ } ++ ++ conf = c->lxc_conf; ++ if (in) { ++ if (conf->console.init_fifo[0]) ++ free(conf->console.init_fifo[0]); ++ conf->console.init_fifo[0] = safe_strdup(in); ++ } ++ if (out) { ++ if (conf->console.init_fifo[1]) ++ free(conf->console.init_fifo[1]); ++ conf->console.init_fifo[1] = safe_strdup(out); ++ } ++ if (err) { ++ if (conf->console.init_fifo[2]) ++ free(conf->console.init_fifo[2]); ++ conf->console.init_fifo[2] = safe_strdup(err); ++ } ++ ++ container_mem_unlock(c); ++ return true; ++} ++ ++WRAP_API_3(bool, lxcapi_set_terminal_default_fifos, const char *, const char *, const char *) ++ ++/* isulad add set info file path */ ++static bool do_lxcapi_set_container_info_file(struct lxc_container *c, const char *info_file) ++{ ++ struct lxc_conf *conf = NULL; ++ ++ if (!c || !c->lxc_conf || !info_file) ++ return false; ++ if (container_mem_lock(c)) { ++ ERROR("Error getting mem lock"); ++ return false; ++ } ++ ++ conf = c->lxc_conf; ++ if (conf->container_info_file) ++ free(conf->container_info_file); ++ conf->container_info_file = safe_strdup(info_file); ++ ++ container_mem_unlock(c); ++ return true; ++} ++ ++WRAP_API_1(bool, lxcapi_set_container_info_file, const char *) ++ ++static bool do_lxcapi_want_disable_pty(struct lxc_container *c, bool state) ++{ ++ if (!c || !c->lxc_conf) ++ return false; ++ ++ if (container_mem_lock(c)) ++ return false; ++ ++ c->disable_pty = state; ++ ++ container_mem_unlock(c); ++ ++ return true; ++} ++ ++WRAP_API_1(bool, lxcapi_want_disable_pty, bool) ++ ++static bool do_lxcapi_want_open_stdin(struct lxc_container *c, bool state) ++{ ++ if (!c || !c->lxc_conf) ++ return false; ++ ++ if (container_mem_lock(c)) ++ return false; ++ ++ c->open_stdin = state; ++ ++ container_mem_unlock(c); ++ ++ return true; ++} ++ ++WRAP_API_1(bool, lxcapi_want_open_stdin, bool) ++ ++/* isulad add clean resources */ ++static bool do_lxcapi_add_terminal_fifo(struct lxc_container *c, const char *in_fifo, const char *out_fifo, const char *err_fifo) ++{ ++ bool ret = true; ++ ++ if (!c || !c->lxc_conf) ++ return false; ++ if (container_mem_lock(c)) { ++ ERROR("Error getting mem lock"); ++ return false; ++ } ++ ++ if (lxc_cmd_set_terminal_fifos(c->name, c->config_path, in_fifo, out_fifo, err_fifo)) { ++ ERROR("Error set console fifos"); ++ ret = false; ++ } ++ ++ container_mem_unlock(c); ++ return ret; ++} ++ ++WRAP_API_3(bool, lxcapi_add_terminal_fifo, const char *, const char *, const char *) ++ ++static bool do_lxcapi_set_terminal_winch(struct lxc_container *c, unsigned int height, unsigned int width) ++{ ++ bool ret = true; ++ ++ if (!c || !c->lxc_conf) ++ return false; ++ if (container_mem_lock(c)) { ++ ERROR("Error getting mem lock"); ++ return false; ++ } ++ ++ if (lxc_cmd_set_terminal_winch(c->name, c->config_path, height, width)) { ++ ERROR("Error set terminal winch"); ++ ret = false; ++ } ++ ++ container_mem_unlock(c); ++ return ret; ++} ++ ++WRAP_API_2(bool, lxcapi_set_terminal_winch, unsigned int, unsigned int) ++ ++static bool do_lxcapi_set_exec_terminal_winch(struct lxc_container *c, const char *suffix, unsigned int height, unsigned int width) ++{ ++ bool ret = true; ++ ++ if (!c || !c->lxc_conf) ++ return false; ++ if (container_mem_lock(c)) { ++ ERROR("Error getting mem lock"); ++ return false; ++ } ++ ++ if (lxc_exec_cmd_set_terminal_winch(c->name, c->config_path, suffix, height, width)) { ++ ERROR("Error set terminal winch"); ++ ret = false; ++ } ++ ++ container_mem_unlock(c); ++ return ret; ++} ++ ++WRAP_API_3(bool, lxcapi_set_exec_terminal_winch, const char *, unsigned int, unsigned int) ++ ++/* isulad add clean resources */ ++static bool do_lxcapi_clean_container_resource(struct lxc_container *c, pid_t pid) ++{ ++ int ret; ++ ++ if (!c) ++ return false; ++ ++ ret = do_lxcapi_clean_resource(c->name, c->config_path, c->lxc_conf, pid); ++ if (ret) ++ ERROR("Failed to clean container %s resource", c->name); ++ return ret == 0; ++ ++} ++ ++WRAP_API_1(bool, lxcapi_clean_container_resource, pid_t) ++ ++/* isulad get coantainer pids */ ++static bool do_lxcapi_get_container_pids(struct lxc_container *c, pid_t **pids,size_t *pids_len) ++{ ++ int ret; ++ ++ if (!c) ++ return false; ++ ++ ret = do_lxcapi_get_pids(c->name, c->config_path, c->lxc_conf, pids,pids_len); ++ if (ret) ++ ERROR("Failed to get container %s pids", c->name); ++ return ret == 0; ++ ++} ++ ++WRAP_API_2(bool, lxcapi_get_container_pids, pid_t **,size_t *) ++ ++/* isulad add start timeout */ ++static bool do_lxcapi_set_start_timeout(struct lxc_container *c, unsigned int start_timeout) ++{ ++ if (!c || !c->lxc_conf) ++ return false; ++ if (container_mem_lock(c)) { ++ ERROR("Error getting mem lock"); ++ return false; ++ } ++ c->start_timeout = start_timeout; ++ container_mem_unlock(c); ++ return true; ++} ++ ++WRAP_API_1(bool, lxcapi_set_start_timeout, unsigned int) ++ ++#endif ++ ++#ifdef HAVE_ISULAD ++static struct lxc_container *do_lxc_container_new(const char *name, const char *configpath, bool load_config) ++#else + struct lxc_container *lxc_container_new(const char *name, const char *configpath) ++#endif + { + struct lxc_container *c; + size_t len; +@@ -5283,10 +5793,24 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath + goto err; + } + ++#ifdef HAVE_ISULAD ++ if (!set_oci_hook_config_filename(c)) { ++ fprintf(stderr, "Error allocating oci hooks file pathname\n"); ++ goto err; ++ } ++ ++ if (load_config && file_exists(c->configfile)) { ++ if (!lxcapi_load_config(c, NULL)) { ++ fprintf(stderr, "Failed to load config for %s\n", name); ++ goto err; ++ } ++ } ++#else + if (file_exists(c->configfile) && !lxcapi_load_config(c, NULL)) { + fprintf(stderr, "Failed to load config for %s\n", name); + goto err; + } ++#endif + + rc = ongoing_create(c); + switch (rc) { +@@ -5371,7 +5895,18 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath + c->mount = lxcapi_mount; + c->umount = lxcapi_umount; + c->seccomp_notify_fd = lxcapi_seccomp_notify_fd; +- ++#ifdef HAVE_ISULAD ++ c->set_container_info_file = lxcapi_set_container_info_file; ++ c->set_terminal_init_fifos = lxcapi_set_terminal_default_fifos; ++ c->add_terminal_fifos = lxcapi_add_terminal_fifo; ++ c->set_terminal_winch = lxcapi_set_terminal_winch; ++ c->set_exec_terminal_winch = lxcapi_set_exec_terminal_winch; ++ c->want_disable_pty = lxcapi_want_disable_pty; ++ c->want_open_stdin = lxcapi_want_open_stdin; ++ c->clean_container_resource = lxcapi_clean_container_resource; ++ c->get_container_pids = lxcapi_get_container_pids; ++ c->set_start_timeout = lxcapi_set_start_timeout; ++#endif + return c; + + err: +@@ -5379,6 +5914,19 @@ err: + return NULL; + } + ++#ifdef HAVE_ISULAD ++// isulad: new container without load config to save time ++struct lxc_container *lxc_container_without_config_new(const char *name, const char *configpath) ++{ ++ return do_lxc_container_new(name, configpath, false); ++} ++ ++struct lxc_container *lxc_container_new(const char *name, const char *configpath) ++{ ++ return do_lxc_container_new(name, configpath, true); ++} ++#endif ++ + int lxc_get_wait_states(const char **states) + { + int i; +@@ -5557,11 +6105,21 @@ int list_active_containers(const char *lxcpath, char ***nret, + continue; + } + ++#ifdef HAVE_ISULAD ++ if (ct_name && ct_name_cnt) { ++ if (array_contains(&ct_name, p, ct_name_cnt)) { ++ if (is_hashed) ++ free(p); ++ continue; ++ } ++ } ++#else + if (array_contains(&ct_name, p, ct_name_cnt)) { + if (is_hashed) + free(p); + continue; + } ++#endif + + if (!add_to_array(&ct_name, p, ct_name_cnt)) { + if (is_hashed) +diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h +index b4ec1d6d5..2951ac7b4 100644 +--- a/src/lxc/lxccontainer.h ++++ b/src/lxc/lxccontainer.h +@@ -90,7 +90,7 @@ struct lxc_container { + * \private + * Container configuration. + * +- * \internal TODO: do we want the whole lxc_handler? ++ * \internal FIXME: do we want the whole lxc_handler? + */ + struct lxc_conf *lxc_conf; + +@@ -107,6 +107,30 @@ struct lxc_container { + /*! Full path to configuration file */ + char *config_path; + ++ /*! isulad: ++ * \private ++ * exit FIFO File to open used monitor the state of lxc monitor process. ++ */ ++ char *exit_fifo; ++ /*! Whether container wishes to create pty or pipes for console log */ ++ bool disable_pty; ++ ++ /*! Whether container wishes to keep stdin active */ ++ bool open_stdin; ++ ++ /*! ++ * \private ++ * isulad: support oci hook from json file ++ * full path of json file ++ * */ ++ char *ocihookfile; ++ ++ /*! isulad: ++ * \private ++ * start_timeout. ++ */ ++ unsigned int start_timeout; ++ + /*! + * \brief Determine if \c /var/lib/lxc/$name/config exists. + * +@@ -563,7 +587,7 @@ struct lxc_container { + * \param c Container. + * \param[in,out] ttynum Terminal number to attempt to allocate, + * or \c -1 to allocate the first available tty. +- * \param[out] ptmxfd File descriptor referring to the ptmx side of the pty. ++ * \param[out] masterfd File descriptor referring to the master side of the pty. + * + * \return tty file descriptor number on success, or \c -1 on + * failure. +@@ -575,7 +599,7 @@ struct lxc_container { + * descriptor when no longer required so that it may be allocated + * by another caller. + */ +- int (*console_getfd)(struct lxc_container *c, int *ttynum, int *ptmxfd); ++ int (*console_getfd)(struct lxc_container *c, int *ttynum, int *masterfd); + + /*! + * \brief Allocate and run a console tty. +@@ -865,6 +889,93 @@ struct lxc_container { + * \return pidfd of init process of the container. + */ + int (*init_pidfd)(struct lxc_container *c); ++ ++ /*! isulad add ++ * \brief An API call to set the path of info file ++ * ++ * \param c Container. ++ * \param info_file Value of the path of info file. ++ * ++ * \return \c true on success, else \c false. ++ */ ++ bool (*set_container_info_file) (struct lxc_container *c, const char *info_file); ++ ++ /*! isulad add ++ * \brief An API call to change the path of the console default fifos ++ * ++ * \param c Container. ++ * \param path Value of the console path. ++ * ++ * \return \c true on success, else \c false. ++ */ ++ bool (*set_terminal_init_fifos)(struct lxc_container *c, const char *in, const char *out, const char *err); ++ ++ /*! isulad add ++ * \brief An API call to add the path of terminal fifos ++ * ++ * \param c Container. ++ * \param path Value of the console path.. ++ * ++ * \return \c true on success, else \c false. ++ */ ++ bool (*add_terminal_fifos)(struct lxc_container *c, const char *in, const char *out, const char *err); ++ ++ bool (*set_terminal_winch)(struct lxc_container *c, unsigned int height, unsigned int width); ++ ++ bool (*set_exec_terminal_winch)(struct lxc_container *c, const char *suffix, unsigned int height, unsigned int width); ++ ++ /*! ++ * \brief Change whether the container wants to create pty or pipes ++ * from the console log. ++ * ++ * \param c Container. ++ * \param state Value for the disable pty bit (0 or 1). ++ * ++ * \return \c true on success, else \c false. ++ */ ++ bool (*want_disable_pty)(struct lxc_container *c, bool state); ++ ++ /*! ++ * \brief Change whether the container wants to keep stdin active ++ * for parent process of container ++ * ++ * \param c Container. ++ * \param state Value for the open_stdin bit (0 or 1). ++ * ++ * \return \c true on success, else \c false. ++ */ ++ bool (*want_open_stdin)(struct lxc_container *c, bool state); ++ ++ /*! isulad add ++ * \brief An API call to clean resources of container ++ * ++ * \param c Container. ++ * \param pid Value of container process. ++ * ++ * \return \c true on success, else \c false. ++ */ ++ bool (*clean_container_resource) (struct lxc_container *c, pid_t pid); ++ ++ /*! isulad add ++ * \brief An API call to get container pids ++ * ++ * \param c Container. ++ * \param pids Value of container pids. ++ * \param pids_len Value of container pids len. ++ * \param pid Value of container pid. ++ * \return \c true on success, else \c false. ++ */ ++ bool (*get_container_pids)(struct lxc_container *c,pid_t **pids,size_t *pids_len); ++ ++ /*! isulad add ++ * \brief An API call to set start timeout ++ * ++ * \param c Container. ++ * \param start_timeout Value of start timeout. ++ * ++ * \return \c true on success, else \c false. ++ */ ++ bool (*set_start_timeout)(struct lxc_container *c, unsigned int start_timeout); + }; + + /*! +@@ -998,6 +1109,18 @@ struct lxc_console_log { + */ + struct lxc_container *lxc_container_new(const char *name, const char *configpath); + ++/*! ++ * \brief Create a new container without loading config. ++ * ++ * \param name Name to use for container. ++ * \param configpath Full path to configuration file to use. ++ * ++ * \return Newly-allocated container, or \c NULL on error. ++ * ++ * \note This function can only used for listing container. ++ */ ++struct lxc_container *lxc_container_without_config_new(const char *name, const char *configpath); ++ + /*! + * \brief Add a reference to the specified container. + * +diff --git a/src/lxc/lxclock.c b/src/lxc/lxclock.c +index 318e5bf5a..bb0dca0c9 100644 +--- a/src/lxc/lxclock.c ++++ b/src/lxc/lxclock.c +@@ -370,3 +370,30 @@ void container_disk_unlock(struct lxc_container *c) + lxcunlock(c->slock); + lxcunlock(c->privlock); + } ++ ++#ifdef HAVE_ISULAD ++static int lxc_removelock(struct lxc_lock *l) ++{ ++ int ret = 0; ++ ++ if (l->type == LXC_LOCK_FLOCK) { ++ ret = unlink(l->u.f.fname); ++ if (ret && errno != ENOENT) { ++ SYSERROR("Error unlink %s", l->u.f.fname); ++ return ret; ++ } ++ } ++ ++ return ret; ++} ++ ++int container_disk_removelock(struct lxc_container *c) ++{ ++ int ret; ++ ++ ret = lxc_removelock(c->slock); ++ if (ret) ++ return ret; ++ return lxc_removelock(c->privlock); ++} ++#endif +diff --git a/src/lxc/lxclock.h b/src/lxc/lxclock.h +index 9f9bc3bf6..6a71d7c5e 100644 +--- a/src/lxc/lxclock.h ++++ b/src/lxc/lxclock.h +@@ -154,4 +154,8 @@ extern int container_disk_lock(struct lxc_container *c); + */ + extern void container_disk_unlock(struct lxc_container *c); + ++#ifdef HAVE_ISULAD ++int container_disk_removelock(struct lxc_container *c); ++#endif ++ + #endif +diff --git a/src/lxc/macro.h b/src/lxc/macro.h +index 7b2ad79ed..3df19d6d3 100644 +--- a/src/lxc/macro.h ++++ b/src/lxc/macro.h +@@ -57,20 +57,6 @@ + #define CAP_SETGID 6 + #endif + +-/* move_mount */ +-#ifndef MOVE_MOUNT_F_EMPTY_PATH +-#define MOVE_MOUNT_F_EMPTY_PATH 0x00000004 /* Empty from path permitted */ +-#endif +- +-/* open_tree */ +-#ifndef OPEN_TREE_CLONE +-#define OPEN_TREE_CLONE 1 /* Clone the target tree and attach the clone */ +-#endif +- +-#ifndef OPEN_TREE_CLOEXEC +-#define OPEN_TREE_CLOEXEC O_CLOEXEC /* Close the file on execve() */ +-#endif +- + /* prctl */ + #ifndef PR_CAPBSET_READ + #define PR_CAPBSET_READ 23 +@@ -433,9 +419,6 @@ enum { + + #define PTR_TO_UINT64(p) ((uint64_t)((intptr_t)(p))) + +-#define UINT_TO_PTR(u) ((void *) ((uintptr_t) (u))) +-#define PTR_TO_USHORT(p) ((unsigned short)((uintptr_t)(p))) +- + #define LXC_INVALID_UID ((uid_t)-1) + #define LXC_INVALID_GID ((gid_t)-1) + +diff --git a/src/lxc/mainloop.c b/src/lxc/mainloop.c +index d5ae2a67a..6d4c5935a 100644 +--- a/src/lxc/mainloop.c ++++ b/src/lxc/mainloop.c +@@ -59,10 +59,8 @@ int lxc_mainloop(struct lxc_epoll_descr *descr, int timeout_ms) + } + } + +-int lxc_mainloop_add_handler_events(struct lxc_epoll_descr *descr, int fd, +- int events, +- lxc_mainloop_callback_t callback, +- void *data) ++int lxc_mainloop_add_handler(struct lxc_epoll_descr *descr, int fd, ++ lxc_mainloop_callback_t callback, void *data) + { + __do_free struct mainloop_handler *handler = NULL; + __do_free struct lxc_list *item = NULL; +@@ -79,7 +77,7 @@ int lxc_mainloop_add_handler_events(struct lxc_epoll_descr *descr, int fd, + handler->fd = fd; + handler->data = data; + +- ev.events = events; ++ ev.events = EPOLLIN; + ev.data.ptr = handler; + + if (epoll_ctl(descr->epfd, EPOLL_CTL_ADD, fd, &ev) < 0) +@@ -94,13 +92,6 @@ int lxc_mainloop_add_handler_events(struct lxc_epoll_descr *descr, int fd, + return 0; + } + +-int lxc_mainloop_add_handler(struct lxc_epoll_descr *descr, int fd, +- lxc_mainloop_callback_t callback, void *data) +-{ +- return lxc_mainloop_add_handler_events(descr, fd, EPOLLIN, callback, +- data); +-} +- + int lxc_mainloop_del_handler(struct lxc_epoll_descr *descr, int fd) + { + struct mainloop_handler *handler; +diff --git a/src/lxc/mainloop.h b/src/lxc/mainloop.h +index e6ab9a6d9..8afac60d3 100644 +--- a/src/lxc/mainloop.h ++++ b/src/lxc/mainloop.h +@@ -22,10 +22,6 @@ typedef int (*lxc_mainloop_callback_t)(int fd, uint32_t event, void *data, + + extern int lxc_mainloop(struct lxc_epoll_descr *descr, int timeout_ms); + +-extern int lxc_mainloop_add_handler_events(struct lxc_epoll_descr *descr, +- int fd, int events, +- lxc_mainloop_callback_t callback, +- void *data); + extern int lxc_mainloop_add_handler(struct lxc_epoll_descr *descr, int fd, + lxc_mainloop_callback_t callback, + void *data); +diff --git a/src/lxc/memory_utils.h b/src/lxc/memory_utils.h +index d3b68a1e9..29878fb67 100644 +--- a/src/lxc/memory_utils.h ++++ b/src/lxc/memory_utils.h +@@ -41,10 +41,10 @@ define_cleanup_function(FILE *, fclose); + define_cleanup_function(DIR *, closedir); + #define __do_closedir call_cleaner(closedir) + +-#define free_disarm(ptr) \ +- ({ \ +- free(ptr); \ +- ptr = NULL; \ ++#define free_disarm(ptr) \ ++ ({ \ ++ free(ptr); \ ++ move_ptr(ptr); \ + }) + + static inline void free_disarm_function(void *ptr) +diff --git a/src/lxc/namespace.c b/src/lxc/namespace.c +index f2e017563..38d2ae5d7 100644 +--- a/src/lxc/namespace.c ++++ b/src/lxc/namespace.c +@@ -21,6 +21,33 @@ + + lxc_log_define(namespace, lxc); + ++/* ++ * Let's use the "standard stack limit" (i.e. glibc thread size default) for ++ * stack sizes: 8MB. ++ */ ++#define __LXC_STACK_SIZE (8 * 1024 * 1024) ++pid_t lxc_clone(int (*fn)(void *), void *arg, int flags, int *pidfd) ++{ ++ pid_t ret; ++ void *stack; ++ ++ stack = malloc(__LXC_STACK_SIZE); ++ if (!stack) { ++ SYSERROR("Failed to allocate clone stack"); ++ return -ENOMEM; ++ } ++ ++#ifdef __ia64__ ++ ret = __clone2(fn, stack, __LXC_STACK_SIZE, flags | SIGCHLD, arg, pidfd); ++#else ++ ret = clone(fn, stack + __LXC_STACK_SIZE, flags | SIGCHLD, arg, pidfd); ++#endif ++ if (ret < 0) ++ SYSERROR("Failed to clone (%#x)", flags); ++ ++ return ret; ++} ++ + /* Leave the user namespace at the first position in the array of structs so + * that we always attach to it first when iterating over the struct and using + * setns() to switch namespaces. This especially affects lxc_attach(): Suppose +diff --git a/src/lxc/namespace.h b/src/lxc/namespace.h +index 84976f60f..a8fda783c 100644 +--- a/src/lxc/namespace.h ++++ b/src/lxc/namespace.h +@@ -7,6 +7,63 @@ + #include + #include + ++#ifndef CLONE_PARENT_SETTID ++#define CLONE_PARENT_SETTID 0x00100000 ++#endif ++ ++#ifndef CLONE_CHILD_CLEARTID ++#define CLONE_CHILD_CLEARTID 0x00200000 ++#endif ++ ++#ifndef CLONE_CHILD_SETTID ++#define CLONE_CHILD_SETTID 0x01000000 ++#endif ++ ++#ifndef CLONE_VFORK ++#define CLONE_VFORK 0x00004000 ++#endif ++ ++#ifndef CLONE_THREAD ++#define CLONE_THREAD 0x00010000 ++#endif ++ ++#ifndef CLONE_SETTLS ++#define CLONE_SETTLS 0x00080000 ++#endif ++ ++#ifndef CLONE_VM ++#define CLONE_VM 0x00000100 ++#endif ++ ++#ifndef CLONE_FILES ++#define CLONE_FILES 0x00000400 ++#endif ++ ++#ifndef CLONE_FS ++# define CLONE_FS 0x00000200 ++#endif ++#ifndef CLONE_NEWNS ++# define CLONE_NEWNS 0x00020000 ++#endif ++#ifndef CLONE_NEWCGROUP ++# define CLONE_NEWCGROUP 0x02000000 ++#endif ++#ifndef CLONE_NEWUTS ++# define CLONE_NEWUTS 0x04000000 ++#endif ++#ifndef CLONE_NEWIPC ++# define CLONE_NEWIPC 0x08000000 ++#endif ++#ifndef CLONE_NEWUSER ++# define CLONE_NEWUSER 0x10000000 ++#endif ++#ifndef CLONE_NEWPID ++# define CLONE_NEWPID 0x20000000 ++#endif ++#ifndef CLONE_NEWNET ++# define CLONE_NEWNET 0x40000000 ++#endif ++ + enum { + LXC_NS_USER, + LXC_NS_MNT, +@@ -25,6 +82,39 @@ extern const struct ns_info { + const char *env_name; + } ns_info[LXC_NS_MAX]; + ++#if defined(__ia64__) ++int __clone2(int (*__fn) (void *__arg), void *__child_stack_base, ++ size_t __child_stack_size, int __flags, void *__arg, ...); ++#else ++int clone(int (*fn)(void *), void *child_stack, ++ int flags, void *arg, ... ++ /* pid_t *ptid, struct user_desc *tls, pid_t *ctid */ ); ++#endif ++ ++/** ++ * lxc_clone() - create a new process ++ * ++ * - allocate stack: ++ * This function allocates a new stack the size of page and passes it to the ++ * kernel. ++ * ++ * - support all CLONE_*flags: ++ * This function supports all CLONE_* flags. If in doubt or not sufficiently ++ * familiar with process creation in the kernel and interactions with libcs ++ * this function should be used. ++ * ++ * - pthread_atfork() handlers depending on libc: ++ * Whether this function runs pthread_atfork() handlers depends on the ++ * corresponding libc wrapper. glibc currently does not run pthread_atfork() ++ * handlers but does not guarantee that they are not. Other libcs might or ++ * might not run pthread_atfork() handlers. If you require guarantees please ++ * refer to the lxc_raw_clone*() functions in raw_syscalls.{c,h}. ++ * ++ * - should call lxc_raw_getpid(): ++ * The child should use lxc_raw_getpid() to retrieve its pid. ++ */ ++extern pid_t lxc_clone(int (*fn)(void *), void *arg, int flags, int *pidfd); ++ + extern int lxc_namespace_2_cloneflag(const char *namespace); + extern int lxc_namespace_2_ns_idx(const char *namespace); + extern int lxc_namespace_2_std_identifiers(char *namespaces); +diff --git a/src/lxc/network.c b/src/lxc/network.c +index bca044059..19adb2329 100644 +--- a/src/lxc/network.c ++++ b/src/lxc/network.c +@@ -36,7 +36,7 @@ + #include "memory_utils.h" + #include "network.h" + #include "nl.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "syscall_wrappers.h" + #include "utils.h" + +@@ -182,6 +182,11 @@ static int setup_ipv6_addr_routes(struct lxc_list *ip, int ifindex) + return 0; + } + ++struct ip_proxy_args { ++ const char *ip; ++ const char *dev; ++}; ++ + static int lxc_ip_neigh_proxy(__u16 nlmsg_type, int family, int ifindex, void *dest) + { + call_cleaner(nlmsg_free) struct nlmsg *answer = NULL, *nlmsg = NULL; +@@ -319,15 +324,11 @@ static int instantiate_veth(struct lxc_handler *handler, struct lxc_netdev *netd + } + + if (!is_empty_string(netdev->link) && netdev->priv.veth_attr.mode == VETH_MODE_BRIDGE) { +- if (!lxc_nic_exists(netdev->link)) { +- SYSERROR("Failed to attach \"%s\" to bridge \"%s\", bridge interface doesn't exist", veth1, netdev->link); +- goto out_delete; +- } +- + err = lxc_bridge_attach(netdev->link, veth1); + if (err) { + errno = -err; +- SYSERROR("Failed to attach \"%s\" to bridge \"%s\"", veth1, netdev->link); ++ SYSERROR("Failed to attach \"%s\" to bridge \"%s\"", ++ veth1, netdev->link); + goto out_delete; + } + INFO("Attached \"%s\" to bridge \"%s\"", veth1, netdev->link); +@@ -482,6 +483,8 @@ static int instantiate_macvlan(struct lxc_handler *handler, struct lxc_netdev *n + } + + strlcpy(netdev->created_name, peer, IFNAMSIZ); ++ if (is_empty_string(netdev->name)) ++ (void)strlcpy(netdev->name, peer, IFNAMSIZ); + + netdev->ifindex = if_nametoindex(peer); + if (!netdev->ifindex) { +@@ -531,7 +534,7 @@ on_error: + return -1; + } + +-static int lxc_ipvlan_create(const char *parent, const char *name, int mode, int isolation) ++static int lxc_ipvlan_create(const char *master, const char *name, int mode, int isolation) + { + call_cleaner(nlmsg_free) struct nlmsg *answer = NULL, *nlmsg = NULL; + struct nl_handler nlh; +@@ -540,7 +543,7 @@ static int lxc_ipvlan_create(const char *parent, const char *name, int mode, int + struct ifinfomsg *ifi; + struct rtattr *nest, *nest2; + +- len = strlen(parent); ++ len = strlen(master); + if (len == 1 || len >= IFNAMSIZ) + return ret_errno(EINVAL); + +@@ -548,13 +551,13 @@ static int lxc_ipvlan_create(const char *parent, const char *name, int mode, int + if (len == 1 || len >= IFNAMSIZ) + return ret_errno(EINVAL); + +- index = if_nametoindex(parent); ++ index = if_nametoindex(master); + if (!index) + return ret_errno(EINVAL); + + err = netlink_open(nlh_ptr, NETLINK_ROUTE); + if (err) +- return err; ++ return ret_errno(-err); + + nlmsg = nlmsg_alloc(NLMSG_GOOD_SIZE); + if (!nlmsg) +@@ -579,21 +582,24 @@ static int lxc_ipvlan_create(const char *parent, const char *name, int mode, int + if (nla_put_string(nlmsg, IFLA_INFO_KIND, "ipvlan")) + return ret_errno(EPROTO); + +- nest2 = nla_begin_nested(nlmsg, IFLA_INFO_DATA); +- if (!nest2) +- return ret_errno(EPROTO); ++ if (mode) { ++ nest2 = nla_begin_nested(nlmsg, IFLA_INFO_DATA); ++ if (!nest2) ++ return ret_errno(EPROTO); + +- if (nla_put_u16(nlmsg, IFLA_IPVLAN_MODE, mode)) +- return ret_errno(EPROTO); ++ if (nla_put_u32(nlmsg, IFLA_IPVLAN_MODE, mode)) ++ return ret_errno(EPROTO); + +- /* if_link.h does not define the isolation flag value for bridge mode (unlike IPVLAN_F_PRIVATE and +- * IPVLAN_F_VEPA) so we define it as 0 and only send mode if mode >0 as default mode is bridge anyway +- * according to ipvlan docs. +- */ +- if (isolation > 0 && nla_put_u16(nlmsg, IFLA_IPVLAN_ISOLATION, isolation)) +- return ret_errno(EPROTO); ++ /* if_link.h does not define the isolation flag value for bridge mode so we define it as 0 ++ * and only send mode if mode >0 as default mode is bridge anyway according to ipvlan docs. ++ */ ++ if (isolation > 0 && ++ nla_put_u16(nlmsg, IFLA_IPVLAN_ISOLATION, isolation)) ++ return ret_errno(EPROTO); ++ ++ nla_end_nested(nlmsg, nest2); ++ } + +- nla_end_nested(nlmsg, nest2); + nla_end_nested(nlmsg, nest); + + if (nla_put_u32(nlmsg, IFLA_LINK, index)) +@@ -631,6 +637,8 @@ static int instantiate_ipvlan(struct lxc_handler *handler, struct lxc_netdev *ne + } + + strlcpy(netdev->created_name, peer, IFNAMSIZ); ++ if (is_empty_string(netdev->name)) ++ (void)strlcpy(netdev->name, peer, IFNAMSIZ); + + netdev->ifindex = if_nametoindex(peer); + if (!netdev->ifindex) { +@@ -704,6 +712,8 @@ static int instantiate_vlan(struct lxc_handler *handler, struct lxc_netdev *netd + } + + strlcpy(netdev->created_name, peer, IFNAMSIZ); ++ if (is_empty_string(netdev->name)) ++ (void)strlcpy(netdev->name, peer, IFNAMSIZ); + + netdev->ifindex = if_nametoindex(peer); + if (!netdev->ifindex) { +@@ -859,7 +869,7 @@ static instantiate_cb netdev_conf[LXC_NET_MAXCONFTYPE + 1] = { + [LXC_NET_NONE] = instantiate_none, + }; + +-static int __instantiate_ns_common(struct lxc_netdev *netdev) ++static int instantiate_ns_veth(struct lxc_netdev *netdev) + { + char current_ifname[IFNAMSIZ]; + +@@ -901,30 +911,33 @@ static int __instantiate_ns_common(struct lxc_netdev *netdev) + return 0; + } + +-static int instantiate_ns_veth(struct lxc_netdev *netdev) ++static int __instantiate_common(struct lxc_netdev *netdev) + { ++ netdev->ifindex = if_nametoindex(netdev->name); ++ if (!netdev->ifindex) ++ return log_error_errno(-1, errno, "Failed to retrieve ifindex for network device with name %s", netdev->name); + +- return __instantiate_ns_common(netdev); ++ return 0; + } + + static int instantiate_ns_macvlan(struct lxc_netdev *netdev) + { +- return __instantiate_ns_common(netdev); ++ return __instantiate_common(netdev); + } + + static int instantiate_ns_ipvlan(struct lxc_netdev *netdev) + { +- return __instantiate_ns_common(netdev); ++ return __instantiate_common(netdev); + } + + static int instantiate_ns_vlan(struct lxc_netdev *netdev) + { +- return __instantiate_ns_common(netdev); ++ return __instantiate_common(netdev); + } + + static int instantiate_ns_phys(struct lxc_netdev *netdev) + { +- return __instantiate_ns_common(netdev); ++ return __instantiate_common(netdev); + } + + static int instantiate_ns_empty(struct lxc_netdev *netdev) +@@ -1736,7 +1749,7 @@ int lxc_veth_create(const char *name1, const char *name2, pid_t pid, unsigned in + } + + /* TODO: merge with lxc_macvlan_create */ +-int lxc_vlan_create(const char *parent, const char *name, unsigned short vlanid) ++int lxc_vlan_create(const char *master, const char *name, unsigned short vlanid) + { + call_cleaner(nlmsg_free) struct nlmsg *answer = NULL, *nlmsg = NULL; + struct nl_handler nlh; +@@ -1749,7 +1762,7 @@ int lxc_vlan_create(const char *parent, const char *name, unsigned short vlanid) + if (err) + return err; + +- len = strlen(parent); ++ len = strlen(master); + if (len == 1 || len >= IFNAMSIZ) + return ret_errno(EINVAL); + +@@ -1765,7 +1778,7 @@ int lxc_vlan_create(const char *parent, const char *name, unsigned short vlanid) + if (!answer) + return ret_errno(ENOMEM); + +- lindex = if_nametoindex(parent); ++ lindex = if_nametoindex(master); + if (!lindex) + return ret_errno(EINVAL); + +@@ -1804,7 +1817,7 @@ int lxc_vlan_create(const char *parent, const char *name, unsigned short vlanid) + return netlink_transaction(nlh_ptr, nlmsg, answer); + } + +-int lxc_macvlan_create(const char *parent, const char *name, int mode) ++int lxc_macvlan_create(const char *master, const char *name, int mode) + { + call_cleaner(nlmsg_free) struct nlmsg *answer = NULL, *nlmsg = NULL; + struct nl_handler nlh; +@@ -1817,7 +1830,7 @@ int lxc_macvlan_create(const char *parent, const char *name, int mode) + if (err) + return err; + +- len = strlen(parent); ++ len = strlen(master); + if (len == 1 || len >= IFNAMSIZ) + return ret_errno(EINVAL); + +@@ -1833,7 +1846,7 @@ int lxc_macvlan_create(const char *parent, const char *name, int mode) + if (!answer) + return ret_errno(ENOMEM); + +- index = if_nametoindex(parent); ++ index = if_nametoindex(master); + if (!index) + return ret_errno(EINVAL); + +@@ -2834,9 +2847,6 @@ bool lxc_delete_network_unpriv(struct lxc_handler *handler) + netdev->ifindex, netdev->link); + + ret = netdev_deconf[netdev->type](handler, netdev); +- if (ret < 0) +- WARN("Failed to deconfigure interface with index %d and initial name \"%s\"", +- netdev->ifindex, netdev->link); + goto clear_ifindices; + } + +@@ -3110,9 +3120,9 @@ int lxc_network_move_created_netdev_priv(struct lxc_handler *handler) + physname = is_wlan(netdev->link); + + if (physname) +- ret = lxc_netdev_move_wlan(physname, netdev->link, pid, NULL); ++ ret = lxc_netdev_move_wlan(physname, netdev->link, pid, netdev->name); + else +- ret = lxc_netdev_move_by_index(netdev->ifindex, pid, NULL); ++ ret = lxc_netdev_move_by_index(netdev->ifindex, pid, netdev->name); + if (ret) + return log_error_errno(-1, -ret, "Failed to move network device \"%s\" with ifindex %d to network namespace %d", + netdev->created_name, +@@ -3219,9 +3229,6 @@ bool lxc_delete_network_priv(struct lxc_handler *handler) + } + + ret = netdev_deconf[netdev->type](handler, netdev); +- if (ret < 0) +- WARN("Failed to deconfigure interface with index %d and initial name \"%s\"", +- netdev->ifindex, netdev->link); + goto clear_ifindices; + } + +@@ -3441,10 +3448,18 @@ static int lxc_network_setup_in_child_namespaces_common(struct lxc_netdev *netde + + /* set the network device up */ + if (netdev->flags & IFF_UP) { ++ ++#ifdef HAVE_ISULAD ++ if (netdev->name[0] != '\0') { ++ err = lxc_netdev_up(netdev->name); ++ if (err) ++ return log_error_errno(-1, -err, "Failed to set network device \"%s\" up", netdev->name); ++ } ++#else + err = lxc_netdev_up(netdev->name); + if (err) + return log_error_errno(-1, -err, "Failed to set network device \"%s\" up", netdev->name); +- ++#endif + /* the network is up, make the loopback up too */ + err = lxc_netdev_up("lo"); + if (err) +diff --git a/src/lxc/network.h b/src/lxc/network.h +index ba35c1253..696380c90 100644 +--- a/src/lxc/network.h ++++ b/src/lxc/network.h +@@ -205,8 +205,8 @@ extern int lxc_netdev_set_mtu(const char *name, int mtu); + /* Create a virtual network devices. */ + extern int lxc_veth_create(const char *name1, const char *name2, pid_t pid, + unsigned int mtu); +-extern int lxc_macvlan_create(const char *parent, const char *name, int mode); +-extern int lxc_vlan_create(const char *parent, const char *name, ++extern int lxc_macvlan_create(const char *master, const char *name, int mode); ++extern int lxc_vlan_create(const char *master, const char *name, + unsigned short vid); + + /* Set ip address. */ +diff --git a/src/lxc/path.c b/src/lxc/path.c +new file mode 100644 +index 000000000..65b8aadbf +--- /dev/null ++++ b/src/lxc/path.c +@@ -0,0 +1,655 @@ ++/* SPDX-License-Identifier: LGPL-2.1+ */ ++/****************************************************************************** ++ * Copyright (c) Huawei Technologies Co., Ltd. 2020. Allrights reserved ++ * Description: isulad utils ++ * Author: lifeng ++ * Create: 2020-04-11 ++******************************************************************************/ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "path.h" ++#include "log.h" ++#include "isulad_utils.h" ++ ++lxc_log_define(lxc_path_ui, lxc); ++ ++#define ISSLASH(C) ((C) == '/') ++#define IS_ABSOLUTE_FILE_NAME(F) (ISSLASH ((F)[0])) ++#define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F)) ++ ++bool specify_current_dir(const char *path) ++{ ++ char *basec = NULL, *bname = NULL; ++ bool res = false; ++ ++ basec = safe_strdup(path); ++ ++ bname = basename(basec); ++ if (bname == NULL) { ++ free(basec); ++ ERROR("Out of memory"); ++ return false; ++ } ++ res = !strcmp(bname, "."); ++ free(basec); ++ return res; ++} ++ ++bool has_traling_path_separator(const char *path) ++{ ++ return path && strlen(path) && (path[strlen(path) - 1] == '/'); ++} ++ ++// PreserveTrailingDotOrSeparator returns the given cleaned path ++// and appends a trailing `/.` or `/` if its corresponding original ++// path ends with a trailing `/.` or `/`. If the cleaned ++// path already ends in a `.` path segment, then another is not added. If the ++// clean path already ends in a path separator, then another is not added. ++char *preserve_trailing_dot_or_separator(const char *cleanedpath, ++ const char *originalpath) ++{ ++ char *respath = NULL; ++ size_t len; ++ ++ if (strlen(cleanedpath) > (SIZE_MAX - 3)) { ++ return NULL; ++ } ++ ++ len = strlen(cleanedpath) + 3; ++ respath = malloc(len); ++ if (respath == NULL) { ++ ERROR("Out of memory"); ++ return NULL; ++ } ++ memset(respath, 0x00, len); ++ strcat(respath, cleanedpath); ++ ++ if (!specify_current_dir(cleanedpath) && specify_current_dir(originalpath)) { ++ if (!has_traling_path_separator(respath)) ++ strcat(respath, "/"); ++ strcat(respath, "."); ++ } ++ ++ if (!has_traling_path_separator(respath) && ++ has_traling_path_separator(originalpath)) ++ strcat(respath, "/"); ++ ++ return respath; ++} ++ ++ ++// Split splits path immediately following the final Separator, ++// separating it into a directory and file name component. ++// If there is no Separator in path, Split returns an empty dir ++// and file set to path. ++// The returned values have the property that path = dir+file. ++bool filepath_split(const char *path, char **dir, char **base) ++{ ++ ssize_t i; ++ size_t len; ++ ++ len = strlen(path); ++ if (len >= PATH_MAX) { ++ ERROR("Invalid path"); ++ return false; ++ } ++ i = len - 1; ++ while (i >= 0 && path[i] != '/') ++ i--; ++ ++ *dir = malloc(i + 2); ++ if (*dir == NULL) { ++ ERROR("Out of memory"); ++ return false; ++ } ++ memcpy(*dir, path, i + 1); ++ *(*dir + i + 1) = '\0'; ++ ++ *base = safe_strdup(path + i + 1); ++ ++ return true; ++} ++ ++ ++static bool do_clean_path_continue(const char *endpos, const char *stpos, const char *respath, char **dst) ++{ ++ if (endpos - stpos == 1 && stpos[0] == '.') { ++ return true; ++ } else if (endpos - stpos == 2 && stpos[0] == '.' && stpos[1] == '.') { ++ char *dest = *dst; ++ if (dest <= respath + 1) { ++ return true; ++ } ++ for (--dest; dest > respath && !ISSLASH(dest[-1]); --dest) { ++ *dst = dest; ++ return true; ++ } ++ *dst = dest; ++ return true; ++ } ++ return false; ++} ++ ++int do_clean_path(const char *respath, const char *limit_respath, ++ const char *stpos, char **dst) ++{ ++ char *dest = *dst; ++ const char *endpos = NULL; ++ ++ for (endpos = stpos; *stpos; stpos = endpos) { ++ while (ISSLASH(*stpos)) { ++ ++stpos; ++ } ++ ++ for (endpos = stpos; *endpos && !ISSLASH(*endpos); ++endpos) { ++ } ++ ++ if (endpos - stpos == 0) { ++ break; ++ } else if (do_clean_path_continue(endpos, stpos, respath, &dest)) { ++ continue; ++ } ++ ++ if (!ISSLASH(dest[-1])) { ++ *dest++ = '/'; ++ } ++ ++ if (dest + (endpos - stpos) >= limit_respath) { ++ ERROR("Path is too long"); ++ if (dest > respath + 1) { ++ dest--; ++ } ++ *dest = '\0'; ++ return -1; ++ } ++ ++ memcpy(dest, stpos, (size_t)(endpos - stpos)); ++ dest += endpos - stpos; ++ *dest = '\0'; ++ } ++ *dst = dest; ++ return 0; ++} ++ ++char *cleanpath(const char *path, char *realpath, size_t realpath_len) ++{ ++ char *respath = NULL; ++ char *dest = NULL; ++ const char *stpos = NULL; ++ const char *limit_respath = NULL; ++ ++ if (path == NULL || path[0] == '\0' || \ ++ realpath == NULL || (realpath_len < PATH_MAX)) { ++ return NULL; ++ } ++ ++ respath = realpath; ++ ++ memset(respath, 0, realpath_len); ++ limit_respath = respath + PATH_MAX; ++ ++ if (!IS_ABSOLUTE_FILE_NAME(path)) { ++ if (!getcwd(respath, PATH_MAX)) { ++ ERROR("Failed to getcwd"); ++ respath[0] = '\0'; ++ goto error; ++ } ++ dest = strchr(respath, '\0'); ++ if (dest == NULL) { ++ ERROR("Failed to get the end of respath"); ++ goto error; ++ } ++ if (strlen(path) > (PATH_MAX - strlen(respath) - 1)) { ++ ERROR("Path is too long"); ++ goto error; ++ } ++ strcat(respath, path); ++ stpos = path; ++ } else { ++ dest = respath; ++ *dest++ = '/'; ++ stpos = path; ++ } ++ ++ if (do_clean_path(respath, limit_respath, stpos, &dest)) { ++ goto error; ++ } ++ ++ if (dest > respath + 1 && ISSLASH(dest[-1])) { ++ --dest; ++ } ++ *dest = '\0'; ++ ++ return respath; ++ ++error: ++ return NULL; ++} ++ ++static int do_path_realloc(const char *start, const char *end, ++ char **rpath, char **dest, const char **rpath_limit) ++{ ++ long long dest_offset = *dest - *rpath; ++ char *new_rpath = NULL; ++ size_t new_size; ++ int nret = 0; ++ size_t gap = 0; ++ ++ if (*dest + (end - start) < *rpath_limit) { ++ return 0; ++ } ++ ++ gap = (size_t)(end - start) + 1; ++ new_size = (size_t)(*rpath_limit - *rpath); ++ if (new_size > SIZE_MAX - gap) { ++ ERROR("Out of range!"); ++ return -1; ++ } ++ ++ if (gap > PATH_MAX) { ++ new_size += gap; ++ } else { ++ new_size += PATH_MAX; ++ } ++ nret = lxc_mem_realloc((void **)&new_rpath, new_size, *rpath, PATH_MAX); ++ if (nret) { ++ ERROR("Failed to realloc memory for files limit variables"); ++ return -1; ++ } ++ *rpath = new_rpath; ++ *rpath_limit = *rpath + new_size; ++ ++ *dest = *rpath + dest_offset; ++ ++ return 0; ++} ++ ++static int do_get_symlinks_copy_buf(const char *buf, const char *prefix, size_t prefix_len, ++ char **rpath, char **dest) ++{ ++ if (IS_ABSOLUTE_FILE_NAME(buf)) { ++ if (prefix_len) { ++ memcpy(*rpath, prefix, prefix_len); ++ } ++ *dest = *rpath + prefix_len; ++ *(*dest)++ = '/'; ++ } else { ++ if (*dest > *rpath + prefix_len + 1) { ++ for (--(*dest); *dest > *rpath && !ISSLASH((*dest)[-1]); --(*dest)) { ++ continue; ++ } ++ } ++ } ++ return 0; ++} ++ ++static int do_get_symlinks(const char **fullpath, const char *prefix, size_t prefix_len, ++ char **rpath, char **dest, const char **end, ++ int *num_links, char **extra_buf) ++{ ++ char *buf = NULL; ++ size_t len; ++ ssize_t n; ++ int ret = -1; ++ ++ if (++(*num_links) > MAXSYMLINKS) { ++ ERROR("Too many links in '%s'", *fullpath); ++ goto out; ++ } ++ ++ buf = lxc_common_calloc_s(PATH_MAX); ++ if (buf == NULL) { ++ ERROR("Out of memory"); ++ goto out; ++ } ++ ++ n = readlink(*rpath, buf, PATH_MAX - 1); ++ if (n < 0) { ++ goto out; ++ } ++ buf[n] = '\0'; ++ ++ if (*extra_buf == NULL) { ++ *extra_buf = lxc_common_calloc_s(PATH_MAX); ++ if (*extra_buf == NULL) { ++ ERROR("Out of memory"); ++ goto out; ++ } ++ } ++ ++ len = strlen(*end); ++ if (len >= PATH_MAX - n) { ++ ERROR("Path is too long"); ++ goto out; ++ } ++ ++ memmove(&(*extra_buf)[n], *end, len + 1); ++ memcpy(*extra_buf, buf, (size_t)n); ++ ++ *fullpath = *end = *extra_buf; ++ ++ if (do_get_symlinks_copy_buf(buf, prefix, prefix_len, rpath, dest) != 0) { ++ goto out; ++ } ++ ++ ret = 0; ++out: ++ free(buf); ++ return ret; ++} ++ ++static bool do_eval_symlinks_in_scope_is_symlink(const char *path) ++{ ++ struct stat st; ++ ++ if (lstat(path, &st) < 0) { ++ return true; ++ } ++ ++ if (!S_ISLNK(st.st_mode)) { ++ return true; ++ } ++ return false; ++} ++ ++static void do_eval_symlinks_skip_slash(const char **start, const char **end) ++{ ++ while (ISSLASH(**start)) { ++ ++(*start); ++ } ++ ++ for (*end = *start; **end && !ISSLASH(**end); ++(*end)) { ++ } ++} ++ ++static inline void skip_dest_traling_slash(char **dest, char **rpath, size_t prefix_len) ++{ ++ if (*dest > *rpath + prefix_len + 1) { ++ for (--(*dest); *dest > *rpath && !ISSLASH((*dest)[-1]); --(*dest)) { ++ continue; ++ } ++ } ++} ++ ++static inline bool is_current_char(const char c) ++{ ++ return c == '.'; ++} ++ ++static inline bool is_specify_current(const char *end, const char *start) ++{ ++ return (end - start == 1) && is_current_char(start[0]); ++} ++ ++static inline bool is_specify_parent(const char *end, const char *start) ++{ ++ return (end - start == 2) && is_current_char(start[0]) && is_current_char(start[1]); ++} ++ ++static int do_eval_symlinks_in_scope(const char *fullpath, const char *prefix, ++ size_t prefix_len, ++ char **rpath, char **dest, const char *rpath_limit) ++{ ++ const char *start = NULL; ++ const char *end = NULL; ++ char *extra_buf = NULL; ++ int nret = 0; ++ int num_links = 0; ++ ++ start = fullpath + prefix_len; ++ for (end = start; *start; start = end) { ++ do_eval_symlinks_skip_slash(&start, &end); ++ if (end - start == 0) { ++ break; ++ } else if (is_specify_current(end, start)) { ++ ; ++ } else if (is_specify_parent(end, start)) { ++ skip_dest_traling_slash(dest, rpath, prefix_len); ++ } else { ++ if (!ISSLASH((*dest)[-1])) { ++ *(*dest)++ = '/'; ++ } ++ ++ nret = do_path_realloc(start, end, rpath, dest, &rpath_limit); ++ if (nret != 0) { ++ nret = -1; ++ goto out; ++ } ++ ++ memcpy(*dest, start, (size_t)(end - start)); ++ *dest += end - start; ++ **dest = '\0'; ++ ++ if (do_eval_symlinks_in_scope_is_symlink(*rpath)) { ++ continue; ++ } ++ ++ nret = do_get_symlinks(&fullpath, prefix, prefix_len, rpath, dest, &end, &num_links, &extra_buf); ++ if (nret != 0) { ++ nret = -1; ++ goto out; ++ } ++ } ++ } ++out: ++ free(extra_buf); ++ return nret; ++} ++static char *eval_symlinks_in_scope(const char *fullpath, const char *rootpath) ++{ ++ char resroot[PATH_MAX] = {0}; ++ char *root = NULL; ++ char *rpath = NULL; ++ char *dest = NULL; ++ char *prefix = NULL; ++ const char *rpath_limit = NULL; ++ size_t prefix_len; ++ ++ if (fullpath == NULL || rootpath == NULL) { ++ return NULL; ++ } ++ ++ root = cleanpath(rootpath, resroot, sizeof(resroot)); ++ if (root == NULL) { ++ ERROR("Failed to get cleaned path"); ++ return NULL; ++ } ++ ++ if (!strcmp(fullpath, root)) { ++ return safe_strdup(fullpath); ++ } ++ ++ if (strstr(fullpath, root) == NULL) { ++ ERROR("Path '%s' is not in '%s'", fullpath, root); ++ return NULL; ++ } ++ ++ rpath = lxc_common_calloc_s(PATH_MAX); ++ if (rpath == NULL) { ++ ERROR("Out of memory"); ++ goto out; ++ } ++ rpath_limit = rpath + PATH_MAX; ++ ++ prefix = root; ++ prefix_len = (size_t)strlen(prefix); ++ if (!strcmp(prefix, "/")) { ++ prefix_len = 0; ++ } ++ ++ dest = rpath; ++ if (prefix_len) { ++ memcpy(rpath, prefix, prefix_len); ++ dest += prefix_len; ++ } ++ *dest++ = '/'; ++ ++ if (do_eval_symlinks_in_scope(fullpath, prefix, prefix_len, &rpath, &dest, ++ rpath_limit)) { ++ goto out; ++ } ++ ++ if (dest > rpath + prefix_len + 1 && ISSLASH(dest[-1])) { ++ --dest; ++ } ++ *dest = '\0'; ++ return rpath; ++ ++out: ++ free(rpath); ++ return NULL; ++} ++ ++// FollowSymlinkInScope is a wrapper around evalSymlinksInScope that returns an ++// absolute path. This function handles paths in a platform-agnostic manner. ++char *follow_symlink_in_scope(const char *fullpath, const char *rootpath) ++{ ++ char resfull[PATH_MAX] = {0}, *full = NULL; ++ char resroot[PATH_MAX] = {0}, *root = NULL; ++ ++ full = cleanpath(fullpath, resfull, PATH_MAX); ++ if (!full) { ++ ERROR("Failed to get cleaned path"); ++ return NULL; ++ } ++ ++ root = cleanpath(rootpath, resroot, PATH_MAX); ++ if (!root) { ++ ERROR("Failed to get cleaned path"); ++ return NULL; ++ } ++ ++ return eval_symlinks_in_scope(full, root); ++} ++ ++// GetResourcePath evaluates `path` in the scope of the container's rootpath, with proper path ++// sanitisation. Symlinks are all scoped to the rootpath of the container, as ++// though the container's rootpath was `/`. ++// ++// The BaseFS of a container is the host-facing path which is bind-mounted as ++// `/` inside the container. This method is essentially used to access a ++// particular path inside the container as though you were a process in that ++// container. ++int get_resource_path(const char *rootpath, const char *path, ++ char **scopepath) ++{ ++ char resolved[PATH_MAX] = {0}, *cleanedpath = NULL; ++ char *fullpath = NULL; ++ size_t len; ++ ++ if (!rootpath || !path || !scopepath) ++ return -1; ++ ++ *scopepath = NULL; ++ ++ cleanedpath = cleanpath(path, resolved, PATH_MAX); ++ if (!cleanedpath) { ++ ERROR("Failed to get cleaned path"); ++ return -1; ++ } ++ ++ len = strlen(rootpath) + strlen(cleanedpath) + 1; ++ fullpath = malloc(len); ++ if (!fullpath) { ++ ERROR("Out of memory"); ++ return -1; ++ } ++ snprintf(fullpath, len, "%s%s", rootpath, cleanedpath); ++ ++ *scopepath = follow_symlink_in_scope(fullpath, rootpath); ++ ++ free(fullpath); ++ return 0; ++} ++ ++// Rel returns a relative path that is lexically equivalent to targpath when ++// joined to basepath with an intervening separator. That is, ++// Join(basepath, Rel(basepath, targpath)) is equivalent to targpath itself. ++// On success, the returned path will always be relative to basepath, ++// even if basepath and targpath share no elements. ++// An error is returned if targpath can't be made relative to basepath or if ++// knowing the current working directory would be necessary to compute it. ++// Rel calls Clean on the result. ++char *path_relative(const char *basepath, const char *targpath) ++{ ++ char resbase[PATH_MAX] = {0}, *base = NULL; ++ char restarg[PATH_MAX] = {0}, *targ = NULL; ++ size_t bl = 0, tl = 0, b0 = 0, bi = 0, t0 = 0, ti = 0; ++ ++ base = cleanpath(basepath, resbase, PATH_MAX); ++ if (!base) { ++ ERROR("Failed to get cleaned path"); ++ return NULL; ++ } ++ ++ targ = cleanpath(targpath, restarg, PATH_MAX); ++ if (!targ) { ++ ERROR("Failed to get cleaned path"); ++ return NULL; ++ } ++ ++ if (strcmp(base, targ) == 0) ++ return safe_strdup("."); ++ ++ bl = strlen(base); ++ tl = strlen(targ); ++ while(true) { ++ while(bi < bl && !ISSLASH(base[bi])) ++ bi++; ++ while(ti < tl && !ISSLASH(targ[ti])) ++ ti++; ++ //not the same string ++ if (((bi - b0) != (ti - t0)) || strncmp(base + b0, targ + t0, bi - b0)) ++ break; ++ if (bi < bl) ++ bi++; ++ if (ti < tl) ++ ti++; ++ b0 = bi; ++ t0 = ti; ++ } ++ ++ if (b0 != bl) { ++ // Base elements left. Must go up before going down. ++ int seps = 0, i; ++ size_t ncopyed = 0, seps_size; ++ char *buf = NULL; ++ ++ for (bi = b0; bi < bl; bi++) { ++ if (ISSLASH(base[bi])) ++ seps++; ++ } ++ //strlen(..) + strlen(/..) + '\0' ++ seps_size = 2 + seps * 3 + 1; ++ if (t0 != tl) ++ seps_size += 1 + tl - t0; ++ ++ buf = calloc(seps_size, 1); ++ if (!buf) { ++ ERROR("Out of memory"); ++ return NULL; ++ } ++ buf[ncopyed++] = '.'; ++ buf[ncopyed++] = '.'; ++ for (i = 0; i < seps; i++) { ++ buf[ncopyed++] = '/'; ++ buf[ncopyed++] = '.'; ++ buf[ncopyed++] = '.'; ++ } ++ if (t0 != tl) { ++ buf[ncopyed++] = '/'; ++ memcpy(buf + ncopyed, targ + t0, tl - t0 + 1); ++ } ++ return buf; ++ } ++ ++ return safe_strdup(targ + t0); ++} +diff --git a/src/lxc/path.h b/src/lxc/path.h +new file mode 100644 +index 000000000..2c60fb9be +--- /dev/null ++++ b/src/lxc/path.h +@@ -0,0 +1,65 @@ ++/* SPDX-License-Identifier: LGPL-2.1+ */ ++/****************************************************************************** ++ * Copyright (c) Huawei Technologies Co., Ltd. 2020. Allrights reserved ++ * Description: isulad utils ++ * Author: lifeng ++ * Create: 2020-04-11 ++******************************************************************************/ ++#ifndef __ISULAD_PATH_H_ ++#define __ISULAD_PATH_H_ ++ ++#include ++ ++bool specify_current_dir(const char *path); ++ ++bool has_traling_path_separator(const char *path); ++ ++// PreserveTrailingDotOrSeparator returns the given cleaned path ++// and appends a trailing `/.` or `/` if its corresponding original ++// path ends with a trailing `/.` or `/`. If the cleaned ++// path already ends in a `.` path segment, then another is not added. If the ++// clean path already ends in a path separator, then another is not added. ++char *preserve_trailing_dot_or_separator(const char *cleanedpath, ++ const char *originalpath); ++ ++ ++// Split splits path immediately following the final Separator, ++// separating it into a directory and file name component. ++// If there is no Separator in path, Split returns an empty dir ++// and file set to path. ++// The returned values have the property that path = dir+file. ++bool filepath_split(const char *path, char **dir, char **base); ++ ++/* ++ * cleanpath is similar to realpath of glibc, but not expands symbolic links, ++ * and not check the existence of components of the path. ++ */ ++char *cleanpath(const char *path, char *realpath, size_t realpath_len); ++ ++ ++// FollowSymlinkInScope is a wrapper around evalSymlinksInScope that returns an ++// absolute path. This function handles paths in a platform-agnostic manner. ++char *follow_symlink_in_scope(const char *fullpath, const char *rootpath); ++ ++// GetResourcePath evaluates `path` in the scope of the container's rootpath, with proper path ++// sanitisation. Symlinks are all scoped to the rootpath of the container, as ++// though the container's rootpath was `/`. ++// ++// The BaseFS of a container is the host-facing path which is bind-mounted as ++// `/` inside the container. This method is essentially used to access a ++// particular path inside the container as though you were a process in that ++// container. ++int get_resource_path(const char *rootpath, const char *path, ++ char **scopepath); ++ ++// Rel returns a relative path that is lexically equivalent to targpath when ++// joined to basepath with an intervening separator. That is, ++// Join(basepath, Rel(basepath, targpath)) is equivalent to targpath itself. ++// On success, the returned path will always be relative to basepath, ++// even if basepath and targpath share no elements. ++// An error is returned if targpath can't be made relative to basepath or if ++// knowing the current working directory would be necessary to compute it. ++// Rel calls Clean on the result. ++char *path_relative(const char *basepath, const char *targpath); ++ ++#endif +diff --git a/src/lxc/process_utils.h b/src/lxc/process_utils.h +deleted file mode 100644 +index 4ea898a63..000000000 +--- a/src/lxc/process_utils.h ++++ /dev/null +@@ -1,290 +0,0 @@ +-/* SPDX-License-Identifier: LGPL-2.1+ */ +- +-#ifndef __LXC_PROCESS_UTILS_H +-#define __LXC_PROCESS_UTILS_H +- +-#ifndef _GNU_SOURCE +-#define _GNU_SOURCE 1 +-#endif +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "compiler.h" +-#include "config.h" +-#include "syscall_numbers.h" +- +-#ifndef CSIGNAL +-#define CSIGNAL 0x000000ff /* signal mask to be sent at exit */ +-#endif +- +-#ifndef CLONE_VM +-#define CLONE_VM 0x00000100 /* set if VM shared between processes */ +-#endif +- +-#ifndef CLONE_FS +-#define CLONE_FS 0x00000200 /* set if fs info shared between processes */ +-#endif +- +-#ifndef CLONE_FILES +-#define CLONE_FILES 0x00000400 /* set if open files shared between processes */ +-#endif +- +-#ifndef CLONE_SIGHAND +-#define CLONE_SIGHAND 0x00000800 /* set if signal handlers and blocked signals shared */ +-#endif +- +-#ifndef CLONE_PIDFD +-#define CLONE_PIDFD 0x00001000 /* set if a pidfd should be placed in parent */ +-#endif +- +-#ifndef CLONE_PTRACE +-#define CLONE_PTRACE 0x00002000 /* set if we want to let tracing continue on the child too */ +-#endif +- +-#ifndef CLONE_VFORK +-#define CLONE_VFORK 0x00004000 /* set if the parent wants the child to wake it up on mm_release */ +-#endif +- +-#ifndef CLONE_PARENT +-#define CLONE_PARENT 0x00008000 /* set if we want to have the same parent as the cloner */ +-#endif +- +-#ifndef CLONE_THREAD +-#define CLONE_THREAD 0x00010000 /* Same thread group? */ +-#endif +- +-#ifndef CLONE_NEWNS +-#define CLONE_NEWNS 0x00020000 /* New mount namespace group */ +-#endif +- +-#ifndef CLONE_SYSVSEM +-#define CLONE_SYSVSEM 0x00040000 /* share system V SEM_UNDO semantics */ +-#endif +- +-#ifndef CLONE_SETTLS +-#define CLONE_SETTLS 0x00080000 /* create a new TLS for the child */ +-#endif +- +-#ifndef CLONE_PARENT_SETTID +-#define CLONE_PARENT_SETTID 0x00100000 /* set the TID in the parent */ +-#endif +- +-#ifndef CLONE_CHILD_CLEARTID +-#define CLONE_CHILD_CLEARTID 0x00200000 /* clear the TID in the child */ +-#endif +- +-#ifndef CLONE_DETACHED +-#define CLONE_DETACHED 0x00400000 /* Unused, ignored */ +-#endif +- +-#ifndef CLONE_UNTRACED +-#define CLONE_UNTRACED 0x00800000 /* set if the tracing process can't force CLONE_PTRACE on this clone */ +-#endif +- +-#ifndef CLONE_CHILD_SETTID +-#define CLONE_CHILD_SETTID 0x01000000 /* set the TID in the child */ +-#endif +- +-#ifndef CLONE_NEWCGROUP +-#define CLONE_NEWCGROUP 0x02000000 /* New cgroup namespace */ +-#endif +- +-#ifndef CLONE_NEWUTS +-#define CLONE_NEWUTS 0x04000000 /* New utsname namespace */ +-#endif +- +-#ifndef CLONE_NEWIPC +-#define CLONE_NEWIPC 0x08000000 /* New ipc namespace */ +-#endif +- +-#ifndef CLONE_NEWUSER +-#define CLONE_NEWUSER 0x10000000 /* New user namespace */ +-#endif +- +-#ifndef CLONE_NEWPID +-#define CLONE_NEWPID 0x20000000 /* New pid namespace */ +-#endif +- +-#ifndef CLONE_NEWNET +-#define CLONE_NEWNET 0x40000000 /* New network namespace */ +-#endif +- +-#ifndef CLONE_IO +-#define CLONE_IO 0x80000000 /* Clone io context */ +-#endif +- +-/* Flags for the clone3() syscall. */ +-#ifndef CLONE_CLEAR_SIGHAND +-#define CLONE_CLEAR_SIGHAND 0x100000000ULL /* Clear any signal handler and reset to SIG_DFL. */ +-#endif +- +-#ifndef CLONE_INTO_CGROUP +-#define CLONE_INTO_CGROUP 0x200000000ULL /* Clone into a specific cgroup given the right permissions. */ +-#endif +- +-/* +- * cloning flags intersect with CSIGNAL so can be used with unshare and clone3 +- * syscalls only: +- */ +-#ifndef CLONE_NEWTIME +-#define CLONE_NEWTIME 0x00000080 /* New time namespace */ +-#endif +- +-/* waitid */ +-#ifndef P_PIDFD +-#define P_PIDFD 3 +-#endif +- +-#ifndef CLONE_ARGS_SIZE_VER0 +-#define CLONE_ARGS_SIZE_VER0 64 /* sizeof first published struct */ +-#endif +- +-#ifndef CLONE_ARGS_SIZE_VER1 +-#define CLONE_ARGS_SIZE_VER1 80 /* sizeof second published struct */ +-#endif +- +-#ifndef CLONE_ARGS_SIZE_VER2 +-#define CLONE_ARGS_SIZE_VER2 88 /* sizeof third published struct */ +-#endif +- +-#ifndef ptr_to_u64 +-#define ptr_to_u64(ptr) ((__u64)((uintptr_t)(ptr))) +-#endif +-#ifndef u64_to_ptr +-#define u64_to_ptr(x) ((void *)(uintptr_t)x) +-#endif +- +-struct lxc_clone_args { +- __aligned_u64 flags; +- __aligned_u64 pidfd; +- __aligned_u64 child_tid; +- __aligned_u64 parent_tid; +- __aligned_u64 exit_signal; +- __aligned_u64 stack; +- __aligned_u64 stack_size; +- __aligned_u64 tls; +- __aligned_u64 set_tid; +- __aligned_u64 set_tid_size; +- __aligned_u64 cgroup; +-}; +- +-__returns_twice static inline pid_t lxc_clone3(struct lxc_clone_args *args, size_t size) +-{ +- return syscall(__NR_clone3, args, size); +-} +- +-#if defined(__ia64__) +-int __clone2(int (*__fn)(void *__arg), void *__child_stack_base, +- size_t __child_stack_size, int __flags, void *__arg, ...); +-#else +-int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ... +- /* pid_t *ptid, struct user_desc *tls, pid_t *ctid */); +-#endif +- +-/** +- * lxc_clone() - create a new process +- * +- * - allocate stack: +- * This function allocates a new stack the size of page and passes it to the +- * kernel. +- * +- * - support all CLONE_*flags: +- * This function supports all CLONE_* flags. If in doubt or not sufficiently +- * familiar with process creation in the kernel and interactions with libcs +- * this function should be used. +- * +- * - pthread_atfork() handlers depending on libc: +- * Whether this function runs pthread_atfork() handlers depends on the +- * corresponding libc wrapper. glibc currently does not run pthread_atfork() +- * handlers but does not guarantee that they are not. Other libcs might or +- * might not run pthread_atfork() handlers. If you require guarantees please +- * refer to the lxc_raw_clone*() functions in process_utils.{c,h}. +- * +- * - should call lxc_raw_getpid(): +- * The child should use lxc_raw_getpid() to retrieve its pid. +- */ +-extern pid_t lxc_clone(int (*fn)(void *), void *arg, int flags, int *pidfd); +- +- +-/* +- * lxc_raw_clone() - create a new process +- * +- * - fork() behavior: +- * This function returns 0 in the child and > 0 in the parent. +- * +- * - copy-on-write: +- * This function does not allocate a new stack and relies on copy-on-write +- * semantics. +- * +- * - supports subset of ClONE_* flags: +- * lxc_raw_clone() intentionally only supports a subset of the flags available +- * to the actual system call. Please refer to the implementation what flags +- * cannot be used. Also, please don't assume that just because a flag isn't +- * explicitly checked for as being unsupported that it is supported. If in +- * doubt or not sufficiently familiar with process creation in the kernel and +- * interactions with libcs this function should be used. +- * +- * - no pthread_atfork() handlers: +- * This function circumvents - as much as this this is possible - any libc +- * wrappers and thus does not run any pthread_atfork() handlers. Make sure +- * that this is safe to do in the context you are trying to call this +- * function. +- * +- * - must call lxc_raw_getpid(): +- * The child must use lxc_raw_getpid() to retrieve its pid. +- */ +-extern pid_t lxc_raw_clone(unsigned long flags, int *pidfd); +- +-/* +- * lxc_raw_clone_cb() - create a new process +- * +- * - non-fork() behavior: +- * Function does return pid of the child or -1 on error. Pass in a callback +- * function via the "fn" argument that gets executed in the child process. +- * The "args" argument is passed to "fn". +- * +- * All other comments that apply to lxc_raw_clone() apply to lxc_raw_clone_cb() +- * as well. +- */ +-extern pid_t lxc_raw_clone_cb(int (*fn)(void *), void *args, +- unsigned long flags, int *pidfd); +- +-#ifndef HAVE_EXECVEAT +-static inline int execveat(int dirfd, const char *pathname, char *const argv[], +- char *const envp[], int flags) +-{ +- return syscall(__NR_execveat, dirfd, pathname, argv, envp, flags); +-} +-#else +-extern int execveat(int dirfd, const char *pathname, char *const argv[], +- char *const envp[], int flags); +-#endif +- +-/* +- * Because of older glibc's pid cache (up to 2.25) whenever clone() is called +- * the child must must retrieve it's own pid via lxc_raw_getpid(). +- */ +-static inline pid_t lxc_raw_getpid(void) +-{ +- return (pid_t)syscall(SYS_getpid); +-} +- +-static inline pid_t lxc_raw_gettid(void) +-{ +-#if __NR_gettid > 0 +- return syscall(__NR_gettid); +-#else +- return lxc_raw_getpid(); +-#endif +-} +- +-extern int lxc_raw_pidfd_send_signal(int pidfd, int sig, siginfo_t *info, +- unsigned int flags); +- +-#endif /* __LXC_PROCESS_UTILS_H */ +diff --git a/src/lxc/process_utils.c b/src/lxc/raw_syscalls.c +similarity index 68% +rename from src/lxc/process_utils.c +rename to src/lxc/raw_syscalls.c +index 7494def46..3c6bd2506 100644 +--- a/src/lxc/process_utils.c ++++ b/src/lxc/raw_syscalls.c +@@ -13,12 +13,15 @@ + + #include "compiler.h" + #include "config.h" +-#include "log.h" + #include "macro.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "syscall_numbers.h" + +-lxc_log_define(process_utils, lxc); ++int lxc_raw_execveat(int dirfd, const char *pathname, char *const argv[], ++ char *const envp[], int flags) ++{ ++ return syscall(__NR_execveat, dirfd, pathname, argv, envp, flags); ++} + + /* + * This is based on raw_clone in systemd but adapted to our needs. This uses +@@ -28,8 +31,16 @@ lxc_log_define(process_utils, lxc); + * The nice thing about this is that we get fork() behavior. That is + * lxc_raw_clone() returns 0 in the child and the child pid in the parent. + */ +-__returns_twice static pid_t __lxc_raw_clone(unsigned long flags, int *pidfd) ++__returns_twice pid_t lxc_raw_clone(unsigned long flags, int *pidfd) + { ++ /* ++ * These flags don't interest at all so we don't jump through any hoops ++ * of retrieving them and passing them to the kernel. ++ */ ++ errno = EINVAL; ++ if ((flags & (CLONE_VM | CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | ++ CLONE_CHILD_CLEARTID | CLONE_SETTLS))) ++ return -EINVAL; + + #if defined(__s390x__) || defined(__s390__) || defined(__CRIS__) + /* On s390/s390x and cris the order of the first and second arguments +@@ -89,31 +100,6 @@ __returns_twice static pid_t __lxc_raw_clone(unsigned long flags, int *pidfd) + #endif + } + +-__returns_twice pid_t lxc_raw_clone(unsigned long flags, int *pidfd) +-{ +- pid_t pid; +- struct lxc_clone_args args = { +- .flags = flags, +- .pidfd = ptr_to_u64(pidfd), +- }; +- +- if (flags & (CLONE_VM | CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | +- CLONE_CHILD_CLEARTID | CLONE_SETTLS)) +- return ret_errno(EINVAL); +- +- /* On CLONE_PARENT we inherit the parent's exit signal. */ +- if (!(flags & CLONE_PARENT)) +- args.exit_signal = SIGCHLD; +- +- pid = lxc_clone3(&args, CLONE_ARGS_SIZE_VER0); +- if (pid < 0 && errno == ENOSYS) { +- SYSTRACE("Falling back to legacy clone"); +- return __lxc_raw_clone(flags, pidfd); +- } +- +- return pid; +-} +- + pid_t lxc_raw_clone_cb(int (*fn)(void *), void *args, unsigned long flags, + int *pidfd) + { +@@ -138,30 +124,3 @@ int lxc_raw_pidfd_send_signal(int pidfd, int sig, siginfo_t *info, + { + return syscall(__NR_pidfd_send_signal, pidfd, sig, info, flags); + } +- +-/* +- * Let's use the "standard stack limit" (i.e. glibc thread size default) for +- * stack sizes: 8MB. +- */ +-#define __LXC_STACK_SIZE (8 * 1024 * 1024) +-pid_t lxc_clone(int (*fn)(void *), void *arg, int flags, int *pidfd) +-{ +- pid_t ret; +- void *stack; +- +- stack = malloc(__LXC_STACK_SIZE); +- if (!stack) { +- SYSERROR("Failed to allocate clone stack"); +- return -ENOMEM; +- } +- +-#ifdef __ia64__ +- ret = __clone2(fn, stack, __LXC_STACK_SIZE, flags | SIGCHLD, arg, pidfd); +-#else +- ret = clone(fn, stack + __LXC_STACK_SIZE, flags | SIGCHLD, arg, pidfd); +-#endif +- if (ret < 0) +- SYSERROR("Failed to clone (%#x)", flags); +- +- return ret; +-} +diff --git a/src/lxc/raw_syscalls.h b/src/lxc/raw_syscalls.h +new file mode 100644 +index 000000000..1219f28f4 +--- /dev/null ++++ b/src/lxc/raw_syscalls.h +@@ -0,0 +1,94 @@ ++/* SPDX-License-Identifier: LGPL-2.1+ */ ++ ++#ifndef __LXC_RAW_SYSCALL_H ++#define __LXC_RAW_SYSCALL_H ++ ++#ifndef _GNU_SOURCE ++#define _GNU_SOURCE 1 ++#endif ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* clone */ ++#ifndef CLONE_PIDFD ++#define CLONE_PIDFD 0x00001000 ++#endif ++ ++/* waitid */ ++#ifndef P_PIDFD ++#define P_PIDFD 3 ++#endif ++ ++/* ++ * lxc_raw_clone() - create a new process ++ * ++ * - fork() behavior: ++ * This function returns 0 in the child and > 0 in the parent. ++ * ++ * - copy-on-write: ++ * This function does not allocate a new stack and relies on copy-on-write ++ * semantics. ++ * ++ * - supports subset of ClONE_* flags: ++ * lxc_raw_clone() intentionally only supports a subset of the flags available ++ * to the actual system call. Please refer to the implementation what flags ++ * cannot be used. Also, please don't assume that just because a flag isn't ++ * explicitly checked for as being unsupported that it is supported. If in ++ * doubt or not sufficiently familiar with process creation in the kernel and ++ * interactions with libcs this function should be used. ++ * ++ * - no pthread_atfork() handlers: ++ * This function circumvents - as much as this this is possible - any libc ++ * wrappers and thus does not run any pthread_atfork() handlers. Make sure ++ * that this is safe to do in the context you are trying to call this ++ * function. ++ * ++ * - must call lxc_raw_getpid(): ++ * The child must use lxc_raw_getpid() to retrieve its pid. ++ */ ++extern pid_t lxc_raw_clone(unsigned long flags, int *pidfd); ++ ++/* ++ * lxc_raw_clone_cb() - create a new process ++ * ++ * - non-fork() behavior: ++ * Function does return pid of the child or -1 on error. Pass in a callback ++ * function via the "fn" argument that gets executed in the child process. ++ * The "args" argument is passed to "fn". ++ * ++ * All other comments that apply to lxc_raw_clone() apply to lxc_raw_clone_cb() ++ * as well. ++ */ ++extern pid_t lxc_raw_clone_cb(int (*fn)(void *), void *args, ++ unsigned long flags, int *pidfd); ++ ++extern int lxc_raw_execveat(int dirfd, const char *pathname, char *const argv[], ++ char *const envp[], int flags); ++ ++/* ++ * Because of older glibc's pid cache (up to 2.25) whenever clone() is called ++ * the child must must retrieve it's own pid via lxc_raw_getpid(). ++ */ ++static inline pid_t lxc_raw_getpid(void) ++{ ++ return (pid_t)syscall(SYS_getpid); ++} ++ ++static inline pid_t lxc_raw_gettid(void) ++{ ++#if __NR_gettid > 0 ++ return syscall(__NR_gettid); ++#else ++ return lxc_raw_getpid(); ++#endif ++} ++ ++extern int lxc_raw_pidfd_send_signal(int pidfd, int sig, siginfo_t *info, ++ unsigned int flags); ++ ++#endif /* __LXC_RAW_SYSCALL_H */ +diff --git a/src/lxc/rexec.c b/src/lxc/rexec.c +index cf198c021..c9c84b8c1 100644 +--- a/src/lxc/rexec.c ++++ b/src/lxc/rexec.c +@@ -13,7 +13,7 @@ + #include "file_utils.h" + #include "macro.h" + #include "memory_utils.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "string_utils.h" + #include "syscall_wrappers.h" + +@@ -88,7 +88,7 @@ static int is_memfd(void) + static void lxc_rexec_as_memfd(char **argv, char **envp, const char *memfd_name) + { + __do_close int execfd = -EBADF, fd = -EBADF, memfd = -EBADF, +- tmpfd = -EBADF; ++ tmpfd = -EBADF; + int ret; + ssize_t bytes_sent = 0; + struct stat st = {0}; +@@ -143,7 +143,7 @@ static void lxc_rexec_as_memfd(char **argv, char **envp, const char *memfd_name) + if (fcntl(memfd, F_ADD_SEALS, LXC_MEMFD_REXEC_SEALS)) + return; + +- execfd = move_fd(memfd); ++ execfd = memfd; + } else { + char procfd[LXC_PROC_PID_FD_LEN]; + +@@ -169,12 +169,13 @@ extern char **environ; + + int lxc_rexec(const char *memfd_name) + { +- __do_free_string_list char **argv = NULL; + int ret; ++ char **argv = NULL; + + ret = is_memfd(); + if (ret < 0 && ret == -ENOTRECOVERABLE) { +- fprintf(stderr, "%s - Failed to determine whether this is a memfd\n", ++ fprintf(stderr, ++ "%s - Failed to determine whether this is a memfd\n", + strerror(errno)); + return -1; + } else if (ret > 0) { +@@ -183,7 +184,8 @@ int lxc_rexec(const char *memfd_name) + + ret = parse_argv(&argv); + if (ret < 0) { +- fprintf(stderr, "%s - Failed to parse command line parameters\n", ++ fprintf(stderr, ++ "%s - Failed to parse command line parameters\n", + strerror(errno)); + return -1; + } +diff --git a/src/lxc/seccomp.c b/src/lxc/seccomp.c +index 7820db8b2..4b9d23c55 100644 +--- a/src/lxc/seccomp.c ++++ b/src/lxc/seccomp.c +@@ -295,7 +295,11 @@ on_error: + #endif + + #if HAVE_DECL_SECCOMP_SYSCALL_RESOLVE_NAME_ARCH ++#ifdef HAVE_ISULAD ++enum lxc_arch_t { ++#else + enum lxc_hostarch_t { ++#endif + lxc_seccomp_arch_all = 0, + lxc_seccomp_arch_native, + lxc_seccomp_arch_i386, +@@ -351,8 +355,13 @@ int get_hostarch(void) + return lxc_seccomp_arch_unknown; + } + ++#ifdef HAVE_ISULAD ++scmp_filter_ctx get_new_ctx(enum lxc_arch_t n_arch, ++ uint32_t default_policy_action, uint32_t *architectures) ++#else + scmp_filter_ctx get_new_ctx(enum lxc_hostarch_t n_arch, + uint32_t default_policy_action, bool *needs_merge) ++#endif + { + int ret; + uint32_t arch; +@@ -475,10 +484,17 @@ scmp_filter_ctx get_new_ctx(enum lxc_hostarch_t n_arch, + return NULL; + } + TRACE("Removed native arch from main seccomp context"); +- ++#ifdef HAVE_ISULAD ++ *architectures = arch; ++#else + *needs_merge = true; ++#endif + } else { ++#ifdef HAVE_ISULAD ++ *architectures = SCMP_ARCH_NATIVE; ++#else + *needs_merge = false; ++#endif + TRACE("Arch %d already present in main seccomp context", (int)n_arch); + } + +@@ -510,7 +526,11 @@ bool do_resolve_add_rule(uint32_t arch, char *line, scmp_filter_ctx ctx, + if (ret < 0) { + errno = -ret; + SYSERROR("Failed loading rule to reject force umount"); ++#ifdef HAVE_ISULAD ++ return true; ++#else + return false; ++#endif + } + + INFO("Set seccomp rule to reject force umounts"); +@@ -519,20 +539,34 @@ bool do_resolve_add_rule(uint32_t arch, char *line, scmp_filter_ctx ctx, + + nr = seccomp_syscall_resolve_name(line); + if (nr == __NR_SCMP_ERROR) { ++#ifdef HAVE_ISULAD ++ DEBUG("Failed to resolve syscall \"%s\"", line); ++ DEBUG("This syscall will NOT be handled by seccomp"); ++#else + WARN("Failed to resolve syscall \"%s\"", line); + WARN("This syscall will NOT be handled by seccomp"); ++#endif + return true; + } + + if (nr < 0) { ++#ifdef HAVE_ISULAD ++ DEBUG("Got negative return value %d for syscall \"%s\"", nr, line); ++ DEBUG("This syscall will NOT be handled by seccomp"); ++#else + WARN("Got negative return value %d for syscall \"%s\"", nr, line); + WARN("This syscall will NOT be handled by seccomp"); ++#endif + return true; + } + + memset(&arg_cmp, 0, sizeof(arg_cmp)); + for (i = 0; i < rule->args_num; i++) { ++#ifdef HAVE_ISULAD ++ DEBUG("arg_cmp[%d]: SCMP_CMP(%u, %llu, %llu, %llu)", i, ++#else + INFO("arg_cmp[%d]: SCMP_CMP(%u, %llu, %llu, %llu)", i, ++#endif + rule->args_value[i].index, + (long long unsigned int)rule->args_value[i].op, + (long long unsigned int)rule->args_value[i].mask, +@@ -553,14 +587,43 @@ bool do_resolve_add_rule(uint32_t arch, char *line, scmp_filter_ctx ctx, + rule->args_num, arg_cmp); + if (ret < 0) { + errno = -ret; ++#ifdef HAVE_ISULAD ++ DEBUG("Failed loading rule for %s (nr %d action %d (%s))", ++ line, nr, rule->action, get_action_name(rule->action)); ++ return true; ++#else + SYSERROR("Failed loading rule for %s (nr %d action %d (%s))", + line, nr, rule->action, get_action_name(rule->action)); + return false; ++#endif + } + + return true; + } + ++#ifdef HAVE_ISULAD ++#define SCMP_ARCH_INDEX_MAX 3 ++ ++struct scmp_ctx_info { ++ uint32_t architectures[SCMP_ARCH_INDEX_MAX]; ++ enum lxc_arch_t lxc_arch[SCMP_ARCH_INDEX_MAX]; ++ scmp_filter_ctx contexts[SCMP_ARCH_INDEX_MAX]; ++ bool needs_merge[SCMP_ARCH_INDEX_MAX]; ++}; ++ ++static int get_arch_index(enum lxc_arch_t arch, struct scmp_ctx_info *ctx) ++{ ++ int i; ++ ++ for (i = 0; i < SCMP_ARCH_INDEX_MAX; i++) { ++ if (ctx->lxc_arch[i] == arch) ++ return i; ++ } ++ ++ return -1; ++} ++#endif ++ + /* + * v2 consists of + * [x86] +@@ -575,6 +638,521 @@ bool do_resolve_add_rule(uint32_t arch, char *line, scmp_filter_ctx ctx, + * write + * close + */ ++#ifdef HAVE_ISULAD ++static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_conf *conf) ++{ ++ int ret; ++ char *p; ++ enum lxc_arch_t cur_rule_arch, native_arch; ++ bool blacklist = false; ++ uint32_t default_policy_action = -1, default_rule_action = -1; ++ struct seccomp_v2_rule rule; ++ struct scmp_ctx_info ctx; ++ ++ if (strncmp(line, "blacklist", 9) == 0) ++ blacklist = true; ++ else if (strncmp(line, "whitelist", 9) != 0) { ++ ERROR("Bad seccomp policy style \"%s\"", line); ++ return -1; ++ } ++ ++ p = strchr(line, ' '); ++ if (p) { ++ default_policy_action = get_v2_default_action(p + 1); ++ if (default_policy_action == -2) ++ return -1; ++ } ++ ++ /* for blacklist, allow any syscall which has no rule */ ++ if (blacklist) { ++ if (default_policy_action == -1) ++ default_policy_action = SCMP_ACT_ALLOW; ++ ++ if (default_rule_action == -1) ++ default_rule_action = SCMP_ACT_KILL; ++ } else { ++ if (default_policy_action == -1) ++ default_policy_action = SCMP_ACT_KILL; ++ ++ if (default_rule_action == -1) ++ default_rule_action = SCMP_ACT_ALLOW; ++ } ++ ++ memset(&ctx, 0, sizeof(ctx)); ++ ctx.architectures[0] = SCMP_ARCH_NATIVE; ++ ctx.architectures[1] = SCMP_ARCH_NATIVE; ++ ctx.architectures[2] = SCMP_ARCH_NATIVE; ++ native_arch = get_hostarch(); ++ cur_rule_arch = native_arch; ++ if (native_arch == lxc_seccomp_arch_amd64) { ++ cur_rule_arch = lxc_seccomp_arch_all; ++ ++ ctx.lxc_arch[0] = lxc_seccomp_arch_i386; ++ ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_i386, ++ default_policy_action, &ctx.architectures[0]); ++ if (!ctx.contexts[0]) ++ goto bad; ++ ++ ctx.lxc_arch[1] = lxc_seccomp_arch_x32; ++ ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_x32, ++ default_policy_action, &ctx.architectures[1]); ++ if (!ctx.contexts[1]) ++ goto bad; ++ ++ ctx.lxc_arch[2] = lxc_seccomp_arch_amd64; ++ ctx.contexts[2] = get_new_ctx(lxc_seccomp_arch_amd64, ++ default_policy_action, &ctx.architectures[2]); ++ if (!ctx.contexts[2]) ++ goto bad; ++#ifdef SCMP_ARCH_PPC ++ } else if (native_arch == lxc_seccomp_arch_ppc64) { ++ cur_rule_arch = lxc_seccomp_arch_all; ++ ++ ctx.lxc_arch[0] = lxc_seccomp_arch_ppc; ++ ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_ppc, ++ default_policy_action, &ctx.architectures[0]); ++ if (!ctx.contexts[0]) ++ goto bad; ++ ++ ctx.lxc_arch[1] = lxc_seccomp_arch_ppc64; ++ ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_ppc64, ++ default_policy_action, &ctx.architectures[1]); ++ if (!ctx.contexts[1]) ++ goto bad; ++#endif ++#ifdef SCMP_ARCH_ARM ++ } else if (native_arch == lxc_seccomp_arch_arm64) { ++ cur_rule_arch = lxc_seccomp_arch_all; ++ ++ ctx.lxc_arch[0] = lxc_seccomp_arch_arm; ++ ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_arm, ++ default_policy_action, &ctx.architectures[0]); ++ if (!ctx.contexts[0]) ++ goto bad; ++ ++#ifdef SCMP_ARCH_AARCH64 ++ ctx.lxc_arch[1] = lxc_seccomp_arch_arm64; ++ ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_arm64, ++ default_policy_action, &ctx.architectures[1]); ++ if (!ctx.contexts[1]) ++ goto bad; ++#endif ++#endif ++#ifdef SCMP_ARCH_MIPS ++ } else if (native_arch == lxc_seccomp_arch_mips64) { ++ cur_rule_arch = lxc_seccomp_arch_all; ++ ++ ctx.lxc_arch[0] = lxc_seccomp_arch_mips; ++ ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_mips, ++ default_policy_action, &ctx.architectures[0]); ++ if (!ctx.contexts[0]) ++ goto bad; ++ ++ ctx.lxc_arch[1] = lxc_seccomp_arch_mips64n32; ++ ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_mips64n32, ++ default_policy_action, &ctx.architectures[1]); ++ if (!ctx.contexts[1]) ++ goto bad; ++ ++ ctx.lxc_arch[2] = lxc_seccomp_arch_mips64; ++ ctx.contexts[2] = get_new_ctx(lxc_seccomp_arch_mips64, ++ default_policy_action, &ctx.architectures[2]); ++ if (!ctx.contexts[2]) ++ goto bad; ++ } else if (native_arch == lxc_seccomp_arch_mipsel64) { ++ cur_rule_arch = lxc_seccomp_arch_all; ++ ctx.lxc_arch[0] = lxc_seccomp_arch_mipsel; ++ ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_mipsel, ++ default_policy_action, &ctx.architectures[0]); ++ if (!ctx.contexts[0]) ++ goto bad; ++ ++ ctx.lxc_arch[1] = lxc_seccomp_arch_mipsel64n32; ++ ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_mipsel64n32, ++ default_policy_action, &ctx.architectures[1]); ++ if (!ctx.contexts[1]) ++ goto bad; ++ ++ ctx.lxc_arch[2] = lxc_seccomp_arch_mipsel64; ++ ctx.contexts[2] = get_new_ctx(lxc_seccomp_arch_mipsel64, ++ default_policy_action, &ctx.architectures[2]); ++ if (!ctx.contexts[2]) ++ goto bad; ++#endif ++ } ++ ++ if (default_policy_action != SCMP_ACT_KILL) { ++ ret = seccomp_reset(conf->seccomp.seccomp_ctx, default_policy_action); ++ if (ret != 0) { ++ ERROR("Error re-initializing Seccomp"); ++ return -1; ++ } ++ ++ ret = seccomp_attr_set(conf->seccomp.seccomp_ctx, SCMP_FLTATR_CTL_NNP, 0); ++ if (ret < 0) { ++ errno = -ret; ++ SYSERROR("Failed to turn off no-new-privs"); ++ return -1; ++ } ++ ++#ifdef SCMP_FLTATR_ATL_TSKIP ++ ret = seccomp_attr_set(conf->seccomp.seccomp_ctx, SCMP_FLTATR_ATL_TSKIP, 1); ++ if (ret < 0) { ++ errno = -ret; ++ SYSWARN("Failed to turn on seccomp nop-skip, continuing"); ++ } ++#endif ++ } ++ ++ while (getline(&line, line_bufsz, f) != -1) { ++ if (line[0] == '#') ++ continue; ++ ++ if (line[0] == '\0') ++ continue; ++ ++ remove_trailing_newlines(line); ++ ++#ifdef HAVE_ISULAD ++ DEBUG("Processing \"%s\"", line); ++#else ++ INFO("Processing \"%s\"", line); ++#endif ++ if (line[0] == '[') { ++ /* Read the architecture for next set of rules. */ ++ if (strcmp(line, "[x86]") == 0 || ++ strcmp(line, "[X86]") == 0) { ++ if (native_arch != lxc_seccomp_arch_i386 && ++ native_arch != lxc_seccomp_arch_amd64) { ++ cur_rule_arch = lxc_seccomp_arch_unknown; ++ continue; ++ } ++ ++ cur_rule_arch = lxc_seccomp_arch_i386; ++ } else if (strcmp(line, "[x32]") == 0 || ++ strcmp(line, "[X32]") == 0) { ++ if (native_arch != lxc_seccomp_arch_amd64) { ++ cur_rule_arch = lxc_seccomp_arch_unknown; ++ continue; ++ } ++ ++ cur_rule_arch = lxc_seccomp_arch_x32; ++ } else if (strcmp(line, "[X86_64]") == 0 || ++ strcmp(line, "[x86_64]") == 0) { ++ if (native_arch != lxc_seccomp_arch_amd64) { ++ cur_rule_arch = lxc_seccomp_arch_unknown; ++ continue; ++ } ++ ++ cur_rule_arch = lxc_seccomp_arch_amd64; ++ } else if (strcmp(line, "[all]") == 0 || ++ strcmp(line, "[ALL]") == 0) { ++ cur_rule_arch = lxc_seccomp_arch_all; ++ } ++#ifdef SCMP_ARCH_ARM ++ else if (strcmp(line, "[arm]") == 0 || ++ strcmp(line, "[ARM]") == 0) { ++ if (native_arch != lxc_seccomp_arch_arm && ++ native_arch != lxc_seccomp_arch_arm64) { ++ cur_rule_arch = lxc_seccomp_arch_unknown; ++ continue; ++ } ++ ++ cur_rule_arch = lxc_seccomp_arch_arm; ++ } ++#endif ++#ifdef SCMP_ARCH_AARCH64 ++ else if (strcmp(line, "[arm64]") == 0 || ++ strcmp(line, "[ARM64]") == 0) { ++ if (native_arch != lxc_seccomp_arch_arm64) { ++ cur_rule_arch = lxc_seccomp_arch_unknown; ++ continue; ++ } ++ ++ cur_rule_arch = lxc_seccomp_arch_arm64; ++ } ++#endif ++#ifdef SCMP_ARCH_PPC64LE ++ else if (strcmp(line, "[ppc64le]") == 0 || ++ strcmp(line, "[PPC64LE]") == 0) { ++ if (native_arch != lxc_seccomp_arch_ppc64le) { ++ cur_rule_arch = lxc_seccomp_arch_unknown; ++ continue; ++ } ++ ++ cur_rule_arch = lxc_seccomp_arch_ppc64le; ++ } ++#endif ++#ifdef SCMP_ARCH_PPC64 ++ else if (strcmp(line, "[ppc64]") == 0 || ++ strcmp(line, "[PPC64]") == 0) { ++ if (native_arch != lxc_seccomp_arch_ppc64) { ++ cur_rule_arch = lxc_seccomp_arch_unknown; ++ continue; ++ } ++ ++ cur_rule_arch = lxc_seccomp_arch_ppc64; ++ } ++#endif ++#ifdef SCMP_ARCH_PPC ++ else if (strcmp(line, "[ppc]") == 0 || ++ strcmp(line, "[PPC]") == 0) { ++ if (native_arch != lxc_seccomp_arch_ppc && ++ native_arch != lxc_seccomp_arch_ppc64) { ++ cur_rule_arch = lxc_seccomp_arch_unknown; ++ continue; ++ } ++ ++ cur_rule_arch = lxc_seccomp_arch_ppc; ++ } ++#endif ++#ifdef SCMP_ARCH_MIPS ++ else if (strcmp(line, "[mips64]") == 0 || ++ strcmp(line, "[MIPS64]") == 0) { ++ if (native_arch != lxc_seccomp_arch_mips64) { ++ cur_rule_arch = lxc_seccomp_arch_unknown; ++ continue; ++ } ++ ++ cur_rule_arch = lxc_seccomp_arch_mips64; ++ } else if (strcmp(line, "[mips64n32]") == 0 || ++ strcmp(line, "[MIPS64N32]") == 0) { ++ if (native_arch != lxc_seccomp_arch_mips64) { ++ cur_rule_arch = lxc_seccomp_arch_unknown; ++ continue; ++ } ++ ++ cur_rule_arch = lxc_seccomp_arch_mips64n32; ++ } else if (strcmp(line, "[mips]") == 0 || ++ strcmp(line, "[MIPS]") == 0) { ++ if (native_arch != lxc_seccomp_arch_mips && ++ native_arch != lxc_seccomp_arch_mips64) { ++ cur_rule_arch = lxc_seccomp_arch_unknown; ++ continue; ++ } ++ ++ cur_rule_arch = lxc_seccomp_arch_mips; ++ } else if (strcmp(line, "[mipsel64]") == 0 || ++ strcmp(line, "[MIPSEL64]") == 0) { ++ if (native_arch != lxc_seccomp_arch_mipsel64) { ++ cur_rule_arch = lxc_seccomp_arch_unknown; ++ continue; ++ } ++ ++ cur_rule_arch = lxc_seccomp_arch_mipsel64; ++ } else if (strcmp(line, "[mipsel64n32]") == 0 || ++ strcmp(line, "[MIPSEL64N32]") == 0) { ++ if (native_arch != lxc_seccomp_arch_mipsel64) { ++ cur_rule_arch = lxc_seccomp_arch_unknown; ++ continue; ++ } ++ ++ cur_rule_arch = lxc_seccomp_arch_mipsel64n32; ++ } else if (strcmp(line, "[mipsel]") == 0 || ++ strcmp(line, "[MIPSEL]") == 0) { ++ if (native_arch != lxc_seccomp_arch_mipsel && ++ native_arch != lxc_seccomp_arch_mipsel64) { ++ cur_rule_arch = lxc_seccomp_arch_unknown; ++ continue; ++ } ++ ++ cur_rule_arch = lxc_seccomp_arch_mipsel; ++ } ++#endif ++#ifdef SCMP_ARCH_S390X ++ else if (strcmp(line, "[s390x]") == 0 || ++ strcmp(line, "[S390X]") == 0) { ++ if (native_arch != lxc_seccomp_arch_s390x) { ++ cur_rule_arch = lxc_seccomp_arch_unknown; ++ continue; ++ } ++ ++ cur_rule_arch = lxc_seccomp_arch_s390x; ++ } ++#endif ++ else { ++ goto bad_arch; ++ } ++ ++ continue; ++ } ++ ++ /* irrelevant arch - i.e. arm on i386 */ ++ if (cur_rule_arch == lxc_seccomp_arch_unknown) ++ continue; ++ ++ memset(&rule, 0, sizeof(rule)); ++ /* read optional action which follows the syscall */ ++ ret = parse_v2_rules(line, default_rule_action, &rule); ++ if (ret != 0) { ++ ERROR("Failed to interpret seccomp rule"); ++ goto bad_rule; ++ } ++ ++ if (cur_rule_arch == native_arch) { ++ /* add for native arch */ ++ if (!do_resolve_add_rule(SCMP_ARCH_NATIVE, line, ++ conf->seccomp.seccomp_ctx, &rule)) ++ goto bad_rule; ++ ++#ifdef HAVE_ISULAD ++ DEBUG("Added native rule for arch %d for %s action %d(%s)", ++#else ++ INFO("Added native rule for arch %d for %s action %d(%s)", ++#endif ++ SCMP_ARCH_NATIVE, line, rule.action, ++ get_action_name(rule.action)); ++ } else if (cur_rule_arch != lxc_seccomp_arch_all) { ++ /* add for compat specified arch */ ++ int arch_index = get_arch_index(cur_rule_arch, &ctx); ++ if (arch_index < 0) ++ goto bad_arch; ++ ++ if (!do_resolve_add_rule(ctx.architectures[arch_index], line, ++ ctx.contexts[arch_index], &rule)) ++ goto bad_rule; ++ ++#ifdef HAVE_ISULAD ++ DEBUG("Added compat rule for arch %d for %s action %d(%s)", ++#else ++ INFO("Added compat rule for arch %d for %s action %d(%s)", ++#endif ++ ctx.architectures[arch_index], line, rule.action, ++ get_action_name(rule.action)); ++ ctx.needs_merge[arch_index] = true; ++ } else { ++ /* add for all compat archs */ ++ if (!do_resolve_add_rule(SCMP_ARCH_NATIVE, line, ++ conf->seccomp.seccomp_ctx, &rule)) ++ goto bad_rule; ++ ++#ifdef HAVE_ISULAD ++ DEBUG("Added native rule for arch %d for %s action %d(%s)", ++#else ++ INFO("Added native rule for arch %d for %s action %d(%s)", ++#endif ++ SCMP_ARCH_NATIVE, line, rule.action, ++ get_action_name(rule.action)); ++ ++ if (ctx.architectures[0] != SCMP_ARCH_NATIVE) { ++ if (!do_resolve_add_rule(ctx.architectures[0], line, ++ ctx.contexts[0], &rule)) ++ goto bad_rule; ++ ++#ifdef HAVE_ISULAD ++ DEBUG("Added compat rule for arch %d for %s action %d(%s)", ++#else ++ INFO("Added compat rule for arch %d for %s action %d(%s)", ++#endif ++ ctx.architectures[0], line, rule.action, ++ get_action_name(rule.action)); ++ ctx.needs_merge[0] = true; ++ } ++ ++ if (ctx.architectures[1] != SCMP_ARCH_NATIVE) { ++ if (!do_resolve_add_rule(ctx.architectures[1], line, ++ ctx.contexts[1], &rule)) ++ goto bad_rule; ++ ++#ifdef HAVE_ISULAD ++ DEBUG("Added compat rule for arch %d for %s action %d(%s)", ++#else ++ INFO("Added compat rule for arch %d for %s action %d(%s)", ++#endif ++ ctx.architectures[1], line, rule.action, ++ get_action_name(rule.action)); ++ ctx.needs_merge[1] = true; ++ } ++ ++ if (ctx.architectures[2] != SCMP_ARCH_NATIVE) { ++ if (!do_resolve_add_rule(ctx.architectures[2], line, ++ ctx.contexts[2], &rule)) ++ goto bad_rule; ++ ++#ifdef HAVE_ISULAD ++ DEBUG("Added native rule for arch %d for %s action %d(%s)", ++#else ++ INFO("Added native rule for arch %d for %s action %d(%s)", ++#endif ++ ctx.architectures[2], line, rule.action, ++ get_action_name(rule.action)); ++ ctx.needs_merge[2] = true; ++ } ++ } ++ ++ } ++ ++ INFO("Merging compat seccomp contexts into main context"); ++ if (ctx.contexts[0]) { ++ if (ctx.needs_merge[0]) { ++ ret = seccomp_merge(conf->seccomp.seccomp_ctx, ctx.contexts[0]); ++ if (ret < 0) { ++ ERROR("%s - Failed to merge first compat seccomp " ++ "context into main context", strerror(-ret)); ++ goto bad; ++ } ++ ++ TRACE("Merged first compat seccomp context into main context"); ++ } else { ++ seccomp_release(ctx.contexts[0]); ++ ctx.contexts[0] = NULL; ++ } ++ } ++ ++ if (ctx.contexts[1]) { ++ if (ctx.needs_merge[1]) { ++ ret = seccomp_merge(conf->seccomp.seccomp_ctx, ctx.contexts[1]); ++ if (ret < 0) { ++ ERROR("%s - Failed to merge second compat seccomp " ++ "context into main context", strerror(-ret)); ++ goto bad; ++ } ++ ++ TRACE("Merged second compat seccomp context into main context"); ++ } else { ++ seccomp_release(ctx.contexts[1]); ++ ctx.contexts[1] = NULL; ++ } ++ } ++ ++ if (ctx.contexts[2]) { ++ if (ctx.needs_merge[2]) { ++ ret = seccomp_merge(conf->seccomp.seccomp_ctx, ctx.contexts[2]); ++ if (ret < 0) { ++ ERROR("%s - Failed to merge third compat seccomp " ++ "context into main context", strerror(-ret)); ++ goto bad; ++ } ++ ++ TRACE("Merged third compat seccomp context into main context"); ++ } else { ++ seccomp_release(ctx.contexts[2]); ++ ctx.contexts[2] = NULL; ++ } ++ } ++ ++ free(line); ++ return 0; ++ ++bad_arch: ++ ERROR("Unsupported architecture \"%s\"", line); ++ ++bad_rule: ++bad: ++ if (ctx.contexts[0]) ++ seccomp_release(ctx.contexts[0]); ++ ++ if (ctx.contexts[1]) ++ seccomp_release(ctx.contexts[1]); ++ ++ if (ctx.contexts[2]) ++ seccomp_release(ctx.contexts[2]); ++ ++ free(line); ++ ++ return -1; ++} ++#else + static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_conf *conf) + { + int ret; +@@ -1067,6 +1645,7 @@ bad: + + return -1; + } ++#endif + #else /* HAVE_DECL_SECCOMP_SYSCALL_RESOLVE_NAME_ARCH */ + static int parse_config_v2(FILE *f, char *line, struct lxc_conf *conf) + { +@@ -1354,7 +1933,6 @@ int seccomp_notify_handler(int fd, uint32_t events, void *data, + char *cookie = conf->seccomp.notifier.cookie; + uint64_t req_id; + +- memset(req, 0, sizeof(*req)); + ret = seccomp_notify_receive(fd, req); + if (ret) { + SYSERROR("Failed to read seccomp notification"); +diff --git a/src/lxc/start.c b/src/lxc/start.c +index fd969c433..51d13254b 100644 +--- a/src/lxc/start.c ++++ b/src/lxc/start.c +@@ -47,7 +47,7 @@ + #include "monitor.h" + #include "namespace.h" + #include "network.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "start.h" + #include "storage/storage.h" + #include "storage/storage_utils.h" +@@ -212,13 +212,6 @@ int lxc_check_inherited(struct lxc_conf *conf, bool closeall, + if (conf && conf->close_all_fds) + closeall = true; + +- /* +- * Disable syslog at this point to avoid the above logging +- * function to open a new fd and make the check_inherited function +- * enter an infinite loop. +- */ +- lxc_log_syslog_disable(); +- + restart: + dir = opendir("/proc/self/fd"); + if (!dir) +@@ -279,24 +272,21 @@ restart: + + #endif + if (closeall) { +- if (close(fd)) +- SYSINFO("Closed inherited fd %d", fd); +- else +- INFO("Closed inherited fd %d", fd); ++ close(fd); + closedir(dir); ++ INFO("Closed inherited fd %d", fd); + goto restart; + } + WARN("Inherited fd %d", fd); + } +- closedir(dir); + +- /* +- * Only enable syslog at this point to avoid the above logging +- * function to open a new fd and make the check_inherited function +- * enter an infinite loop. ++ /* Only enable syslog at this point to avoid the above logging function ++ * to open a new fd and make the check_inherited function enter an ++ * infinite loop. + */ +- lxc_log_syslog_enable(); ++ lxc_log_enable_syslog(); + ++ closedir(dir); /* cannot fail */ + return 0; + } + +@@ -590,13 +580,23 @@ int lxc_poll(const char *name, struct lxc_handler *handler) + + TRACE("Mainloop is ready"); + ++#ifdef HAVE_ISULAD ++ // iSulad: close stdin pipe if we do not want open_stdin with container stdin ++ if (!handler->conf->console.open_stdin) { ++ if (handler->conf->console.pipes[0][1] > 0) { ++ close(handler->conf->console.pipes[0][1]); ++ handler->conf->console.pipes[0][1] = -1; ++ } ++ } ++#endif ++ + ret = lxc_mainloop(&descr, -1); + close_prot_errno_disarm(descr.epfd); + if (ret < 0 || !handler->init_died) + goto out_mainloop_console; + + if (has_console) +- ret = lxc_mainloop(&descr_console, 0); ++ ret = lxc_mainloop(&descr_console, 100); + + out_mainloop_console: + if (has_console) { +@@ -615,7 +615,32 @@ out_sigfd: + return ret; + } + +-void lxc_put_handler(struct lxc_handler *handler) ++void lxc_zero_handler(struct lxc_handler *handler) ++{ ++ memset(handler, 0, sizeof(struct lxc_handler)); ++ ++ handler->state = STOPPED; ++ ++ handler->pinfd = -EBADF; ++ ++ handler->pidfd = -EBADF; ++ ++ handler->sigfd = -EBADF; ++ ++ for (int i = 0; i < LXC_NS_MAX; i++) ++ handler->nsfd[i] = -EBADF; ++ ++ handler->data_sock[0] = -EBADF; ++ handler->data_sock[1] = -EBADF; ++ ++ handler->state_socket_pair[0] = -EBADF; ++ handler->state_socket_pair[1] = -EBADF; ++ ++ handler->sync_sock[0] = -EBADF; ++ handler->sync_sock[1] = -EBADF; ++} ++ ++void lxc_free_handler(struct lxc_handler *handler) + { + close_prot_errno_disarm(handler->pinfd); + close_prot_errno_disarm(handler->pidfd); +@@ -627,27 +652,22 @@ void lxc_put_handler(struct lxc_handler *handler) + close_prot_errno_disarm(handler->state_socket_pair[0]); + close_prot_errno_disarm(handler->state_socket_pair[1]); + cgroup_exit(handler->cgroup_ops); +- if (handler->conf && handler->conf->reboot == REBOOT_NONE) +- free_disarm(handler); +- else +- handler->conf = NULL; ++ handler->conf = NULL; ++ free_disarm(handler); + } + +-struct lxc_handler *lxc_init_handler(struct lxc_handler *old, +- const char *name, struct lxc_conf *conf, ++struct lxc_handler *lxc_init_handler(const char *name, struct lxc_conf *conf, + const char *lxcpath, bool daemonize) + { +- int nr_keep_fds = 0; + int ret; + struct lxc_handler *handler; + +- if (!old) +- handler = zalloc(sizeof(*handler)); +- else +- handler = old; ++ handler = malloc(sizeof(*handler)); + if (!handler) + return NULL; + ++ memset(handler, 0, sizeof(*handler)); ++ + /* Note that am_guest_unpriv() checks the effective uid. We + * probably don't care if we are real root only if we are running + * as root so this should be fine. +@@ -671,6 +691,11 @@ struct lxc_handler *lxc_init_handler(struct lxc_handler *old, + handler->nsfd[i] = -EBADF; + + handler->name = name; ++ ++#ifdef HAVE_ISULAD ++ handler->exit_code = -1; /* isulad: record exit code of container */ ++#endif ++ + if (daemonize) + handler->transient_pid = lxc_raw_getpid(); + else +@@ -691,8 +716,6 @@ struct lxc_handler *lxc_init_handler(struct lxc_handler *old, + TRACE("Created anonymous pair {%d,%d} of unix sockets", + handler->state_socket_pair[0], + handler->state_socket_pair[1]); +- handler->keep_fds[nr_keep_fds++] = handler->state_socket_pair[0]; +- handler->keep_fds[nr_keep_fds++] = handler->state_socket_pair[1]; + } + + if (handler->conf->reboot == REBOOT_NONE) { +@@ -701,7 +724,6 @@ struct lxc_handler *lxc_init_handler(struct lxc_handler *old, + ERROR("Failed to set up command socket"); + goto on_error; + } +- handler->keep_fds[nr_keep_fds++] = handler->conf->maincmd_fd; + } + + TRACE("Unix domain socket %d for command server is ready", +@@ -710,7 +732,7 @@ struct lxc_handler *lxc_init_handler(struct lxc_handler *old, + return handler; + + on_error: +- lxc_put_handler(handler); ++ lxc_free_handler(handler); + + return NULL; + } +@@ -721,6 +743,10 @@ int lxc_init(const char *name, struct lxc_handler *handler) + int ret; + const char *loglevel; + struct lxc_conf *conf = handler->conf; ++#ifdef HAVE_ISULAD ++ conf->console.disable_pty = handler->disable_pty; ++ conf->console.open_stdin = handler->open_stdin; ++#endif + + handler->monitor_pid = lxc_raw_getpid(); + status_fd = open("/proc/self/status", O_RDONLY | O_CLOEXEC); +@@ -810,6 +836,9 @@ int lxc_init(const char *name, struct lxc_handler *handler) + ret = lxc_terminal_setup(conf); + if (ret < 0) { + ERROR("Failed to create console"); ++#ifdef HAVE_ISULAD ++ lxc_write_error_message(conf->errpipe[1], "Failed to create console for container \"%s\".", name); ++#endif + goto out_restore_sigmask; + } + TRACE("Created console"); +@@ -853,6 +882,185 @@ out_restore_sigmask: + return -1; + } + ++#ifdef HAVE_ISULAD ++/* isulad: start timeout thread */ ++typedef enum { ++ START_INIT, ++ START_TIMEOUT, ++ START_MAX, ++} start_timeout_t; ++ ++static start_timeout_t global_timeout_state = START_INIT; ++static sem_t global_timeout_sem; ++ ++struct start_timeout_conf { ++ unsigned int timeout; ++ int errfd; ++}; ++ ++void trim_line(char *s) ++{ ++ size_t len; ++ ++ len = strlen(s); ++ while ((len > 1) && (s[len - 1] == '\n')) ++ s[--len] = '\0'; ++} ++ ++static int _read_procs_file(const char *path, pid_t **pids, size_t *len) ++{ ++ FILE *f; ++ char *line = NULL; ++ size_t sz = 0; ++ pid_t *tmp_pids = NULL; ++ ++ f = fopen_cloexec(path, "r"); ++ if (!f) ++ return -1; ++ ++ while (getline(&line, &sz, f) != -1) { ++ pid_t pid; ++ trim_line(line); ++ pid = (pid_t)atoll(line); ++ if (lxc_mem_realloc((void **)&tmp_pids, sizeof(pid_t) * (*len + 1), *pids, sizeof(pid_t) * (*len)) != 0) { ++ free(*pids); ++ *pids = NULL; ++ ERROR("out of memory"); ++ free(line); ++ fclose(f); ++ return -1; ++ } ++ *pids = tmp_pids; ++ ++ (*pids)[*len] = pid; ++ (*len)++; ++ } ++ ++ free(line); ++ fclose(f); ++ return 0; ++} ++ ++static int _recursive_read_cgroup_procs(const char *dirpath, pid_t **pids, size_t *len) ++{ ++ struct dirent *direntp = NULL; ++ DIR *dir = NULL; ++ int ret, failed = 0; ++ char pathname[PATH_MAX]; ++ ++ dir = opendir(dirpath); ++ if (dir == NULL) { ++ WARN("Failed to open \"%s\"", dirpath); ++ return 0; ++ } ++ ++ while ((direntp = readdir(dir))) { ++ struct stat mystat; ++ int rc; ++ ++ if (!strcmp(direntp->d_name, ".") || ++ !strcmp(direntp->d_name, "..")) ++ continue; ++ ++ rc = snprintf(pathname, PATH_MAX, "%s/%s", dirpath, direntp->d_name); ++ if (rc < 0 || rc >= PATH_MAX) { ++ failed = 1; ++ continue; ++ } ++ ++ if (strcmp(direntp->d_name, "cgroup.procs") == 0) { ++ if (_read_procs_file(pathname, pids, len)) { ++ failed = 1; ++ ++ } ++ continue; ++ } ++ ++ ret = lstat(pathname, &mystat); ++ if (ret) { ++ failed = 1; ++ continue; ++ } ++ ++ if (S_ISDIR(mystat.st_mode)) { ++ if (_recursive_read_cgroup_procs(pathname, pids, len) < 0) ++ failed = 1; ++ } ++ } ++ ++ ret = closedir(dir); ++ if (ret) { ++ WARN("Failed to close directory \"%s\"", dirpath); ++ failed = 1; ++ } ++ ++ return failed ? -1 : 0; ++} ++ ++int get_all_pids(struct cgroup_ops *cg_ops, pid_t **pids, size_t *len) ++{ ++ const char *devices_path = NULL; ++ ++ devices_path = cg_ops->get_cgroup_full_path(cg_ops, "devices"); ++ if (!file_exists(devices_path)) { ++ return 0; ++ } ++ ++ return _recursive_read_cgroup_procs(devices_path, pids, len); ++} ++ ++static int set_cgroup_freezer(struct cgroup_ops *cg_ops, const char *value) ++{ ++ char *fullpath; ++ int ret; ++ ++ fullpath = must_make_path(cg_ops->get_cgroup_full_path(cg_ops, "freezer"), "freezer.state", NULL); ++ ret = lxc_write_to_file(fullpath, value, strlen(value), false, 0666); ++ free(fullpath); ++ return ret; ++} ++ ++/* isulad: kill all process in container cgroup path */ ++static void signal_all_processes(struct lxc_handler *handler) ++{ ++ int ret; ++ struct cgroup_ops *cg_ops = handler->cgroup_ops; ++ pid_t *pids = NULL; ++ size_t len = 0, i; ++ ++ ret = set_cgroup_freezer(cg_ops, "FROZEN"); ++ if (ret < 0 && errno != ENOENT) { ++ WARN("cgroup_set frozen failed"); ++ } ++ ++ ret = get_all_pids(cg_ops, &pids, &len); ++ if (ret < 0) { ++ WARN("failed to get all pids"); ++ } ++ ++ for (i = 0; i < len; i++) { ++ ret = kill(pids[i], SIGKILL); ++ if (ret < 0 && errno != ESRCH) { ++ WARN("Can not kill process (pid=%d) with SIGKILL for container %s", pids[i], handler->name); ++ } ++ } ++ ++ ret = set_cgroup_freezer(cg_ops, "THAWED"); ++ if (ret < 0 && errno != ENOENT) { ++ WARN("cgroup_set thawed failed"); ++ } ++ ++ for (i = 0; i < len; i++) { ++ ret = lxc_wait_for_pid_status(pids[i]); ++ if (ret < 0 && errno != ECHILD) { ++ WARN("Failed to wait pid %d for container %s: %s", pids[i], handler->name, strerror(errno)); ++ } ++ } ++ ++ free(pids); ++} ++#endif ++ + void lxc_end(struct lxc_handler *handler) + { + int ret; +@@ -926,11 +1134,37 @@ void lxc_end(struct lxc_handler *handler) + + lsm_process_cleanup(handler->conf, handler->lxcpath); + ++#ifdef HAVE_ISULAD ++ // close maincmd fd before destroy cgroup for isulad ++ if (handler->conf->reboot == REBOOT_NONE) { ++ /* For all new state clients simply close the command socket. ++ * This will inform all state clients that the container is ++ * STOPPED and also prevents a race between a open()/close() on ++ * the command socket causing a new process to get ECONNREFUSED ++ * because we haven't yet closed the command socket. ++ */ ++ close_prot_errno_disarm(handler->conf->maincmd_fd); ++ TRACE("Closed command socket"); ++ } ++ int retry_count = 0; ++ int max_retry = 10; ++retry: ++ if (cgroup_ops != NULL && !cgroup_ops->payload_destroy(cgroup_ops, handler)) { ++ TRACE("Trying to kill all subprocess"); ++ signal_all_processes(handler); ++ TRACE("Finished kill all subprocess"); ++ if (retry_count < max_retry) { ++ usleep(100 * 1000); /* 100 millisecond */ ++ retry_count++; ++ goto retry; ++ } ++ SYSERROR("Failed to destroy cgroup path for container: \"%s\"", handler->name); ++ } ++#else + if (cgroup_ops) { + cgroup_ops->payload_destroy(cgroup_ops, handler); + cgroup_ops->monitor_destroy(cgroup_ops, handler); + } +- + if (handler->conf->reboot == REBOOT_NONE) { + /* For all new state clients simply close the command socket. + * This will inform all state clients that the container is +@@ -940,12 +1174,25 @@ void lxc_end(struct lxc_handler *handler) + */ + close_prot_errno_disarm(handler->conf->maincmd_fd); + TRACE("Closed command socket"); ++ } ++#endif + ++ if (handler->conf->reboot == REBOOT_NONE) { + /* This function will try to connect to the legacy lxc-monitord + * state server and only exists for backwards compatibility. + */ + lxc_monitor_send_state(name, STOPPED, handler->lxcpath); + ++#ifdef HAVE_ISULAD ++ /* isuald: write exit code to exit fifo */ ++ if (handler->conf->exit_fd >= 0) { ++ ret = write(handler->conf->exit_fd, &handler->exit_code, sizeof(int)); ++ if (ret != sizeof(int)) { ++ SYSERROR("Failed to write to exit code to exit fifo."); ++ } ++ } ++#endif ++ + /* The command socket is closed so no one can acces the command + * socket anymore so there's no need to lock it. + */ +@@ -1001,7 +1248,7 @@ void lxc_end(struct lxc_handler *handler) + if (handler->conf->ephemeral == 1 && handler->conf->reboot != REBOOT_REQ) + lxc_destroy_container_on_signal(handler, name); + +- lxc_put_handler(handler); ++ lxc_free_handler(handler); + } + + void lxc_abort(struct lxc_handler *handler) +@@ -1032,16 +1279,36 @@ static int do_start(void *data) + struct lxc_handler *handler = data; + __lxc_unused __do_close int data_sock0 = handler->data_sock[0], + data_sock1 = handler->data_sock[1]; +- __do_close int devnull_fd = -EBADF, status_fd = -EBADF; ++ __do_close int status_fd = -EBADF; + int ret; + uid_t new_uid; + gid_t new_gid; + struct lxc_list *iterator; + uid_t nsuid = 0; + gid_t nsgid = 0; ++ int devnull_fd = -1; + + lxc_sync_fini_parent(handler); + ++#ifdef HAVE_ISULAD ++ sigset_t mask; ++ ++ /*isulad: restore default signal handlers and unblock all signals*/ ++ for (int i = 1; i < NSIG; i++) ++ signal(i, SIG_DFL); ++ ++ ret = sigfillset(&mask); ++ if (ret < 0) { ++ SYSERROR("Failed to fill signal mask"); ++ goto out_warn_father; ++ } ++ ret = sigprocmask(SIG_UNBLOCK, &mask, NULL); ++ if (ret < 0) { ++ SYSERROR("Failed to set signal mask"); ++ goto out_warn_father; ++ } ++#endif ++ + if (lxc_abstract_unix_recv_fds(data_sock1, &status_fd, 1, NULL, 0) < 0) { + ERROR("Failed to receive status file descriptor to child process"); + goto out_warn_father; +@@ -1155,7 +1422,11 @@ static int do_start(void *data) + * means that migration won't work, but at least we won't spew output + * where it isn't wanted. + */ ++#ifdef HAVE_ISULAD ++ if (!handler->disable_pty && handler->daemonize && !handler->conf->autodev) { ++#else + if (handler->daemonize && !handler->conf->autodev) { ++#endif + char path[PATH_MAX]; + + ret = snprintf(path, sizeof(path), "%s/dev/null", +@@ -1221,6 +1492,9 @@ static int do_start(void *data) + /* Setup the container, ip, names, utsname, ... */ + ret = lxc_setup(handler); + if (ret < 0) { ++#ifdef HAVE_ISULAD ++ lxc_write_error_message(handler->conf->errpipe[1], "Failed to setup lxc, please check the config file."); ++#endif + ERROR("Failed to setup container \"%s\"", handler->name); + goto out_warn_father; + } +@@ -1243,23 +1517,82 @@ static int do_start(void *data) + DEBUG("Set PR_SET_NO_NEW_PRIVS to block execve() gainable privileges"); + } + ++#ifdef HAVE_ISULAD ++ /* isulad: dup2 pipe[0][0] to container stdin, pipe[1][1] to container stdout, pipe[2][1] to container stderr */ ++ if (handler->disable_pty) { ++ if (handler->conf->console.pipes[0][1] >= 0) { ++ close(handler->conf->console.pipes[0][1]); ++ handler->conf->console.pipes[0][1] = -1; ++ } ++ ++ if (handler->conf->console.pipes[0][0] >= 0) { ++ ret = dup2(handler->conf->console.pipes[0][0], STDIN_FILENO); ++ if (ret < 0) ++ goto out_warn_father; ++ } ++ ++ if (handler->conf->console.pipes[1][0] >= 0) { ++ close(handler->conf->console.pipes[1][0]); ++ handler->conf->console.pipes[1][0] = -1; ++ } ++ ++ if (handler->conf->console.pipes[1][1] >= 0) { ++ ret = dup2(handler->conf->console.pipes[1][1], STDOUT_FILENO); ++ if (ret < 0) ++ goto out_warn_father; ++ } ++ if (handler->conf->console.pipes[2][0] >= 0) { ++ close(handler->conf->console.pipes[2][0]); ++ handler->conf->console.pipes[2][0] = -1; ++ } ++ ++ if (handler->conf->console.pipes[2][1] >= 0) { ++ ret = dup2(handler->conf->console.pipes[2][1], STDERR_FILENO); ++ if (ret < 0) ++ goto out_warn_father; ++ } ++ } ++#endif ++ + /* Some init's such as busybox will set sane tty settings on stdin, + * stdout, stderr which it thinks is the console. We already set them + * the way we wanted on the real terminal, and we want init to do its + * setup on its console ie. the pty allocated in lxc_terminal_setup() so + * make sure that that pty is stdin,stdout,stderr. + */ +- if (handler->conf->console.pts >= 0) { ++ setsid(); ++#ifdef HAVE_ISULAD ++ if (!handler->disable_pty && handler->conf->console.slave >= 0) { ++ /* isulad:make the given terminal as controlling terminal to avoid warning ++ * sh: cannot set terminal process group (-1): Inappropriate ioctl for device ++ * sh: no job control in this shell */ ++ if (ioctl(handler->conf->console.slave, TIOCSCTTY, NULL) < 0) { ++ ERROR("Faild to make the given terminal the controlling terminal of the calling process"); ++ goto out_warn_father; ++ } ++ if (handler->daemonize || !handler->conf->is_execute) ++ ret = set_stdfds(handler->conf->console.slave); ++ else ++ ret = lxc_terminal_set_stdfds(handler->conf->console.slave); ++ if (ret < 0) { ++ ERROR("Failed to redirect std{in,out,err} to pty file " ++ "descriptor %d", handler->conf->console.slave); ++ goto out_warn_father; ++ } ++ } ++#else ++ if (handler->conf->console.slave >= 0) { + if (handler->daemonize || !handler->conf->is_execute) +- ret = set_stdfds(handler->conf->console.pts); ++ ret = set_stdfds(handler->conf->console.slave); + else +- ret = lxc_terminal_set_stdfds(handler->conf->console.pts); ++ ret = lxc_terminal_set_stdfds(handler->conf->console.slave); + if (ret < 0) { + ERROR("Failed to redirect std{in,out,err} to pty file descriptor %d", +- handler->conf->console.pts); ++ handler->conf->console.slave); + goto out_warn_father; + } + } ++#endif + + /* If we mounted a temporary proc, then unmount it now. */ + tmp_proc_unmount(handler->conf); +@@ -1283,7 +1616,8 @@ static int do_start(void *data) + + close_prot_errno_disarm(handler->sigfd); + +- if (handler->conf->console.pts < 0 && handler->daemonize) { ++ #ifdef HAVE_ISULAD ++ if (!handler->disable_pty && handler->conf->console.slave < 0 && handler->daemonize) { + if (devnull_fd < 0) { + devnull_fd = open_devnull(); + if (devnull_fd < 0) +@@ -1296,12 +1630,35 @@ static int do_start(void *data) + goto out_warn_father; + } + } ++ #else ++ if (handler->conf->console.slave < 0 && handler->daemonize) { ++ if (devnull_fd < 0) { ++ devnull_fd = open_devnull(); ++ if (devnull_fd < 0) ++ goto out_warn_father; ++ } + +- close_prot_errno_disarm(devnull_fd); ++ ret = set_stdfds(devnull_fd); ++ if (ret < 0) { ++ ERROR("Failed to redirect std{in,out,err} to \"/dev/null\""); ++ goto out_warn_father; ++ } ++ } ++ #endif + +- setsid(); ++ close_prot_errno_disarm(devnull_fd); + + if (handler->conf->init_cwd) { ++#ifdef HAVE_ISULAD ++ /* try to craete workdir if not exist */ ++ struct stat st; ++ if (stat(handler->conf->init_cwd, &st) < 0 && mkdir_p(handler->conf->init_cwd, 0755) < 0) { ++ SYSERROR("Try to create directory \"%s\" as workdir failed", handler->conf->init_cwd); ++ lxc_write_error_message(handler->conf->errpipe[1], "%s:%d: Failed to create workdir: %s.", ++ __FILE__, __LINE__, strerror(errno)); ++ goto out_warn_father; ++ } ++#endif + ret = chdir(handler->conf->init_cwd); + if (ret < 0) { + SYSERROR("Could not change directory to \"%s\"", +@@ -1345,6 +1702,13 @@ static int do_start(void *data) + } + } + ++#ifdef HAVE_ISULAD ++ if (prctl(PR_SET_KEEPCAPS, 1) < 0) { ++ SYSERROR("Failed to keep permitted capabilities"); ++ goto out_warn_father; ++ } ++#endif ++ + /* The container has been setup. We can now switch to an unprivileged + * uid/gid. + */ +@@ -1358,6 +1722,13 @@ static int do_start(void *data) + if (new_gid == nsgid) + new_gid = LXC_INVALID_GID; + ++#ifdef HAVE_ISULAD ++ // isulad: set env home in container ++ if (lxc_setup_env_home(new_uid) < 0) { ++ goto out_warn_father; ++ } ++#endif ++ + /* Make sure that the processes STDIO is correctly owned by the user that we are switching to */ + ret = fix_stdio_permissions(new_uid); + if (ret) +@@ -1371,8 +1742,16 @@ static int do_start(void *data) + #if HAVE_LIBCAP + if (lxc_proc_cap_is_set(CAP_SETGID, CAP_EFFECTIVE)) + #endif ++ #ifdef HAVE_ISULAD ++ /* isulad: set groups for init process, and before we set uid and gid */ ++ if (!lxc_setgroups(handler->conf->init_groups_len, handler->conf->init_groups)) { ++ ERROR("Can not set groups"); ++ goto out_warn_father; ++ } ++ #else + if (!lxc_setgroups(0, NULL)) + goto out_warn_father; ++ #endif + + if (!lxc_switch_uid_gid(new_uid, new_gid)) + goto out_warn_father; +@@ -1383,6 +1762,19 @@ static int do_start(void *data) + goto out_warn_father; + } + ++#ifdef HAVE_ISULAD ++ /* isulad: drop the cap of current process */ ++ if (prctl(PR_SET_KEEPCAPS, 0) < 0) { ++ SYSERROR("Failed to clear permitted capabilities"); ++ goto out_warn_father; ++ } ++ ++ if (lxc_drop_caps(handler->conf)) { ++ SYSERROR("Failed to drop caps"); ++ goto out_warn_father; ++ } ++#endif ++ + if (handler->conf->monitor_signal_pdeath != SIGKILL) { + ret = lxc_set_death_signal(handler->conf->monitor_signal_pdeath, + handler->monitor_pid, status_fd); +@@ -1393,20 +1785,25 @@ static int do_start(void *data) + } + } + +- /* +- * After this call, we are in error because this ops should not return ++ /* After this call, we are in error because this ops should not return + * as it execs. + */ ++#ifdef HAVE_ISULAD ++ close_prot_errno_disarm(status_fd); ++ handler->ops->start(handler, handler->data, handler->daemonize ? handler->conf->errpipe[1] : -1); ++#else + handler->ops->start(handler, handler->data); ++#endif + + out_warn_father: +- /* +- * We want the parent to know something went wrong, so we return a ++ /* We want the parent to know something went wrong, so we return a + * special error code. + */ + lxc_sync_wake_parent(handler, LXC_SYNC_ERROR); + + out_error: ++ close_prot_errno_disarm(devnull_fd); ++ + return -1; + } + +@@ -1435,9 +1832,9 @@ static int lxc_recv_ttys_from_child(struct lxc_handler *handler) + + tty = &ttys->tty[i]; + tty->busy = -1; +- tty->ptmx = ttyfds[0]; +- tty->pts = ttyfds[1]; +- TRACE("Received pty with ptmx fd %d and pts fd %d from child", tty->ptmx, tty->pts); ++ tty->master = ttyfds[0]; ++ tty->slave = ttyfds[1]; ++ TRACE("Received pty with master fd %d and slave fd %d from child", tty->master, tty->slave); + } + + if (ret < 0) +@@ -1529,6 +1926,94 @@ static inline int do_share_ns(void *arg) + return 0; + } + ++#ifdef HAVE_ISULAD ++static int lxc_write_container_info(char *filename, pid_t pid, pid_t p_pid, ++ unsigned long long start_at, unsigned long long p_start_at) ++{ ++ FILE *pid_fp = NULL; ++ int ret = 0; ++ ++ pid_fp = lxc_fopen(filename, "w"); ++ if (pid_fp == NULL) { ++ SYSERROR("Failed to create pidfile '%s'",filename); ++ ret = -1; ++ goto out; ++ } ++ ++ if (fprintf(pid_fp, "%d %llu %d %llu\n", pid, start_at, p_pid, p_start_at) < 0) { ++ SYSERROR("Failed to write '%s'", filename); ++ ret = -1; ++ goto out; ++ } ++out: ++ if (pid_fp) ++ fclose(pid_fp); ++ pid_fp = NULL; ++ return ret; ++} ++ ++static int lxc_check_container_info(char *filename, pid_t pid, pid_t p_pid, ++ unsigned long long start_at, unsigned long long p_start_at) ++{ ++ int ret = 0; ++ int num; ++ char sbuf[1024] = {0}; /* bufs for stat */ ++ int saved_pid; /* process id */ ++ int saved_ppid; /* pid of parent process */ ++ unsigned long long saved_start_time; /* start time of process -- seconds since 1-1-70 */ ++ unsigned long long saved_pstart_time; /* start time of parent process -- seconds since 1-1-70 */ ++ ++ if ((lxc_file2str(filename, sbuf, sizeof(sbuf))) == -1) { ++ SYSERROR("Failed to read pidfile %s", filename); ++ ret = -1; ++ goto out; ++ } ++ ++ num = sscanf(sbuf, "%d %Lu %d %Lu", &saved_pid, &saved_start_time, &saved_ppid, &saved_pstart_time); ++ if (num != 4) { ++ SYSERROR("Call sscanf error"); ++ ret = -1; ++ goto out; ++ } ++ ++ if (pid != saved_pid || p_pid != saved_ppid ++ || start_at != saved_start_time || p_start_at != saved_pstart_time) { ++ ERROR("Check container info failed"); ++ ret = -1; ++ goto out; ++ } ++ ++out: ++ return ret; ++} ++ ++/* isuald: save pid/ppid info */ ++static int lxc_save_container_info(char *filename, pid_t pid) ++{ ++ int ret = 0; ++ pid_t p_pid = 0; ++ unsigned long long start_at = 0; ++ unsigned long long p_start_at = 0; ++ ++ start_at = lxc_get_process_startat(pid); ++ p_pid = getpid(); ++ p_start_at = lxc_get_process_startat(p_pid); ++ ++ ret = lxc_write_container_info(filename, pid, p_pid, start_at, p_start_at); ++ if (ret != 0) { ++ goto out; ++ } ++ ++ ret = lxc_check_container_info(filename, pid, p_pid, start_at, p_start_at); ++ if (ret != 0) { ++ goto out; ++ } ++ ++out: ++ return ret; ++} ++#endif ++ + /* lxc_spawn() performs crucial setup tasks and clone()s the new process which + * exec()s the requested container binary. + * Note that lxc_spawn() runs in the parent namespaces. Any operations performed +@@ -1640,6 +2125,32 @@ static int lxc_spawn(struct lxc_handler *handler) + } + TRACE("Cloned child process %d", handler->pid); + ++#ifdef HAVE_ISULAD ++ /* isulad: close pipe after clone */ ++ if (handler->conf->console.pipes[0][0] >= 0) { ++ close(handler->conf->console.pipes[0][0]); ++ handler->conf->console.pipes[0][0] = -1; ++ } ++ ++ if (handler->conf->console.pipes[1][1] >= 0) { ++ close(handler->conf->console.pipes[1][1]); ++ handler->conf->console.pipes[1][1] = -1; ++ } ++ ++ if (handler->conf->console.pipes[2][1] >= 0) { ++ close(handler->conf->console.pipes[2][1]); ++ handler->conf->console.pipes[2][1] = -1; ++ } ++ ++ /* isulad: save pid/ppid info into file*/ ++ if (handler->conf->container_info_file) { ++ if (lxc_save_container_info(handler->conf->container_info_file, handler->pid)) { ++ ERROR("Failed to save cloned container pid"); ++ goto out_delete_net; ++ } ++ } ++#endif ++ + /* Verify that we can actually make use of pidfds. */ + if (!lxc_can_use_pidfd(handler->pidfd)) + close_prot_errno_disarm(handler->pidfd); +@@ -1652,6 +2163,13 @@ static int lxc_spawn(struct lxc_handler *handler) + if (ret < 0) + SYSERROR("Failed to set environment variable: LXC_PID=%s", pidstr); + ++#ifdef HAVE_ISULAD ++ if (handler->cgroup_ops->container_cgroup) { ++ if (setenv("LXC_CGROUP_PATH", handler->cgroup_ops->container_cgroup, 1)) ++ SYSERROR("Failed to set environment variable: LXC_CGROUP_PATH=%s.", handler->cgroup_ops->container_cgroup); ++ } ++#endif ++ + for (i = 0; i < LXC_NS_MAX; i++) + if (handler->ns_on_clone_flags & ns_info[i].clone_flag) + INFO("Cloned %s", ns_info[i].flag_name); +@@ -1765,7 +2283,11 @@ static int lxc_spawn(struct lxc_handler *handler) + goto out_delete_net; + + if (!lxc_list_empty(&conf->limits)) { ++#ifdef HAVE_ISULAD ++ ret = setup_resource_limits(&conf->limits, handler->pid, conf->errpipe[1]); ++#else + ret = setup_resource_limits(&conf->limits, handler->pid); ++#endif + if (ret < 0) { + ERROR("Failed to setup resource limits"); + goto out_delete_net; +@@ -1776,12 +2298,7 @@ static int lxc_spawn(struct lxc_handler *handler) + if (ret < 0) + goto out_delete_net; + +- /* +- * with isolation the limiting devices cgroup was already setup, so +- * only setup devices here if we have no namespace directory +- */ +- if (!handler->conf->cgroup_meta.namespace_dir && +- !cgroup_ops->setup_limits_legacy(cgroup_ops, handler->conf, true)) { ++ if (!cgroup_ops->setup_limits_legacy(cgroup_ops, handler->conf, true)) { + ERROR("Failed to setup legacy device cgroup controller limits"); + goto out_delete_net; + } +@@ -1816,6 +2333,26 @@ static int lxc_spawn(struct lxc_handler *handler) + ERROR("Failed to run lxc.hook.start-host"); + goto out_delete_net; + } ++#ifdef HAVE_ISULAD ++ /* isulad: Run oci prestart hook at here */ ++ ret = run_oci_hooks(name, "oci-prestart", conf, lxcpath); ++ if (ret < 0) { ++ ERROR("Failed to run oci prestart hooks"); ++ goto out_delete_net; ++ } ++ ++ if (START_TIMEOUT == global_timeout_state) { ++ lxc_write_error_message(conf->errpipe[1], "Starting the container \"%s\" timeout.", name); ++ ERROR("Starting the container \"%s\" timeout.", name); ++ goto out_delete_net; ++ } ++ ++ /* Tell the child to continue its initialization. We'll get ++ * LXC_SYNC_POST_OCI_PRESTART_HOOK when it is ready for us to run oci prestart hooks. ++ */ ++ if (lxc_sync_barrier_child(handler, LXC_SYNC_POST_OCI_PRESTART_HOOK)) ++ goto out_delete_net; ++#endif + + /* Tell the child to complete its initialization and wait for it to exec + * or return an error. (The child will never return +@@ -1859,6 +2396,22 @@ static int lxc_spawn(struct lxc_handler *handler) + if (ret < 0) + goto out_abort; + ++#ifdef HAVE_ISULAD ++ /* isulad: Run oci prestart hook at here */ ++ ret = run_oci_hooks(name, "oci-poststart", conf, lxcpath); ++ if (ret < 0) { ++ ERROR("Failed to run oci poststart hooks"); ++ goto out_abort; ++ } ++ ++ if (START_TIMEOUT == global_timeout_state) { ++ lxc_write_error_message(conf->errpipe[1], "Starting the container \"%s\" timeout.", name); ++ ERROR("Starting the container \"%s\" timeout.", name); ++ goto out_abort; ++ } ++ ++#endif ++ + ret = lxc_set_state(name, handler, RUNNING); + if (ret < 0) { + ERROR("Failed to set state to \"%s\"", lxc_state2str(RUNNING)); +@@ -1883,9 +2436,82 @@ out_sync_fini: + return -1; + } + ++#ifdef HAVE_ISULAD ++/* isulad: start timeout thread function */ ++static void* wait_start_timeout(void *arg) ++{ ++ struct start_timeout_conf *conf = (struct start_timeout_conf *)arg; ++ ++ sem_post(&global_timeout_sem); ++ ++ if (!conf || conf->timeout < 1) ++ goto out; ++ ++ sleep(conf->timeout); ++ ++ global_timeout_state = START_TIMEOUT; ++ ++out: ++ free(conf); ++ return ((void *)0); ++} ++ ++/* isulad: create start timeout thread */ ++static int create_start_timeout_thread(struct lxc_conf *conf, unsigned int start_timeout) ++{ ++ int ret = 0; ++ pthread_t ptid; ++ pthread_attr_t attr; ++ struct start_timeout_conf *timeout_conf = NULL; ++ ++ if (sem_init(&global_timeout_sem, 0, 0)) { ++ ERROR("Failed to init start timeout semaphore");/*lint !e613*/ ++ ret = -1; ++ return ret; ++ } ++ ++ timeout_conf = malloc(sizeof(struct start_timeout_conf)); ++ if (timeout_conf == NULL) { ++ ERROR("Failed to malloc start timeout conf"); ++ ret = -1; ++ goto out; ++ } ++ ++ memset(timeout_conf, 0, sizeof(struct start_timeout_conf)); ++ timeout_conf->errfd = conf->errpipe[1]; ++ timeout_conf->timeout = start_timeout; ++ ++ pthread_attr_init(&attr); ++ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); ++ ret = pthread_create(&ptid, &attr, wait_start_timeout, timeout_conf); ++ if (ret != 0) { ++ ERROR("Create start wait timeout thread failed"); ++ free(timeout_conf); ++ goto out; ++ } ++ ++ sem_wait(&global_timeout_sem); ++out: ++ sem_destroy(&global_timeout_sem); ++ return ret; ++} ++ ++// isulad: send '128 + signal' if container is killed by signal. ++#define EXIT_SIGNAL_OFFSET 128 ++#endif ++ ++ ++#ifdef HAVE_ISULAD ++int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, ++ void *data, const char *lxcpath, bool daemonize, int *error_num, ++ unsigned int start_timeout) ++{ ++ int exit_code; ++#else + int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, + void *data, const char *lxcpath, bool daemonize, int *error_num) + { ++#endif + int ret, status; + const char *name = handler->name; + struct lxc_conf *conf = handler->conf; +@@ -1901,6 +2527,16 @@ int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, + handler->daemonize = daemonize; + cgroup_ops = handler->cgroup_ops; + ++#ifdef HAVE_ISULAD ++ /* isulad: add start timeout limit */ ++ if (start_timeout > 0) { ++ ret = create_start_timeout_thread(conf, start_timeout); ++ if (ret) { ++ ERROR("Failed to create start timeout thread for container \"%s\".", name); ++ goto out_abort; ++ } ++ } ++#endif + if (!attach_block_device(handler->conf)) { + ERROR("Failed to attach block device"); + ret = -1; +@@ -1935,7 +2571,7 @@ int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, + } + INFO("Unshared CLONE_NEWNS"); + +- turn_into_dependent_mounts(); ++ remount_all_slave(); + ret = lxc_setup_rootfs_prepare_root(conf, name, lxcpath); + if (ret < 0) { + ERROR("Error setting up rootfs mount as root before spawn"); +@@ -1959,11 +2595,13 @@ int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, + goto out_delete_network; + } + ++#ifndef HAVE_ISULAD + if (!handler->init_died && handler->pid > 0) { + ERROR("Child process is not killed"); + ret = -1; + goto out_delete_network; + } ++#endif + + status = lxc_wait_for_pid_status(handler->pid); + if (status < 0) +@@ -1973,6 +2611,21 @@ int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, + * reboot. This should mean it was an lxc-execute which simply exited. + * In any case, treat it as a 'halt'. + */ ++#ifdef HAVE_ISULAD ++ // isulad: recored log for container init exit ++ if (WIFSIGNALED(status)) { ++ int signal = WTERMSIG(status); ++ signal = WTERMSIG(status); ++ exit_code = EXIT_SIGNAL_OFFSET + signal; ++ ERROR("Container \"%s\" init exited with signal %d", name, signal); ++ } else if (WIFEXITED(status)) { ++ exit_code = WEXITSTATUS(status); ++ ERROR("Container \"%s\" init exited with status %d", name, exit_code); ++ } else { ++ exit_code = -1; ++ ERROR("Container \"%s\" init exited with unknown status", name); ++ } ++#else + if (WIFSIGNALED(status)) { + switch(WTERMSIG(status)) { + case SIGINT: /* halt */ +@@ -1990,6 +2643,7 @@ int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, + break; + } + } ++#endif + + ret = lxc_restore_phys_nics_to_netns(handler); + if (ret < 0) +@@ -1997,11 +2651,20 @@ int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, + + close_prot_errno_disarm(handler->pinfd); + ++#ifdef HAVE_ISULAD ++ lxc_monitor_send_exit_code(name, exit_code, handler->lxcpath); ++#else + lxc_monitor_send_exit_code(name, status, handler->lxcpath); ++#endif ++ + lxc_error_set_and_log(handler->pid, status); + if (error_num) + *error_num = handler->exit_status; + ++#ifdef HAVE_ISULAD ++ handler->exit_code = exit_code; /* record exit code */ ++#endif ++ + /* These are not the droids you are looking for. */ + __private_goto1: + lxc_delete_network(handler); +@@ -2032,7 +2695,11 @@ struct start_args { + char *const *argv; + }; + ++#ifdef HAVE_ISULAD ++static int start(struct lxc_handler *handler, void* data, int fd) ++#else + static int start(struct lxc_handler *handler, void* data) ++#endif + { + struct start_args *arg = data; + +@@ -2040,6 +2707,9 @@ static int start(struct lxc_handler *handler, void* data) + + execvp(arg->argv[0], arg->argv); + SYSERROR("Failed to exec \"%s\"", arg->argv[0]); ++#ifdef HAVE_ISULAD ++ lxc_write_error_message(fd, "exec: \"%s\": %s.", arg->argv[0], strerror(errno)); ++#endif + return 0; + } + +@@ -2057,14 +2727,18 @@ static struct lxc_operations start_ops = { + }; + + int lxc_start(char *const argv[], struct lxc_handler *handler, +- const char *lxcpath, bool daemonize, int *error_num) ++ const char *lxcpath, bool daemonize, int *error_num, unsigned int start_timeout) + { + struct start_args start_arg = { + .argv = argv, + }; + + TRACE("Doing lxc_start"); ++#ifdef HAVE_ISULAD ++ return __lxc_start(handler, &start_ops, &start_arg, lxcpath, daemonize, error_num, start_timeout); ++#else + return __lxc_start(handler, &start_ops, &start_arg, lxcpath, daemonize, error_num); ++#endif + } + + static void lxc_destroy_container_on_signal(struct lxc_handler *handler, +@@ -2136,3 +2810,261 @@ static bool do_destroy_container(struct lxc_handler *handler) + + return storage_destroy(handler->conf); + } ++ ++#ifdef HAVE_ISULAD ++/*isulad: set env for clean resources */ ++static int clean_resource_set_env(struct lxc_handler *handler) ++{ ++ const char *name = handler->name; ++ struct lxc_conf *conf = handler->conf; ++ char bufstr[PATH_MAX + 1]; ++ int i = 0; ++ int j = 0; ++ int len = 2; //set "LXC_PID" and "LXC_CGNS_AWARE" ++ ++ if (conf == NULL || conf->ocihooks == NULL || conf->ocihooks->poststop_len == 0) { ++ return 0; ++ } ++ ++ if (name) { ++ len++; ++ } ++ if (conf->rcfile) { ++ len++; ++ } ++ if (conf->rootfs.mount) { ++ len++; ++ } ++ if (conf->rootfs.path) { ++ len++; ++ } ++ if (conf->console.path) { ++ len++; ++ } ++ if (conf->console.log_path) { ++ len++; ++ } ++ if (handler->cgroup_ops->container_cgroup) { ++ len++; ++ } ++ ++ for (; i < conf->ocihooks->poststop_len; i++) { ++ size_t cap = conf->ocihooks->poststop[i]->env_len; ++ size_t newcap = cap + len + 1; ++ if (lxc_grow_array((void ***)&(conf->ocihooks->poststop[i]->env), &cap, newcap, 1) != 0) { ++ return -1; ++ } ++ j = conf->ocihooks->poststop[i]->env_len; ++ /* Start of environment variable setup for hooks. */ ++ if (name) { ++ snprintf(bufstr, PATH_MAX + 1, "LXC_NAME=%s", name); ++ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); ++ } ++ if (conf->rcfile) { ++ snprintf(bufstr, PATH_MAX + 1, "LXC_CONFIG_FILE=%s", conf->rcfile); ++ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); ++ } ++ if (conf->rootfs.mount) { ++ snprintf(bufstr, PATH_MAX + 1, "LXC_ROOTFS_MOUNT=%s", conf->rootfs.mount); ++ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); ++ } ++ if (conf->rootfs.path) { ++ snprintf(bufstr, PATH_MAX + 1, "LXC_ROOTFS_PATH=%s", conf->rootfs.path); ++ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); ++ } ++ if (conf->console.path) { ++ snprintf(bufstr, PATH_MAX + 1, "LXC_CONSOLE=%s", conf->console.path); ++ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); ++ } ++ if (conf->console.log_path) { ++ snprintf(bufstr, PATH_MAX + 1, "LXC_CONSOLE_LOGPATH=%s", conf->console.log_path); ++ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); ++ } ++ conf->ocihooks->poststop[i]->env[j++] = safe_strdup("LXC_CGNS_AWARE=1"); ++ ++ snprintf(bufstr, PATH_MAX + 1, "LXC_PID=%d", handler->pid); ++ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); ++ if (handler->cgroup_ops->container_cgroup) { ++ snprintf(bufstr, PATH_MAX + 1, "LXC_CGROUP_PATH=%s", handler->cgroup_ops->container_cgroup); ++ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); ++ } ++ conf->ocihooks->poststop[i]->env_len = j; ++ /* End of environment variable setup for hooks. */ ++ } ++ return 0; ++} ++ ++/*isulad: init handler for clean */ ++static struct lxc_handler *lxc_init_clean_handler(char *name, char *lxcpath, struct lxc_conf *conf, pid_t pid) ++{ ++ int i; ++ struct lxc_handler *handler; ++ ++ handler = malloc(sizeof(*handler)); ++ if (handler == NULL) ++ return NULL; ++ ++ memset(handler, 0, sizeof(*handler)); ++ ++ /* Note that am_guest_unpriv() checks the effective uid. We ++ * probably don't care if we are real root only if we are running ++ * as root so this should be fine. ++ */ ++ handler->am_root = !am_guest_unpriv(); ++ handler->data_sock[0] = handler->data_sock[1] = -1; ++ handler->conf = conf; ++ handler->lxcpath = lxcpath; ++ handler->pinfd = -1; ++ handler->sigfd = -EBADF; ++ handler->pidfd = -EBADF; ++ handler->init_died = false; ++ handler->monitor_status_fd = -EBADF; ++ handler->pid = pid; ++ handler->state_socket_pair[0] = handler->state_socket_pair[1] = -1; ++ if (handler->conf->reboot == REBOOT_NONE) ++ lxc_list_init(&handler->conf->state_clients); ++ ++ for (i = 0; i < LXC_NS_MAX; i++) ++ handler->nsfd[i] = -1; ++ ++ handler->name = name; ++ handler->exit_code = -1; /* isulad: record exit code of container */ ++ ++ handler->cgroup_ops = cgroup_init(conf); ++ if (!handler->cgroup_ops) { ++ ERROR("Failed to initialize cgroup driver"); ++ goto on_error; ++ } ++ ++ INFO("Container \"%s\" 's clean handler is initialized.", name); ++ ++ return handler; ++ ++on_error: ++ lxc_free_handler(handler); ++ ++ return NULL; ++} ++ ++/*isulad: init handler for clean */ ++static struct lxc_handler *lxc_init_pids_handler(char *name, char *lxcpath, struct lxc_conf *conf) ++{ ++ int i; ++ struct lxc_handler *handler; ++ ++ handler = malloc(sizeof(*handler)); ++ if (handler == NULL) ++ return NULL; ++ ++ memset(handler, 0, sizeof(*handler)); ++ ++ /* Note that am_guest_unpriv() checks the effective uid. We ++ * probably don't care if we are real root only if we are running ++ * as root so this should be fine. ++ */ ++ handler->am_root = !am_guest_unpriv(); ++ handler->data_sock[0] = handler->data_sock[1] = -1; ++ handler->conf = conf; ++ handler->lxcpath = lxcpath; ++ handler->pinfd = -1; ++ handler->sigfd = -EBADF; ++ handler->init_died = false; ++ handler->state_socket_pair[0] = handler->state_socket_pair[1] = -1; ++ handler->monitor_status_fd = -EBADF; ++ handler->pidfd = -EBADF; ++ if (handler->conf->reboot == REBOOT_NONE) ++ lxc_list_init(&handler->conf->state_clients); ++ ++ for (i = 0; i < LXC_NS_MAX; i++) ++ handler->nsfd[i] = -1; ++ ++ handler->name = name; ++ handler->exit_code = -1; /* isulad: record exit code of container */ ++ ++ handler->cgroup_ops = cgroup_init(conf); ++ if (!handler->cgroup_ops) { ++ ERROR("Failed to initialize cgroup driver"); ++ goto on_error; ++ } ++ ++ INFO("Container \"%s\" 's clean handler is initialized.", name); ++ ++ return handler; ++ ++on_error: ++ lxc_free_handler(handler); ++ ++ return NULL; ++} ++ ++/*isulad: do_lxcapi_clean_resource */ ++int do_lxcapi_clean_resource(char *name, char *lxcpath, struct lxc_conf *conf, pid_t pid) ++{ ++ int ret = 0; ++ struct lxc_handler *handler = NULL; ++ int retry_count = 0; ++ int max_retry = 10; ++ ++ handler = lxc_init_clean_handler(name, lxcpath, conf, pid); ++ if (!handler) { ++ ERROR("Failed to init container %s clean handler", name); ++ ret = -1; ++ goto out; ++ } ++ ++ if (clean_resource_set_env(handler) != 0) { ++ ERROR("Failed to set env for poststop hooks"); ++ ret = -1; ++ goto out; ++ } ++ ++ if (run_oci_hooks(handler->name, "oci-poststop", handler->conf, handler->lxcpath)) { ++ ERROR("Failed to run lxc.hook.post-stop for container \"%s\".", handler->name); ++ ret = -1; ++ } ++ ++retry: ++ if (!handler->cgroup_ops->payload_destroy(handler->cgroup_ops, handler)) { ++ TRACE("Trying to kill all subprocess"); ++ signal_all_processes(handler); ++ TRACE("Finished kill all subprocess"); ++ if (retry_count < max_retry) { ++ usleep(100 * 1000); /* 100 millisecond */ ++ retry_count++; ++ goto retry; ++ } ++ SYSERROR("Failed to destroy cgroup path for container: \"%s\"", handler->name); ++ ret = -1; ++ } ++ ++out: ++ lxc_free_handler(handler); ++ return ret; ++} ++ ++/*isulad: do_lxcapi_get_pids */ ++int do_lxcapi_get_pids(char *name, char *lxcpath, struct lxc_conf *conf, pid_t **pids,size_t *pids_len) ++{ ++ int ret = 0; ++ struct lxc_handler *handler = NULL; ++ struct cgroup_ops *cg_ops = NULL; ++ ++ handler = lxc_init_pids_handler(name, lxcpath, conf); ++ if (!handler) { ++ ERROR("Failed to init container %s clean handler", name); ++ ret = -1; ++ goto out; ++ } ++ ++ cg_ops = handler->cgroup_ops; ++ ret = get_all_pids(cg_ops, pids, pids_len); ++ if (ret < 0) { ++ WARN("failed to get all pids"); ++ } ++ ++out: ++ lxc_free_handler(handler); ++ return ret; ++} ++ ++#endif +diff --git a/src/lxc/start.h b/src/lxc/start.h +index ece4aac47..ebeeb72ea 100644 +--- a/src/lxc/start.h ++++ b/src/lxc/start.h +@@ -10,7 +10,6 @@ + #include + + #include "conf.h" +-#include "macro.h" + #include "namespace.h" + #include "state.h" + +@@ -124,8 +123,14 @@ struct lxc_handler { + + struct cgroup_ops *cgroup_ops; + +- /* Internal fds that always need to stay open. */ +- int keep_fds[3]; ++#ifdef HAVE_ISULAD ++ int exit_code;/* isulad: record the exit code of container */ ++ /* Indicates whether should we using pipes or pty dup to std{in,out,err} for console log. */ ++ bool disable_pty; ++ /* Indicates whether should we keep stdin active. */ ++ bool open_stdin; ++#endif ++ + }; + + struct execute_args { +@@ -136,7 +141,11 @@ struct execute_args { + }; + + struct lxc_operations { ++#ifdef HAVE_ISULAD ++ int (*start)(struct lxc_handler *, void *, int); ++#else + int (*start)(struct lxc_handler *, void *); ++#endif + int (*post_start)(struct lxc_handler *, void *); + }; + +@@ -147,11 +156,12 @@ extern int lxc_serve_state_clients(const char *name, + struct lxc_handler *handler, + lxc_state_t state); + extern void lxc_abort(struct lxc_handler *handler); +-extern struct lxc_handler *lxc_init_handler(struct lxc_handler *old, +- const char *name, ++extern struct lxc_handler *lxc_init_handler(const char *name, + struct lxc_conf *conf, +- const char *lxcpath, bool daemonize); +-extern void lxc_put_handler(struct lxc_handler *handler); ++ const char *lxcpath, ++ bool daemonize); ++extern void lxc_zero_handler(struct lxc_handler *handler); ++extern void lxc_free_handler(struct lxc_handler *handler); + extern int lxc_init(const char *name, struct lxc_handler *handler); + extern void lxc_end(struct lxc_handler *handler); + +@@ -164,14 +174,23 @@ extern void lxc_end(struct lxc_handler *handler); + */ + extern int lxc_check_inherited(struct lxc_conf *conf, bool closeall, + int *fds_to_ignore, size_t len_fds); +-static inline int inherit_fds(struct lxc_handler *handler, bool closeall) +-{ +- return lxc_check_inherited(handler->conf, closeall, handler->keep_fds, +- ARRAY_SIZE(handler->keep_fds)); +-} ++#ifdef HAVE_ISULAD ++extern int __lxc_start(struct lxc_handler *handler, ++ struct lxc_operations* ops, void *data, const char *lxcpath, ++ bool daemonize, int *error_num, unsigned int start_timeout); ++#else + extern int __lxc_start(struct lxc_handler *, struct lxc_operations *, void *, + const char *, bool, int *); ++#endif + + extern int resolve_clone_flags(struct lxc_handler *handler); + ++#ifdef HAVE_ISULAD ++/*isulad: do_lxcapi_clean_resource */ ++extern int do_lxcapi_clean_resource(char *name, char *lxcpath, struct lxc_conf *conf, pid_t pid); ++ ++/*isulad: do_lxcapi_get_pids */ ++extern int do_lxcapi_get_pids(char *name, char *lxcpath, struct lxc_conf *conf, pid_t **pids,size_t *pids_len); ++#endif ++ + #endif +diff --git a/src/lxc/storage/block.c b/src/lxc/storage/block.c +new file mode 100644 +index 000000000..eb75e7065 +--- /dev/null ++++ b/src/lxc/storage/block.c +@@ -0,0 +1,86 @@ ++/* ++ * lxc: linux Container library ++ * ++ * (C) Copyright IBM Corp. 2007, 2008 ++ * ++ * Authors: ++ * Daniel Lezcano ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef _GNU_SOURCE ++#define _GNU_SOURCE 1 ++#endif ++#include ++#include ++ ++#include "config.h" ++#include "log.h" ++#include "storage.h" ++#include "storage_utils.h" ++#include "utils.h" ++ ++lxc_log_define(blk, lxc); ++ ++int blk_destroy(struct lxc_storage *orig) ++{ ++ return 0; ++} ++ ++bool blk_detect(const char *path) ++{ ++ struct stat statbuf; ++ int ret; ++ ++ if (!strncmp(path, "blk:", 4)) ++ return true; ++ ++ ret = stat(path, &statbuf); ++ if (ret == -1 && errno == EPERM) { ++ SYSERROR("blk_detect: failed to look at \"%s\"", path); ++ return false; ++ } ++ ++ if (ret == 0 && S_ISBLK(statbuf.st_mode)) ++ return true; ++ ++ return false; ++} ++ ++int blk_mount(struct lxc_storage *bdev) ++{ ++ const char *src; ++ if (strcmp(bdev->type, "blk")) ++ return -22; ++ ++ if (!bdev->src || !bdev->dest) ++ return -22; ++ ++ src = lxc_storage_get_path(bdev->src, bdev->type); ++ ++ return mount_unknown_fs(src, bdev->dest, bdev->mntopts); ++} ++ ++int blk_umount(struct lxc_storage *bdev) ++{ ++ if (strcmp(bdev->type, "blk")) ++ return -22; ++ ++ if (!bdev->src || !bdev->dest) ++ return -22; ++ ++ return umount(bdev->dest); ++} +diff --git a/src/lxc/storage/block.h b/src/lxc/storage/block.h +new file mode 100644 +index 000000000..2fa7565fb +--- /dev/null ++++ b/src/lxc/storage/block.h +@@ -0,0 +1,41 @@ ++/* ++ * lxc: linux Container library ++ * ++ * (C) Copyright IBM Corp. 2007, 2008 ++ * ++ * Authors: ++ * Daniel Lezcano ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef __LXC_BLK_H ++#define __LXC_BLK_H ++ ++#include ++#include ++ ++struct lxc_storage; ++ ++struct bdev_specs; ++ ++struct lxc_conf; ++ ++extern int blk_destroy(struct lxc_storage *orig); ++extern bool blk_detect(const char *path); ++extern int blk_mount(struct lxc_storage *bdev); ++extern int blk_umount(struct lxc_storage *bdev); ++ ++#endif /* __LXC_BLK_H */ +diff --git a/src/lxc/storage/btrfs.c b/src/lxc/storage/btrfs.c +index 92a4a6def..069a9dd84 100644 +--- a/src/lxc/storage/btrfs.c ++++ b/src/lxc/storage/btrfs.c +@@ -197,16 +197,27 @@ int btrfs_mount(struct lxc_storage *bdev) + const char *src; + int ret; + ++#ifdef HAVE_ISULAD ++ unsigned long pflags = 0; ++#endif ++ + if (strcmp(bdev->type, "btrfs")) + return -22; + + if (!bdev->src || !bdev->dest) + return -22; + ++#ifdef HAVE_ISULAD ++ if (parse_mntopts(bdev->mntopts, &mntflags, &pflags, &mntdata) < 0) { ++ free(mntdata); ++ return -22; ++ } ++#else + if (parse_mntopts(bdev->mntopts, &mntflags, &mntdata) < 0) { + free(mntdata); + return -22; + } ++#endif + + src = lxc_storage_get_path(bdev->src, "btrfs"); + +diff --git a/src/lxc/storage/dir.c b/src/lxc/storage/dir.c +index 18a10a42f..485572a0b 100644 +--- a/src/lxc/storage/dir.c ++++ b/src/lxc/storage/dir.c +@@ -94,6 +94,9 @@ int dir_create(struct lxc_storage *bdev, const char *dest, const char *n, + + int dir_destroy(struct lxc_storage *orig) + { ++#ifdef HAVE_ISULAD ++ // isulad: do not destroy rootfs for directory, it should be managed by caller ++#else + int ret; + const char *src; + +@@ -102,6 +105,7 @@ int dir_destroy(struct lxc_storage *orig) + ret = lxc_rmdir_onedev(src, NULL); + if (ret < 0) + return log_error_errno(ret, errno, "Failed to delete \"%s\"", src); ++#endif + + return 0; + } +@@ -124,6 +128,35 @@ bool dir_detect(const char *path) + return false; + } + ++#ifdef HAVE_ISULAD ++int dir_mount(struct lxc_storage *bdev) ++{ ++ __do_free char *mntdata = NULL; ++ unsigned long mntflags = 0, pflags = 0; ++ int ret; ++ const char *src; ++ ++ if (strcmp(bdev->type, "dir")) ++ return -22; ++ ++ if (!bdev->src || !bdev->dest) ++ return -22; ++ ++ ret = parse_mntopts(bdev->mntopts, &mntflags, &pflags, &mntdata); ++ if (ret < 0) ++ return log_error_errno(ret, errno, "Failed to parse mount options \"%s\"", bdev->mntopts); ++ ++ src = lxc_storage_get_path(bdev->src, bdev->type); ++ ++ ret = mount(src, bdev->dest, "bind", MS_BIND | MS_REC | (mntflags & ~MS_RDONLY) | pflags, mntdata); ++ if (ret < 0) { ++ return log_error_errno(-errno, errno, "Failed to mount \"%s\" on \"%s\"", src, bdev->dest); ++ } ++ TRACE("Mounted \"%s\" on \"%s\"", src, bdev->dest); ++ ++ return 0; ++} ++#else + int dir_mount(struct lxc_storage *bdev) + { + __do_free char *mntdata = NULL; +@@ -161,11 +194,12 @@ int dir_mount(struct lxc_storage *bdev) + DEBUG("Remounted \"%s\" on \"%s\" read-only with options \"%s\", mount flags \"%lu\", and propagation flags \"%lu\"", + src ? src : "(none)", bdev->dest ? bdev->dest : "(none)", mntdata, mflags, pflags); + } +- + TRACE("Mounted \"%s\" on \"%s\" with options \"%s\", mount flags \"%lu\", and propagation flags \"%lu\"", + src ? src : "(none)", bdev->dest ? bdev->dest : "(none)", mntdata, mflags, pflags); ++ + return 0; + } ++#endif + + int dir_umount(struct lxc_storage *bdev) + { +diff --git a/src/lxc/storage/loop.c b/src/lxc/storage/loop.c +index eebc1b67c..345be503b 100644 +--- a/src/lxc/storage/loop.c ++++ b/src/lxc/storage/loop.c +@@ -21,6 +21,7 @@ + #include "memory_utils.h" + #include "storage.h" + #include "storage_utils.h" ++#include "lxclock.h" + #include "utils.h" + + lxc_log_define(loop, lxc); +@@ -216,9 +217,11 @@ bool loop_detect(const char *path) + + int loop_mount(struct lxc_storage *bdev) + { +- int ret, loopfd; ++ int ret = 0; ++ int loopfd, lret; + char loname[PATH_MAX]; + const char *src; ++ struct lxc_lock *l = NULL; + + if (strcmp(bdev->type, "loop")) + return -22; +@@ -226,13 +229,29 @@ int loop_mount(struct lxc_storage *bdev) + if (!bdev->src || !bdev->dest) + return -22; + ++ /* isulad: do lock before mount, so we can avoid use loop which is used by ++ * other starting contianers */ ++ l = lxc_newlock("mount_lock", "mount_lock"); ++ if (!l) { ++ SYSERROR("create file lock error when mount fs"); ++ return -1; ++ } ++ ++ lret = lxclock(l, 0); ++ if (lret) { ++ SYSERROR("try to lock failed when mount fs"); ++ ret = -1; ++ goto out; ++ } ++ + /* skip prefix */ + src = lxc_storage_get_path(bdev->src, bdev->type); + + loopfd = lxc_prepare_loop_dev(src, loname, LO_FLAGS_AUTOCLEAR); + if (loopfd < 0) { + ERROR("Failed to prepare loop device for loop file \"%s\"", src); +- return -1; ++ ret = -1; ++ goto out; + } + DEBUG("Prepared loop device \"%s\"", loname); + +@@ -241,14 +260,21 @@ int loop_mount(struct lxc_storage *bdev) + ERROR("Failed to mount rootfs \"%s\" on \"%s\" via loop device \"%s\"", + bdev->src, bdev->dest, loname); + close(loopfd); +- return -1; ++ ret = -1; ++ goto out; + } + + bdev->lofd = loopfd; + DEBUG("Mounted rootfs \"%s\" on \"%s\" via loop device \"%s\"", + bdev->src, bdev->dest, loname); +- +- return 0; ++out: ++ lret = lxcunlock(l); ++ if (lret) { ++ SYSERROR("try to unlock failed when mount fs"); ++ ret = -1; ++ } ++ lxc_putlock(l); ++ return ret; + } + + int loop_umount(struct lxc_storage *bdev) +diff --git a/src/lxc/storage/overlay.c b/src/lxc/storage/overlay.c +index 770785cfd..75a81de15 100644 +--- a/src/lxc/storage/overlay.c ++++ b/src/lxc/storage/overlay.c +@@ -349,6 +349,9 @@ int ovl_mount(struct lxc_storage *bdev) + char *work, *lastslash; + size_t len, len2; + int ret, ret2; ++#ifdef HAVE_ISULAD ++ unsigned long pflags = 0; ++#endif + + if (strcmp(bdev->type, "overlay") && strcmp(bdev->type, "overlayfs")) + return -22; +@@ -414,7 +417,12 @@ int ovl_mount(struct lxc_storage *bdev) + work = must_make_path(upper, LXC_OVERLAY_WORK_DIR, NULL); + upper[lastslash - upper] = '/'; + ++#ifdef HAVE_ISULAD ++ ret = parse_mntopts(bdev->mntopts, &mntflags, &pflags, &mntdata); ++#else + ret = parse_mntopts(bdev->mntopts, &mntflags, &mntdata); ++#endif ++ + if (ret < 0) { + ERROR("Failed to parse mount options"); + free(mntdata); +diff --git a/src/lxc/storage/rsync.c b/src/lxc/storage/rsync.c +index 2e4df2537..97678dea2 100644 +--- a/src/lxc/storage/rsync.c ++++ b/src/lxc/storage/rsync.c +@@ -78,8 +78,12 @@ int lxc_rsync(struct rsync_data *data) + return -1; + } + +- if (detect_shared_rootfs() && mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL)) +- SYSERROR("Failed to recursively turn root mount tree into dependent mount"); ++ ret = detect_shared_rootfs(); ++ if (ret) { ++ ret = mount(NULL, "/", NULL, MS_SLAVE|MS_REC, NULL); ++ if (ret < 0) ++ SYSERROR("Failed to make \"/\" a slave mount"); ++ } + + ret = orig->ops->mount(orig); + if (ret < 0) { +diff --git a/src/lxc/storage/storage.c b/src/lxc/storage/storage.c +index 3f1b713f6..5291b244b 100644 +--- a/src/lxc/storage/storage.c ++++ b/src/lxc/storage/storage.c +@@ -41,6 +41,7 @@ + #include "storage_utils.h" + #include "utils.h" + #include "zfs.h" ++#include "block.h" + + #ifndef HAVE_STRLCPY + #include "include/strlcpy.h" +@@ -94,6 +95,22 @@ static const struct lxc_storage_ops loop_ops = { + .can_backup = true, + }; + ++#ifdef HAVE_ISULAD ++/* block */ ++static const struct lxc_storage_ops blk_ops = { ++ .detect = &blk_detect, ++ .mount = &blk_mount, ++ .umount = &blk_umount, ++ .clone_paths = NULL, ++ .destroy = &blk_destroy, ++ .create = NULL, ++ .copy = NULL, ++ .snapshot = NULL, ++ .can_snapshot = false, ++ .can_backup = true, ++}; ++#endif ++ + /* lvm */ + static const struct lxc_storage_ops lvm_ops = { + .detect = &lvm_detect, +@@ -179,6 +196,10 @@ static const struct lxc_storage_type bdevs[] = { + { .name = "overlayfs", .ops = &ovl_ops, }, + { .name = "loop", .ops = &loop_ops, }, + { .name = "nbd", .ops = &nbd_ops, }, ++#ifdef HAVE_ISULAD ++ //isulad: block device ++ { .name = "blk", .ops = &blk_ops, } ++#endif + }; + + static const size_t numbdevs = sizeof(bdevs) / sizeof(struct lxc_storage_type); +@@ -570,9 +591,15 @@ bool storage_destroy(struct lxc_conf *conf) + int destroy_rv = 0; + + r = storage_init(conf); ++#ifdef HAVE_ISULAD ++ if (r == NULL) { ++ WARN("%s 's storage init failed, the storage may be deleted already", conf->name); ++ return true; ++ } ++#else + if (!r) + return ret; +- ++#endif + destroy_rv = r->ops->destroy(r); + if (destroy_rv == 0) + ret = true; +diff --git a/src/lxc/storage/storage_utils.c b/src/lxc/storage/storage_utils.c +index f96bd520b..6fec638ea 100644 +--- a/src/lxc/storage/storage_utils.c ++++ b/src/lxc/storage/storage_utils.c +@@ -165,8 +165,11 @@ int detect_fs(struct lxc_storage *bdev, char *type, int len) + if (unshare(CLONE_NEWNS) < 0) + _exit(EXIT_FAILURE); + +- if (detect_shared_rootfs() && mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL)) +- SYSERROR("Failed to recursively turn root mount tree into dependent mount. Continuing..."); ++ if (detect_shared_rootfs()) ++ if (mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL)) { ++ SYSERROR("Failed to make / rslave"); ++ ERROR("Continuing..."); ++ } + + ret = mount_unknown_fs(srcdev, bdev->dest, bdev->mntopts); + if (ret < 0) { +@@ -256,10 +259,14 @@ int is_blktype(struct lxc_storage *b) + return 0; + } + ++// isulad: recored error ++static char **mount_errors = NULL; ++ + int mount_unknown_fs(const char *rootfs, const char *target, + const char *options) + { + size_t i; ++ char *errs = NULL; + int ret; + struct cbarg { + const char *rootfs; +@@ -288,15 +295,30 @@ int mount_unknown_fs(const char *rootfs, const char *target, + ret = lxc_file_for_each_line(fsfile[i], find_fstype_cb, &cbarg); + if (ret < 0) { + ERROR("Failed to parse \"%s\"", fsfile[i]); ++ lxc_free_array((void**)mount_errors, free); ++ mount_errors = NULL; + return -1; + } + +- if (ret) ++ if (ret) { ++ lxc_free_array((void**)mount_errors, free); ++ mount_errors = NULL; + return 0; ++ } + } + +- ERROR("Failed to determine FSType for \"%s\"", rootfs); ++ if (mount_errors != NULL) { ++ errs = lxc_string_join("\n", (const char **)mount_errors, false); ++ if (errs == NULL) { ++ ERROR("failed to join mount errors"); ++ } ++ } + ++ ERROR("Failed to determine FSType for \"%s\": %s", rootfs, errs ? errs : "unknown reason"); ++ ++ free(errs); ++ lxc_free_array((void**)mount_errors, free); ++ mount_errors = NULL; + return -1; + } + +@@ -315,6 +337,12 @@ int find_fstype_cb(char *buffer, void *data) + unsigned long mntflags = 0; + char *mntdata = NULL; + char *fstype; ++ char mount_err[BUFSIZ] = {0}; ++ int ret; ++ ++#ifdef HAVE_ISULAD ++ unsigned long pflags = 0; ++#endif + + /* we don't try 'nodev' entries */ + if (strstr(buffer, "nodev")) +@@ -327,14 +355,34 @@ int find_fstype_cb(char *buffer, void *data) + DEBUG("Trying to mount \"%s\"->\"%s\" with FSType \"%s\"", cbarg->rootfs, + cbarg->target, fstype); + ++#ifdef HAVE_ISULAD ++ if (parse_mntopts(cbarg->options, &mntflags, &pflags, &mntdata) < 0) { ++ free(mntdata); ++ return 0; ++ } ++ ++ if (mount(cbarg->rootfs, cbarg->target, fstype, (mntflags & ~MS_RDONLY), mntdata)) { ++#else + if (parse_mntopts(cbarg->options, &mntflags, &mntdata) < 0) { + free(mntdata); + return 0; + } + + if (mount(cbarg->rootfs, cbarg->target, fstype, mntflags, mntdata)) { ++#endif + SYSDEBUG("Failed to mount"); + free(mntdata); ++ // isulad: recored error ++ ret = snprintf(mount_err, BUFSIZ, "\t\tmount %s onto %s with FSType %s failed: %s", ++ cbarg->rootfs, cbarg->target, fstype, strerror(errno)); ++ if (ret < 0 || (size_t)ret >= BUFSIZ) { ++ ERROR("failed to format output mount error"); ++ return 0; ++ } ++ ++ if (lxc_append_string(&mount_errors, mount_err) < 0) { ++ ERROR("failed to append mount error"); ++ } + return 0; + } + +diff --git a/src/lxc/storage/zfs.c b/src/lxc/storage/zfs.c +index ee9e32d0a..025cf956f 100644 +--- a/src/lxc/storage/zfs.c ++++ b/src/lxc/storage/zfs.c +@@ -159,23 +159,33 @@ bool zfs_detect(const char *path) + + int zfs_mount(struct lxc_storage *bdev) + { +- __do_free char *mntdata = NULL; + unsigned long mntflags = 0; ++ char *mntdata = NULL; + int ret; + size_t oldlen, newlen, totallen; + char *tmp; + const char *src; + char cmd_output[PATH_MAX] = {0}; + ++#ifdef HAVE_ISULAD ++ unsigned long pflags = 0; ++#endif ++ + if (strcmp(bdev->type, "zfs")) + return -22; + + if (!bdev->src || !bdev->dest) + return -22; + ++#ifdef HAVE_ISULAD ++ ret = parse_mntopts(bdev->mntopts, &mntflags, &pflags, &mntdata); ++#else + ret = parse_mntopts(bdev->mntopts, &mntflags, &mntdata); ++#endif ++ + if (ret < 0) { + ERROR("Failed to parse mount options"); ++ free(mntdata); + return -22; + } + +@@ -220,6 +230,7 @@ int zfs_mount(struct lxc_storage *bdev) + tmp = realloc(mntdata, totallen); + if (!tmp) { + ERROR("Failed to reallocate memory"); ++ free(mntdata); + return -1; + } + mntdata = tmp; +@@ -227,10 +238,12 @@ int zfs_mount(struct lxc_storage *bdev) + ret = snprintf((mntdata + oldlen), newlen, ",zfsutil,mntpoint=%s", src); + if (ret < 0 || (size_t)ret >= newlen) { + ERROR("Failed to create string"); ++ free(mntdata); + return -1; + } + + ret = mount(src, bdev->dest, "zfs", mntflags, mntdata); ++ free(mntdata); + if (ret < 0 && errno != EBUSY) { + SYSERROR("Failed to mount \"%s\" on \"%s\"", src, bdev->dest); + return -1; +diff --git a/src/lxc/string_utils.c b/src/lxc/string_utils.c +index dcb1160e4..9118add02 100644 +--- a/src/lxc/string_utils.c ++++ b/src/lxc/string_utils.c +@@ -501,6 +501,7 @@ int lxc_grow_array(void ***array, size_t *capacity, size_t new_size, size_t capa + /* first time around, catch some trivial mistakes of the user + * only initializing one of these */ + if (!*array || !*capacity) { ++ free(*array); + *array = NULL; + *capacity = 0; + } +diff --git a/src/lxc/sync.h b/src/lxc/sync.h +index ff7a1eb18..56c1dfcfd 100644 +--- a/src/lxc/sync.h ++++ b/src/lxc/sync.h +@@ -11,6 +11,10 @@ enum { + LXC_SYNC_POST_CONFIGURE, + LXC_SYNC_CGROUP, + LXC_SYNC_CGROUP_UNSHARE, ++#ifdef HAVE_ISULAD ++ LXC_SYNC_OCI_PRESTART_HOOK, ++ LXC_SYNC_POST_OCI_PRESTART_HOOK, ++#endif + LXC_SYNC_CGROUP_LIMITS, + LXC_SYNC_READY_START, + LXC_SYNC_RESTART, +diff --git a/src/lxc/syscall_numbers.h b/src/lxc/syscall_numbers.h +index bfd0e57ab..42609d43f 100644 +--- a/src/lxc/syscall_numbers.h ++++ b/src/lxc/syscall_numbers.h +@@ -35,12 +35,10 @@ + #define __NR_keyctl 280 + #elif defined __powerpc__ + #define __NR_keyctl 271 +- #elif defined __riscv +- #define __NR_keyctl 219 + #elif defined __sparc__ + #define __NR_keyctl 283 + #elif defined __ia64__ +- #define __NR_keyctl (249 + 1024) ++ #define __NR_keyctl 249 + #elif defined _MIPS_SIM + #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ + #define __NR_keyctl 4282 +@@ -70,8 +68,6 @@ + #define __NR_memfd_create 350 + #elif defined __powerpc__ + #define __NR_memfd_create 360 +- #elif defined __riscv +- #define __NR_memfd_create 279 + #elif defined __sparc__ + #define __NR_memfd_create 348 + #elif defined __blackfin__ +@@ -107,12 +103,10 @@ + #define __NR_pivot_root 217 + #elif defined __powerpc__ + #define __NR_pivot_root 203 +- #elif defined __riscv +- #define __NR_pivot_root 41 + #elif defined __sparc__ + #define __NR_pivot_root 146 + #elif defined __ia64__ +- #define __NR_pivot_root (183 + 1024) ++ #define __NR_pivot_root 183 + #elif defined _MIPS_SIM + #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ + #define __NR_pivot_root 4216 +@@ -142,12 +136,10 @@ + #define __NR_setns 339 + #elif defined __powerpc__ + #define __NR_setns 350 +- #elif defined __riscv +- #define __NR_setns 268 + #elif defined __sparc__ + #define __NR_setns 337 + #elif defined __ia64__ +- #define __NR_setns (306 + 1024) ++ #define __NR_setns 306 + #elif defined _MIPS_SIM + #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ + #define __NR_setns 4344 +@@ -177,12 +169,10 @@ + #define __NR_sethostname 74 + #elif defined __powerpc__ + #define __NR_sethostname 74 +- #elif defined __riscv +- #define __NR_sethostname 161 + #elif defined __sparc__ + #define __NR_sethostname 88 + #elif defined __ia64__ +- #define __NR_sethostname (59 + 1024) ++ #define __NR_sethostname 59 + #elif defined _MIPS_SIM + #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ + #define __NR_sethostname 474 +@@ -212,12 +202,10 @@ + #define __NR_signalfd 316 + #elif defined __powerpc__ + #define __NR_signalfd 305 +- #elif defined __riscv +- #define __NR_signalfd 74 + #elif defined __sparc__ + #define __NR_signalfd 311 + #elif defined __ia64__ +- #define __NR_signalfd (283 + 1024) ++ #define __NR_signalfd 283 + #elif defined _MIPS_SIM + #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ + #define __NR_signalfd 4317 +@@ -247,12 +235,10 @@ + #define __NR_signalfd4 322 + #elif defined __powerpc__ + #define __NR_signalfd4 313 +- #elif defined __riscv +- #define __NR_signalfd4 74 + #elif defined __sparc__ + #define __NR_signalfd4 317 + #elif defined __ia64__ +- #define __NR_signalfd4 (289 + 1024) ++ #define __NR_signalfd4 289 + #elif defined _MIPS_SIM + #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ + #define __NR_signalfd4 4324 +@@ -282,12 +268,10 @@ + #define __NR_unshare 303 + #elif defined __powerpc__ + #define __NR_unshare 282 +- #elif defined __riscv +- #define __NR_unshare 97 + #elif defined __sparc__ + #define __NR_unshare 299 + #elif defined __ia64__ +- #define __NR_unshare (272 + 1024) ++ #define __NR_unshare 272 + #elif defined _MIPS_SIM + #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ + #define __NR_unshare 4303 +@@ -317,12 +301,10 @@ + #define __NR_bpf 351 + #elif defined __powerpc__ + #define __NR_bpf 361 +- #elif defined __riscv +- #define __NR_bpf 280 + #elif defined __sparc__ + #define __NR_bpf 349 + #elif defined __ia64__ +- #define __NR_bpf (317 + 1024) ++ #define __NR_bpf 317 + #elif defined _MIPS_SIM + #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ + #define __NR_bpf 4355 +@@ -352,12 +334,10 @@ + #define __NR_faccessat 300 + #elif defined __powerpc__ + #define __NR_faccessat 298 +- #elif defined __riscv +- #define __NR_faccessat 48 + #elif defined __sparc__ + #define __NR_faccessat 296 + #elif defined __ia64__ +- #define __NR_faccessat (269 + 1024) ++ #define __NR_faccessat 269 + #elif defined _MIPS_SIM + #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ + #define __NR_faccessat 4300 +@@ -387,8 +367,6 @@ + #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */ + #define __NR_pidfd_send_signal 5424 + #endif +- #elif defined __ia64__ +- #define __NR_pidfd_send_signal (424 + 1024) + #else + #define __NR_pidfd_send_signal 424 + #endif +@@ -407,12 +385,10 @@ + #define __NR_seccomp 348 + #elif defined __powerpc__ + #define __NR_seccomp 358 +- #elif defined __riscv +- #define __NR_seccomp 277 + #elif defined __sparc__ + #define __NR_seccomp 346 + #elif defined __ia64__ +- #define __NR_seccomp (329 + 1024) ++ #define __NR_seccomp 329 + #elif defined _MIPS_SIM + #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ + #define __NR_seccomp 4352 +@@ -442,12 +418,10 @@ + #define __NR_gettid 236 + #elif defined __powerpc__ + #define __NR_gettid 207 +- #elif defined __riscv +- #define __NR_gettid 178 + #elif defined __sparc__ + #define __NR_gettid 143 + #elif defined __ia64__ +- #define __NR_gettid (81 + 1024) ++ #define __NR_gettid 81 + #elif defined _MIPS_SIM + #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ + #define __NR_gettid 4222 +@@ -481,12 +455,10 @@ + #define __NR_execveat 354 + #elif defined __powerpc__ + #define __NR_execveat 362 +- #elif defined __riscv +- #define __NR_execveat 281 + #elif defined __sparc__ + #define __NR_execveat 350 + #elif defined __ia64__ +- #define __NR_execveat (318 + 1024) ++ #define __NR_execveat 318 + #elif defined _MIPS_SIM + #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ + #define __NR_execveat 4356 +@@ -503,64 +475,4 @@ + #endif + #endif + +-#ifndef __NR_move_mount +- #if defined __alpha__ +- #define __NR_move_mount 539 +- #elif defined _MIPS_SIM +- #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ +- #define __NR_move_mount 4429 +- #endif +- #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */ +- #define __NR_move_mount 6429 +- #endif +- #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */ +- #define __NR_move_mount 5429 +- #endif +- #elif defined __ia64__ +- #define __NR_move_mount (428 + 1024) +- #else +- #define __NR_move_mount 429 +- #endif +-#endif +- +-#ifndef __NR_open_tree +- #if defined __alpha__ +- #define __NR_open_tree 538 +- #elif defined _MIPS_SIM +- #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ +- #define __NR_open_tree 4428 +- #endif +- #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */ +- #define __NR_open_tree 6428 +- #endif +- #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */ +- #define __NR_open_tree 5428 +- #endif +- #elif defined __ia64__ +- #define __NR_open_tree (428 + 1024) +- #else +- #define __NR_open_tree 428 +- #endif +-#endif +- +-#ifndef __NR_clone3 +- #if defined __alpha__ +- #define __NR_clone3 545 +- #elif defined _MIPS_SIM +- #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ +- #define __NR_clone3 4435 +- #endif +- #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */ +- #define __NR_clone3 6435 +- #endif +- #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */ +- #define __NR_clone3 5435 +- #endif +- #elif defined __ia64__ +- #define __NR_clone3 (435 + 1024) +- #else +- #define __NR_clone3 435 +- #endif +-#endif +- + #endif /* __LXC_SYSCALL_NUMBERS_H */ +diff --git a/src/lxc/syscall_wrappers.h b/src/lxc/syscall_wrappers.h +index 041daf357..1cef21585 100644 +--- a/src/lxc/syscall_wrappers.h ++++ b/src/lxc/syscall_wrappers.h +@@ -137,28 +137,4 @@ static int faccessat(int __fd, const char *__file, int __type, int __flag) + } + #endif + +-#ifndef HAVE_MOVE_MOUNT +-static inline int move_mount_lxc(int from_dfd, const char *from_pathname, +- int to_dfd, const char *to_pathname, +- unsigned int flags) +-{ +- return syscall(__NR_move_mount, from_dfd, from_pathname, to_dfd, +- to_pathname, flags); +-} +-#define move_mount move_mount_lxc +-#else +-extern int move_mount(int from_dfd, const char *from_pathname, int to_dfd, +- const char *to_pathname, unsigned int flags); +-#endif +- +-#ifndef HAVE_OPEN_TREE +-static inline int open_tree_lxc(int dfd, const char *filename, unsigned int flags) +-{ +- return syscall(__NR_open_tree, dfd, filename, flags); +-} +-#define open_tree open_tree_lxc +-#else +-extern int open_tree(int dfd, const char *filename, unsigned int flags); +-#endif +- + #endif /* __LXC_SYSCALL_WRAPPER_H */ +diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c +index e58db5c46..7441de791 100644 +--- a/src/lxc/terminal.c ++++ b/src/lxc/terminal.c +@@ -28,6 +28,10 @@ + #include "syscall_wrappers.h" + #include "terminal.h" + #include "utils.h" ++#ifdef HAVE_ISULAD ++#include "logger_json_file.h" ++#include "include/strlcpy.h" ++#endif + + #if HAVE_PTY_H + #include +@@ -65,7 +69,7 @@ void lxc_terminal_winsz(int srcfd, int dstfd) + + static void lxc_terminal_winch(struct lxc_terminal_state *ts) + { +- lxc_terminal_winsz(ts->stdinfd, ts->ptmxfd); ++ lxc_terminal_winsz(ts->stdinfd, ts->masterfd); + } + + int lxc_terminal_signalfd_cb(int fd, uint32_t events, void *cbdata, +@@ -105,7 +109,7 @@ struct lxc_terminal_state *lxc_terminal_signal_init(int srcfd, int dstfd) + + memset(ts, 0, sizeof(*ts)); + ts->stdinfd = srcfd; +- ts->ptmxfd = dstfd; ++ ts->masterfd = dstfd; + ts->sigfd = -1; + + ret = sigemptyset(&mask); +@@ -183,6 +187,69 @@ static int lxc_terminal_truncate_log_file(struct lxc_terminal *terminal) + return lxc_unpriv(ftruncate(terminal->log_fd, 0)); + } + ++#ifdef HAVE_ISULAD ++ ++int lxc_set_terminal_winsz(struct lxc_terminal *terminal, unsigned int height, unsigned int width) ++{ ++ int ret = 0; ++ struct winsize wsz; ++ ++ if (terminal->master < 0) { ++ return 0; ++ } ++ ++ ret = ioctl(terminal->master, TIOCGWINSZ, &wsz); ++ if (ret < 0) { ++ WARN("Failed to get window size"); ++ return -1; ++ } ++ wsz.ws_col = width; ++ wsz.ws_row = height; ++ ++ ret = ioctl(terminal->master, TIOCSWINSZ, &wsz); ++ if (ret < 0) ++ WARN("Failed to set window size"); ++ else ++ DEBUG("Set window size to %d columns and %d rows", wsz.ws_col, ++ wsz.ws_row); ++ return ret; ++} ++ ++/* ++ * isulad: support mult-logfiles ++ * */ ++static int lxc_terminal_rename_old_log_file(struct lxc_terminal *terminal) ++{ ++ int ret; ++ unsigned int i; ++ char tmp[PATH_MAX] = {0}; ++ char *rename_fname = NULL; ++ ++ for (i = terminal->log_rotate - 1; i > 1; i--) { ++ ret = snprintf(tmp, PATH_MAX, "%s.%u", terminal->log_path, i); ++ if (ret < 0 || ret >= PATH_MAX) { ++ free(rename_fname); ++ return -EFBIG; ++ } ++ free(rename_fname); ++ rename_fname = safe_strdup(tmp); ++ ret = snprintf(tmp, PATH_MAX, "%s.%u", terminal->log_path, (i - 1)); ++ if (ret < 0 || ret >= PATH_MAX) { ++ free(rename_fname); ++ return -EFBIG; ++ } ++ ret = lxc_unpriv(rename(tmp, rename_fname)); ++ if (ret < 0 && errno != ENOENT) { ++ free(rename_fname); ++ return ret; ++ } ++ } ++ ++ free(rename_fname); ++ return 0; ++} ++#endif ++ + static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) + { + __do_free char *tmp = NULL; +@@ -196,6 +263,15 @@ static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) + if (terminal->log_fd < 0) + return -EBADF; + ++#ifdef HAVE_ISULAD ++ /* isuald: rotate old log file first */ ++ ret = lxc_terminal_rename_old_log_file(terminal); ++ if(ret != 0) { ++ ERROR("Rename old log file failed"); ++ return ret; ++ } ++#endif ++ + len = strlen(terminal->log_path) + sizeof(".1"); + tmp = must_realloc(NULL, len); + +@@ -212,6 +288,7 @@ static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) + return lxc_terminal_create_log_file(terminal); + } + ++#ifndef HAVE_ISULAD + static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, char *buf, + int bytes_read) + { +@@ -317,7 +394,456 @@ static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, char *buf, + bytes_read -= ret; + return bytes_read; + } ++#endif ++ ++#ifdef HAVE_ISULAD ++/* get time buffer */ ++static bool get_time_buffer(struct timespec *timestamp, char *timebuffer, ++ size_t maxsize) ++{ ++ struct tm tm_utc = { 0 }; ++ int32_t nanos = 0; ++ time_t seconds; ++ size_t len = 0; ++ int ret = 0; ++ ++ if (!timebuffer || !maxsize) { ++ return false; ++ } ++ ++ seconds = (time_t)timestamp->tv_sec; ++ gmtime_r(&seconds, &tm_utc); ++ strftime(timebuffer, maxsize, "%Y-%m-%dT%H:%M:%S", &tm_utc); ++ ++ nanos = (int32_t)timestamp->tv_nsec; ++ len = strlen(timebuffer); ++ ret = snprintf(timebuffer + len, (maxsize - len), ".%09dZ", nanos); ++ if (ret < 0 || ret >= (maxsize - len)) { ++ return false; ++ } ++ ++ return true; ++} ++ ++/* get now time buffer */ ++static bool get_now_time_buffer(char *timebuffer, size_t maxsize) ++{ ++ int err = 0; ++ struct timespec ts; ++ ++ err = clock_gettime(CLOCK_REALTIME, &ts); ++ if (err != 0) { ++ ERROR("failed to get time"); ++ return false; ++ } ++ ++ return get_time_buffer(&ts, timebuffer, maxsize); ++} ++ ++static int isulad_lxc_terminal_rotate_write_data(struct lxc_terminal *terminal, const char *buf, ++ int bytes_read) ++{ ++ int ret; ++ struct stat st; ++ int64_t space_left = -1; ++ ++ if (terminal->log_fd < 0) ++ return 0; ++ ++ /* A log size <= 0 means that there's no limit on the size of the log ++ * file at which point we simply ignore whether the log is supposed to ++ * be rotated or not. ++ */ ++ if (terminal->log_size <= 0) ++ return lxc_write_nointr(terminal->log_fd, buf, bytes_read); ++ ++ /* Get current size of the log file. */ ++ ret = fstat(terminal->log_fd, &st); ++ if (ret < 0) { ++ SYSERROR("Failed to stat the terminal log file descriptor"); ++ return -1; ++ } ++ ++ /* handle non-regular files */ ++ if ((st.st_mode & S_IFMT) != S_IFREG) { ++ /* This isn't a regular file. so rotating the file seems a ++ * dangerous thing to do, size limits are also very ++ * questionable. Let's not risk anything and tell the user that ++ * he's requesting us to do weird stuff. ++ */ ++ if (terminal->log_rotate > 0 || terminal->log_size > 0) ++ return -EINVAL; ++ ++ /* I mean, sure log wherever you want to. */ ++ return lxc_write_nointr(terminal->log_fd, buf, bytes_read); ++ } ++ ++ space_left = terminal->log_size - st.st_size; ++ ++ /* User doesn't want to rotate the log file and there's no more space ++ * left so simply truncate it. ++ */ ++ if (space_left <= 0 && terminal->log_rotate <= 0) { ++ ret = lxc_terminal_truncate_log_file(terminal); ++ if (ret < 0) ++ return ret; ++ ++ if (bytes_read <= terminal->log_size) ++ return lxc_write_nointr(terminal->log_fd, buf, bytes_read); ++ ++ /* Write as much as we can into the buffer and loose the rest. */ ++ return lxc_write_nointr(terminal->log_fd, buf, terminal->log_size); ++ } ++ ++ /* There's enough space left. */ ++ if (bytes_read <= space_left) ++ return lxc_write_nointr(terminal->log_fd, buf, bytes_read); ++ ++ /* There'd be more to write but we aren't instructed to rotate the log ++ * file so simply return. There's no error on our side here. ++ */ ++ if (terminal->log_rotate > 0) ++ ret = lxc_terminal_rotate_log_file(terminal); ++ else ++ ret = lxc_terminal_truncate_log_file(terminal); ++ if (ret < 0) ++ return ret; ++ ++ if (terminal->log_size < bytes_read) { ++ /* Well, this is unfortunate because it means that there is more ++ * to write than the user has granted us space. There are ++ * multiple ways to handle this but let's use the simplest one: ++ * write as much as we can, tell the user that there was more ++ * stuff to write and move on. ++ * Note that this scenario shouldn't actually happen with the ++ * standard pty-based terminal that LXC allocates since it will ++ * be switched into raw mode. In raw mode only 1 byte at a time ++ * should be read and written. ++ */ ++ WARN("Size of terminal log file is smaller than the bytes to write"); ++ ret = lxc_write_nointr(terminal->log_fd, buf, terminal->log_size); ++ if (ret < 0) ++ return -1; ++ bytes_read -= ret; ++ return bytes_read; ++ } ++ ++ /* Yay, we made it. */ ++ ret = lxc_write_nointr(terminal->log_fd, buf, bytes_read); ++ if (ret < 0) ++ return -1; ++ bytes_read -= ret; ++ return bytes_read; ++} ++ ++static ssize_t isulad_logger_json_write(struct lxc_terminal *terminal, const char *type, const char *buf, ++ int bytes_read) ++{ ++ logger_json_file *msg = NULL; ++ ssize_t ret = -1; ++ size_t len; ++ char *json = NULL; ++ char timebuffer[64] = { 0 }; ++ parser_error err = NULL; ++ struct parser_context ctx = { GEN_OPTIONS_SIMPLIFY | GEN_OPTIONS_NOT_VALIDATE_UTF8, stderr }; ++ ++ if (bytes_read < 0 || bytes_read >= INT_MAX) { ++ return -1; ++ } ++ msg = calloc(sizeof(logger_json_file), 1); ++ if (msg == NULL) { ++ return -errno; ++ } ++ msg->log = calloc(bytes_read, 1); ++ if (!msg->log) { ++ goto cleanup; ++ } ++ memcpy(msg->log, buf, bytes_read); ++ msg->log_len = bytes_read; ++ msg->stream = type ? safe_strdup(type) : safe_strdup("stdout"); ++ ++ get_now_time_buffer(timebuffer, sizeof(timebuffer)); ++ msg->time = safe_strdup(timebuffer); ++ ++ json = logger_json_file_generate_json(msg, &ctx, &err); ++ if (!json) { ++ ERROR("Failed to generate json: %s", err); ++ goto cleanup; ++ } ++ len = strlen(json); ++ json[len] = '\n'; ++ ret = isulad_lxc_terminal_rotate_write_data(terminal, json, len + 1); ++cleanup: ++ free(json); ++ free_logger_json_file(msg); ++ free(err); ++ return ret; ++} ++ ++static ssize_t isulad_logger_syslog_write(struct lxc_terminal *terminal, const char *buf) ++{ ++ syslog(LOG_INFO, "%s", buf); ++ return 0; ++} ++ ++static inline bool is_syslog(const char *driver) ++{ ++ if (driver == NULL) { ++ return false; ++ } ++ ++ return (strcmp("syslog", driver) == 0); ++} ++ ++static inline ssize_t isulad_logger_write(struct lxc_terminal *terminal, const char *type, const char *buf, ++ int bytes_read) ++{ ++ if (is_syslog(terminal->log_driver)) { ++ return isulad_logger_syslog_write(terminal, buf); ++ } ++ ++ return isulad_logger_json_write(terminal, type, buf, bytes_read); ++} ++ ++static int isulad_lxc_terminal_write_log_file(struct lxc_terminal *terminal, const char *type, char *buf, ++ int bytes_read) ++{ ++#define __BUF_CACHE_SIZE (16 * LXC_TERMINAL_BUFFER_SIZE) ++ static char cache[__BUF_CACHE_SIZE]; ++ static int size = 0; ++ int upto, index; ++ int begin = 0, buf_readed = 0, buf_left = 0; ++ int ret; ++ ++ if (buf != NULL && bytes_read > 0) { ++ /* Work out how much more data we are okay with reading this time. */ ++ upto = size + bytes_read; ++ if (upto > __BUF_CACHE_SIZE) { ++ upto = __BUF_CACHE_SIZE; ++ } ++ ++ if (upto > size) { ++ buf_readed = upto - size; ++ memcpy(cache + size, buf, buf_readed); ++ buf_left = bytes_read - buf_readed; ++ size += buf_readed; ++ } ++ } ++ ++ // If we have no data to log, and there's no more coming, we're done. ++ if (size == 0) ++ return 0; ++ ++ // Break up the data that we've buffered up into lines, and log each in turn. ++ for (index = 0; index < size; index++) { ++ if (cache[index] == '\n') { ++ ret = isulad_logger_write(terminal, type, cache + begin, index - begin + 1); ++ if (ret < 0) { ++ WARN("Failed to log msg"); ++ } ++ begin = index + 1; ++ } ++ } ++ /* If there's no more coming, or the buffer is full but ++ * has no newlines, log whatever we haven't logged yet, ++ * noting that it's a partial log line. */ ++ if (buf == NULL || (begin == 0 && size == __BUF_CACHE_SIZE)) { ++ if (begin < size) { ++ ret = isulad_logger_write(terminal, type, cache + begin, size - begin); ++ if (ret < 0) { ++ WARN("Failed to log msg"); ++ } ++ begin = 0; ++ size = 0; ++ } ++ if (buf == NULL) { ++ return 0; ++ } ++ } ++ /* Move any unlogged data to the front of the buffer in preparation for another read. */ ++ if (begin > 0) { ++ memcpy(cache, cache + begin, size - begin); ++ size -= begin; ++ } ++ /* Move left data to cache buffer */ ++ if (buf_left > 0) { ++ memcpy(cache + size, buf + buf_readed, buf_left); ++ size += buf_left; ++ } ++ return 0; ++} ++ ++/* isulad: forward data to all fifos */ ++static void lxc_forward_data_to_fifo(struct lxc_list *list, bool is_err, const char *buf, int r) ++{ ++ struct lxc_list *it = NULL; ++ struct lxc_list *next = NULL; ++ struct lxc_fifos_fd *elem = NULL; ++ ++ lxc_list_for_each_safe(it, list, next) { ++ elem = it->elem; ++ if (is_err) { ++ if (elem->err_fd >= 0) ++ lxc_write_nointr(elem->err_fd, buf, r); ++ } else { ++ if (elem->out_fd >= 0) ++ lxc_write_nointr(elem->out_fd, buf, r); ++ } ++ } ++ ++ return; ++} ++ ++/* isulad: judge the fd whether is fifo */ ++static bool lxc_terminal_is_fifo(int fd, struct lxc_list *list) ++{ ++ struct lxc_list *it = NULL; ++ struct lxc_list *next = NULL; ++ struct lxc_fifos_fd *elem = NULL; ++ ++ lxc_list_for_each_safe(it, list, next) { ++ elem = it->elem; ++ if (elem->in_fd == fd) ++ return true; ++ } ++ ++ return false; ++} ++ ++/* isulad: if fd == -1, means delete all the fifos*/ ++int lxc_terminal_delete_fifo(int fd, struct lxc_list *list) ++{ ++ struct lxc_list *it = NULL; ++ struct lxc_list *next = NULL; ++ struct lxc_fifos_fd *elem = NULL; ++ ++ lxc_list_for_each_safe(it, list, next) { ++ elem = it->elem; ++ if (elem->in_fd == fd || -1 == fd) { ++ INFO("Delete fifo fd %d", fd); ++ lxc_list_del(it); ++ if (elem->in_fifo) ++ free(elem->in_fifo); ++ if (elem->out_fifo) ++ free(elem->out_fifo); ++ if (elem->err_fifo) ++ free(elem->err_fifo); ++ if (elem->in_fd >= 0) ++ close(elem->in_fd); ++ if (elem->out_fd >= 0) ++ close(elem->out_fd); ++ if (elem->err_fd >= 0) ++ close(elem->err_fd); ++ free(elem); ++ } ++ } ++ ++ return 0; ++} ++ ++int lxc_terminal_io_cb(int fd, uint32_t events, void *data, ++ struct lxc_epoll_descr *descr) ++{ ++ struct lxc_terminal *terminal = data; ++ char buf[2 * LXC_TERMINAL_BUFFER_SIZE]; ++ int r, w, w_log, w_rbuf; ++ ++ w = r = lxc_read_nointr(fd, buf, sizeof(buf)); ++ if (r <= 0) { ++ INFO("Terminal client on fd %d has exited", fd); ++ lxc_mainloop_del_handler(descr, fd); ++ ++ if (fd == terminal->master) { ++ terminal->master = -EBADF; ++ /* write remained buffer to terminal log */ ++ if (terminal->log_fd >= 0) { ++ w_log = isulad_lxc_terminal_write_log_file(terminal, "stdout", NULL, 0); ++ if (w_log < 0) ++ TRACE("Failed to write %d bytes to terminal log", r); ++ } ++ /* notes: do not close the master fd due to if we close the fd, the process may ++ * recive SIGHUP and the exit code will be 129 (128 + 1) ++ */ ++ return LXC_MAINLOOP_CLOSE; ++ } else if (fd == terminal->peer) { ++ lxc_terminal_signal_fini(terminal); ++ terminal->peer = -EBADF; ++ close(fd); ++ return LXC_MAINLOOP_CONTINUE; /* isulad: do not close mainloop when peer close*/ ++ } else if (lxc_terminal_is_fifo(fd, &terminal->fifos)) { ++ /* isulad: delete fifos when the client close */ ++ lxc_terminal_delete_fifo(fd, &terminal->fifos); ++ return LXC_MAINLOOP_CONTINUE; ++ } else if (fd == terminal->pipes[1][0] || fd == terminal->pipes[2][0]) { ++ if (fd == terminal->pipes[1][0]) { ++ if (terminal->log_fd >= 0) { ++ w_log = isulad_lxc_terminal_write_log_file(terminal, "stdout", NULL, 0); ++ } ++ terminal->pipes[1][0] = -EBADF; ++ } else if (fd == terminal->pipes[2][0]) { ++ if (terminal->log_fd >= 0) { ++ w_log = isulad_lxc_terminal_write_log_file(terminal, "stderr", NULL, 0); ++ } ++ terminal->pipes[2][0] = -EBADF; ++ } ++ /* notes: do not close the master fd due to if we close the fd, the process may ++ * recive SIGHUP and the exit code will be 141 (128 + 13) ++ */ ++ return LXC_MAINLOOP_CONTINUE; ++ } else if (fd == terminal->pipes[0][1]) { ++ TRACE("closed stdin pipe of container stdin"); ++ terminal->pipes[0][1] = -EBADF; ++ return LXC_MAINLOOP_CONTINUE; ++ } else { ++ ERROR("Handler received unexpected file descriptor"); ++ } ++ close(fd); ++ return LXC_MAINLOOP_CLOSE; ++ } ++ ++ if (fd == terminal->peer || lxc_terminal_is_fifo(fd, &terminal->fifos)) { ++ if (terminal->master > 0) ++ w = lxc_write_nointr(terminal->master, buf, r); ++ if (terminal->pipes[0][1] > 0) ++ w = lxc_write_nointr(terminal->pipes[0][1], buf, r); ++ } ++ ++ w_rbuf = w_log = 0; ++ if (fd == terminal->master || fd == terminal->pipes[1][0] || fd == terminal->pipes[2][0]) { ++ /* write to peer first */ ++ if (terminal->peer >= 0) ++ w = lxc_write_nointr(terminal->peer, buf, r); ++ ++ /* isulad: forward data to fifos */ ++ lxc_forward_data_to_fifo(&terminal->fifos, fd == terminal->pipes[2][0], buf, r); ++ ++ /* write to terminal ringbuffer */ ++ if (terminal->buffer_size > 0) ++ w_rbuf = lxc_ringbuf_write(&terminal->ringbuf, buf, r); ++ ++ /* write to terminal log */ ++ if (terminal->log_fd >= 0) { ++ if (fd == terminal->master || fd == terminal->pipes[1][0]) ++ w_log = isulad_lxc_terminal_write_log_file(terminal, "stdout", buf, r); ++ else if (fd == terminal->pipes[2][0]) ++ w_log = isulad_lxc_terminal_write_log_file(terminal, "stderr", buf, r); ++ } ++ } ++ ++ if (w != r) ++ WARN("Short write on terminal r:%d != w:%d", r, w); ++ ++ if (w_rbuf < 0) { ++ errno = -w_rbuf; ++ SYSTRACE("Failed to write %d bytes to terminal ringbuffer", r); ++ } + ++ if (w_log < 0) ++ TRACE("Failed to write %d bytes to terminal log", r); ++ ++ return LXC_MAINLOOP_CONTINUE; ++} ++#else + int lxc_terminal_io_cb(int fd, uint32_t events, void *data, + struct lxc_epoll_descr *descr) + { +@@ -330,8 +856,8 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data, + INFO("Terminal client on fd %d has exited", fd); + lxc_mainloop_del_handler(descr, fd); + +- if (fd == terminal->ptmx) { +- terminal->ptmx = -EBADF; ++ if (fd == terminal->master) { ++ terminal->master = -EBADF; + } else if (fd == terminal->peer) { + lxc_terminal_signal_fini(terminal); + terminal->peer = -EBADF; +@@ -344,10 +870,10 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data, + } + + if (fd == terminal->peer) +- w = lxc_write_nointr(terminal->ptmx, buf, r); ++ w = lxc_write_nointr(terminal->master, buf, r); + + w_rbuf = w_log = 0; +- if (fd == terminal->ptmx) { ++ if (fd == terminal->master) { + /* write to peer first */ + if (terminal->peer >= 0) + w = lxc_write_nointr(terminal->peer, buf, r); +@@ -374,6 +900,7 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data, + + return LXC_MAINLOOP_CONTINUE; + } ++#endif + + static int lxc_terminal_mainloop_add_peer(struct lxc_terminal *terminal) + { +@@ -401,21 +928,125 @@ static int lxc_terminal_mainloop_add_peer(struct lxc_terminal *terminal) + return 0; + } + ++#ifdef HAVE_ISULAD ++/* isulad add pipes to mainloop */ ++static int lxc_terminal_mainloop_add_pipes(struct lxc_terminal *terminal) ++{ ++ int ret = 0; ++ ++ // parent read data from fifo, and send to stdin of container ++ if (terminal->pipes[0][1] > 0) { ++ ret = lxc_mainloop_add_handler(terminal->descr, terminal->pipes[0][1], ++ lxc_terminal_io_cb, terminal); ++ if (ret) { ++ ERROR("pipe fd %d not added to mainloop", terminal->pipes[0][1]); ++ return -1; ++ } ++ } ++ // parent read data from stdout of container, and send to fifo ++ if (terminal->pipes[1][0] > 0) { ++ ret = lxc_mainloop_add_handler(terminal->descr, terminal->pipes[1][0], ++ lxc_terminal_io_cb, terminal); ++ if (ret) { ++ ERROR("pipe fd %d not added to mainloop", terminal->pipes[1][0]); ++ return -1; ++ } ++ } ++ // parent read data from stderr of container, and send to fifo ++ if (terminal->pipes[2][0] > 0) { ++ ret = lxc_mainloop_add_handler(terminal->descr, terminal->pipes[2][0], ++ lxc_terminal_io_cb, terminal); ++ if (ret) { ++ ERROR("pipe fd %d not added to mainloop", terminal->pipes[2][0]); ++ return -1; ++ } ++ } ++ return ret; ++} ++ ++/* isulad add fifo to mainloop */ ++static int lxc_terminal_mainloop_add_fifo(struct lxc_terminal *terminal) ++{ ++ int ret = 0; ++ struct lxc_list *it = NULL; ++ struct lxc_list *next = NULL; ++ struct lxc_fifos_fd *elem = NULL; ++ ++ lxc_list_for_each_safe(it, &terminal->fifos, next) { ++ elem = it->elem; ++ if (elem->in_fd >= 0) { ++ ret = lxc_mainloop_add_handler(terminal->descr, elem->in_fd, ++ lxc_terminal_io_cb, terminal); ++ if (ret) { ++ ERROR("console fifo %s not added to mainloop", elem->in_fifo); ++ return -1; ++ } ++ } ++ } ++ return ret; ++} ++ ++int lxc_terminal_mainloop_add(struct lxc_epoll_descr *descr, ++ struct lxc_terminal *terminal) ++{ ++ int ret; ++ ++ /* We cache the descr so that we can add an fd to it when someone ++ * does attach to it in lxc_terminal_allocate(). ++ */ ++ terminal->descr = descr; ++ ++ ret = lxc_terminal_mainloop_add_peer(terminal); ++ if (ret < 0) { ++ ERROR("Failed to add handler for terminal peer to mainloop"); ++ return -1; ++ } ++ ++ /* isulad add pipes to mainloop */ ++ ret = lxc_terminal_mainloop_add_pipes(terminal); ++ if (ret < 0) { ++ ERROR("Failed to add handler for terminal fifos to mainloop"); ++ return -1; ++ } ++ ++ /* isulad add fifo to mainloop */ ++ ret = lxc_terminal_mainloop_add_fifo(terminal); ++ if (ret < 0) { ++ ERROR("Failed to add handler for terminal fifos to mainloop"); ++ return -1; ++ } ++ ++ if (terminal->master < 0) { ++ INFO("Terminal is not initialized"); ++ return 0; ++ } ++ ++ ret = lxc_mainloop_add_handler(descr, terminal->master, ++ lxc_terminal_io_cb, terminal); ++ if (ret < 0) { ++ ERROR("Failed to add handler for terminal master fd %d to " ++ "mainloop", terminal->master); ++ return -1; ++ } ++ ++ return 0; ++} ++#else + int lxc_terminal_mainloop_add(struct lxc_epoll_descr *descr, + struct lxc_terminal *terminal) + { + int ret; + +- if (terminal->ptmx < 0) { ++ if (terminal->master < 0) { + INFO("Terminal is not initialized"); + return 0; + } + +- ret = lxc_mainloop_add_handler(descr, terminal->ptmx, ++ ret = lxc_mainloop_add_handler(descr, terminal->master, + lxc_terminal_io_cb, terminal); + if (ret < 0) { +- ERROR("Failed to add handler for terminal ptmx fd %d to " +- "mainloop", terminal->ptmx); ++ ERROR("Failed to add handler for terminal master fd %d to " ++ "mainloop", terminal->master); + return -1; + } + +@@ -426,6 +1057,7 @@ int lxc_terminal_mainloop_add(struct lxc_epoll_descr *descr, + + return lxc_terminal_mainloop_add_peer(terminal); + } ++#endif + + int lxc_setup_tios(int fd, struct termios *oldtios) + { +@@ -483,11 +1115,11 @@ static void lxc_terminal_peer_proxy_free(struct lxc_terminal *terminal) + { + lxc_terminal_signal_fini(terminal); + +- close(terminal->proxy.ptmx); +- terminal->proxy.ptmx = -1; ++ close(terminal->proxy.master); ++ terminal->proxy.master = -1; + +- close(terminal->proxy.pts); +- terminal->proxy.pts = -1; ++ close(terminal->proxy.slave); ++ terminal->proxy.slave = -1; + + terminal->proxy.busy = -1; + +@@ -503,7 +1135,7 @@ static int lxc_terminal_peer_proxy_alloc(struct lxc_terminal *terminal, + struct termios oldtermio; + struct lxc_terminal_state *ts; + +- if (terminal->ptmx < 0) { ++ if (terminal->master < 0) { + ERROR("Terminal not set up"); + return -1; + } +@@ -519,51 +1151,51 @@ static int lxc_terminal_peer_proxy_alloc(struct lxc_terminal *terminal, + } + + /* This is the proxy terminal that will be given to the client, and +- * that the real terminal ptmx will send to / recv from. ++ * that the real terminal master will send to / recv from. + */ +- ret = openpty(&terminal->proxy.ptmx, &terminal->proxy.pts, NULL, ++ ret = openpty(&terminal->proxy.master, &terminal->proxy.slave, NULL, + NULL, NULL); + if (ret < 0) { + SYSERROR("Failed to open proxy terminal"); + return -1; + } + +- ret = ttyname_r(terminal->proxy.pts, terminal->proxy.name, ++ ret = ttyname_r(terminal->proxy.slave, terminal->proxy.name, + sizeof(terminal->proxy.name)); + if (ret < 0) { +- SYSERROR("Failed to retrieve name of proxy terminal pts"); ++ SYSERROR("Failed to retrieve name of proxy terminal slave"); + goto on_error; + } + +- ret = fd_cloexec(terminal->proxy.ptmx, true); ++ ret = fd_cloexec(terminal->proxy.master, true); + if (ret < 0) { +- SYSERROR("Failed to set FD_CLOEXEC flag on proxy terminal ptmx"); ++ SYSERROR("Failed to set FD_CLOEXEC flag on proxy terminal master"); + goto on_error; + } + +- ret = fd_cloexec(terminal->proxy.pts, true); ++ ret = fd_cloexec(terminal->proxy.slave, true); + if (ret < 0) { +- SYSERROR("Failed to set FD_CLOEXEC flag on proxy terminal pts"); ++ SYSERROR("Failed to set FD_CLOEXEC flag on proxy terminal slave"); + goto on_error; + } + +- ret = lxc_setup_tios(terminal->proxy.pts, &oldtermio); ++ ret = lxc_setup_tios(terminal->proxy.slave, &oldtermio); + if (ret < 0) + goto on_error; + +- ts = lxc_terminal_signal_init(terminal->proxy.ptmx, terminal->ptmx); ++ ts = lxc_terminal_signal_init(terminal->proxy.master, terminal->master); + if (!ts) + goto on_error; + + terminal->tty_state = ts; +- terminal->peer = terminal->proxy.pts; ++ terminal->peer = terminal->proxy.slave; + terminal->proxy.busy = sockfd; + ret = lxc_terminal_mainloop_add_peer(terminal); + if (ret < 0) + goto on_error; + +- NOTICE("Opened proxy terminal with ptmx fd %d and pts fd %d", +- terminal->proxy.ptmx, terminal->proxy.pts); ++ NOTICE("Opened proxy terminal with master fd %d and slave fd %d", ++ terminal->proxy.master, terminal->proxy.slave); + return 0; + + on_error: +@@ -574,7 +1206,7 @@ on_error: + int lxc_terminal_allocate(struct lxc_conf *conf, int sockfd, int *ttyreq) + { + int ttynum; +- int ptmxfd = -1; ++ int masterfd = -1; + struct lxc_tty_info *ttys = &conf->ttys; + struct lxc_terminal *terminal = &conf->console; + +@@ -585,7 +1217,7 @@ int lxc_terminal_allocate(struct lxc_conf *conf, int sockfd, int *ttyreq) + if (ret < 0) + goto out; + +- ptmxfd = terminal->proxy.ptmx; ++ masterfd = terminal->proxy.master; + goto out; + } + +@@ -614,10 +1246,10 @@ int lxc_terminal_allocate(struct lxc_conf *conf, int sockfd, int *ttyreq) + + out_tty: + ttys->tty[ttynum - 1].busy = sockfd; +- ptmxfd = ttys->tty[ttynum - 1].ptmx; ++ masterfd = ttys->tty[ttynum - 1].master; + + out: +- return ptmxfd; ++ return masterfd; + } + + void lxc_terminal_free(struct lxc_conf *conf, int fd) +@@ -633,20 +1265,37 @@ void lxc_terminal_free(struct lxc_conf *conf, int fd) + if (terminal->proxy.busy != fd) + return; + +- lxc_mainloop_del_handler(terminal->descr, terminal->proxy.pts); ++ lxc_mainloop_del_handler(terminal->descr, terminal->proxy.slave); + lxc_terminal_peer_proxy_free(terminal); + } + + static int lxc_terminal_peer_default(struct lxc_terminal *terminal) + { +- struct lxc_terminal_state *ts; +- const char *path; ++ struct lxc_terminal_state *ts = NULL; ++ const char *path = NULL; + int ret = 0; + + if (terminal->path) + path = terminal->path; +- else +- path = "/dev/tty"; ++ ++#ifdef HAVE_ISULAD ++ /* isulad: if no console was given, try current controlling terminal, there ++ * won't be one if we were started as a daemon (-d) ++ */ ++ if (!path && !access("/dev/tty", F_OK)) { ++ int fd; ++ fd = open("/dev/tty", O_RDWR); ++ if (fd >= 0) { ++ close(fd); ++ path = "/dev/tty"; ++ } ++ } ++ ++ if (!path) { ++ DEBUG("Not have a controlling terminal"); ++ return 0; ++ } ++#endif + + terminal->peer = lxc_unpriv(open(path, O_RDWR | O_CLOEXEC)); + if (terminal->peer < 0) { +@@ -666,14 +1315,14 @@ static int lxc_terminal_peer_default(struct lxc_terminal *terminal) + goto on_error_free_tios; + } + +- ts = lxc_terminal_signal_init(terminal->peer, terminal->ptmx); ++ ts = lxc_terminal_signal_init(terminal->peer, terminal->master); + terminal->tty_state = ts; + if (!ts) { + WARN("Failed to install signal handler"); + goto on_error_free_tios; + } + +- lxc_terminal_winsz(terminal->peer, terminal->ptmx); ++ lxc_terminal_winsz(terminal->peer, terminal->master); + + terminal->tios = malloc(sizeof(*terminal->tios)); + if (!terminal->tios) +@@ -749,22 +1398,51 @@ void lxc_terminal_delete(struct lxc_terminal *terminal) + close(terminal->peer); + terminal->peer = -1; + +- if (terminal->ptmx >= 0) +- close(terminal->ptmx); +- terminal->ptmx = -1; ++ if (terminal->master >= 0) ++ close(terminal->master); ++ terminal->master = -1; + +- if (terminal->pts >= 0) +- close(terminal->pts); +- terminal->pts = -1; ++ if (terminal->slave >= 0) ++ close(terminal->slave); ++ terminal->slave = -1; + + if (terminal->log_fd >= 0) + close(terminal->log_fd); + terminal->log_fd = -1; ++ ++#ifdef HAVE_ISULAD ++ if (is_syslog(terminal->log_driver)) { ++ closelog(); ++ free(terminal->log_driver); ++ } ++ /* isulad: close all pipes */ ++ if (terminal->pipes[0][0] >= 0) ++ close(terminal->pipes[0][0]); ++ terminal->pipes[0][0] = -1; ++ if (terminal->pipes[0][1] >= 0) ++ close(terminal->pipes[0][1]); ++ terminal->pipes[0][1] = -1; ++ if (terminal->pipes[1][0] >= 0) ++ close(terminal->pipes[1][0]); ++ terminal->pipes[1][0] = -1; ++ if (terminal->pipes[1][1] >= 0) ++ close(terminal->pipes[1][1]); ++ terminal->pipes[1][1] = -1; ++ if (terminal->pipes[2][0] >= 0) ++ close(terminal->pipes[2][0]); ++ terminal->pipes[2][0] = -1; ++ if (terminal->pipes[2][1] >= 0) ++ close(terminal->pipes[2][1]); ++ terminal->pipes[2][1] = -1; ++ ++ /* isulad: delete all fifos */ ++ lxc_terminal_delete_fifo(-1, &terminal->fifos); ++#endif + } + + /** + * Note that this function needs to run before the mainloop starts. Since we +- * register a handler for the terminal's ptmxfd when we create the mainloop ++ * register a handler for the terminal's masterfd when we create the mainloop + * the terminal handler needs to see an allocated ringbuffer. + */ + static int lxc_terminal_create_ringbuf(struct lxc_terminal *terminal) +@@ -828,31 +1506,275 @@ int lxc_terminal_create_log_file(struct lxc_terminal *terminal) + return 0; + } + ++#ifdef HAVE_ISULAD ++/* isulad: fd_nonblock */ ++static int fd_nonblock(int fd) ++{ ++ int flags; ++ ++ flags = fcntl(fd, F_GETFL); ++ ++ return fcntl(fd, F_SETFL, (int)((unsigned int)flags | O_NONBLOCK)); ++} ++ ++static int terminal_fifo_open(const char *fifo_path, int flags) ++{ ++ int fd = -1; ++ ++ fd = lxc_open(fifo_path, flags, 0); ++ if (fd < 0) { ++ WARN("Failed to open fifo %s to send message: %s.", fifo_path, ++ strerror(errno)); ++ return -1; ++ } ++ ++ return fd; ++} ++ ++bool fifo_exists(const char *path) ++{ ++ struct stat sb; ++ int ret; ++ ++ ret = stat(path, &sb); ++ if (ret < 0) ++ // could be something other than eexist, just say no ++ return false; ++ return S_ISFIFO(sb.st_mode); ++} ++ ++/* isulad: set terminal fifos */ ++static int lxc_terminal_set_fifo(struct lxc_terminal *console, const char *in, const char *out, const char *err, int *input_fd) ++{ ++ int fifofd_in = -1, fifofd_out = -1, fifofd_err = -1; ++ struct lxc_fifos_fd *fifo_elem = NULL; ++ ++ if ((in && !fifo_exists(in)) || (out && !fifo_exists(out)) || (err && !fifo_exists(err))) { ++ ERROR("File %s or %s or %s does not refer to a FIFO", in, out, err); ++ return -1; ++ } ++ ++ if (in) { ++ fifofd_in = terminal_fifo_open(in, O_RDONLY | O_NONBLOCK | O_CLOEXEC); ++ if (fifofd_in < 0) { ++ SYSERROR("Failed to open FIFO: %s", in); ++ return -1; ++ } ++ } ++ ++ if (out) { ++ fifofd_out = terminal_fifo_open(out, O_WRONLY | O_NONBLOCK | O_CLOEXEC); ++ if (fifofd_out < 0) { ++ SYSERROR("Failed to open FIFO: %s", out); ++ if (fifofd_in >= 0) ++ close(fifofd_in); ++ return -1; ++ } ++ } ++ ++ if (err) { ++ fifofd_err = terminal_fifo_open(err, O_WRONLY | O_NONBLOCK | O_CLOEXEC); ++ if (fifofd_err < 0) { ++ SYSERROR("Failed to open FIFO: %s", err); ++ if (fifofd_in >= 0) ++ close(fifofd_in); ++ if (fifofd_out >= 0) ++ close(fifofd_out); ++ return -1; ++ } ++ } ++ ++ fifo_elem = malloc(sizeof(*fifo_elem)); ++ if (fifo_elem == NULL) { ++ if (fifofd_in >= 0) ++ close(fifofd_in); ++ if (fifofd_out >= 0) ++ close(fifofd_out); ++ if (fifofd_err >= 0) ++ close(fifofd_err); ++ return -1; ++ } ++ memset(fifo_elem, 0, sizeof(*fifo_elem)); ++ ++ fifo_elem->in_fifo = safe_strdup(in ? in : ""); ++ fifo_elem->out_fifo = safe_strdup(out ? out : ""); ++ fifo_elem->err_fifo = safe_strdup(err ? err : ""); ++ fifo_elem->in_fd = fifofd_in; ++ fifo_elem->out_fd = fifofd_out; ++ fifo_elem->err_fd = fifofd_err; ++ lxc_list_add_elem(&fifo_elem->node, fifo_elem); ++ lxc_list_add_tail(&console->fifos, &fifo_elem->node); ++ ++ if (input_fd) ++ *input_fd = fifofd_in; ++ ++ return 0; ++} ++ ++/* isulad: add default fifos */ ++static int lxc_terminal_fifo_default(struct lxc_terminal *terminal) ++{ ++ if (terminal->init_fifo[0] || terminal->init_fifo[1] || terminal->init_fifo[2]) ++ return lxc_terminal_set_fifo(terminal, terminal->init_fifo[0], terminal->init_fifo[1], terminal->init_fifo[2], NULL); ++ return 0; ++} ++ + int lxc_terminal_create(struct lxc_terminal *terminal) + { + int ret; + +- ret = openpty(&terminal->ptmx, &terminal->pts, NULL, NULL, NULL); ++ if (!terminal->disable_pty) { ++ ret = openpty(&terminal->master, &terminal->slave, NULL, NULL, NULL); ++ if (ret < 0) { ++ SYSERROR("Failed to open terminal"); ++ return -1; ++ } ++ ++ ret = ttyname_r(terminal->slave, terminal->name, sizeof(terminal->name)); ++ if (ret < 0) { ++ SYSERROR("Failed to retrieve name of terminal slave"); ++ goto err; ++ } ++ ++ ret = fd_cloexec(terminal->master, true); ++ if (ret < 0) { ++ SYSERROR("Failed to set FD_CLOEXEC flag on terminal master"); ++ goto err; ++ } ++ ++ /* isulad: make master NONBLOCK */ ++ ret = fd_nonblock(terminal->master); ++ if (ret < 0) { ++ SYSERROR("Failed to set O_NONBLOCK flag on terminal master"); ++ goto err; ++ } ++ ++ ret = fd_cloexec(terminal->slave, true); ++ if (ret < 0) { ++ SYSERROR("Failed to set FD_CLOEXEC flag on terminal slave"); ++ goto err; ++ } ++ ++ ret = lxc_terminal_peer_default(terminal); ++ if (ret < 0) { ++ ERROR("Failed to allocate proxy terminal"); ++ goto err; ++ } ++ } else { ++ /* isulad: create 3 pipes */ ++ /* for stdin */ ++ if (pipe2(terminal->pipes[0], O_CLOEXEC)) { ++ ERROR("Failed to create stdin pipe"); ++ goto err; ++ } ++ /* for stdout */ ++ if (pipe2(terminal->pipes[1], O_CLOEXEC)) { ++ ERROR("Failed to create stdout pipe"); ++ goto err; ++ } ++ /* for stderr */ ++ if (pipe2(terminal->pipes[2], O_CLOEXEC)) { ++ ERROR("Failed to create stderr pipe"); ++ goto err; ++ } ++ } ++ ++ /* isulad: open fifos */ ++ ret = lxc_terminal_fifo_default(terminal); ++ if (ret < 0) { ++ ERROR("Failed to allocate fifo terminal"); ++ goto err; ++ } ++ ++ return 0; ++ ++err: ++ lxc_terminal_delete(terminal); ++ return -ENODEV; ++} ++ ++/* isulad: add fifos dynamic*/ ++int lxc_terminal_add_fifos(struct lxc_conf *conf, const char *fifonames) ++{ ++ int ret = 0; ++ struct lxc_terminal *terminal = &conf->console; ++ int fifofd_in = -1; ++ char *tmp = NULL, *saveptr = NULL, *in = NULL, *out = NULL, *err = NULL; ++ const char *none_fifo_name = "none"; ++ ++ tmp = safe_strdup(fifonames); ++ ++ in = strtok_r(tmp, "&&&&", &saveptr); ++ if (!in) { ++ ret = -1; ++ goto free_out; ++ } ++ if (strcmp(in, none_fifo_name) == 0) ++ in = NULL; ++ ++ out = strtok_r(NULL, "&&&&", &saveptr); ++ if (!out) { ++ ret = -1; ++ goto free_out; ++ } ++ if (strcmp(out, none_fifo_name) == 0) ++ out = NULL; ++ ++ err = strtok_r(NULL, "&&&&", &saveptr); ++ if (!err) { ++ ret = -1; ++ goto free_out; ++ } ++ if (strcmp(err, none_fifo_name) == 0) ++ err = NULL; ++ ++ ret = lxc_terminal_set_fifo(terminal, in, out, err, &fifofd_in); ++ if (ret < 0) { ++ ERROR("Faild to set fifos to console config"); ++ ret = -1; ++ goto free_out; ++ } ++ ++ if (lxc_mainloop_add_handler(terminal->descr, fifofd_in, ++ lxc_terminal_io_cb, terminal)) { ++ ERROR("console fifo not added to mainloop"); ++ lxc_terminal_delete_fifo(fifofd_in, &terminal->fifos); ++ ret = -1; ++ goto free_out; ++ } ++ ++free_out: ++ if (tmp) ++ free(tmp); ++ return ret; ++} ++ ++#else ++int lxc_terminal_create(struct lxc_terminal *terminal) ++{ ++ int ret; ++ ++ ret = openpty(&terminal->master, &terminal->slave, NULL, NULL, NULL); + if (ret < 0) { + SYSERROR("Failed to open terminal"); + return -1; + } + +- ret = ttyname_r(terminal->pts, terminal->name, sizeof(terminal->name)); ++ ret = ttyname_r(terminal->slave, terminal->name, sizeof(terminal->name)); + if (ret < 0) { +- SYSERROR("Failed to retrieve name of terminal pts"); ++ SYSERROR("Failed to retrieve name of terminal slave"); + goto err; + } + +- ret = fd_cloexec(terminal->ptmx, true); ++ ret = fd_cloexec(terminal->master, true); + if (ret < 0) { +- SYSERROR("Failed to set FD_CLOEXEC flag on terminal ptmx"); ++ SYSERROR("Failed to set FD_CLOEXEC flag on terminal master"); + goto err; + } + +- ret = fd_cloexec(terminal->pts, true); ++ ret = fd_cloexec(terminal->slave, true); + if (ret < 0) { +- SYSERROR("Failed to set FD_CLOEXEC flag on terminal pts"); ++ SYSERROR("Failed to set FD_CLOEXEC flag on terminal slave"); + goto err; + } + +@@ -868,6 +1790,7 @@ err: + lxc_terminal_delete(terminal); + return -ENODEV; + } ++#endif + + int lxc_terminal_setup(struct lxc_conf *conf) + { +@@ -883,6 +1806,18 @@ int lxc_terminal_setup(struct lxc_conf *conf) + if (ret < 0) + return -1; + ++#ifdef HAVE_ISULAD ++ if (is_syslog(terminal->log_driver)) { ++ if (terminal->log_syslog_tag == NULL) { ++ terminal->log_syslog_tag = malloc(16 * sizeof(char)); ++ (void)strlcpy(terminal->log_syslog_tag, conf->name, 16); ++ } ++ if (terminal->log_syslog_facility <= 0) { ++ terminal->log_syslog_facility = LOG_DAEMON; ++ } ++ openlog(terminal->log_syslog_tag, LOG_PID, terminal->log_syslog_facility); ++ } ++#endif + ret = lxc_terminal_create_log_file(terminal); + if (ret < 0) + goto err; +@@ -956,21 +1891,21 @@ int lxc_terminal_stdin_cb(int fd, uint32_t events, void *cbdata, + ts->saw_escape = 0; + } + +- ret = lxc_write_nointr(ts->ptmxfd, &c, 1); ++ ret = lxc_write_nointr(ts->masterfd, &c, 1); + if (ret <= 0) + return LXC_MAINLOOP_CLOSE; + + return LXC_MAINLOOP_CONTINUE; + } + +-int lxc_terminal_ptmx_cb(int fd, uint32_t events, void *cbdata, ++int lxc_terminal_master_cb(int fd, uint32_t events, void *cbdata, + struct lxc_epoll_descr *descr) + { + int r, w; + char buf[LXC_TERMINAL_BUFFER_SIZE]; + struct lxc_terminal_state *ts = cbdata; + +- if (fd != ts->ptmxfd) ++ if (fd != ts->masterfd) + return LXC_MAINLOOP_CLOSE; + + r = lxc_read_nointr(fd, buf, sizeof(buf)); +@@ -984,16 +1919,16 @@ int lxc_terminal_ptmx_cb(int fd, uint32_t events, void *cbdata, + return LXC_MAINLOOP_CONTINUE; + } + +-int lxc_terminal_getfd(struct lxc_container *c, int *ttynum, int *ptmxfd) ++int lxc_terminal_getfd(struct lxc_container *c, int *ttynum, int *masterfd) + { +- return lxc_cmd_console(c->name, ttynum, ptmxfd, c->config_path); ++ return lxc_cmd_console(c->name, ttynum, masterfd, c->config_path); + } + + int lxc_console(struct lxc_container *c, int ttynum, + int stdinfd, int stdoutfd, int stderrfd, + int escape) + { +- int ptmxfd, ret, ttyfd; ++ int masterfd, ret, ttyfd; + struct lxc_epoll_descr descr; + struct termios oldtios; + struct lxc_terminal_state *ts; +@@ -1002,7 +1937,7 @@ int lxc_console(struct lxc_container *c, int ttynum, + }; + int istty = 0; + +- ttyfd = lxc_cmd_console(c->name, &ttynum, &ptmxfd, c->config_path); ++ ttyfd = lxc_cmd_console(c->name, &ttynum, &masterfd, c->config_path); + if (ttyfd < 0) + return -1; + +@@ -1010,7 +1945,7 @@ int lxc_console(struct lxc_container *c, int ttynum, + if (ret < 0) + TRACE("Process is already group leader"); + +- ts = lxc_terminal_signal_init(stdinfd, ptmxfd); ++ ts = lxc_terminal_signal_init(stdinfd, masterfd); + if (!ts) { + ret = -1; + goto close_fds; +@@ -1021,8 +1956,8 @@ int lxc_console(struct lxc_container *c, int ttynum, + + istty = isatty(stdinfd); + if (istty) { +- lxc_terminal_winsz(stdinfd, ptmxfd); +- lxc_terminal_winsz(ts->stdinfd, ts->ptmxfd); ++ lxc_terminal_winsz(stdinfd, masterfd); ++ lxc_terminal_winsz(ts->stdinfd, ts->masterfd); + } else { + INFO("File descriptor %d does not refer to a terminal", stdinfd); + } +@@ -1049,10 +1984,10 @@ int lxc_console(struct lxc_container *c, int ttynum, + goto close_mainloop; + } + +- ret = lxc_mainloop_add_handler(&descr, ts->ptmxfd, +- lxc_terminal_ptmx_cb, ts); ++ ret = lxc_mainloop_add_handler(&descr, ts->masterfd, ++ lxc_terminal_master_cb, ts); + if (ret < 0) { +- ERROR("Failed to add ptmx handler"); ++ ERROR("Failed to add master handler"); + goto close_mainloop; + } + +@@ -1093,7 +2028,7 @@ sigwinch_fini: + lxc_terminal_signal_fini(&terminal); + + close_fds: +- close(ptmxfd); ++ close(masterfd); + close(ttyfd); + + return ret; +@@ -1120,9 +2055,15 @@ int lxc_terminal_prepare_login(int fd) + if (ret < 0) + return -1; + ++#ifdef HAVE_ISULAD ++ ret = set_stdfds(fd); ++ if (ret < 0) ++ return -1; ++#else + ret = lxc_terminal_set_stdfds(fd); + if (ret < 0) + return -1; ++#endif + + if (fd > STDERR_FILENO) + close(fd); +@@ -1133,19 +2074,31 @@ int lxc_terminal_prepare_login(int fd) + void lxc_terminal_info_init(struct lxc_terminal_info *terminal) + { + terminal->name[0] = '\0'; +- terminal->ptmx = -EBADF; +- terminal->pts = -EBADF; ++ terminal->master = -EBADF; ++ terminal->slave = -EBADF; + terminal->busy = -1; + } + + void lxc_terminal_init(struct lxc_terminal *terminal) + { + memset(terminal, 0, sizeof(*terminal)); +- terminal->pts = -EBADF; +- terminal->ptmx = -EBADF; ++ terminal->slave = -EBADF; ++ terminal->master = -EBADF; + terminal->peer = -EBADF; + terminal->log_fd = -EBADF; + lxc_terminal_info_init(&terminal->proxy); ++#ifdef HAVE_ISULAD ++ terminal->init_fifo[0] = NULL; ++ terminal->init_fifo[1] = NULL; ++ terminal->init_fifo[2] = NULL; ++ terminal->pipes[0][0] = -1; ++ terminal->pipes[0][1] = -1; ++ terminal->pipes[1][0] = -1; ++ terminal->pipes[1][1] = -1; ++ terminal->pipes[2][0] = -1; ++ terminal->pipes[2][1] = -1; ++ lxc_list_init(&terminal->fifos); ++#endif + } + + void lxc_terminal_conf_free(struct lxc_terminal *terminal) +@@ -1155,6 +2108,15 @@ void lxc_terminal_conf_free(struct lxc_terminal *terminal) + if (terminal->buffer_size > 0 && terminal->ringbuf.addr) + lxc_ringbuf_release(&terminal->ringbuf); + lxc_terminal_signal_fini(terminal); ++#ifdef HAVE_ISULAD ++ /*isulad: free console fifos */ ++ free(terminal->init_fifo[0]); ++ free(terminal->init_fifo[1]); ++ free(terminal->init_fifo[2]); ++ lxc_terminal_delete_fifo(-1, &terminal->fifos); ++ free(terminal->log_driver); ++ free(terminal->log_syslog_tag); ++#endif + } + + int lxc_terminal_map_ids(struct lxc_conf *c, struct lxc_terminal *terminal) +@@ -1167,13 +2129,14 @@ int lxc_terminal_map_ids(struct lxc_conf *c, struct lxc_terminal *terminal) + if (strcmp(terminal->name, "") == 0) + return 0; + +- ret = userns_exec_mapped_root(terminal->name, terminal->pts, c); ++ ret = chown_mapped_root(terminal->name, c); + if (ret < 0) { +- return log_error(-1, "Failed to chown terminal %d(%s)", +- terminal->pts, terminal->name); ++ ERROR("Failed to chown terminal \"%s\"", terminal->name); ++ return -1; + } + +- TRACE("Chowned terminal %d(%s)", terminal->pts, terminal->name); ++ TRACE("Chowned terminal \"%s\"", terminal->name); + + return 0; + } ++ +diff --git a/src/lxc/terminal.h b/src/lxc/terminal.h +index 4d21f33d9..9de4cd055 100644 +--- a/src/lxc/terminal.h ++++ b/src/lxc/terminal.h +@@ -15,14 +15,14 @@ struct lxc_conf; + struct lxc_epoll_descr; + + struct lxc_terminal_info { +- /* the path name of the pts side */ ++ /* the path name of the slave side */ + char name[PATH_MAX]; + +- /* the file descriptor of the ptmx */ +- int ptmx; ++ /* the file descriptor of the master */ ++ int master; + +- /* the file descriptor of the pts */ +- int pts; ++ /* the file descriptor of the slave */ ++ int slave; + + /* whether the terminal is currently used */ + int busy; +@@ -32,7 +32,7 @@ struct lxc_terminal_state { + struct lxc_list node; + int stdinfd; + int stdoutfd; +- int ptmxfd; ++ int masterfd; + + /* Escape sequence to use for exiting the terminal. A single char can + * be specified. The terminal can then exited by doing: Ctrl + +@@ -57,8 +57,8 @@ struct lxc_terminal_state { + }; + + struct lxc_terminal { +- int pts; +- int ptmx; ++ int slave; ++ int master; + int peer; + struct lxc_terminal_info proxy; + struct lxc_epoll_descr *descr; +@@ -79,6 +79,16 @@ struct lxc_terminal { + + /* whether the log file will be rotated */ + unsigned int log_rotate; ++#ifdef HAVE_ISULAD ++ /* driver of log, support file and syslog */ ++ char *log_driver; ++ ++ /* syslog tag for every log */ ++ char *log_syslog_tag; ++ ++ /* syslog facility */ ++ int log_syslog_facility; ++#endif + }; + + struct /* lxc_terminal_ringbuf */ { +@@ -88,7 +98,27 @@ struct lxc_terminal { + /* the in-memory ringbuffer */ + struct lxc_ringbuf ringbuf; + }; ++#ifdef HAVE_ISULAD ++ char *init_fifo[3]; /* isulad: default fifos for the start */ ++ struct lxc_list fifos; /* isulad: fifos used to forward teminal */ ++ bool disable_pty; ++ bool open_stdin; ++ int pipes[3][2]; /* isulad: pipes for dup to container fds of stdin,stdout,stderr on daemonize mode*/ ++#endif ++}; ++ ++#ifdef HAVE_ISULAD ++/* isulad: fifo struct */ ++struct lxc_fifos_fd { ++ char *in_fifo; ++ char *out_fifo; ++ char *err_fifo; ++ int in_fd; ++ int out_fd; ++ int err_fd; ++ struct lxc_list node; + }; ++#endif + + /** + * lxc_terminal_allocate: allocate the console or a tty +@@ -102,10 +132,10 @@ extern int lxc_terminal_allocate(struct lxc_conf *conf, int sockfd, int *ttynum + + /** + * Create a new terminal: +- * - calls openpty() to allocate a ptmx/pts pair +- * - sets the FD_CLOEXEC flag on the ptmx/pts fds ++ * - calls openpty() to allocate a master/slave pair ++ * - sets the FD_CLOEXEC flag on the master/slave fds + * - allocates either the current controlling terminal (default) or a user +- * specified terminal as proxy for the newly created ptmx/pts pair ++ * specified terminal as proxy for the newly created master/slave pair + * - sets up SIGWINCH handler, winsz, and new terminal settings + * (Handlers for SIGWINCH and I/O are not registered in a mainloop.) + */ +@@ -164,7 +194,7 @@ extern int lxc_console(struct lxc_container *c, int ttynum, + * the range specified by lxc.tty.max to allocate a specific tty. + */ + extern int lxc_terminal_getfd(struct lxc_container *c, int *ttynum, +- int *ptmxfd); ++ int *masterfd); + + /** + * Make fd a duplicate of the standard file descriptors. The fd is made a +@@ -183,12 +213,12 @@ extern int lxc_terminal_stdin_cb(int fd, uint32_t events, void *cbdata, + struct lxc_epoll_descr *descr); + + /** +- * Handler for events on the ptmx fd of the terminal. To be registered via ++ * Handler for events on the master fd of the terminal. To be registered via + * the corresponding functions declared and defined in mainloop.{c,h} or + * lxc_terminal_mainloop_add(). + * This function exits the loop cleanly when an EPOLLHUP event is received. + */ +-extern int lxc_terminal_ptmx_cb(int fd, uint32_t events, void *cbdata, ++extern int lxc_terminal_master_cb(int fd, uint32_t events, void *cbdata, + struct lxc_epoll_descr *descr); + + /** +@@ -202,9 +232,9 @@ extern int lxc_setup_tios(int fd, struct termios *oldtios); + * lxc_terminal_winsz: propagate winsz from one terminal to another + * + * @srcfd +- * - terminal to get size from (typically a pts pty) ++ * - terminal to get size from (typically a slave pty) + * @dstfd +- * - terminal to set size on (typically a ptmx pty) ++ * - terminal to set size on (typically a master pty) + */ + extern void lxc_terminal_winsz(int srcfd, int dstfd); + +@@ -254,4 +284,9 @@ extern void lxc_terminal_init(struct lxc_terminal *terminal); + extern int lxc_terminal_map_ids(struct lxc_conf *c, + struct lxc_terminal *terminal); + ++#ifdef HAVE_ISULAD ++int lxc_terminal_add_fifos(struct lxc_conf *conf, const char *fifonames); ++int lxc_set_terminal_winsz(struct lxc_terminal *terminal, unsigned int height, unsigned int width); ++#endif ++ + #endif /* __LXC_TERMINAL_H */ +diff --git a/src/lxc/tools/arguments.h b/src/lxc/tools/arguments.h +index cb0ba744d..41ea1097a 100644 +--- a/src/lxc/tools/arguments.h ++++ b/src/lxc/tools/arguments.h +@@ -40,6 +40,16 @@ struct lxc_arguments { + + /* for lxc-start */ + const char *share_ns[32]; /* size must be greater than LXC_NS_MAX */ ++#ifdef HAVE_ISULAD ++ const char *container_info; /* isulad: file used to store pid and ppid info of container */ ++ char *terminal_fifos[3]; /* isulad add, fifos used to redirct stdin/out/err */ ++ const char *exit_monitor_fifo; /* isulad: fifo used to monitor state of monitor process */ ++ const char *suffix; /* isulad add, suffix used for connect with parent of execed process*/ ++ int disable_pty; ++ int open_stdin; ++ unsigned int start_timeout; /* isulad: Seconds for waiting on a container to start before it is killed*/ ++ int64_t attach_timeout; /* for lxc-attach */ ++#endif + + /* for lxc-console */ + unsigned int ttynum; +@@ -152,6 +162,19 @@ struct lxc_arguments { + #define OPT_SHARE_UTS OPT_USAGE - 5 + #define OPT_SHARE_PID OPT_USAGE - 6 + ++#ifdef HAVE_ISULAD ++#define OPT_INPUT_FIFO OPT_USAGE - 7 ++#define OPT_OUTPUT_FIFO OPT_USAGE - 8 ++#define OPT_STDERR_FIFO OPT_USAGE - 9 ++#define OPT_CONTAINER_INFO OPT_USAGE - 10 ++#define OPT_EXIT_FIFO OPT_USAGE - 11 ++#define OPT_START_TIMEOUT OPT_USAGE - 12 ++#define OPT_DISABLE_PTY OPT_USAGE - 13 ++#define OPT_OPEN_STDIN OPT_USAGE - 14 ++#define OPT_ATTACH_TIMEOUT OPT_USAGE - 15 ++#define OPT_ATTACH_SUFFIX OPT_USAGE - 16 ++#endif ++ + extern int lxc_arguments_parse(struct lxc_arguments *args, int argc, + char *const argv[]); + +diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c +index a8f493aa7..dbddc2a51 100644 +--- a/src/lxc/tools/lxc_attach.c ++++ b/src/lxc/tools/lxc_attach.c +@@ -72,8 +72,19 @@ static const struct option my_longopts[] = { + {"set-var", required_argument, 0, 'v'}, + {"pty-log", required_argument, 0, 'L'}, + {"rcfile", required_argument, 0, 'f'}, ++#ifndef HAVE_ISULAD + {"uid", required_argument, 0, 'u'}, + {"gid", required_argument, 0, 'g'}, ++#else ++ {"user", required_argument, 0, 'u'}, ++ {"in-fifo", required_argument, 0, OPT_INPUT_FIFO}, /* isulad add terminal fifos*/ ++ {"out-fifo", required_argument, 0, OPT_OUTPUT_FIFO}, ++ {"err-fifo", required_argument, 0, OPT_STDERR_FIFO}, ++ {"suffix", required_argument, 0, OPT_ATTACH_SUFFIX}, ++ {"timeout", required_argument, 0, OPT_ATTACH_TIMEOUT}, ++ {"disable-pty", no_argument, 0, OPT_DISABLE_PTY}, ++ {"open-stdin", no_argument, 0, OPT_OPEN_STDIN}, ++#endif + LXC_COMMON_OPTIONS + }; + +@@ -124,9 +135,19 @@ Options :\n\ + multiple times.\n\ + -f, --rcfile=FILE\n\ + Load configuration file FILE\n\ ++" ++#ifndef HAVE_ISULAD ++"\ + -u, --uid=UID Execute COMMAND with UID inside the container\n\ + -g, --gid=GID Execute COMMAND with GID inside the container\n\ +-", ++" ++#else ++"\ ++ --user User ID (format: UID[:GID])\n\ ++ --timeout Timeout in seconds (default: 0)\n\ ++" ++#endif ++, + .options = my_longopts, + .parser = my_parser, + .checker = NULL, +@@ -136,6 +157,71 @@ Options :\n\ + .gid = LXC_INVALID_GID, + }; + ++#ifdef HAVE_ISULAD ++static int parse_user_id(const char *username, char **uid, char **gid, char **tmp_dup) ++{ ++ char *tmp = NULL; ++ char *pdot = NULL; ++ ++ if (uid == NULL || gid == NULL || tmp_dup == NULL) { ++ return -1; ++ } ++ ++ if (username != NULL) { ++ tmp = strdup(username); ++ if (tmp == NULL) { ++ ERROR("Failed to duplicate user name"); ++ return -1; ++ } ++ ++ // for free tmp in caller ++ *tmp_dup = tmp; ++ pdot = strstr(tmp, ":"); ++ if (pdot != NULL) { ++ *pdot = '\0'; ++ if (pdot != tmp) { ++ // uid found ++ *uid = tmp; ++ } ++ ++ if (*(pdot + 1) != '\0') { ++ // gid found ++ *gid = pdot + 1; ++ } ++ } else { ++ // No : found ++ if (*tmp != '\0') { ++ *uid = tmp; ++ } ++ } ++ } ++ ++ return 0; ++} ++ ++static int get_attach_uid_gid(const char *username, uid_t *user_id, gid_t *group_id) ++{ ++ char *tmp = NULL; ++ char *uid = NULL; ++ char *gid = NULL; ++ ++ // parse uid and gid by username ++ if (parse_user_id(username, &uid, &gid, &tmp) != 0) { ++ return -1; ++ } ++ ++ if (uid != NULL) { ++ *user_id = (unsigned int)atoll(uid); ++ } ++ if (gid != NULL) { ++ *group_id = (unsigned int)atoll(gid); ++ } ++ ++ free(tmp); ++ return 0; ++} ++#endif ++ + static int my_parser(struct lxc_arguments *args, int c, char *arg) + { + int ret; +@@ -193,6 +279,7 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) + case 'f': + args->rcfile = arg; + break; ++#ifndef HAVE_ISULAD + case 'u': + if (lxc_safe_uint(arg, &args->uid) < 0) + return -1; +@@ -201,8 +288,40 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) + if (lxc_safe_uint(arg, &args->gid) < 0) + return -1; + break; ++#else ++ case 'u': ++ if (get_attach_uid_gid(arg, &args->uid, &args->gid) != 0) { ++ ERROR("Failed to get attach user U/GID"); ++ return -1; ++ } ++ break; ++ case OPT_INPUT_FIFO: ++ args->terminal_fifos[0] = arg; ++ break; ++ case OPT_OUTPUT_FIFO: ++ args->terminal_fifos[1] = arg; ++ break; ++ case OPT_STDERR_FIFO: ++ args->terminal_fifos[2] = arg; ++ break; ++ case OPT_ATTACH_SUFFIX: ++ args->suffix = arg; ++ break; ++ case OPT_ATTACH_TIMEOUT: ++ if(!is_non_negative_num(arg)) { ++ ERROR("Error attach timeout parameter:%s.\n", arg); ++ return -1; ++ } ++ args->attach_timeout = (unsigned int)atoll(arg); ++ break; ++ case OPT_DISABLE_PTY: ++ args->disable_pty = 1; ++ break; ++ case OPT_OPEN_STDIN: ++ args->open_stdin = 1; ++ break; ++#endif + } +- + return 0; + } + +@@ -264,6 +383,281 @@ static int lxc_attach_create_log_file(const char *log_file) + return fd; + } + ++#ifdef HAVE_ISULAD ++// isulad: send '128 + signal' if container is killed by signal. ++#define EXIT_SIGNAL_OFFSET 128 ++ ++/*isulad: attach with terminal*/ ++static int do_attach_foreground(struct lxc_container *c, lxc_attach_command_t *command, ++ lxc_attach_options_t *attach_options, ++ char **errmsg) ++{ ++ int ret = 0; ++ pid_t pid; ++ int wexit = -1; ++ int signal; ++ ++ if (command->program) ++ ret = c->attach(c, lxc_attach_run_command, command, attach_options, &pid); ++ else ++ ret = c->attach(c, lxc_attach_run_shell, NULL, attach_options, &pid); ++ if (ret < 0) { ++ *errmsg = safe_strdup("Internal error, failed to call attach"); ++ goto out; ++ } ++ ++ ret = lxc_wait_for_pid_status(pid); ++ if (ret < 0) { ++ free(*errmsg); ++ *errmsg = safe_strdup("Internal error, failed to wait attached process"); ++ goto out; ++ } ++ ++ if (WIFEXITED(ret)) ++ wexit = WEXITSTATUS(ret); ++ else ++ wexit = -1; ++ ++ if (WIFSIGNALED(ret)) { ++ signal = WTERMSIG(ret); ++ wexit = EXIT_SIGNAL_OFFSET + signal; ++ } ++ ++ ERROR("Execd pid %d exit with %d", pid, wexit); ++ ++out: ++ if (c->lxc_conf->errmsg) { ++ free(*errmsg); ++ *errmsg = safe_strdup(c->lxc_conf->errmsg); ++ } ++ return wexit; ++} ++ ++static void close_msg_pipe(int *errpipe) ++{ ++ if (errpipe[0] >= 0) { ++ close(errpipe[0]); ++ errpipe[0] = -1; ++ } ++ if (errpipe[1] >= 0) { ++ close(errpipe[1]); ++ errpipe[1] = -1; ++ } ++} ++ ++/*isulad: attach without terminal in background */ ++static int do_attach_background(struct lxc_container *c, lxc_attach_command_t *command, ++ lxc_attach_options_t *attach_options, ++ char **errmsg) ++{ ++ int ret = 0; ++ int msgpipe[2]; ++ pid_t pid = 0; ++ ssize_t size_read; ++ char msgbuf[BUFSIZ + 1] = {0}; ++ ++ //pipdfd for get error message of child or grandchild process. ++ if (pipe2(msgpipe, O_CLOEXEC) != 0) { ++ SYSERROR("Failed to init msgpipe"); ++ return -1; ++ } ++ ++ pid = fork(); ++ if (pid < 0) { ++ close_msg_pipe(msgpipe); ++ return -1; ++ } ++ ++ if (pid != 0) { ++ close(msgpipe[1]); ++ msgpipe[1] = -1; ++ size_read = read(msgpipe[0], msgbuf, BUFSIZ); ++ if (size_read > 0) { ++ *errmsg = safe_strdup(msgbuf); ++ ret = -1; ++ } ++ ++ close(msgpipe[0]); ++ msgpipe[0] = -1; ++ ++ return ret; ++ } ++ ++ /* second fork to be reparented by init */ ++ pid = fork(); ++ if (pid < 0) { ++ SYSERROR("Error doing dual-fork"); ++ close_msg_pipe(msgpipe); ++ exit(1); ++ } ++ if (pid != 0) { ++ close_msg_pipe(msgpipe); ++ exit(0); ++ } ++ ++ close(msgpipe[0]); ++ msgpipe[0] = -1; ++ ++ if (null_stdfds() < 0) { ++ ERROR("failed to close fds"); ++ exit(1); ++ } ++ setsid(); ++ ++ if (command->program) ++ ret = c->attach(c, lxc_attach_run_command, command, attach_options, &pid); ++ else ++ ret = c->attach(c, lxc_attach_run_shell, NULL, attach_options, &pid); ++ if (ret < 0) { ++ if (c->lxc_conf->errmsg) ++ lxc_write_error_message(msgpipe[1], "%s", c->lxc_conf->errmsg); ++ else ++ lxc_write_error_message(msgpipe[1], "Failed to attach container"); ++ close(msgpipe[1]); ++ msgpipe[1] = -1; ++ ret = -1; ++ goto out; ++ } ++ ++ close(msgpipe[1]); ++ msgpipe[1] = -1; ++ ++ ret = wait_for_pid(pid); ++out: ++ lxc_container_put(c); ++ if (ret) ++ exit(EXIT_FAILURE); ++ else ++ exit(0); ++} ++ ++int main(int argc, char *argv[]) ++{ ++ int wexit = 0; ++ struct lxc_log log; ++ char *errmsg = NULL; ++ lxc_attach_options_t attach_options = LXC_ATTACH_OPTIONS_DEFAULT; ++ lxc_attach_command_t command = (lxc_attach_command_t){.program = NULL}; ++ ++ if (lxc_caps_init()) ++ exit(EXIT_FAILURE); ++ ++ if (lxc_arguments_parse(&my_args, argc, argv)) ++ exit(EXIT_FAILURE); ++ ++ log.name = my_args.name; ++ log.file = my_args.log_file; ++ log.level = my_args.log_priority; ++ log.prefix = my_args.progname; ++ log.quiet = my_args.quiet; ++ log.lxcpath = my_args.lxcpath[0]; ++ ++ if (lxc_log_init(&log)) ++ exit(EXIT_FAILURE); ++ ++ if (geteuid()) ++ if (access(my_args.lxcpath[0], O_RDONLY) < 0) { ++ ERROR("You lack access to %s", my_args.lxcpath[0]); ++ exit(EXIT_FAILURE); ++ } ++ ++ struct lxc_container *c = lxc_container_new(my_args.name, my_args.lxcpath[0]); ++ if (!c) ++ exit(EXIT_FAILURE); ++ ++ if (my_args.rcfile) { ++ c->clear_config(c); ++ if (!c->load_config(c, my_args.rcfile)) { ++ ERROR("Failed to load rcfile"); ++ lxc_container_put(c); ++ exit(EXIT_FAILURE); ++ } ++ ++ c->configfile = strdup(my_args.rcfile); ++ if (!c->configfile) { ++ ERROR("Out of memory setting new config filename"); ++ lxc_container_put(c); ++ exit(EXIT_FAILURE); ++ } ++ } ++ ++ if (!c->may_control(c)) { ++ ERROR("Insufficent privileges to control %s", c->name); ++ lxc_container_put(c); ++ exit(EXIT_FAILURE); ++ } ++ ++ if (remount_sys_proc) ++ attach_options.attach_flags |= LXC_ATTACH_REMOUNT_PROC_SYS; ++ ++ if (elevated_privileges) ++ attach_options.attach_flags &= ~(elevated_privileges); ++ ++ if (my_args.terminal_fifos[0] || my_args.terminal_fifos[1] || my_args.terminal_fifos[2]) { ++ attach_options.init_fifo[0] = my_args.terminal_fifos[0]; ++ attach_options.init_fifo[1] = my_args.terminal_fifos[1]; ++ attach_options.init_fifo[2] = my_args.terminal_fifos[2]; ++ attach_options.attach_flags |= LXC_ATTACH_TERMINAL; ++ } else if (stdfd_is_pty()) { ++ attach_options.attach_flags |= LXC_ATTACH_TERMINAL; ++ } ++ ++ attach_options.namespaces = namespace_flags; ++ attach_options.personality = new_personality; ++ attach_options.env_policy = env_policy; ++ attach_options.extra_env_vars = extra_env; ++ attach_options.extra_keep_env = extra_keep; ++ attach_options.timeout = my_args.attach_timeout; ++ ++ if (my_args.argc > 0) { ++ command.program = my_args.argv[0]; ++ command.argv = (char**)my_args.argv; ++ } ++ ++ if (my_args.console_log) { ++ attach_options.log_fd = lxc_attach_create_log_file(my_args.console_log); ++ if (attach_options.log_fd < 0) { ++ ERROR("Failed to create log file for %s", c->name); ++ lxc_container_put(c); ++ exit(EXIT_FAILURE); ++ } ++ } ++ ++ if (my_args.uid != LXC_INVALID_UID) ++ attach_options.uid = my_args.uid; ++ ++ if (my_args.gid != LXC_INVALID_GID) ++ attach_options.gid = my_args.gid; ++ ++ attach_options.suffix = my_args.suffix; ++ ++ if (my_args.disable_pty) { ++ attach_options.disable_pty = true; ++ } ++ ++ if (my_args.open_stdin) { ++ attach_options.open_stdin = true; ++ } ++ ++ /* isulad: add do attach background */ ++ if (attach_options.attach_flags & LXC_ATTACH_TERMINAL) ++ wexit = do_attach_foreground(c, &command, &attach_options, &errmsg); ++ else ++ wexit = do_attach_background(c, &command, &attach_options, &errmsg); ++ ++ if (errmsg) { ++ fprintf(stderr, "%s:%s:%s:%d starting container process caused \"%s\"", c->name, ++ __FILE__, __func__, __LINE__, errmsg); ++ free(errmsg); ++ } ++ ++ lxc_container_put(c); ++ if (wexit >= 0) ++ exit(wexit); ++ ++ exit(EXIT_FAILURE); ++} ++#else + int main(int argc, char *argv[]) + { + int ret = -1; +@@ -377,3 +771,4 @@ out: + + exit(EXIT_FAILURE); + } ++#endif +diff --git a/src/lxc/tools/lxc_ls.c b/src/lxc/tools/lxc_ls.c +index 0abcd7a63..e601f9d70 100644 +--- a/src/lxc/tools/lxc_ls.c ++++ b/src/lxc/tools/lxc_ls.c +@@ -106,7 +106,11 @@ struct wrapargs { + /* + * Takes struct wrapargs as argument. + */ ++#ifdef HAVE_ISULAD ++static int ls_get_wrapper(void *wrap, int msgfd); ++#else + static int ls_get_wrapper(void *wrap); ++#endif + + /* + * To calculate swap usage we should not simply check memory.usage_in_bytes and +@@ -1005,7 +1009,11 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) + return 0; + } + ++#ifdef HAVE_ISULAD ++static int ls_get_wrapper(void *wrap, int msgfd) ++#else + static int ls_get_wrapper(void *wrap) ++#endif + { + int ret = -1; + size_t len = 0; +@@ -1166,9 +1174,6 @@ static int ls_recv_str(int fd, char **buf) + if (ret != sizeof(slen)) + return -1; + +- if (slen == SIZE_MAX) +- return -1; +- + if (slen > 0) { + *buf = malloc(sizeof(char) * (slen + 1)); + if (!*buf) +@@ -1180,11 +1185,6 @@ static int ls_recv_str(int fd, char **buf) + return -1; + } + +- if (slen == SIZE_MAX) { +- free(*buf); +- return -1; +- } +- + (*buf)[slen] = '\0'; + } + +diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c +index 459b86793..4f2c8afa7 100644 +--- a/src/lxc/tools/lxc_start.c ++++ b/src/lxc/tools/lxc_start.c +@@ -28,6 +28,11 @@ + #include "confile.h" + #include "log.h" + ++#ifdef HAVE_ISULAD ++#include ++#include "isulad_utils.h" ++#endif ++ + lxc_log_define(lxc_start, lxc); + + static int my_parser(struct lxc_arguments *args, int c, char *arg); +@@ -48,6 +53,17 @@ static const struct option my_longopts[] = { + {"share-ipc", required_argument, 0, OPT_SHARE_IPC}, + {"share-uts", required_argument, 0, OPT_SHARE_UTS}, + {"share-pid", required_argument, 0, OPT_SHARE_PID}, ++#ifdef HAVE_ISULAD ++ {"in-fifo", required_argument, 0, OPT_INPUT_FIFO}, ++ {"out-fifo", required_argument, 0, OPT_OUTPUT_FIFO}, ++ {"err-fifo", required_argument, 0, OPT_STDERR_FIFO}, ++ {"container-pidfile", required_argument, 0, OPT_CONTAINER_INFO}, ++ {"exit-fifo", required_argument, 0, OPT_EXIT_FIFO}, ++ {"start-timeout", required_argument, 0, OPT_START_TIMEOUT}, ++ {"disable-pty", no_argument, 0, OPT_DISABLE_PTY}, ++ {"open-stdin", no_argument, 0, OPT_OPEN_STDIN}, ++ {"start-timeout", required_argument, 0, OPT_START_TIMEOUT}, ++#endif + LXC_COMMON_OPTIONS + }; + +@@ -118,6 +134,38 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) + case OPT_SHARE_PID: + args->share_ns[LXC_NS_PID] = arg; + break; ++ ++#ifdef HAVE_ISULAD ++ case OPT_CONTAINER_INFO: ++ args->container_info = arg; ++ break; ++ case OPT_INPUT_FIFO: ++ args->terminal_fifos[0] = arg; ++ break; ++ case OPT_OUTPUT_FIFO: ++ args->terminal_fifos[1] = arg; ++ break; ++ case OPT_STDERR_FIFO: ++ args->terminal_fifos[2] = arg; ++ break; ++ case OPT_EXIT_FIFO: ++ args->exit_monitor_fifo = arg; ++ break; ++ case OPT_DISABLE_PTY: ++ args->disable_pty = 1; ++ break; ++ case OPT_OPEN_STDIN: ++ args->open_stdin = 1; ++ break; ++ case OPT_START_TIMEOUT: ++ if(!is_non_negative_num(arg)) { ++ fprintf(stderr, "Error start timeout parameter:%s.\n", arg); ++ return -1; ++ } ++ args->start_timeout = (unsigned int)atoi(arg); ++ break; ++#endif ++ + } + return 0; + } +@@ -163,6 +211,9 @@ int main(int argc, char *argv[]) + "/sbin/init", + NULL, + }; ++#ifdef HAVE_ISULAD ++ char *container_info_file = NULL; ++#endif + + lxc_list_init(&defines); + +@@ -283,6 +334,42 @@ int main(int argc, char *argv[]) + goto out; + } + ++#ifdef HAVE_ISULAD ++ /* isulad: container info file used to store pid and ppid info of container*/ ++ if (my_args.container_info != NULL) { ++ if (ensure_path(&container_info_file, my_args.container_info) < 0) { ++ ERROR("Failed to ensure container's piddile '%s'", my_args.container_info); ++ goto out; ++ } ++ if (!c->set_container_info_file(c, container_info_file)) { ++ ERROR("Failed to set container's piddile '%s'", container_info_file); ++ goto out; ++ } ++ } ++ ++ if (my_args.terminal_fifos[0] || my_args.terminal_fifos[1] || my_args.terminal_fifos[2]) { ++ c->set_terminal_init_fifos(c, my_args.terminal_fifos[0], my_args.terminal_fifos[1], my_args.terminal_fifos[2]); ++ } ++ ++ /* isulad: fifo used to monitor state of monitor process */ ++ if (my_args.exit_monitor_fifo != NULL) { ++ c->exit_fifo = safe_strdup(my_args.exit_monitor_fifo); ++ } ++ ++ if (my_args.disable_pty) { ++ c->want_disable_pty(c, true); ++ } ++ ++ if (my_args.open_stdin) { ++ c->want_open_stdin(c, true); ++ } ++ ++ /* isulad: add start timeout */ ++ if(my_args.start_timeout) { ++ c->set_start_timeout(c, my_args.start_timeout); ++ } ++#endif ++ + if (my_args.console) + if (!c->set_config_item(c, "lxc.console.path", my_args.console)) + goto out; +@@ -305,6 +392,11 @@ int main(int argc, char *argv[]) + else + err = c->start(c, 0, args) ? EXIT_SUCCESS : EXIT_FAILURE; + if (err) { ++#ifdef HAVE_ISULAD ++ if (c->lxc_conf->errmsg) ++ fprintf(stderr, "%s:%s:%s:%d starting container process caused \"%s\"", c->name, ++ __FILE__, __func__, __LINE__, c->lxc_conf->errmsg); ++#endif + ERROR("The container failed to start"); + + if (my_args.daemonize) +@@ -320,5 +412,8 @@ int main(int argc, char *argv[]) + + out: + lxc_container_put(c); ++#ifdef HAVE_ISULAD ++ free(container_info_file); ++#endif + exit(err); + } +diff --git a/src/lxc/utils.c b/src/lxc/utils.c +index 88d0f85ee..4e418fbb9 100644 +--- a/src/lxc/utils.c ++++ b/src/lxc/utils.c +@@ -27,6 +27,8 @@ + #include + #include + #include ++#include ++#include + + #include "config.h" + #include "log.h" +@@ -35,7 +37,7 @@ + #include "memory_utils.h" + #include "namespace.h" + #include "parse.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "syscall_wrappers.h" + #include "utils.h" + +@@ -71,6 +73,9 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev, + int ret; + struct dirent *direntp; + char pathname[PATH_MAX]; ++#ifdef HAVE_ISULAD ++ int saved_errno = 0; ++#endif + + dir = opendir(dirname); + if (!dir) +@@ -133,6 +138,11 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev, + } else { + ret = unlink(pathname); + if (ret < 0) { ++#ifdef HAVE_ISULAD ++ if (saved_errno == 0) { ++ saved_errno = errno; ++ } ++#endif + __do_close int fd = -EBADF; + + fd = open(pathname, O_RDONLY | O_CLOEXEC | O_NONBLOCK); +@@ -158,10 +168,18 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev, + } + + if (rmdir(dirname) < 0 && !btrfs_try_remove_subvol(dirname) && !hadexclude) { ++#ifdef HAVE_ISULAD ++ if (saved_errno == 0) { ++ saved_errno = errno; ++ } ++#endif + SYSERROR("Failed to delete \"%s\"", dirname); + failed = 1; + } + ++#ifdef HAVE_ISULAD ++ errno = saved_errno; ++#endif + return failed ? -1 : 0; + } + +@@ -1008,7 +1026,7 @@ static int open_if_safe(int dirfd, const char *nextpath) + * + * Return an open fd for the path, or <0 on error. + */ +-static int open_without_symlink(const char *target, const char *prefix_skip) ++int open_without_symlink(const char *target, const char *prefix_skip) + { + int curlen = 0, dirfd, fulllen, i; + char *dup; +@@ -1425,6 +1443,11 @@ static int lxc_get_unused_loop_dev(char *name_loop) + { + int loop_nr, ret; + int fd_ctl = -1, fd_tmp = -1; ++#if HAVE_ISULAD ++ // isulad: retry and try mknod ++ int max_retry = 200; ++ bool try_mknod = true; ++#endif + + fd_ctl = open("/dev/loop-control", O_RDWR | O_CLOEXEC); + if (fd_ctl < 0) { +@@ -1442,8 +1465,37 @@ static int lxc_get_unused_loop_dev(char *name_loop) + if (ret < 0 || ret >= LO_NAME_SIZE) + goto on_error; + ++#if HAVE_ISULAD ++retry: ++#endif + fd_tmp = open(name_loop, O_RDWR | O_CLOEXEC); + if (fd_tmp < 0) { ++#if HAVE_ISULAD ++ /* Success of LOOP_CTL_GET_FREE doesn't mean /dev/loop$i is ready, ++ * we try to make node by ourself to avoid wait. */ ++ if (try_mknod) { ++ /* Do not check result of mknod because LOOP_CTL_GET_FREE ++ * alse do mknod, so this mknod may fail as node already ++ * exist. If we can open the node without error, we can ++ * say that it's be created successfully. ++ * ++ * note: 7 is the major device number of loopback devices ++ * in kernel. ++ */ ++ mknod(name_loop, S_IFBLK | 0640, makedev(7, loop_nr)); ++ try_mknod = false; ++ goto retry; ++ } ++ /* we need to wait some time to make sure it's ready for open if ++ * it can't open even if we have already try to make node by ourself. */ ++ if (max_retry > 0) { ++ max_retry--; ++ usleep(5000); /* 5 millisecond */ ++ goto retry; ++ } ++ SYSERROR("Failed to open loop \"%s\"", name_loop); ++ goto on_error; ++#else + /* on Android loop devices are moved under /dev/block, give it a shot */ + ret = snprintf(name_loop, LO_NAME_SIZE, "/dev/block/loop%d", loop_nr); + if (ret < 0 || ret >= LO_NAME_SIZE) +@@ -1452,6 +1504,7 @@ static int lxc_get_unused_loop_dev(char *name_loop) + fd_tmp = open(name_loop, O_RDWR | O_CLOEXEC); + if (fd_tmp < 0) + SYSERROR("Failed to open loop \"%s\"", name_loop); ++#endif + } + + on_error: +@@ -1661,6 +1714,7 @@ uint64_t lxc_find_next_power2(uint64_t n) + return n; + } + ++#ifndef HAVE_ISULAD + static int process_dead(/* takes */ int status_fd) + { + __do_close int dupfd = -EBADF; +@@ -1698,15 +1752,19 @@ static int process_dead(/* takes */ int status_fd) + + return ret; + } ++#endif + + int lxc_set_death_signal(int signal, pid_t parent, int parent_status_fd) + { + int ret; ++#ifndef HAVE_ISULAD + pid_t ppid; ++#endif + + ret = prctl(PR_SET_PDEATHSIG, prctl_arg(signal), prctl_arg(0), + prctl_arg(0), prctl_arg(0)); + ++#ifndef HAVE_ISULAD + /* verify that we haven't been orphaned in the meantime */ + ppid = (pid_t)syscall(SYS_getppid); + if (ppid == 0) { /* parent outside our pidns */ +@@ -1718,6 +1776,7 @@ int lxc_set_death_signal(int signal, pid_t parent, int parent_status_fd) + } else if (ppid != parent) { + return raise(SIGKILL); + } ++#endif + + if (ret < 0) + return -1; +@@ -1755,8 +1814,13 @@ int lxc_rm_rf(const char *dirname) + struct dirent *direntp; + + dir = opendir(dirname); +- if (!dir) ++ if (!dir) { ++ if (errno == ENOENT) { ++ WARN("Destroy path: \"%s\" do not exist", dirname); ++ return 0; ++ } + return log_error_errno(-1, errno, "Failed to open dir \"%s\"", dirname); ++ } + + while ((direntp = readdir(dir))) { + __do_free char *pathname = NULL; +@@ -1904,3 +1968,230 @@ int fix_stdio_permissions(uid_t uid) + + return fret; + } ++ ++#ifdef HAVE_ISULAD ++/* isulad: write error message */ ++void lxc_write_error_message(int errfd, const char *format, ...) ++{ ++ int ret; ++ char errbuf[BUFSIZ + 1] = {0}; ++ ssize_t sret; ++ va_list argp; ++ ++ if (errfd <= 0) ++ return; ++ ++ va_start(argp, format); ++ ret = vsnprintf(errbuf, BUFSIZ, format, argp); ++ va_end(argp); ++ if (ret < 0 || ret >= BUFSIZ) ++ SYSERROR("Failed to call vsnprintf"); ++ sret = write(errfd, errbuf, strlen(errbuf)); ++ if (sret < 0) ++ SYSERROR("Write errbuf failed"); ++} ++ ++/* isulad: read file to buffer */ ++int lxc_file2str(const char *filename, char ret[], int cap) ++{ ++ int fd, num_read; ++ ++ if ((fd = lxc_open(filename, O_RDONLY | O_CLOEXEC, 0)) == -1) ++ return -1; ++ if ((num_read = read(fd, ret, cap - 1)) <= 0) ++ num_read = -1; ++ else ++ ret[num_read] = 0; ++ close(fd); ++ ++ return num_read; ++} ++ ++/* isuald: lxc_stat2proc() makes sure it can handle arbitrary executable file basenames ++ * for `cmd', i.e. those with embedded whitespace or embedded ')'s. ++ * Such names confuse %s (see scanf(3)), so the string is split and %39c ++ * is used instead. (except for embedded ')' "(%[^)]c)" would work. ++ */ ++static proc_t *lxc_stat2proc(const char *S) ++{ ++ int num; ++ proc_t *P = NULL; ++ char *tmp = NULL; ++ ++ if (!S) ++ return NULL; ++ ++ tmp = strrchr(S, ')'); /* split into "PID (cmd" and "" */ ++ if (!tmp) ++ return NULL; ++ *tmp = '\0'; /* replace trailing ')' with NUL */ ++ ++ P = malloc(sizeof(proc_t)); ++ if (P == NULL) ++ return NULL; ++ (void)memset(P, 0x00, sizeof(proc_t)); ++ ++ /* parse these two strings separately, skipping the leading "(". */ ++ num = sscanf(S, "%d (%15c", &P->pid, P->cmd); /* comm[16] in kernel */ ++ if (num != 2) { ++ ERROR("Call sscanf error: %s", errno ? strerror(errno) : ""); ++ free(P); ++ return NULL; ++ } ++ num = sscanf(tmp + 2, /* skip space after ')' too */ ++ "%c " ++ "%d %d %d %d %d " ++ "%lu %lu %lu %lu %lu " ++ "%Lu %Lu %Lu %Lu " /* utime stime cutime cstime */ ++ "%ld %ld %ld %ld " ++ "%Lu " /* start_time */ ++ "%lu " ++ "%ld " ++ "%lu %lu %lu %lu %lu %lu " ++ "%*s %*s %*s %*s " /* discard, no RT signals & Linux 2.1 used hex */ ++ "%lu %lu %lu " ++ "%d %d " ++ "%lu %lu", ++ &P->state, ++ &P->ppid, &P->pgrp, &P->session, &P->tty, &P->tpgid, ++ &P->flags, &P->min_flt, &P->cmin_flt, &P->maj_flt, &P->cmaj_flt, ++ &P->utime, &P->stime, &P->cutime, &P->cstime, ++ &P->priority, &P->nice, &P->timeout, &P->it_real_value, ++ &P->start_time, ++ &P->vsize, ++ &P->rss, ++ &P->rss_rlim, &P->start_code, &P->end_code, &P->start_stack, &P->kstk_esp, ++ &P->kstk_eip, ++ &P->wchan, &P->nswap, &P->cnswap, ++ &P->exit_signal, &P->processor, /* 2.2.1 ends with "exit_signal" */ ++ &P->rtprio, &P->sched /* both added to 2.5.18 */ ++ ); ++ if (num != 35) { ++ ERROR("Call sscanf error: %s", errno ? strerror(errno) : ""); ++ free(P); ++ return NULL; ++ } ++ if (P->tty == 0) ++ P->tty = -1; /* the old notty val, update elsewhere bef. moving to 0 */ ++ return P; ++} ++ ++/* isulad: get starttime of process pid */ ++unsigned long long lxc_get_process_startat(pid_t pid) ++{ ++ int sret = 0; ++ unsigned long long startat = 0; ++ proc_t *pid_info = NULL; ++ char filename[PATH_MAX] = {0}; ++ char sbuf[1024] = {0}; /* bufs for stat */ ++ ++ sret = snprintf(filename, sizeof(filename), "/proc/%d/stat", pid); ++ if (sret < 0 || sret >= sizeof(filename)) { ++ ERROR("Failed to sprintf filename"); ++ goto out; ++ } ++ ++ if ((lxc_file2str(filename, sbuf, sizeof(sbuf))) == -1) { ++ SYSERROR("Failed to read pidfile %s", filename); ++ goto out; ++ } ++ ++ pid_info = lxc_stat2proc(sbuf); ++ if (!pid_info) { ++ ERROR("Failed to get proc stat info"); ++ goto out; ++ } ++ ++ startat = pid_info->start_time; ++out: ++ free(pid_info); ++ return startat; ++} ++ ++// isulad: set env home in container ++int lxc_setup_env_home(uid_t uid) ++{ ++#define __PASSWD_FILE__ "/etc/passwd" ++ char *homedir = "/"; // default home dir is / ++ FILE *stream = NULL; ++ struct passwd pw, *pwbufp = NULL; ++ char buf[BUFSIZ]; ++ ++ stream = fopen_cloexec(__PASSWD_FILE__, "r"); ++ if (stream == NULL) { ++ SYSWARN("Failed to open %s", __PASSWD_FILE__); ++ goto set_env; ++ } ++ ++ while (fgetpwent_r(stream, &pw, buf, sizeof(buf), &pwbufp) == 0 && pwbufp != NULL) { ++ if (pwbufp->pw_uid == uid) { ++ homedir = pwbufp->pw_dir; ++ goto set_env; ++ } ++ } ++ WARN("User invalid, can not find user '%u'", uid); ++ ++set_env: ++ if (stream) ++ fclose(stream); ++ ++ // if we didn't configure HOME, set it based on uid ++ if (setenv("HOME", homedir, 0) < 0) { ++ SYSERROR("Unable to set env 'HOME'"); ++ return -1; ++ } ++ ++ NOTICE("Setted env 'HOME' to %s", homedir); ++ return 0; ++} ++ ++bool lxc_process_alive(pid_t pid, unsigned long long start_time) ++{ ++ int sret = 0; ++ bool alive = true; ++ proc_t *pid_info = NULL; ++ char filename[PATH_MAX] = {0}; ++ char sbuf[1024] = {0}; /* bufs for stat */ ++ ++ sret = kill(pid, 0); ++ if (sret < 0 && errno == ESRCH) ++ return false; ++ ++ sret = snprintf(filename, sizeof(filename), "/proc/%d/stat", pid); ++ if (sret < 0 || sret >= sizeof(filename)) { ++ ERROR("Failed to sprintf filename"); ++ goto out; ++ } ++ ++ if ((lxc_file2str(filename, sbuf, sizeof(sbuf))) == -1) { ++ ERROR("Failed to read pidfile %s", filename); ++ alive = false; ++ goto out; ++ } ++ ++ pid_info = lxc_stat2proc(sbuf); ++ if (!pid_info) { ++ ERROR("Failed to get proc stat info"); ++ alive = false; ++ goto out; ++ } ++ ++ if (start_time != pid_info->start_time) ++ alive = false; ++out: ++ free(pid_info); ++ return alive; ++} ++ ++bool is_non_negative_num(const char *s) ++{ ++ if (!s || !strcmp(s, "")) ++ return false; ++ while(*s != '\0') { ++ if(!isdigit(*s)) ++ return false; ++ ++s; ++ } ++ return true; ++} ++#endif +diff --git a/src/lxc/utils.h b/src/lxc/utils.h +index cf2c04251..39ef5792f 100644 +--- a/src/lxc/utils.h ++++ b/src/lxc/utils.h +@@ -25,9 +25,16 @@ + #include "initutils.h" + #include "macro.h" + #include "memory_utils.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "string_utils.h" + ++#ifdef HAVE_ISULAD ++#include "isulad_utils.h" ++ ++/* isulad: replace space with SPACE_MAGIC_STR */ ++#define SPACE_MAGIC_STR "[#)" ++#endif ++ + /* returns 1 on success, 0 if there were any failures */ + extern int lxc_rmdir_onedev(const char *path, const char *exclude); + extern int get_u16(unsigned short *val, const char *arg, int base); +@@ -41,6 +48,73 @@ extern char *get_rundir(void); + #endif + #endif + ++#ifdef HAVE_ISULAD ++/* isulad: ++ ld cutime, cstime, priority, nice, timeout, it_real_value, rss, ++ c state, ++ d ppid, pgrp, session, tty, tpgid, ++ s signal, blocked, sigignore, sigcatch, ++ lu flags, min_flt, cmin_flt, maj_flt, cmaj_flt, utime, stime, ++ lu rss_rlim, start_code, end_code, start_stack, kstk_esp, kstk_eip, ++ lu start_time, vsize, wchan, nswap, cnswap, ++*/ ++ ++/* Basic data structure which holds all information we can get about a process. ++ * (unless otherwise specified, fields are read from /proc/#/stat) ++ * ++ * Most of it comes from task_struct in linux/sched.h ++ */ ++typedef struct proc_t { ++ // 1st 16 bytes ++ int pid; /* process id */ ++ int ppid; /* pid of parent process */ ++ ++ char state; /* single-char code for process state (S=sleeping) */ ++ ++ unsigned long long ++ utime, /* user-mode CPU time accumulated by process */ ++ stime, /* kernel-mode CPU time accumulated by process */ ++ // and so on... ++ cutime, /* cumulative utime of process and reaped children */ ++ cstime, /* cumulative stime of process and reaped children */ ++ start_time; /* start time of process -- seconds since 1-1-70 */ ++ ++ long ++ priority, /* kernel scheduling priority */ ++ timeout, /* ? */ ++ nice, /* standard unix nice level of process */ ++ rss, /* resident set size from /proc/#/stat (pages) */ ++ it_real_value; /* ? */ ++ unsigned long ++ rtprio, /* real-time priority */ ++ sched, /* scheduling class */ ++ vsize, /* number of pages of virtual memory ... */ ++ rss_rlim, /* resident set size limit? */ ++ flags, /* kernel flags for the process */ ++ min_flt, /* number of minor page faults since process start */ ++ maj_flt, /* number of major page faults since process start */ ++ cmin_flt, /* cumulative min_flt of process and child processes */ ++ cmaj_flt, /* cumulative maj_flt of process and child processes */ ++ nswap, /* ? */ ++ cnswap, /* cumulative nswap ? */ ++ start_code, /* address of beginning of code segment */ ++ end_code, /* address of end of code segment */ ++ start_stack, /* address of the bottom of stack for the process */ ++ kstk_esp, /* kernel stack pointer */ ++ kstk_eip, /* kernel instruction pointer */ ++ wchan; /* address of kernel wait channel proc is sleeping in */ ++ ++ char cmd[16]; /* basename of executable file in call to exec(2) */ ++ int ++ pgrp, /* process group id */ ++ session, /* session id */ ++ tty, /* full device number of controlling terminal */ ++ tpgid, /* terminal process group id */ ++ exit_signal, /* might not be SIGCHLD */ ++ processor; /* current (or most recent?) CPU */ ++} proc_t; ++#endif ++ + static inline int lxc_set_cloexec(int fd) + { + return fcntl(fd, F_SETFD, FD_CLOEXEC); +@@ -145,6 +219,7 @@ extern bool cgns_supported(void); + extern char *choose_init(const char *rootfs); + extern bool switch_to_ns(pid_t pid, const char *ns); + extern char *get_template_path(const char *t); ++extern int open_without_symlink(const char *target, const char *prefix_skip); + extern int safe_mount(const char *src, const char *dest, const char *fstype, + unsigned long flags, const void *data, + const char *rootfs); +@@ -241,14 +316,16 @@ extern bool lxc_can_use_pidfd(int pidfd); + + extern int fix_stdio_permissions(uid_t uid); + +-static inline bool uid_valid(uid_t uid) +-{ +- return uid != LXC_INVALID_UID; +-} ++#ifdef HAVE_ISULAD ++extern void lxc_write_error_message(int errfd, const char *format, ...); ++extern int lxc_file2str(const char *filename, char ret[], int cap); ++extern int unsigned long long lxc_get_process_startat(pid_t pid); ++// set env home in container ++extern int lxc_setup_env_home(uid_t uid); + +-static inline bool gid_valid(gid_t gid) +-{ +- return gid != LXC_INVALID_GID; +-} ++extern bool lxc_process_alive(pid_t pid, unsigned long long start_time); ++ ++extern bool is_non_negative_num(const char *s); ++#endif + + #endif /* __LXC_UTILS_H */ +diff --git a/src/lxc/uuid.c b/src/lxc/uuid.c +index 256225b8f..a5d24bbcb 100644 +--- a/src/lxc/uuid.c ++++ b/src/lxc/uuid.c +@@ -116,7 +116,7 @@ int lxc_id128_write_fd(int fd, lxc_id128_t id) + + int lxc_id128_write(const char *p, lxc_id128_t id) + { +- __do_close int fd = -EBADF; ++ int fd = -1; + + fd = open(p, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY|O_TRUNC, 0444); + if (fd < 0) +diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am +index 11bba260a..59905d326 100644 +--- a/src/tests/Makefile.am ++++ b/src/tests/Makefile.am +@@ -30,7 +30,7 @@ lxc_test_parse_config_file_SOURCES = parse_config_file.c \ + lxc_test_raw_clone_SOURCES = lxc_raw_clone.c \ + lxctest.h \ + ../lxc/namespace.c ../lxc/namespace.h \ +- ../lxc/process_utils.c ../lxc/process_utils.h ++ ../lxc/raw_syscalls.c ../lxc/raw_syscalls.h + ../lxc/utils.c ../lxc/utils.h + lxc_test_reboot_SOURCES = reboot.c + lxc_test_saveconfig_SOURCES = saveconfig.c +@@ -58,6 +58,10 @@ AM_CFLAGS=-DLXCROOTFSMOUNT=\"$(LXCROOTFSMOUNT)\" \ + -I $(top_srcdir)/src/lxc/tools \ + -pthread + ++if HAVE_ISULAD ++AM_CFLAGS += -I $(top_srcdir)/src/lxc/json ++endif ++ + if ENABLE_APPARMOR + AM_CFLAGS += -DHAVE_APPARMOR + endif +@@ -114,8 +118,7 @@ bin_SCRIPTS += lxc-test-automount \ + lxc-test-createconfig \ + lxc-test-exit-code \ + lxc-test-no-new-privs \ +- lxc-test-rootfs \ +- lxc-test-usernsexec ++ lxc-test-rootfs + + if DISTRO_UBUNTU + bin_SCRIPTS += lxc-test-lxc-attach \ +@@ -164,7 +167,6 @@ EXTRA_DIST = basic.c \ + lxc-test-snapdeps \ + lxc-test-symlink \ + lxc-test-unpriv \ +- lxc-test-usernsexec \ + lxc-test-utils.c \ + may_control.c \ + mount_injection.c \ +diff --git a/src/tests/attach.c b/src/tests/attach.c +index 07e641d56..acb4c89f4 100644 +--- a/src/tests/attach.c ++++ b/src/tests/attach.c +@@ -29,6 +29,7 @@ + #include "lxctest.h" + #include "utils.h" + #include "lsm/lsm.h" ++#include "config.h" + + #include + +@@ -76,7 +77,11 @@ static void test_attach_lsm_set_config(struct lxc_container *ct) + ct->save_config(ct, NULL); + } + ++#ifdef HAVE_ISULAD ++static int test_attach_lsm_func_func(void* payload, int fd) ++#else + static int test_attach_lsm_func_func(void* payload) ++#endif + { + TSTOUT("%s", lsm_process_label_get(syscall(SYS_getpid))); + return 0; +@@ -187,7 +192,11 @@ static int test_attach_lsm_func(struct lxc_container *ct) { return 0; } + static int test_attach_lsm_cmd(struct lxc_container *ct) { return 0; } + #endif /* HAVE_APPARMOR || HAVE_SELINUX */ + ++#ifdef HAVE_ISULAD ++static int test_attach_func_func(void* payload, int fd) ++#else + static int test_attach_func_func(void* payload) ++#endif + { + TSTOUT("%d", (int)syscall(SYS_getpid)); + return 0; +diff --git a/src/tests/console.c b/src/tests/console.c +index c88f4329b..c0ad16033 100644 +--- a/src/tests/console.c ++++ b/src/tests/console.c +@@ -37,14 +37,14 @@ + } while (0) + + static void test_console_close_all(int ttyfd[MAXCONSOLES], +- int ptmxfd[MAXCONSOLES]) ++ int masterfd[MAXCONSOLES]) + { + int i; + + for (i = 0; i < MAXCONSOLES; i++) { +- if (ptmxfd[i] != -1) { +- close(ptmxfd[i]); +- ptmxfd[i] = -1; ++ if (masterfd[i] != -1) { ++ close(masterfd[i]); ++ masterfd[i] = -1; + } + + if (ttyfd[i] != -1) { +@@ -59,14 +59,14 @@ static int test_console_running_container(struct lxc_container *c) + int nrconsoles, i, ret = -1; + int ttynum [MAXCONSOLES]; + int ttyfd [MAXCONSOLES]; +- int ptmxfd[MAXCONSOLES]; ++ int masterfd[MAXCONSOLES]; + + for (i = 0; i < MAXCONSOLES; i++) +- ttynum[i] = ttyfd[i] = ptmxfd[i] = -1; ++ ttynum[i] = ttyfd[i] = masterfd[i] = -1; + + ttynum[0] = 1; + +- ret = c->console_getfd(c, &ttynum[0], &ptmxfd[0]); ++ ret = c->console_getfd(c, &ttynum[0], &masterfd[0]); + if (ret < 0) { + TSTERR("console allocate failed"); + goto err1; +@@ -79,12 +79,12 @@ static int test_console_running_container(struct lxc_container *c) + } + + /* attempt to alloc same ttynum */ +- ret = c->console_getfd(c, &ttynum[0], &ptmxfd[1]); ++ ret = c->console_getfd(c, &ttynum[0], &masterfd[1]); + if (ret != -1) { + TSTERR("console allocate should fail for allocated ttynum %d", ttynum[0]); + goto err2; + } +- close(ptmxfd[0]); ptmxfd[0] = -1; ++ close(masterfd[0]); masterfd[0] = -1; + close(ttyfd[0]); ttyfd[0] = -1; + + /* ensure we can allocate all consoles, we do this a few times to +@@ -92,7 +92,7 @@ static int test_console_running_container(struct lxc_container *c) + */ + for (i = 0; i < 10; i++) { + for (nrconsoles = 0; nrconsoles < MAXCONSOLES; nrconsoles++) { +- ret = c->console_getfd(c, &ttynum[nrconsoles], &ptmxfd[nrconsoles]); ++ ret = c->console_getfd(c, &ttynum[nrconsoles], &masterfd[nrconsoles]); + if (ret < 0) + break; + ttyfd[nrconsoles] = ret; +@@ -103,13 +103,13 @@ static int test_console_running_container(struct lxc_container *c) + goto err2; + } + +- test_console_close_all(ttyfd, ptmxfd); ++ test_console_close_all(ttyfd, masterfd); + } + + ret = 0; + + err2: +- test_console_close_all(ttyfd, ptmxfd); ++ test_console_close_all(ttyfd, masterfd); + + err1: + return ret; +diff --git a/src/tests/containertests.c b/src/tests/containertests.c +index 0fb6fbdfb..b28bcd56d 100644 +--- a/src/tests/containertests.c ++++ b/src/tests/containertests.c +@@ -135,7 +135,7 @@ int main(int argc, char *argv[]) + + str = c->config_file_name(c); + #define CONFIGFNAM LXCPATH "/" MYNAME "/config" +- if (str && strcmp(str, CONFIGFNAM)) { ++ if (!str || strcmp(str, CONFIGFNAM)) { + fprintf(stderr, "%d: got wrong config file name (%s, not %s)\n", __LINE__, str, CONFIGFNAM); + goto out; + } +diff --git a/src/tests/lxc-test-no-new-privs b/src/tests/lxc-test-no-new-privs +index cfcb43bd6..8642992dd 100755 +--- a/src/tests/lxc-test-no-new-privs ++++ b/src/tests/lxc-test-no-new-privs +@@ -36,13 +36,11 @@ cleanup() { + + trap cleanup EXIT SIGHUP SIGINT SIGTERM + +-if [ ! -d /etc/lxc ]; then +- mkdir -p /etc/lxc/ +- cat > /etc/lxc/default.conf << EOF ++mkdir -p /etc/lxc/ ++cat > /etc/lxc/default.conf << EOF + lxc.net.0.type = veth + lxc.net.0.link = lxcbr0 + EOF +-fi + + ARCH=i386 + if type dpkg >/dev/null 2>&1; then +diff --git a/src/tests/lxc-test-usernsexec b/src/tests/lxc-test-usernsexec +deleted file mode 100755 +index 0ee48b353..000000000 +--- a/src/tests/lxc-test-usernsexec ++++ /dev/null +@@ -1,368 +0,0 @@ +-#!/bin/bash +-# +-# This is a bash test case to test lxc-usernsexec. +-# It basically supports usring lxc-usernsexec to execute itself +-# and then create files and check that their ownership is as expected. +-# +-# It requires that the current user has at least 1 value in subuid and /etc/subgid +-TEMP_D="" +-VERBOSITY=0 +-set -f +- +-fail() { echo "$@" 1>&2; exit 1; } +-error() { echo "$@" 1>&2; } +-skip() { +- error "SKIP:" "$@" +- exit 0 +-} +-debug() { +- local level=${1}; shift; +- [ "${level}" -gt "${VERBOSITY}" ] && return +- error "${@}" +-} +- +-collect_owners() { +- # collect_owners([--dir=dir], file1, file2 ...) +- # set _RET to a space delimited array of +- # :owner:group :owner:group ... +- local out="" ret="" dir="" +- if [ "${1#--dir=}" != "$1" ]; then +- dir="${1#--dir=}" +- shift +- fi +- for arg in "$@"; do +- # drop the :* so that input can be same as touch_files. +- out=$(stat --format "%n:%u:%g" "${dir}${arg}") || { +- error "failed to stat ${arg}" +- return 1; +- } +- ret="$ret ${out##*/}" +- done +- _RET="${ret# }" +-} +- +-cleanup() { +- if [ -d "$TEMP_D" ]; then +- rm -Rf "$TEMP_D" +- fi +-} +- +-touch_files() { +- # touch_files tok [tok ...] +- # tok is filename:chown_id:chown_gid +- # if chown_id or chown_gid is empty, then chown will do the right thing +- # and only change the provided value. +- local args="" tok="" fname="" uidgid="" +- args=( "$@" ) +- for tok in "$@"; do +- fname=${tok%%:*} +- uidgid=${tok#$fname} +- uidgid=${uidgid#:} +- : > "$fname" || { error "failed to create $fname"; return 1; } +- [ -z "$uidgid" ] && continue +- chown $uidgid "$fname" || { error "failed to chmod '$uidgid' $fname ($?)"; return 1; } +- done +-} +- +-inside_cleanup() { +- local f="" +- rm -f "${FILES[@]}" +- echo "$STATUS" >&5 +- echo "$STATUS" >&6 +-} +- +-set_files() { +- local x="" +- FILES=( ) +- for x in "$@"; do +- FILES[${#FILES[@]}]="${x%%:*}" +- done +-} +- +-inside() { +- # this what gets run inside the usernsexec environment. +- # basically expects arguments of :uid:gid +- # it will create the file, and then chmod it to the provided uid:gid +- # it writes to file descriptor 5 a single line with space delimited +- # exit_value uid gid [:: ... ] +- STATUS=127 +- trap inside_cleanup EXIT +- local uid="" gid="" x="" +- +- uid=$(id -u) || fail "failed execution of id -u" +- gid=$(id -g) || fail "failed execution of id -g" +- +- set_files "$@" +- +- touch_files "$@" || fail "failed to create files" +- +- collect_owners "${FILES[@]}" || fail "failed to collect owners" +- result="$_RET" +- +- # tell caller we are done. +- echo "0" "$uid" "$gid" "$result" >&5 +- STATUS=0 +- +- # let the caller do things while the files are around. +- read -t 30 x <&6 +- +- exit +-} +- +-runtest() { +- # runtest(mydir, nsexec_args, [inside [...]]) +- # - use 'mydir' as a working dir. +- # - execute lxc-usernsexec $nsexec_args -- inside +- # +- # write to stdout +- # exit_value inside_exit_value inside_uid:inside_gid +- # +- # where results are a list of space separated +- # filename:uid:gid +- # for each file passed in inside_args +- [ $# -ge 3 ] || { error "runtest expects 2 args"; return 1; } +- local mydir="$1" nsexec_args="$2" +- shift 2 +- local ret inside_owners t="" +- KIDPID="" +- +- mkfifo "${mydir}/5" && exec 5<>"${mydir}/5" || return +- mkfifo "${mydir}/6" && exec 6<>"${mydir}/6" || return +- mkdir --mode=777 "${mydir}/work" || return +- cd "${mydir}/work" +- +- set_files "$@" +- +- local results="" oresults="" iresults="" iuid="" igid="" n=0 +- +- error "$" $USERNSEXEC ${nsexec_args} -- "$MYPATH" inside "$*" +- ${USERNSEXEC} ${nsexec_args} -- "$MYPATH" inside "$@" & +- KIDPID=$! +- +- [ -d "/proc/$KIDPID" ] || { +- wait $KIDPID +- fail "kid $KIDPID died quickly $?" +- } +- +- # if lxc-usernsexec fails to execute MYPATH inside, then +- # the read below would timeout. To avoid a long timeout, +- # we do a short timeout and check the pid is alive. +- while ! read -t 1 ret iuid igid inside_owners <&5; do +- n=$((n+1)) +- if [ ! -d "/proc/$KIDPID" ]; then +- wait $KIDPID +- fail "kid $KIDPID is gone $?" +- fi +- [ $n -ge 30 ] && fail "child never wrote to pipe" +- done +- iresults=( $inside_owners ) +- +- collect_owners "--dir=${mydir}/work/" "${FILES[@]}" || return +- oresults=( $_RET ) +- +- echo 0 >&6 +- wait +- +- ret=$? +- +- results=( ) +- for((i=0;i<${#iresults[@]};i++)); do +- results[$i]="${oresults[$i]}:${iresults[$i]#*:}" +- done +- +- echo 0 $ret "$iuid:$igid" "${results[@]}" +-} +- +-runcheck() { +- local name="$1" expected="$2" nsexec_args="$3" found="" +- shift 3 +- mkdir "${TEMP_D}/$name" || fail "failed mkdir /$name.d" +- local err="${TEMP_D}/$name.err" +- out=$("$MYPATH" runtest "${TEMP_D}/$name" "$nsexec_args" "$@" 2>"$err") || { +- error "$name: FAIL - runtest failed $?" +- [ -n "$out" ] && error " $out" +- sed 's,^, ,' "$err" 1>&2 +- ERRORS="${ERRORS} $name" +- return 1 +- } +- set -- $out +- local parentrc=$1 kidrc=$2 iuidgid="$3" found="" +- shift 3 +- found="$*" +- [ "$parentrc" = "0" -a "$kidrc" = "0" ] || { +- error "$name: FAIL - parentrc=$parentrc kidrc=$kidrc found=$found" +- ERRORS="${ERRORS} $name" +- return 1 +- } +- [ "$expected" = "$found" ] && { +- error "$name: PASS" +- PASS="${PASSES} $name" +- return 0 +- } +- echo "$name: FAIL expected '$expected' != found '$found'" +- FAILS="${FAILS} $name" +- return 1 +-} +- +-setup_Usage() { +- cat <> /etc/subuid || { +- error "failed to add $asuser to /etc/subuid" +- } +- fi +- +- subgid=$(awk -F: '$1 == n { print $2; exit(0); }' "n=$asuser" /etc/subgid) || { +- error "failed to read /etc/subgid for $asuser" +- return 1 +- } +- if [ -n "$subgid" ]; then +- debug 1 "$asuser already had subgid=$subgid" +- else +- debug 1 "adding $asuser:$create_subgid to /etc/subgid" +- echo "$asuser:$create_subgid" >> /etc/subgid || { +- error "failed to add $asuser to /etc/subgid" +- } +- fi +- +- debug 0 "as $asuser executing ${MYPATH} ${pt_args[*]}" +- sudo -Hu "$asuser" "${MYPATH}" "${pt_args[@]}" +-} +- +-USERNSEXEC=${USERNSEXEC:-lxc-usernsexec} +-MYPATH=$(readlink -f "$0") || { echo "failed to get full path to self: $0"; exit 1; } +-export MYPATH +- +-if [ "$1" = "inside" ]; then +- shift +- inside "$@" +- exit +-elif [ "$1" = "runtest" ]; then +- shift +- runtest "$@" +- exit +-elif [ "$1" = "setup_and_run" ]; then +- shift +- setup_and_run "$@" +- exit +-fi +- +-name=$(id --user --name) || fail "failed to get username" +-if [ "$name" = "root" ]; then +- setup_and_run "$@" +- exit +-fi +- +-subuid=$(awk -F: '$1 == n { print $2; exit(0); }' "n=$name" /etc/subuid) && +- [ -n "$subuid" ] || fail "did not find $name in /etc/subuid" +- +-subgid=$(awk -F: '$1 == n { print $2; exit(0); }' "n=$name" /etc/subgid) && +- [ -n "$subgid" ] || fail "did not find $name in /etc/subgid" +- +- +-uid=$(id --user) || fail "failed to get uid" +-gid=$(id --group) || fail "failed to get gid" +- +-mapuid="u:0:$uid:1" +-mapgid="g:0:$gid:1" +- +-ver=$(dpkg-query --show lxc-utils | awk '{print $2}') +-error "uid=$uid gid=$gid name=$name subuid=$subuid subgid=$subgid ver=$ver" +-error "lxc-utils=$ver kver=$(uname -r)" +-error "USERNSEXEC=$USERNSEXEC" +- +-TEMP_D=$(mktemp -d) +-trap cleanup EXIT +- +-PASSES=""; FAILS=""; ERRORS="" +-runcheck nouidgid "f0:$subuid:$subgid:0:0" "" f0 +- +-runcheck myuidgid "f0:$uid:$gid:0:0" \ +- "-m$mapuid -m$mapgid" f0 +- +-runcheck subuidgid \ +- "f0:$subuid:$subgid:0:0" \ +- "-mu:0:$subuid:1 -mg:0:$subgid:1" f0:0:0 +- +-runcheck bothsets "f0:$uid:$gid:0:0 f1:$subuid:$subgid:1:1 f2:$uid:$subgid:0:1" \ +- "-m$mapuid -m$mapgid -mu:1:$subuid:1 -mg:1:$subgid:1" \ +- f0 f1:1:1 f2::1 +- +-runcheck mismatch "f0:$uid:$subgid:0:0 f1:$subuid:$gid:15:31" \ +- "-mu:0:$uid:1 -mg:0:$subgid:1 -mu:15:$subuid:1 -mg:31:$gid:1" \ +- f0 f1:15:31 +- +-FAILS=${FAILS# } +-ERRORS=${ERRORS# } +-PASSES=${PASSES# } +- +-[ -z "${FAILS}" ] || error "FAILS: ${FAILS}" +-[ -z "${ERRORS}" ] || error "ERRORS: ${ERRORS}" +-[ -z "${FAILS}" -a -z "${ERRORS}" ] || exit 1 +-exit 0 +diff --git a/src/tests/lxc_raw_clone.c b/src/tests/lxc_raw_clone.c +index f72e20ccc..655454f39 100644 +--- a/src/tests/lxc_raw_clone.c ++++ b/src/tests/lxc_raw_clone.c +@@ -39,7 +39,7 @@ + + #include "lxctest.h" + #include "namespace.h" +-#include "process_utils.h" ++#include "raw_syscalls.h" + #include "utils.h" + + int main(int argc, char *argv[]) +diff --git a/templates/lxc-oci.in b/templates/lxc-oci.in +index dab077191..8017c38c1 100644 +--- a/templates/lxc-oci.in ++++ b/templates/lxc-oci.in +@@ -348,7 +348,8 @@ fi + # shellcheck disable=SC2039 + # shellcheck disable=SC2068 + umoci --log=error unpack ${umoci_args[@]} --image "${DOWNLOAD_TEMP}:latest" "${LXC_ROOTFS}.tmp" +-find "${LXC_ROOTFS}.tmp/rootfs" -mindepth 1 -maxdepth 1 -exec mv '{}' "${LXC_ROOTFS}/" \; ++rmdir "${LXC_ROOTFS}" ++mv "${LXC_ROOTFS}.tmp/rootfs" "${LXC_ROOTFS}" + + OCI_CONF_FILE=$(getconfigpath "${DOWNLOAD_TEMP}" latest) + LXC_CONF_FILE="${LXC_PATH}/config" +-- +2.25.1 + diff --git a/0001-iSulad-add-HAVE_ISULAD-macro.patch b/0001-iSulad-add-HAVE_ISULAD-macro.patch deleted file mode 100644 index cbae979..0000000 --- a/0001-iSulad-add-HAVE_ISULAD-macro.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 49f7dc89e5ae690a0b81570a81321b1593aeb994 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Sat, 11 Apr 2020 15:43:38 +0800 -Subject: [PATCH 01/49] iSulad: add HAVE_ISULAD macro - -Signed-off-by: LiFeng ---- - configure.ac | 11 +++++++++++ - src/lxc/Makefile.am | 3 +++ - 2 files changed, 14 insertions(+) - -diff --git a/configure.ac b/configure.ac -index 90a4bd4..5f386d9 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -791,6 +791,17 @@ else - AC_MSG_RESULT([no]) - fi - -+AC_MSG_CHECKING([Whether adapt to iSulad]) -+AC_ARG_ENABLE([isulad], -+ [AC_HELP_STRING([--enable-isulad], [enable adapt to iSulad [default=yes]])], -+ [adapt_isulad=$enableval], [adapt_isulad=yes]) -+AM_CONDITIONAL([HAVE_ISULAD], [test "x$adapt_isulad" = "xyes"]) -+if test "x$adapt_isulad" = "xyes"; then -+ AC_DEFINE([HAVE_ISULAD], 1, [adapt to iSulad]) -+ AC_MSG_RESULT([yes]) -+else -+ AC_MSG_RESULT([no]) -+fi - # Files requiring some variable expansion - AC_CONFIG_FILES([ - Makefile -diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am -index c374c2d..e7fc844 100644 ---- a/src/lxc/Makefile.am -+++ b/src/lxc/Makefile.am -@@ -212,6 +212,9 @@ AM_CFLAGS = -DLXCROOTFSMOUNT=\"$(LXCROOTFSMOUNT)\" \ - -I $(top_srcdir)/src/lxc/storage \ - -I $(top_srcdir)/src/lxc/cgroups - -+if HAVE_ISULAD -+AM_CFLAGS += -DHAVE_ISULAD -+endif - if ENABLE_APPARMOR - AM_CFLAGS += -DHAVE_APPARMOR - endif --- -1.8.3.1 - diff --git a/0002-confile-add-lxc.isulad.init.args-config-interface.patch b/0002-confile-add-lxc.isulad.init.args-config-interface.patch deleted file mode 100644 index cb8adf7..0000000 --- a/0002-confile-add-lxc.isulad.init.args-config-interface.patch +++ /dev/null @@ -1,213 +0,0 @@ -From 549a0a959b84a483d9f733cf7a157900f4c889c4 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Sat, 11 Apr 2020 16:16:15 +0800 -Subject: [PATCH 02/49] confile: add lxc.isulad.init.args config interface - -lxc.isulad.init.args config interface is used to specify the args for -the container. - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 17 ++++++++++++++ - src/lxc/conf.h | 11 ++++++++- - src/lxc/confile.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/lxccontainer.c | 33 +++++++++++++++++++++++++++ - 4 files changed, 122 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 2f6be9f..62a6979 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -3835,6 +3835,9 @@ void lxc_conf_free(struct lxc_conf *conf) - free(conf->cgroup_meta.controllers); - free(conf->shmount.path_host); - free(conf->shmount.path_cont); -+#ifdef HAVE_ISULAD -+ lxc_clear_init_args(conf); -+#endif - free(conf); - } - -@@ -4645,3 +4648,17 @@ struct lxc_list *sort_cgroup_settings(struct lxc_list *cgroup_settings) - - return result; - } -+ -+#ifdef HAVE_ISULAD -+/*isulad clear init args*/ -+int lxc_clear_init_args(struct lxc_conf *lxc_conf) -+{ -+ size_t i; -+ -+ for (i = 0; i < lxc_conf->init_argc; i++) -+ free(lxc_conf->init_argv[i]); -+ free(lxc_conf->init_argv); -+ -+ return 0; -+} -+#endif -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 64885c3..8a198e4 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -398,6 +398,13 @@ struct lxc_conf { - /* Absolute path (in the container) to the shared mount point */ - char *path_cont; - } shmount; -+ -+#ifdef HAVE_ISULAD -+ /* isulad add: init args used to repalce init_cmd*/ -+ char **init_argv; -+ size_t init_argc; -+#endif -+ - }; - - extern int write_id_mapping(enum idtype idtype, pid_t pid, const char *buf, -@@ -470,5 +477,7 @@ extern int lxc_clear_namespace(struct lxc_conf *c); - extern int userns_exec_minimal(const struct lxc_conf *conf, - int (*fn_parent)(void *), void *fn_parent_data, - int (*fn_child)(void *), void *fn_child_data); -- -+#ifdef HAVE_ISULAD -+int lxc_clear_init_args(struct lxc_conf *lxc_conf); -+#endif - #endif /* __LXC_CONF_H */ -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 0ca577f..e535beb 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -147,6 +147,9 @@ lxc_config_define(tty_dir); - lxc_config_define(uts_name); - lxc_config_define(sysctl); - lxc_config_define(proc); -+#ifdef HAVE_ISULAD -+lxc_config_define(init_args); -+#endif - - /* - * Important Note: -@@ -259,6 +262,10 @@ static struct lxc_config_t config_jump_table[] = { - { "lxc.uts.name", set_config_uts_name, get_config_uts_name, clr_config_uts_name, }, - { "lxc.sysctl", set_config_sysctl, get_config_sysctl, clr_config_sysctl, }, - { "lxc.proc", set_config_proc, get_config_proc, clr_config_proc, }, -+#ifdef HAVE_ISULAD -+ { "lxc.isulad.init.args", set_config_init_args, get_config_init_args, clr_config_init_args, }, -+ -+#endif - }; - - static const size_t config_jump_table_size = sizeof(config_jump_table) / sizeof(struct lxc_config_t); -@@ -6094,3 +6101,58 @@ int lxc_list_net(struct lxc_conf *c, const char *key, char *retv, int inlen) - - return fulllen; - } -+ -+#ifdef HAVE_ISULAD -+/* isulad: set config for init args */ -+static int set_config_init_args(const char *key, const char *value, -+ struct lxc_conf *lxc_conf, void *data) -+{ -+ int ret = 0; -+ char *tmp = NULL; -+ char *new_value = NULL; -+ -+ ret = set_config_string_item(&new_value, value); -+ if (ret || !new_value) -+ return ret; -+ -+ tmp = realloc(lxc_conf->init_argv, (lxc_conf->init_argc + 1) * sizeof(char *)); -+ if (!tmp) { -+ ERROR("Out of memory"); -+ free(new_value); -+ return -1; -+ } -+ -+ lxc_conf->init_argv = (char **)tmp; -+ -+ lxc_conf->init_argv[lxc_conf->init_argc] = new_value; -+ lxc_conf->init_argc++; -+ -+ return 0; -+} -+ -+/* isulad: get config init args */ -+static int get_config_init_args(const char *key, char *retv, int inlen, -+ struct lxc_conf *c, void *data) -+{ -+ int i, len, fulllen = 0; -+ struct lxc_list *it; -+ -+ if (!retv) -+ inlen = 0; -+ else -+ memset(retv, 0, inlen); -+ -+ for (i = 0; i < c->init_argc; i++) { -+ strprint(retv, inlen, "%s", c->init_argv[i]); -+ } -+ -+ return fulllen; -+} -+ -+/* isulad: clr config init args*/ -+static inline int clr_config_init_args(const char *key, struct lxc_conf *c, -+ void *data) -+{ -+ return lxc_clear_init_args(c); -+} -+#endif -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 487d838..f4462fd 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -857,6 +857,33 @@ static bool wait_on_daemonized_start(struct lxc_handler *handler, int pid) - return true; - } - -+#ifdef HAVE_ISULAD -+/* isulad: use init argv as init cmd */ -+static char **use_init_args(char **init_argv, size_t init_args) -+{ -+ size_t i; -+ int nargs = 0; -+ char **argv; -+ -+ if (!init_argv) -+ return NULL; -+ -+ do { -+ argv = malloc(sizeof(char *)); -+ } while (!argv); -+ -+ argv[0] = NULL; -+ for (i = 0; i < init_args; i++) -+ push_arg(&argv, init_argv[i], &nargs); -+ -+ if (nargs == 0) { -+ free(argv); -+ return NULL; -+ } -+ return argv; -+} -+#endif -+ - static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const argv[]) - { - int ret; -@@ -914,6 +941,12 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - argv = init_cmd = split_init_cmd(conf->init_cmd); - } - -+#ifdef HAVE_ISULAD -+ if (!argv) { -+ argv = init_cmd = use_init_args(conf->init_argv, conf->init_argc); -+ } -+#endif -+ - /* ... otherwise use default_args. */ - if (!argv) { - if (useinit) { --- -1.8.3.1 - diff --git a/0003-confile-add-lxc.isulad.populate.device-interface.patch b/0003-confile-add-lxc.isulad.populate.device-interface.patch deleted file mode 100644 index 3b26bf1..0000000 --- a/0003-confile-add-lxc.isulad.populate.device-interface.patch +++ /dev/null @@ -1,1284 +0,0 @@ -From 481e3bf2c164d5303c6f827fc2bcbb67508d0ff5 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Sat, 11 Apr 2020 17:12:44 +0800 -Subject: [PATCH 03/49] confile: add lxc.isulad.populate.device interface - -Signed-off-by: LiFeng ---- - src/lxc/Makefile.am | 9 + - src/lxc/conf.c | 126 ++++++++++ - src/lxc/conf.h | 25 ++ - src/lxc/confile.c | 120 ++++++++- - src/lxc/isulad_utils.c | 99 ++++++++ - src/lxc/isulad_utils.h | 20 ++ - src/lxc/path.c | 655 +++++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/path.h | 65 +++++ - src/lxc/utils.h | 3 + - 9 files changed, 1121 insertions(+), 1 deletion(-) - create mode 100644 src/lxc/isulad_utils.c - create mode 100644 src/lxc/isulad_utils.h - create mode 100644 src/lxc/path.c - create mode 100644 src/lxc/path.h - -diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am -index e7fc844..21441c0 100644 ---- a/src/lxc/Makefile.am -+++ b/src/lxc/Makefile.am -@@ -52,6 +52,10 @@ noinst_HEADERS = api_extensions.h \ - utils.h \ - uuid.h - -+#if HAVE_ISULAD -+noinst_HEADERS += isulad_utils.h path.h -+#endif -+ - if IS_BIONIC - noinst_HEADERS += ../include/fexecve.h \ - ../include/lxcmntent.h \ -@@ -154,6 +158,11 @@ liblxc_la_SOURCES = af_unix.c af_unix.h \ - version.h \ - $(LSM_SOURCES) - -+#if HAVE_ISULAD -+liblxc_la_SOURCES += isulad_utils.c isulad_utils.h \ -+ path.c path.h -+#endif -+ - if IS_BIONIC - liblxc_la_SOURCES += ../include/fexecve.c ../include/fexecve.h \ - ../include/lxcmntent.c ../include/lxcmntent.h \ -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 62a6979..e9c0a37 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -2564,6 +2564,11 @@ struct lxc_conf *lxc_conf_init(void) - memset(&new->ns_share, 0, sizeof(char *) * LXC_NS_MAX); - seccomp_conf_init(new); - -+#ifdef HAVE_ISULAD -+ /* isulad add begin */ -+ lxc_list_init(&new->populate_devs); -+#endif -+ - return new; - } - -@@ -3274,6 +3279,99 @@ static int lxc_setup_boot_id(void) - return 0; - } - -+#ifdef HAVE_ISULAD -+/* isulad: setup devices which will be populated in the container.*/ -+static int setup_populate_devs(const struct lxc_rootfs *rootfs, struct lxc_list *devs) -+{ -+ int ret = 0; -+ char *pathdirname = NULL; -+ char path[MAXPATHLEN]; -+ mode_t file_mode = 0; -+ struct lxc_populate_devs *dev_elem = NULL; -+ struct lxc_list *it = NULL; -+ mode_t cur_mask; -+ -+ INFO("Populating devices into container"); -+ cur_mask = umask(0000); -+ lxc_list_for_each(it, devs) { -+ ret = 0; -+ dev_elem = it->elem; -+ -+ ret = snprintf(path, MAXPATHLEN, "%s/%s", rootfs->path ? rootfs->mount : "", dev_elem->name); -+ if (ret < 0 || ret >= MAXPATHLEN) { -+ ret = -1; -+ goto reset_umask; -+ } -+ -+ /* create any missing directories */ -+ pathdirname = safe_strdup(path); -+ pathdirname = dirname(pathdirname); -+ ret = mkdir_p(pathdirname, 0755); -+ free(pathdirname); -+ if (ret < 0) { -+ WARN("Failed to create target directory"); -+ ret = -1; -+ goto reset_umask; -+ } -+ -+ if (!strcmp(dev_elem->type, "c")) { -+ file_mode = dev_elem->file_mode | S_IFCHR; -+ } else if (!strcmp(dev_elem->type, "b")) { -+ file_mode = dev_elem->file_mode | S_IFBLK; -+ } else { -+ ERROR("Failed to parse devices type '%s'", dev_elem->type); -+ ret = -1; -+ goto reset_umask; -+ } -+ -+ DEBUG("Try to mknod '%s':'%d':'%d':'%d'\n", path, -+ file_mode, dev_elem->maj, dev_elem->min); -+ -+ ret = mknod(path, file_mode, makedev(dev_elem->maj, dev_elem->min)); -+ if (ret && errno != EEXIST) { -+ SYSERROR("Failed to mknod '%s':'%d':'%d':'%d'", dev_elem->name, -+ file_mode, dev_elem->maj, dev_elem->min); -+ -+ char hostpath[MAXPATHLEN]; -+ FILE *pathfile = NULL; -+ -+ // Unprivileged containers cannot create devices, so -+ // try to bind mount the device from the host -+ ret = snprintf(hostpath, MAXPATHLEN, "/dev/%s", dev_elem->name); -+ if (ret < 0 || ret >= MAXPATHLEN) { -+ ret = -1; -+ goto reset_umask; -+ } -+ pathfile = lxc_fopen(path, "wb"); -+ if (!pathfile) { -+ SYSERROR("Failed to create device mount target '%s'", path); -+ ret = -1; -+ goto reset_umask; -+ } -+ fclose(pathfile); -+ if (safe_mount(hostpath, path, 0, MS_BIND, NULL, -+ rootfs->path ? rootfs->mount : NULL) != 0) { -+ SYSERROR("Failed bind mounting device %s from host into container", -+ dev_elem->name); -+ ret = -1; -+ goto reset_umask; -+ } -+ } -+ if (chown(path, dev_elem->uid, dev_elem->gid) < 0) { -+ ERROR("Error chowning %s", path); -+ ret = -1; -+ goto reset_umask; -+ } -+ } -+ -+reset_umask: -+ (void)umask(cur_mask); -+ -+ INFO("Populated devices into container /dev"); -+ return ret; -+} -+#endif -+ - int lxc_setup(struct lxc_handler *handler) - { - int ret; -@@ -3382,6 +3480,15 @@ int lxc_setup(struct lxc_handler *handler) - return log_error(-1, "Failed to populate \"/dev\""); - } - -+#ifdef HAVE_ISULAD -+ /* isulad: setup devices which will be populated in the container. */ -+ if (!lxc_list_empty(&lxc_conf->populate_devs)) { -+ if (setup_populate_devs(&lxc_conf->rootfs, &lxc_conf->populate_devs) != 0) { -+ return log_error(-1, "Failed to setup devices in the container"); -+ } -+ } -+#endif -+ - /* Make sure any start hooks are in the container */ - if (!verify_start_hooks(lxc_conf)) - return log_error(-1, "Failed to verify start hooks"); -@@ -3837,6 +3944,7 @@ void lxc_conf_free(struct lxc_conf *conf) - free(conf->shmount.path_cont); - #ifdef HAVE_ISULAD - lxc_clear_init_args(conf); -+ lxc_clear_populate_devices(conf); - #endif - free(conf); - } -@@ -4661,4 +4769,22 @@ int lxc_clear_init_args(struct lxc_conf *lxc_conf) - - return 0; - } -+ -+/*isulad: clear populate devices*/ -+int lxc_clear_populate_devices(struct lxc_conf *c) -+{ -+ struct lxc_list *it = NULL; -+ struct lxc_list *next = NULL; -+ -+ lxc_list_for_each_safe(it, &c->populate_devs, next) { -+ struct lxc_populate_devs *dev_elem = it->elem; -+ lxc_list_del(it); -+ free(dev_elem->name); -+ free(dev_elem->type); -+ free(dev_elem); -+ free(it); -+ } -+ return 0; -+} -+ - #endif -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 8a198e4..452458c 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -230,6 +230,27 @@ struct device_item { - int global_rule; - }; - -+#ifdef HAVE_ISULAD -+/* -+ * iSulad: Defines a structure to store the devices which will -+ * be attached in container -+ * @name : the target device name in container -+ * @type : the type of target device "c" or "b" -+ * @mode : file mode for the device -+ * @maj : major number for the device -+ * @min : minor number for the device -+ */ -+struct lxc_populate_devs { -+ char *name; -+ char *type; -+ mode_t file_mode; -+ int maj; -+ int min; -+ uid_t uid; -+ gid_t gid; -+}; -+#endif -+ - struct lxc_conf { - /* Pointer to the name of the container. Do not free! */ - const char *name; -@@ -403,6 +424,9 @@ struct lxc_conf { - /* isulad add: init args used to repalce init_cmd*/ - char **init_argv; - size_t init_argc; -+ -+ /* populate devices*/ -+ struct lxc_list populate_devs; - #endif - - }; -@@ -479,5 +503,6 @@ extern int userns_exec_minimal(const struct lxc_conf *conf, - int (*fn_child)(void *), void *fn_child_data); - #ifdef HAVE_ISULAD - int lxc_clear_init_args(struct lxc_conf *lxc_conf); -+int lxc_clear_populate_devices(struct lxc_conf *c); - #endif - #endif /* __LXC_CONF_H */ -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index e535beb..f0772f9 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -149,6 +149,7 @@ lxc_config_define(sysctl); - lxc_config_define(proc); - #ifdef HAVE_ISULAD - lxc_config_define(init_args); -+lxc_config_define(populate_device); - #endif - - /* -@@ -264,7 +265,7 @@ static struct lxc_config_t config_jump_table[] = { - { "lxc.proc", set_config_proc, get_config_proc, clr_config_proc, }, - #ifdef HAVE_ISULAD - { "lxc.isulad.init.args", set_config_init_args, get_config_init_args, clr_config_init_args, }, -- -+ { "lxc.isulad.populate.device", set_config_populate_device, get_config_populate_device, clr_config_populate_device, }, - #endif - }; - -@@ -6155,4 +6156,121 @@ static inline int clr_config_init_args(const char *key, struct lxc_conf *c, - { - return lxc_clear_init_args(c); - } -+ -+/* isulad: set config for populate device */ -+static int set_config_populate_device(const char *key, const char *value, -+ struct lxc_conf *lxc_conf, void *data) -+{ -+ int ret = 0, major = 0, minor = 0; -+ uid_t uid = (uid_t)-1; -+ gid_t gid = (gid_t)-1; -+ char name[4096] = {0}; /* MAX dev path name */ -+ char type[3] = {0}; -+ char *replace_value = NULL; -+ mode_t filemode = 0; -+ struct lxc_list *iter = NULL; -+ struct lxc_list *dev_list = NULL; -+ struct lxc_populate_devs *dev_elem = NULL; -+ -+ if (lxc_config_value_empty(value)) -+ return lxc_clear_populate_devices(lxc_conf); -+ -+ /* lxc.populate.device = PATH_IN_CONTAINER:DEVICETYPE:MAJOR:MINOR:MODE:UID:GID -+ * For e.g. lxc.populate.device = /dev/sda:b:8:0:0666:0:0 -+ */ -+ ret = sscanf(value, "%4095[^:]:%2[^:]:%i:%i:%i:%u:%u", name, type, &major, &minor, &filemode, &uid, &gid); -+ if (ret != 7) -+ return -1; -+ -+ /* find existing list element */ -+ lxc_list_for_each(iter, &lxc_conf->populate_devs) { -+ dev_elem = iter->elem; -+ -+ if (strcmp(name, dev_elem->name) != 0) -+ continue; -+ -+ replace_value = safe_strdup(type); -+ -+ free(dev_elem->type); -+ dev_elem->type = replace_value; -+ dev_elem->file_mode = filemode; -+ dev_elem->maj = major; -+ dev_elem->min = minor; -+ dev_elem->uid = (uid_t)uid; -+ dev_elem->gid = (gid_t)gid; -+ return 0; -+ } -+ -+ /* allocate list element */ -+ dev_list = malloc(sizeof(*dev_list)); -+ if (dev_list == NULL) -+ goto on_error; -+ -+ lxc_list_init(dev_list); -+ -+ dev_elem = malloc(sizeof(*dev_elem)); -+ if (dev_elem == NULL) -+ goto on_error; -+ memset(dev_elem, 0, sizeof(*dev_elem)); -+ -+ dev_elem->name = safe_strdup(name); -+ -+ dev_elem->type = safe_strdup(type); -+ -+ dev_elem->file_mode = filemode; -+ dev_elem->maj = major; -+ dev_elem->min = minor; -+ dev_elem->uid = (uid_t)uid; -+ dev_elem->gid = (gid_t)gid; -+ -+ lxc_list_add_elem(dev_list, dev_elem); -+ -+ lxc_list_add_tail(&lxc_conf->populate_devs, dev_list); -+ -+ return 0; -+ -+on_error: -+ free(dev_list); -+ if (dev_elem) { -+ free(dev_elem->name); -+ free(dev_elem->type); -+ free(dev_elem); -+ } -+ return -1; -+} -+ -+/* isulad: get config populate device -+ * If you ask for 'lxc.populate.device', then all populate device -+ * entries will be printed, in 'lxc.populate.device = path_in_container:type:major:minor:mode:uid:gid' format. -+ * For e.g. lxc.populate.device = /dev/sda:b:8:0:0666:0:0 -+ */ -+static int get_config_populate_device(const char *key, char *retv, int inlen, -+ struct lxc_conf *c, void *data) -+{ -+ int len; -+ struct lxc_list *it = NULL; -+ int fulllen = 0; -+ -+ if (!retv) -+ inlen = 0; -+ else -+ memset(retv, 0, inlen); -+ -+ lxc_list_for_each(it, &c->populate_devs) { -+ struct lxc_populate_devs *elem = it->elem; -+ strprint(retv, inlen, "lxc.populate.device = %s:%s:%d:%d:%o:%u:%u\n", -+ elem->name, elem->type, elem->maj, -+ elem->min, elem->file_mode, elem->uid, elem->gid); -+ } -+ -+ return fulllen; -+} -+ -+/* isulad: clr config populate devices*/ -+static inline int clr_config_populate_device(const char *key, struct lxc_conf *c, -+ void *data) -+{ -+ return lxc_clear_populate_devices(c); -+} -+ - #endif -diff --git a/src/lxc/isulad_utils.c b/src/lxc/isulad_utils.c -new file mode 100644 -index 0000000..b282404 ---- /dev/null -+++ b/src/lxc/isulad_utils.c -@@ -0,0 +1,99 @@ -+/* SPDX-License-Identifier: LGPL-2.1+ */ -+/****************************************************************************** -+ * Copyright (c) Huawei Technologies Co., Ltd. 2020. Allrights reserved -+ * Description: isulad utils -+ * Author: lifeng -+ * Create: 2020-04-11 -+******************************************************************************/ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include "isulad_utils.h" -+#include "log.h" -+#include "path.h" -+#include "file_utils.h" -+ -+lxc_log_define(isulad_utils, lxc); -+ -+void *lxc_common_calloc_s(size_t size) -+{ -+ if (size == 0 || size > SIZE_MAX) { -+ return NULL; -+ } -+ -+ return calloc((size_t)1, size); -+} -+ -+int lxc_mem_realloc(void **newptr, size_t newsize, void *oldptr, size_t oldsize) -+{ -+ void *tmp = NULL; -+ -+ if (newsize == 0) { -+ goto err_out; -+ } -+ -+ tmp = lxc_common_calloc_s(newsize); -+ if (tmp == NULL) { -+ ERROR("Failed to malloc memory"); -+ goto err_out; -+ } -+ -+ if (oldptr != NULL) { -+ memcpy(tmp, oldptr, (newsize < oldsize) ? newsize : oldsize); -+ -+ memset(oldptr, 0, oldsize); -+ -+ free(oldptr); -+ } -+ -+ *newptr = tmp; -+ return 0; -+ -+err_out: -+ return -1; -+} -+ -+char *safe_strdup(const char *src) -+{ -+ char *dst = NULL; -+ -+ if (src == NULL) { -+ return NULL; -+ } -+ -+ dst = strdup(src); -+ if (dst == NULL) { -+ abort(); -+ } -+ -+ return dst; -+} -+ -+int lxc_open(const char *filename, int flags, mode_t mode) -+{ -+ char rpath[PATH_MAX] = {0x00}; -+ -+ if (cleanpath(filename, rpath, sizeof(rpath)) == NULL) { -+ return -1; -+ } -+ if (mode) { -+ return open(rpath, (int)((unsigned int)flags | O_CLOEXEC), mode); -+ } else { -+ return open(rpath, (int)((unsigned int)flags | O_CLOEXEC)); -+ } -+} -+ -+FILE *lxc_fopen(const char *filename, const char *mode) -+{ -+ char rpath[PATH_MAX] = {0x00}; -+ -+ if (cleanpath(filename, rpath, sizeof(rpath)) == NULL) { -+ return NULL; -+ } -+ -+ return fopen_cloexec(rpath, mode); -+} -diff --git a/src/lxc/isulad_utils.h b/src/lxc/isulad_utils.h -new file mode 100644 -index 0000000..7a6ab00 ---- /dev/null -+++ b/src/lxc/isulad_utils.h -@@ -0,0 +1,20 @@ -+/* SPDX-License-Identifier: LGPL-2.1+ */ -+/****************************************************************************** -+ * Copyright (c) Huawei Technologies Co., Ltd. 2020. Allrights reserved -+ * Description: isulad utils -+ * Author: lifeng -+ * Create: 2020-04-11 -+******************************************************************************/ -+#ifndef __iSULAD_UTILS_H -+#define __iSULAD_UTILS_H -+ -+#include -+ -+extern int lxc_mem_realloc(void **newptr, size_t newsize, void *oldptr, size_t oldsize); -+extern void *lxc_common_calloc_s(size_t size); -+extern char *safe_strdup(const char *src); -+ -+extern int lxc_open(const char *filename, int flags, mode_t mode); -+extern FILE *lxc_fopen(const char *filename, const char *mode); -+ -+#endif -diff --git a/src/lxc/path.c b/src/lxc/path.c -new file mode 100644 -index 0000000..65b8aad ---- /dev/null -+++ b/src/lxc/path.c -@@ -0,0 +1,655 @@ -+/* SPDX-License-Identifier: LGPL-2.1+ */ -+/****************************************************************************** -+ * Copyright (c) Huawei Technologies Co., Ltd. 2020. Allrights reserved -+ * Description: isulad utils -+ * Author: lifeng -+ * Create: 2020-04-11 -+******************************************************************************/ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "path.h" -+#include "log.h" -+#include "isulad_utils.h" -+ -+lxc_log_define(lxc_path_ui, lxc); -+ -+#define ISSLASH(C) ((C) == '/') -+#define IS_ABSOLUTE_FILE_NAME(F) (ISSLASH ((F)[0])) -+#define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F)) -+ -+bool specify_current_dir(const char *path) -+{ -+ char *basec = NULL, *bname = NULL; -+ bool res = false; -+ -+ basec = safe_strdup(path); -+ -+ bname = basename(basec); -+ if (bname == NULL) { -+ free(basec); -+ ERROR("Out of memory"); -+ return false; -+ } -+ res = !strcmp(bname, "."); -+ free(basec); -+ return res; -+} -+ -+bool has_traling_path_separator(const char *path) -+{ -+ return path && strlen(path) && (path[strlen(path) - 1] == '/'); -+} -+ -+// PreserveTrailingDotOrSeparator returns the given cleaned path -+// and appends a trailing `/.` or `/` if its corresponding original -+// path ends with a trailing `/.` or `/`. If the cleaned -+// path already ends in a `.` path segment, then another is not added. If the -+// clean path already ends in a path separator, then another is not added. -+char *preserve_trailing_dot_or_separator(const char *cleanedpath, -+ const char *originalpath) -+{ -+ char *respath = NULL; -+ size_t len; -+ -+ if (strlen(cleanedpath) > (SIZE_MAX - 3)) { -+ return NULL; -+ } -+ -+ len = strlen(cleanedpath) + 3; -+ respath = malloc(len); -+ if (respath == NULL) { -+ ERROR("Out of memory"); -+ return NULL; -+ } -+ memset(respath, 0x00, len); -+ strcat(respath, cleanedpath); -+ -+ if (!specify_current_dir(cleanedpath) && specify_current_dir(originalpath)) { -+ if (!has_traling_path_separator(respath)) -+ strcat(respath, "/"); -+ strcat(respath, "."); -+ } -+ -+ if (!has_traling_path_separator(respath) && -+ has_traling_path_separator(originalpath)) -+ strcat(respath, "/"); -+ -+ return respath; -+} -+ -+ -+// Split splits path immediately following the final Separator, -+// separating it into a directory and file name component. -+// If there is no Separator in path, Split returns an empty dir -+// and file set to path. -+// The returned values have the property that path = dir+file. -+bool filepath_split(const char *path, char **dir, char **base) -+{ -+ ssize_t i; -+ size_t len; -+ -+ len = strlen(path); -+ if (len >= PATH_MAX) { -+ ERROR("Invalid path"); -+ return false; -+ } -+ i = len - 1; -+ while (i >= 0 && path[i] != '/') -+ i--; -+ -+ *dir = malloc(i + 2); -+ if (*dir == NULL) { -+ ERROR("Out of memory"); -+ return false; -+ } -+ memcpy(*dir, path, i + 1); -+ *(*dir + i + 1) = '\0'; -+ -+ *base = safe_strdup(path + i + 1); -+ -+ return true; -+} -+ -+ -+static bool do_clean_path_continue(const char *endpos, const char *stpos, const char *respath, char **dst) -+{ -+ if (endpos - stpos == 1 && stpos[0] == '.') { -+ return true; -+ } else if (endpos - stpos == 2 && stpos[0] == '.' && stpos[1] == '.') { -+ char *dest = *dst; -+ if (dest <= respath + 1) { -+ return true; -+ } -+ for (--dest; dest > respath && !ISSLASH(dest[-1]); --dest) { -+ *dst = dest; -+ return true; -+ } -+ *dst = dest; -+ return true; -+ } -+ return false; -+} -+ -+int do_clean_path(const char *respath, const char *limit_respath, -+ const char *stpos, char **dst) -+{ -+ char *dest = *dst; -+ const char *endpos = NULL; -+ -+ for (endpos = stpos; *stpos; stpos = endpos) { -+ while (ISSLASH(*stpos)) { -+ ++stpos; -+ } -+ -+ for (endpos = stpos; *endpos && !ISSLASH(*endpos); ++endpos) { -+ } -+ -+ if (endpos - stpos == 0) { -+ break; -+ } else if (do_clean_path_continue(endpos, stpos, respath, &dest)) { -+ continue; -+ } -+ -+ if (!ISSLASH(dest[-1])) { -+ *dest++ = '/'; -+ } -+ -+ if (dest + (endpos - stpos) >= limit_respath) { -+ ERROR("Path is too long"); -+ if (dest > respath + 1) { -+ dest--; -+ } -+ *dest = '\0'; -+ return -1; -+ } -+ -+ memcpy(dest, stpos, (size_t)(endpos - stpos)); -+ dest += endpos - stpos; -+ *dest = '\0'; -+ } -+ *dst = dest; -+ return 0; -+} -+ -+char *cleanpath(const char *path, char *realpath, size_t realpath_len) -+{ -+ char *respath = NULL; -+ char *dest = NULL; -+ const char *stpos = NULL; -+ const char *limit_respath = NULL; -+ -+ if (path == NULL || path[0] == '\0' || \ -+ realpath == NULL || (realpath_len < PATH_MAX)) { -+ return NULL; -+ } -+ -+ respath = realpath; -+ -+ memset(respath, 0, realpath_len); -+ limit_respath = respath + PATH_MAX; -+ -+ if (!IS_ABSOLUTE_FILE_NAME(path)) { -+ if (!getcwd(respath, PATH_MAX)) { -+ ERROR("Failed to getcwd"); -+ respath[0] = '\0'; -+ goto error; -+ } -+ dest = strchr(respath, '\0'); -+ if (dest == NULL) { -+ ERROR("Failed to get the end of respath"); -+ goto error; -+ } -+ if (strlen(path) > (PATH_MAX - strlen(respath) - 1)) { -+ ERROR("Path is too long"); -+ goto error; -+ } -+ strcat(respath, path); -+ stpos = path; -+ } else { -+ dest = respath; -+ *dest++ = '/'; -+ stpos = path; -+ } -+ -+ if (do_clean_path(respath, limit_respath, stpos, &dest)) { -+ goto error; -+ } -+ -+ if (dest > respath + 1 && ISSLASH(dest[-1])) { -+ --dest; -+ } -+ *dest = '\0'; -+ -+ return respath; -+ -+error: -+ return NULL; -+} -+ -+static int do_path_realloc(const char *start, const char *end, -+ char **rpath, char **dest, const char **rpath_limit) -+{ -+ long long dest_offset = *dest - *rpath; -+ char *new_rpath = NULL; -+ size_t new_size; -+ int nret = 0; -+ size_t gap = 0; -+ -+ if (*dest + (end - start) < *rpath_limit) { -+ return 0; -+ } -+ -+ gap = (size_t)(end - start) + 1; -+ new_size = (size_t)(*rpath_limit - *rpath); -+ if (new_size > SIZE_MAX - gap) { -+ ERROR("Out of range!"); -+ return -1; -+ } -+ -+ if (gap > PATH_MAX) { -+ new_size += gap; -+ } else { -+ new_size += PATH_MAX; -+ } -+ nret = lxc_mem_realloc((void **)&new_rpath, new_size, *rpath, PATH_MAX); -+ if (nret) { -+ ERROR("Failed to realloc memory for files limit variables"); -+ return -1; -+ } -+ *rpath = new_rpath; -+ *rpath_limit = *rpath + new_size; -+ -+ *dest = *rpath + dest_offset; -+ -+ return 0; -+} -+ -+static int do_get_symlinks_copy_buf(const char *buf, const char *prefix, size_t prefix_len, -+ char **rpath, char **dest) -+{ -+ if (IS_ABSOLUTE_FILE_NAME(buf)) { -+ if (prefix_len) { -+ memcpy(*rpath, prefix, prefix_len); -+ } -+ *dest = *rpath + prefix_len; -+ *(*dest)++ = '/'; -+ } else { -+ if (*dest > *rpath + prefix_len + 1) { -+ for (--(*dest); *dest > *rpath && !ISSLASH((*dest)[-1]); --(*dest)) { -+ continue; -+ } -+ } -+ } -+ return 0; -+} -+ -+static int do_get_symlinks(const char **fullpath, const char *prefix, size_t prefix_len, -+ char **rpath, char **dest, const char **end, -+ int *num_links, char **extra_buf) -+{ -+ char *buf = NULL; -+ size_t len; -+ ssize_t n; -+ int ret = -1; -+ -+ if (++(*num_links) > MAXSYMLINKS) { -+ ERROR("Too many links in '%s'", *fullpath); -+ goto out; -+ } -+ -+ buf = lxc_common_calloc_s(PATH_MAX); -+ if (buf == NULL) { -+ ERROR("Out of memory"); -+ goto out; -+ } -+ -+ n = readlink(*rpath, buf, PATH_MAX - 1); -+ if (n < 0) { -+ goto out; -+ } -+ buf[n] = '\0'; -+ -+ if (*extra_buf == NULL) { -+ *extra_buf = lxc_common_calloc_s(PATH_MAX); -+ if (*extra_buf == NULL) { -+ ERROR("Out of memory"); -+ goto out; -+ } -+ } -+ -+ len = strlen(*end); -+ if (len >= PATH_MAX - n) { -+ ERROR("Path is too long"); -+ goto out; -+ } -+ -+ memmove(&(*extra_buf)[n], *end, len + 1); -+ memcpy(*extra_buf, buf, (size_t)n); -+ -+ *fullpath = *end = *extra_buf; -+ -+ if (do_get_symlinks_copy_buf(buf, prefix, prefix_len, rpath, dest) != 0) { -+ goto out; -+ } -+ -+ ret = 0; -+out: -+ free(buf); -+ return ret; -+} -+ -+static bool do_eval_symlinks_in_scope_is_symlink(const char *path) -+{ -+ struct stat st; -+ -+ if (lstat(path, &st) < 0) { -+ return true; -+ } -+ -+ if (!S_ISLNK(st.st_mode)) { -+ return true; -+ } -+ return false; -+} -+ -+static void do_eval_symlinks_skip_slash(const char **start, const char **end) -+{ -+ while (ISSLASH(**start)) { -+ ++(*start); -+ } -+ -+ for (*end = *start; **end && !ISSLASH(**end); ++(*end)) { -+ } -+} -+ -+static inline void skip_dest_traling_slash(char **dest, char **rpath, size_t prefix_len) -+{ -+ if (*dest > *rpath + prefix_len + 1) { -+ for (--(*dest); *dest > *rpath && !ISSLASH((*dest)[-1]); --(*dest)) { -+ continue; -+ } -+ } -+} -+ -+static inline bool is_current_char(const char c) -+{ -+ return c == '.'; -+} -+ -+static inline bool is_specify_current(const char *end, const char *start) -+{ -+ return (end - start == 1) && is_current_char(start[0]); -+} -+ -+static inline bool is_specify_parent(const char *end, const char *start) -+{ -+ return (end - start == 2) && is_current_char(start[0]) && is_current_char(start[1]); -+} -+ -+static int do_eval_symlinks_in_scope(const char *fullpath, const char *prefix, -+ size_t prefix_len, -+ char **rpath, char **dest, const char *rpath_limit) -+{ -+ const char *start = NULL; -+ const char *end = NULL; -+ char *extra_buf = NULL; -+ int nret = 0; -+ int num_links = 0; -+ -+ start = fullpath + prefix_len; -+ for (end = start; *start; start = end) { -+ do_eval_symlinks_skip_slash(&start, &end); -+ if (end - start == 0) { -+ break; -+ } else if (is_specify_current(end, start)) { -+ ; -+ } else if (is_specify_parent(end, start)) { -+ skip_dest_traling_slash(dest, rpath, prefix_len); -+ } else { -+ if (!ISSLASH((*dest)[-1])) { -+ *(*dest)++ = '/'; -+ } -+ -+ nret = do_path_realloc(start, end, rpath, dest, &rpath_limit); -+ if (nret != 0) { -+ nret = -1; -+ goto out; -+ } -+ -+ memcpy(*dest, start, (size_t)(end - start)); -+ *dest += end - start; -+ **dest = '\0'; -+ -+ if (do_eval_symlinks_in_scope_is_symlink(*rpath)) { -+ continue; -+ } -+ -+ nret = do_get_symlinks(&fullpath, prefix, prefix_len, rpath, dest, &end, &num_links, &extra_buf); -+ if (nret != 0) { -+ nret = -1; -+ goto out; -+ } -+ } -+ } -+out: -+ free(extra_buf); -+ return nret; -+} -+static char *eval_symlinks_in_scope(const char *fullpath, const char *rootpath) -+{ -+ char resroot[PATH_MAX] = {0}; -+ char *root = NULL; -+ char *rpath = NULL; -+ char *dest = NULL; -+ char *prefix = NULL; -+ const char *rpath_limit = NULL; -+ size_t prefix_len; -+ -+ if (fullpath == NULL || rootpath == NULL) { -+ return NULL; -+ } -+ -+ root = cleanpath(rootpath, resroot, sizeof(resroot)); -+ if (root == NULL) { -+ ERROR("Failed to get cleaned path"); -+ return NULL; -+ } -+ -+ if (!strcmp(fullpath, root)) { -+ return safe_strdup(fullpath); -+ } -+ -+ if (strstr(fullpath, root) == NULL) { -+ ERROR("Path '%s' is not in '%s'", fullpath, root); -+ return NULL; -+ } -+ -+ rpath = lxc_common_calloc_s(PATH_MAX); -+ if (rpath == NULL) { -+ ERROR("Out of memory"); -+ goto out; -+ } -+ rpath_limit = rpath + PATH_MAX; -+ -+ prefix = root; -+ prefix_len = (size_t)strlen(prefix); -+ if (!strcmp(prefix, "/")) { -+ prefix_len = 0; -+ } -+ -+ dest = rpath; -+ if (prefix_len) { -+ memcpy(rpath, prefix, prefix_len); -+ dest += prefix_len; -+ } -+ *dest++ = '/'; -+ -+ if (do_eval_symlinks_in_scope(fullpath, prefix, prefix_len, &rpath, &dest, -+ rpath_limit)) { -+ goto out; -+ } -+ -+ if (dest > rpath + prefix_len + 1 && ISSLASH(dest[-1])) { -+ --dest; -+ } -+ *dest = '\0'; -+ return rpath; -+ -+out: -+ free(rpath); -+ return NULL; -+} -+ -+// FollowSymlinkInScope is a wrapper around evalSymlinksInScope that returns an -+// absolute path. This function handles paths in a platform-agnostic manner. -+char *follow_symlink_in_scope(const char *fullpath, const char *rootpath) -+{ -+ char resfull[PATH_MAX] = {0}, *full = NULL; -+ char resroot[PATH_MAX] = {0}, *root = NULL; -+ -+ full = cleanpath(fullpath, resfull, PATH_MAX); -+ if (!full) { -+ ERROR("Failed to get cleaned path"); -+ return NULL; -+ } -+ -+ root = cleanpath(rootpath, resroot, PATH_MAX); -+ if (!root) { -+ ERROR("Failed to get cleaned path"); -+ return NULL; -+ } -+ -+ return eval_symlinks_in_scope(full, root); -+} -+ -+// GetResourcePath evaluates `path` in the scope of the container's rootpath, with proper path -+// sanitisation. Symlinks are all scoped to the rootpath of the container, as -+// though the container's rootpath was `/`. -+// -+// The BaseFS of a container is the host-facing path which is bind-mounted as -+// `/` inside the container. This method is essentially used to access a -+// particular path inside the container as though you were a process in that -+// container. -+int get_resource_path(const char *rootpath, const char *path, -+ char **scopepath) -+{ -+ char resolved[PATH_MAX] = {0}, *cleanedpath = NULL; -+ char *fullpath = NULL; -+ size_t len; -+ -+ if (!rootpath || !path || !scopepath) -+ return -1; -+ -+ *scopepath = NULL; -+ -+ cleanedpath = cleanpath(path, resolved, PATH_MAX); -+ if (!cleanedpath) { -+ ERROR("Failed to get cleaned path"); -+ return -1; -+ } -+ -+ len = strlen(rootpath) + strlen(cleanedpath) + 1; -+ fullpath = malloc(len); -+ if (!fullpath) { -+ ERROR("Out of memory"); -+ return -1; -+ } -+ snprintf(fullpath, len, "%s%s", rootpath, cleanedpath); -+ -+ *scopepath = follow_symlink_in_scope(fullpath, rootpath); -+ -+ free(fullpath); -+ return 0; -+} -+ -+// Rel returns a relative path that is lexically equivalent to targpath when -+// joined to basepath with an intervening separator. That is, -+// Join(basepath, Rel(basepath, targpath)) is equivalent to targpath itself. -+// On success, the returned path will always be relative to basepath, -+// even if basepath and targpath share no elements. -+// An error is returned if targpath can't be made relative to basepath or if -+// knowing the current working directory would be necessary to compute it. -+// Rel calls Clean on the result. -+char *path_relative(const char *basepath, const char *targpath) -+{ -+ char resbase[PATH_MAX] = {0}, *base = NULL; -+ char restarg[PATH_MAX] = {0}, *targ = NULL; -+ size_t bl = 0, tl = 0, b0 = 0, bi = 0, t0 = 0, ti = 0; -+ -+ base = cleanpath(basepath, resbase, PATH_MAX); -+ if (!base) { -+ ERROR("Failed to get cleaned path"); -+ return NULL; -+ } -+ -+ targ = cleanpath(targpath, restarg, PATH_MAX); -+ if (!targ) { -+ ERROR("Failed to get cleaned path"); -+ return NULL; -+ } -+ -+ if (strcmp(base, targ) == 0) -+ return safe_strdup("."); -+ -+ bl = strlen(base); -+ tl = strlen(targ); -+ while(true) { -+ while(bi < bl && !ISSLASH(base[bi])) -+ bi++; -+ while(ti < tl && !ISSLASH(targ[ti])) -+ ti++; -+ //not the same string -+ if (((bi - b0) != (ti - t0)) || strncmp(base + b0, targ + t0, bi - b0)) -+ break; -+ if (bi < bl) -+ bi++; -+ if (ti < tl) -+ ti++; -+ b0 = bi; -+ t0 = ti; -+ } -+ -+ if (b0 != bl) { -+ // Base elements left. Must go up before going down. -+ int seps = 0, i; -+ size_t ncopyed = 0, seps_size; -+ char *buf = NULL; -+ -+ for (bi = b0; bi < bl; bi++) { -+ if (ISSLASH(base[bi])) -+ seps++; -+ } -+ //strlen(..) + strlen(/..) + '\0' -+ seps_size = 2 + seps * 3 + 1; -+ if (t0 != tl) -+ seps_size += 1 + tl - t0; -+ -+ buf = calloc(seps_size, 1); -+ if (!buf) { -+ ERROR("Out of memory"); -+ return NULL; -+ } -+ buf[ncopyed++] = '.'; -+ buf[ncopyed++] = '.'; -+ for (i = 0; i < seps; i++) { -+ buf[ncopyed++] = '/'; -+ buf[ncopyed++] = '.'; -+ buf[ncopyed++] = '.'; -+ } -+ if (t0 != tl) { -+ buf[ncopyed++] = '/'; -+ memcpy(buf + ncopyed, targ + t0, tl - t0 + 1); -+ } -+ return buf; -+ } -+ -+ return safe_strdup(targ + t0); -+} -diff --git a/src/lxc/path.h b/src/lxc/path.h -new file mode 100644 -index 0000000..2c60fb9 ---- /dev/null -+++ b/src/lxc/path.h -@@ -0,0 +1,65 @@ -+/* SPDX-License-Identifier: LGPL-2.1+ */ -+/****************************************************************************** -+ * Copyright (c) Huawei Technologies Co., Ltd. 2020. Allrights reserved -+ * Description: isulad utils -+ * Author: lifeng -+ * Create: 2020-04-11 -+******************************************************************************/ -+#ifndef __ISULAD_PATH_H_ -+#define __ISULAD_PATH_H_ -+ -+#include -+ -+bool specify_current_dir(const char *path); -+ -+bool has_traling_path_separator(const char *path); -+ -+// PreserveTrailingDotOrSeparator returns the given cleaned path -+// and appends a trailing `/.` or `/` if its corresponding original -+// path ends with a trailing `/.` or `/`. If the cleaned -+// path already ends in a `.` path segment, then another is not added. If the -+// clean path already ends in a path separator, then another is not added. -+char *preserve_trailing_dot_or_separator(const char *cleanedpath, -+ const char *originalpath); -+ -+ -+// Split splits path immediately following the final Separator, -+// separating it into a directory and file name component. -+// If there is no Separator in path, Split returns an empty dir -+// and file set to path. -+// The returned values have the property that path = dir+file. -+bool filepath_split(const char *path, char **dir, char **base); -+ -+/* -+ * cleanpath is similar to realpath of glibc, but not expands symbolic links, -+ * and not check the existence of components of the path. -+ */ -+char *cleanpath(const char *path, char *realpath, size_t realpath_len); -+ -+ -+// FollowSymlinkInScope is a wrapper around evalSymlinksInScope that returns an -+// absolute path. This function handles paths in a platform-agnostic manner. -+char *follow_symlink_in_scope(const char *fullpath, const char *rootpath); -+ -+// GetResourcePath evaluates `path` in the scope of the container's rootpath, with proper path -+// sanitisation. Symlinks are all scoped to the rootpath of the container, as -+// though the container's rootpath was `/`. -+// -+// The BaseFS of a container is the host-facing path which is bind-mounted as -+// `/` inside the container. This method is essentially used to access a -+// particular path inside the container as though you were a process in that -+// container. -+int get_resource_path(const char *rootpath, const char *path, -+ char **scopepath); -+ -+// Rel returns a relative path that is lexically equivalent to targpath when -+// joined to basepath with an intervening separator. That is, -+// Join(basepath, Rel(basepath, targpath)) is equivalent to targpath itself. -+// On success, the returned path will always be relative to basepath, -+// even if basepath and targpath share no elements. -+// An error is returned if targpath can't be made relative to basepath or if -+// knowing the current working directory would be necessary to compute it. -+// Rel calls Clean on the result. -+char *path_relative(const char *basepath, const char *targpath); -+ -+#endif -diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 339217c..7b36133 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -27,6 +27,9 @@ - #include "memory_utils.h" - #include "raw_syscalls.h" - #include "string_utils.h" -+#ifdef HAVE_ISULAD -+#include "isulad_utils.h" -+#endif - - /* returns 1 on success, 0 if there were any failures */ - extern int lxc_rmdir_onedev(const char *path, const char *exclude); --- -1.8.3.1 - diff --git a/0004-confile-add-support-umask.patch b/0004-confile-add-support-umask.patch deleted file mode 100644 index bcea2b7..0000000 --- a/0004-confile-add-support-umask.patch +++ /dev/null @@ -1,132 +0,0 @@ -From e1bf4afdac0f4e1c19ad24c7c9fb915ce72906ed Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Sat, 11 Apr 2020 17:24:47 +0800 -Subject: [PATCH 04/49] confile: add support umask - -lxc.isulad.umask=normal make the container umask to 0022 -lxc.isulad.umask=secure make the container umask to 0027 (default) - -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 5 +++++ - src/lxc/conf.c | 6 ++++++ - src/lxc/conf.h | 1 + - src/lxc/confile.c | 38 ++++++++++++++++++++++++++++++++++++++ - 4 files changed, 50 insertions(+) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 406b8ec..56d62ed 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -659,6 +659,11 @@ static int attach_child_main(struct attach_clone_payload *payload) - (options->attach_flags & LXC_ATTACH_LSM) && - init_ctx->lsm_label; - -+#ifdef HAVE_ISULAD -+ /*isulad: set system umask */ -+ umask(init_ctx->container->lxc_conf->umask); -+#endif -+ - /* A description of the purpose of this functionality is provided in the - * lxc-attach(1) manual page. We have to remount here and not in the - * parent process, otherwise /proc may not properly reflect the new pid -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index e9c0a37..e3fce51 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -2567,6 +2567,7 @@ struct lxc_conf *lxc_conf_init(void) - #ifdef HAVE_ISULAD - /* isulad add begin */ - lxc_list_init(&new->populate_devs); -+ new->umask = 0027; /*default umask 0027*/ - #endif - - return new; -@@ -3522,6 +3523,11 @@ int lxc_setup(struct lxc_handler *handler) - if (ret < 0) - return -1; - -+#ifdef HAVE_ISULAD -+ /*isulad: set system umask */ -+ umask(lxc_conf->umask); -+#endif -+ - ret = setup_personality(lxc_conf->personality); - if (ret < 0) - return log_error(-1, "Failed to set personality"); -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 452458c..7ed3cd0 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -427,6 +427,7 @@ struct lxc_conf { - - /* populate devices*/ - struct lxc_list populate_devs; -+ mode_t umask; //umask value - #endif - - }; -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index f0772f9..2df269a 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -150,6 +150,7 @@ lxc_config_define(proc); - #ifdef HAVE_ISULAD - lxc_config_define(init_args); - lxc_config_define(populate_device); -+lxc_config_define(umask); - #endif - - /* -@@ -266,6 +267,7 @@ static struct lxc_config_t config_jump_table[] = { - #ifdef HAVE_ISULAD - { "lxc.isulad.init.args", set_config_init_args, get_config_init_args, clr_config_init_args, }, - { "lxc.isulad.populate.device", set_config_populate_device, get_config_populate_device, clr_config_populate_device, }, -+ { "lxc.isulad.umask", set_config_umask, get_config_umask, clr_config_umask, }, - #endif - }; - -@@ -6273,4 +6275,40 @@ static inline int clr_config_populate_device(const char *key, struct lxc_conf *c - return lxc_clear_populate_devices(c); - } - -+/* isulad: set config for umask */ -+static int set_config_umask(const char *key, const char *value, -+ struct lxc_conf *lxc_conf, void *data) -+{ -+ if (lxc_config_value_empty(value)) { -+ ERROR("Empty umask"); -+ return -1; -+ } -+ -+ if (strcmp(value, "normal") == 0) { -+ lxc_conf->umask = 0022; -+ return 0; -+ } else if (strcmp(value, "secure") == 0) { -+ lxc_conf->umask = 0027; -+ return 0; -+ } else { -+ ERROR("Invalid native umask: %s", value); -+ return -1; -+ } -+} -+ -+/* isulad add: get umask value*/ -+static int get_config_umask(const char *key, char *retv, int inlen, -+ struct lxc_conf *c, void *data) -+{ -+ return lxc_get_conf_size_t(c, retv, inlen, c->umask); -+} -+ -+/* isulad add: clear umask value */ -+static inline int clr_config_umask(const char *key, struct lxc_conf *c, -+ void *data) -+{ -+ c->umask = 0027; -+ return 0; -+} -+ - #endif --- -1.8.3.1 - diff --git a/0005-cgroup-refact-cgroup-implemt.patch b/0005-cgroup-refact-cgroup-implemt.patch deleted file mode 100644 index 0f4426e..0000000 --- a/0005-cgroup-refact-cgroup-implemt.patch +++ /dev/null @@ -1,1149 +0,0 @@ -From 41bc2b03f1c143352b025432a955e6a6dafd0e91 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Sat, 11 Apr 2020 19:16:42 +0800 -Subject: [PATCH 05/49] cgroup: refact cgroup implemt - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 816 ++++++++++++++++++++++++++++++++++++++++++++++- - src/lxc/cgroups/cgroup.c | 4 +- - src/lxc/cgroups/cgroup.h | 9 +- - src/lxc/conf.c | 12 + - src/lxc/utils.c | 30 +- - src/lxc/utils.h | 4 + - 6 files changed, 869 insertions(+), 6 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index d3595bc..881dd39 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1045,6 +1045,13 @@ __cgfsng_ops static void cgfsng_payload_destroy(struct cgroup_ops *ops, - SYSWARN("Failed to destroy cgroups"); - } - -+#ifdef HAVE_ISULAD -+__cgfsng_ops static void cgfsng_monitor_destroy(struct cgroup_ops *ops, -+ struct lxc_handler *handler) -+{ -+ return; -+} -+#else - __cgfsng_ops static void cgfsng_monitor_destroy(struct cgroup_ops *ops, - struct lxc_handler *handler) - { -@@ -1117,6 +1124,7 @@ try_lxc_rm_rf: - WARN("Failed to destroy \"%s\"", h->monitor_full_path); - } - } -+#endif - - static int mkdir_eexist_on_last(const char *dir, mode_t mode) - { -@@ -1202,6 +1210,13 @@ static void cgroup_tree_leaf_remove(struct hierarchy *h, bool payload) - SYSWARN("Failed to rmdir(\"%s\") cgroup", full_path); - } - -+#ifdef HAVE_ISULAD -+__cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, -+ struct lxc_handler *handler) -+{ -+ return true; -+} -+#else - __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, - struct lxc_handler *handler) - { -@@ -1276,7 +1291,227 @@ __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, - ops->monitor_cgroup = move_ptr(monitor_cgroup); - return log_info(true, "The monitor process uses \"%s\" as cgroup", ops->monitor_cgroup); - } -+#endif -+ -+#ifdef HAVE_ISULAD -+ -+static bool isulad_copy_parent_file(char *path, char *file) -+{ -+ int ret; -+ int len = 0; -+ char *value = NULL; -+ char *current = NULL; -+ char *fpath = NULL; -+ char *lastslash = NULL; -+ char oldv; -+ -+ fpath = must_make_path(path, file, NULL); -+ current = read_file(fpath); -+ -+ if (current == NULL) { -+ SYSERROR("Failed to read file \"%s\"", fpath); -+ free(fpath); -+ return false; -+ } -+ -+ if (strcmp(current, "\n") != 0) { -+ free(fpath); -+ free(current); -+ return true; -+ } -+ -+ free(fpath); -+ free(current); -+ -+ lastslash = strrchr(path, '/'); -+ if (lastslash == NULL) { -+ ERROR("Failed to detect \"/\" in \"%s\"", path); -+ return false; -+ } -+ oldv = *lastslash; -+ *lastslash = '\0'; -+ fpath = must_make_path(path, file, NULL); -+ *lastslash = oldv; -+ len = lxc_read_from_file(fpath, NULL, 0); -+ if (len <= 0) -+ goto on_error; -+ -+ value = must_realloc(NULL, len + 1); -+ ret = lxc_read_from_file(fpath, value, len); -+ if (ret != len) -+ goto on_error; -+ free(fpath); -+ -+ fpath = must_make_path(path, file, NULL); -+ ret = lxc_write_to_file(fpath, value, len, false, 0666); -+ if (ret < 0) -+ SYSERROR("Failed to write \"%s\" to file \"%s\"", value, fpath); -+ free(fpath); -+ free(value); -+ return ret >= 0; -+ -+on_error: -+ SYSERROR("Failed to read file \"%s\"", fpath); -+ free(fpath); -+ free(value); -+ return false; -+} -+ -+static bool build_sub_cpuset_cgroup_dir(char *cgpath) -+{ -+ int ret; -+ -+ ret = mkdir_p(cgpath, 0755); -+ if (ret < 0) { -+ if (errno != EEXIST) { -+ SYSERROR("Failed to create directory \"%s\"", cgpath); -+ return false; -+ } -+ } -+ -+ /* copy parent's settings */ -+ if (!isulad_copy_parent_file(cgpath, "cpuset.cpus")) { -+ SYSERROR("Failed to copy \"cpuset.cpus\" settings"); -+ return false; -+ } -+ -+ /* copy parent's settings */ -+ if (!isulad_copy_parent_file(cgpath, "cpuset.mems")) { -+ SYSERROR("Failed to copy \"cpuset.mems\" settings"); -+ return false; -+ } -+ -+ return true; -+} -+ -+static bool isulad_cg_legacy_handle_cpuset_hierarchy(struct hierarchy *h, char *cgname) -+{ -+ char *cgpath, *slash; -+ bool sub_mk_success = false; -+ -+ if (!string_in_list(h->controllers, "cpuset")) -+ return true; -+ -+ cgname += strspn(cgname, "/"); -+ -+ slash = strchr(cgname, '/'); -+ -+ if (slash != NULL) { -+ while (slash) { -+ *slash = '\0'; -+ cgpath = must_make_path(h->mountpoint, h->container_base_path, cgname, NULL); -+ sub_mk_success = build_sub_cpuset_cgroup_dir(cgpath); -+ free(cgpath); -+ *slash = '/'; -+ if (!sub_mk_success) { -+ return false; -+ } -+ slash = strchr(slash + 1, '/'); -+ } -+ } -+ -+ cgpath = must_make_path(h->mountpoint, h->container_base_path, cgname, NULL); -+ sub_mk_success = build_sub_cpuset_cgroup_dir(cgpath); -+ free(cgpath); -+ if (!sub_mk_success) { -+ return false; -+ } -+ -+ return true; -+} -+ -+static int isulad_mkdir_eexist_on_last(const char *dir, mode_t mode) -+{ -+ const char *tmp = dir; -+ const char *orig = dir; -+ -+ do { -+ int ret; -+ size_t cur_len; -+ char *makeme; -+ -+ dir = tmp + strspn(tmp, "/"); -+ tmp = dir + strcspn(dir, "/"); -+ -+ errno = ENOMEM; -+ cur_len = dir - orig; -+ makeme = strndup(orig, cur_len); -+ if (!makeme) -+ return -1; -+ -+ ret = mkdir(makeme, mode); -+ if (ret < 0) { -+ if (errno != EEXIST) { -+ SYSERROR("Failed to create directory \"%s\"", makeme); -+ free(makeme); -+ return -1; -+ } -+ } -+ free(makeme); -+ -+ } while (tmp != dir); -+ -+ return 0; -+} -+ -+static bool create_path_for_hierarchy(struct hierarchy *h, char *cgname, int errfd) -+{ -+ int ret; -+ __do_free char *path = NULL; -+ -+ path = must_make_path(h->mountpoint, h->container_base_path, cgname, NULL); -+ -+ if (file_exists(path)) { // it must not already exist -+ ERROR("Cgroup path \"%s\" already exist.", path); -+ lxc_write_error_message(errfd, "%s:%d: Cgroup path \"%s\" already exist.", -+ __FILE__, __LINE__, path); -+ return false; -+ } -+ -+ if (!isulad_cg_legacy_handle_cpuset_hierarchy(h, cgname)) { -+ ERROR("Failed to handle legacy cpuset controller"); -+ return false; -+ } -+ -+ ret = isulad_mkdir_eexist_on_last(path, 0755); -+ if (ret < 0) { -+ ERROR("Failed to create cgroup \"%s\"", path); -+ return false; -+ } -+ -+ h->cgfd_con = lxc_open_dirfd(path); -+ if (h->cgfd_con < 0) -+ return log_error_errno(false, errno, "Failed to open %s", path); -+ -+ if (h->container_full_path == NULL) { -+ h->container_full_path = move_ptr(path); -+ } -+ -+ return true; -+} - -+/* isulad: create hierarchies path, if fail, return the error */ -+__cgfsng_ops static inline bool cgfsng_payload_create(struct cgroup_ops *ops, -+ struct lxc_handler *handler) -+{ -+ int i; -+ char *container_cgroup = ops->container_cgroup; -+ -+ if (!container_cgroup) { -+ ERROR("cgfsng_create container_cgroup is invalid"); -+ return false; -+ } -+ -+ for (i = 0; ops->hierarchies[i]; i++) { -+ if (!create_path_for_hierarchy(ops->hierarchies[i], container_cgroup, ops->errfd)) { -+ SYSERROR("Failed to create %s", ops->hierarchies[i]->container_full_path); -+ return false; -+ } -+ } -+ -+ return true; -+} -+#else - /* - * Try to create the same cgroup in all hierarchies. Start with cgroup_pattern; - * next cgroup_pattern-1, -2, ..., -999. -@@ -1356,7 +1591,15 @@ __cgfsng_ops static inline bool cgfsng_payload_create(struct cgroup_ops *ops, - INFO("The container process uses \"%s\" as cgroup", ops->container_cgroup); - return true; - } -+#endif - -+#ifdef HAVE_ISULAD -+__cgfsng_ops static bool cgfsng_monitor_enter(struct cgroup_ops *ops, -+ struct lxc_handler *handler) -+{ -+ return true; -+} -+#else - __cgfsng_ops static bool cgfsng_monitor_enter(struct cgroup_ops *ops, - struct lxc_handler *handler) - { -@@ -1408,7 +1651,58 @@ __cgfsng_ops static bool cgfsng_monitor_enter(struct cgroup_ops *ops, - - return true; - } -+#endif -+ -+#ifdef HAVE_ISULAD -+__cgfsng_ops static bool cgfsng_payload_enter(struct cgroup_ops *ops, -+ struct lxc_handler *handler) -+{ -+ int len; -+ char pidstr[INTTYPE_TO_STRLEN(pid_t)]; -+ -+ if (!ops) -+ return ret_set_errno(false, ENOENT); -+ -+ if (!ops->hierarchies) -+ return true; -+ -+ if (!ops->container_cgroup) -+ return ret_set_errno(false, ENOENT); -+ -+ if (!handler || !handler->conf) -+ return ret_set_errno(false, EINVAL); -+ -+ len = snprintf(pidstr, sizeof(pidstr), "%d", handler->pid); -+ -+ for (int i = 0; ops->hierarchies[i]; i++) { -+ int ret; -+ char *fullpath; -+ int retry_count = 0; -+ int max_retry = 10; - -+ fullpath = must_make_path(ops->hierarchies[i]->container_full_path, -+ "cgroup.procs", NULL); -+retry: -+ ret = lxc_write_to_file(fullpath, pidstr, len, false, 0666); -+ if (ret != 0) { -+ if (retry_count < max_retry) { -+ SYSERROR("Failed to enter cgroup \"%s\" with retry count:%d", fullpath, retry_count); -+ (void)isulad_cg_legacy_handle_cpuset_hierarchy(ops->hierarchies[i], ops->container_cgroup); -+ (void)isulad_mkdir_eexist_on_last(ops->hierarchies[i]->container_full_path, 0755); -+ usleep(100 * 1000); /* 100 millisecond */ -+ retry_count++; -+ goto retry; -+ } -+ SYSERROR("Failed to enter cgroup \"%s\"", fullpath); -+ free(fullpath); -+ return false; -+ } -+ free(fullpath); -+ } -+ -+ return true; -+} -+#else - __cgfsng_ops static bool cgfsng_payload_enter(struct cgroup_ops *ops, - struct lxc_handler *handler) - { -@@ -1440,6 +1734,7 @@ __cgfsng_ops static bool cgfsng_payload_enter(struct cgroup_ops *ops, - - return true; - } -+#endif - - static int fchowmodat(int dirfd, const char *path, uid_t chown_uid, - gid_t chown_gid, mode_t chmod_mode) -@@ -1687,6 +1982,167 @@ static inline int cg_mount_cgroup_full(int type, struct hierarchy *h, - return __cg_mount_direct(type, h, controllerpath); - } - -+#ifdef HAVE_ISULAD -+__cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, -+ struct lxc_handler *handler, -+ const char *root, int type) -+{ -+ int i, ret; -+ char *tmpfspath = NULL; -+ bool has_cgns = false, retval = false, wants_force_mount = false; -+ char **merged = NULL; -+ -+ if ((type & LXC_AUTO_CGROUP_MASK) == 0) -+ return true; -+ -+ if (type & LXC_AUTO_CGROUP_FORCE) { -+ type &= ~LXC_AUTO_CGROUP_FORCE; -+ wants_force_mount = true; -+ } -+ -+ if (!wants_force_mount) { -+ if (!lxc_list_empty(&handler->conf->keepcaps)) -+ wants_force_mount = !in_caplist(CAP_SYS_ADMIN, &handler->conf->keepcaps); -+ else -+ wants_force_mount = in_caplist(CAP_SYS_ADMIN, &handler->conf->caps); -+ } -+ -+ has_cgns = cgns_supported(); -+ if (has_cgns && !wants_force_mount) -+ return true; -+ -+ if (type == LXC_AUTO_CGROUP_NOSPEC) -+ type = LXC_AUTO_CGROUP_MIXED; -+ else if (type == LXC_AUTO_CGROUP_FULL_NOSPEC) -+ type = LXC_AUTO_CGROUP_FULL_MIXED; -+ -+ /* Mount tmpfs */ -+ tmpfspath = must_make_path(root, "/sys/fs/cgroup", NULL); -+ if (mkdir_p(tmpfspath, 0755) < 0) { -+ ERROR("Failed to create directory: %s", tmpfspath); -+ goto on_error; -+ } -+ ret = safe_mount(NULL, tmpfspath, "tmpfs", -+ MS_NOSUID | MS_NODEV | MS_NOEXEC | MS_RELATIME, -+ "size=10240k,mode=755", root); -+ if (ret < 0) -+ goto on_error; -+ -+ for (i = 0; ops->hierarchies[i]; i++) { -+ char *controllerpath = NULL; -+ char *path2 = NULL; -+ struct hierarchy *h = ops->hierarchies[i]; -+ char *controller = strrchr(h->mountpoint, '/'); -+ -+ if (!controller) -+ continue; -+ controller++; -+ -+ // isulad: symlink subcgroup -+ if (strchr(controller, ',') != NULL) { -+ int pret; -+ pret = lxc_append_string(&merged, controller); -+ if (pret < 0) -+ goto on_error; -+ } -+ -+ controllerpath = must_make_path(tmpfspath, controller, NULL); -+ if (dir_exists(controllerpath)) { -+ free(controllerpath); -+ continue; -+ } -+ -+ ret = mkdir(controllerpath, 0755); -+ if (ret < 0) { -+ SYSERROR("Error creating cgroup path: %s", controllerpath); -+ free(controllerpath); -+ goto on_error; -+ } -+ -+ if (has_cgns && wants_force_mount) { -+ /* If cgroup namespaces are supported but the container -+ * will not have CAP_SYS_ADMIN after it has started we -+ * need to mount the cgroups manually. -+ */ -+ ret = cg_mount_in_cgroup_namespace(type, h, controllerpath); -+ free(controllerpath); -+ if (ret < 0) -+ goto on_error; -+ -+ continue; -+ } -+ -+ ret = cg_mount_cgroup_full(type, h, controllerpath); -+ if (ret < 0) { -+ free(controllerpath); -+ goto on_error; -+ } -+ -+ if (!cg_mount_needs_subdirs(type)) { -+ free(controllerpath); -+ continue; -+ } -+ -+ // isulad: ignore ops->container_cgroup so we will not see directory lxc after /sys/fs/cgroup/xxx in container, -+ // isulad: ignore h->container_base_path so we will not see subgroup of /sys/fs/cgroup/xxx/subgroup in container -+ path2 = must_make_path(controllerpath, NULL); -+ ret = mkdir_p(path2, 0755); -+ if (ret < 0) { -+ free(controllerpath); -+ free(path2); -+ goto on_error; -+ } -+ -+ ret = cg_legacy_mount_controllers(type, h, controllerpath, -+ path2, ops->container_cgroup); -+ free(controllerpath); -+ free(path2); -+ if (ret < 0) -+ goto on_error; -+ } -+ -+ // isulad: symlink subcgroup -+ if (merged) { -+ char **mc = NULL; -+ for (mc = merged; *mc; mc++) { -+ char *token = NULL; -+ char *copy = must_copy_string(*mc); -+ lxc_iterate_parts(token, copy, ",") { -+ int mret; -+ char *link; -+ link = must_make_path(tmpfspath, token, NULL); -+ mret = symlink(*mc, link); -+ if (mret < 0 && errno != EEXIST) { -+ SYSERROR("Failed to create link %s for target %s", link, *mc); -+ free(copy); -+ free(link); -+ goto on_error; -+ } -+ free(link); -+ } -+ free(copy); -+ } -+ } -+ -+ -+ // isulad: remount /sys/fs/cgroup to readonly -+ if (type == LXC_AUTO_CGROUP_FULL_RO || type == LXC_AUTO_CGROUP_RO) { -+ ret = mount(tmpfspath, tmpfspath, "bind", -+ MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_RELATIME|MS_RDONLY|MS_BIND|MS_REMOUNT, NULL); -+ if (ret < 0) { -+ SYSERROR("Failed to remount /sys/fs/cgroup."); -+ goto on_error; -+ } -+ } -+ -+ retval = true; -+ -+on_error: -+ free(tmpfspath); -+ lxc_free_array((void **)merged, free); -+ return retval; -+} -+#else - __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - struct lxc_handler *handler, - const char *root, int type) -@@ -1799,6 +2255,7 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - - return true; - } -+#endif - - /* Only root needs to escape to the cgroup of its init. */ - __cgfsng_ops static bool cgfsng_escape(const struct cgroup_ops *ops, -@@ -2054,6 +2511,24 @@ __cgfsng_ops static const char *cgfsng_get_cgroup(struct cgroup_ops *ops, - : NULL; - } - -+#ifdef HAVE_ISULAD -+__cgfsng_ops static const char *cgfsng_get_cgroup_full_path(struct cgroup_ops *ops, -+ const char *controller) -+{ -+ struct hierarchy *h; -+ -+ h = get_hierarchy(ops, controller); -+ if (!h) -+ return log_warn_errno(NULL, ENOENT, "Failed to find hierarchy for controller \"%s\"", -+ controller ? controller : "(null)"); -+ -+ if (!h->container_full_path) -+ h->container_full_path = must_make_path(h->mountpoint, h->container_base_path, ops->container_cgroup, NULL); -+ -+ return h->container_full_path; -+} -+#endif -+ - /* Given a cgroup path returned from lxc_cmd_get_cgroup_path, build a full path, - * which must be freed by the caller. - */ -@@ -2360,6 +2835,44 @@ __cgfsng_ops static bool cgfsng_attach(struct cgroup_ops *ops, - return true; - } - -+#ifdef HAVE_ISULAD -+__cgfsng_ops static int cgfsng_get(struct cgroup_ops *ops, const char *filename, -+ char *value, size_t len, const char *name, -+ const char *lxcpath) -+{ -+ int ret = -1; -+ size_t controller_len; -+ char *controller, *p, *path; -+ struct hierarchy *h; -+ -+ controller_len = strlen(filename); -+ controller = alloca(controller_len + 1); -+ (void)strlcpy(controller, filename, controller_len + 1); -+ -+ p = strchr(controller, '.'); -+ if (p) -+ *p = '\0'; -+ -+ const char *ori_path = ops->get_cgroup(ops, controller); -+ if (ori_path == NULL) { -+ ERROR("Failed to get cgroup path:%s", controller); -+ return -1; -+ } -+ path = safe_strdup(ori_path); -+ -+ h = get_hierarchy(ops, controller); -+ if (h) { -+ char *fullpath; -+ -+ fullpath = build_full_cgpath_from_monitorpath(h, path, filename); -+ ret = lxc_read_from_file(fullpath, value, len); -+ free(fullpath); -+ } -+ free(path); -+ -+ return ret; -+} -+#else - /* Called externally (i.e. from 'lxc-cgroup') to query cgroup limits. Here we - * don't have a cgroup_data set up, so we ask the running container through the - * commands API for the cgroup path. -@@ -2397,6 +2910,7 @@ __cgfsng_ops static int cgfsng_get(struct cgroup_ops *ops, const char *filename, - - return ret; - } -+#endif - - static int device_cgroup_parse_access(struct device_item *device, const char *val) - { -@@ -2510,6 +3024,44 @@ static int device_cgroup_rule_parse(struct device_item *device, const char *key, - return device_cgroup_parse_access(device, ++val); - } - -+#ifdef HAVE_ISULAD -+__cgfsng_ops static int cgfsng_set(struct cgroup_ops *ops, -+ const char *filename, const char *value, -+ const char *name, const char *lxcpath) -+{ -+ int ret = -1; -+ size_t controller_len; -+ char *controller, *p, *path; -+ struct hierarchy *h; -+ -+ controller_len = strlen(filename); -+ controller = alloca(controller_len + 1); -+ (void)strlcpy(controller, filename, controller_len + 1); -+ -+ p = strchr(controller, '.'); -+ if (p) -+ *p = '\0'; -+ -+ const char *ori_path = ops->get_cgroup(ops, controller); -+ if (ori_path == NULL) { -+ ERROR("Failed to get cgroup path:%s", controller); -+ return -1; -+ } -+ path = safe_strdup(ori_path); -+ -+ h = get_hierarchy(ops, controller); -+ if (h) { -+ char *fullpath; -+ -+ fullpath = build_full_cgpath_from_monitorpath(h, path, filename); -+ ret = lxc_write_to_file(fullpath, value, strlen(value), false, 0666); -+ free(fullpath); -+ } -+ free(path); -+ -+ return ret; -+} -+#else - /* Called externally (i.e. from 'lxc-cgroup') to set new cgroup limits. Here we - * don't have a cgroup_data set up, so we ask the running container through the - * commands API for the cgroup path. -@@ -2562,6 +3114,7 @@ __cgfsng_ops static int cgfsng_set(struct cgroup_ops *ops, - - return ret; - } -+#endif - - /* take devices cgroup line - * /dev/foo rwx -@@ -2686,6 +3239,199 @@ static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename, - return lxc_write_openat(h->container_full_path, filename, value, strlen(value)); - } - -+#ifdef HAVE_ISULAD -+/* Called from setup_limits - here we have the container's cgroup_data because -+ * we created the cgroups. -+ */ -+static int isulad_cg_legacy_get_data(struct cgroup_ops *ops, const char *filename, -+ char *value, size_t len) -+{ -+ char *fullpath = NULL; -+ char *p = NULL; -+ struct hierarchy *h = NULL; -+ int ret = 0; -+ char *controller = NULL; -+ -+ len = strlen(filename); -+ if (SIZE_MAX - 1 < len) { -+ errno = EINVAL; -+ return -1; -+ } -+ controller = calloc(1, len + 1); -+ if (controller == NULL) { -+ errno = ENOMEM; -+ return -1; -+ } -+ (void)strlcpy(controller, filename, len + 1); -+ -+ p = strchr(controller, '.'); -+ if (p) -+ *p = '\0'; -+ -+ -+ h = get_hierarchy(ops, controller); -+ if (!h) { -+ ERROR("Failed to setup limits for the \"%s\" controller. " -+ "The controller seems to be unused by \"cgfsng\" cgroup " -+ "driver or not enabled on the cgroup hierarchy", -+ controller); -+ errno = ENOENT; -+ free(controller); -+ return -ENOENT; -+ } -+ -+ fullpath = must_make_path(h->container_full_path, filename, NULL); -+ ret = lxc_read_from_file(fullpath, value, len); -+ free(fullpath); -+ free(controller); -+ return ret; -+} -+ -+static int isulad_cg_legacy_set_data(struct cgroup_ops *ops, const char *filename, -+ const char *value) -+{ -+ size_t len; -+ char *fullpath, *p; -+ /* "b|c <2^64-1>:<2^64-1> r|w|m" = 47 chars max */ -+ char converted_value[50]; -+ struct hierarchy *h; -+ int ret = 0; -+ char *controller = NULL; -+ int retry_count = 0; -+ int max_retry = 10; -+ char *container_cgroup = ops->container_cgroup; -+ -+ len = strlen(filename); -+ controller = alloca(len + 1); -+ (void)strlcpy(controller, filename, len + 1); -+ -+ p = strchr(controller, '.'); -+ if (p) -+ *p = '\0'; -+ -+ if (strcmp("devices.allow", filename) == 0 && value[0] == '/') { -+ ret = convert_devpath(value, converted_value); -+ if (ret < 0) -+ return ret; -+ value = converted_value; -+ } -+ -+ h = get_hierarchy(ops, controller); -+ if (!h) { -+ ERROR("Failed to setup limits for the \"%s\" controller. " -+ "The controller seems to be unused by \"cgfsng\" cgroup " -+ "driver or not enabled on the cgroup hierarchy", -+ controller); -+ errno = ENOENT; -+ return -ENOENT; -+ } -+ -+ fullpath = must_make_path(h->container_full_path, filename, NULL); -+ -+retry: -+ ret = lxc_write_to_file(fullpath, value, strlen(value), false, 0666); -+ if (ret != 0) { -+ if (retry_count < max_retry) { -+ SYSERROR("setting cgroup config for ready process caused \"failed to write %s to %s\".", value, fullpath); -+ (void)isulad_cg_legacy_handle_cpuset_hierarchy(h, container_cgroup); -+ (void)isulad_mkdir_eexist_on_last(h->container_full_path, 0755); -+ usleep(100 * 1000); /* 100 millisecond */ -+ retry_count++; -+ goto retry; -+ } -+ lxc_write_error_message(ops->errfd, -+ "%s:%d: setting cgroup config for ready process caused \"failed to write %s to %s: %s\".", -+ __FILE__, __LINE__, value, fullpath, strerror(errno)); -+ } -+ free(fullpath); -+ return ret; -+} -+ -+__cgfsng_ops static bool cgfsng_setup_limits_legacy(struct cgroup_ops *ops, -+ struct lxc_conf *conf, -+ bool do_devices) -+{ -+ __do_free struct lxc_list *sorted_cgroup_settings = NULL; -+ struct lxc_list *cgroup_settings = &conf->cgroup; -+ struct lxc_list *iterator, *next; -+ struct lxc_cgroup *cg; -+ bool ret = false; -+ char value[21 + 1] = { 0 }; -+ long long int readvalue, setvalue; -+ -+ if (!ops) -+ return ret_set_errno(false, ENOENT); -+ -+ if (!conf) -+ return ret_set_errno(false, EINVAL); -+ -+ cgroup_settings = &conf->cgroup; -+ if (lxc_list_empty(cgroup_settings)) -+ return true; -+ -+ if (!ops->hierarchies) -+ return ret_set_errno(false, EINVAL); -+ -+ sorted_cgroup_settings = sort_cgroup_settings(cgroup_settings); -+ if (!sorted_cgroup_settings) -+ return false; -+ -+ lxc_list_for_each(iterator, sorted_cgroup_settings) { -+ cg = iterator->elem; -+ -+ if (do_devices == !strncmp("devices", cg->subsystem, 7)) { -+ if (isulad_cg_legacy_set_data(ops, cg->subsystem, cg->value)) { -+ if (do_devices && (errno == EACCES || errno == EPERM)) { -+ SYSWARN("Failed to set \"%s\" to \"%s\"", cg->subsystem, cg->value); -+ continue; -+ } -+ SYSERROR("Failed to set \"%s\" to \"%s\"", cg->subsystem, cg->value); -+ goto out; -+ } -+ DEBUG("Set controller \"%s\" set to \"%s\"", cg->subsystem, cg->value); -+ } -+ // isulad: check cpu shares -+ if (strcmp(cg->subsystem, "cpu.shares") == 0) { -+ if (isulad_cg_legacy_get_data(ops, cg->subsystem, value, sizeof(value) - 1) < 0) { -+ SYSERROR("Error get %s", cg->subsystem); -+ goto out; -+ } -+ trim(value); -+ if (lxc_safe_long_long(cg->value, &setvalue) != 0) { -+ SYSERROR("Invalid value %s", cg->value); -+ goto out; -+ } -+ if (lxc_safe_long_long(value, &readvalue) != 0) { -+ SYSERROR("Invalid value %s", value); -+ goto out; -+ } -+ if (setvalue > readvalue) { -+ ERROR("The maximum allowed cpu-shares is %s", value); -+ lxc_write_error_message(ops->errfd, -+ "%s:%d: setting cgroup config for ready process caused \"The maximum allowed cpu-shares is %s\".", -+ __FILE__, __LINE__, value); -+ goto out; -+ } else if (setvalue < readvalue) { -+ ERROR("The minimum allowed cpu-shares is %s", value); -+ lxc_write_error_message(ops->errfd, -+ "%s:%d: setting cgroup config for ready process caused \"The minimum allowed cpu-shares is %s\".", -+ __FILE__, __LINE__, value); -+ goto out; -+ } -+ } -+ } -+ -+ ret = true; -+ INFO("Limits for the legacy cgroup hierarchies have been setup"); -+out: -+ lxc_list_for_each_safe(iterator, sorted_cgroup_settings, next) { -+ lxc_list_del(iterator); -+ free(iterator); -+ } -+ -+ return ret; -+} -+#else - __cgfsng_ops static bool cgfsng_setup_limits_legacy(struct cgroup_ops *ops, - struct lxc_conf *conf, - bool do_devices) -@@ -2739,6 +3485,7 @@ out: - - return ret; - } -+#endif - - /* - * Some of the parsing logic comes from the original cgroup device v1 -@@ -2950,6 +3697,12 @@ bool __cgfsng_delegate_controllers(struct cgroup_ops *ops, const char *cgroup) - return true; - } - -+#ifdef HAVE_ISULAD -+__cgfsng_ops bool cgfsng_monitor_delegate_controllers(struct cgroup_ops *ops) -+{ -+ return true; -+} -+#else - __cgfsng_ops bool cgfsng_monitor_delegate_controllers(struct cgroup_ops *ops) - { - if (!ops) -@@ -2957,6 +3710,7 @@ __cgfsng_ops bool cgfsng_monitor_delegate_controllers(struct cgroup_ops *ops) - - return __cgfsng_delegate_controllers(ops, ops->monitor_cgroup); - } -+#endif - - __cgfsng_ops bool cgfsng_payload_delegate_controllers(struct cgroup_ops *ops) - { -@@ -3107,6 +3861,22 @@ static int cg_hybrid_init(struct cgroup_ops *ops, bool relative, bool unprivileg - - trim(base_cgroup); - prune_init_scope(base_cgroup); -+#ifdef HAVE_ISULAD -+ /* isulad: do not test writeable, if we run isulad in docker without cgroup namespace. -+ * the base_cgroup will be docker/XXX.., mountpoint+base_cgroup may be not exist */ -+ -+ /* -+ * reason:base cgroup may be started with /system.slice when cg_hybrid_init -+ * read /proc/1/cgroup on host, and cgroup init will set all containers -+ * cgroup path under /sys/fs/cgroup//system.slice/xxx/lxc -+ * directory, this is not consistent with docker. The default cgroup path -+ * should be under /sys/fs/cgroup//lxc directory. -+ */ -+ -+ if (strlen(base_cgroup) > 1 && base_cgroup[0] == '/') { -+ base_cgroup[1] = '\0'; -+ } -+#else - if (type == CGROUP2_SUPER_MAGIC) - writeable = test_writeable_v2(mountpoint, base_cgroup); - else -@@ -3115,7 +3885,7 @@ static int cg_hybrid_init(struct cgroup_ops *ops, bool relative, bool unprivileg - TRACE("The %s group is not writeable", base_cgroup); - continue; - } -- -+#endif - if (type == CGROUP2_SUPER_MAGIC) { - char *cgv2_ctrl_path; - -@@ -3268,7 +4038,45 @@ static int cg_init(struct cgroup_ops *ops, struct lxc_conf *conf) - return cg_hybrid_init(ops, relative, !lxc_list_empty(&conf->id_map)); - } - --__cgfsng_ops static int cgfsng_data_init(struct cgroup_ops *ops) -+#ifdef HAVE_ISULAD -+__cgfsng_ops static int cgfsng_data_init(struct cgroup_ops *ops, struct lxc_conf *conf) -+{ -+ const char *cgroup_pattern; -+ const char *cgroup_tree; -+ __do_free char *container_cgroup = NULL, *__cgroup_tree = NULL; -+ size_t len; -+ -+ if (!ops) -+ return ret_set_errno(-1, ENOENT); -+ -+ /* copy system-wide cgroup information */ -+ cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern"); -+ if (cgroup_pattern && strcmp(cgroup_pattern, "") != 0) -+ ops->cgroup_pattern = must_copy_string(cgroup_pattern); -+ -+ if (conf->cgroup_meta.dir) { -+ cgroup_tree = conf->cgroup_meta.dir; -+ container_cgroup = must_concat(&len, cgroup_tree, "/", conf->name, NULL); -+ } else if (ops->cgroup_pattern) { -+ __cgroup_tree = lxc_string_replace("%n", conf->name, ops->cgroup_pattern); -+ if (!__cgroup_tree) -+ return ret_set_errno(-1, ENOMEM); -+ -+ cgroup_tree = __cgroup_tree; -+ container_cgroup = must_concat(&len, cgroup_tree, NULL); -+ } else { -+ cgroup_tree = NULL; -+ container_cgroup = must_concat(&len, conf->name, NULL); -+ } -+ if (!container_cgroup) -+ return ret_set_errno(-1, ENOMEM); -+ -+ ops->container_cgroup = move_ptr(container_cgroup); -+ -+ return 0; -+} -+#else -+__cgfsng_ops static int cgfsng_data_init(struct cgroup_ops *ops, struct lxc_conf *conf) - { - const char *cgroup_pattern; - -@@ -3282,6 +4090,7 @@ __cgfsng_ops static int cgfsng_data_init(struct cgroup_ops *ops) - - return 0; - } -+#endif - - struct cgroup_ops *cgfsng_ops_init(struct lxc_conf *conf) - { -@@ -3311,6 +4120,9 @@ struct cgroup_ops *cgfsng_ops_init(struct lxc_conf *conf) - cgfsng_ops->num_hierarchies = cgfsng_num_hierarchies; - cgfsng_ops->get_hierarchies = cgfsng_get_hierarchies; - cgfsng_ops->get_cgroup = cgfsng_get_cgroup; -+#ifdef HAVE_ISULAD -+ cgfsng_ops->get_cgroup_full_path = cgfsng_get_cgroup_full_path; -+#endif - cgfsng_ops->get = cgfsng_get; - cgfsng_ops->set = cgfsng_set; - cgfsng_ops->freeze = cgfsng_freeze; -diff --git a/src/lxc/cgroups/cgroup.c b/src/lxc/cgroups/cgroup.c -index 37fd0e3..ad46d5c 100644 ---- a/src/lxc/cgroups/cgroup.c -+++ b/src/lxc/cgroups/cgroup.c -@@ -31,7 +31,7 @@ struct cgroup_ops *cgroup_init(struct lxc_conf *conf) - if (!cgroup_ops) - return log_error_errno(NULL, errno, "Failed to initialize cgroup driver"); - -- if (cgroup_ops->data_init(cgroup_ops)) { -+ if (cgroup_ops->data_init(cgroup_ops, conf)) { - cgroup_exit(cgroup_ops); - return log_error_errno(NULL, errno, - "Failed to initialize cgroup data"); -@@ -79,7 +79,7 @@ void cgroup_exit(struct cgroup_ops *ops) - free((*it)->container_base_path); - free((*it)->container_full_path); - free((*it)->monitor_full_path); -- if ((*it)->cgfd_mon >= 0) -+ if ((*it)->cgfd_con >= 0) - close((*it)->cgfd_con); - if ((*it)->cgfd_mon >= 0) - close((*it)->cgfd_mon); -diff --git a/src/lxc/cgroups/cgroup.h b/src/lxc/cgroups/cgroup.h -index 1e08a01..dcdc76b 100644 ---- a/src/lxc/cgroups/cgroup.h -+++ b/src/lxc/cgroups/cgroup.h -@@ -102,6 +102,10 @@ struct cgroup_ops { - char *container_cgroup; - char *monitor_cgroup; - -+#ifdef HAVE_ISULAD -+ int errfd; -+#endif -+ - /* @hierarchies - * - A NULL-terminated array of struct hierarchy, one per legacy - * hierarchy. No duplicates. First sufficient, writeable mounted -@@ -139,7 +143,7 @@ struct cgroup_ops { - */ - cgroup_layout_t cgroup_layout; - -- int (*data_init)(struct cgroup_ops *ops); -+ int (*data_init)(struct cgroup_ops *ops, struct lxc_conf *conf); - void (*payload_destroy)(struct cgroup_ops *ops, struct lxc_handler *handler); - void (*monitor_destroy)(struct cgroup_ops *ops, struct lxc_handler *handler); - bool (*monitor_create)(struct cgroup_ops *ops, struct lxc_handler *handler); -@@ -147,6 +151,9 @@ struct cgroup_ops { - bool (*payload_create)(struct cgroup_ops *ops, struct lxc_handler *handler); - bool (*payload_enter)(struct cgroup_ops *ops, struct lxc_handler *handler); - const char *(*get_cgroup)(struct cgroup_ops *ops, const char *controller); -+#ifdef HAVE_ISULAD -+ const char *(*get_cgroup_full_path)(struct cgroup_ops *ops, const char *controller); -+#endif - bool (*escape)(const struct cgroup_ops *ops, struct lxc_conf *conf); - int (*num_hierarchies)(struct cgroup_ops *ops); - bool (*get_hierarchies)(struct cgroup_ops *ops, int n, char ***out); -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index e3fce51..e806605 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -637,8 +637,13 @@ static int lxc_mount_auto_mounts(struct lxc_conf *conf, int flags, struct lxc_ha - { LXC_AUTO_PROC_MASK, LXC_AUTO_PROC_MIXED, "%r/proc/sysrq-trigger", "%r/proc/sysrq-trigger", NULL, MS_BIND, NULL }, - { LXC_AUTO_PROC_MASK, LXC_AUTO_PROC_MIXED, NULL, "%r/proc/sysrq-trigger", NULL, MS_REMOUNT|MS_BIND|MS_RDONLY, NULL }, - { LXC_AUTO_PROC_MASK, LXC_AUTO_PROC_RW, "proc", "%r/proc", "proc", MS_NODEV|MS_NOEXEC|MS_NOSUID, NULL }, -+ #ifdef HAVE_ISULAD -+ { LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_RW, "sysfs", "%r/sys", "sysfs", MS_NODEV|MS_NOEXEC|MS_NOSUID, NULL }, -+ { LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_RO, "sysfs", "%r/sys", "sysfs", MS_RDONLY|MS_NODEV|MS_NOEXEC|MS_NOSUID, NULL }, -+ #else - { LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_RW, "sysfs", "%r/sys", "sysfs", 0, NULL }, - { LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_RO, "sysfs", "%r/sys", "sysfs", MS_RDONLY, NULL }, -+ #endif - { LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_MIXED, "sysfs", "%r/sys", "sysfs", MS_NODEV|MS_NOEXEC|MS_NOSUID, NULL }, - { LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_MIXED, "%r/sys", "%r/sys", NULL, MS_BIND, NULL }, - { LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_MIXED, NULL, "%r/sys", NULL, MS_REMOUNT|MS_BIND|MS_RDONLY, NULL }, -@@ -670,6 +675,13 @@ static int lxc_mount_auto_mounts(struct lxc_conf *conf, int flags, struct lxc_ha - if (!destination) - return -1; - -+#ifdef HAVE_ISULAD -+ if (mkdir_p(destination, 0755) < 0) { -+ SYSERROR("Failed to create mount target '%s'", destination); -+ return log_error(-1, "Failed to mkdir destination %s", destination); -+ } -+#endif -+ - mflags = add_required_remount_flags(source, destination, - default_mounts[i].flags); - r = safe_mount(source, destination, default_mounts[i].fstype, -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 2cf9994..160b3db 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -1755,8 +1755,13 @@ int lxc_rm_rf(const char *dirname) - struct dirent *direntp; - - dir = opendir(dirname); -- if (!dir) -+ if (!dir) { -+ if (errno == ENOENT) { -+ WARN("Destroy path: \"%s\" do not exist", dirname); -+ return 0; -+ } - return log_error_errno(-1, errno, "Failed to open dir \"%s\"", dirname); -+ } - - while ((direntp = readdir(dir))) { - __do_free char *pathname = NULL; -@@ -1904,3 +1909,26 @@ int fix_stdio_permissions(uid_t uid) - - return fret; - } -+ -+#ifdef HAVE_ISULAD -+/* isulad: write error message */ -+void lxc_write_error_message(int errfd, const char *format, ...) -+{ -+ int ret; -+ char errbuf[BUFSIZ + 1] = {0}; -+ ssize_t sret; -+ va_list argp; -+ -+ if (errfd <= 0) -+ return; -+ -+ va_start(argp, format); -+ ret = vsnprintf(errbuf, BUFSIZ, format, argp); -+ va_end(argp); -+ if (ret < 0 || ret >= BUFSIZ) -+ SYSERROR("Failed to call vsnprintf"); -+ sret = write(errfd, errbuf, strlen(errbuf)); -+ if (sret < 0) -+ SYSERROR("Write errbuf failed"); -+} -+#endif -diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 7b36133..3c30565 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -244,4 +244,8 @@ extern bool lxc_can_use_pidfd(int pidfd); - - extern int fix_stdio_permissions(uid_t uid); - -+#ifdef HAVE_ISULAD -+extern void lxc_write_error_message(int errfd, const char *format, ...); -+#endif -+ - #endif /* __LXC_UTILS_H */ --- -1.8.3.1 - diff --git a/0006-modify-container-exit-code-and-stop-signal.patch b/0006-modify-container-exit-code-and-stop-signal.patch deleted file mode 100644 index 5e10943..0000000 --- a/0006-modify-container-exit-code-and-stop-signal.patch +++ /dev/null @@ -1,112 +0,0 @@ -From ef7c687828efd488369ff860523aa15a42c72587 Mon Sep 17 00:00:00 2001 -From: wujing -Date: Mon, 13 Apr 2020 04:58:46 -0400 -Subject: [PATCH 06/49] modify container exit code and stop signal - -Signed-off-by: wujing ---- - src/lxc/lxccontainer.c | 10 ++++++++-- - src/lxc/start.c | 28 ++++++++++++++++++++++++++++ - 2 files changed, 36 insertions(+), 2 deletions(-) - -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index f4462fd..a617172 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -2101,7 +2101,12 @@ WRAP_API_1(bool, lxcapi_reboot2, int) - static bool do_lxcapi_shutdown(struct lxc_container *c, int timeout) - { - __do_close int pidfd = -EBADF, state_client_fd = -EBADF; -+#ifdef HAVE_ISULAD -+ // isulad: keep default signal the same as docker -+ int haltsignal = SIGTERM; -+#else - int haltsignal = SIGPWR; -+#endif - pid_t pid = -1; - lxc_state_t states[MAX_STATE] = {0}; - int killret, ret; -@@ -2117,12 +2122,13 @@ static bool do_lxcapi_shutdown(struct lxc_container *c, int timeout) - if (pid <= 0) - return true; - -- /* Detect whether we should send SIGRTMIN + 3 (e.g. systemd). */ - if (c->lxc_conf && c->lxc_conf->haltsignal) - haltsignal = c->lxc_conf->haltsignal; -+#ifndef HAVE_ISULAD -+ /* Detect whether we should send SIGRTMIN + 3 (e.g. systemd). */ - else if (task_blocks_signal(pid, (SIGRTMIN + 3))) - haltsignal = (SIGRTMIN + 3); -- -+#endif - - /* - * Add a new state client before sending the shutdown signal so -diff --git a/src/lxc/start.c b/src/lxc/start.c -index a25bd04..5dcf828 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1886,10 +1886,18 @@ out_sync_fini: - return -1; - } - -+#ifdef HAVE_ISULAD -+// isulad: send '128 + signal' if container is killed by signal. -+#define EXIT_SIGNAL_OFFSET 128 -+#endif -+ - int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, - void *data, const char *lxcpath, bool daemonize, int *error_num) - { - int ret, status; -+#ifdef HAVE_ISULAD -+ int exit_code; -+#endif - const char *name = handler->name; - struct lxc_conf *conf = handler->conf; - struct cgroup_ops *cgroup_ops; -@@ -1976,6 +1984,21 @@ int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, - * reboot. This should mean it was an lxc-execute which simply exited. - * In any case, treat it as a 'halt'. - */ -+#ifdef HAVE_ISULAD -+ // isulad: recored log for container init exit -+ if (WIFSIGNALED(status)) { -+ int signal = WTERMSIG(status); -+ signal = WTERMSIG(status); -+ exit_code = EXIT_SIGNAL_OFFSET + signal; -+ ERROR("Container \"%s\" init exited with signal %d", name, signal); -+ } else if (WIFEXITED(status)) { -+ exit_code = WEXITSTATUS(status); -+ ERROR("Container \"%s\" init exited with status %d", name, exit_code); -+ } else { -+ exit_code = -1; -+ ERROR("Container \"%s\" init exited with unknown status", name); -+ } -+#else - if (WIFSIGNALED(status)) { - switch(WTERMSIG(status)) { - case SIGINT: /* halt */ -@@ -1993,6 +2016,7 @@ int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, - break; - } - } -+#endif - - ret = lxc_restore_phys_nics_to_netns(handler); - if (ret < 0) -@@ -2000,7 +2024,11 @@ int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, - - close_prot_errno_disarm(handler->pinfd); - -+#ifdef HAVE_ISULAD -+ lxc_monitor_send_exit_code(name, exit_code, handler->lxcpath); -+#else - lxc_monitor_send_exit_code(name, status, handler->lxcpath); -+#endif - lxc_error_set_and_log(handler->pid, status); - if (error_num) - *error_num = handler->exit_status; --- -1.8.3.1 - diff --git a/0007-check-and-save-pid-info-file.patch b/0007-check-and-save-pid-info-file.patch deleted file mode 100644 index 3eaa02f..0000000 --- a/0007-check-and-save-pid-info-file.patch +++ /dev/null @@ -1,545 +0,0 @@ -From 0d54daf204fd2bc41c45c7c159af6436d66b272c Mon Sep 17 00:00:00 2001 -From: wujing -Date: Mon, 13 Apr 2020 05:48:03 -0400 -Subject: [PATCH 07/49] check and save pid info file - -Signed-off-by: wujing ---- - src/lxc/conf.c | 1 + - src/lxc/conf.h | 2 + - src/lxc/lxccontainer.c | 29 +++++++++++- - src/lxc/lxccontainer.h | 12 +++++ - src/lxc/start.c | 98 ++++++++++++++++++++++++++++++++++++++ - src/lxc/tools/arguments.h | 16 +++++++ - src/lxc/tools/lxc_start.c | 28 +++++++++++ - src/lxc/utils.c | 117 ++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/utils.h | 69 +++++++++++++++++++++++++++ - 9 files changed, 371 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index e806605..43437af 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -3961,6 +3961,7 @@ void lxc_conf_free(struct lxc_conf *conf) - free(conf->shmount.path_host); - free(conf->shmount.path_cont); - #ifdef HAVE_ISULAD -+ free(conf->container_info_file); - lxc_clear_init_args(conf); - lxc_clear_populate_devices(conf); - #endif -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 7ed3cd0..23942ac 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -428,6 +428,8 @@ struct lxc_conf { - /* populate devices*/ - struct lxc_list populate_devs; - mode_t umask; //umask value -+ -+ char *container_info_file; - #endif - - }; -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index a617172..33bb3ec 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -5293,6 +5293,31 @@ static int do_lxcapi_seccomp_notify_fd(struct lxc_container *c) - - WRAP_API(int, lxcapi_seccomp_notify_fd) - -+#ifdef HAVE_ISULAD -+/* isulad add set info file path */ -+static bool do_lxcapi_set_container_info_file(struct lxc_container *c, const char *info_file) -+{ -+ struct lxc_conf *conf = NULL; -+ -+ if (!c || !c->lxc_conf || !info_file) -+ return false; -+ if (container_mem_lock(c)) { -+ ERROR("Error getting mem lock"); -+ return false; -+ } -+ -+ conf = c->lxc_conf; -+ if (conf->container_info_file) -+ free(conf->container_info_file); -+ conf->container_info_file = safe_strdup(info_file); -+ -+ container_mem_unlock(c); -+ return true; -+} -+ -+WRAP_API_1(bool, lxcapi_set_container_info_file, const char *) -+#endif -+ - struct lxc_container *lxc_container_new(const char *name, const char *configpath) - { - struct lxc_container *c; -@@ -5434,7 +5459,9 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath - c->mount = lxcapi_mount; - c->umount = lxcapi_umount; - c->seccomp_notify_fd = lxcapi_seccomp_notify_fd; -- -+#ifdef HAVE_ISULAD -+ c->set_container_info_file = lxcapi_set_container_info_file; -+#endif - return c; - - err: -diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index 4577de7..edfff32 100644 ---- a/src/lxc/lxccontainer.h -+++ b/src/lxc/lxccontainer.h -@@ -865,6 +865,18 @@ struct lxc_container { - * \return pidfd of init process of the container. - */ - int (*init_pidfd)(struct lxc_container *c); -+ -+#ifdef HAVE_ISULAD -+ /*! isulad add -+ * \brief An API call to set the path of info file -+ * -+ * \param c Container. -+ * \param info_file Value of the path of info file. -+ * -+ * \return \c true on success, else \c false. -+ */ -+ bool (*set_container_info_file) (struct lxc_container *c, const char *info_file); -+#endif - }; - - /*! -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 5dcf828..f5f9565 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1537,6 +1537,94 @@ static inline int do_share_ns(void *arg) - return 0; - } - -+#ifdef HAVE_ISULAD -+static int lxc_write_container_info(char *filename, pid_t pid, pid_t p_pid, -+ unsigned long long start_at, unsigned long long p_start_at) -+{ -+ FILE *pid_fp = NULL; -+ int ret = 0; -+ -+ pid_fp = lxc_fopen(filename, "w"); -+ if (pid_fp == NULL) { -+ SYSERROR("Failed to create pidfile '%s'",filename); -+ ret = -1; -+ goto out; -+ } -+ -+ if (fprintf(pid_fp, "%d %llu %d %llu\n", pid, start_at, p_pid, p_start_at) < 0) { -+ SYSERROR("Failed to write '%s'", filename); -+ ret = -1; -+ goto out; -+ } -+out: -+ if (pid_fp) -+ fclose(pid_fp); -+ pid_fp = NULL; -+ return ret; -+} -+ -+static int lxc_check_container_info(char *filename, pid_t pid, pid_t p_pid, -+ unsigned long long start_at, unsigned long long p_start_at) -+{ -+ int ret = 0; -+ int num; -+ char sbuf[1024] = {0}; /* bufs for stat */ -+ int saved_pid; /* process id */ -+ int saved_ppid; /* pid of parent process */ -+ unsigned long long saved_start_time; /* start time of process -- seconds since 1-1-70 */ -+ unsigned long long saved_pstart_time; /* start time of parent process -- seconds since 1-1-70 */ -+ -+ if ((lxc_file2str(filename, sbuf, sizeof(sbuf))) == -1) { -+ SYSERROR("Failed to read pidfile %s", filename); -+ ret = -1; -+ goto out; -+ } -+ -+ num = sscanf(sbuf, "%d %Lu %d %Lu", &saved_pid, &saved_start_time, &saved_ppid, &saved_pstart_time); -+ if (num != 4) { -+ SYSERROR("Call sscanf error"); -+ ret = -1; -+ goto out; -+ } -+ -+ if (pid != saved_pid || p_pid != saved_ppid -+ || start_at != saved_start_time || p_start_at != saved_pstart_time) { -+ ERROR("Check container info failed"); -+ ret = -1; -+ goto out; -+ } -+ -+out: -+ return ret; -+} -+ -+/* isuald: save pid/ppid info */ -+static int lxc_save_container_info(char *filename, pid_t pid) -+{ -+ int ret = 0; -+ pid_t p_pid = 0; -+ unsigned long long start_at = 0; -+ unsigned long long p_start_at = 0; -+ -+ start_at = lxc_get_process_startat(pid); -+ p_pid = getpid(); -+ p_start_at = lxc_get_process_startat(p_pid); -+ -+ ret = lxc_write_container_info(filename, pid, p_pid, start_at, p_start_at); -+ if (ret != 0) { -+ goto out; -+ } -+ -+ ret = lxc_check_container_info(filename, pid, p_pid, start_at, p_start_at); -+ if (ret != 0) { -+ goto out; -+ } -+ -+out: -+ return ret; -+} -+#endif -+ - /* lxc_spawn() performs crucial setup tasks and clone()s the new process which - * exec()s the requested container binary. - * Note that lxc_spawn() runs in the parent namespaces. Any operations performed -@@ -1648,6 +1736,16 @@ static int lxc_spawn(struct lxc_handler *handler) - } - TRACE("Cloned child process %d", handler->pid); - -+#ifdef HAVE_ISULAD -+ /* isulad: save pid/ppid info into file*/ -+ if (handler->conf->container_info_file) { -+ if (lxc_save_container_info(handler->conf->container_info_file, handler->pid)) { -+ ERROR("Failed to save cloned container pid"); -+ goto out_delete_net; -+ } -+ } -+#endif -+ - /* Verify that we can actually make use of pidfds. */ - if (!lxc_can_use_pidfd(handler->pidfd)) - close_prot_errno_disarm(handler->pidfd); -diff --git a/src/lxc/tools/arguments.h b/src/lxc/tools/arguments.h -index cb0ba74..91f4e9a 100644 ---- a/src/lxc/tools/arguments.h -+++ b/src/lxc/tools/arguments.h -@@ -40,6 +40,9 @@ struct lxc_arguments { - - /* for lxc-start */ - const char *share_ns[32]; /* size must be greater than LXC_NS_MAX */ -+#ifdef HAVE_ISULAD -+ const char *container_info; /* isulad: file used to store pid and ppid info of container */ -+#endif - - /* for lxc-console */ - unsigned int ttynum; -@@ -152,6 +155,19 @@ struct lxc_arguments { - #define OPT_SHARE_UTS OPT_USAGE - 5 - #define OPT_SHARE_PID OPT_USAGE - 6 - -+#ifdef HAVE_ISULAD -+#define OPT_INPUT_FIFO OPT_USAGE - 7 -+#define OPT_OUTPUT_FIFO OPT_USAGE - 8 -+#define OPT_STDERR_FIFO OPT_USAGE - 9 -+#define OPT_CONTAINER_INFO OPT_USAGE - 10 -+#define OPT_EXIT_FIFO OPT_USAGE - 11 -+#define OPT_START_TIMEOUT OPT_USAGE - 12 -+#define OPT_DISABLE_PTY OPT_USAGE - 13 -+#define OPT_OPEN_STDIN OPT_USAGE - 14 -+#define OPT_ATTACH_TIMEOUT OPT_USAGE - 15 -+#define OPT_ATTACH_SUFFIX OPT_USAGE - 16 -+#endif -+ - extern int lxc_arguments_parse(struct lxc_arguments *args, int argc, - char *const argv[]); - -diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c -index 459b867..83ee75a 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -48,6 +48,9 @@ static const struct option my_longopts[] = { - {"share-ipc", required_argument, 0, OPT_SHARE_IPC}, - {"share-uts", required_argument, 0, OPT_SHARE_UTS}, - {"share-pid", required_argument, 0, OPT_SHARE_PID}, -+#ifdef HAVE_ISULAD -+ {"container-pidfile", required_argument, 0, OPT_CONTAINER_INFO}, -+#endif - LXC_COMMON_OPTIONS - }; - -@@ -118,6 +121,11 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - case OPT_SHARE_PID: - args->share_ns[LXC_NS_PID] = arg; - break; -+#ifdef HAVE_ISULAD -+ case OPT_CONTAINER_INFO: -+ args->container_info = arg; -+ break; -+#endif - } - return 0; - } -@@ -163,6 +171,9 @@ int main(int argc, char *argv[]) - "/sbin/init", - NULL, - }; -+#ifdef HAVE_ISULAD -+ char *container_info_file = NULL; -+#endif - - lxc_list_init(&defines); - -@@ -283,6 +294,20 @@ int main(int argc, char *argv[]) - goto out; - } - -+#ifdef HAVE_ISULAD -+ /* isulad: container info file used to store pid and ppid info of container*/ -+ if (my_args.container_info != NULL) { -+ if (ensure_path(&container_info_file, my_args.container_info) < 0) { -+ ERROR("Failed to ensure container's piddile '%s'", my_args.container_info); -+ goto out; -+ } -+ if (!c->set_container_info_file(c, container_info_file)) { -+ ERROR("Failed to set container's piddile '%s'", container_info_file); -+ goto out; -+ } -+ } -+#endif -+ - if (my_args.console) - if (!c->set_config_item(c, "lxc.console.path", my_args.console)) - goto out; -@@ -320,5 +345,8 @@ int main(int argc, char *argv[]) - - out: - lxc_container_put(c); -+#ifdef HAVE_ISULAD -+ free(container_info_file); -+#endif - exit(err); - } -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 160b3db..ebcdae0 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -1931,4 +1931,121 @@ void lxc_write_error_message(int errfd, const char *format, ...) - if (sret < 0) - SYSERROR("Write errbuf failed"); - } -+ -+/* isulad: read file to buffer */ -+int lxc_file2str(const char *filename, char ret[], int cap) -+{ -+ int fd, num_read; -+ -+ if ((fd = lxc_open(filename, O_RDONLY | O_CLOEXEC, 0)) == -1) -+ return -1; -+ if ((num_read = read(fd, ret, cap - 1)) <= 0) -+ num_read = -1; -+ else -+ ret[num_read] = 0; -+ close(fd); -+ -+ return num_read; -+} -+ -+/* isuald: lxc_stat2proc() makes sure it can handle arbitrary executable file basenames -+ * for `cmd', i.e. those with embedded whitespace or embedded ')'s. -+ * Such names confuse %s (see scanf(3)), so the string is split and %39c -+ * is used instead. (except for embedded ')' "(%[^)]c)" would work. -+ */ -+static proc_t *lxc_stat2proc(const char *S) -+{ -+ int num; -+ proc_t *P = NULL; -+ char *tmp = NULL; -+ -+ if (!S) -+ return NULL; -+ -+ tmp = strrchr(S, ')'); /* split into "PID (cmd" and "" */ -+ if (!tmp) -+ return NULL; -+ *tmp = '\0'; /* replace trailing ')' with NUL */ -+ -+ P = malloc(sizeof(proc_t)); -+ if (P == NULL) -+ return NULL; -+ (void)memset(P, 0x00, sizeof(proc_t)); -+ -+ /* parse these two strings separately, skipping the leading "(". */ -+ num = sscanf(S, "%d (%15c", &P->pid, P->cmd); /* comm[16] in kernel */ -+ if (num != 2) { -+ ERROR("Call sscanf error: %s", errno ? strerror(errno) : ""); -+ free(P); -+ return NULL; -+ } -+ num = sscanf(tmp + 2, /* skip space after ')' too */ -+ "%c " -+ "%d %d %d %d %d " -+ "%lu %lu %lu %lu %lu " -+ "%Lu %Lu %Lu %Lu " /* utime stime cutime cstime */ -+ "%ld %ld %ld %ld " -+ "%Lu " /* start_time */ -+ "%lu " -+ "%ld " -+ "%lu %lu %lu %lu %lu %lu " -+ "%*s %*s %*s %*s " /* discard, no RT signals & Linux 2.1 used hex */ -+ "%lu %lu %lu " -+ "%d %d " -+ "%lu %lu", -+ &P->state, -+ &P->ppid, &P->pgrp, &P->session, &P->tty, &P->tpgid, -+ &P->flags, &P->min_flt, &P->cmin_flt, &P->maj_flt, &P->cmaj_flt, -+ &P->utime, &P->stime, &P->cutime, &P->cstime, -+ &P->priority, &P->nice, &P->timeout, &P->it_real_value, -+ &P->start_time, -+ &P->vsize, -+ &P->rss, -+ &P->rss_rlim, &P->start_code, &P->end_code, &P->start_stack, &P->kstk_esp, -+ &P->kstk_eip, -+ &P->wchan, &P->nswap, &P->cnswap, -+ &P->exit_signal, &P->processor, /* 2.2.1 ends with "exit_signal" */ -+ &P->rtprio, &P->sched /* both added to 2.5.18 */ -+ ); -+ if (num != 35) { -+ ERROR("Call sscanf error: %s", errno ? strerror(errno) : ""); -+ free(P); -+ return NULL; -+ } -+ if (P->tty == 0) -+ P->tty = -1; /* the old notty val, update elsewhere bef. moving to 0 */ -+ return P; -+} -+ -+/* isulad: get starttime of process pid */ -+unsigned long long lxc_get_process_startat(pid_t pid) -+{ -+ int sret = 0; -+ unsigned long long startat = 0; -+ proc_t *pid_info = NULL; -+ char filename[PATH_MAX] = {0}; -+ char sbuf[1024] = {0}; /* bufs for stat */ -+ -+ sret = snprintf(filename, sizeof(filename), "/proc/%d/stat", pid); -+ if (sret < 0 || sret >= sizeof(filename)) { -+ ERROR("Failed to sprintf filename"); -+ goto out; -+ } -+ -+ if ((lxc_file2str(filename, sbuf, sizeof(sbuf))) == -1) { -+ SYSERROR("Failed to read pidfile %s", filename); -+ goto out; -+ } -+ -+ pid_info = lxc_stat2proc(sbuf); -+ if (!pid_info) { -+ ERROR("Failed to get proc stat info"); -+ goto out; -+ } -+ -+ startat = pid_info->start_time; -+out: -+ free(pid_info); -+ return startat; -+} - #endif -diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 3c30565..11d6548 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -44,6 +44,73 @@ extern char *get_rundir(void); - #endif - #endif - -+#ifdef HAVE_ISULAD -+/* isulad: -+ ld cutime, cstime, priority, nice, timeout, it_real_value, rss, -+ c state, -+ d ppid, pgrp, session, tty, tpgid, -+ s signal, blocked, sigignore, sigcatch, -+ lu flags, min_flt, cmin_flt, maj_flt, cmaj_flt, utime, stime, -+ lu rss_rlim, start_code, end_code, start_stack, kstk_esp, kstk_eip, -+ lu start_time, vsize, wchan, nswap, cnswap, -+*/ -+ -+/* Basic data structure which holds all information we can get about a process. -+ * (unless otherwise specified, fields are read from /proc/#/stat) -+ * -+ * Most of it comes from task_struct in linux/sched.h -+ */ -+typedef struct proc_t { -+ // 1st 16 bytes -+ int pid; /* process id */ -+ int ppid; /* pid of parent process */ -+ -+ char state; /* single-char code for process state (S=sleeping) */ -+ -+ unsigned long long -+ utime, /* user-mode CPU time accumulated by process */ -+ stime, /* kernel-mode CPU time accumulated by process */ -+ // and so on... -+ cutime, /* cumulative utime of process and reaped children */ -+ cstime, /* cumulative stime of process and reaped children */ -+ start_time; /* start time of process -- seconds since 1-1-70 */ -+ -+ long -+ priority, /* kernel scheduling priority */ -+ timeout, /* ? */ -+ nice, /* standard unix nice level of process */ -+ rss, /* resident set size from /proc/#/stat (pages) */ -+ it_real_value; /* ? */ -+ unsigned long -+ rtprio, /* real-time priority */ -+ sched, /* scheduling class */ -+ vsize, /* number of pages of virtual memory ... */ -+ rss_rlim, /* resident set size limit? */ -+ flags, /* kernel flags for the process */ -+ min_flt, /* number of minor page faults since process start */ -+ maj_flt, /* number of major page faults since process start */ -+ cmin_flt, /* cumulative min_flt of process and child processes */ -+ cmaj_flt, /* cumulative maj_flt of process and child processes */ -+ nswap, /* ? */ -+ cnswap, /* cumulative nswap ? */ -+ start_code, /* address of beginning of code segment */ -+ end_code, /* address of end of code segment */ -+ start_stack, /* address of the bottom of stack for the process */ -+ kstk_esp, /* kernel stack pointer */ -+ kstk_eip, /* kernel instruction pointer */ -+ wchan; /* address of kernel wait channel proc is sleeping in */ -+ -+ char cmd[16]; /* basename of executable file in call to exec(2) */ -+ int -+ pgrp, /* process group id */ -+ session, /* session id */ -+ tty, /* full device number of controlling terminal */ -+ tpgid, /* terminal process group id */ -+ exit_signal, /* might not be SIGCHLD */ -+ processor; /* current (or most recent?) CPU */ -+} proc_t; -+#endif -+ - static inline int lxc_set_cloexec(int fd) - { - return fcntl(fd, F_SETFD, FD_CLOEXEC); -@@ -246,6 +313,8 @@ extern int fix_stdio_permissions(uid_t uid); - - #ifdef HAVE_ISULAD - extern void lxc_write_error_message(int errfd, const char *format, ...); -+extern int lxc_file2str(const char *filename, char ret[], int cap); -+extern int unsigned long long lxc_get_process_startat(pid_t pid); - #endif - - #endif /* __LXC_UTILS_H */ --- -1.8.3.1 - diff --git a/0008-support-block-device-as-rootfs.patch b/0008-support-block-device-as-rootfs.patch deleted file mode 100644 index 6d84a30..0000000 --- a/0008-support-block-device-as-rootfs.patch +++ /dev/null @@ -1,331 +0,0 @@ -From 6792a7f76d9084734d94e815b462ed2977fe107e Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Tue, 15 Jan 2019 16:00:30 +0800 -Subject: [PATCH 08/49] support block device as rootfs - -Signed-off-by: LiFeng -Signed-off-by: WangFengTu ---- - src/lxc/Makefile.am | 1 + - src/lxc/conf.c | 36 +++++++++++++++++ - src/lxc/storage/block.c | 86 +++++++++++++++++++++++++++++++++++++++++ - src/lxc/storage/block.h | 41 ++++++++++++++++++++ - src/lxc/storage/dir.c | 14 ++++++- - src/lxc/storage/storage.c | 21 ++++++++++ - src/lxc/storage/storage_utils.c | 4 ++ - 7 files changed, 202 insertions(+), 1 deletion(-) - create mode 100644 src/lxc/storage/block.c - create mode 100644 src/lxc/storage/block.h - -diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am -index 21441c0..d8c2492 100644 ---- a/src/lxc/Makefile.am -+++ b/src/lxc/Makefile.am -@@ -139,6 +139,7 @@ liblxc_la_SOURCES = af_unix.c af_unix.h \ - start.c start.h \ - storage/btrfs.c storage/btrfs.h \ - storage/dir.c storage/dir.h \ -+ storage/block.c storage/block.h \ - storage/loop.c storage/loop.h \ - storage/lvm.c storage/lvm.h \ - storage/nbd.c storage/nbd.h \ -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 43437af..35488e0 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -3383,6 +3383,36 @@ reset_umask: - INFO("Populated devices into container /dev"); - return ret; - } -+ -+// isulad: setup rootfs mountopts -+static int setup_rootfs_mountopts(const struct lxc_rootfs *rootfs) -+{ -+ unsigned long mflags, mntflags, pflags; -+ char *mntdata; -+ -+ if(!rootfs || !rootfs->options) -+ return 0; -+ -+ if (parse_propagationopts(rootfs->options, &pflags) < 0) { -+ return -1; -+ } -+ -+ if (parse_mntopts(rootfs->options, &mntflags, &mntdata) < 0) { -+ free(mntdata); -+ return -1; -+ } -+ free(mntdata); -+ -+ if (mntflags & MS_RDONLY) { -+ mflags = add_required_remount_flags("/", NULL, MS_BIND | MS_REC | mntflags | pflags | MS_REMOUNT); -+ DEBUG("remounting /"); -+ if (mount("/", "/", NULL, mflags, 0) < 0) { -+ SYSERROR("Failed to remount /"); -+ return -1; -+ } -+ } -+ return 0; -+} - #endif - - int lxc_setup(struct lxc_handler *handler) -@@ -3531,6 +3561,12 @@ int lxc_setup(struct lxc_handler *handler) - if (ret < 0) - return log_error(-1, "Failed to setup new devpts instance"); - -+#ifdef HAVE_ISULAD -+ if (setup_rootfs_mountopts(&lxc_conf->rootfs)) { -+ return log_error(-1, "failed to set rootfs for '%s'", name); -+ } -+#endif -+ - ret = lxc_create_ttys(handler); - if (ret < 0) - return -1; -diff --git a/src/lxc/storage/block.c b/src/lxc/storage/block.c -new file mode 100644 -index 0000000..eb75e70 ---- /dev/null -+++ b/src/lxc/storage/block.c -@@ -0,0 +1,86 @@ -+/* -+ * lxc: linux Container library -+ * -+ * (C) Copyright IBM Corp. 2007, 2008 -+ * -+ * Authors: -+ * Daniel Lezcano -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+#ifndef _GNU_SOURCE -+#define _GNU_SOURCE 1 -+#endif -+#include -+#include -+ -+#include "config.h" -+#include "log.h" -+#include "storage.h" -+#include "storage_utils.h" -+#include "utils.h" -+ -+lxc_log_define(blk, lxc); -+ -+int blk_destroy(struct lxc_storage *orig) -+{ -+ return 0; -+} -+ -+bool blk_detect(const char *path) -+{ -+ struct stat statbuf; -+ int ret; -+ -+ if (!strncmp(path, "blk:", 4)) -+ return true; -+ -+ ret = stat(path, &statbuf); -+ if (ret == -1 && errno == EPERM) { -+ SYSERROR("blk_detect: failed to look at \"%s\"", path); -+ return false; -+ } -+ -+ if (ret == 0 && S_ISBLK(statbuf.st_mode)) -+ return true; -+ -+ return false; -+} -+ -+int blk_mount(struct lxc_storage *bdev) -+{ -+ const char *src; -+ if (strcmp(bdev->type, "blk")) -+ return -22; -+ -+ if (!bdev->src || !bdev->dest) -+ return -22; -+ -+ src = lxc_storage_get_path(bdev->src, bdev->type); -+ -+ return mount_unknown_fs(src, bdev->dest, bdev->mntopts); -+} -+ -+int blk_umount(struct lxc_storage *bdev) -+{ -+ if (strcmp(bdev->type, "blk")) -+ return -22; -+ -+ if (!bdev->src || !bdev->dest) -+ return -22; -+ -+ return umount(bdev->dest); -+} -diff --git a/src/lxc/storage/block.h b/src/lxc/storage/block.h -new file mode 100644 -index 0000000..2fa7565 ---- /dev/null -+++ b/src/lxc/storage/block.h -@@ -0,0 +1,41 @@ -+/* -+ * lxc: linux Container library -+ * -+ * (C) Copyright IBM Corp. 2007, 2008 -+ * -+ * Authors: -+ * Daniel Lezcano -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+#ifndef __LXC_BLK_H -+#define __LXC_BLK_H -+ -+#include -+#include -+ -+struct lxc_storage; -+ -+struct bdev_specs; -+ -+struct lxc_conf; -+ -+extern int blk_destroy(struct lxc_storage *orig); -+extern bool blk_detect(const char *path); -+extern int blk_mount(struct lxc_storage *bdev); -+extern int blk_umount(struct lxc_storage *bdev); -+ -+#endif /* __LXC_BLK_H */ -diff --git a/src/lxc/storage/dir.c b/src/lxc/storage/dir.c -index 18a10a4..b3dbbd0 100644 ---- a/src/lxc/storage/dir.c -+++ b/src/lxc/storage/dir.c -@@ -127,7 +127,11 @@ bool dir_detect(const char *path) - int dir_mount(struct lxc_storage *bdev) - { - __do_free char *mntdata = NULL; -+#ifdef HAVE_ISULAD -+ unsigned long mntflags = 0, pflags = 0; -+#else - unsigned long mflags = 0, mntflags = 0, pflags = 0; -+#endif - int ret; - const char *src; - -@@ -147,6 +151,13 @@ int dir_mount(struct lxc_storage *bdev) - - src = lxc_storage_get_path(bdev->src, bdev->type); - -+#ifdef HAVE_ISULAD -+ ret = mount(src, bdev->dest, "bind", MS_BIND | MS_REC | (mntflags & ~MS_RDONLY) | pflags, mntdata); -+ if (ret < 0) { -+ return log_error_errno(-errno, errno, "Failed to mount \"%s\" on \"%s\"", src, bdev->dest); -+ } -+ TRACE("Mounted \"%s\" on \"%s\"", src, bdev->dest); -+#else - ret = mount(src, bdev->dest, "bind", MS_BIND | MS_REC | mntflags | pflags, mntdata); - if (ret < 0) - return log_error_errno(-errno, errno, "Failed to mount \"%s\" on \"%s\"", src, bdev->dest); -@@ -161,9 +172,10 @@ int dir_mount(struct lxc_storage *bdev) - DEBUG("Remounted \"%s\" on \"%s\" read-only with options \"%s\", mount flags \"%lu\", and propagation flags \"%lu\"", - src ? src : "(none)", bdev->dest ? bdev->dest : "(none)", mntdata, mflags, pflags); - } -- - TRACE("Mounted \"%s\" on \"%s\" with options \"%s\", mount flags \"%lu\", and propagation flags \"%lu\"", - src ? src : "(none)", bdev->dest ? bdev->dest : "(none)", mntdata, mflags, pflags); -+#endif -+ - return 0; - } - -diff --git a/src/lxc/storage/storage.c b/src/lxc/storage/storage.c -index 3f1b713..876311a 100644 ---- a/src/lxc/storage/storage.c -+++ b/src/lxc/storage/storage.c -@@ -41,6 +41,7 @@ - #include "storage_utils.h" - #include "utils.h" - #include "zfs.h" -+#include "block.h" - - #ifndef HAVE_STRLCPY - #include "include/strlcpy.h" -@@ -94,6 +95,22 @@ static const struct lxc_storage_ops loop_ops = { - .can_backup = true, - }; - -+#ifdef HAVE_ISULAD -+/* block */ -+static const struct lxc_storage_ops blk_ops = { -+ .detect = &blk_detect, -+ .mount = &blk_mount, -+ .umount = &blk_umount, -+ .clone_paths = NULL, -+ .destroy = &blk_destroy, -+ .create = NULL, -+ .copy = NULL, -+ .snapshot = NULL, -+ .can_snapshot = false, -+ .can_backup = true, -+}; -+#endif -+ - /* lvm */ - static const struct lxc_storage_ops lvm_ops = { - .detect = &lvm_detect, -@@ -179,6 +196,10 @@ static const struct lxc_storage_type bdevs[] = { - { .name = "overlayfs", .ops = &ovl_ops, }, - { .name = "loop", .ops = &loop_ops, }, - { .name = "nbd", .ops = &nbd_ops, }, -+#ifdef HAVE_ISULAD -+ //isulad: block device -+ { .name = "blk", .ops = &blk_ops, } -+#endif - }; - - static const size_t numbdevs = sizeof(bdevs) / sizeof(struct lxc_storage_type); -diff --git a/src/lxc/storage/storage_utils.c b/src/lxc/storage/storage_utils.c -index a3ee353..bfbb782 100644 ---- a/src/lxc/storage/storage_utils.c -+++ b/src/lxc/storage/storage_utils.c -@@ -335,7 +335,11 @@ int find_fstype_cb(char *buffer, void *data) - return 0; - } - -+#ifdef HAVE_ISULAD -+ if (mount(cbarg->rootfs, cbarg->target, fstype, (mntflags & ~MS_RDONLY), mntdata)) { -+#else - if (mount(cbarg->rootfs, cbarg->target, fstype, mntflags, mntdata)) { -+#endif - SYSDEBUG("Failed to mount"); - free(mntdata); - return 0; --- -1.8.3.1 - diff --git a/0009-support-mount-squashfs-in-mount-entry.patch b/0009-support-mount-squashfs-in-mount-entry.patch deleted file mode 100644 index 99bbb8a..0000000 --- a/0009-support-mount-squashfs-in-mount-entry.patch +++ /dev/null @@ -1,393 +0,0 @@ -From 6124835dde5abfeeb8ac796813f2f18803b96117 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Tue, 15 Jan 2019 19:54:13 +0800 -Subject: [PATCH 09/49] support mount squashfs in mount entry - -Signed-off-by: LiFeng -Signed-off-by: WangFengTu ---- - src/lxc/conf.c | 95 +++++++++++++++++++++++++++++++++++++++-- - src/lxc/storage/loop.c | 36 +++++++++++++--- - src/lxc/storage/storage_utils.c | 36 +++++++++++++++- - src/lxc/utils.c | 35 ++++++++++++++- - src/lxc/utils.h | 1 + - 5 files changed, 191 insertions(+), 12 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 35488e0..1f779b9 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -58,6 +58,7 @@ - #include "storage/overlay.h" - #include "syscall_wrappers.h" - #include "terminal.h" -+#include "loop.h" - #include "utils.h" - #include "uuid.h" - -@@ -2013,6 +2014,84 @@ static int mount_entry_create_dir_file(const struct mntent *mntent, - return 0; - } - -+#ifdef HAVE_ISULAD -+static int mount_entry_with_loop_dev(const char *src, const char *dest, const char *fstype, -+ char *mnt_opts, const char *rootfs) -+{ -+ int srcfd = -1, destfd, ret, saved_errno; -+ char srcbuf[50], destbuf[50]; // only needs enough for /proc/self/fd/ -+ const char *mntsrc = src; -+ int max_retry = 5; -+ struct lxc_storage loop; -+ -+ if (!rootfs) -+ rootfs = ""; -+ -+ /* todo - allow symlinks for relative paths if 'allowsymlinks' option is passed */ -+ if (src && src[0] != '/') { -+ INFO("this is a relative mount"); -+ srcfd = open_without_symlink(src, NULL); -+ if (srcfd < 0) -+ return srcfd; -+ ret = snprintf(srcbuf, sizeof(srcbuf), "/proc/self/fd/%d", srcfd); -+ if (ret < 0 || ret > sizeof(srcbuf)) { -+ close(srcfd); -+ ERROR("Failed to print string"); -+ return -EINVAL; -+ } -+ mntsrc = srcbuf; -+ } -+ -+ destfd = open_without_symlink(dest, rootfs); -+ if (destfd < 0) { -+ if (srcfd != -1) { -+ saved_errno = errno; -+ close(srcfd); -+ errno = saved_errno; -+ } -+ return destfd; -+ } -+ -+ ret = snprintf(destbuf, sizeof(destbuf), "/proc/self/fd/%d", destfd); -+ if (ret < 0 || ret > sizeof(destbuf)) { -+ if (srcfd != -1) -+ close(srcfd); -+ close(destfd); -+ ERROR("Out of memory"); -+ return -EINVAL; -+ } -+ -+retry: -+ loop.src = (char *)mntsrc; -+ loop.dest = destbuf; -+ loop.mntopts = mnt_opts; -+ loop.type = "loop"; -+ loop.lofd = -1; -+ ret = loop_mount(&loop); -+ if (ret < 0) { -+ /* If loop is used by other program, mount may fail. So -+ * we do retry to ensure mount ok */ -+ if (max_retry > 0) { -+ max_retry--; -+ DEBUG("mount entry with loop dev failed, retry mount." -+ "retry count left %d", max_retry); -+ goto retry; -+ } -+ } -+ if (loop.lofd != -1) -+ close(loop.lofd); -+ if (srcfd != -1) -+ close(srcfd); -+ close(destfd); -+ if (ret < 0) { -+ SYSERROR("Failed to mount %s onto %s", src, dest); -+ return ret; -+ } -+ -+ return 0; -+} -+#endif -+ - /* rootfs, lxc_name, and lxc_path can be NULL when the container is created - * without a rootfs. */ - static inline int mount_entry_on_generic(struct mntent *mntent, -@@ -2026,6 +2105,7 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - char *rootfs_path = NULL; - int ret; - bool dev, optional, relative; -+ const char *dest = path; - - optional = hasmntopt(mntent, "optional") != NULL; - dev = hasmntopt(mntent, "dev") != NULL; -@@ -2052,9 +2132,18 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - if (ret < 0) - return ret; - -- ret = mount_entry(mntent->mnt_fsname, path, mntent->mnt_type, mntflags, -- pflags, mntdata, optional, dev, relative, rootfs_path); -- -+#ifdef HAVE_ISULAD -+ // isulad: support squashfs -+ if (strcmp(mntent->mnt_type, "squashfs") == 0) { -+ ret = mount_entry_with_loop_dev(mntent->mnt_fsname, dest, mntent->mnt_type, -+ mntent->mnt_opts, rootfs_path); -+ } else { -+#endif -+ ret = mount_entry(mntent->mnt_fsname, dest, mntent->mnt_type, mntflags, -+ pflags, mntdata, optional, dev, relative, rootfs_path); -+#ifdef HAVE_ISULAD -+ } -+#endif - return ret; - } - -diff --git a/src/lxc/storage/loop.c b/src/lxc/storage/loop.c -index eebc1b6..345be50 100644 ---- a/src/lxc/storage/loop.c -+++ b/src/lxc/storage/loop.c -@@ -21,6 +21,7 @@ - #include "memory_utils.h" - #include "storage.h" - #include "storage_utils.h" -+#include "lxclock.h" - #include "utils.h" - - lxc_log_define(loop, lxc); -@@ -216,9 +217,11 @@ bool loop_detect(const char *path) - - int loop_mount(struct lxc_storage *bdev) - { -- int ret, loopfd; -+ int ret = 0; -+ int loopfd, lret; - char loname[PATH_MAX]; - const char *src; -+ struct lxc_lock *l = NULL; - - if (strcmp(bdev->type, "loop")) - return -22; -@@ -226,13 +229,29 @@ int loop_mount(struct lxc_storage *bdev) - if (!bdev->src || !bdev->dest) - return -22; - -+ /* isulad: do lock before mount, so we can avoid use loop which is used by -+ * other starting contianers */ -+ l = lxc_newlock("mount_lock", "mount_lock"); -+ if (!l) { -+ SYSERROR("create file lock error when mount fs"); -+ return -1; -+ } -+ -+ lret = lxclock(l, 0); -+ if (lret) { -+ SYSERROR("try to lock failed when mount fs"); -+ ret = -1; -+ goto out; -+ } -+ - /* skip prefix */ - src = lxc_storage_get_path(bdev->src, bdev->type); - - loopfd = lxc_prepare_loop_dev(src, loname, LO_FLAGS_AUTOCLEAR); - if (loopfd < 0) { - ERROR("Failed to prepare loop device for loop file \"%s\"", src); -- return -1; -+ ret = -1; -+ goto out; - } - DEBUG("Prepared loop device \"%s\"", loname); - -@@ -241,14 +260,21 @@ int loop_mount(struct lxc_storage *bdev) - ERROR("Failed to mount rootfs \"%s\" on \"%s\" via loop device \"%s\"", - bdev->src, bdev->dest, loname); - close(loopfd); -- return -1; -+ ret = -1; -+ goto out; - } - - bdev->lofd = loopfd; - DEBUG("Mounted rootfs \"%s\" on \"%s\" via loop device \"%s\"", - bdev->src, bdev->dest, loname); -- -- return 0; -+out: -+ lret = lxcunlock(l); -+ if (lret) { -+ SYSERROR("try to unlock failed when mount fs"); -+ ret = -1; -+ } -+ lxc_putlock(l); -+ return ret; - } - - int loop_umount(struct lxc_storage *bdev) -diff --git a/src/lxc/storage/storage_utils.c b/src/lxc/storage/storage_utils.c -index bfbb782..07eee22 100644 ---- a/src/lxc/storage/storage_utils.c -+++ b/src/lxc/storage/storage_utils.c -@@ -259,10 +259,14 @@ int is_blktype(struct lxc_storage *b) - return 0; - } - -+// isulad: recored error -+static char **mount_errors = NULL; -+ - int mount_unknown_fs(const char *rootfs, const char *target, - const char *options) - { - size_t i; -+ char *errs = NULL; - int ret; - struct cbarg { - const char *rootfs; -@@ -291,15 +295,30 @@ int mount_unknown_fs(const char *rootfs, const char *target, - ret = lxc_file_for_each_line(fsfile[i], find_fstype_cb, &cbarg); - if (ret < 0) { - ERROR("Failed to parse \"%s\"", fsfile[i]); -+ lxc_free_array((void**)mount_errors, free); -+ mount_errors = NULL; - return -1; - } - -- if (ret) -+ if (ret) { -+ lxc_free_array((void**)mount_errors, free); -+ mount_errors = NULL; - return 0; -+ } -+ } -+ -+ if (mount_errors != NULL) { -+ errs = lxc_string_join("\n", (const char **)mount_errors, false); -+ if (errs == NULL) { -+ ERROR("failed to join mount errors"); -+ } - } - -- ERROR("Failed to determine FSType for \"%s\"", rootfs); -+ ERROR("Failed to determine FSType for \"%s\": %s", rootfs, errs ? errs : "unknown reason"); - -+ free(errs); -+ lxc_free_array((void**)mount_errors, free); -+ mount_errors = NULL; - return -1; - } - -@@ -318,6 +337,8 @@ int find_fstype_cb(char *buffer, void *data) - unsigned long mntflags = 0; - char *mntdata = NULL; - char *fstype; -+ char mount_err[BUFSIZ] = {0}; -+ int ret; - - /* we don't try 'nodev' entries */ - if (strstr(buffer, "nodev")) -@@ -342,6 +363,17 @@ int find_fstype_cb(char *buffer, void *data) - #endif - SYSDEBUG("Failed to mount"); - free(mntdata); -+ // isulad: recored error -+ ret = snprintf(mount_err, BUFSIZ, "\t\tmount %s onto %s with FSType %s failed: %s", -+ cbarg->rootfs, cbarg->target, fstype, strerror(errno)); -+ if (ret < 0 || (size_t)ret >= BUFSIZ) { -+ ERROR("failed to format output mount error"); -+ return 0; -+ } -+ -+ if (lxc_append_string(&mount_errors, mount_err) < 0) { -+ ERROR("failed to append mount error"); -+ } - return 0; - } - -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index ebcdae0..90113e0 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -27,6 +27,7 @@ - #include - #include - #include -+#include - - #include "config.h" - #include "log.h" -@@ -1008,7 +1009,7 @@ static int open_if_safe(int dirfd, const char *nextpath) - * - * Return an open fd for the path, or <0 on error. - */ --static int open_without_symlink(const char *target, const char *prefix_skip) -+int open_without_symlink(const char *target, const char *prefix_skip) - { - int curlen = 0, dirfd, fulllen, i; - char *dup; -@@ -1425,6 +1426,9 @@ static int lxc_get_unused_loop_dev(char *name_loop) - { - int loop_nr, ret; - int fd_ctl = -1, fd_tmp = -1; -+ // isulad: retry and try mknod -+ int max_retry = 200; -+ bool try_mknod = true; - - fd_ctl = open("/dev/loop-control", O_RDWR | O_CLOEXEC); - if (fd_ctl < 0) { -@@ -1441,9 +1445,35 @@ static int lxc_get_unused_loop_dev(char *name_loop) - ret = snprintf(name_loop, LO_NAME_SIZE, "/dev/loop%d", loop_nr); - if (ret < 0 || ret >= LO_NAME_SIZE) - goto on_error; -- -+retry: - fd_tmp = open(name_loop, O_RDWR | O_CLOEXEC); - if (fd_tmp < 0) { -+#if HAVE_ISULAD -+ /* Success of LOOP_CTL_GET_FREE doesn't mean /dev/loop$i is ready, -+ * we try to make node by ourself to avoid wait. */ -+ if (try_mknod) { -+ /* Do not check result of mknod because LOOP_CTL_GET_FREE -+ * alse do mknod, so this mknod may fail as node already -+ * exist. If we can open the node without error, we can -+ * say that it's be created successfully. -+ * -+ * note: 7 is the major device number of loopback devices -+ * in kernel. -+ */ -+ mknod(name_loop, S_IFBLK | 0640, makedev(7, loop_nr)); -+ try_mknod = false; -+ goto retry; -+ } -+ /* we need to wait some time to make sure it's ready for open if -+ * it can't open even if we have already try to make node by ourself. */ -+ if (max_retry > 0) { -+ max_retry--; -+ usleep(5000); /* 5 millisecond */ -+ goto retry; -+ } -+ SYSERROR("Failed to open loop \"%s\"", name_loop); -+ goto on_error; -+#else - /* on Android loop devices are moved under /dev/block, give it a shot */ - ret = snprintf(name_loop, LO_NAME_SIZE, "/dev/block/loop%d", loop_nr); - if (ret < 0 || ret >= LO_NAME_SIZE) -@@ -1452,6 +1482,7 @@ static int lxc_get_unused_loop_dev(char *name_loop) - fd_tmp = open(name_loop, O_RDWR | O_CLOEXEC); - if (fd_tmp < 0) - SYSERROR("Failed to open loop \"%s\"", name_loop); -+#endif - } - - on_error: -diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 11d6548..fbb0d55 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -215,6 +215,7 @@ extern bool cgns_supported(void); - extern char *choose_init(const char *rootfs); - extern bool switch_to_ns(pid_t pid, const char *ns); - extern char *get_template_path(const char *t); -+extern int open_without_symlink(const char *target, const char *prefix_skip); - extern int safe_mount(const char *src, const char *dest, const char *fstype, - unsigned long flags, const void *data, - const char *rootfs); --- -1.8.3.1 - diff --git a/0010-IO-refact-terminal-progress.patch b/0010-IO-refact-terminal-progress.patch deleted file mode 100644 index 4e41386..0000000 --- a/0010-IO-refact-terminal-progress.patch +++ /dev/null @@ -1,3568 +0,0 @@ -From 1dce19b2ce4d01c12f3f4eda0666457f2fd3c42c Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 13 Apr 2020 18:11:59 +0800 -Subject: [PATCH 10/49] IO: refact terminal progress - -Signed-off-by: LiFeng ---- - configure.ac | 3 + - src/lxc/Makefile.am | 24 +- - src/lxc/attach.c | 20 +- - src/lxc/attach_options.h | 5 + - src/lxc/conf.c | 10 + - src/lxc/json/defs.c | 205 +++++++ - src/lxc/json/defs.h | 37 ++ - src/lxc/json/json_common.c | 1153 ++++++++++++++++++++++++++++++++++++++ - src/lxc/json/json_common.h | 185 ++++++ - src/lxc/json/logger_json_file.c | 246 ++++++++ - src/lxc/json/logger_json_file.h | 45 ++ - src/lxc/json/oci_runtime_hooks.c | 52 ++ - src/lxc/json/oci_runtime_hooks.h | 15 + - src/lxc/json/oci_runtime_spec.c | 195 +++++++ - src/lxc/json/oci_runtime_spec.h | 37 ++ - src/lxc/json/read-file.c | 95 ++++ - src/lxc/json/read-file.h | 11 + - src/lxc/lxccontainer.c | 36 ++ - src/lxc/lxccontainer.h | 24 + - src/lxc/terminal.c | 783 ++++++++++++++++++++++++++ - src/lxc/terminal.h | 20 + - src/lxc/tools/arguments.h | 1 + - src/lxc/tools/lxc_start.c | 12 + - 23 files changed, 3208 insertions(+), 6 deletions(-) - create mode 100644 src/lxc/json/defs.c - create mode 100644 src/lxc/json/defs.h - create mode 100755 src/lxc/json/json_common.c - create mode 100755 src/lxc/json/json_common.h - create mode 100644 src/lxc/json/logger_json_file.c - create mode 100644 src/lxc/json/logger_json_file.h - create mode 100644 src/lxc/json/oci_runtime_hooks.c - create mode 100644 src/lxc/json/oci_runtime_hooks.h - create mode 100644 src/lxc/json/oci_runtime_spec.c - create mode 100644 src/lxc/json/oci_runtime_spec.h - create mode 100644 src/lxc/json/read-file.c - create mode 100644 src/lxc/json/read-file.h - -diff --git a/configure.ac b/configure.ac -index 5f386d9..56d0cb7 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -119,6 +119,9 @@ AM_CONDITIONAL([DISTRO_UBUNTU], [test "x$with_distro" = "xubuntu"]) - - AC_CONFIG_LINKS([config/etc/default.conf:config/etc/${distroconf}]) - -+# Check yajl -+PKG_CHECK_MODULES([YAJL], [yajl >= 2],[],[AC_MSG_ERROR([You must install yajl >= 2])]) -+ - # Check for init system type - AC_MSG_CHECKING([for init system type]) - AC_ARG_WITH([init-script], -diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am -index d8c2492..23935e5 100644 ---- a/src/lxc/Makefile.am -+++ b/src/lxc/Makefile.am -@@ -53,7 +53,12 @@ noinst_HEADERS = api_extensions.h \ - uuid.h - - #if HAVE_ISULAD --noinst_HEADERS += isulad_utils.h path.h -+noinst_HEADERS += isulad_utils.h path.h \ -+ json/json_common.h json/defs.h \ -+ json/oci_runtime_hooks.h \ -+ json/logger_json_file.h \ -+ json/oci_runtime_spec.h \ -+ json/read-file.h - #endif - - if IS_BIONIC -@@ -159,10 +164,16 @@ liblxc_la_SOURCES = af_unix.c af_unix.h \ - version.h \ - $(LSM_SOURCES) - --#if HAVE_ISULAD -+if HAVE_ISULAD - liblxc_la_SOURCES += isulad_utils.c isulad_utils.h \ -- path.c path.h --#endif -+ path.c path.h \ -+ json/json_common.c json/json_common.h \ -+ json/defs.h json/defs.c \ -+ json/oci_runtime_hooks.c json/oci_runtime_hooks.h \ -+ json/logger_json_file.c json/logger_json_file.h \ -+ json/oci_runtime_spec.c json/oci_runtime_spec.h \ -+ json/read-file.c json/read-file.h -+endif - - if IS_BIONIC - liblxc_la_SOURCES += ../include/fexecve.c ../include/fexecve.h \ -@@ -223,6 +234,7 @@ AM_CFLAGS = -DLXCROOTFSMOUNT=\"$(LXCROOTFSMOUNT)\" \ - -I $(top_srcdir)/src/lxc/cgroups - - if HAVE_ISULAD -+AM_CFLAGS += -I $(top_srcdir)/src/lxc/json - AM_CFLAGS += -DHAVE_ISULAD - endif - if ENABLE_APPARMOR -@@ -271,6 +283,10 @@ liblxc_la_LDFLAGS = -pthread \ - -Wl,-soname,liblxc.so.$(firstword $(subst ., ,@LXC_ABI@)) \ - -version-info @LXC_ABI_MAJOR@ - -+if HAVE_ISULAD -+liblxc_la_LDFLAGS += @YAJL_LIBS@ -+endif -+ - liblxc_la_LIBADD = $(CAP_LIBS) \ - $(OPENSSL_LIBS) \ - $(SELINUX_LIBS) \ -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 56d62ed..78b4700 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -898,12 +898,28 @@ on_error: - } - - static int lxc_attach_terminal(struct lxc_conf *conf, -- struct lxc_terminal *terminal) -+ struct lxc_terminal *terminal, lxc_attach_options_t *options) - { - int ret; - - lxc_terminal_init(terminal); - -+#ifdef HAVE_ISULAD -+ /* isulad: if we pass fifo in option, use them as init fifos */ -+ if (options->init_fifo[0]) { -+ free(terminal->init_fifo[0]); -+ terminal->init_fifo[0] = safe_strdup(options->init_fifo[0]); -+ } -+ if (options->init_fifo[1]) { -+ free(terminal->init_fifo[1]); -+ terminal->init_fifo[1] = safe_strdup(options->init_fifo[1]); -+ } -+ if (options->init_fifo[2]) { -+ free(terminal->init_fifo[2]); -+ terminal->init_fifo[2] = safe_strdup(options->init_fifo[2]); -+ } -+#endif -+ - ret = lxc_terminal_create(terminal); - if (ret < 0) - return log_error(-1, "Failed to create terminal"); -@@ -1097,7 +1113,7 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - } - - if (options->attach_flags & LXC_ATTACH_TERMINAL) { -- ret = lxc_attach_terminal(conf, &terminal); -+ ret = lxc_attach_terminal(conf, &terminal, options); - if (ret < 0) { - ERROR("Failed to setup new terminal"); - free(cwd); -diff --git a/src/lxc/attach_options.h b/src/lxc/attach_options.h -index ec8bea1..3a02ee5 100644 ---- a/src/lxc/attach_options.h -+++ b/src/lxc/attach_options.h -@@ -113,6 +113,11 @@ typedef struct lxc_attach_options_t { - - /*! File descriptor to log output. */ - int log_fd; -+#ifdef HAVE_ISULAD -+ char *init_fifo[3]; /* isulad: default fifos for the start */ -+ int64_t timeout;/* isulad: Seconds for waiting on a container to attach/exec before it is killed*/ -+#endif -+ - } lxc_attach_options_t; - - /*! Default attach options to use */ -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 1f779b9..1487b73 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -2669,6 +2669,16 @@ struct lxc_conf *lxc_conf_init(void) - /* isulad add begin */ - lxc_list_init(&new->populate_devs); - new->umask = 0027; /*default umask 0027*/ -+ new->console.init_fifo[0] = NULL; -+ new->console.init_fifo[1] = NULL; -+ new->console.init_fifo[2] = NULL; -+ new->console.pipes[0][0] = -1; -+ new->console.pipes[0][1] = -1; -+ new->console.pipes[1][0] = -1; -+ new->console.pipes[1][1] = -1; -+ new->console.pipes[2][0] = -1; -+ new->console.pipes[2][1] = -1; -+ lxc_list_init(&new->console.fifos); - #endif - - return new; -diff --git a/src/lxc/json/defs.c b/src/lxc/json/defs.c -new file mode 100644 -index 0000000..4bf569a ---- /dev/null -+++ b/src/lxc/json/defs.c -@@ -0,0 +1,205 @@ -+// Generated from defs.json. Do not edit! -+#ifndef _GNU_SOURCE -+#define _GNU_SOURCE -+#endif -+#include -+#include -+#include "defs.h" -+ -+defs_hook *make_defs_hook(yajl_val tree, struct parser_context *ctx, parser_error *err) { -+ defs_hook *ret = NULL; -+ *err = 0; -+ if (tree == NULL) -+ return ret; -+ ret = safe_malloc(sizeof(*ret)); -+ { -+ yajl_val val = get_val(tree, "path", yajl_t_string); -+ if (val != NULL) { -+ char *str = YAJL_GET_STRING(val); -+ ret->path = safe_strdup(str ? str : ""); -+ } -+ } -+ { -+ yajl_val tmp = get_val(tree, "args", yajl_t_array); -+ if (tmp != NULL && YAJL_GET_ARRAY(tmp) != NULL && YAJL_GET_ARRAY(tmp)->len > 0) { -+ size_t i; -+ ret->args_len = YAJL_GET_ARRAY(tmp)->len; -+ if (YAJL_GET_ARRAY(tmp)->len > SIZE_MAX / sizeof(*ret->args) - 1) { -+ free_defs_hook(ret); -+ return NULL; -+ } -+ ret->args = safe_malloc((YAJL_GET_ARRAY(tmp)->len + 1) * sizeof(*ret->args)); -+ for (i = 0; i < YAJL_GET_ARRAY(tmp)->len; i++) { -+ yajl_val val = YAJL_GET_ARRAY(tmp)->values[i]; -+ if (val != NULL) { -+ char *str = YAJL_GET_STRING(val); -+ ret->args[i] = safe_strdup(str ? str : ""); -+ } -+ } -+ } -+ } -+ { -+ yajl_val tmp = get_val(tree, "env", yajl_t_array); -+ if (tmp != NULL && YAJL_GET_ARRAY(tmp) != NULL && YAJL_GET_ARRAY(tmp)->len > 0) { -+ size_t i; -+ ret->env_len = YAJL_GET_ARRAY(tmp)->len; -+ if (YAJL_GET_ARRAY(tmp)->len > SIZE_MAX / sizeof(*ret->env) - 1) { -+ free_defs_hook(ret); -+ return NULL; -+ } -+ ret->env = safe_malloc((YAJL_GET_ARRAY(tmp)->len + 1) * sizeof(*ret->env)); -+ for (i = 0; i < YAJL_GET_ARRAY(tmp)->len; i++) { -+ yajl_val val = YAJL_GET_ARRAY(tmp)->values[i]; -+ if (val != NULL) { -+ char *str = YAJL_GET_STRING(val); -+ ret->env[i] = safe_strdup(str ? str : ""); -+ } -+ } -+ } -+ } -+ { -+ yajl_val val = get_val(tree, "timeout", yajl_t_number); -+ if (val != NULL) { -+ int invalid = common_safe_int(YAJL_GET_NUMBER(val), (int *)&ret->timeout); -+ if (invalid) { -+ if (asprintf(err, "Invalid value '%s' with type 'integer' for key 'timeout': %s", YAJL_GET_NUMBER(val), strerror(-invalid)) < 0) -+ *err = safe_strdup("error allocating memory"); -+ free_defs_hook(ret); -+ return NULL; -+ } -+ } -+ } -+ if (ret->path == NULL) { -+ if (asprintf(err, "Required field '%s' not present", "path") < 0) -+ *err = safe_strdup("error allocating memory"); -+ free_defs_hook(ret); -+ return NULL; -+ } -+ -+ if (tree->type == yajl_t_object && (ctx->options & PARSE_OPTIONS_STRICT)) { -+ int i; -+ for (i = 0; i < tree->u.object.len; i++) -+ if (strcmp(tree->u.object.keys[i], "path") && -+ strcmp(tree->u.object.keys[i], "args") && -+ strcmp(tree->u.object.keys[i], "env") && -+ strcmp(tree->u.object.keys[i], "timeout")) { -+ if (ctx->stderr > 0) -+ fprintf(ctx->stderr, "WARNING: unknown key found: %s\n", tree->u.object.keys[i]); -+ } -+ } -+ return ret; -+} -+ -+void free_defs_hook(defs_hook *ptr) { -+ if (ptr == NULL) -+ return; -+ free(ptr->path); -+ ptr->path = NULL; -+ if (ptr->args != NULL) { -+ size_t i; -+ for (i = 0; i < ptr->args_len; i++) { -+ if (ptr->args[i] != NULL) { -+ free(ptr->args[i]); -+ ptr->args[i] = NULL; -+ } -+ } -+ free(ptr->args); -+ ptr->args = NULL; -+ } -+ if (ptr->env != NULL) { -+ size_t i; -+ for (i = 0; i < ptr->env_len; i++) { -+ if (ptr->env[i] != NULL) { -+ free(ptr->env[i]); -+ ptr->env[i] = NULL; -+ } -+ } -+ free(ptr->env); -+ ptr->env = NULL; -+ } -+ free(ptr); -+} -+ -+yajl_gen_status gen_defs_hook(yajl_gen g, defs_hook *ptr, struct parser_context *ctx, parser_error *err) { -+ yajl_gen_status stat = yajl_gen_status_ok; -+ *err = 0; -+ stat = reformat_start_map(g); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr != NULL && ptr->path != NULL)) { -+ char *str = ""; -+ stat = reformat_map_key(g, "path", strlen("path")); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (ptr != NULL && ptr->path != NULL) { -+ str = ptr->path; -+ } -+ stat = reformat_string(g, str, strlen(str)); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) || (ptr != NULL && ptr->args != NULL)) { -+ size_t len = 0, i; -+ stat = reformat_map_key(g, "args", strlen("args")); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (ptr != NULL && ptr->args != NULL) { -+ len = ptr->args_len; -+ } -+ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) -+ yajl_gen_config(g, yajl_gen_beautify, 0); -+ stat = reformat_start_array(g); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ for (i = 0; i < len; i++) { -+ stat = reformat_string(g, ptr->args[i], strlen(ptr->args[i])); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ stat = reformat_end_array(g); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) -+ yajl_gen_config(g, yajl_gen_beautify, 1); -+ } -+ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) || (ptr != NULL && ptr->env != NULL)) { -+ size_t len = 0, i; -+ stat = reformat_map_key(g, "env", strlen("env")); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (ptr != NULL && ptr->env != NULL) { -+ len = ptr->env_len; -+ } -+ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) -+ yajl_gen_config(g, yajl_gen_beautify, 0); -+ stat = reformat_start_array(g); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ for (i = 0; i < len; i++) { -+ stat = reformat_string(g, ptr->env[i], strlen(ptr->env[i])); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ stat = reformat_end_array(g); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) -+ yajl_gen_config(g, yajl_gen_beautify, 1); -+ } -+ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr != NULL && ptr->timeout)) { -+ long long int num = 0; -+ stat = reformat_map_key(g, "timeout", strlen("timeout")); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (ptr != NULL && ptr->timeout) { -+ num = (long long int)ptr->timeout; -+ } -+ stat = reformat_int(g, num); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ stat = reformat_end_map(g); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ return yajl_gen_status_ok; -+} -diff --git a/src/lxc/json/defs.h b/src/lxc/json/defs.h -new file mode 100644 -index 0000000..0bbd8ac ---- /dev/null -+++ b/src/lxc/json/defs.h -@@ -0,0 +1,37 @@ -+// Generated from defs.json. Do not edit! -+#ifndef DEFS_SCHEMA_H -+#define DEFS_SCHEMA_H -+ -+#include -+#include -+#include "json_common.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+typedef struct { -+ char *path; -+ -+ char **args; -+ size_t args_len; -+ -+ char **env; -+ size_t env_len; -+ -+ int timeout; -+ -+} -+defs_hook; -+ -+void free_defs_hook(defs_hook *ptr); -+ -+defs_hook *make_defs_hook(yajl_val tree, struct parser_context *ctx, parser_error *err); -+ -+yajl_gen_status gen_defs_hook(yajl_gen g, defs_hook *ptr, struct parser_context *ctx, parser_error *err); -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -diff --git a/src/lxc/json/json_common.c b/src/lxc/json/json_common.c -new file mode 100755 -index 0000000..ec20c59 ---- /dev/null -+++ b/src/lxc/json/json_common.c -@@ -0,0 +1,1153 @@ -+// Auto generated file. Do not edit! -+#define _GNU_SOURCE -+#include -+#include -+#include -+#include "json_common.h" -+ -+#define MAX_NUM_STR_LEN 21 -+ -+yajl_gen_status reformat_number(void *ctx, const char *str, size_t len) { -+ yajl_gen g = (yajl_gen) ctx; -+ return yajl_gen_number(g, str, len); -+} -+ -+yajl_gen_status reformat_uint(void *ctx, long long unsigned int num) { -+ char numstr[MAX_NUM_STR_LEN]; -+ int ret; -+ -+ ret = snprintf(numstr, MAX_NUM_STR_LEN, "%llu", num); -+ if (ret < 0 || ret >= MAX_NUM_STR_LEN) { -+ return yajl_gen_in_error_state; -+ } -+ return reformat_number(ctx, (const char *)numstr, strlen(numstr)); -+} -+ -+yajl_gen_status reformat_int(void *ctx, long long int num) { -+ char numstr[MAX_NUM_STR_LEN]; -+ int ret; -+ -+ ret = snprintf(numstr, MAX_NUM_STR_LEN, "%lld", num); -+ if (ret < 0 || ret >= MAX_NUM_STR_LEN) { -+ return yajl_gen_in_error_state; -+ } -+ return reformat_number(ctx, (const char *)numstr, strlen(numstr)); -+} -+ -+yajl_gen_status reformat_double(void *ctx, double num) { -+ yajl_gen g = (yajl_gen) ctx; -+ return yajl_gen_double(g, num); -+} -+ -+yajl_gen_status reformat_string(void *ctx, const char *str, size_t len) { -+ yajl_gen g = (yajl_gen) ctx; -+ return yajl_gen_string(g, (const unsigned char *)str, len); -+} -+ -+yajl_gen_status reformat_null(void *ctx) { -+ yajl_gen g = (yajl_gen) ctx; -+ return yajl_gen_null(g); -+} -+ -+yajl_gen_status reformat_bool(void *ctx, int boolean) { -+ yajl_gen g = (yajl_gen) ctx; -+ return yajl_gen_bool(g, boolean); -+} -+ -+yajl_gen_status reformat_map_key(void *ctx, const char *str, size_t len) { -+ yajl_gen g = (yajl_gen) ctx; -+ return yajl_gen_string(g, (const unsigned char *)str, len); -+} -+ -+yajl_gen_status reformat_start_map(void *ctx) { -+ yajl_gen g = (yajl_gen) ctx; -+ return yajl_gen_map_open(g); -+} -+ -+yajl_gen_status reformat_end_map(void *ctx) { -+ yajl_gen g = (yajl_gen) ctx; -+ return yajl_gen_map_close(g); -+} -+ -+yajl_gen_status reformat_start_array(void *ctx) { -+ yajl_gen g = (yajl_gen) ctx; -+ return yajl_gen_array_open(g); -+} -+ -+yajl_gen_status reformat_end_array(void *ctx) { -+ yajl_gen g = (yajl_gen) ctx; -+ return yajl_gen_array_close(g); -+} -+ -+bool json_gen_init(yajl_gen *g, struct parser_context *ctx) { -+ *g = yajl_gen_alloc(NULL); -+ if (NULL == *g) { -+ return false; -+ -+ } -+ yajl_gen_config(*g, yajl_gen_beautify, !(ctx->options & GEN_OPTIONS_SIMPLIFY)); -+ yajl_gen_config(*g, yajl_gen_validate_utf8, !(ctx->options & GEN_OPTIONS_NOT_VALIDATE_UTF8)); -+ return true; -+} -+ -+yajl_val get_val(yajl_val tree, const char *name, yajl_type type) { -+ const char *path[] = { name, NULL }; -+ return yajl_tree_get(tree, path, type); -+} -+ -+void *safe_malloc(size_t size) { -+ void *ret = NULL; -+ if (size == 0) { -+ abort(); -+ } -+ ret = calloc(1, size); -+ if (ret == NULL) { -+ abort(); -+ } -+ return ret; -+} -+ -+int common_safe_double(const char *numstr, double *converted) { -+ char *err_str = NULL; -+ double d; -+ -+ if (numstr == NULL) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ d = strtod(numstr, &err_str); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (err_str == NULL || err_str == numstr || *err_str != '\0') { -+ return -EINVAL; -+ } -+ -+ *converted = d; -+ return 0; -+} -+ -+int common_safe_uint8(const char *numstr, uint8_t *converted) { -+ char *err = NULL; -+ unsigned long int uli; -+ -+ if (numstr == NULL) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ uli = strtoul(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (err == NULL || err == numstr || *err != '\0') { -+ return -EINVAL; -+ } -+ -+ if (uli > UINT8_MAX) { -+ return -ERANGE; -+ } -+ -+ *converted = (uint8_t)uli; -+ return 0; -+} -+ -+int common_safe_uint16(const char *numstr, uint16_t *converted) { -+ char *err = NULL; -+ unsigned long int uli; -+ -+ if (numstr == NULL) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ uli = strtoul(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (err == NULL || err == numstr || *err != '\0') { -+ return -EINVAL; -+ } -+ -+ if (uli > UINT16_MAX) { -+ return -ERANGE; -+ } -+ -+ *converted = (uint16_t)uli; -+ return 0; -+} -+ -+int common_safe_uint32(const char *numstr, uint32_t *converted) { -+ char *err = NULL; -+ unsigned long long int ull; -+ -+ if (numstr == NULL) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ ull = strtoull(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (err == NULL || err == numstr || *err != '\0') { -+ return -EINVAL; -+ } -+ -+ if (ull > UINT32_MAX) { -+ return -ERANGE; -+ } -+ -+ *converted = (uint32_t)ull; -+ return 0; -+} -+ -+int common_safe_uint64(const char *numstr, uint64_t *converted) { -+ char *err = NULL; -+ unsigned long long int ull; -+ -+ if (numstr == NULL) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ ull = strtoull(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (err == NULL || err == numstr || *err != '\0') { -+ return -EINVAL; -+ } -+ -+ *converted = (uint64_t)ull; -+ return 0; -+} -+ -+int common_safe_uint(const char *numstr, unsigned int *converted) { -+ char *err = NULL; -+ unsigned long long int ull; -+ -+ if (numstr == NULL) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ ull = strtoull(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (err == NULL || err == numstr || *err != '\0') { -+ return -EINVAL; -+ } -+ -+ if (ull > UINT_MAX) { -+ return -ERANGE; -+ } -+ -+ *converted = (unsigned int)ull; -+ return 0; -+} -+ -+int common_safe_int8(const char *numstr, int8_t *converted) { -+ char *err = NULL; -+ long int li; -+ -+ if (numstr == NULL) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ li = strtol(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (err == NULL || err == numstr || *err != '\0') { -+ return -EINVAL; -+ } -+ -+ if (li > INT8_MAX || li < INT8_MIN) { -+ return -ERANGE; -+ } -+ -+ *converted = (int8_t)li; -+ return 0; -+} -+ -+int common_safe_int16(const char *numstr, int16_t *converted) { -+ char *err = NULL; -+ long int li; -+ -+ if (numstr == NULL) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ li = strtol(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (err == NULL || err == numstr || *err != '\0') { -+ return -EINVAL; -+ } -+ -+ if (li > INT16_MAX || li < INT16_MIN) { -+ return -ERANGE; -+ } -+ -+ *converted = (int16_t)li; -+ return 0; -+} -+ -+int common_safe_int32(const char *numstr, int32_t *converted) { -+ char *err = NULL; -+ long long int lli; -+ -+ if (numstr == NULL) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ lli = strtol(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (err == NULL || err == numstr || *err != '\0') { -+ return -EINVAL; -+ } -+ -+ if (lli > INT32_MAX || lli < INT32_MIN) { -+ return -ERANGE; -+ } -+ -+ *converted = (int32_t)lli; -+ return 0; -+} -+ -+int common_safe_int64(const char *numstr, int64_t *converted) { -+ char *err = NULL; -+ long long int lli; -+ -+ if (numstr == NULL) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ lli = strtoll(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (err == NULL || err == numstr || *err != '\0') { -+ return -EINVAL; -+ } -+ -+ *converted = (int64_t)lli; -+ return 0; -+} -+ -+int common_safe_int(const char *numstr, int *converted) { -+ char *err = NULL; -+ long long int lli; -+ -+ if (numstr == NULL) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ lli = strtol(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (err == NULL || err == numstr || *err != '\0') { -+ return -EINVAL; -+ } -+ -+ if (lli > INT_MAX || lli < INT_MIN) { -+ return -ERANGE; -+ } -+ -+ *converted = (int)lli; -+ return 0; -+} -+ -+yajl_gen_status gen_json_map_int_int(void *ctx, json_map_int_int *map, struct parser_context *ptx, parser_error *err) { -+ yajl_gen_status stat = yajl_gen_status_ok; -+ yajl_gen g = (yajl_gen) ctx; -+ size_t len = 0, i = 0; -+ if (map != NULL) { -+ len = map->len; -+ } -+ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -+ yajl_gen_config(g, yajl_gen_beautify, 0); -+ } -+ stat = reformat_start_map(g); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ -+ } -+ for (i = 0; i < len; i++) { -+ char numstr[MAX_NUM_STR_LEN]; -+ int nret; -+ nret = snprintf(numstr, MAX_NUM_STR_LEN, "%lld", (long long int)map->keys[i]); -+ if (nret < 0 || nret >= MAX_NUM_STR_LEN) { -+ if (!*err && asprintf(err, "Error to print string") < 0) { -+ *(err) = safe_strdup("error allocating memory"); -+ } -+ return yajl_gen_in_error_state; -+ } -+ stat = reformat_string(g, numstr, strlen(numstr)); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ stat = reformat_int(g, map->values[i]); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ } -+ -+ stat = reformat_end_map(g); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -+ yajl_gen_config(g, yajl_gen_beautify, 1); -+ } -+ return yajl_gen_status_ok; -+} -+ -+void free_json_map_int_int(json_map_int_int *map) { -+ if (map != NULL) { -+ size_t i; -+ for (i = 0; i < map->len; i++) { -+ // No need to free key for type int -+ // No need to free value for type int -+ } -+ free(map->keys); -+ map->keys = NULL; -+ free(map->values); -+ map->values = NULL; -+ free(map); -+ } -+} -+json_map_int_int *make_json_map_int_int(yajl_val src, struct parser_context *ctx, parser_error *err) { -+ json_map_int_int *ret = NULL; -+ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { -+ size_t i; -+ size_t len = YAJL_GET_OBJECT(src)->len; -+ if (len > SIZE_MAX / sizeof(int) - 1) { -+ return NULL; -+ } -+ ret = safe_malloc(sizeof(*ret)); -+ ret->len = len; -+ ret->keys = safe_malloc((len + 1) * sizeof(int)); -+ ret->values = safe_malloc((len + 1) * sizeof(int)); -+ for (i = 0; i < len; i++) { -+ const char *srckey = YAJL_GET_OBJECT(src)->keys[i]; -+ yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; -+ -+ if (srckey != NULL) { -+ int invalid; -+ invalid = common_safe_int(srckey, &(ret->keys[i])); -+ if (invalid) { -+ if (*err == NULL && asprintf(err, "Invalid key '%s' with type 'int': %s", srckey, strerror(-invalid)) < 0) { -+ *(err) = safe_strdup("error allocating memory"); -+ } -+ free_json_map_int_int(ret); -+ return NULL; -+ } -+ } -+ -+ if (srcval != NULL) { -+ int invalid; -+ if (!YAJL_IS_NUMBER(srcval)) { -+ if (*err == NULL && asprintf(err, "Invalid value with type 'int' for key '%s'", srckey) < 0) { -+ *(err) = safe_strdup("error allocating memory"); -+ } -+ free_json_map_int_int(ret); -+ return NULL; -+ } -+ invalid = common_safe_int(YAJL_GET_NUMBER(srcval), &(ret->values[i])); -+ if (invalid) { -+ if (*err == NULL && asprintf(err, "Invalid value with type 'int' for key '%s': %s", srckey, strerror(-invalid)) < 0) { -+ *(err) = safe_strdup("error allocating memory"); -+ } -+ free_json_map_int_int(ret); -+ return NULL; -+ } -+ } -+ } -+ } -+ return ret; -+} -+int append_json_map_int_int(json_map_int_int *map, int key, int val) { -+ size_t len; -+ int *keys = NULL; -+ int *vals = NULL; -+ -+ if (map == NULL) { -+ return -1; -+ } -+ -+ if ((SIZE_MAX / sizeof(int) - 1) < map->len) { -+ return -1; -+ } -+ -+ len = map->len + 1; -+ keys = safe_malloc(len * sizeof(int)); -+ vals = safe_malloc(len * sizeof(int)); -+ -+ if (map->len) { -+ (void)memcpy(keys, map->keys, map->len * sizeof(int)); -+ (void)memcpy(vals, map->values, map->len * sizeof(int)); -+ } -+ free(map->keys); -+ map->keys = keys; -+ free(map->values); -+ map->values = vals; -+ map->keys[map->len] = key; -+ map->values[map->len] = val; -+ -+ map->len++; -+ return 0; -+} -+ -+yajl_gen_status gen_json_map_int_bool(void *ctx, json_map_int_bool *map, struct parser_context *ptx, parser_error *err) { -+ yajl_gen_status stat = yajl_gen_status_ok; -+ yajl_gen g = (yajl_gen) ctx; -+ size_t len = 0, i = 0; -+ if (map != NULL) { -+ len = map->len; -+ } -+ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -+ yajl_gen_config(g, yajl_gen_beautify, 0); -+ } -+ stat = reformat_start_map(g); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ -+ } -+ for (i = 0; i < len; i++) { -+ char numstr[MAX_NUM_STR_LEN]; -+ int nret; -+ nret = snprintf(numstr, MAX_NUM_STR_LEN, "%lld", (long long int)map->keys[i]); -+ if (nret < 0 || nret >= MAX_NUM_STR_LEN) { -+ if (!*err && asprintf(err, "Error to print string") < 0) { -+ *(err) = safe_strdup("error allocating memory"); -+ } -+ return yajl_gen_in_error_state; -+ } -+ stat = reformat_string(g, numstr, strlen(numstr)); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ stat = reformat_bool(g, map->values[i]); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ } -+ -+ stat = reformat_end_map(g); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -+ yajl_gen_config(g, yajl_gen_beautify, 1); -+ } -+ return yajl_gen_status_ok; -+} -+ -+void free_json_map_int_bool(json_map_int_bool *map) { -+ if (map != NULL) { -+ free(map->keys); -+ map->keys = NULL; -+ free(map->values); -+ map->values = NULL; -+ free(map); -+ } -+} -+json_map_int_bool *make_json_map_int_bool(yajl_val src, struct parser_context *ctx, parser_error *err) { -+ json_map_int_bool *ret = NULL; -+ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { -+ size_t i; -+ size_t len = YAJL_GET_OBJECT(src)->len; -+ if (len > SIZE_MAX / sizeof(int) - 1) { -+ return NULL; -+ } -+ ret = safe_malloc(sizeof(*ret)); -+ ret->len = len; -+ ret->keys = safe_malloc((len + 1) * sizeof(int)); -+ ret->values = safe_malloc((len + 1) * sizeof(bool)); -+ for (i = 0; i < len; i++) { -+ const char *srckey = YAJL_GET_OBJECT(src)->keys[i]; -+ yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; -+ -+ if (srckey != NULL) { -+ int invalid; -+ invalid = common_safe_int(srckey, &(ret->keys[i])); -+ if (invalid) { -+ if (*err == NULL && asprintf(err, "Invalid key '%s' with type 'int': %s", srckey, strerror(-invalid)) < 0) { -+ *(err) = safe_strdup("error allocating memory"); -+ } -+ free_json_map_int_bool(ret); -+ return NULL; -+ } -+ } -+ -+ if (srcval != NULL) { -+ if (YAJL_IS_TRUE(srcval)) { -+ ret->values[i] = true; -+ } else if (YAJL_IS_FALSE(srcval)) { -+ ret->values[i] = false; -+ } else { -+ if (*err == NULL && asprintf(err, "Invalid value with type 'bool' for key '%s'", srckey) < 0) { -+ *(err) = safe_strdup("error allocating memory"); -+ } -+ free_json_map_int_bool(ret); -+ return NULL; -+ } -+ } -+ } -+ } -+ return ret; -+} -+int append_json_map_int_bool(json_map_int_bool *map, int key, bool val) { -+ size_t len; -+ int *keys = NULL; -+ bool *vals = NULL; -+ -+ if (map == NULL) { -+ return -1; -+ } -+ -+ if ((SIZE_MAX / sizeof(int) - 1) < map->len || (SIZE_MAX / sizeof(bool) - 1) < map->len) { -+ return -1; -+ } -+ -+ len = map->len + 1; -+ keys = safe_malloc(len * sizeof(int)); -+ vals = safe_malloc(len * sizeof(bool)); -+ -+ if (map->len) { -+ (void)memcpy(keys, map->keys, map->len * sizeof(int)); -+ (void)memcpy(vals, map->values, map->len * sizeof(bool)); -+ } -+ free(map->keys); -+ map->keys = keys; -+ free(map->values); -+ map->values = vals; -+ map->keys[map->len] = key; -+ map->values[map->len] = val; -+ -+ map->len++; -+ return 0; -+} -+ -+yajl_gen_status gen_json_map_int_string(void *ctx, json_map_int_string *map, struct parser_context *ptx, parser_error *err) { -+ yajl_gen_status stat = yajl_gen_status_ok; -+ yajl_gen g = (yajl_gen) ctx; -+ size_t len = 0, i = 0; -+ if (map != NULL) { -+ len = map->len; -+ } -+ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -+ yajl_gen_config(g, yajl_gen_beautify, 0); -+ } -+ stat = reformat_start_map(g); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ -+ } -+ for (i = 0; i < len; i++) { -+ char numstr[MAX_NUM_STR_LEN]; -+ int nret; -+ nret = snprintf(numstr, MAX_NUM_STR_LEN, "%lld", (long long int)map->keys[i]); -+ if (nret < 0 || nret >= MAX_NUM_STR_LEN) { -+ if (!*err && asprintf(err, "Error to print string") < 0) { -+ *(err) = safe_strdup("error allocating memory"); -+ } -+ return yajl_gen_in_error_state; -+ } -+ stat = reformat_string(g, numstr, strlen(numstr)); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ stat = reformat_string(g, map->values[i], strlen(map->values[i]));; -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ } -+ -+ stat = reformat_end_map(g); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -+ yajl_gen_config(g, yajl_gen_beautify, 1); -+ } -+ return yajl_gen_status_ok; -+} -+ -+void free_json_map_int_string(json_map_int_string *map) { -+ if (map != NULL) { -+ size_t i; -+ for (i = 0; i < map->len; i++) { -+ // No need to free key for type int -+ free(map->values[i]); -+ map->values[i] = NULL; -+ } -+ free(map->keys); -+ map->keys = NULL; -+ free(map->values); -+ map->values = NULL; -+ free(map); -+ } -+} -+json_map_int_string *make_json_map_int_string(yajl_val src, struct parser_context *ctx, parser_error *err) { -+ json_map_int_string *ret = NULL; -+ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { -+ size_t i; -+ size_t len = YAJL_GET_OBJECT(src)->len; -+ if (len > SIZE_MAX / sizeof(char *) - 1) { -+ return NULL; -+ } -+ ret = safe_malloc(sizeof(*ret)); -+ ret->len = len; -+ ret->keys = safe_malloc((len + 1) * sizeof(int)); -+ ret->values = safe_malloc((len + 1) * sizeof(char *)); -+ for (i = 0; i < len; i++) { -+ const char *srckey = YAJL_GET_OBJECT(src)->keys[i]; -+ yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; -+ -+ if (srckey != NULL) { -+ int invalid; -+ invalid = common_safe_int(srckey, &(ret->keys[i])); -+ if (invalid) { -+ if (*err == NULL && asprintf(err, "Invalid key '%s' with type 'int': %s", srckey, strerror(-invalid)) < 0) { -+ *(err) = safe_strdup("error allocating memory"); -+ } -+ free_json_map_int_string(ret); -+ return NULL; -+ } -+ } -+ -+ if (srcval != NULL) { -+ if (!YAJL_IS_STRING(srcval)) { -+ if (*err == NULL && asprintf(err, "Invalid value with type 'string' for key '%s'", srckey) < 0) { -+ *(err) = safe_strdup("error allocating memory"); -+ } -+ free_json_map_int_string(ret); -+ return NULL; -+ } -+ char *str = YAJL_GET_STRING(srcval); -+ ret->values[i] = safe_strdup(str ? str : ""); -+ } -+ } -+ } -+ return ret; -+} -+int append_json_map_int_string(json_map_int_string *map, int key, const char *val) { -+ size_t len; -+ int *keys = NULL; -+ char **vals = NULL; -+ -+ if (map == NULL) { -+ return -1; -+ } -+ -+ if ((SIZE_MAX / sizeof(int) - 1) < map->len || (SIZE_MAX / sizeof(char *) - 1) < map->len) { -+ return -1; -+ } -+ -+ len = map->len + 1; -+ keys = safe_malloc(len * sizeof(int)); -+ vals = safe_malloc(len * sizeof(char *)); -+ -+ if (map->len) { -+ (void)memcpy(keys, map->keys, map->len * sizeof(int)); -+ (void)memcpy(vals, map->values, map->len * sizeof(char *)); -+ } -+ free(map->keys); -+ map->keys = keys; -+ free(map->values); -+ map->values = vals; -+ map->keys[map->len] = key; -+ map->values[map->len] = safe_strdup(val ? val : ""); -+ -+ map->len++; -+ return 0; -+} -+ -+yajl_gen_status gen_json_map_string_int(void *ctx, json_map_string_int *map, struct parser_context *ptx, parser_error *err) { -+ yajl_gen_status stat = yajl_gen_status_ok; -+ yajl_gen g = (yajl_gen) ctx; -+ size_t len = 0, i = 0; -+ if (map != NULL) { -+ len = map->len; -+ } -+ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -+ yajl_gen_config(g, yajl_gen_beautify, 0); -+ } -+ stat = reformat_start_map(g); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ -+ } -+ for (i = 0; i < len; i++) { -+ stat = reformat_string(g, map->keys[i], strlen(map->keys[i])); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ stat = reformat_int(g, map->values[i]); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ } -+ -+ stat = reformat_end_map(g); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -+ yajl_gen_config(g, yajl_gen_beautify, 1); -+ } -+ return yajl_gen_status_ok; -+} -+ -+void free_json_map_string_int(json_map_string_int *map) { -+ if (map != NULL) { -+ size_t i; -+ for (i = 0; i < map->len; i++) { -+ free(map->keys[i]); -+ map->keys[i] = NULL; -+ // No need to free value for type int -+ } -+ free(map->keys); -+ map->keys = NULL; -+ free(map->values); -+ map->values = NULL; -+ free(map); -+ } -+} -+json_map_string_int *make_json_map_string_int(yajl_val src, struct parser_context *ctx, parser_error *err) { -+ json_map_string_int *ret = NULL; -+ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { -+ size_t i; -+ size_t len = YAJL_GET_OBJECT(src)->len; -+ if (len > SIZE_MAX / sizeof(char *) - 1) { -+ return NULL; -+ } -+ ret = safe_malloc(sizeof(*ret)); -+ ret->len = len; -+ ret->keys = safe_malloc((len + 1) * sizeof(char *)); -+ ret->values = safe_malloc((len + 1) * sizeof(int)); -+ for (i = 0; i < len; i++) { -+ const char *srckey = YAJL_GET_OBJECT(src)->keys[i]; -+ yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; -+ ret->keys[i] = safe_strdup(srckey ? srckey : ""); -+ -+ if (srcval != NULL) { -+ int invalid; -+ if (!YAJL_IS_NUMBER(srcval)) { -+ if (*err == NULL && asprintf(err, "Invalid value with type 'int' for key '%s'", srckey) < 0) { -+ *(err) = safe_strdup("error allocating memory"); -+ } -+ free_json_map_string_int(ret); -+ return NULL; -+ } -+ invalid = common_safe_int(YAJL_GET_NUMBER(srcval), &(ret->values[i])); -+ if (invalid) { -+ if (*err == NULL && asprintf(err, "Invalid value with type 'int' for key '%s': %s", srckey, strerror(-invalid)) < 0) { -+ *(err) = safe_strdup("error allocating memory"); -+ } -+ free_json_map_string_int(ret); -+ return NULL; -+ } -+ } -+ } -+ } -+ return ret; -+} -+int append_json_map_string_int(json_map_string_int *map, const char *key, int val) { -+ size_t len; -+ char **keys = NULL; -+ int *vals = NULL; -+ -+ if (map == NULL) { -+ return -1; -+ } -+ -+ if ((SIZE_MAX / sizeof(char *) - 1) < map->len || (SIZE_MAX / sizeof(int) - 1) < map->len) { -+ return -1; -+ } -+ -+ len = map->len + 1; -+ keys = safe_malloc(len * sizeof(char *)); -+ vals = safe_malloc(len * sizeof(int)); -+ -+ if (map->len) { -+ (void)memcpy(keys, map->keys, map->len * sizeof(char *)); -+ (void)memcpy(vals, map->values, map->len * sizeof(int)); -+ } -+ free(map->keys); -+ map->keys = keys; -+ free(map->values); -+ map->values = vals; -+ map->keys[map->len] = safe_strdup(key ? key : ""); -+ map->values[map->len] = val; -+ -+ map->len++; -+ return 0; -+} -+ -+yajl_gen_status gen_json_map_string_bool(void *ctx, json_map_string_bool *map, struct parser_context *ptx, parser_error *err) { -+ yajl_gen_status stat = yajl_gen_status_ok; -+ yajl_gen g = (yajl_gen) ctx; -+ size_t len = 0, i = 0; -+ if (map != NULL) { -+ len = map->len; -+ } -+ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -+ yajl_gen_config(g, yajl_gen_beautify, 0); -+ } -+ stat = reformat_start_map(g); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ -+ } -+ for (i = 0; i < len; i++) { -+ stat = reformat_string(g, map->keys[i], strlen(map->keys[i])); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ stat = reformat_bool(g, map->values[i]); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ } -+ -+ stat = reformat_end_map(g); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -+ yajl_gen_config(g, yajl_gen_beautify, 1); -+ } -+ return yajl_gen_status_ok; -+} -+ -+void free_json_map_string_bool(json_map_string_bool *map) { -+ if (map != NULL) { -+ size_t i; -+ for (i = 0; i < map->len; i++) { -+ free(map->keys[i]); -+ map->keys[i] = NULL; -+ // No need to free value for type bool -+ } -+ free(map->keys); -+ map->keys = NULL; -+ free(map->values); -+ map->values = NULL; -+ free(map); -+ } -+} -+json_map_string_bool *make_json_map_string_bool(yajl_val src, struct parser_context *ctx, parser_error *err) { -+ json_map_string_bool *ret = NULL; -+ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { -+ size_t i; -+ size_t len = YAJL_GET_OBJECT(src)->len; -+ if (len > SIZE_MAX / sizeof(char *) - 1) { -+ return NULL; -+ } -+ ret = safe_malloc(sizeof(*ret)); -+ ret->len = len; -+ ret->keys = safe_malloc((len + 1) * sizeof(char *)); -+ ret->values = safe_malloc((len + 1) * sizeof(bool)); -+ for (i = 0; i < len; i++) { -+ const char *srckey = YAJL_GET_OBJECT(src)->keys[i]; -+ yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; -+ ret->keys[i] = safe_strdup(srckey ? srckey : ""); -+ -+ if (srcval != NULL) { -+ if (YAJL_IS_TRUE(srcval)) { -+ ret->values[i] = true; -+ } else if (YAJL_IS_FALSE(srcval)) { -+ ret->values[i] = false; -+ } else { -+ if (*err == NULL && asprintf(err, "Invalid value with type 'bool' for key '%s'", srckey) < 0) { -+ *(err) = safe_strdup("error allocating memory"); -+ } -+ free_json_map_string_bool(ret); -+ return NULL; -+ } -+ } -+ } -+ } -+ return ret; -+} -+ -+int append_json_map_string_bool(json_map_string_bool *map, const char *key, bool val) { -+ size_t len; -+ char **keys = NULL; -+ bool *vals = NULL; -+ -+ if (map == NULL) { -+ return -1; -+ } -+ -+ if ((SIZE_MAX / sizeof(char *) - 1) < map->len || (SIZE_MAX / sizeof(bool) - 1) < map->len) { -+ return -1; -+ } -+ -+ len = map->len + 1; -+ keys = safe_malloc(len * sizeof(char *)); -+ vals = safe_malloc(len * sizeof(bool)); -+ -+ if (map->len) { -+ (void)memcpy(keys, map->keys, map->len * sizeof(char *)); -+ (void)memcpy(vals, map->values, map->len * sizeof(bool)); -+ } -+ free(map->keys); -+ map->keys = keys; -+ free(map->values); -+ map->values = vals; -+ map->keys[map->len] = safe_strdup(key ? key : ""); -+ map->values[map->len] = val; -+ -+ map->len++; -+ return 0; -+} -+ -+yajl_gen_status gen_json_map_string_string(void *ctx, json_map_string_string *map, struct parser_context *ptx, parser_error *err) { -+ yajl_gen_status stat = yajl_gen_status_ok; -+ yajl_gen g = (yajl_gen) ctx; -+ size_t len = 0, i = 0; -+ if (map != NULL) { -+ len = map->len; -+ } -+ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -+ yajl_gen_config(g, yajl_gen_beautify, 0); -+ } -+ stat = reformat_start_map(g); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ -+ } -+ for (i = 0; i < len; i++) { -+ stat = reformat_string(g, map->keys[i], strlen(map->keys[i])); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ stat = reformat_string(g, map->values[i], strlen(map->values[i]));; -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ } -+ -+ stat = reformat_end_map(g); -+ if (yajl_gen_status_ok != stat) { -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -+ yajl_gen_config(g, yajl_gen_beautify, 1); -+ } -+ return yajl_gen_status_ok; -+} -+ -+void free_json_map_string_string(json_map_string_string *map) { -+ if (map != NULL) { -+ size_t i; -+ for (i = 0; i < map->len; i++) { -+ free(map->keys[i]); -+ map->keys[i] = NULL; -+ free(map->values[i]); -+ map->values[i] = NULL; -+ } -+ free(map->keys); -+ map->keys = NULL; -+ free(map->values); -+ map->values = NULL; -+ free(map); -+ } -+} -+json_map_string_string *make_json_map_string_string(yajl_val src, struct parser_context *ctx, parser_error *err) { -+ json_map_string_string *ret = NULL; -+ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { -+ size_t i; -+ size_t len = YAJL_GET_OBJECT(src)->len; -+ if (len > SIZE_MAX / sizeof(char *) - 1) { -+ return NULL; -+ } -+ ret = safe_malloc(sizeof(*ret)); -+ ret->len = len; -+ ret->keys = safe_malloc((len + 1) * sizeof(char *)); -+ ret->values = safe_malloc((len + 1) * sizeof(char *)); -+ for (i = 0; i < len; i++) { -+ const char *srckey = YAJL_GET_OBJECT(src)->keys[i]; -+ yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; -+ ret->keys[i] = safe_strdup(srckey ? srckey : ""); -+ -+ if (srcval != NULL) { -+ if (!YAJL_IS_STRING(srcval)) { -+ if (*err == NULL && asprintf(err, "Invalid value with type 'string' for key '%s'", srckey) < 0) { -+ *(err) = safe_strdup("error allocating memory"); -+ } -+ free_json_map_string_string(ret); -+ return NULL; -+ } -+ char *str = YAJL_GET_STRING(srcval); -+ ret->values[i] = safe_strdup(str ? str : ""); -+ } -+ } -+ } -+ return ret; -+} -+int append_json_map_string_string(json_map_string_string *map, const char *key, const char *val) { -+ size_t len, i; -+ char **keys = NULL; -+ char **vals = NULL; -+ -+ if (map == NULL) { -+ return -1; -+ } -+ -+ for (i = 0; i < map->len; i++) { -+ if (strcmp(map->keys[i], key) == 0) { -+ free(map->values[i]); -+ map->values[i] = safe_strdup(val ? val : ""); -+ return 0; -+ } -+ } -+ -+ if ((SIZE_MAX / sizeof(char *) - 1) < map->len) { -+ return -1; -+ } -+ -+ len = map->len + 1; -+ keys = safe_malloc(len * sizeof(char *)); -+ vals = safe_malloc(len * sizeof(char *)); -+ -+ if (map->len) { -+ (void)memcpy(keys, map->keys, map->len * sizeof(char *)); -+ (void)memcpy(vals, map->values, map->len * sizeof(char *)); -+ } -+ free(map->keys); -+ map->keys = keys; -+ free(map->values); -+ map->values = vals; -+ map->keys[map->len] = safe_strdup(key ? key : ""); -+ map->values[map->len] = safe_strdup(val ? val : ""); -+ -+ map->len++; -+ return 0; -+} -diff --git a/src/lxc/json/json_common.h b/src/lxc/json/json_common.h -new file mode 100755 -index 0000000..60aa5fd ---- /dev/null -+++ b/src/lxc/json/json_common.h -@@ -0,0 +1,185 @@ -+// Auto generated file. Do not edit! -+#ifndef _JSON_COMMON_H -+#define _JSON_COMMON_H -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "utils.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+# undef linux -+ -+//options to report error if there is unknown key found in json -+# define PARSE_OPTIONS_STRICT 0x01 -+//options to generate all key and value -+# define GEN_OPTIONS_ALLKEYVALUE 0x02 -+//options to generate simplify(no indent) json string -+# define GEN_OPTIONS_SIMPLIFY 0x04 -+//options not to validate utf8 data -+# define GEN_OPTIONS_NOT_VALIDATE_UTF8 0x08 -+ -+#define GEN_SET_ERROR_AND_RETURN(stat, err) { \ -+ if (*(err) == NULL) {\ -+ if (asprintf(err, "%s: %s: %d: error generating json, errcode: %d", __FILE__, __func__, __LINE__, stat) < 0) { \ -+ *(err) = safe_strdup("error allocating memory"); \ -+ } \ -+ }\ -+ return stat; \ -+ } -+ -+typedef char *parser_error; -+ -+struct parser_context { -+ unsigned int options; -+ FILE *stderr; -+}; -+ -+yajl_gen_status reformat_number(void *ctx, const char *str, size_t len); -+ -+yajl_gen_status reformat_uint(void *ctx, long long unsigned int num); -+ -+yajl_gen_status reformat_int(void *ctx, long long int num); -+ -+yajl_gen_status reformat_double(void *ctx, double num); -+ -+yajl_gen_status reformat_string(void *ctx, const char *str, size_t len); -+ -+yajl_gen_status reformat_null(void *ctx); -+ -+yajl_gen_status reformat_bool(void *ctx, int boolean); -+ -+yajl_gen_status reformat_map_key(void *ctx, const char *str, size_t len); -+ -+yajl_gen_status reformat_start_map(void *ctx); -+ -+yajl_gen_status reformat_end_map(void *ctx); -+ -+yajl_gen_status reformat_start_array(void *ctx); -+ -+yajl_gen_status reformat_end_array(void *ctx); -+ -+bool json_gen_init(yajl_gen *g, struct parser_context *ctx); -+ -+yajl_val get_val(yajl_val tree, const char *name, yajl_type type); -+ -+void *safe_malloc(size_t size); -+ -+int common_safe_double(const char *numstr, double *converted); -+ -+int common_safe_uint8(const char *numstr, uint8_t *converted); -+ -+int common_safe_uint16(const char *numstr, uint16_t *converted); -+ -+int common_safe_uint32(const char *numstr, uint32_t *converted); -+ -+int common_safe_uint64(const char *numstr, uint64_t *converted); -+ -+int common_safe_uint(const char *numstr, unsigned int *converted); -+ -+int common_safe_int8(const char *numstr, int8_t *converted); -+ -+int common_safe_int16(const char *numstr, int16_t *converted); -+ -+int common_safe_int32(const char *numstr, int32_t *converted); -+ -+int common_safe_int64(const char *numstr, int64_t *converted); -+ -+int common_safe_int(const char *numstr, int *converted); -+ -+typedef struct { -+ int *keys; -+ int *values; -+ size_t len; -+} json_map_int_int; -+ -+void free_json_map_int_int(json_map_int_int *map); -+ -+json_map_int_int *make_json_map_int_int(yajl_val src, struct parser_context *ctx, parser_error *err); -+ -+yajl_gen_status gen_json_map_int_int(void *ctx, json_map_int_int *map, struct parser_context *ptx, parser_error *err); -+ -+int append_json_map_int_int(json_map_int_int *map, int key, int val); -+ -+typedef struct { -+ int *keys; -+ bool *values; -+ size_t len; -+} json_map_int_bool; -+ -+void free_json_map_int_bool(json_map_int_bool *map); -+ -+json_map_int_bool *make_json_map_int_bool(yajl_val src, struct parser_context *ctx, parser_error *err); -+ -+yajl_gen_status gen_json_map_int_bool(void *ctx, json_map_int_bool *map, struct parser_context *ptx, parser_error *err); -+ -+int append_json_map_int_bool(json_map_int_bool *map, int key, bool val); -+ -+typedef struct { -+ int *keys; -+ char **values; -+ size_t len; -+} json_map_int_string; -+ -+void free_json_map_int_string(json_map_int_string *map); -+ -+json_map_int_string *make_json_map_int_string(yajl_val src, struct parser_context *ctx, parser_error *err); -+ -+yajl_gen_status gen_json_map_int_string(void *ctx, json_map_int_string *map, struct parser_context *ptx, parser_error *err); -+ -+int append_json_map_int_string(json_map_int_string *map, int key, const char *val); -+ -+typedef struct { -+ char **keys; -+ int *values; -+ size_t len; -+} json_map_string_int; -+ -+void free_json_map_string_int(json_map_string_int *map); -+ -+json_map_string_int *make_json_map_string_int(yajl_val src, struct parser_context *ctx, parser_error *err); -+ -+yajl_gen_status gen_json_map_string_int(void *ctx, json_map_string_int *map, struct parser_context *ptx, parser_error *err); -+ -+int append_json_map_string_int(json_map_string_int *map, const char *key, int val); -+ -+typedef struct { -+ char **keys; -+ bool *values; -+ size_t len; -+} json_map_string_bool; -+ -+void free_json_map_string_bool(json_map_string_bool *map); -+ -+json_map_string_bool *make_json_map_string_bool(yajl_val src, struct parser_context *ctx, parser_error *err); -+ -+yajl_gen_status gen_json_map_string_bool(void *ctx, json_map_string_bool *map, struct parser_context *ptx, parser_error *err); -+ -+int append_json_map_string_bool(json_map_string_bool *map, const char *key, bool val); -+ -+typedef struct { -+ char **keys; -+ char **values; -+ size_t len; -+} json_map_string_string; -+ -+void free_json_map_string_string(json_map_string_string *map); -+ -+json_map_string_string *make_json_map_string_string(yajl_val src, struct parser_context *ctx, parser_error *err); -+ -+yajl_gen_status gen_json_map_string_string(void *ctx, json_map_string_string *map, struct parser_context *ptx, parser_error *err); -+ -+int append_json_map_string_string(json_map_string_string *map, const char *key, const char *val); -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -\ No newline at end of file -diff --git a/src/lxc/json/logger_json_file.c b/src/lxc/json/logger_json_file.c -new file mode 100644 -index 0000000..6abeef4 ---- /dev/null -+++ b/src/lxc/json/logger_json_file.c -@@ -0,0 +1,246 @@ -+// Generated from json-file.json. Do not edit! -+#ifndef _GNU_SOURCE -+#define _GNU_SOURCE -+#endif -+#include -+#include -+#include "logger_json_file.h" -+ -+logger_json_file *make_logger_json_file(yajl_val tree, struct parser_context *ctx, parser_error *err) { -+ logger_json_file *ret = NULL; -+ *err = 0; -+ if (tree == NULL) -+ return ret; -+ ret = safe_malloc(sizeof(*ret)); -+ { -+ yajl_val tmp = get_val(tree, "log", yajl_t_string); -+ if (tmp != NULL) { -+ char *str = YAJL_GET_STRING(tmp); -+ ret->log = (uint8_t *)safe_strdup(str ? str : ""); -+ ret->log_len = str != NULL ? strlen(str) : 0; -+ } -+ } -+ { -+ yajl_val val = get_val(tree, "stream", yajl_t_string); -+ if (val != NULL) { -+ char *str = YAJL_GET_STRING(val); -+ ret->stream = safe_strdup(str ? str : ""); -+ } -+ } -+ { -+ yajl_val val = get_val(tree, "time", yajl_t_string); -+ if (val != NULL) { -+ char *str = YAJL_GET_STRING(val); -+ ret->time = safe_strdup(str ? str : ""); -+ } -+ } -+ { -+ yajl_val tmp = get_val(tree, "attrs", yajl_t_string); -+ if (tmp != NULL) { -+ char *str = YAJL_GET_STRING(tmp); -+ ret->attrs = (uint8_t *)safe_strdup(str ? str : ""); -+ ret->attrs_len = str != NULL ? strlen(str) : 0; -+ } -+ } -+ -+ if (tree->type == yajl_t_object && (ctx->options & PARSE_OPTIONS_STRICT)) { -+ int i; -+ for (i = 0; i < tree->u.object.len; i++) -+ if (strcmp(tree->u.object.keys[i], "log") && -+ strcmp(tree->u.object.keys[i], "stream") && -+ strcmp(tree->u.object.keys[i], "time") && -+ strcmp(tree->u.object.keys[i], "attrs")) { -+ if (ctx->stderr > 0) -+ fprintf(ctx->stderr, "WARNING: unknown key found: %s\n", tree->u.object.keys[i]); -+ } -+ } -+ return ret; -+} -+ -+void free_logger_json_file(logger_json_file *ptr) { -+ if (ptr == NULL) -+ return; -+ free(ptr->log); -+ ptr->log = NULL; -+ free(ptr->stream); -+ ptr->stream = NULL; -+ free(ptr->time); -+ ptr->time = NULL; -+ free(ptr->attrs); -+ ptr->attrs = NULL; -+ free(ptr); -+} -+ -+yajl_gen_status gen_logger_json_file(yajl_gen g, logger_json_file *ptr, struct parser_context *ctx, parser_error *err) { -+ yajl_gen_status stat = yajl_gen_status_ok; -+ *err = 0; -+ stat = reformat_start_map(g); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) || (ptr != NULL && ptr->log != NULL && ptr->log_len)) { -+ const char *str = ""; -+ size_t len = 0; -+ stat = reformat_map_key(g, "log", strlen("log")); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (ptr != NULL && ptr->log != NULL) { -+ str = (const char *)ptr->log; -+ len = ptr->log_len; -+ } -+ stat = reformat_string(g, str, len); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr != NULL && ptr->stream != NULL)) { -+ char *str = ""; -+ stat = reformat_map_key(g, "stream", strlen("stream")); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (ptr != NULL && ptr->stream != NULL) { -+ str = ptr->stream; -+ } -+ stat = reformat_string(g, str, strlen(str)); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr != NULL && ptr->time != NULL)) { -+ char *str = ""; -+ stat = reformat_map_key(g, "time", strlen("time")); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (ptr != NULL && ptr->time != NULL) { -+ str = ptr->time; -+ } -+ stat = reformat_string(g, str, strlen(str)); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) || (ptr != NULL && ptr->attrs != NULL && ptr->attrs_len)) { -+ const char *str = ""; -+ size_t len = 0; -+ stat = reformat_map_key(g, "attrs", strlen("attrs")); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (ptr != NULL && ptr->attrs != NULL) { -+ str = (const char *)ptr->attrs; -+ len = ptr->attrs_len; -+ } -+ stat = reformat_string(g, str, len); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ stat = reformat_end_map(g); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ return yajl_gen_status_ok; -+} -+ -+ -+logger_json_file *logger_json_file_parse_file(const char *filename, struct parser_context *ctx, parser_error *err) { -+ logger_json_file *ptr = NULL; -+ size_t filesize; -+ char *content = NULL; -+ -+ if (filename == NULL || err == NULL) -+ return NULL; -+ -+ *err = NULL; -+ content = read_file(filename, &filesize); -+ if (content == NULL) { -+ if (asprintf(err, "cannot read the file: %s", filename) < 0) -+ *err = safe_strdup("error allocating memory"); -+ return NULL; -+ } -+ ptr = logger_json_file_parse_data(content, ctx, err); -+ free(content); -+ return ptr; -+} -+ -+logger_json_file *logger_json_file_parse_file_stream(FILE *stream, struct parser_context *ctx, parser_error *err) { -+ logger_json_file *ptr = NULL; -+ size_t filesize; -+ char *content = NULL ; -+ -+ if (stream == NULL || err == NULL) -+ return NULL; -+ -+ *err = NULL; -+ content = fread_file(stream, &filesize); -+ if (content == NULL) { -+ *err = safe_strdup("cannot read the file"); -+ return NULL; -+ } -+ ptr = logger_json_file_parse_data(content, ctx, err); -+ free(content); -+ return ptr; -+} -+ -+logger_json_file *logger_json_file_parse_data(const char *jsondata, struct parser_context *ctx, parser_error *err) { -+ logger_json_file *ptr = NULL; -+ yajl_val tree; -+ char errbuf[1024]; -+ struct parser_context tmp_ctx; -+ -+ if (jsondata == NULL || err == NULL) -+ return NULL; -+ -+ *err = NULL; -+ if (ctx == NULL) { -+ ctx = &tmp_ctx; -+ memset(&tmp_ctx, 0, sizeof(tmp_ctx)); -+ } -+ tree = yajl_tree_parse(jsondata, errbuf, sizeof(errbuf)); -+ if (tree == NULL) { -+ if (asprintf(err, "cannot parse the data: %s", errbuf) < 0) -+ *err = safe_strdup("error allocating memory"); -+ return NULL; -+ } -+ ptr = make_logger_json_file(tree, ctx, err); -+ yajl_tree_free(tree); -+ return ptr; -+} -+char *logger_json_file_generate_json(logger_json_file *ptr, struct parser_context *ctx, parser_error *err) { -+ yajl_gen g = NULL; -+ struct parser_context tmp_ctx; -+ const unsigned char *gen_buf = NULL; -+ char *json_buf = NULL; -+ size_t gen_len = 0; -+ -+ if (ptr == NULL || err == NULL) -+ return NULL; -+ -+ *err = NULL; -+ if (ctx == NULL) { -+ ctx = &tmp_ctx; -+ memset(&tmp_ctx, 0, sizeof(tmp_ctx)); -+ } -+ -+ if (!json_gen_init(&g, ctx)) { -+ *err = safe_strdup("Json_gen init failed"); -+ goto out; -+ } -+ if (yajl_gen_status_ok != gen_logger_json_file(g, ptr, ctx, err)) { -+ if (*err == NULL) -+ *err = safe_strdup("Failed to generate json"); -+ goto free_out; -+ } -+ yajl_gen_get_buf(g, &gen_buf, &gen_len); -+ if (gen_buf == NULL) { -+ *err = safe_strdup("Error to get generated json"); -+ goto free_out; -+ } -+ -+ if (gen_len == SIZE_MAX) { -+ *err = safe_strdup("Invalid buffer length"); -+ goto free_out; -+ } -+ json_buf = safe_malloc(gen_len + 1); -+ (void)memcpy(json_buf, gen_buf, gen_len); -+ json_buf[gen_len] = '\0'; -+ -+free_out: -+ yajl_gen_clear(g); -+ yajl_gen_free(g); -+out: -+ return json_buf; -+} -diff --git a/src/lxc/json/logger_json_file.h b/src/lxc/json/logger_json_file.h -new file mode 100644 -index 0000000..ad5af7b ---- /dev/null -+++ b/src/lxc/json/logger_json_file.h -@@ -0,0 +1,45 @@ -+// Generated from json-file.json. Do not edit! -+#ifndef LOGGER_JSON_FILE_SCHEMA_H -+#define LOGGER_JSON_FILE_SCHEMA_H -+ -+#include -+#include -+#include "json_common.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+typedef struct { -+ uint8_t *log; -+ size_t log_len; -+ -+ char *stream; -+ -+ char *time; -+ -+ uint8_t *attrs; -+ size_t attrs_len; -+ -+} -+logger_json_file; -+ -+void free_logger_json_file(logger_json_file *ptr); -+ -+logger_json_file *make_logger_json_file(yajl_val tree, struct parser_context *ctx, parser_error *err); -+ -+yajl_gen_status gen_logger_json_file(yajl_gen g, logger_json_file *ptr, struct parser_context *ctx, parser_error *err); -+ -+logger_json_file *logger_json_file_parse_file(const char *filename, struct parser_context *ctx, parser_error *err); -+ -+logger_json_file *logger_json_file_parse_file_stream(FILE *stream, struct parser_context *ctx, parser_error *err); -+ -+logger_json_file *logger_json_file_parse_data(const char *jsondata, struct parser_context *ctx, parser_error *err); -+ -+char *logger_json_file_generate_json(logger_json_file *ptr, struct parser_context *ctx, parser_error *err); -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -diff --git a/src/lxc/json/oci_runtime_hooks.c b/src/lxc/json/oci_runtime_hooks.c -new file mode 100644 -index 0000000..41ddb67 ---- /dev/null -+++ b/src/lxc/json/oci_runtime_hooks.c -@@ -0,0 +1,52 @@ -+/****************************************************************************** -+ * Copyright (C), 1988-1999, Huawei Tech. Co., Ltd. -+ * FileName: oci_runtime_hooks.c -+ * Author: maoweiyong Version: 0.1 Date: 2018-11-07 -+ * Explanation: provide oci runtime hooks functions -+ ******************************************************************************/ -+#ifndef _GNU_SOURCE -+#define _GNU_SOURCE -+#endif -+#include -+#include "oci_runtime_hooks.h" -+ -+#include "log.h" -+#include "utils.h" -+ -+#define PARSE_ERR_BUFFER_SIZE 1024 -+ -+oci_runtime_spec_hooks *oci_runtime_spec_hooks_parse_file(const char *filename, -+ struct parser_context *ctx, parser_error *err) -+{ -+ yajl_val tree; -+ size_t filesize; -+ -+ if (!filename || !err) { -+ return NULL; -+ } -+ *err = NULL; -+ struct parser_context tmp_ctx; -+ if (!ctx) { -+ ctx = &tmp_ctx; -+ memset(&tmp_ctx, 0, sizeof(tmp_ctx)); -+ } -+ char *content = read_file(filename, &filesize); -+ char errbuf[PARSE_ERR_BUFFER_SIZE]; -+ if (content == NULL) { -+ if (asprintf(err, "cannot read the file: %s", filename) < 0) { -+ *err = safe_strdup("error allocating memory"); -+ } -+ return NULL; -+ } -+ tree = yajl_tree_parse(content, errbuf, sizeof(errbuf)); -+ free(content); -+ if (tree == NULL) { -+ if (asprintf(err, "cannot parse the file: %s", errbuf) < 0) { -+ *err = safe_strdup("error allocating memory"); -+ } -+ return NULL; -+ } -+ oci_runtime_spec_hooks *ptr = make_oci_runtime_spec_hooks(tree, ctx, err); -+ yajl_tree_free(tree); -+ return ptr; -+} -diff --git a/src/lxc/json/oci_runtime_hooks.h b/src/lxc/json/oci_runtime_hooks.h -new file mode 100644 -index 0000000..bf570c9 ---- /dev/null -+++ b/src/lxc/json/oci_runtime_hooks.h -@@ -0,0 +1,15 @@ -+/****************************************************************************** -+ * Copyright (C), 1988-1999, Huawei Tech. Co., Ltd. -+ * FileName: oci_runtime_hooks.h -+ * Author: tanyifeng Version: 0.1 Date: 2018-11-08 -+ * Explanation: provide container oci runtime hooks function definition -+ ******************************************************************************/ -+#ifndef _CONTAINER_HOOKS_H -+# define _CONTAINER_HOOKS_H -+ -+# include "oci_runtime_spec.h" -+ -+oci_runtime_spec_hooks *oci_runtime_spec_hooks_parse_file(const char *filename, -+ struct parser_context *ctx, parser_error *err); -+ -+#endif -diff --git a/src/lxc/json/oci_runtime_spec.c b/src/lxc/json/oci_runtime_spec.c -new file mode 100644 -index 0000000..fd342de ---- /dev/null -+++ b/src/lxc/json/oci_runtime_spec.c -@@ -0,0 +1,195 @@ -+// Generated from spec.json. Do not edit! -+#ifndef _GNU_SOURCE -+#define _GNU_SOURCE -+#endif -+#include -+#include -+#include "oci_runtime_spec.h" -+ -+oci_runtime_spec_hooks *make_oci_runtime_spec_hooks(yajl_val tree, struct parser_context *ctx, parser_error *err) { -+ oci_runtime_spec_hooks *ret = NULL; -+ *err = 0; -+ if (tree == NULL) -+ return ret; -+ ret = safe_malloc(sizeof(*ret)); -+ { -+ yajl_val tmp = get_val(tree, "prestart", yajl_t_array); -+ if (tmp != NULL && YAJL_GET_ARRAY(tmp) != NULL && YAJL_GET_ARRAY(tmp)->len > 0) { -+ size_t i; -+ ret->prestart_len = YAJL_GET_ARRAY(tmp)->len; -+ ret->prestart = safe_malloc((YAJL_GET_ARRAY(tmp)->len + 1) * sizeof(*ret->prestart)); -+ for (i = 0; i < YAJL_GET_ARRAY(tmp)->len; i++) { -+ yajl_val val = YAJL_GET_ARRAY(tmp)->values[i]; -+ ret->prestart[i] = make_defs_hook(val, ctx, err); -+ if (ret->prestart[i] == NULL) { -+ free_oci_runtime_spec_hooks(ret); -+ return NULL; -+ } -+ } -+ } -+ } -+ { -+ yajl_val tmp = get_val(tree, "poststart", yajl_t_array); -+ if (tmp != NULL && YAJL_GET_ARRAY(tmp) != NULL && YAJL_GET_ARRAY(tmp)->len > 0) { -+ size_t i; -+ ret->poststart_len = YAJL_GET_ARRAY(tmp)->len; -+ ret->poststart = safe_malloc((YAJL_GET_ARRAY(tmp)->len + 1) * sizeof(*ret->poststart)); -+ for (i = 0; i < YAJL_GET_ARRAY(tmp)->len; i++) { -+ yajl_val val = YAJL_GET_ARRAY(tmp)->values[i]; -+ ret->poststart[i] = make_defs_hook(val, ctx, err); -+ if (ret->poststart[i] == NULL) { -+ free_oci_runtime_spec_hooks(ret); -+ return NULL; -+ } -+ } -+ } -+ } -+ { -+ yajl_val tmp = get_val(tree, "poststop", yajl_t_array); -+ if (tmp != NULL && YAJL_GET_ARRAY(tmp) != NULL && YAJL_GET_ARRAY(tmp)->len > 0) { -+ size_t i; -+ ret->poststop_len = YAJL_GET_ARRAY(tmp)->len; -+ ret->poststop = safe_malloc((YAJL_GET_ARRAY(tmp)->len + 1) * sizeof(*ret->poststop)); -+ for (i = 0; i < YAJL_GET_ARRAY(tmp)->len; i++) { -+ yajl_val val = YAJL_GET_ARRAY(tmp)->values[i]; -+ ret->poststop[i] = make_defs_hook(val, ctx, err); -+ if (ret->poststop[i] == NULL) { -+ free_oci_runtime_spec_hooks(ret); -+ return NULL; -+ } -+ } -+ } -+ } -+ -+ if (tree->type == yajl_t_object && (ctx->options & PARSE_OPTIONS_STRICT)) { -+ int i; -+ for (i = 0; i < tree->u.object.len; i++) -+ if (strcmp(tree->u.object.keys[i], "prestart") && -+ strcmp(tree->u.object.keys[i], "poststart") && -+ strcmp(tree->u.object.keys[i], "poststop")) { -+ if (ctx->stderr > 0) -+ fprintf(ctx->stderr, "WARNING: unknown key found: %s\n", tree->u.object.keys[i]); -+ } -+ } -+ return ret; -+} -+ -+void free_oci_runtime_spec_hooks(oci_runtime_spec_hooks *ptr) { -+ if (ptr == NULL) -+ return; -+ if (ptr->prestart != NULL) { -+ size_t i; -+ for (i = 0; i < ptr->prestart_len; i++) -+ if (ptr->prestart[i] != NULL) { -+ free_defs_hook(ptr->prestart[i]); -+ ptr->prestart[i] = NULL; -+ } -+ free(ptr->prestart); -+ ptr->prestart = NULL; -+ } -+ if (ptr->poststart != NULL) { -+ size_t i; -+ for (i = 0; i < ptr->poststart_len; i++) -+ if (ptr->poststart[i] != NULL) { -+ free_defs_hook(ptr->poststart[i]); -+ ptr->poststart[i] = NULL; -+ } -+ free(ptr->poststart); -+ ptr->poststart = NULL; -+ } -+ if (ptr->poststop != NULL) { -+ size_t i; -+ for (i = 0; i < ptr->poststop_len; i++) -+ if (ptr->poststop[i] != NULL) { -+ free_defs_hook(ptr->poststop[i]); -+ ptr->poststop[i] = NULL; -+ } -+ free(ptr->poststop); -+ ptr->poststop = NULL; -+ } -+ free(ptr); -+} -+ -+yajl_gen_status gen_oci_runtime_spec_hooks(yajl_gen g, oci_runtime_spec_hooks *ptr, struct parser_context *ctx, parser_error *err) { -+ yajl_gen_status stat = yajl_gen_status_ok; -+ *err = 0; -+ stat = reformat_start_map(g); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr != NULL && ptr->prestart != NULL)) { -+ size_t len = 0, i; -+ stat = reformat_map_key(g, "prestart", strlen("prestart")); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (ptr != NULL && ptr->prestart != NULL) { -+ len = ptr->prestart_len; -+ } -+ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) -+ yajl_gen_config(g, yajl_gen_beautify, 0); -+ stat = reformat_start_array(g); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ for (i = 0; i < len; i++) { -+ stat = gen_defs_hook(g, ptr->prestart[i], ctx, err); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ stat = reformat_end_array(g); -+ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) -+ yajl_gen_config(g, yajl_gen_beautify, 1); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr != NULL && ptr->poststart != NULL)) { -+ size_t len = 0, i; -+ stat = reformat_map_key(g, "poststart", strlen("poststart")); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (ptr != NULL && ptr->poststart != NULL) { -+ len = ptr->poststart_len; -+ } -+ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) -+ yajl_gen_config(g, yajl_gen_beautify, 0); -+ stat = reformat_start_array(g); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ for (i = 0; i < len; i++) { -+ stat = gen_defs_hook(g, ptr->poststart[i], ctx, err); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ stat = reformat_end_array(g); -+ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) -+ yajl_gen_config(g, yajl_gen_beautify, 1); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr != NULL && ptr->poststop != NULL)) { -+ size_t len = 0, i; -+ stat = reformat_map_key(g, "poststop", strlen("poststop")); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (ptr != NULL && ptr->poststop != NULL) { -+ len = ptr->poststop_len; -+ } -+ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) -+ yajl_gen_config(g, yajl_gen_beautify, 0); -+ stat = reformat_start_array(g); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ for (i = 0; i < len; i++) { -+ stat = gen_defs_hook(g, ptr->poststop[i], ctx, err); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ stat = reformat_end_array(g); -+ if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) -+ yajl_gen_config(g, yajl_gen_beautify, 1); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ stat = reformat_end_map(g); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ return yajl_gen_status_ok; -+} -diff --git a/src/lxc/json/oci_runtime_spec.h b/src/lxc/json/oci_runtime_spec.h -new file mode 100644 -index 0000000..ef3f161 ---- /dev/null -+++ b/src/lxc/json/oci_runtime_spec.h -@@ -0,0 +1,37 @@ -+// Generated from spec.json. Do not edit! -+#ifndef OCI_RUNTIME_SPEC_SCHEMA_H -+#define OCI_RUNTIME_SPEC_SCHEMA_H -+ -+#include -+#include -+#include "json_common.h" -+#include "defs.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+typedef struct { -+ defs_hook **prestart; -+ size_t prestart_len; -+ -+ defs_hook **poststart; -+ size_t poststart_len; -+ -+ defs_hook **poststop; -+ size_t poststop_len; -+ -+} -+oci_runtime_spec_hooks; -+ -+void free_oci_runtime_spec_hooks(oci_runtime_spec_hooks *ptr); -+ -+oci_runtime_spec_hooks *make_oci_runtime_spec_hooks(yajl_val tree, struct parser_context *ctx, parser_error *err); -+ -+yajl_gen_status gen_oci_runtime_spec_hooks(yajl_gen g, oci_runtime_spec_hooks *ptr, struct parser_context *ctx, parser_error *err); -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -diff --git a/src/lxc/json/read-file.c b/src/lxc/json/read-file.c -new file mode 100644 -index 0000000..70e73e5 ---- /dev/null -+++ b/src/lxc/json/read-file.c -@@ -0,0 +1,95 @@ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include "read-file.h" -+ -+#ifndef O_CLOEXEC -+#define O_CLOEXEC 02000000 -+#endif -+ -+char *fread_file(FILE *stream, size_t *length) -+{ -+ char *buf = NULL, *tmpbuf = NULL; -+ size_t off = 0; -+ -+ while (1) { -+ size_t ret, newsize; -+ -+ newsize = off + BUFSIZ + 1; -+ tmpbuf = (char *)calloc(1, newsize); -+ if (tmpbuf == NULL) { -+ goto out; -+ } -+ -+ if (buf) { -+ memcpy(tmpbuf, buf, off); -+ -+ memset(buf, 0, off); -+ -+ free(buf); -+ } -+ -+ buf = tmpbuf; -+ ret = fread(buf + off, 1, BUFSIZ, stream); -+ if (!ret && ferror(stream)) { -+ tmpbuf = NULL; -+ goto out; -+ } -+ if (ret < BUFSIZ || feof(stream)) { -+ *length = off + ret + 1; -+ buf[*length - 1] = '\0'; -+ return buf; -+ } -+ off += BUFSIZ; -+ } -+out: -+ if (buf) { -+ free(buf); -+ } -+ if (tmpbuf) { -+ free(tmpbuf); -+ } -+ return NULL; -+ -+} -+ -+char *read_file(const char *path, size_t *length) -+{ -+ char *buf = NULL; -+ char rpath[PATH_MAX + 1] = {0}; -+ int fd = -1; -+ int tmperrno; -+ FILE *fp = NULL; -+ -+ if (!path || !length) { -+ return NULL; -+ } -+ -+ if (strlen(path) > PATH_MAX || NULL == realpath(path, rpath)) { -+ return NULL; -+ } -+ -+ fd = open(rpath, O_RDONLY | O_CLOEXEC, 0640); -+ if (fd < 0) { -+ return NULL; -+ } -+ -+ fp = fdopen(fd, "r"); -+ tmperrno = errno; -+ if (!fp) { -+ close(fd); -+ errno = tmperrno; -+ return NULL; -+ } -+ -+ buf = fread_file(fp, length); -+ fclose(fp); -+ return buf; -+} -diff --git a/src/lxc/json/read-file.h b/src/lxc/json/read-file.h -new file mode 100644 -index 0000000..5d6e0eb ---- /dev/null -+++ b/src/lxc/json/read-file.h -@@ -0,0 +1,11 @@ -+#ifndef READ_FILE_H -+#define READ_FILE_H -+ -+#include -+#include -+ -+extern char *fread_file(FILE *stream, size_t *length); -+ -+extern char *read_file(const char *path, size_t *length); -+ -+#endif -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 33bb3ec..891fc62 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -5294,6 +5294,41 @@ static int do_lxcapi_seccomp_notify_fd(struct lxc_container *c) - WRAP_API(int, lxcapi_seccomp_notify_fd) - - #ifdef HAVE_ISULAD -+/* isulad add set console fifos*/ -+static bool do_lxcapi_set_terminal_default_fifos(struct lxc_container *c, const char *in, const char *out, const char *err) -+{ -+ struct lxc_conf *conf = NULL; -+ -+ if (!c || !c->lxc_conf) -+ return false; -+ if (container_mem_lock(c)) { -+ ERROR("Error getting mem lock"); -+ return false; -+ } -+ -+ conf = c->lxc_conf; -+ if (in) { -+ if (conf->console.init_fifo[0]) -+ free(conf->console.init_fifo[0]); -+ conf->console.init_fifo[0] = safe_strdup(in); -+ } -+ if (out) { -+ if (conf->console.init_fifo[1]) -+ free(conf->console.init_fifo[1]); -+ conf->console.init_fifo[1] = safe_strdup(out); -+ } -+ if (err) { -+ if (conf->console.init_fifo[2]) -+ free(conf->console.init_fifo[2]); -+ conf->console.init_fifo[2] = safe_strdup(err); -+ } -+ -+ container_mem_unlock(c); -+ return true; -+} -+ -+WRAP_API_3(bool, lxcapi_set_terminal_default_fifos, const char *, const char *, const char *) -+ - /* isulad add set info file path */ - static bool do_lxcapi_set_container_info_file(struct lxc_container *c, const char *info_file) - { -@@ -5461,6 +5496,7 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath - c->seccomp_notify_fd = lxcapi_seccomp_notify_fd; - #ifdef HAVE_ISULAD - c->set_container_info_file = lxcapi_set_container_info_file; -+ c->set_terminal_init_fifos = lxcapi_set_terminal_default_fifos; - #endif - return c; - -diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index edfff32..4a9ba13 100644 ---- a/src/lxc/lxccontainer.h -+++ b/src/lxc/lxccontainer.h -@@ -876,6 +876,30 @@ struct lxc_container { - * \return \c true on success, else \c false. - */ - bool (*set_container_info_file) (struct lxc_container *c, const char *info_file); -+ -+ /*! isulad add -+ * \brief An API call to change the path of the console default fifos -+ * -+ * \param c Container. -+ * \param path Value of the console path. -+ * -+ * \return \c true on success, else \c false. -+ */ -+ bool (*set_terminal_init_fifos)(struct lxc_container *c, const char *in, const char *out, const char *err); -+ -+ /*! isulad add -+ * \brief An API call to add the path of terminal fifos -+ * -+ * \param c Container. -+ * \param path Value of the console path.. -+ * -+ * \return \c true on success, else \c false. -+ */ -+ bool (*add_terminal_fifos)(struct lxc_container *c, const char *in, const char *out, const char *err); -+ -+ bool (*set_terminal_winch)(struct lxc_container *c, unsigned int height, unsigned int width); -+ -+ bool (*set_exec_terminal_winch)(struct lxc_container *c, const char *suffix, unsigned int height, unsigned int width); - #endif - }; - -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 1b170ca..c8cd83f 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -28,6 +28,9 @@ - #include "syscall_wrappers.h" - #include "terminal.h" - #include "utils.h" -+#ifdef HAVE_ISULAD -+#include "logger_json_file.h" -+#endif - - #if HAVE_PTY_H - #include -@@ -318,6 +321,426 @@ static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, char *buf, - return bytes_read; - } - -+#ifdef HAVE_ISULAD -+/* get time buffer */ -+static bool get_time_buffer(struct timespec *timestamp, char *timebuffer, -+ size_t maxsize) -+{ -+ struct tm tm_utc = { 0 }; -+ int32_t nanos = 0; -+ time_t seconds; -+ size_t len = 0; -+ int ret = 0; -+ -+ if (!timebuffer || !maxsize) { -+ return false; -+ } -+ -+ seconds = (time_t)timestamp->tv_sec; -+ gmtime_r(&seconds, &tm_utc); -+ strftime(timebuffer, maxsize, "%Y-%m-%dT%H:%M:%S", &tm_utc); -+ -+ nanos = (int32_t)timestamp->tv_nsec; -+ len = strlen(timebuffer); -+ ret = snprintf(timebuffer + len, (maxsize - len), ".%09dZ", nanos); -+ if (ret < 0 || ret >= (maxsize - len)) { -+ return false; -+ } -+ -+ return true; -+} -+ -+/* get now time buffer */ -+static bool get_now_time_buffer(char *timebuffer, size_t maxsize) -+{ -+ int err = 0; -+ struct timespec ts; -+ -+ err = clock_gettime(CLOCK_REALTIME, &ts); -+ if (err != 0) { -+ ERROR("failed to get time"); -+ return false; -+ } -+ -+ return get_time_buffer(&ts, timebuffer, maxsize); -+} -+ -+static int isulad_lxc_terminal_rotate_write_data(struct lxc_terminal *terminal, const char *buf, -+ int bytes_read) -+{ -+ int ret; -+ struct stat st; -+ int64_t space_left = -1; -+ -+ if (terminal->log_fd < 0) -+ return 0; -+ -+ /* A log size <= 0 means that there's no limit on the size of the log -+ * file at which point we simply ignore whether the log is supposed to -+ * be rotated or not. -+ */ -+ if (terminal->log_size <= 0) -+ return lxc_write_nointr(terminal->log_fd, buf, bytes_read); -+ -+ /* Get current size of the log file. */ -+ ret = fstat(terminal->log_fd, &st); -+ if (ret < 0) { -+ SYSERROR("Failed to stat the terminal log file descriptor"); -+ return -1; -+ } -+ -+ /* handle non-regular files */ -+ if ((st.st_mode & S_IFMT) != S_IFREG) { -+ /* This isn't a regular file. so rotating the file seems a -+ * dangerous thing to do, size limits are also very -+ * questionable. Let's not risk anything and tell the user that -+ * he's requesting us to do weird stuff. -+ */ -+ if (terminal->log_rotate > 0 || terminal->log_size > 0) -+ return -EINVAL; -+ -+ /* I mean, sure log wherever you want to. */ -+ return lxc_write_nointr(terminal->log_fd, buf, bytes_read); -+ } -+ -+ space_left = terminal->log_size - st.st_size; -+ -+ /* User doesn't want to rotate the log file and there's no more space -+ * left so simply truncate it. -+ */ -+ if (space_left <= 0 && terminal->log_rotate <= 0) { -+ ret = lxc_terminal_truncate_log_file(terminal); -+ if (ret < 0) -+ return ret; -+ -+ if (bytes_read <= terminal->log_size) -+ return lxc_write_nointr(terminal->log_fd, buf, bytes_read); -+ -+ /* Write as much as we can into the buffer and loose the rest. */ -+ return lxc_write_nointr(terminal->log_fd, buf, terminal->log_size); -+ } -+ -+ /* There's enough space left. */ -+ if (bytes_read <= space_left) -+ return lxc_write_nointr(terminal->log_fd, buf, bytes_read); -+ -+ /* There'd be more to write but we aren't instructed to rotate the log -+ * file so simply return. There's no error on our side here. -+ */ -+ if (terminal->log_rotate > 0) -+ ret = lxc_terminal_rotate_log_file(terminal); -+ else -+ ret = lxc_terminal_truncate_log_file(terminal); -+ if (ret < 0) -+ return ret; -+ -+ if (terminal->log_size < bytes_read) { -+ /* Well, this is unfortunate because it means that there is more -+ * to write than the user has granted us space. There are -+ * multiple ways to handle this but let's use the simplest one: -+ * write as much as we can, tell the user that there was more -+ * stuff to write and move on. -+ * Note that this scenario shouldn't actually happen with the -+ * standard pty-based terminal that LXC allocates since it will -+ * be switched into raw mode. In raw mode only 1 byte at a time -+ * should be read and written. -+ */ -+ WARN("Size of terminal log file is smaller than the bytes to write"); -+ ret = lxc_write_nointr(terminal->log_fd, buf, terminal->log_size); -+ if (ret < 0) -+ return -1; -+ bytes_read -= ret; -+ return bytes_read; -+ } -+ -+ /* Yay, we made it. */ -+ ret = lxc_write_nointr(terminal->log_fd, buf, bytes_read); -+ if (ret < 0) -+ return -1; -+ bytes_read -= ret; -+ return bytes_read; -+} -+ -+static ssize_t isulad_logger_write(struct lxc_terminal *terminal, const char *type, const char *buf, -+ int bytes_read) -+{ -+ logger_json_file *msg = NULL; -+ ssize_t ret = -1; -+ size_t len; -+ char *json = NULL; -+ char timebuffer[64] = { 0 }; -+ parser_error err = NULL; -+ struct parser_context ctx = { GEN_OPTIONS_SIMPLIFY | GEN_OPTIONS_NOT_VALIDATE_UTF8, stderr }; -+ -+ if (bytes_read < 0 || bytes_read >= INT_MAX) { -+ return -1; -+ } -+ msg = calloc(sizeof(logger_json_file), 1); -+ if (msg == NULL) { -+ return -errno; -+ } -+ msg->log = calloc(bytes_read, 1); -+ if (!msg->log) { -+ goto cleanup; -+ } -+ memcpy(msg->log, buf, bytes_read); -+ msg->log_len = bytes_read; -+ msg->stream = type ? safe_strdup(type) : safe_strdup("stdout"); -+ -+ get_now_time_buffer(timebuffer, sizeof(timebuffer)); -+ msg->time = safe_strdup(timebuffer); -+ -+ json = logger_json_file_generate_json(msg, &ctx, &err); -+ if (!json) { -+ ERROR("Failed to generate json: %s", err); -+ goto cleanup; -+ } -+ len = strlen(json); -+ json[len] = '\n'; -+ ret = isulad_lxc_terminal_rotate_write_data(terminal, json, len + 1); -+cleanup: -+ free(json); -+ free_logger_json_file(msg); -+ free(err); -+ return ret; -+} -+ -+static int isulad_lxc_terminal_write_log_file(struct lxc_terminal *terminal, const char *type, char *buf, -+ int bytes_read) -+{ -+#define __BUF_CACHE_SIZE (16 * LXC_TERMINAL_BUFFER_SIZE) -+ static char cache[__BUF_CACHE_SIZE]; -+ static int size = 0; -+ int upto, index; -+ int begin = 0, buf_readed = 0, buf_left = 0; -+ int ret; -+ -+ if (buf != NULL && bytes_read > 0) { -+ /* Work out how much more data we are okay with reading this time. */ -+ upto = size + bytes_read; -+ if (upto > __BUF_CACHE_SIZE) { -+ upto = __BUF_CACHE_SIZE; -+ } -+ -+ if (upto > size) { -+ buf_readed = upto - size; -+ memcpy(cache + size, buf, buf_readed); -+ buf_left = bytes_read - buf_readed; -+ size += buf_readed; -+ } -+ } -+ -+ // If we have no data to log, and there's no more coming, we're done. -+ if (size == 0) -+ return 0; -+ -+ // Break up the data that we've buffered up into lines, and log each in turn. -+ for (index = 0; index < size; index++) { -+ if (cache[index] == '\n') { -+ ret = isulad_logger_write(terminal, type, cache + begin, index - begin + 1); -+ if (ret < 0) { -+ WARN("Failed to log msg"); -+ } -+ begin = index + 1; -+ } -+ } -+ /* If there's no more coming, or the buffer is full but -+ * has no newlines, log whatever we haven't logged yet, -+ * noting that it's a partial log line. */ -+ if (buf == NULL || (begin == 0 && size == __BUF_CACHE_SIZE)) { -+ if (begin < size) { -+ ret = isulad_logger_write(terminal, type, cache + begin, size - begin); -+ if (ret < 0) { -+ WARN("Failed to log msg"); -+ } -+ begin = 0; -+ size = 0; -+ } -+ if (buf == NULL) { -+ return 0; -+ } -+ } -+ /* Move any unlogged data to the front of the buffer in preparation for another read. */ -+ if (begin > 0) { -+ memcpy(cache, cache + begin, size - begin); -+ size -= begin; -+ } -+ /* Move left data to cache buffer */ -+ if (buf_left > 0) { -+ memcpy(cache + size, buf + buf_readed, buf_left); -+ size += buf_left; -+ } -+ return 0; -+} -+ -+/* isulad: forward data to all fifos */ -+static void lxc_forward_data_to_fifo(struct lxc_list *list, bool is_err, const char *buf, int r) -+{ -+ struct lxc_list *it = NULL; -+ struct lxc_list *next = NULL; -+ struct lxc_fifos_fd *elem = NULL; -+ -+ lxc_list_for_each_safe(it, list, next) { -+ elem = it->elem; -+ if (is_err) { -+ if (elem->err_fd >= 0) -+ lxc_write_nointr(elem->err_fd, buf, r); -+ } else { -+ if (elem->out_fd >= 0) -+ lxc_write_nointr(elem->out_fd, buf, r); -+ } -+ } -+ -+ return; -+} -+ -+/* isulad: judge the fd whether is fifo */ -+static bool lxc_terminal_is_fifo(int fd, struct lxc_list *list) -+{ -+ struct lxc_list *it = NULL; -+ struct lxc_list *next = NULL; -+ struct lxc_fifos_fd *elem = NULL; -+ -+ lxc_list_for_each_safe(it, list, next) { -+ elem = it->elem; -+ if (elem->in_fd == fd) -+ return true; -+ } -+ -+ return false; -+} -+ -+/* isulad: if fd == -1, means delete all the fifos*/ -+int lxc_terminal_delete_fifo(int fd, struct lxc_list *list) -+{ -+ struct lxc_list *it = NULL; -+ struct lxc_list *next = NULL; -+ struct lxc_fifos_fd *elem = NULL; -+ -+ lxc_list_for_each_safe(it, list, next) { -+ elem = it->elem; -+ if (elem->in_fd == fd || -1 == fd) { -+ INFO("Delete fifo fd %d", fd); -+ lxc_list_del(it); -+ if (elem->in_fifo) -+ free(elem->in_fifo); -+ if (elem->out_fifo) -+ free(elem->out_fifo); -+ if (elem->err_fifo) -+ free(elem->err_fifo); -+ if (elem->in_fd >= 0) -+ close(elem->in_fd); -+ if (elem->out_fd >= 0) -+ close(elem->out_fd); -+ if (elem->err_fd >= 0) -+ close(elem->err_fd); -+ free(elem); -+ } -+ } -+ -+ return 0; -+} -+ -+int lxc_terminal_io_cb(int fd, uint32_t events, void *data, -+ struct lxc_epoll_descr *descr) -+{ -+ struct lxc_terminal *terminal = data; -+ char buf[2 * LXC_TERMINAL_BUFFER_SIZE]; -+ int r, w, w_log, w_rbuf; -+ -+ w = r = lxc_read_nointr(fd, buf, sizeof(buf)); -+ if (r <= 0) { -+ INFO("Terminal client on fd %d has exited", fd); -+ lxc_mainloop_del_handler(descr, fd); -+ -+ if (fd == terminal->master) { -+ terminal->master = -EBADF; -+ /* write remained buffer to terminal log */ -+ if (terminal->log_fd >= 0) { -+ w_log = isulad_lxc_terminal_write_log_file(terminal, "stdout", NULL, 0); -+ if (w_log < 0) -+ TRACE("Failed to write %d bytes to terminal log", r); -+ } -+ /* notes: do not close the master fd due to if we close the fd, the process may -+ * recive SIGHUP and the exit code will be 129 (128 + 1) -+ */ -+ return LXC_MAINLOOP_CLOSE; -+ } else if (fd == terminal->peer) { -+ lxc_terminal_signal_fini(terminal); -+ terminal->peer = -EBADF; -+ close(fd); -+ return LXC_MAINLOOP_CONTINUE; /* isulad: do not close mainloop when peer close*/ -+ } else if (lxc_terminal_is_fifo(fd, &terminal->fifos)) { -+ /* isulad: delete fifos when the client close */ -+ lxc_terminal_delete_fifo(fd, &terminal->fifos); -+ return LXC_MAINLOOP_CONTINUE; -+ } else if (fd == terminal->pipes[1][0] || fd == terminal->pipes[2][0]) { -+ if (fd == terminal->pipes[1][0]) { -+ w_log = isulad_lxc_terminal_write_log_file(terminal, "stdout", NULL, 0); -+ terminal->pipes[1][0] = -EBADF; -+ } else if (fd == terminal->pipes[2][0]) { -+ w_log = isulad_lxc_terminal_write_log_file(terminal, "stderr", NULL, 0); -+ terminal->pipes[2][0] = -EBADF; -+ } -+ if (w_log < 0) -+ TRACE("Failed to write %d bytes to terminal log", r); -+ close(fd); -+ return LXC_MAINLOOP_CONTINUE; -+ } else if (fd == terminal->pipes[0][1]) { -+ TRACE("closed stdin pipe of container stdin"); -+ terminal->pipes[0][1] = -EBADF; -+ close(fd); -+ return LXC_MAINLOOP_CONTINUE; -+ } else { -+ ERROR("Handler received unexpected file descriptor"); -+ } -+ close(fd); -+ return LXC_MAINLOOP_CLOSE; -+ } -+ -+ if (fd == terminal->peer || lxc_terminal_is_fifo(fd, &terminal->fifos)) { -+ if (terminal->master > 0) -+ w = lxc_write_nointr(terminal->master, buf, r); -+ if (terminal->pipes[0][1] > 0) -+ w = lxc_write_nointr(terminal->pipes[0][1], buf, r); -+ } -+ -+ w_rbuf = w_log = 0; -+ if (fd == terminal->master || fd == terminal->pipes[1][0] || fd == terminal->pipes[2][0]) { -+ /* write to peer first */ -+ if (terminal->peer >= 0) -+ w = lxc_write_nointr(terminal->peer, buf, r); -+ -+ /* isulad: forward data to fifos */ -+ lxc_forward_data_to_fifo(&terminal->fifos, fd == terminal->pipes[2][0], buf, r); -+ -+ /* write to terminal ringbuffer */ -+ if (terminal->buffer_size > 0) -+ w_rbuf = lxc_ringbuf_write(&terminal->ringbuf, buf, r); -+ -+ /* write to terminal log */ -+ if (terminal->log_fd >= 0) { -+ if (fd == terminal->master || fd == terminal->pipes[1][0]) -+ w_log = isulad_lxc_terminal_write_log_file(terminal, "stdout", buf, r); -+ else if (fd == terminal->pipes[2][0]) -+ w_log = isulad_lxc_terminal_write_log_file(terminal, "stderr", buf, r); -+ } -+ } -+ -+ if (w != r) -+ WARN("Short write on terminal r:%d != w:%d", r, w); -+ -+ if (w_rbuf < 0) { -+ errno = -w_rbuf; -+ SYSTRACE("Failed to write %d bytes to terminal ringbuffer", r); -+ } -+ -+ if (w_log < 0) -+ TRACE("Failed to write %d bytes to terminal log", r); -+ -+ return LXC_MAINLOOP_CONTINUE; -+} -+#else - int lxc_terminal_io_cb(int fd, uint32_t events, void *data, - struct lxc_epoll_descr *descr) - { -@@ -374,6 +797,7 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data, - - return LXC_MAINLOOP_CONTINUE; - } -+#endif - - static int lxc_terminal_mainloop_add_peer(struct lxc_terminal *terminal) - { -@@ -401,6 +825,110 @@ static int lxc_terminal_mainloop_add_peer(struct lxc_terminal *terminal) - return 0; - } - -+#ifdef HAVE_ISULAD -+/* isulad add pipes to mainloop */ -+static int lxc_terminal_mainloop_add_pipes(struct lxc_terminal *terminal) -+{ -+ int ret = 0; -+ -+ // parent read data from fifo, and send to stdin of container -+ if (terminal->pipes[0][1] > 0) { -+ ret = lxc_mainloop_add_handler(terminal->descr, terminal->pipes[0][1], -+ lxc_terminal_io_cb, terminal); -+ if (ret) { -+ ERROR("pipe fd %d not added to mainloop", terminal->pipes[0][1]); -+ return -1; -+ } -+ } -+ // parent read data from stdout of container, and send to fifo -+ if (terminal->pipes[1][0] > 0) { -+ ret = lxc_mainloop_add_handler(terminal->descr, terminal->pipes[1][0], -+ lxc_terminal_io_cb, terminal); -+ if (ret) { -+ ERROR("pipe fd %d not added to mainloop", terminal->pipes[1][0]); -+ return -1; -+ } -+ } -+ // parent read data from stderr of container, and send to fifo -+ if (terminal->pipes[2][0] > 0) { -+ ret = lxc_mainloop_add_handler(terminal->descr, terminal->pipes[2][0], -+ lxc_terminal_io_cb, terminal); -+ if (ret) { -+ ERROR("pipe fd %d not added to mainloop", terminal->pipes[2][0]); -+ return -1; -+ } -+ } -+ return ret; -+} -+ -+/* isulad add fifo to mainloop */ -+static int lxc_terminal_mainloop_add_fifo(struct lxc_terminal *terminal) -+{ -+ int ret = 0; -+ struct lxc_list *it = NULL; -+ struct lxc_list *next = NULL; -+ struct lxc_fifos_fd *elem = NULL; -+ -+ lxc_list_for_each_safe(it, &terminal->fifos, next) { -+ elem = it->elem; -+ if (elem->in_fd >= 0) { -+ ret = lxc_mainloop_add_handler(terminal->descr, elem->in_fd, -+ lxc_terminal_io_cb, terminal); -+ if (ret) { -+ ERROR("console fifo %s not added to mainloop", elem->in_fifo); -+ return -1; -+ } -+ } -+ } -+ return ret; -+} -+ -+int lxc_terminal_mainloop_add(struct lxc_epoll_descr *descr, -+ struct lxc_terminal *terminal) -+{ -+ int ret; -+ -+ /* We cache the descr so that we can add an fd to it when someone -+ * does attach to it in lxc_terminal_allocate(). -+ */ -+ terminal->descr = descr; -+ -+ ret = lxc_terminal_mainloop_add_peer(terminal); -+ if (ret < 0) { -+ ERROR("Failed to add handler for terminal peer to mainloop"); -+ return -1; -+ } -+ -+ /* isulad add pipes to mainloop */ -+ ret = lxc_terminal_mainloop_add_pipes(terminal); -+ if (ret < 0) { -+ ERROR("Failed to add handler for terminal fifos to mainloop"); -+ return -1; -+ } -+ -+ /* isulad add fifo to mainloop */ -+ ret = lxc_terminal_mainloop_add_fifo(terminal); -+ if (ret < 0) { -+ ERROR("Failed to add handler for terminal fifos to mainloop"); -+ return -1; -+ } -+ -+ if (terminal->master < 0) { -+ INFO("Terminal is not initialized"); -+ return 0; -+ } -+ -+ ret = lxc_mainloop_add_handler(descr, terminal->master, -+ lxc_terminal_io_cb, terminal); -+ if (ret < 0) { -+ ERROR("Failed to add handler for terminal master fd %d to " -+ "mainloop", terminal->master); -+ return -1; -+ } -+ -+ return 0; -+} -+#else - int lxc_terminal_mainloop_add(struct lxc_epoll_descr *descr, - struct lxc_terminal *terminal) - { -@@ -426,6 +954,7 @@ int lxc_terminal_mainloop_add(struct lxc_epoll_descr *descr, - - return lxc_terminal_mainloop_add_peer(terminal); - } -+#endif - - int lxc_setup_tios(int fd, struct termios *oldtios) - { -@@ -760,6 +1289,31 @@ void lxc_terminal_delete(struct lxc_terminal *terminal) - if (terminal->log_fd >= 0) - close(terminal->log_fd); - terminal->log_fd = -1; -+ -+#ifdef HAVE_ISULAD -+ /* isulad: close all pipes */ -+ if (terminal->pipes[0][0] >= 0) -+ close(terminal->pipes[0][0]); -+ terminal->pipes[0][0] = -1; -+ if (terminal->pipes[0][1] >= 0) -+ close(terminal->pipes[0][1]); -+ terminal->pipes[0][1] = -1; -+ if (terminal->pipes[1][0] >= 0) -+ close(terminal->pipes[1][0]); -+ terminal->pipes[1][0] = -1; -+ if (terminal->pipes[1][1] >= 0) -+ close(terminal->pipes[1][1]); -+ terminal->pipes[1][1] = -1; -+ if (terminal->pipes[2][0] >= 0) -+ close(terminal->pipes[2][0]); -+ terminal->pipes[2][0] = -1; -+ if (terminal->pipes[2][1] >= 0) -+ close(terminal->pipes[2][1]); -+ terminal->pipes[2][1] = -1; -+ -+ /* isulad: delete all fifos */ -+ lxc_terminal_delete_fifo(-1, &terminal->fifos); -+#endif - } - - /** -@@ -828,6 +1382,215 @@ int lxc_terminal_create_log_file(struct lxc_terminal *terminal) - return 0; - } - -+#ifdef HAVE_ISULAD -+/* isulad: fd_nonblock */ -+static int fd_nonblock(int fd) -+{ -+ int flags; -+ -+ flags = fcntl(fd, F_GETFL); -+ -+ return fcntl(fd, F_SETFL, (int)((unsigned int)flags | O_NONBLOCK)); -+} -+ -+static int terminal_fifo_open(const char *fifo_path, int flags) -+{ -+ int fd = -1; -+ -+ fd = lxc_open(fifo_path, flags, 0); -+ if (fd < 0) { -+ WARN("Failed to open fifo %s to send message: %s.", fifo_path, -+ strerror(errno)); -+ return -1; -+ } -+ -+ return fd; -+} -+ -+bool fifo_exists(const char *path) -+{ -+ struct stat sb; -+ int ret; -+ -+ ret = stat(path, &sb); -+ if (ret < 0) -+ // could be something other than eexist, just say no -+ return false; -+ return S_ISFIFO(sb.st_mode); -+} -+ -+/* isulad: set terminal fifos */ -+static int lxc_terminal_set_fifo(struct lxc_terminal *console, const char *in, const char *out, const char *err, int *input_fd) -+{ -+ int fifofd_in = -1, fifofd_out = -1, fifofd_err = -1; -+ struct lxc_fifos_fd *fifo_elem = NULL; -+ -+ if ((in && !fifo_exists(in)) || (out && !fifo_exists(out)) || (err && !fifo_exists(err))) { -+ ERROR("File %s or %s or %s does not refer to a FIFO", in, out, err); -+ return -1; -+ } -+ -+ if (in) { -+ fifofd_in = terminal_fifo_open(in, O_RDONLY | O_NONBLOCK | O_CLOEXEC); -+ if (fifofd_in < 0) { -+ SYSERROR("Failed to open FIFO: %s", in); -+ return -1; -+ } -+ } -+ -+ if (out) { -+ fifofd_out = terminal_fifo_open(out, O_WRONLY | O_NONBLOCK | O_CLOEXEC); -+ if (fifofd_out < 0) { -+ SYSERROR("Failed to open FIFO: %s", out); -+ if (fifofd_in >= 0) -+ close(fifofd_in); -+ return -1; -+ } -+ } -+ -+ if (err) { -+ fifofd_err = terminal_fifo_open(err, O_WRONLY | O_NONBLOCK | O_CLOEXEC); -+ if (fifofd_err < 0) { -+ SYSERROR("Failed to open FIFO: %s", err); -+ if (fifofd_in >= 0) -+ close(fifofd_in); -+ if (fifofd_out >= 0) -+ close(fifofd_out); -+ return -1; -+ } -+ } -+ -+ fifo_elem = malloc(sizeof(*fifo_elem)); -+ if (fifo_elem == NULL) { -+ if (fifofd_in >= 0) -+ close(fifofd_in); -+ if (fifofd_out >= 0) -+ close(fifofd_out); -+ if (fifofd_err >= 0) -+ close(fifofd_err); -+ return -1; -+ } -+ memset(fifo_elem, 0, sizeof(*fifo_elem)); -+ -+ fifo_elem->in_fifo = safe_strdup(in ? in : ""); -+ fifo_elem->out_fifo = safe_strdup(out ? out : ""); -+ fifo_elem->err_fifo = safe_strdup(err ? err : ""); -+ fifo_elem->in_fd = fifofd_in; -+ fifo_elem->out_fd = fifofd_out; -+ fifo_elem->err_fd = fifofd_err; -+ lxc_list_add_elem(&fifo_elem->node, fifo_elem); -+ lxc_list_add_tail(&console->fifos, &fifo_elem->node); -+ -+ if (input_fd) -+ *input_fd = fifofd_in; -+ -+ return 0; -+} -+ -+/* isulad: add default fifos */ -+static int lxc_terminal_fifo_default(struct lxc_terminal *terminal) -+{ -+ if (terminal->init_fifo[0] || terminal->init_fifo[1] || terminal->init_fifo[2]) -+ return lxc_terminal_set_fifo(terminal, terminal->init_fifo[0], terminal->init_fifo[1], terminal->init_fifo[2], NULL); -+ return 0; -+} -+ -+static int use_unix_newline(int master_fd) -+{ -+ struct termios oldtios; -+ int ret; -+ -+ ret = tcgetattr(master_fd, &oldtios); -+ if (ret < 0) -+ return -1; -+ oldtios.c_oflag &= ~ONLCR; -+ ret = tcsetattr(master_fd, TCSAFLUSH, &oldtios); -+ if (ret < 0) -+ return -1; -+ return 0; -+} -+ -+int lxc_terminal_create(struct lxc_terminal *terminal) -+{ -+ int ret; -+ -+ if (!terminal->disable_pty) { -+ ret = openpty(&terminal->master, &terminal->slave, NULL, NULL, NULL); -+ if (ret < 0) { -+ SYSERROR("Failed to open terminal"); -+ return -1; -+ } -+ -+ ret = ttyname_r(terminal->slave, terminal->name, sizeof(terminal->name)); -+ if (ret < 0) { -+ SYSERROR("Failed to retrieve name of terminal slave"); -+ goto err; -+ } -+ -+ /* isulad: clear ONLCR flag */ -+ ret = use_unix_newline(terminal->master); -+ if (ret < 0) { -+ SYSERROR("Failed to clear ONLCR flag on terminal master"); -+ goto err; -+ } -+ -+ ret = fd_cloexec(terminal->master, true); -+ if (ret < 0) { -+ SYSERROR("Failed to set FD_CLOEXEC flag on terminal master"); -+ goto err; -+ } -+ -+ /* isulad: make master NONBLOCK */ -+ ret = fd_nonblock(terminal->master); -+ if (ret < 0) { -+ SYSERROR("Failed to set O_NONBLOCK flag on terminal master"); -+ goto err; -+ } -+ -+ ret = fd_cloexec(terminal->slave, true); -+ if (ret < 0) { -+ SYSERROR("Failed to set FD_CLOEXEC flag on terminal slave"); -+ goto err; -+ } -+ -+ ret = lxc_terminal_peer_default(terminal); -+ if (ret < 0) { -+ ERROR("Failed to allocate proxy terminal"); -+ goto err; -+ } -+ } else { -+ /* isulad: create 3 pipes */ -+ /* for stdin */ -+ if (pipe2(terminal->pipes[0], O_CLOEXEC)) { -+ ERROR("Failed to create stdin pipe"); -+ goto err; -+ } -+ /* for stdout */ -+ if (pipe2(terminal->pipes[1], O_NONBLOCK | O_CLOEXEC)) { -+ ERROR("Failed to create stdout pipe"); -+ goto err; -+ } -+ /* for stderr */ -+ if (pipe2(terminal->pipes[2], O_NONBLOCK | O_CLOEXEC)) { -+ ERROR("Failed to create stderr pipe"); -+ goto err; -+ } -+ } -+ -+ /* isulad: open fifos */ -+ ret = lxc_terminal_fifo_default(terminal); -+ if (ret < 0) { -+ ERROR("Failed to allocate fifo terminal"); -+ goto err; -+ } -+ -+ return 0; -+ -+err: -+ lxc_terminal_delete(terminal); -+ return -ENODEV; -+} -+#else - int lxc_terminal_create(struct lxc_terminal *terminal) - { - int ret; -@@ -868,6 +1631,7 @@ err: - lxc_terminal_delete(terminal); - return -ENODEV; - } -+#endif - - int lxc_terminal_setup(struct lxc_conf *conf) - { -@@ -1146,6 +1910,18 @@ void lxc_terminal_init(struct lxc_terminal *terminal) - terminal->peer = -EBADF; - terminal->log_fd = -EBADF; - lxc_terminal_info_init(&terminal->proxy); -+#ifdef HAVE_ISULAD -+ terminal->init_fifo[0] = NULL; -+ terminal->init_fifo[1] = NULL; -+ terminal->init_fifo[2] = NULL; -+ terminal->pipes[0][0] = -1; -+ terminal->pipes[0][1] = -1; -+ terminal->pipes[1][0] = -1; -+ terminal->pipes[1][1] = -1; -+ terminal->pipes[2][0] = -1; -+ terminal->pipes[2][1] = -1; -+ lxc_list_init(&terminal->fifos); -+#endif - } - - void lxc_terminal_conf_free(struct lxc_terminal *terminal) -@@ -1155,6 +1931,13 @@ void lxc_terminal_conf_free(struct lxc_terminal *terminal) - if (terminal->buffer_size > 0 && terminal->ringbuf.addr) - lxc_ringbuf_release(&terminal->ringbuf); - lxc_terminal_signal_fini(terminal); -+#ifdef HAVE_ISULAD -+ /*isulad: free console fifos */ -+ free(terminal->init_fifo[0]); -+ free(terminal->init_fifo[1]); -+ free(terminal->init_fifo[2]); -+ lxc_terminal_delete_fifo(-1, &terminal->fifos); -+#endif - } - - int lxc_terminal_map_ids(struct lxc_conf *c, struct lxc_terminal *terminal) -diff --git a/src/lxc/terminal.h b/src/lxc/terminal.h -index 1283cb3..dfc03c6 100644 ---- a/src/lxc/terminal.h -+++ b/src/lxc/terminal.h -@@ -88,8 +88,28 @@ struct lxc_terminal { - /* the in-memory ringbuffer */ - struct lxc_ringbuf ringbuf; - }; -+#ifdef HAVE_ISULAD -+ char *init_fifo[3]; /* isulad: default fifos for the start */ -+ struct lxc_list fifos; /* isulad: fifos used to forward teminal */ -+ bool disable_pty; -+ bool open_stdin; -+ int pipes[3][2]; /* isulad: pipes for dup to container fds of stdin,stdout,stderr on daemonize mode*/ -+#endif - }; - -+#ifdef HAVE_ISULAD -+/* isulad: fifo struct */ -+struct lxc_fifos_fd { -+ char *in_fifo; -+ char *out_fifo; -+ char *err_fifo; -+ int in_fd; -+ int out_fd; -+ int err_fd; -+ struct lxc_list node; -+}; -+#endif -+ - /** - * lxc_terminal_allocate: allocate the console or a tty - * -diff --git a/src/lxc/tools/arguments.h b/src/lxc/tools/arguments.h -index 91f4e9a..214949b 100644 ---- a/src/lxc/tools/arguments.h -+++ b/src/lxc/tools/arguments.h -@@ -42,6 +42,7 @@ struct lxc_arguments { - const char *share_ns[32]; /* size must be greater than LXC_NS_MAX */ - #ifdef HAVE_ISULAD - const char *container_info; /* isulad: file used to store pid and ppid info of container */ -+ char *terminal_fifos[3]; /* isulad add, fifos used to redirct stdin/out/err */ - #endif - - /* for lxc-console */ -diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c -index 83ee75a..4c4c820 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -125,6 +125,15 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - case OPT_CONTAINER_INFO: - args->container_info = arg; - break; -+ case OPT_INPUT_FIFO: -+ args->terminal_fifos[0] = arg; -+ break; -+ case OPT_OUTPUT_FIFO: -+ args->terminal_fifos[1] = arg; -+ break; -+ case OPT_STDERR_FIFO: -+ args->terminal_fifos[2] = arg; -+ break; - #endif - } - return 0; -@@ -306,6 +315,9 @@ int main(int argc, char *argv[]) - goto out; - } - } -+ if (my_args.terminal_fifos[0] || my_args.terminal_fifos[1] || my_args.terminal_fifos[2]) { -+ c->set_terminal_init_fifos(c, my_args.terminal_fifos[0], my_args.terminal_fifos[1], my_args.terminal_fifos[2]); -+ } - #endif - - if (my_args.console) --- -1.8.3.1 - diff --git a/0011-add-exit-fifo-to-monitor-state-of-lxc-monitor.patch b/0011-add-exit-fifo-to-monitor-state-of-lxc-monitor.patch deleted file mode 100644 index 3f83889..0000000 --- a/0011-add-exit-fifo-to-monitor-state-of-lxc-monitor.patch +++ /dev/null @@ -1,271 +0,0 @@ -From 5aee93396a979771f59d8accc4f4c168fd31b584 Mon Sep 17 00:00:00 2001 -From: wujing -Date: Mon, 13 Apr 2020 06:32:37 -0400 -Subject: [PATCH 11/49] add exit fifo to monitor state of lxc monitor - -Signed-off-by: wujing ---- - src/lxc/conf.c | 4 ++++ - src/lxc/conf.h | 2 ++ - src/lxc/lxccontainer.c | 30 ++++++++++++++++++++++++++++++ - src/lxc/lxccontainer.h | 8 ++++++++ - src/lxc/start.c | 20 ++++++++++++++++++++ - src/lxc/start.h | 5 +++++ - src/lxc/tools/arguments.h | 1 + - src/lxc/tools/lxc_start.c | 14 ++++++++++++++ - 8 files changed, 84 insertions(+) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 1487b73..a904348 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -2668,6 +2668,7 @@ struct lxc_conf *lxc_conf_init(void) - #ifdef HAVE_ISULAD - /* isulad add begin */ - lxc_list_init(&new->populate_devs); -+ new->exit_fd = -1; - new->umask = 0027; /*default umask 0027*/ - new->console.init_fifo[0] = NULL; - new->console.init_fifo[1] = NULL; -@@ -4097,6 +4098,9 @@ void lxc_conf_free(struct lxc_conf *conf) - free(conf->shmount.path_cont); - #ifdef HAVE_ISULAD - free(conf->container_info_file); -+ if (conf->exit_fd != -1) { -+ close(conf->exit_fd); -+ } - lxc_clear_init_args(conf); - lxc_clear_populate_devices(conf); - #endif -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 23942ac..c5b70e1 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -430,6 +430,8 @@ struct lxc_conf { - mode_t umask; //umask value - - char *container_info_file; -+ -+ int exit_fd; /* exit fifo fd*/ - #endif - - }; -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 891fc62..64cde99 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -281,6 +281,11 @@ static void lxc_container_free(struct lxc_container *c) - free(c->config_path); - c->config_path = NULL; - -+#ifdef HAVE_ISULAD -+ free(c->exit_fifo); -+ c->exit_fifo = NULL; -+#endif -+ - free(c); - } - -@@ -894,7 +899,11 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - NULL, - }; - char **init_cmd = NULL; -+#ifdef HAVE_ISULAD -+ int keepfds[] = {-1, -1, -1, -1, -1}; -+#else - int keepfds[3] = {-1, -1, -1}; -+#endif - - /* container does exist */ - if (!c) -@@ -1091,6 +1100,19 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - } - } - -+#ifdef HAVE_ISULAD -+ /* isulad: open exit fifo */ -+ if (c->exit_fifo) { -+ conf->exit_fd = lxc_open(c->exit_fifo, O_WRONLY | O_NONBLOCK | O_CLOEXEC, 0); -+ if (conf->exit_fd < 0) { -+ ERROR("Failed to open exit fifo %s: %s.", c->exit_fifo, strerror(errno)); -+ lxc_free_handler(handler); -+ ret = 1; -+ goto on_error; -+ } -+ } -+#endif -+ - conf->reboot = REBOOT_NONE; - - /* Unshare the mount namespace if requested */ -@@ -1125,6 +1147,14 @@ reboot: - keepfds[0] = handler->conf->maincmd_fd; - keepfds[1] = handler->state_socket_pair[0]; - keepfds[2] = handler->state_socket_pair[1]; -+ -+#ifdef HAVE_ISULAD -+ /* keep exit fifo fd */ -+ if (conf->exit_fd >= 0) { -+ keepfds[3] = conf->exit_fd; -+ } -+#endif -+ - ret = lxc_check_inherited(conf, c->daemonize, keepfds, - sizeof(keepfds) / sizeof(keepfds[0])); - if (ret < 0) { -diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index 4a9ba13..fa9bd5e 100644 ---- a/src/lxc/lxccontainer.h -+++ b/src/lxc/lxccontainer.h -@@ -107,6 +107,14 @@ struct lxc_container { - /*! Full path to configuration file */ - char *config_path; - -+#ifdef HAVE_ISULAD -+ /*! isulad: -+ * \private -+ * exit FIFO File to open used monitor the state of lxc monitor process. -+ */ -+ char *exit_fifo; -+#endif -+ - /*! - * \brief Determine if \c /var/lib/lxc/$name/config exists. - * -diff --git a/src/lxc/start.c b/src/lxc/start.c -index f5f9565..70e8282 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -681,6 +681,11 @@ struct lxc_handler *lxc_init_handler(const char *name, struct lxc_conf *conf, - handler->nsfd[i] = -EBADF; - - handler->name = name; -+ -+#ifdef HAVE_ISULAD -+ handler->exit_code = -1; /* isulad: record exit code of container */ -+#endif -+ - if (daemonize) - handler->transient_pid = lxc_raw_getpid(); - else -@@ -953,6 +958,16 @@ void lxc_end(struct lxc_handler *handler) - */ - lxc_monitor_send_state(name, STOPPED, handler->lxcpath); - -+#ifdef HAVE_ISULAD -+ /* isuald: write exit code to exit fifo */ -+ if (handler->conf->exit_fd >= 0) { -+ ret = write(handler->conf->exit_fd, &handler->exit_code, sizeof(int)); -+ if (ret != sizeof(int)) { -+ SYSERROR("Failed to write to exit code to exit fifo."); -+ } -+ } -+#endif -+ - /* The command socket is closed so no one can acces the command - * socket anymore so there's no need to lock it. - */ -@@ -2127,10 +2142,15 @@ int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, - #else - lxc_monitor_send_exit_code(name, status, handler->lxcpath); - #endif -+ - lxc_error_set_and_log(handler->pid, status); - if (error_num) - *error_num = handler->exit_status; - -+#ifdef HAVE_ISULAD -+ handler->exit_code = exit_code; /* record exit code */ -+#endif -+ - /* These are not the droids you are looking for. */ - __private_goto1: - lxc_delete_network(handler); -diff --git a/src/lxc/start.h b/src/lxc/start.h -index 7e2371c..1368d0e 100644 ---- a/src/lxc/start.h -+++ b/src/lxc/start.h -@@ -122,6 +122,11 @@ struct lxc_handler { - int exit_status; - - struct cgroup_ops *cgroup_ops; -+ -+#ifdef HAVE_ISULAD -+ int exit_code;/* isulad: record the exit code of container */ -+#endif -+ - }; - - struct execute_args { -diff --git a/src/lxc/tools/arguments.h b/src/lxc/tools/arguments.h -index 214949b..ea5f938 100644 ---- a/src/lxc/tools/arguments.h -+++ b/src/lxc/tools/arguments.h -@@ -43,6 +43,7 @@ struct lxc_arguments { - #ifdef HAVE_ISULAD - const char *container_info; /* isulad: file used to store pid and ppid info of container */ - char *terminal_fifos[3]; /* isulad add, fifos used to redirct stdin/out/err */ -+ const char *exit_monitor_fifo; /* isulad: fifo used to monitor state of monitor process */ - #endif - - /* for lxc-console */ -diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c -index 4c4c820..8041f02 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -28,6 +28,10 @@ - #include "confile.h" - #include "log.h" - -+#ifdef HAVE_ISULAD -+#include "isulad_utils.h" -+#endif -+ - lxc_log_define(lxc_start, lxc); - - static int my_parser(struct lxc_arguments *args, int c, char *arg); -@@ -50,6 +54,7 @@ static const struct option my_longopts[] = { - {"share-pid", required_argument, 0, OPT_SHARE_PID}, - #ifdef HAVE_ISULAD - {"container-pidfile", required_argument, 0, OPT_CONTAINER_INFO}, -+ {"exit-fifo", required_argument, 0, OPT_EXIT_FIFO}, - #endif - LXC_COMMON_OPTIONS - }; -@@ -121,6 +126,7 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - case OPT_SHARE_PID: - args->share_ns[LXC_NS_PID] = arg; - break; -+ - #ifdef HAVE_ISULAD - case OPT_CONTAINER_INFO: - args->container_info = arg; -@@ -133,8 +139,11 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - break; - case OPT_STDERR_FIFO: - args->terminal_fifos[2] = arg; -+ case OPT_EXIT_FIFO: -+ args->exit_monitor_fifo = arg; - break; - #endif -+ - } - return 0; - } -@@ -315,8 +324,13 @@ int main(int argc, char *argv[]) - goto out; - } - } -+ - if (my_args.terminal_fifos[0] || my_args.terminal_fifos[1] || my_args.terminal_fifos[2]) { - c->set_terminal_init_fifos(c, my_args.terminal_fifos[0], my_args.terminal_fifos[1], my_args.terminal_fifos[2]); -+ -+ /* isulad: fifo used to monitor state of monitor process */ -+ if (my_args.exit_monitor_fifo != NULL) { -+ c->exit_fifo = safe_strdup(my_args.exit_monitor_fifo); - } - #endif - --- -1.8.3.1 - diff --git a/0012-Adapt-to-isulad-log.patch b/0012-Adapt-to-isulad-log.patch deleted file mode 100644 index 3b8e380..0000000 --- a/0012-Adapt-to-isulad-log.patch +++ /dev/null @@ -1,142 +0,0 @@ -From 74612254660138c0fe96290a6f1ae3c8e46295b8 Mon Sep 17 00:00:00 2001 -From: haozi007 -Date: Mon, 13 Apr 2020 16:44:17 +0800 -Subject: [PATCH 12/49] Adapt to isulad log - -Signed-off-by: haozi007 ---- - src/lxc/log.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++- - src/lxc/tools/lxc_start.c | 2 ++ - 2 files changed, 59 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/log.c b/src/lxc/log.c -index 30d6773..9794582 100644 ---- a/src/lxc/log.c -+++ b/src/lxc/log.c -@@ -55,6 +55,38 @@ static char *log_vmname = NULL; - - lxc_log_define(log, lxc); - -+#ifdef HAVE_ISULAD -+static inline const char *isulad_get_fifo_path(const char *file) -+{ -+#define ISULAD_FIFO_PREFIX "fifo:" -+ -+ if (strncmp(file, ISULAD_FIFO_PREFIX, strlen(ISULAD_FIFO_PREFIX)) == 0) { -+ return (file + strlen(ISULAD_FIFO_PREFIX)); -+ } -+ return NULL; -+} -+ -+static int isulad_open_fifo(const char *file_path) -+{ -+#define LOG_FIFO_SIZE (1024 * 1024) -+ int fd; -+ -+ fd = lxc_unpriv(open(file_path, O_RDWR | O_NONBLOCK | O_CLOEXEC, 0640)); -+ if (fd == -1) { -+ fprintf(stderr, "Open fifo %s failed: %s\n", file_path, strerror(errno)); -+ return -1; -+ } -+ -+ if (fcntl(fd, F_SETPIPE_SZ, LOG_FIFO_SIZE) == -1) { -+ printf("Set fifo buffer size failed: %s", strerror(errno)); -+ close(fd); -+ return -1; -+ } -+ -+ return fd; -+} -+#endif -+ - static int lxc_log_priority_to_syslog(int priority) - { - switch (priority) { -@@ -321,6 +353,12 @@ static int log_append_logfile(const struct lxc_log_appender *appender, - #endif - - log_container_name = lxc_log_get_container_name(); -+#ifdef HAVE_ISULAD -+ /* use isulad log format */ -+ if (log_container_name != NULL && strlen(log_container_name) > 15) { -+ log_container_name = log_container_name + (strlen(log_container_name) - 15); -+ } -+#endif - - if (fd_to_use < 0) - fd_to_use = lxc_log_fd; -@@ -333,9 +371,13 @@ static int log_append_logfile(const struct lxc_log_appender *appender, - return ret; - - n = snprintf(buffer, sizeof(buffer), -+#if HAVE_ISULAD -+ "%15s %s %-8s %s - %s:%s:%d -", -+#else - "%s%s%s %s %-8s %s - %s:%s:%d - ", - log_prefix, - log_container_name ? " " : "", -+#endif - log_container_name ? log_container_name : "", - date_time, - lxc_log_priority_to_string(event->priority), -@@ -590,6 +632,13 @@ static int __lxc_log_set_file(const char *fname, int create_dirs) - return ret_errno(EINVAL); - } - -+#ifdef HAVE_ISULAD -+ fname = isulad_get_fifo_path(fname); -+ if (fname == NULL) { -+ return ret_errno(EINVAL); -+ } -+#endif -+ - #if USE_CONFIGPATH_LOGS - /* We don't build_dir for the default if the default is i.e. - * /var/lib/lxc/$container/$container.log. -@@ -599,7 +648,11 @@ static int __lxc_log_set_file(const char *fname, int create_dirs) - if (build_dir(fname)) - return log_error_errno(-errno, errno, "Failed to create dir for log file \"%s\"", fname); - -+#if HAVE_ISULAD -+ lxc_log_fd = isulad_open_fifo(fname); -+#else - lxc_log_fd = log_open(fname); -+#endif - if (lxc_log_fd < 0) - return lxc_log_fd; - -@@ -695,7 +748,10 @@ int lxc_log_init(struct lxc_log *log) - - if (lxc_log_fd >= 0) { - lxc_log_category_lxc.appender = &log_appender_logfile; -- lxc_log_category_lxc.appender->next = &log_appender_stderr; -+#ifdef HAVE_ISULAD -+ if (!lxc_quiet_specified && !log->quiet) -+#endif -+ lxc_log_category_lxc.appender->next = &log_appender_stderr; - } - - return ret; -diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c -index 8041f02..11ff15b 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -139,6 +139,7 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - break; - case OPT_STDERR_FIFO: - args->terminal_fifos[2] = arg; -+ break; - case OPT_EXIT_FIFO: - args->exit_monitor_fifo = arg; - break; -@@ -327,6 +328,7 @@ int main(int argc, char *argv[]) - - if (my_args.terminal_fifos[0] || my_args.terminal_fifos[1] || my_args.terminal_fifos[2]) { - c->set_terminal_init_fifos(c, my_args.terminal_fifos[0], my_args.terminal_fifos[1], my_args.terminal_fifos[2]); -+ } - - /* isulad: fifo used to monitor state of monitor process */ - if (my_args.exit_monitor_fifo != NULL) { --- -1.8.3.1 - diff --git a/0013-set-env-in-container.patch b/0013-set-env-in-container.patch deleted file mode 100644 index 5ee528d..0000000 --- a/0013-set-env-in-container.patch +++ /dev/null @@ -1,143 +0,0 @@ -From 01d666e795a2cce1d4968202a38c73e673c42e88 Mon Sep 17 00:00:00 2001 -From: wujing -Date: Mon, 13 Apr 2020 07:04:20 -0400 -Subject: [PATCH 13/49] set env in container - -Signed-off-by: wujing ---- - src/lxc/attach.c | 7 +++++++ - src/lxc/start.c | 7 +++++++ - src/lxc/tools/lxc_start.c | 4 ++-- - src/lxc/utils.c | 39 +++++++++++++++++++++++++++++++++++++++ - src/lxc/utils.h | 2 ++ - 5 files changed, 57 insertions(+), 2 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 78b4700..801dc27 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -779,6 +779,13 @@ static int attach_child_main(struct attach_clone_payload *payload) - else - new_gid = ns_root_gid; - -+#ifdef HAVE_ISULAD -+ // isulad: set env home in container -+ if (lxc_setup_env_home(new_uid) < 0) { -+ goto on_error; -+ } -+#endif -+ - if ((init_ctx->container && init_ctx->container->lxc_conf && - init_ctx->container->lxc_conf->no_new_privs) || - (options->attach_flags & LXC_ATTACH_NO_NEW_PRIVS)) { -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 70e8282..17766bc 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1381,6 +1381,13 @@ static int do_start(void *data) - if (new_gid == nsgid) - new_gid = LXC_INVALID_GID; - -+#ifdef HAVE_ISULAD -+ // isulad: set env home in container -+ if (lxc_setup_env_home(new_uid) < 0) { -+ goto out_warn_father; -+ } -+#endif -+ - /* Make sure that the processes STDIO is correctly owned by the user that we are switching to */ - ret = fix_stdio_permissions(new_uid); - if (ret) -diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c -index 11ff15b..76802df6 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -139,7 +139,7 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - break; - case OPT_STDERR_FIFO: - args->terminal_fifos[2] = arg; -- break; -+ break; - case OPT_EXIT_FIFO: - args->exit_monitor_fifo = arg; - break; -@@ -328,7 +328,7 @@ int main(int argc, char *argv[]) - - if (my_args.terminal_fifos[0] || my_args.terminal_fifos[1] || my_args.terminal_fifos[2]) { - c->set_terminal_init_fifos(c, my_args.terminal_fifos[0], my_args.terminal_fifos[1], my_args.terminal_fifos[2]); -- } -+ } - - /* isulad: fifo used to monitor state of monitor process */ - if (my_args.exit_monitor_fifo != NULL) { -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 90113e0..5b04fa4 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -28,6 +28,7 @@ - #include - #include - #include -+#include - - #include "config.h" - #include "log.h" -@@ -2079,4 +2080,42 @@ out: - free(pid_info); - return startat; - } -+ -+// isulad: set env home in container -+int lxc_setup_env_home(uid_t uid) -+{ -+#define __PASSWD_FILE__ "/etc/passwd" -+ char *homedir = "/"; // default home dir is / -+ FILE *stream = NULL; -+ struct passwd pw, *pwbufp = NULL; -+ char buf[BUFSIZ]; -+ -+ stream = fopen_cloexec(__PASSWD_FILE__, "r"); -+ if (stream == NULL) { -+ SYSWARN("Failed to open %s", __PASSWD_FILE__); -+ goto set_env; -+ } -+ -+ while (fgetpwent_r(stream, &pw, buf, sizeof(buf), &pwbufp) == 0 && pwbufp != NULL) { -+ if (pwbufp->pw_uid == uid) { -+ homedir = pwbufp->pw_dir; -+ goto set_env; -+ } -+ } -+ WARN("User invalid, can not find user '%u'", uid); -+ -+set_env: -+ if (stream) -+ fclose(stream); -+ -+ // if we didn't configure HOME, set it based on uid -+ if (setenv("HOME", homedir, 0) < 0) { -+ SYSERROR("Unable to set env 'HOME'"); -+ return -1; -+ } -+ -+ NOTICE("Setted env 'HOME' to %s", homedir); -+ return 0; -+} -+ - #endif -diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index fbb0d55..677f632 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -316,6 +316,8 @@ extern int fix_stdio_permissions(uid_t uid); - extern void lxc_write_error_message(int errfd, const char *format, ...); - extern int lxc_file2str(const char *filename, char ret[], int cap); - extern int unsigned long long lxc_get_process_startat(pid_t pid); -+// set env home in container -+extern int lxc_setup_env_home(uid_t uid); - #endif - - #endif /* __LXC_UTILS_H */ --- -1.8.3.1 - diff --git a/0014-exec-refact-attach-progress.patch b/0014-exec-refact-attach-progress.patch deleted file mode 100644 index 5753672..0000000 --- a/0014-exec-refact-attach-progress.patch +++ /dev/null @@ -1,452 +0,0 @@ -From 61b64be9ac4e5d46e9363bb605c7b2e14d0cd2a2 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 13 Apr 2020 20:41:03 +0800 -Subject: [PATCH 14/49] exec: refact attach progress - -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 2 +- - src/lxc/attach_options.h | 23 +++- - src/lxc/conf.h | 2 + - src/lxc/terminal.c | 27 ++++- - src/lxc/tools/arguments.h | 1 + - src/lxc/tools/lxc_attach.c | 273 +++++++++++++++++++++++++++++++++++++++++++++ - 6 files changed, 324 insertions(+), 4 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 801dc27..e66ca1c 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -1420,7 +1420,7 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - } - - if (pid == 0) { -- if (options->attach_flags & LXC_ATTACH_TERMINAL) { -+ if (options->attach_flags & LXC_ATTACH_TERMINAL && terminal.tty_state) { - ret = pthread_sigmask(SIG_SETMASK, - &terminal.tty_state->oldmask, NULL); - if (ret < 0) { -diff --git a/src/lxc/attach_options.h b/src/lxc/attach_options.h -index 3a02ee5..7b0ea5e 100644 ---- a/src/lxc/attach_options.h -+++ b/src/lxc/attach_options.h -@@ -116,10 +116,12 @@ typedef struct lxc_attach_options_t { - #ifdef HAVE_ISULAD - char *init_fifo[3]; /* isulad: default fifos for the start */ - int64_t timeout;/* isulad: Seconds for waiting on a container to attach/exec before it is killed*/ -+ const char *suffix; - #endif - - } lxc_attach_options_t; - -+#ifdef HAVE_ISULAD - /*! Default attach options to use */ - #define LXC_ATTACH_OPTIONS_DEFAULT \ - { \ -@@ -136,8 +138,27 @@ typedef struct lxc_attach_options_t { - /* .stdout_fd = */ 1, \ - /* .stderr_fd = */ 2, \ - /* .log_fd = */ -EBADF, \ -+ /* .init_fifo = */ {NULL, NULL, NULL}, \ - } -- -+#else -+/*! Default attach options to use */ -+#define LXC_ATTACH_OPTIONS_DEFAULT \ -+ { \ -+ /* .attach_flags = */ LXC_ATTACH_DEFAULT, \ -+ /* .namespaces = */ -1, \ -+ /* .personality = */ -1, \ -+ /* .initial_cwd = */ NULL, \ -+ /* .uid = */ (uid_t)-1, \ -+ /* .gid = */ (gid_t)-1, \ -+ /* .env_policy = */ LXC_ATTACH_KEEP_ENV, \ -+ /* .extra_env_vars = */ NULL, \ -+ /* .extra_keep_env = */ NULL, \ -+ /* .stdin_fd = */ 0, \ -+ /* .stdout_fd = */ 1, \ -+ /* .stderr_fd = */ 2, \ -+ /* .log_fd = */ -EBADF, \ -+ } -+#endif - /*! - * Representation of a command to run in a container. - */ -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index c5b70e1..52460a3 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -432,6 +432,8 @@ struct lxc_conf { - char *container_info_file; - - int exit_fd; /* exit fifo fd*/ -+ -+ char *errmsg; /* record error messages */ - #endif - - }; -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index c8cd83f..775743d 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -1174,8 +1174,25 @@ static int lxc_terminal_peer_default(struct lxc_terminal *terminal) - - if (terminal->path) - path = terminal->path; -- else -- path = "/dev/tty"; -+ -+#ifdef HAVE_ISULAD -+ /* isulad: if no console was given, try current controlling terminal, there -+ * won't be one if we were started as a daemon (-d) -+ */ -+ if (!path && !access("/dev/tty", F_OK)) { -+ int fd; -+ fd = open("/dev/tty", O_RDWR); -+ if (fd >= 0) { -+ close(fd); -+ path = "/dev/tty"; -+ } -+ } -+ -+ if (!path) { -+ DEBUG("Not have a controlling terminal"); -+ return 0; -+ } -+#endif - - terminal->peer = lxc_unpriv(open(path, O_RDWR | O_CLOEXEC)); - if (terminal->peer < 0) { -@@ -1884,9 +1901,15 @@ int lxc_terminal_prepare_login(int fd) - if (ret < 0) - return -1; - -+#ifdef HAVE_ISULAD -+ ret = set_stdfds(fd); -+ if (ret < 0) -+ return -1; -+#else - ret = lxc_terminal_set_stdfds(fd); - if (ret < 0) - return -1; -+#endif - - if (fd > STDERR_FILENO) - close(fd); -diff --git a/src/lxc/tools/arguments.h b/src/lxc/tools/arguments.h -index ea5f938..e0866d6 100644 ---- a/src/lxc/tools/arguments.h -+++ b/src/lxc/tools/arguments.h -@@ -44,6 +44,7 @@ struct lxc_arguments { - const char *container_info; /* isulad: file used to store pid and ppid info of container */ - char *terminal_fifos[3]; /* isulad add, fifos used to redirct stdin/out/err */ - const char *exit_monitor_fifo; /* isulad: fifo used to monitor state of monitor process */ -+ const char *suffix; /* isulad add, suffix used for connect with parent of execed process*/ - #endif - - /* for lxc-console */ -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index a8f493a..47ac2f2 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -74,6 +74,12 @@ static const struct option my_longopts[] = { - {"rcfile", required_argument, 0, 'f'}, - {"uid", required_argument, 0, 'u'}, - {"gid", required_argument, 0, 'g'}, -+#ifdef HAVE_ISULAD -+ {"in-fifo", required_argument, 0, OPT_INPUT_FIFO}, /* isulad add terminal fifos*/ -+ {"out-fifo", required_argument, 0, OPT_OUTPUT_FIFO}, -+ {"err-fifo", required_argument, 0, OPT_STDERR_FIFO}, -+ {"suffix", required_argument, 0, OPT_ATTACH_SUFFIX}, -+#endif - LXC_COMMON_OPTIONS - }; - -@@ -201,6 +207,20 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - if (lxc_safe_uint(arg, &args->gid) < 0) - return -1; - break; -+#ifdef HAVE_ISULAD -+ case OPT_INPUT_FIFO: -+ args->terminal_fifos[0] = arg; -+ break; -+ case OPT_OUTPUT_FIFO: -+ args->terminal_fifos[1] = arg; -+ break; -+ case OPT_STDERR_FIFO: -+ args->terminal_fifos[2] = arg; -+ break; -+ case OPT_ATTACH_SUFFIX: -+ args->suffix = arg; -+ break; -+#endif - } - - return 0; -@@ -264,6 +284,258 @@ static int lxc_attach_create_log_file(const char *log_file) - return fd; - } - -+#ifdef HAVE_ISULAD -+// isulad: send '128 + signal' if container is killed by signal. -+#define ExitSignalOffset 128 -+ -+/*isulad: attach with terminal*/ -+static int do_attach_foreground(struct lxc_container *c, lxc_attach_command_t *command, -+ lxc_attach_options_t *attach_options, -+ char **errmsg) -+{ -+ int ret = 0; -+ pid_t pid; -+ int wexit = -1; -+ int signal; -+ -+ if (command->program) -+ ret = c->attach(c, lxc_attach_run_command, command, attach_options, &pid); -+ else -+ ret = c->attach(c, lxc_attach_run_shell, NULL, attach_options, &pid); -+ if (ret < 0) -+ goto out; -+ -+ ret = lxc_wait_for_pid_status(pid); -+ if (ret < 0) -+ goto out; -+ -+ if (WIFEXITED(ret)) -+ wexit = WEXITSTATUS(ret); -+ else -+ wexit = -1; -+ -+ if (WIFSIGNALED(ret)) { -+ signal = WTERMSIG(ret); -+ wexit = ExitSignalOffset + signal; -+ } -+out: -+ if (c->lxc_conf->errmsg) -+ *errmsg = safe_strdup(c->lxc_conf->errmsg); -+ return wexit; -+} -+ -+static void close_msg_pipe(int *errpipe) -+{ -+ if (errpipe[0] >= 0) { -+ close(errpipe[0]); -+ errpipe[0] = -1; -+ } -+ if (errpipe[1] >= 0) { -+ close(errpipe[1]); -+ errpipe[1] = -1; -+ } -+} -+ -+/*isulad: attach without terminal in background */ -+static int do_attach_background(struct lxc_container *c, lxc_attach_command_t *command, -+ lxc_attach_options_t *attach_options, -+ char **errmsg) -+{ -+ int ret = 0; -+ int msgpipe[2]; -+ pid_t pid = 0; -+ ssize_t size_read; -+ char msgbuf[BUFSIZ + 1] = {0}; -+ -+ //pipdfd for get error message of child or grandchild process. -+ if (pipe2(msgpipe, O_CLOEXEC) != 0) { -+ SYSERROR("Failed to init msgpipe"); -+ return -1; -+ } -+ -+ pid = fork(); -+ if (pid < 0) { -+ close_msg_pipe(msgpipe); -+ return -1; -+ } -+ -+ if (pid != 0) { -+ close(msgpipe[1]); -+ msgpipe[1] = -1; -+ size_read = read(msgpipe[0], msgbuf, BUFSIZ); -+ if (size_read > 0) { -+ *errmsg = safe_strdup(msgbuf); -+ ret = -1; -+ } -+ -+ close(msgpipe[0]); -+ msgpipe[0] = -1; -+ -+ return ret; -+ } -+ -+ /* second fork to be reparented by init */ -+ pid = fork(); -+ if (pid < 0) { -+ SYSERROR("Error doing dual-fork"); -+ close_msg_pipe(msgpipe); -+ exit(1); -+ } -+ if (pid != 0) { -+ close_msg_pipe(msgpipe); -+ exit(0); -+ } -+ -+ close(msgpipe[0]); -+ msgpipe[0] = -1; -+ -+ if (null_stdfds() < 0) { -+ ERROR("failed to close fds"); -+ exit(1); -+ } -+ setsid(); -+ -+ if (command->program) -+ ret = c->attach(c, lxc_attach_run_command, command, attach_options, &pid); -+ else -+ ret = c->attach(c, lxc_attach_run_shell, NULL, attach_options, &pid); -+ if (ret < 0) { -+ if (c->lxc_conf->errmsg) -+ lxc_write_error_message(msgpipe[1], "%s", c->lxc_conf->errmsg); -+ else -+ lxc_write_error_message(msgpipe[1], "Failed to attach container"); -+ close(msgpipe[1]); -+ msgpipe[1] = -1; -+ ret = -1; -+ goto out; -+ } -+ -+ close(msgpipe[1]); -+ msgpipe[1] = -1; -+ -+ ret = wait_for_pid(pid); -+out: -+ lxc_container_put(c); -+ if (ret) -+ exit(EXIT_FAILURE); -+ else -+ exit(0); -+} -+ -+int main(int argc, char *argv[]) -+{ -+ int ret = -1; -+ int wexit = 0; -+ struct lxc_log log; -+ char *errmsg = NULL; -+ pid_t pid; -+ lxc_attach_options_t attach_options = LXC_ATTACH_OPTIONS_DEFAULT; -+ lxc_attach_command_t command = (lxc_attach_command_t){.program = NULL}; -+ -+ if (lxc_caps_init()) -+ exit(EXIT_FAILURE); -+ -+ if (lxc_arguments_parse(&my_args, argc, argv)) -+ exit(EXIT_FAILURE); -+ -+ log.name = my_args.name; -+ log.file = my_args.log_file; -+ log.level = my_args.log_priority; -+ log.prefix = my_args.progname; -+ log.quiet = my_args.quiet; -+ log.lxcpath = my_args.lxcpath[0]; -+ -+ if (lxc_log_init(&log)) -+ exit(EXIT_FAILURE); -+ -+ if (geteuid()) -+ if (access(my_args.lxcpath[0], O_RDONLY) < 0) { -+ ERROR("You lack access to %s", my_args.lxcpath[0]); -+ exit(EXIT_FAILURE); -+ } -+ -+ struct lxc_container *c = lxc_container_new(my_args.name, my_args.lxcpath[0]); -+ if (!c) -+ exit(EXIT_FAILURE); -+ -+ if (my_args.rcfile) { -+ c->clear_config(c); -+ if (!c->load_config(c, my_args.rcfile)) { -+ ERROR("Failed to load rcfile"); -+ lxc_container_put(c); -+ exit(EXIT_FAILURE); -+ } -+ -+ c->configfile = strdup(my_args.rcfile); -+ if (!c->configfile) { -+ ERROR("Out of memory setting new config filename"); -+ lxc_container_put(c); -+ exit(EXIT_FAILURE); -+ } -+ } -+ -+ if (!c->may_control(c)) { -+ ERROR("Insufficent privileges to control %s", c->name); -+ lxc_container_put(c); -+ exit(EXIT_FAILURE); -+ } -+ -+ if (remount_sys_proc) -+ attach_options.attach_flags |= LXC_ATTACH_REMOUNT_PROC_SYS; -+ -+ if (elevated_privileges) -+ attach_options.attach_flags &= ~(elevated_privileges); -+ -+ if (my_args.terminal_fifos[0] || my_args.terminal_fifos[1] || my_args.terminal_fifos[2]) { -+ attach_options.init_fifo[0] = my_args.terminal_fifos[0]; -+ attach_options.init_fifo[1] = my_args.terminal_fifos[1]; -+ attach_options.init_fifo[2] = my_args.terminal_fifos[2]; -+ attach_options.attach_flags |= LXC_ATTACH_TERMINAL; -+ } else if (stdfd_is_pty()) { -+ attach_options.attach_flags |= LXC_ATTACH_TERMINAL; -+ } -+ -+ attach_options.namespaces = namespace_flags; -+ attach_options.personality = new_personality; -+ attach_options.env_policy = env_policy; -+ attach_options.extra_env_vars = extra_env; -+ attach_options.extra_keep_env = extra_keep; -+ -+ if (my_args.argc > 0) { -+ command.program = my_args.argv[0]; -+ command.argv = (char**)my_args.argv; -+ } -+ -+ if (my_args.console_log) { -+ attach_options.log_fd = lxc_attach_create_log_file(my_args.console_log); -+ if (attach_options.log_fd < 0) { -+ ERROR("Failed to create log file for %s", c->name); -+ lxc_container_put(c); -+ exit(EXIT_FAILURE); -+ } -+ } -+ -+ attach_options.suffix = my_args.suffix; -+ -+ /* isulad: add do attach background */ -+ if (attach_options.attach_flags & LXC_ATTACH_TERMINAL) -+ wexit = do_attach_foreground(c, &command, &attach_options, &errmsg); -+ else -+ wexit = do_attach_background(c, &command, &attach_options, &errmsg); -+ -+ if (errmsg) { -+ fprintf(stderr, "%s:%s:%s:%d starting container process caused \"%s\"", c->name, -+ __FILE__, __func__, __LINE__, errmsg); -+ free(errmsg); -+ } -+ -+ lxc_container_put(c); -+ if (wexit >= 0) -+ exit(wexit); -+ -+ exit(EXIT_FAILURE); -+} -+#else - int main(int argc, char *argv[]) - { - int ret = -1; -@@ -377,3 +649,4 @@ out: - - exit(EXIT_FAILURE); - } -+#endif --- -1.8.3.1 - diff --git a/0015-add-masked-paths-and-readonly-paths.patch b/0015-add-masked-paths-and-readonly-paths.patch deleted file mode 100644 index bfe5a18..0000000 --- a/0015-add-masked-paths-and-readonly-paths.patch +++ /dev/null @@ -1,357 +0,0 @@ -From c5ea37649d728630df34e1af22908b8e8124f772 Mon Sep 17 00:00:00 2001 -From: wujing -Date: Mon, 13 Apr 2020 09:11:21 -0400 -Subject: [PATCH 15/49] add masked paths and readonly paths - -Signed-off-by: wujing ---- - src/lxc/conf.c | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++- - src/lxc/conf.h | 12 +++++ - src/lxc/confile.c | 106 +++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 256 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index a904348..fce241b 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -1275,6 +1275,96 @@ static int lxc_mount_rootfs(struct lxc_conf *conf) - return 0; - } - -+#ifdef HAVE_ISULAD -+// maskPath masks the top of the specified path inside a container to avoid -+// security issues from processes reading information from non-namespace aware -+// mounts ( proc/kcore ). -+static bool mask_path(const char *path) -+{ -+ int ret; -+ -+ if (!path) -+ return true; -+ -+ ret = mount("/dev/null", path, "", MS_BIND, ""); -+ if (ret < 0 && errno != ENOENT) { -+ if (errno == ENOTDIR) { -+ ret = mount("tmpfs", path, "tmpfs", MS_RDONLY, ""); -+ if (ret < 0) -+ goto error; -+ return true; -+ } -+ goto error; -+ } -+ return true; -+ -+error: -+ SYSERROR("Failed to mask path \"%s\": %s", path, strerror(errno)); -+ return false; -+} -+ -+// remount_readonly will bind over the top of an existing path and ensure that it is read-only. -+static bool remount_readonly(const char *path) -+{ -+ int ret, i; -+ -+ if (!path) -+ return true; -+ -+ for (i = 0; i < 5; i++) { -+ ret = mount("", path, "", MS_REMOUNT | MS_RDONLY, ""); -+ if (ret < 0 && errno != ENOENT) { -+ if (errno == EINVAL) { -+ // Probably not a mountpoint, use bind-mount -+ ret = mount(path, path, "", MS_BIND, ""); -+ if (ret < 0) -+ goto on_error; -+ ret = mount(path, path, "", MS_BIND | MS_REMOUNT | MS_RDONLY | MS_REC | \ -+ MS_NOEXEC | MS_NOSUID | MS_NODEV, ""); -+ if (ret < 0) -+ goto on_error; -+ } else if (errno == EBUSY) { -+ DEBUG("Try to mount \"%s\" to readonly after 100ms.", path); -+ usleep(100 * 1000); -+ continue; -+ } else { -+ goto on_error; -+ } -+ } -+ return true; -+ } -+ -+on_error: -+ SYSERROR("Unable to mount \"%s\" to readonly", path); -+ return false; -+} -+ -+// isulad: setup rootfs masked paths -+static int setup_rootfs_maskedpaths(struct lxc_list *maskedpaths) -+{ -+ struct lxc_list *it; -+ -+ lxc_list_for_each(it, maskedpaths) { -+ if (!mask_path((char *)it->elem)) -+ return -1; -+ } -+ -+ return 0; -+} -+// isulad: setup rootfs ro paths -+static int setup_rootfs_ropaths(struct lxc_list *ropaths) -+{ -+ struct lxc_list *it; -+ -+ lxc_list_for_each(it, ropaths) { -+ if (!remount_readonly((char *)it->elem)) -+ return -1; -+ } -+ -+ return 0; -+} -+#endif -+ - int lxc_chroot(const struct lxc_rootfs *rootfs) - { - __do_free char *nroot = NULL; -@@ -2666,8 +2756,9 @@ struct lxc_conf *lxc_conf_init(void) - seccomp_conf_init(new); - - #ifdef HAVE_ISULAD -- /* isulad add begin */ - lxc_list_init(&new->populate_devs); -+ lxc_list_init(&new->rootfs.maskedpaths); -+ lxc_list_init(&new->rootfs.ropaths); - new->exit_fd = -1; - new->umask = 0027; /*default umask 0027*/ - new->console.init_fifo[0] = NULL; -@@ -3690,6 +3781,22 @@ int lxc_setup(struct lxc_handler *handler) - return log_error(-1, "Failed to setup sysctl parameters"); - } - -+#ifdef HAVE_ISULAD -+ // isulad: setup rootfs masked paths -+ if (!lxc_list_empty(&lxc_conf->rootfs.maskedpaths)) { -+ if (setup_rootfs_maskedpaths(&lxc_conf->rootfs.maskedpaths)) { -+ return log_error(-1, "failed to setup maskedpaths"); -+ } -+ } -+ -+ // isulad: setup rootfs ro paths -+ if (!lxc_list_empty(&lxc_conf->rootfs.ropaths)) { -+ if (setup_rootfs_ropaths(&lxc_conf->rootfs.ropaths)) { -+ return log_error(-1, "failed to setup readonlypaths"); -+ } -+ } -+#endif -+ - if (!lxc_list_empty(&lxc_conf->keepcaps)) { - if (!lxc_list_empty(&lxc_conf->caps)) - return log_error(-1, "Container requests lxc.cap.drop and lxc.cap.keep: either use lxc.cap.drop or lxc.cap.keep, not both"); -@@ -4103,6 +4210,8 @@ void lxc_conf_free(struct lxc_conf *conf) - } - lxc_clear_init_args(conf); - lxc_clear_populate_devices(conf); -+ lxc_clear_rootfs_masked_paths(conf); -+ lxc_clear_rootfs_ro_paths(conf); - #endif - free(conf); - } -@@ -4945,4 +5054,32 @@ int lxc_clear_populate_devices(struct lxc_conf *c) - return 0; - } - -+/*isulad: clear rootfs masked paths*/ -+int lxc_clear_rootfs_masked_paths(struct lxc_conf *c) -+{ -+ struct lxc_list *it = NULL; -+ struct lxc_list *next = NULL; -+ -+ lxc_list_for_each_safe(it, &c->rootfs.maskedpaths, next) { -+ lxc_list_del(it); -+ free(it->elem); -+ free(it); -+ } -+ return 0; -+} -+ -+/*isulad: clear rootfs ro paths*/ -+int lxc_clear_rootfs_ro_paths(struct lxc_conf *c) -+{ -+ struct lxc_list *it = NULL; -+ struct lxc_list *next = NULL; -+ -+ lxc_list_for_each_safe(it, &c->rootfs.ropaths, next) { -+ lxc_list_del(it); -+ free(it->elem); -+ free(it); -+ } -+ return 0; -+} -+ - #endif -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 52460a3..482fe0d 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -143,6 +143,8 @@ struct lxc_tty_info { - * @mountflags : the portion of @options that are flags - * @data : the portion of @options that are not flags - * @managed : whether it is managed by LXC -+ * @maskedpaths: A list of paths to be msked over inside the container -+ * @ropaths : A list of paths to be remounted with readonly inside the container - */ - struct lxc_rootfs { - char *path; -@@ -152,6 +154,14 @@ struct lxc_rootfs { - unsigned long mountflags; - char *data; - bool managed; -+ -+#ifdef HAVE_ISULAD -+ /* isulad: maskedpaths */ -+ struct lxc_list maskedpaths; -+ /* isulad: ropaths */ -+ struct lxc_list ropaths; -+#endif -+ - }; - - /* -@@ -511,5 +521,7 @@ extern int userns_exec_minimal(const struct lxc_conf *conf, - #ifdef HAVE_ISULAD - int lxc_clear_init_args(struct lxc_conf *lxc_conf); - int lxc_clear_populate_devices(struct lxc_conf *c); -+int lxc_clear_rootfs_masked_paths(struct lxc_conf *c); -+int lxc_clear_rootfs_ro_paths(struct lxc_conf *c); - #endif - #endif /* __LXC_CONF_H */ -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 2df269a..bf0fdf0 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -151,6 +151,8 @@ lxc_config_define(proc); - lxc_config_define(init_args); - lxc_config_define(populate_device); - lxc_config_define(umask); -+lxc_config_define(rootfs_masked_paths); -+lxc_config_define(rootfs_ro_paths); - #endif - - /* -@@ -268,6 +270,8 @@ static struct lxc_config_t config_jump_table[] = { - { "lxc.isulad.init.args", set_config_init_args, get_config_init_args, clr_config_init_args, }, - { "lxc.isulad.populate.device", set_config_populate_device, get_config_populate_device, clr_config_populate_device, }, - { "lxc.isulad.umask", set_config_umask, get_config_umask, clr_config_umask, }, -+ { "lxc.isulad.rootfs.maskedpaths", set_config_rootfs_masked_paths, get_config_rootfs_masked_paths, clr_config_rootfs_masked_paths, }, -+ { "lxc.isulad.rootfs.ropaths", set_config_rootfs_ro_paths, get_config_rootfs_ro_paths, clr_config_rootfs_ro_paths, }, - #endif - }; - -@@ -6311,4 +6315,106 @@ static inline int clr_config_umask(const char *key, struct lxc_conf *c, - return 0; - } - -+/* isulad: set config for rootfs masked paths */ -+static int set_config_rootfs_masked_paths(const char *key, const char *value, -+ struct lxc_conf *lxc_conf, void *data) -+{ -+ struct lxc_list *list_item = NULL; -+ -+ if (lxc_config_value_empty(value)) -+ return lxc_clear_rootfs_masked_paths(lxc_conf); -+ -+ list_item = malloc(sizeof(*list_item)); -+ if (list_item == NULL) -+ goto on_error; -+ -+ list_item->elem = safe_strdup(value); -+ -+ lxc_list_add_tail(&lxc_conf->rootfs.maskedpaths, list_item); -+ -+ return 0; -+ -+on_error: -+ free(list_item); -+ -+ return -1; -+} -+ -+// isulad: get config rootfs masked paths -+static int get_config_rootfs_masked_paths(const char *key, char *retv, int inlen, -+ struct lxc_conf *c, void *data) -+{ -+ int len, fulllen = 0; -+ struct lxc_list *it = NULL; -+ -+ if (!retv) -+ inlen = 0; -+ else -+ memset(retv, 0, inlen); -+ -+ lxc_list_for_each(it, &c->rootfs.maskedpaths) { -+ strprint(retv, inlen, "%s\n", (char *)it->elem); -+ } -+ -+ return fulllen; -+} -+ -+/* isulad: set config for rootfs ro paths */ -+static int set_config_rootfs_ro_paths(const char *key, const char *value, -+ struct lxc_conf *lxc_conf, void *data) -+{ -+ struct lxc_list *list_item = NULL; -+ -+ if (lxc_config_value_empty(value)) -+ return lxc_clear_rootfs_ro_paths(lxc_conf); -+ -+ list_item = malloc(sizeof(*list_item)); -+ if (list_item == NULL) -+ goto on_error; -+ -+ list_item->elem = safe_strdup(value); -+ -+ lxc_list_add_tail(&lxc_conf->rootfs.ropaths, list_item); -+ -+ return 0; -+ -+on_error: -+ free(list_item); -+ -+ return -1; -+} -+ -+// isulad: get config rootfs ro paths -+static int get_config_rootfs_ro_paths(const char *key, char *retv, int inlen, -+ struct lxc_conf *c, void *data) -+{ -+ int len, fulllen = 0; -+ struct lxc_list *it = NULL; -+ -+ if (!retv) -+ inlen = 0; -+ else -+ memset(retv, 0, inlen); -+ -+ lxc_list_for_each(it, &c->rootfs.ropaths) { -+ strprint(retv, inlen, "%s\n", (char *)it->elem); -+ } -+ -+ return fulllen; -+} -+ -+/* isulad: clr config rootfs masked paths */ -+static inline int clr_config_rootfs_masked_paths(const char *key, struct lxc_conf *c, -+ void *data) -+{ -+ return lxc_clear_rootfs_masked_paths(c); -+} -+ -+/* isulad: clr config rootfs ro paths */ -+static inline int clr_config_rootfs_ro_paths(const char *key, struct lxc_conf *c, -+ void *data) -+{ -+ return lxc_clear_rootfs_ro_paths(c); -+} -+ - #endif --- -1.8.3.1 - diff --git a/0016-start-separate-i-and-t.patch b/0016-start-separate-i-and-t.patch deleted file mode 100644 index 65a0e4a..0000000 --- a/0016-start-separate-i-and-t.patch +++ /dev/null @@ -1,369 +0,0 @@ -From 204008167f00ddda3f5f2b0121bcf29b3d55c689 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 13 Apr 2020 21:17:15 +0800 -Subject: [PATCH 16/49] start: separate -i and -t - -Signed-off-by: LiFeng ---- - src/lxc/lxccontainer.c | 44 +++++++++++++++++- - src/lxc/lxccontainer.h | 27 +++++++++++ - src/lxc/start.c | 111 +++++++++++++++++++++++++++++++++++++++++++++- - src/lxc/start.h | 4 ++ - src/lxc/tools/arguments.h | 2 + - src/lxc/tools/lxc_start.c | 14 ++++++ - 6 files changed, 198 insertions(+), 4 deletions(-) - -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 64cde99..e27b63b 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -1163,12 +1163,18 @@ reboot: - goto on_error; - } - -- if (useinit) -+ if (useinit) { - ret = lxc_execute(c->name, argv, 1, handler, c->config_path, - c->daemonize, &c->error_num); -- else -+ } -+ else { -+#ifdef HAVE_ISULAD -+ handler->disable_pty = c->disable_pty; -+ handler->open_stdin = c->open_stdin; -+#endif - ret = lxc_start(argv, handler, c->config_path, c->daemonize, - &c->error_num); -+ } - - if (conf->reboot == REBOOT_REQ) { - INFO("Container requested reboot"); -@@ -5381,6 +5387,40 @@ static bool do_lxcapi_set_container_info_file(struct lxc_container *c, const cha - } - - WRAP_API_1(bool, lxcapi_set_container_info_file, const char *) -+ -+static bool do_lxcapi_want_disable_pty(struct lxc_container *c, bool state) -+{ -+ if (!c || !c->lxc_conf) -+ return false; -+ -+ if (container_mem_lock(c)) -+ return false; -+ -+ c->disable_pty = state; -+ -+ container_mem_unlock(c); -+ -+ return true; -+} -+ -+WRAP_API_1(bool, lxcapi_want_disable_pty, bool) -+ -+static bool do_lxcapi_want_open_stdin(struct lxc_container *c, bool state) -+{ -+ if (!c || !c->lxc_conf) -+ return false; -+ -+ if (container_mem_lock(c)) -+ return false; -+ -+ c->open_stdin = state; -+ -+ container_mem_unlock(c); -+ -+ return true; -+} -+ -+WRAP_API_1(bool, lxcapi_want_open_stdin, bool) - #endif - - struct lxc_container *lxc_container_new(const char *name, const char *configpath) -diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index fa9bd5e..de2ee46 100644 ---- a/src/lxc/lxccontainer.h -+++ b/src/lxc/lxccontainer.h -@@ -113,6 +113,11 @@ struct lxc_container { - * exit FIFO File to open used monitor the state of lxc monitor process. - */ - char *exit_fifo; -+ /*! Whether container wishes to create pty or pipes for console log */ -+ bool disable_pty; -+ -+ /*! Whether container wishes to keep stdin active */ -+ bool open_stdin; - #endif - - /*! -@@ -908,6 +913,28 @@ struct lxc_container { - bool (*set_terminal_winch)(struct lxc_container *c, unsigned int height, unsigned int width); - - bool (*set_exec_terminal_winch)(struct lxc_container *c, const char *suffix, unsigned int height, unsigned int width); -+ -+ /*! -+ * \brief Change whether the container wants to create pty or pipes -+ * from the console log. -+ * -+ * \param c Container. -+ * \param state Value for the disable pty bit (0 or 1). -+ * -+ * \return \c true on success, else \c false. -+ */ -+ bool (*want_disable_pty)(struct lxc_container *c, bool state); -+ -+ /*! -+ * \brief Change whether the container wants to keep stdin active -+ * for parent process of container -+ * -+ * \param c Container. -+ * \param state Value for the open_stdin bit (0 or 1). -+ * -+ * \return \c true on success, else \c false. -+ */ -+ bool (*want_open_stdin)(struct lxc_container *c, bool state); - #endif - }; - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 17766bc..145b015 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -580,6 +580,16 @@ int lxc_poll(const char *name, struct lxc_handler *handler) - - TRACE("Mainloop is ready"); - -+#ifdef HAVE_ISULAD -+ // iSulad: close stdin pipe if we do not want open_stdin with container stdin -+ if (!handler->conf->console.open_stdin) { -+ if (handler->conf->console.pipes[0][1] > 0) { -+ close(handler->conf->console.pipes[0][1]); -+ handler->conf->console.pipes[0][1] = -1; -+ } -+ } -+#endif -+ - ret = lxc_mainloop(&descr, -1); - close_prot_errno_disarm(descr.epfd); - if (ret < 0 || !handler->init_died) -@@ -733,6 +743,10 @@ int lxc_init(const char *name, struct lxc_handler *handler) - int ret; - const char *loglevel; - struct lxc_conf *conf = handler->conf; -+#ifdef HAVE_ISULAD -+ conf->console.disable_pty = handler->disable_pty; -+ conf->console.open_stdin = handler->open_stdin; -+#endif - - handler->monitor_pid = lxc_raw_getpid(); - status_fd = open("/proc/self/status", O_RDONLY | O_CLOEXEC); -@@ -1178,6 +1192,25 @@ static int do_start(void *data) - * means that migration won't work, but at least we won't spew output - * where it isn't wanted. - */ -+#ifdef HAVE_ISULAD -+ if (!handler->disable_pty && handler->daemonize && !handler->conf->autodev) { -+ char path[PATH_MAX]; -+ -+ ret = snprintf(path, sizeof(path), "%s/dev/null", -+ handler->conf->rootfs.mount); -+ if (ret < 0 || ret >= sizeof(path)) -+ goto out_warn_father; -+ -+ ret = access(path, F_OK); -+ if (ret != 0) { -+ devnull_fd = open_devnull(); -+ -+ if (devnull_fd < 0) -+ goto out_warn_father; -+ WARN("Using /dev/null from the host for container init's standard file descriptors. Migration will not work"); -+ } -+ } -+#else - if (handler->daemonize && !handler->conf->autodev) { - char path[PATH_MAX]; - -@@ -1195,6 +1228,7 @@ static int do_start(void *data) - WARN("Using /dev/null from the host for container init's standard file descriptors. Migration will not work"); - } - } -+#endif - - /* Ask father to setup cgroups and wait for him to finish. */ - ret = lxc_sync_barrier_parent(handler, LXC_SYNC_CGROUP); -@@ -1266,12 +1300,70 @@ static int do_start(void *data) - DEBUG("Set PR_SET_NO_NEW_PRIVS to block execve() gainable privileges"); - } - -+#ifdef HAVE_ISULAD -+ /* isulad: dup2 pipe[0][0] to container stdin, pipe[1][1] to container stdout, pipe[2][1] to container stderr */ -+ if (handler->disable_pty) { -+ if (handler->conf->console.pipes[0][1] >= 0) { -+ close(handler->conf->console.pipes[0][1]); -+ handler->conf->console.pipes[0][1] = -1; -+ } -+ -+ if (handler->conf->console.pipes[0][0] >= 0) { -+ ret = dup2(handler->conf->console.pipes[0][0], STDIN_FILENO); -+ if (ret < 0) -+ goto out_warn_father; -+ } -+ -+ if (handler->conf->console.pipes[1][0] >= 0) { -+ close(handler->conf->console.pipes[1][0]); -+ handler->conf->console.pipes[1][0] = -1; -+ } -+ -+ if (handler->conf->console.pipes[1][1] >= 0) { -+ ret = dup2(handler->conf->console.pipes[1][1], STDOUT_FILENO); -+ if (ret < 0) -+ goto out_warn_father; -+ } -+ if (handler->conf->console.pipes[2][0] >= 0) { -+ close(handler->conf->console.pipes[2][0]); -+ handler->conf->console.pipes[2][0] = -1; -+ } -+ -+ if (handler->conf->console.pipes[2][1] >= 0) { -+ ret = dup2(handler->conf->console.pipes[2][1], STDERR_FILENO); -+ if (ret < 0) -+ goto out_warn_father; -+ } -+ } -+#endif -+ - /* Some init's such as busybox will set sane tty settings on stdin, - * stdout, stderr which it thinks is the console. We already set them - * the way we wanted on the real terminal, and we want init to do its - * setup on its console ie. the pty allocated in lxc_terminal_setup() so - * make sure that that pty is stdin,stdout,stderr. - */ -+ setsid(); -+#ifdef HAVE_ISULAD -+ if (!handler->disable_pty && handler->conf->console.slave >= 0) { -+ /* isulad:make the given terminal as controlling terminal to avoid warning -+ * sh: cannot set terminal process group (-1): Inappropriate ioctl for device -+ * sh: no job control in this shell */ -+ if (ioctl(handler->conf->console.slave, TIOCSCTTY, NULL) < 0) { -+ ERROR("Faild to make the given terminal the controlling terminal of the calling process"); -+ goto out_warn_father; -+ } -+ if (handler->daemonize || !handler->conf->is_execute) -+ ret = set_stdfds(handler->conf->console.slave); -+ else -+ ret = lxc_terminal_set_stdfds(handler->conf->console.slave); -+ if (ret < 0) { -+ ERROR("Failed to redirect std{in,out,err} to pty file " -+ "descriptor %d", handler->conf->console.slave); -+ goto out_warn_father; -+ } -+ } -+#else - if (handler->conf->console.slave >= 0) { - if (handler->daemonize || !handler->conf->is_execute) - ret = set_stdfds(handler->conf->console.slave); -@@ -1283,6 +1375,7 @@ static int do_start(void *data) - goto out_warn_father; - } - } -+#endif - - /* If we mounted a temporary proc, then unmount it now. */ - tmp_proc_unmount(handler->conf); -@@ -1306,6 +1399,21 @@ static int do_start(void *data) - - close_prot_errno_disarm(handler->sigfd); - -+ #ifdef HAVE_ISULAD -+ if (!handler->disable_pty && handler->conf->console.slave < 0 && handler->daemonize) { -+ if (devnull_fd < 0) { -+ devnull_fd = open_devnull(); -+ if (devnull_fd < 0) -+ goto out_warn_father; -+ } -+ -+ ret = set_stdfds(devnull_fd); -+ if (ret < 0) { -+ ERROR("Failed to redirect std{in,out,err} to \"/dev/null\""); -+ goto out_warn_father; -+ } -+ } -+ #else - if (handler->conf->console.slave < 0 && handler->daemonize) { - if (devnull_fd < 0) { - devnull_fd = open_devnull(); -@@ -1319,11 +1427,10 @@ static int do_start(void *data) - goto out_warn_father; - } - } -+ #endif - - close_prot_errno_disarm(devnull_fd); - -- setsid(); -- - if (handler->conf->init_cwd) { - ret = chdir(handler->conf->init_cwd); - if (ret < 0) { -diff --git a/src/lxc/start.h b/src/lxc/start.h -index 1368d0e..5ea5fe2 100644 ---- a/src/lxc/start.h -+++ b/src/lxc/start.h -@@ -125,6 +125,10 @@ struct lxc_handler { - - #ifdef HAVE_ISULAD - int exit_code;/* isulad: record the exit code of container */ -+ /* Indicates whether should we using pipes or pty dup to std{in,out,err} for console log. */ -+ bool disable_pty; -+ /* Indicates whether should we keep stdin active. */ -+ bool open_stdin; - #endif - - }; -diff --git a/src/lxc/tools/arguments.h b/src/lxc/tools/arguments.h -index e0866d6..a6d9967 100644 ---- a/src/lxc/tools/arguments.h -+++ b/src/lxc/tools/arguments.h -@@ -45,6 +45,8 @@ struct lxc_arguments { - char *terminal_fifos[3]; /* isulad add, fifos used to redirct stdin/out/err */ - const char *exit_monitor_fifo; /* isulad: fifo used to monitor state of monitor process */ - const char *suffix; /* isulad add, suffix used for connect with parent of execed process*/ -+ int disable_pty; -+ int open_stdin; - #endif - - /* for lxc-console */ -diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c -index 76802df6..321c847 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -143,6 +143,12 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - case OPT_EXIT_FIFO: - args->exit_monitor_fifo = arg; - break; -+ case OPT_DISABLE_PTY: -+ args->disable_pty = 1; -+ break; -+ case OPT_OPEN_STDIN: -+ args->open_stdin = 1; -+ break; - #endif - - } -@@ -334,6 +340,14 @@ int main(int argc, char *argv[]) - if (my_args.exit_monitor_fifo != NULL) { - c->exit_fifo = safe_strdup(my_args.exit_monitor_fifo); - } -+ -+ if (my_args.disable_pty) { -+ c->want_disable_pty(c, true); -+ } -+ -+ if (my_args.open_stdin) { -+ c->want_open_stdin(c, true); -+ } - #endif - - if (my_args.console) --- -1.8.3.1 - diff --git a/0017-attach-add_terminal_fifos-Add-terminal-fifos-dynamic.patch b/0017-attach-add_terminal_fifos-Add-terminal-fifos-dynamic.patch deleted file mode 100644 index 30c1b77..0000000 --- a/0017-attach-add_terminal_fifos-Add-terminal-fifos-dynamic.patch +++ /dev/null @@ -1,289 +0,0 @@ -From 29c1823334219c03b1ef4d6b4965529b73ff071b Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 13 Apr 2020 21:39:35 +0800 -Subject: [PATCH 17/49] attach: add_terminal_fifos: Add terminal fifos - dynamically - -Signed-off-by: LiFeng ---- - src/lxc/commands.c | 94 +++++++++++++++++++++++++++++++++++++++++++++----- - src/lxc/commands.h | 8 +++++ - src/lxc/lxccontainer.c | 24 +++++++++++++ - src/lxc/terminal.c | 57 ++++++++++++++++++++++++++++++ - src/lxc/terminal.h | 4 +++ - 5 files changed, 178 insertions(+), 9 deletions(-) - -diff --git a/src/lxc/commands.c b/src/lxc/commands.c -index 991bca2..0ffc5c7 100644 ---- a/src/lxc/commands.c -+++ b/src/lxc/commands.c -@@ -75,15 +75,18 @@ static const char *lxc_cmd_str(lxc_cmd_t cmd) - [LXC_CMD_GET_CONFIG_ITEM] = "get_config_item", - [LXC_CMD_GET_NAME] = "get_name", - [LXC_CMD_GET_LXCPATH] = "get_lxcpath", -- [LXC_CMD_ADD_STATE_CLIENT] = "add_state_client", -- [LXC_CMD_CONSOLE_LOG] = "console_log", -+ [LXC_CMD_ADD_STATE_CLIENT] = "add_state_client", -+ [LXC_CMD_CONSOLE_LOG] = "console_log", - [LXC_CMD_SERVE_STATE_CLIENTS] = "serve_state_clients", - [LXC_CMD_SECCOMP_NOTIFY_ADD_LISTENER] = "seccomp_notify_add_listener", - [LXC_CMD_ADD_BPF_DEVICE_CGROUP] = "add_bpf_device_cgroup", -- [LXC_CMD_FREEZE] = "freeze", -- [LXC_CMD_UNFREEZE] = "unfreeze", -- [LXC_CMD_GET_CGROUP2_FD] = "get_cgroup2_fd", -+ [LXC_CMD_FREEZE] = "freeze", -+ [LXC_CMD_UNFREEZE] = "unfreeze", -+ [LXC_CMD_GET_CGROUP2_FD] = "get_cgroup2_fd", - [LXC_CMD_GET_INIT_PIDFD] = "get_init_pidfd", -+#ifdef HAVE_ISULAD -+ [LXC_CMD_SET_TERMINAL_FIFOS] = "set_terminal_fifos", -+#endif - }; - - if (cmd >= LXC_CMD_MAX) -@@ -1388,6 +1391,76 @@ static int lxc_cmd_get_cgroup2_fd_callback(int fd, struct lxc_cmd_req *req, - return 0; - } - -+#ifdef HAVE_ISULAD -+/* -+ * isulad: lxc_cmd_set_terminal_fifos: Set the fifos used for the container as terminal input/output -+ * -+ * @hashed_sock_name: hashed socket name -+ * -+ * Returns 0 when success, else when fail. -+ */ -+int lxc_cmd_set_terminal_fifos(const char *name, const char *lxcpath, const char *in_fifo, -+ const char *out_fifo, const char *err_fifo) -+{ -+ int ret = 0, stopped = 0; -+ int len = 0; -+ char *tmp = NULL; -+ const char *split = "&&&&", *none_fifo_name = "none"; -+ const char *cmd_in_fifo = in_fifo ? in_fifo : none_fifo_name; -+ const char *cmd_out_fifo = out_fifo ? out_fifo : none_fifo_name; -+ const char *cmd_err_fifo = err_fifo ? err_fifo : none_fifo_name; -+ -+ if (len + strlen(cmd_in_fifo) + strlen(split) + strlen(cmd_out_fifo) + -+ strlen(split) + strlen(cmd_err_fifo) == SIZE_MAX) -+ return -1; -+ len += strlen(cmd_in_fifo) + strlen(split) + strlen(cmd_out_fifo) + strlen(split) + strlen(cmd_err_fifo) + 1; -+ tmp = malloc(len); -+ if (tmp == NULL) -+ return -1; -+ ret = snprintf(tmp, len, "%s%s%s%s%s", cmd_in_fifo, split, cmd_out_fifo, split, cmd_err_fifo); -+ if (ret < 0 || ret >= len) { -+ ERROR("Failed to snprintf in fifo of command"); -+ free(tmp); -+ return -1; -+ } -+ -+ struct lxc_cmd_rr cmd = { -+ .req = { -+ .cmd = LXC_CMD_SET_TERMINAL_FIFOS, -+ .datalen = strlen(tmp)+1, -+ .data = tmp, -+ }, -+ }; -+ -+ ret = lxc_cmd(name, &cmd, &stopped, lxcpath, NULL); -+ if (ret < 0) { -+ ERROR("Failed to send command to container"); -+ free(tmp); -+ return -1; -+ } -+ -+ if (cmd.rsp.ret != 0) { -+ ERROR("Command response error:%d", cmd.rsp.ret); -+ free(tmp); -+ return -1; -+ } -+ -+ free(tmp); -+ return 0; -+} -+ -+static int lxc_cmd_set_terminal_fifos_callback(int fd, struct lxc_cmd_req *req, -+ struct lxc_handler *handler, struct lxc_epoll_descr *descr) -+{ -+ struct lxc_cmd_rsp rsp; -+ memset(&rsp, 0, sizeof(rsp)); -+ -+ rsp.ret = lxc_terminal_add_fifos(handler->conf, req->data);; -+ -+ return lxc_cmd_rsp_send(fd, &rsp); -+} -+#endif -+ - static int lxc_cmd_process(int fd, struct lxc_cmd_req *req, - struct lxc_handler *handler, - struct lxc_epoll_descr *descr) -@@ -1410,11 +1483,14 @@ static int lxc_cmd_process(int fd, struct lxc_cmd_req *req, - [LXC_CMD_CONSOLE_LOG] = lxc_cmd_console_log_callback, - [LXC_CMD_SERVE_STATE_CLIENTS] = lxc_cmd_serve_state_clients_callback, - [LXC_CMD_SECCOMP_NOTIFY_ADD_LISTENER] = lxc_cmd_seccomp_notify_add_listener_callback, -- [LXC_CMD_ADD_BPF_DEVICE_CGROUP] = lxc_cmd_add_bpf_device_cgroup_callback, -- [LXC_CMD_FREEZE] = lxc_cmd_freeze_callback, -- [LXC_CMD_UNFREEZE] = lxc_cmd_unfreeze_callback, -- [LXC_CMD_GET_CGROUP2_FD] = lxc_cmd_get_cgroup2_fd_callback, -+ [LXC_CMD_ADD_BPF_DEVICE_CGROUP] = lxc_cmd_add_bpf_device_cgroup_callback, -+ [LXC_CMD_FREEZE] = lxc_cmd_freeze_callback, -+ [LXC_CMD_UNFREEZE] = lxc_cmd_unfreeze_callback, -+ [LXC_CMD_GET_CGROUP2_FD] = lxc_cmd_get_cgroup2_fd_callback, - [LXC_CMD_GET_INIT_PIDFD] = lxc_cmd_get_init_pidfd_callback, -+#ifdef HAVE_ISULAD -+ [LXC_CMD_SET_TERMINAL_FIFOS] = lxc_cmd_set_terminal_fifos_callback, -+#endif - }; - - if (req->cmd >= LXC_CMD_MAX) -diff --git a/src/lxc/commands.h b/src/lxc/commands.h -index 9e52484..95815e6 100644 ---- a/src/lxc/commands.h -+++ b/src/lxc/commands.h -@@ -38,6 +38,9 @@ typedef enum { - LXC_CMD_UNFREEZE, - LXC_CMD_GET_CGROUP2_FD, - LXC_CMD_GET_INIT_PIDFD, -+#ifdef HAVE_ISULAD -+ LXC_CMD_SET_TERMINAL_FIFOS, -+#endif - LXC_CMD_MAX, - } lxc_cmd_t; - -@@ -130,4 +133,9 @@ extern int lxc_cmd_freeze(const char *name, const char *lxcpath, int timeout); - extern int lxc_cmd_unfreeze(const char *name, const char *lxcpath, int timeout); - extern int lxc_cmd_get_cgroup2_fd(const char *name, const char *lxcpath); - -+#ifdef HAVE_ISULAD -+extern int lxc_cmd_set_terminal_fifos(const char *name, const char *lxcpath, -+ const char *in_fifo, const char *out_fifo, const char *err_fifo); -+#endif -+ - #endif /* __commands_h */ -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index e27b63b..d0e6e2b 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -5421,6 +5421,29 @@ static bool do_lxcapi_want_open_stdin(struct lxc_container *c, bool state) - } - - WRAP_API_1(bool, lxcapi_want_open_stdin, bool) -+ -+/* isulad add clean resources */ -+static bool do_lxcapi_add_terminal_fifo(struct lxc_container *c, const char *in_fifo, const char *out_fifo, const char *err_fifo) -+{ -+ bool ret = true; -+ -+ if (!c || !c->lxc_conf) -+ return false; -+ if (container_mem_lock(c)) { -+ ERROR("Error getting mem lock"); -+ return false; -+ } -+ -+ if (lxc_cmd_set_terminal_fifos(c->name, c->config_path, in_fifo, out_fifo, err_fifo)) { -+ ERROR("Error set console fifos"); -+ ret = false; -+ } -+ -+ container_mem_unlock(c); -+ return ret; -+} -+ -+WRAP_API_3(bool, lxcapi_add_terminal_fifo, const char *, const char *, const char *) - #endif - - struct lxc_container *lxc_container_new(const char *name, const char *configpath) -@@ -5567,6 +5590,7 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath - #ifdef HAVE_ISULAD - c->set_container_info_file = lxcapi_set_container_info_file; - c->set_terminal_init_fifos = lxcapi_set_terminal_default_fifos; -+ c->add_terminal_fifos = lxcapi_add_terminal_fifo; - #endif - return c; - -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 775743d..4d7c2cd 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -1607,6 +1607,63 @@ err: - lxc_terminal_delete(terminal); - return -ENODEV; - } -+ -+/* isulad: add fifos dynamic*/ -+int lxc_terminal_add_fifos(struct lxc_conf *conf, const char *fifonames) -+{ -+ int ret = 0; -+ struct lxc_terminal *terminal = &conf->console; -+ int fifofd_in = -1; -+ char *tmp = NULL, *saveptr = NULL, *in = NULL, *out = NULL, *err = NULL; -+ const char *none_fifo_name = "none"; -+ -+ tmp = safe_strdup(fifonames); -+ -+ in = strtok_r(tmp, "&&&&", &saveptr); -+ if (!in) { -+ ret = -1; -+ goto free_out; -+ } -+ if (strcmp(in, none_fifo_name) == 0) -+ in = NULL; -+ -+ out = strtok_r(NULL, "&&&&", &saveptr); -+ if (!out) { -+ ret = -1; -+ goto free_out; -+ } -+ if (strcmp(out, none_fifo_name) == 0) -+ out = NULL; -+ -+ err = strtok_r(NULL, "&&&&", &saveptr); -+ if (!err) { -+ ret = -1; -+ goto free_out; -+ } -+ if (strcmp(err, none_fifo_name) == 0) -+ err = NULL; -+ -+ ret = lxc_terminal_set_fifo(terminal, in, out, err, &fifofd_in); -+ if (ret < 0) { -+ ERROR("Faild to set fifos to console config"); -+ ret = -1; -+ goto free_out; -+ } -+ -+ if (lxc_mainloop_add_handler(terminal->descr, fifofd_in, -+ lxc_terminal_io_cb, terminal)) { -+ ERROR("console fifo not added to mainloop"); -+ lxc_terminal_delete_fifo(fifofd_in, &terminal->fifos); -+ ret = -1; -+ goto free_out; -+ } -+ -+free_out: -+ if (tmp) -+ free(tmp); -+ return ret; -+} -+ - #else - int lxc_terminal_create(struct lxc_terminal *terminal) - { -diff --git a/src/lxc/terminal.h b/src/lxc/terminal.h -index dfc03c6..b4160b3 100644 ---- a/src/lxc/terminal.h -+++ b/src/lxc/terminal.h -@@ -274,4 +274,8 @@ extern void lxc_terminal_init(struct lxc_terminal *terminal); - extern int lxc_terminal_map_ids(struct lxc_conf *c, - struct lxc_terminal *terminal); - -+#ifdef HAVE_ISULAD -+int lxc_terminal_add_fifos(struct lxc_conf *conf, const char *fifonames); -+#endif -+ - #endif /* __LXC_TERMINAL_H */ --- -1.8.3.1 - diff --git a/0018-pty-setup-pty-after-setup-rootfs-mount-options.patch b/0018-pty-setup-pty-after-setup-rootfs-mount-options.patch deleted file mode 100644 index 1612fe7..0000000 --- a/0018-pty-setup-pty-after-setup-rootfs-mount-options.patch +++ /dev/null @@ -1,157 +0,0 @@ -From 8d2f80168d89abc317affee358120dcf25b8af19 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Tue, 14 Apr 2020 12:50:55 +0800 -Subject: [PATCH 18/49] pty: setup pty after setup rootfs mount options - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 16 +++++++++---- - src/lxc/start.c | 2 +- - src/lxc/terminal.c | 67 ++++++++++++++++++++++++++++++++++++------------------ - 3 files changed, 57 insertions(+), 28 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index fce241b..2e93227 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -3748,14 +3748,20 @@ int lxc_setup(struct lxc_handler *handler) - if (lxc_conf->autodev > 0) - (void)lxc_setup_boot_id(); - -+#ifdef HAVE_ISULAD -+ if (setup_rootfs_mountopts(&lxc_conf->rootfs)) { -+ return log_error(-1, "failed to set rootfs for '%s'", name); -+ } -+ if (lxc_conf->rootfs.path) { -+ ret = lxc_setup_devpts(lxc_conf); -+ if (ret < 0) { -+ return log_error(-1, "Failed to setup new devpts instance for '%s'", name); -+ } -+ } -+#else - ret = lxc_setup_devpts(lxc_conf); - if (ret < 0) - return log_error(-1, "Failed to setup new devpts instance"); -- --#ifdef HAVE_ISULAD -- if (setup_rootfs_mountopts(&lxc_conf->rootfs)) { -- return log_error(-1, "failed to set rootfs for '%s'", name); -- } - #endif - - ret = lxc_create_ttys(handler); -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 145b015..800f884 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -596,7 +596,7 @@ int lxc_poll(const char *name, struct lxc_handler *handler) - goto out_mainloop_console; - - if (has_console) -- ret = lxc_mainloop(&descr_console, 0); -+ ret = lxc_mainloop(&descr_console, 100); - - out_mainloop_console: - if (has_console) { -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 4d7c2cd..1f46d49 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -186,6 +186,42 @@ static int lxc_terminal_truncate_log_file(struct lxc_terminal *terminal) - return lxc_unpriv(ftruncate(terminal->log_fd, 0)); - } - -+#ifdef HAVE_ISULAD -+/* -+ * isulad: support mult-logfiles -+ * */ -+static int lxc_terminal_rename_old_log_file(struct lxc_terminal *terminal) -+{ -+ int ret; -+ unsigned int i; -+ char tmp[PATH_MAX] = {0}; -+ char *rename_fname = NULL; -+ -+ for (i = terminal->log_rotate - 1; i > 1; i--) { -+ ret = snprintf(tmp, PATH_MAX, "%s.%u", terminal->log_path, i); -+ if (ret < 0 || ret >= PATH_MAX) { -+ free(rename_fname); -+ return -EFBIG; -+ } -+ free(rename_fname); -+ rename_fname = safe_strdup(tmp); -+ ret = snprintf(tmp, PATH_MAX, "%s.%u", terminal->log_path, (i - 1)); -+ if (ret < 0 || ret >= PATH_MAX) { -+ free(rename_fname); -+ return -EFBIG; -+ } -+ ret = lxc_unpriv(rename(tmp, rename_fname)); -+ if (ret < 0 && errno != ENOENT) { -+ free(rename_fname); -+ return ret; -+ } -+ } -+ -+ free(rename_fname); -+ return 0; -+} -+#endif -+ - static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) - { - __do_free char *tmp = NULL; -@@ -199,6 +235,15 @@ static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) - if (terminal->log_fd < 0) - return -EBADF; - -+#ifdef HAVE_ISULAD -+ /* isuald: rotate old log file first */ -+ ret = lxc_terminal_rename_old_log_file(terminal); -+ if(ret != 0) { -+ ERROR("Rename old log file failed"); -+ return ret; -+ } -+#endif -+ - len = strlen(terminal->log_path) + sizeof(".1"); - tmp = must_realloc(NULL, len); - -@@ -1512,21 +1557,6 @@ static int lxc_terminal_fifo_default(struct lxc_terminal *terminal) - return 0; - } - --static int use_unix_newline(int master_fd) --{ -- struct termios oldtios; -- int ret; -- -- ret = tcgetattr(master_fd, &oldtios); -- if (ret < 0) -- return -1; -- oldtios.c_oflag &= ~ONLCR; -- ret = tcsetattr(master_fd, TCSAFLUSH, &oldtios); -- if (ret < 0) -- return -1; -- return 0; --} -- - int lxc_terminal_create(struct lxc_terminal *terminal) - { - int ret; -@@ -1544,13 +1574,6 @@ int lxc_terminal_create(struct lxc_terminal *terminal) - goto err; - } - -- /* isulad: clear ONLCR flag */ -- ret = use_unix_newline(terminal->master); -- if (ret < 0) { -- SYSERROR("Failed to clear ONLCR flag on terminal master"); -- goto err; -- } -- - ret = fd_cloexec(terminal->master, true); - if (ret < 0) { - SYSERROR("Failed to set FD_CLOEXEC flag on terminal master"); --- -1.8.3.1 - diff --git a/0019-resize-implement-resize-function-in-exec-start.patch b/0019-resize-implement-resize-function-in-exec-start.patch deleted file mode 100644 index cb27896..0000000 --- a/0019-resize-implement-resize-function-in-exec-start.patch +++ /dev/null @@ -1,963 +0,0 @@ -From f690df5983011dd3b61f0e139c3e939f3fecf37a Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Tue, 14 Apr 2020 16:04:15 +0800 -Subject: [PATCH 19/49] resize: implement resize function in exec/start - -Signed-off-by: LiFeng ---- - src/lxc/Makefile.am | 10 +- - src/lxc/af_unix.c | 33 +++- - src/lxc/af_unix.h | 5 +- - src/lxc/attach.c | 51 +++++- - src/lxc/commands.c | 50 ++++++ - src/lxc/commands.h | 2 + - src/lxc/exec_commands.c | 416 ++++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/exec_commands.h | 73 +++++++++ - src/lxc/lxccontainer.c | 50 ++++++ - src/lxc/terminal.c | 27 ++++ - src/lxc/terminal.h | 1 + - 11 files changed, 710 insertions(+), 8 deletions(-) - create mode 100644 src/lxc/exec_commands.c - create mode 100644 src/lxc/exec_commands.h - -diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am -index 23935e5..c288c51 100644 ---- a/src/lxc/Makefile.am -+++ b/src/lxc/Makefile.am -@@ -52,14 +52,15 @@ noinst_HEADERS = api_extensions.h \ - utils.h \ - uuid.h - --#if HAVE_ISULAD -+if HAVE_ISULAD - noinst_HEADERS += isulad_utils.h path.h \ - json/json_common.h json/defs.h \ - json/oci_runtime_hooks.h \ - json/logger_json_file.h \ - json/oci_runtime_spec.h \ -- json/read-file.h --#endif -+ json/read-file.h \ -+ exec_commands.h -+endif - - if IS_BIONIC - noinst_HEADERS += ../include/fexecve.h \ -@@ -172,7 +173,8 @@ liblxc_la_SOURCES += isulad_utils.c isulad_utils.h \ - json/oci_runtime_hooks.c json/oci_runtime_hooks.h \ - json/logger_json_file.c json/logger_json_file.h \ - json/oci_runtime_spec.c json/oci_runtime_spec.h \ -- json/read-file.c json/read-file.h -+ json/read-file.c json/read-file.h \ -+ exec_commands.c exec_commands.h - endif - - if IS_BIONIC -diff --git a/src/lxc/af_unix.c b/src/lxc/af_unix.c -index e172088..9f268be 100644 ---- a/src/lxc/af_unix.c -+++ b/src/lxc/af_unix.c -@@ -168,7 +168,7 @@ int lxc_unix_send_fds(int fd, int *sendfds, int num_sendfds, void *data, - } - - static int lxc_abstract_unix_recv_fds_iov(int fd, int *recvfds, int num_recvfds, -- struct iovec *iov, size_t iovlen) -+ struct iovec *iov, size_t iovlen, unsigned int timeout) - { - __do_free char *cmsgbuf = NULL; - int ret; -@@ -188,6 +188,22 @@ static int lxc_abstract_unix_recv_fds_iov(int fd, int *recvfds, int num_recvfds, - msg.msg_iov = iov; - msg.msg_iovlen = iovlen; - -+#ifdef HAVE_ISULAD -+ struct timeval out; -+ if (timeout > 0) { -+ memset(&out, 0, sizeof(out)); -+ out.tv_sec = timeout / 1000000; -+ out.tv_usec = timeout % 1000000; -+ ret = setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, -+ (const void *)&out, sizeof(out)); -+ if (ret < 0) { -+ ERROR("Failed to set %u timeout on containter " -+ "state socket", timeout); -+ return ret; -+ } -+ } -+#endif -+ - do { - ret = recvmsg(fd, &msg, 0); - } while (ret < 0 && errno == EINTR); -@@ -220,8 +236,21 @@ int lxc_abstract_unix_recv_fds(int fd, int *recvfds, int num_recvfds, - .iov_base = data ? data : buf, - .iov_len = data ? size : sizeof(buf), - }; -- return lxc_abstract_unix_recv_fds_iov(fd, recvfds, num_recvfds, &iov, 1); -+ return lxc_abstract_unix_recv_fds_iov(fd, recvfds, num_recvfds, &iov, 1, 0); -+} -+ -+#ifdef HAVE_ISULAD -+int lxc_abstract_unix_recv_fds_timeout(int fd, int *recvfds, int num_recvfds, -+ void *data, size_t size, unsigned int timeout) -+{ -+ char buf[1] = {0}; -+ struct iovec iov = { -+ .iov_base = data ? data : buf, -+ .iov_len = data ? size : sizeof(buf), -+ }; -+ return lxc_abstract_unix_recv_fds_iov(fd, recvfds, num_recvfds, &iov, 1, timeout); - } -+#endif - - int lxc_abstract_unix_send_credential(int fd, void *data, size_t size) - { -diff --git a/src/lxc/af_unix.h b/src/lxc/af_unix.h -index 2531b0b..6943a61 100644 ---- a/src/lxc/af_unix.h -+++ b/src/lxc/af_unix.h -@@ -27,5 +27,8 @@ extern int lxc_unix_sockaddr(struct sockaddr_un *ret, const char *path); - extern int lxc_unix_connect(struct sockaddr_un *addr); - extern int lxc_unix_connect_type(struct sockaddr_un *addr, int type); - extern int lxc_socket_set_timeout(int fd, int rcv_timeout, int snd_timeout); -- -+#ifdef HAVE_ISULAD -+int lxc_abstract_unix_recv_fds_timeout(int fd, int *recvfds, int num_recvfds, -+ void *data, size_t size, unsigned int timeout); -+#endif - #endif /* __LXC_AF_UNIX_H */ -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index e66ca1c..33946bb 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -45,6 +45,10 @@ - #include "terminal.h" - #include "utils.h" - -+#ifdef HAVE_ISULAD -+#include "exec_commands.h" -+#endif -+ - #if HAVE_SYS_PERSONALITY_H - #include - #endif -@@ -998,6 +1002,13 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - struct lxc_conf *conf; - char *name, *lxcpath; - struct attach_clone_payload payload = {0}; -+#ifdef HAVE_ISULAD -+ struct lxc_exec_command_handler exec_command; -+ const char *suffix = options->suffix; -+ -+ exec_command.maincmd_fd = -1; -+ exec_command.terminal = &terminal; -+#endif - - ret = access("/proc/self/ns", X_OK); - if (ret) -@@ -1129,6 +1140,12 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - } - - terminal.log_fd = options->log_fd; -+#ifdef HAVE_ISULAD -+ if (suffix != NULL) { -+ exec_command.maincmd_fd = lxc_exec_cmd_init(name, lxcpath, suffix); -+ exec_command.terminal = &terminal; -+ } -+#endif - } else { - lxc_terminal_init(&terminal); - } -@@ -1169,6 +1186,15 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - ret = socketpair(PF_LOCAL, SOCK_STREAM | SOCK_CLOEXEC, 0, ipc_sockets); - if (ret < 0) { - SYSERROR("Could not set up required IPC mechanism for attaching"); -+#ifdef HAVE_ISULAD -+ if (options->attach_flags & LXC_ATTACH_TERMINAL) { -+ lxc_terminal_delete(&terminal); -+ lxc_terminal_conf_free(&terminal); -+ if (exec_command.maincmd_fd != -1) { -+ close(exec_command.maincmd_fd); -+ } -+ } -+#endif - free(cwd); - lxc_proc_put_context_info(init_ctx); - return -1; -@@ -1184,6 +1210,17 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - pid = fork(); - if (pid < 0) { - SYSERROR("Failed to create first subprocess"); -+#ifdef HAVE_ISULAD -+ if (options->attach_flags & LXC_ATTACH_TERMINAL) { -+ lxc_terminal_delete(&terminal); -+ lxc_terminal_conf_free(&terminal); -+ if (exec_command.maincmd_fd != -1) { -+ close(exec_command.maincmd_fd); -+ } -+ } -+ close(ipc_sockets[0]); -+ close(ipc_sockets[1]); -+#endif - free(cwd); - lxc_proc_put_context_info(init_ctx); - return -1; -@@ -1239,7 +1276,9 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - ret = lxc_attach_terminal_mainloop_init(&terminal, &descr); - if (ret < 0) - goto on_error; -- -+#ifdef HAVE_ISULAD -+ (void)lxc_exec_cmd_mainloop_add(&descr, &exec_command); -+#endif - TRACE("Initialized terminal mainloop"); - } - -@@ -1352,6 +1391,11 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - if (options->attach_flags & LXC_ATTACH_TERMINAL) { - lxc_terminal_delete(&terminal); - lxc_terminal_conf_free(&terminal); -+#ifdef HAVE_ISULAD -+ if (exec_command.maincmd_fd != -1) { -+ close(exec_command.maincmd_fd); -+ } -+#endif - } - - lxc_proc_put_context_info(init_ctx); -@@ -1365,6 +1409,11 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - lxc_attach_terminal_close_master(&terminal); - lxc_attach_terminal_close_peer(&terminal); - lxc_attach_terminal_close_log(&terminal); -+#ifdef HAVE_ISULAD -+ if (exec_command.maincmd_fd != -1) { -+ close(exec_command.maincmd_fd); -+ } -+#endif - } - - /* Wait for the parent to have setup cgroups. */ -diff --git a/src/lxc/commands.c b/src/lxc/commands.c -index 0ffc5c7..184a219 100644 ---- a/src/lxc/commands.c -+++ b/src/lxc/commands.c -@@ -86,6 +86,7 @@ static const char *lxc_cmd_str(lxc_cmd_t cmd) - [LXC_CMD_GET_INIT_PIDFD] = "get_init_pidfd", - #ifdef HAVE_ISULAD - [LXC_CMD_SET_TERMINAL_FIFOS] = "set_terminal_fifos", -+ [LXC_CMD_SET_TERMINAL_WINCH] = "set_terminal_winch", - #endif - }; - -@@ -1459,6 +1460,54 @@ static int lxc_cmd_set_terminal_fifos_callback(int fd, struct lxc_cmd_req *req, - - return lxc_cmd_rsp_send(fd, &rsp); - } -+ -+struct lxc_cmd_set_terminal_winch_request { -+ unsigned int height; -+ unsigned int width; -+}; -+ -+int lxc_cmd_set_terminal_winch(const char *name, const char *lxcpath, unsigned int height, unsigned int width) -+{ -+ int ret = 0, stopped = 0; -+ struct lxc_cmd_set_terminal_winch_request data = { 0 }; -+ -+ data.height = height; -+ data.width = width; -+ -+ struct lxc_cmd_rr cmd = { -+ .req = { -+ .cmd = LXC_CMD_SET_TERMINAL_WINCH, -+ .datalen = sizeof(struct lxc_cmd_set_terminal_winch_request), -+ .data = &data, -+ }, -+ }; -+ -+ ret = lxc_cmd(name, &cmd, &stopped, lxcpath, NULL); -+ if (ret < 0) { -+ ERROR("Failed to send command to container"); -+ return -1; -+ } -+ -+ if (cmd.rsp.ret != 0) { -+ ERROR("Command response error:%d", cmd.rsp.ret); -+ return -1; -+ } -+ return 0; -+} -+ -+static int lxc_cmd_set_terminal_winch_callback(int fd, struct lxc_cmd_req *req, -+ struct lxc_handler *handler, struct lxc_epoll_descr *descr) -+{ -+ struct lxc_cmd_rsp rsp; -+ struct lxc_cmd_set_terminal_winch_request *data = (struct lxc_cmd_set_terminal_winch_request *)(req->data); -+ memset(&rsp, 0, sizeof(rsp)); -+ -+ rsp.ret = lxc_set_terminal_winsz(&handler->conf->console, data->height, data->width);; -+ -+ return lxc_cmd_rsp_send(fd, &rsp); -+ -+} -+ - #endif - - static int lxc_cmd_process(int fd, struct lxc_cmd_req *req, -@@ -1490,6 +1539,7 @@ static int lxc_cmd_process(int fd, struct lxc_cmd_req *req, - [LXC_CMD_GET_INIT_PIDFD] = lxc_cmd_get_init_pidfd_callback, - #ifdef HAVE_ISULAD - [LXC_CMD_SET_TERMINAL_FIFOS] = lxc_cmd_set_terminal_fifos_callback, -+ [LXC_CMD_SET_TERMINAL_WINCH] = lxc_cmd_set_terminal_winch_callback, - #endif - }; - -diff --git a/src/lxc/commands.h b/src/lxc/commands.h -index 95815e6..aa8289d 100644 ---- a/src/lxc/commands.h -+++ b/src/lxc/commands.h -@@ -40,6 +40,7 @@ typedef enum { - LXC_CMD_GET_INIT_PIDFD, - #ifdef HAVE_ISULAD - LXC_CMD_SET_TERMINAL_FIFOS, -+ LXC_CMD_SET_TERMINAL_WINCH, - #endif - LXC_CMD_MAX, - } lxc_cmd_t; -@@ -136,6 +137,7 @@ extern int lxc_cmd_get_cgroup2_fd(const char *name, const char *lxcpath); - #ifdef HAVE_ISULAD - extern int lxc_cmd_set_terminal_fifos(const char *name, const char *lxcpath, - const char *in_fifo, const char *out_fifo, const char *err_fifo); -+extern int lxc_cmd_set_terminal_winch(const char *name, const char *lxcpath, unsigned int height, unsigned int width); - #endif - - #endif /* __commands_h */ -diff --git a/src/lxc/exec_commands.c b/src/lxc/exec_commands.c -new file mode 100644 -index 0000000..00129cb ---- /dev/null -+++ b/src/lxc/exec_commands.c -@@ -0,0 +1,416 @@ -+/****************************************************************************** -+ * Copyright (c) Huawei Technologies Co., Ltd. 2019. All rights reserved. -+ * Author: lifeng -+ * Create: 2019-12-08 -+ * Description: provide container definition -+ * lxc: linux Container library -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ ******************************************************************************/ -+ -+#ifndef _GNU_SOURCE -+#define _GNU_SOURCE 1 -+#endif -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "af_unix.h" -+#include "cgroup.h" -+#include "exec_commands.h" -+#include "commands_utils.h" -+#include "conf.h" -+#include "config.h" -+#include "confile.h" -+#include "log.h" -+#include "lxc.h" -+#include "lxclock.h" -+#include "mainloop.h" -+#include "monitor.h" -+#include "terminal.h" -+#include "utils.h" -+ -+lxc_log_define(commands_exec, lxc); -+ -+static const char *lxc_exec_cmd_str(lxc_exec_cmd_t cmd) -+{ -+ static const char *const cmdname[LXC_EXEC_CMD_MAX] = { -+ [LXC_EXEC_CMD_SET_TERMINAL_WINCH] = "set_exec_terminal_winch", -+ }; -+ -+ if (cmd >= LXC_EXEC_CMD_MAX) -+ return "Invalid request"; -+ -+ return cmdname[cmd]; -+} -+ -+static int lxc_exec_cmd_rsp_recv(int sock, struct lxc_exec_cmd_rr *cmd) -+{ -+ int ret, rspfd; -+ struct lxc_exec_cmd_rsp *rsp = &cmd->rsp; -+ -+ ret = lxc_abstract_unix_recv_fds_timeout(sock, &rspfd, 1, rsp, sizeof(*rsp), 1000 * 1000); -+ if (ret < 0) { -+ SYSERROR("Failed to receive response for command \"%s\"", -+ lxc_exec_cmd_str(cmd->req.cmd)); -+ -+ if (errno == ECONNRESET || errno == EAGAIN || errno == EWOULDBLOCK) { -+ errno = ECONNRESET; /*isulad set errno ECONNRESET when timeout */ -+ return -1; -+ } -+ -+ return -1; -+ } -+ TRACE("Command \"%s\" received response", lxc_exec_cmd_str(cmd->req.cmd)); -+ -+ if (rsp->datalen == 0) { -+ DEBUG("Response data length for command \"%s\" is 0", -+ lxc_exec_cmd_str(cmd->req.cmd)); -+ return ret; -+ } -+ -+ if (rsp->datalen > LXC_CMD_DATA_MAX) { -+ ERROR("Response data for command \"%s\" is too long: %d bytes > %d", -+ lxc_exec_cmd_str(cmd->req.cmd), rsp->datalen, LXC_CMD_DATA_MAX); -+ return -1; -+ } -+ -+ rsp->data = malloc(rsp->datalen); -+ if (!rsp->data) { -+ errno = ENOMEM; -+ ERROR("Failed to allocate response buffer for command \"%s\"", -+ lxc_exec_cmd_str(cmd->req.cmd)); -+ return -1; -+ } -+ -+ ret = lxc_recv_nointr(sock, rsp->data, rsp->datalen, 0); -+ if (ret != rsp->datalen) { -+ SYSERROR("Failed to receive response data for command \"%s\"", -+ lxc_exec_cmd_str(cmd->req.cmd)); -+ return -1; -+ } -+ -+ return ret; -+} -+ -+static int lxc_exec_cmd_rsp_send(int fd, struct lxc_exec_cmd_rsp *rsp) -+{ -+ ssize_t ret; -+ -+ errno = EMSGSIZE; -+ ret = lxc_send_nointr(fd, rsp, sizeof(*rsp), MSG_NOSIGNAL); -+ if (ret < 0 || (size_t)ret != sizeof(*rsp)) { -+ SYSERROR("Failed to send command response %zd", ret); -+ return -1; -+ } -+ -+ if (!rsp->data || rsp->datalen <= 0) -+ return 0; -+ -+ errno = EMSGSIZE; -+ ret = lxc_send_nointr(fd, rsp->data, rsp->datalen, MSG_NOSIGNAL); -+ if (ret < 0 || ret != (ssize_t)rsp->datalen) { -+ SYSWARN("Failed to send command response data %zd", ret); -+ return -1; -+ } -+ -+ return 0; -+} -+ -+static int lxc_exec_cmd_send(const char *name, struct lxc_exec_cmd_rr *cmd, -+ const char *lxcpath, const char *hashed_sock_name, const char *suffix) -+{ -+ int client_fd, saved_errno; -+ ssize_t ret = -1; -+ -+ client_fd = lxc_cmd_connect(name, lxcpath, hashed_sock_name, suffix); -+ if (client_fd < 0) -+ return -1; -+ -+ ret = lxc_abstract_unix_send_credential(client_fd, &cmd->req, -+ sizeof(cmd->req)); -+ if (ret < 0 || (size_t)ret != sizeof(cmd->req)) -+ goto on_error; -+ -+ if (cmd->req.datalen <= 0) -+ return client_fd; -+ -+ errno = EMSGSIZE; -+ ret = lxc_send_nointr(client_fd, (void *)cmd->req.data, -+ cmd->req.datalen, MSG_NOSIGNAL); -+ if (ret < 0 || ret != (ssize_t)cmd->req.datalen) -+ goto on_error; -+ -+ return client_fd; -+ -+on_error: -+ saved_errno = errno; -+ close(client_fd); -+ errno = saved_errno; -+ -+ return -1; -+} -+ -+static int lxc_exec_cmd(const char *name, struct lxc_exec_cmd_rr *cmd, const char *lxcpath, const char *hashed_sock_name, const char *suffix) -+{ -+ int client_fd = -1; -+ int saved_errno; -+ int ret = -1; -+ -+ client_fd = lxc_exec_cmd_send(name, cmd, lxcpath, hashed_sock_name, suffix); -+ if (client_fd < 0) { -+ SYSTRACE("Command \"%s\" failed to connect command socket", -+ lxc_exec_cmd_str(cmd->req.cmd)); -+ return -1; -+ } -+ -+ ret = lxc_exec_cmd_rsp_recv(client_fd, cmd); -+ -+ saved_errno = errno; -+ close(client_fd); -+ errno = saved_errno; -+ return ret; -+} -+ -+int lxc_exec_cmd_set_terminal_winch(const char *name, const char *lxcpath, const char *suffix, unsigned int height, unsigned int width) -+{ -+ int ret = 0; -+ struct lxc_exec_cmd_set_terminal_winch_request data = { 0 }; -+ -+ data.height = height; -+ data.width = width; -+ -+ struct lxc_exec_cmd_rr cmd = { -+ .req = { -+ .cmd = LXC_EXEC_CMD_SET_TERMINAL_WINCH, -+ .datalen = sizeof(struct lxc_exec_cmd_set_terminal_winch_request), -+ .data = &data, -+ }, -+ }; -+ -+ ret = lxc_exec_cmd(name, &cmd, lxcpath, NULL, suffix); -+ if (ret < 0) { -+ ERROR("Failed to send command to container"); -+ return -1; -+ } -+ -+ if (cmd.rsp.ret != 0) { -+ ERROR("Command response error:%d", cmd.rsp.ret); -+ return -1; -+ } -+ return 0; -+} -+ -+static int lxc_exec_cmd_set_terminal_winch_callback(int fd, struct lxc_exec_cmd_req *req, -+ struct lxc_exec_command_handler *handler) -+{ -+ struct lxc_exec_cmd_rsp rsp; -+ struct lxc_exec_cmd_set_terminal_winch_request *data = (struct lxc_exec_cmd_set_terminal_winch_request *)(req->data); -+ memset(&rsp, 0, sizeof(rsp)); -+ -+ rsp.ret = lxc_set_terminal_winsz(handler->terminal, data->height, data->width);; -+ -+ return lxc_exec_cmd_rsp_send(fd, &rsp); -+ -+} -+ -+static int lxc_exec_cmd_process(int fd, struct lxc_exec_cmd_req *req, -+ struct lxc_exec_command_handler *handler) -+{ -+ typedef int (*callback)(int, struct lxc_exec_cmd_req *, struct lxc_exec_command_handler *); -+ -+ callback cb[LXC_EXEC_CMD_MAX] = { -+ [LXC_EXEC_CMD_SET_TERMINAL_WINCH] = lxc_exec_cmd_set_terminal_winch_callback, -+ }; -+ -+ if (req->cmd >= LXC_EXEC_CMD_MAX) { -+ ERROR("Undefined command id %d", req->cmd); -+ return -1; -+ } -+ return cb[req->cmd](fd, req, handler); -+} -+ -+static void lxc_exec_cmd_fd_cleanup(int fd, struct lxc_epoll_descr *descr) -+{ -+ lxc_mainloop_del_handler(descr, fd); -+ close(fd); -+ return; -+} -+ -+static int lxc_exec_cmd_handler(int fd, uint32_t events, void *data, -+ struct lxc_epoll_descr *descr) -+{ -+ int ret; -+ struct lxc_exec_cmd_req req; -+ void *reqdata = NULL; -+ struct lxc_exec_command_handler *handler = data; -+ -+ ret = lxc_abstract_unix_rcv_credential(fd, &req, sizeof(req)); -+ if (ret < 0) { -+ SYSERROR("Failed to receive data on command socket for command " -+ "\"%s\"", lxc_exec_cmd_str(req.cmd)); -+ -+ if (errno == EACCES) { -+ /* We don't care for the peer, just send and close. */ -+ struct lxc_exec_cmd_rsp rsp = {.ret = ret}; -+ -+ lxc_exec_cmd_rsp_send(fd, &rsp); -+ } -+ -+ goto out_close; -+ } -+ -+ if (ret == 0) -+ goto out_close; -+ -+ if (ret != sizeof(req)) { -+ WARN("Failed to receive full command request. Ignoring request " -+ "for \"%s\"", lxc_exec_cmd_str(req.cmd)); -+ ret = -1; -+ goto out_close; -+ } -+ -+ if (req.datalen > LXC_CMD_DATA_MAX) { -+ ERROR("Received command data length %d is too large for " -+ "command \"%s\"", req.datalen, lxc_exec_cmd_str(req.cmd)); -+ errno = EFBIG; -+ ret = -EFBIG; -+ goto out_close; -+ } -+ -+ if (req.datalen > 0) { -+ reqdata = alloca(req.datalen); -+ if (!reqdata) { -+ ERROR("Failed to allocate memory for \"%s\" command", -+ lxc_exec_cmd_str(req.cmd)); -+ errno = ENOMEM; -+ ret = -ENOMEM; -+ goto out_close; -+ } -+ -+ ret = lxc_recv_nointr(fd, reqdata, req.datalen, 0); -+ if (ret != req.datalen) { -+ WARN("Failed to receive full command request. Ignoring " -+ "request for \"%s\"", lxc_exec_cmd_str(req.cmd)); -+ ret = LXC_MAINLOOP_ERROR; -+ goto out_close; -+ } -+ -+ req.data = reqdata; -+ } -+ -+ ret = lxc_exec_cmd_process(fd, &req, handler); -+ if (ret) { -+ /* This is not an error, but only a request to close fd. */ -+ ret = LXC_MAINLOOP_CONTINUE; -+ goto out_close; -+ } -+ -+out: -+ return ret; -+ -+out_close: -+ lxc_exec_cmd_fd_cleanup(fd, descr); -+ goto out; -+} -+ -+static int lxc_exec_cmd_accept(int fd, uint32_t events, void *data, -+ struct lxc_epoll_descr *descr) -+{ -+ int connection = -1; -+ int opt = 1, ret = -1; -+ -+ connection = accept(fd, NULL, 0); -+ if (connection < 0) { -+ SYSERROR("Failed to accept connection to run command"); -+ return LXC_MAINLOOP_ERROR; -+ } -+ -+ ret = fcntl(connection, F_SETFD, FD_CLOEXEC); -+ if (ret < 0) { -+ SYSERROR("Failed to set close-on-exec on incoming command connection"); -+ goto out_close; -+ } -+ -+ ret = setsockopt(connection, SOL_SOCKET, SO_PASSCRED, &opt, sizeof(opt)); -+ if (ret < 0) { -+ SYSERROR("Failed to enable necessary credentials on command socket"); -+ goto out_close; -+ } -+ -+ ret = lxc_mainloop_add_handler(descr, connection, lxc_exec_cmd_handler, data); -+ if (ret) { -+ ERROR("Failed to add command handler"); -+ goto out_close; -+ } -+ -+out: -+ return ret; -+ -+out_close: -+ close(connection); -+ goto out; -+} -+ -+int lxc_exec_cmd_init(const char *name, const char *lxcpath, const char *suffix) -+{ -+ int fd, ret; -+ char path[LXC_AUDS_ADDR_LEN] = {0}; -+ -+ ret = lxc_make_abstract_socket_name(path, sizeof(path), name, lxcpath, NULL, suffix); -+ if (ret < 0) -+ return -1; -+ TRACE("Creating abstract unix socket \"%s\"", &path[1]); -+ -+ fd = lxc_abstract_unix_open(path, SOCK_STREAM, 0); -+ if (fd < 0) { -+ SYSERROR("Failed to create command socket %s", &path[1]); -+ if (errno == EADDRINUSE) -+ ERROR("Container \"%s\" appears to be already running", name); -+ -+ return -1; -+ } -+ -+ ret = fcntl(fd, F_SETFD, FD_CLOEXEC); -+ if (ret < 0) { -+ SYSERROR("Failed to set FD_CLOEXEC on command socket file descriptor"); -+ close(fd); -+ return -1; -+ } -+ -+ return fd; -+} -+ -+int lxc_exec_cmd_mainloop_add(struct lxc_epoll_descr *descr, struct lxc_exec_command_handler *handler) -+{ -+ int ret; -+ int fd = handler->maincmd_fd; -+ -+ ret = lxc_mainloop_add_handler(descr, fd, lxc_exec_cmd_accept, handler); -+ if (ret < 0) { -+ ERROR("Failed to add handler for command socket"); -+ close(fd); -+ } -+ -+ return ret; -+} -diff --git a/src/lxc/exec_commands.h b/src/lxc/exec_commands.h -new file mode 100644 -index 0000000..2581ee9 ---- /dev/null -+++ b/src/lxc/exec_commands.h -@@ -0,0 +1,73 @@ -+/****************************************************************************** -+ * Copyright (c) Huawei Technologies Co., Ltd. 2019. All rights reserved. -+ * Author: lifeng -+ * Create: 2019-12-08 -+ * Description: provide container definition -+ * lxc: linux Container library -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ ******************************************************************************/ -+ -+#ifndef __LXC_EXEC_COMMANDS_H -+#define __LXC_EXEC_COMMANDS_H -+ -+#include -+#include -+#include -+ -+#include "lxccontainer.h" -+#include "macro.h" -+#include "state.h" -+#include "terminal.h" -+ -+struct lxc_exec_command_handler { -+ int maincmd_fd; -+ struct lxc_terminal *terminal; -+}; -+ -+typedef enum { -+ LXC_EXEC_CMD_SET_TERMINAL_WINCH, -+ LXC_EXEC_CMD_MAX, -+} lxc_exec_cmd_t; -+ -+struct lxc_exec_cmd_req { -+ lxc_exec_cmd_t cmd; -+ int datalen; -+ const void *data; -+}; -+ -+struct lxc_exec_cmd_rsp { -+ int ret; /* 0 on success, -errno on failure */ -+ int datalen; -+ void *data; -+}; -+ -+struct lxc_exec_cmd_rr { -+ struct lxc_exec_cmd_req req; -+ struct lxc_exec_cmd_rsp rsp; -+}; -+ -+struct lxc_exec_cmd_set_terminal_winch_request { -+ unsigned int height; -+ unsigned int width; -+}; -+ -+struct lxc_epoll_descr; -+struct lxc_handler; -+ -+extern int lxc_exec_cmd_init(const char *name, const char *lxcpath, const char *suffix); -+extern int lxc_exec_cmd_mainloop_add(struct lxc_epoll_descr *descr, struct lxc_exec_command_handler *handler); -+extern int lxc_exec_cmd_set_terminal_winch(const char *name, const char *lxcpath, const char *suffix, unsigned int height, unsigned int width); -+ -+#endif /* __exec_commands_h */ -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index d0e6e2b..75c1bbc 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -62,6 +62,10 @@ - #include "utils.h" - #include "version.h" - -+#ifdef HAVE_ISULAD -+#include "exec_commands.h" -+#endif -+ - #if HAVE_OPENSSL - #include - #endif -@@ -5444,6 +5448,50 @@ static bool do_lxcapi_add_terminal_fifo(struct lxc_container *c, const char *in_ - } - - WRAP_API_3(bool, lxcapi_add_terminal_fifo, const char *, const char *, const char *) -+ -+static bool do_lxcapi_set_terminal_winch(struct lxc_container *c, unsigned int height, unsigned int width) -+{ -+ bool ret = true; -+ -+ if (!c || !c->lxc_conf) -+ return false; -+ if (container_mem_lock(c)) { -+ ERROR("Error getting mem lock"); -+ return false; -+ } -+ -+ if (lxc_cmd_set_terminal_winch(c->name, c->config_path, height, width)) { -+ ERROR("Error set terminal winch"); -+ ret = false; -+ } -+ -+ container_mem_unlock(c); -+ return ret; -+} -+ -+WRAP_API_2(bool, lxcapi_set_terminal_winch, unsigned int, unsigned int) -+ -+static bool do_lxcapi_set_exec_terminal_winch(struct lxc_container *c, const char *suffix, unsigned int height, unsigned int width) -+{ -+ bool ret = true; -+ -+ if (!c || !c->lxc_conf) -+ return false; -+ if (container_mem_lock(c)) { -+ ERROR("Error getting mem lock"); -+ return false; -+ } -+ -+ if (lxc_exec_cmd_set_terminal_winch(c->name, c->config_path, suffix, height, width)) { -+ ERROR("Error set terminal winch"); -+ ret = false; -+ } -+ -+ container_mem_unlock(c); -+ return ret; -+} -+ -+WRAP_API_3(bool, lxcapi_set_exec_terminal_winch, const char *, unsigned int, unsigned int) - #endif - - struct lxc_container *lxc_container_new(const char *name, const char *configpath) -@@ -5591,6 +5639,8 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath - c->set_container_info_file = lxcapi_set_container_info_file; - c->set_terminal_init_fifos = lxcapi_set_terminal_default_fifos; - c->add_terminal_fifos = lxcapi_add_terminal_fifo; -+ c->set_terminal_winch = lxcapi_set_terminal_winch; -+ c->set_exec_terminal_winch = lxcapi_set_exec_terminal_winch; - #endif - return c; - -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 1f46d49..39a6718 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -187,6 +187,33 @@ static int lxc_terminal_truncate_log_file(struct lxc_terminal *terminal) - } - - #ifdef HAVE_ISULAD -+ -+int lxc_set_terminal_winsz(struct lxc_terminal *terminal, unsigned int height, unsigned int width) -+{ -+ int ret = 0; -+ struct winsize wsz; -+ -+ if (terminal->master < 0) { -+ return 0; -+ } -+ -+ ret = ioctl(terminal->master, TIOCGWINSZ, &wsz); -+ if (ret < 0) { -+ WARN("Failed to get window size"); -+ return -1; -+ } -+ wsz.ws_col = width; -+ wsz.ws_row = height; -+ -+ ret = ioctl(terminal->master, TIOCSWINSZ, &wsz); -+ if (ret < 0) -+ WARN("Failed to set window size"); -+ else -+ DEBUG("Set window size to %d columns and %d rows", wsz.ws_col, -+ wsz.ws_row); -+ return ret; -+} -+ - /* - * isulad: support mult-logfiles - * */ -diff --git a/src/lxc/terminal.h b/src/lxc/terminal.h -index b4160b3..f49142d 100644 ---- a/src/lxc/terminal.h -+++ b/src/lxc/terminal.h -@@ -276,6 +276,7 @@ extern int lxc_terminal_map_ids(struct lxc_conf *c, - - #ifdef HAVE_ISULAD - int lxc_terminal_add_fifos(struct lxc_conf *conf, const char *fifonames); -+int lxc_set_terminal_winsz(struct lxc_terminal *terminal, unsigned int height, unsigned int width); - #endif - - #endif /* __LXC_TERMINAL_H */ --- -1.8.3.1 - diff --git a/0020-confile-decode-escape-charactors-in-config.patch b/0020-confile-decode-escape-charactors-in-config.patch deleted file mode 100644 index e0c786e..0000000 --- a/0020-confile-decode-escape-charactors-in-config.patch +++ /dev/null @@ -1,104 +0,0 @@ -From 200cc2a1e95c0c0f17cf14f16d8ceb60ca3628c0 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Tue, 14 Apr 2020 16:16:14 +0800 -Subject: [PATCH 20/49] confile: decode escape charactors in config - -Signed-off-by: LiFeng ---- - src/lxc/confile.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 62 insertions(+) - -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index bf0fdf0..a28c5da 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -2732,6 +2732,54 @@ struct parse_line_conf { - bool from_include; - }; - -+#ifdef HAVE_ISULAD -+// escape_string_decode compress some escape characters -+static char *escape_string_decode(const char *src) -+{ -+ size_t src_end = 0; -+ size_t dst_end = 0; -+ size_t len = 0; -+ char *dst = NULL; -+ -+ if (src == NULL) { -+ return NULL; -+ } -+ -+ len = strlen(src); -+ if (len == 0) { -+ return NULL; -+ } -+ -+ dst = calloc(1, len + 1); -+ if (dst == NULL) { -+ ERROR("Out of memory"); -+ return NULL; -+ } -+ -+ while(src_end < len) { -+ if (src[src_end] == '\\') { -+ switch (src[++src_end]) -+ { -+ case 'r': dst[dst_end] = '\r'; break; -+ case 'n': dst[dst_end] = '\n'; break; -+ case 'f': dst[dst_end] = '\f'; break; -+ case 'b': dst[dst_end] = '\b'; break; -+ case 't': dst[dst_end] = '\t'; break; -+ case '\\': dst[dst_end] = '\\'; break; -+ // default do not decode -+ default: dst[dst_end++] = '\\'; dst[dst_end] = src[src_end]; break; -+ } -+ } else { -+ dst[dst_end] = src[src_end]; -+ } -+ dst_end++; -+ src_end++; -+ } -+ -+ return dst; -+} -+#endif -+ - static int parse_line(char *buffer, void *data) - { - char *dot, *key, *line, *linep, *value; -@@ -2740,6 +2788,9 @@ static int parse_line(char *buffer, void *data) - int ret = 0; - char *dup = buffer; - struct parse_line_conf *plc = data; -+#ifdef HAVE_ISULAD -+ char *value_decode = NULL; -+#endif - - /* If there are newlines in the config file we should keep them. */ - empty_line = lxc_is_line_empty(dup); -@@ -2806,10 +2857,21 @@ static int parse_line(char *buffer, void *data) - goto on_error; - } - -+#ifdef HAVE_ISULAD -+ value_decode = escape_string_decode(value); -+ if (value_decode == NULL) { -+ ERROR("Value %s decode failed", value); -+ } -+ ret = config->set(key, value_decode ? value_decode: value, plc->conf, NULL); -+#else - ret = config->set(key, value, plc->conf, NULL); -+#endif - - on_error: - free(linep); -+#ifdef HAVE_ISULAD -+ free(value_decode); -+#endif - - return ret; - } --- -1.8.3.1 - diff --git a/0021-cgroup-add-retry-for-destory-cgroups.patch b/0021-cgroup-add-retry-for-destory-cgroups.patch deleted file mode 100644 index 0302337..0000000 --- a/0021-cgroup-add-retry-for-destory-cgroups.patch +++ /dev/null @@ -1,387 +0,0 @@ -From 4814d02fd3d364b599707b3cb298a8cc945033f9 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Tue, 14 Apr 2020 17:07:24 +0800 -Subject: [PATCH 21/49] cgroup: add retry for destory cgroups - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 105 +++++++++++++++++++++++++ - src/lxc/cgroups/cgroup.h | 4 + - src/lxc/start.c | 195 ++++++++++++++++++++++++++++++++++++++++++++++- - 3 files changed, 303 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 881dd39..00270ab 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1000,6 +1000,106 @@ static int cgroup_tree_remove_wrapper(void *data) - return cgroup_tree_remove(arg->hierarchies, arg->container_cgroup); - } - -+#ifdef HAVE_ISULAD -+ -+static int isulad_cgroup_tree_remove(struct hierarchy **hierarchies, -+ const char *container_cgroup) -+{ -+ if (!container_cgroup || !hierarchies) -+ return 0; -+ -+ for (int i = 0; hierarchies[i]; i++) { -+ struct hierarchy *h = hierarchies[i]; -+ int ret; -+ -+ if (!h->container_full_path) -+ continue; -+ -+ ret = lxc_rm_rf(h->container_full_path); -+ if (ret < 0) { -+ SYSERROR("Failed to destroy \"%s\"", h->container_full_path); -+ return -1; -+ } -+ -+ free_disarm(h->container_full_path); -+ } -+ -+ return 0; -+} -+ -+static int isulad_cgroup_tree_remove_wrapper(void *data) -+{ -+ struct generic_userns_exec_data *arg = data; -+ uid_t nsuid = (arg->conf->root_nsuid_map != NULL) ? 0 : arg->conf->init_uid; -+ gid_t nsgid = (arg->conf->root_nsgid_map != NULL) ? 0 : arg->conf->init_gid; -+ int ret; -+ -+ if (!lxc_setgroups(0, NULL) && errno != EPERM) -+ return log_error_errno(-1, errno, "Failed to setgroups(0, NULL)"); -+ -+ ret = setresgid(nsgid, nsgid, nsgid); -+ if (ret < 0) -+ return log_error_errno(-1, errno, "Failed to setresgid(%d, %d, %d)", -+ (int)nsgid, (int)nsgid, (int)nsgid); -+ -+ ret = setresuid(nsuid, nsuid, nsuid); -+ if (ret < 0) -+ return log_error_errno(-1, errno, "Failed to setresuid(%d, %d, %d)", -+ (int)nsuid, (int)nsuid, (int)nsuid); -+ -+ return isulad_cgroup_tree_remove(arg->hierarchies, arg->container_cgroup); -+} -+ -+__cgfsng_ops static bool isulad_cgfsng_payload_destroy(struct cgroup_ops *ops, -+ struct lxc_handler *handler) -+{ -+ int ret; -+ -+ if (!ops) { -+ ERROR("Called with uninitialized cgroup operations"); -+ return false; -+ } -+ -+ if (!ops->hierarchies) { -+ return false; -+ } -+ -+ if (!handler) { -+ ERROR("Called with uninitialized handler"); -+ return false; -+ } -+ -+ if (!handler->conf) { -+ ERROR("Called with uninitialized conf"); -+ return false; -+ } -+ -+#ifdef HAVE_STRUCT_BPF_CGROUP_DEV_CTX -+ ret = bpf_program_cgroup_detach(handler->conf->cgroup2_devices); -+ if (ret < 0) -+ WARN("Failed to detach bpf program from cgroup"); -+#endif -+ -+ if (handler->conf && !lxc_list_empty(&handler->conf->id_map)) { -+ struct generic_userns_exec_data wrap = { -+ .conf = handler->conf, -+ .container_cgroup = ops->container_cgroup, -+ .hierarchies = ops->hierarchies, -+ .origuid = 0, -+ }; -+ ret = userns_exec_1(handler->conf, isulad_cgroup_tree_remove_wrapper, -+ &wrap, "cgroup_tree_remove_wrapper"); -+ } else { -+ ret = isulad_cgroup_tree_remove(ops->hierarchies, ops->container_cgroup); -+ } -+ if (ret < 0) { -+ SYSWARN("Failed to destroy cgroups"); -+ return false; -+ } -+ -+ return true; -+} -+#else - __cgfsng_ops static void cgfsng_payload_destroy(struct cgroup_ops *ops, - struct lxc_handler *handler) - { -@@ -1044,6 +1144,7 @@ __cgfsng_ops static void cgfsng_payload_destroy(struct cgroup_ops *ops, - if (ret < 0) - SYSWARN("Failed to destroy cgroups"); - } -+#endif - - #ifdef HAVE_ISULAD - __cgfsng_ops static void cgfsng_monitor_destroy(struct cgroup_ops *ops, -@@ -4107,7 +4208,11 @@ struct cgroup_ops *cgfsng_ops_init(struct lxc_conf *conf) - return NULL; - - cgfsng_ops->data_init = cgfsng_data_init; -+#ifdef HAVE_ISULAD -+ cgfsng_ops->payload_destroy = isulad_cgfsng_payload_destroy; -+#else - cgfsng_ops->payload_destroy = cgfsng_payload_destroy; -+#endif - cgfsng_ops->monitor_destroy = cgfsng_monitor_destroy; - cgfsng_ops->monitor_create = cgfsng_monitor_create; - cgfsng_ops->monitor_enter = cgfsng_monitor_enter; -diff --git a/src/lxc/cgroups/cgroup.h b/src/lxc/cgroups/cgroup.h -index dcdc76b..a9048c4 100644 ---- a/src/lxc/cgroups/cgroup.h -+++ b/src/lxc/cgroups/cgroup.h -@@ -144,7 +144,11 @@ struct cgroup_ops { - cgroup_layout_t cgroup_layout; - - int (*data_init)(struct cgroup_ops *ops, struct lxc_conf *conf); -+#ifdef HAVE_ISULAD -+ bool (*payload_destroy)(struct cgroup_ops *ops, struct lxc_handler *handler); -+#else - void (*payload_destroy)(struct cgroup_ops *ops, struct lxc_handler *handler); -+#endif - void (*monitor_destroy)(struct cgroup_ops *ops, struct lxc_handler *handler); - bool (*monitor_create)(struct cgroup_ops *ops, struct lxc_handler *handler); - bool (*monitor_enter)(struct cgroup_ops *ops, struct lxc_handler *handler); -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 800f884..0942c31 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -879,6 +879,170 @@ out_restore_sigmask: - return -1; - } - -+#ifdef HAVE_ISULAD -+void trim_line(char *s) -+{ -+ size_t len; -+ -+ len = strlen(s); -+ while ((len > 1) && (s[len - 1] == '\n')) -+ s[--len] = '\0'; -+} -+ -+static int _read_procs_file(const char *path, pid_t **pids, size_t *len) -+{ -+ FILE *f; -+ char *line = NULL; -+ size_t sz = 0; -+ pid_t *tmp_pids = NULL; -+ -+ f = fopen_cloexec(path, "r"); -+ if (!f) -+ return -1; -+ -+ while (getline(&line, &sz, f) != -1) { -+ pid_t pid; -+ trim_line(line); -+ pid = (pid_t)atoll(line); -+ if (lxc_mem_realloc((void **)&tmp_pids, sizeof(pid_t) * (*len + 1), *pids, sizeof(pid_t) * (*len)) != 0) { -+ free(*pids); -+ *pids = NULL; -+ ERROR("out of memory"); -+ free(line); -+ fclose(f); -+ return -1; -+ } -+ *pids = tmp_pids; -+ -+ (*pids)[*len] = pid; -+ (*len)++; -+ } -+ -+ free(line); -+ fclose(f); -+ return 0; -+} -+ -+static int _recursive_read_cgroup_procs(const char *dirpath, pid_t **pids, size_t *len) -+{ -+ struct dirent *direntp = NULL; -+ DIR *dir = NULL; -+ int ret, failed = 0; -+ char pathname[PATH_MAX]; -+ -+ dir = opendir(dirpath); -+ if (dir == NULL) { -+ WARN("Failed to open \"%s\"", dirpath); -+ return 0; -+ } -+ -+ while ((direntp = readdir(dir))) { -+ struct stat mystat; -+ int rc; -+ -+ if (!strcmp(direntp->d_name, ".") || -+ !strcmp(direntp->d_name, "..")) -+ continue; -+ -+ rc = snprintf(pathname, PATH_MAX, "%s/%s", dirpath, direntp->d_name); -+ if (rc < 0 || rc >= PATH_MAX) { -+ failed = 1; -+ continue; -+ } -+ -+ if (strcmp(direntp->d_name, "cgroup.procs") == 0) { -+ if (_read_procs_file(pathname, pids, len)) { -+ failed = 1; -+ -+ } -+ continue; -+ } -+ -+ ret = lstat(pathname, &mystat); -+ if (ret) { -+ failed = 1; -+ continue; -+ } -+ -+ if (S_ISDIR(mystat.st_mode)) { -+ if (_recursive_read_cgroup_procs(pathname, pids, len) < 0) -+ failed = 1; -+ } -+ } -+ -+ ret = closedir(dir); -+ if (ret) { -+ WARN("Failed to close directory \"%s\"", dirpath); -+ failed = 1; -+ } -+ -+ return failed ? -1 : 0; -+} -+ -+int get_all_pids(struct cgroup_ops *cg_ops, pid_t **pids, size_t *len) -+{ -+ const char *devices_path = NULL; -+ -+ devices_path = cg_ops->get_cgroup_full_path(cg_ops, "devices"); -+ if (!file_exists(devices_path)) { -+ return 0; -+ } -+ -+ return _recursive_read_cgroup_procs(devices_path, pids, len); -+} -+ -+static int set_cgroup_freezer(struct cgroup_ops *cg_ops, const char *value) -+{ -+ char *fullpath; -+ int ret; -+ -+ fullpath = must_make_path(cg_ops->get_cgroup_full_path(cg_ops, "freezer"), "freezer.state", NULL); -+ ret = lxc_write_to_file(fullpath, value, strlen(value), false, 0666); -+ free(fullpath); -+ return ret; -+} -+ -+/* isulad: kill all process in container cgroup path */ -+static void signal_all_processes(struct lxc_handler *handler) -+{ -+ int ret; -+ struct cgroup_ops *cg_ops = handler->cgroup_ops; -+ pid_t *pids = NULL; -+ size_t len = 0, i; -+ -+ ret = set_cgroup_freezer(cg_ops, "FROZEN"); -+ if (ret < 0 && errno != ENOENT) { -+ WARN("cgroup_set frozen failed"); -+ } -+ -+ ret = get_all_pids(cg_ops, &pids, &len); -+ if (ret < 0) { -+ WARN("failed to get all pids"); -+ } -+ -+ for (i = 0; i < len; i++) { -+ ret = kill(pids[i], SIGKILL); -+ if (ret < 0 && errno != ESRCH) { -+ WARN("Can not kill process (pid=%d) with SIGKILL for container %s", pids[i], handler->name); -+ } -+ } -+ -+ ret = set_cgroup_freezer(cg_ops, "THAWED"); -+ if (ret < 0 && errno != ENOENT) { -+ WARN("cgroup_set thawed failed"); -+ } -+ -+ for (i = 0; i < len; i++) { -+ ret = lxc_wait_for_pid_status(pids[i]); -+ if (ret < 0 && errno != ECHILD) { -+ WARN("Failed to wait pid %d for container %s: %s", pids[i], handler->name, strerror(errno)); -+ } -+ } -+ -+ free(pids); -+} -+#endif -+ - void lxc_end(struct lxc_handler *handler) - { - int ret; -@@ -952,11 +1116,37 @@ void lxc_end(struct lxc_handler *handler) - - lsm_process_cleanup(handler->conf, handler->lxcpath); - -+#ifdef HAVE_ISULAD -+ // close maincmd fd before destroy cgroup for isulad -+ if (handler->conf->reboot == REBOOT_NONE) { -+ /* For all new state clients simply close the command socket. -+ * This will inform all state clients that the container is -+ * STOPPED and also prevents a race between a open()/close() on -+ * the command socket causing a new process to get ECONNREFUSED -+ * because we haven't yet closed the command socket. -+ */ -+ close_prot_errno_disarm(handler->conf->maincmd_fd); -+ TRACE("Closed command socket"); -+ } -+ int retry_count = 0; -+ int max_retry = 10; -+retry: -+ if (cgroup_ops != NULL && !cgroup_ops->payload_destroy(cgroup_ops, handler)) { -+ TRACE("Trying to kill all subprocess"); -+ signal_all_processes(handler); -+ TRACE("Finished kill all subprocess"); -+ if (retry_count < max_retry) { -+ usleep(100 * 1000); /* 100 millisecond */ -+ retry_count++; -+ goto retry; -+ } -+ SYSERROR("Failed to destroy cgroup path for container: \"%s\"", handler->name); -+ } -+#else - if (cgroup_ops) { - cgroup_ops->payload_destroy(cgroup_ops, handler); - cgroup_ops->monitor_destroy(cgroup_ops, handler); - } -- - if (handler->conf->reboot == REBOOT_NONE) { - /* For all new state clients simply close the command socket. - * This will inform all state clients that the container is -@@ -966,7 +1156,10 @@ void lxc_end(struct lxc_handler *handler) - */ - close_prot_errno_disarm(handler->conf->maincmd_fd); - TRACE("Closed command socket"); -+ } -+#endif - -+ if (handler->conf->reboot == REBOOT_NONE) { - /* This function will try to connect to the legacy lxc-monitord - * state server and only exists for backwards compatibility. - */ --- -1.8.3.1 - diff --git a/0022-support-terminal-log.patch b/0022-support-terminal-log.patch deleted file mode 100644 index 4935f67..0000000 --- a/0022-support-terminal-log.patch +++ /dev/null @@ -1,313 +0,0 @@ -From cd19f650d43fdae95e7e72bebe207f4ddc9deb85 Mon Sep 17 00:00:00 2001 -From: haozi007 -Date: Mon, 13 Apr 2020 19:18:26 +0800 -Subject: [PATCH 22/49] support terminal log - -Signed-off-by: haozi007 ---- - src/lxc/commands.c | 14 ++++++------ - src/lxc/conf.c | 6 ++++++ - src/lxc/confile.c | 3 +++ - src/lxc/log.c | 54 +++++++++++++++++++++++------------------------ - src/lxc/lxccontainer.c | 2 ++ - src/lxc/start.c | 48 ++++++++++++++++++++--------------------- - src/lxc/terminal.c | 1 + - src/lxc/tools/lxc_start.c | 6 ++++++ - 8 files changed, 76 insertions(+), 58 deletions(-) - -diff --git a/src/lxc/commands.c b/src/lxc/commands.c -index 184a219..b21c12b 100644 ---- a/src/lxc/commands.c -+++ b/src/lxc/commands.c -@@ -80,9 +80,9 @@ static const char *lxc_cmd_str(lxc_cmd_t cmd) - [LXC_CMD_SERVE_STATE_CLIENTS] = "serve_state_clients", - [LXC_CMD_SECCOMP_NOTIFY_ADD_LISTENER] = "seccomp_notify_add_listener", - [LXC_CMD_ADD_BPF_DEVICE_CGROUP] = "add_bpf_device_cgroup", -- [LXC_CMD_FREEZE] = "freeze", -- [LXC_CMD_UNFREEZE] = "unfreeze", -- [LXC_CMD_GET_CGROUP2_FD] = "get_cgroup2_fd", -+ [LXC_CMD_FREEZE] = "freeze", -+ [LXC_CMD_UNFREEZE] = "unfreeze", -+ [LXC_CMD_GET_CGROUP2_FD] = "get_cgroup2_fd", - [LXC_CMD_GET_INIT_PIDFD] = "get_init_pidfd", - #ifdef HAVE_ISULAD - [LXC_CMD_SET_TERMINAL_FIFOS] = "set_terminal_fifos", -@@ -1532,10 +1532,10 @@ static int lxc_cmd_process(int fd, struct lxc_cmd_req *req, - [LXC_CMD_CONSOLE_LOG] = lxc_cmd_console_log_callback, - [LXC_CMD_SERVE_STATE_CLIENTS] = lxc_cmd_serve_state_clients_callback, - [LXC_CMD_SECCOMP_NOTIFY_ADD_LISTENER] = lxc_cmd_seccomp_notify_add_listener_callback, -- [LXC_CMD_ADD_BPF_DEVICE_CGROUP] = lxc_cmd_add_bpf_device_cgroup_callback, -- [LXC_CMD_FREEZE] = lxc_cmd_freeze_callback, -- [LXC_CMD_UNFREEZE] = lxc_cmd_unfreeze_callback, -- [LXC_CMD_GET_CGROUP2_FD] = lxc_cmd_get_cgroup2_fd_callback, -+ [LXC_CMD_ADD_BPF_DEVICE_CGROUP] = lxc_cmd_add_bpf_device_cgroup_callback, -+ [LXC_CMD_FREEZE] = lxc_cmd_freeze_callback, -+ [LXC_CMD_UNFREEZE] = lxc_cmd_unfreeze_callback, -+ [LXC_CMD_GET_CGROUP2_FD] = lxc_cmd_get_cgroup2_fd_callback, - [LXC_CMD_GET_INIT_PIDFD] = lxc_cmd_get_init_pidfd_callback, - #ifdef HAVE_ISULAD - [LXC_CMD_SET_TERMINAL_FIFOS] = lxc_cmd_set_terminal_fifos_callback, -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 2e93227..4088363 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -1767,6 +1767,9 @@ static int lxc_setup_ttydir_console(const struct lxc_rootfs *rootfs, - if (ret < 0 && errno != EEXIST) - return log_error_errno(-errno, errno, "Failed to create console"); - -+#ifdef HAVE_ISULAD -+ if (console->slave > 0) { -+#endif - ret = fchmod(console->slave, S_IXUSR | S_IXGRP); - if (ret < 0) - return log_error_errno(-errno, errno, "Failed to set mode \"0%o\" to \"%s\"", S_IXUSR | S_IXGRP, console->name); -@@ -1776,6 +1779,9 @@ static int lxc_setup_ttydir_console(const struct lxc_rootfs *rootfs, - if (ret < 0) - return log_error_errno(-1, errno, "Failed to mount \"%s\" on \"%s\"", console->name, lxcpath); - DEBUG("Mounted \"%s\" onto \"%s\"", console->name, lxcpath); -+#ifdef HAVE_ISULAD -+ } -+#endif - - /* bind mount '/dev//console' to '/dev/console' */ - ret = safe_mount(lxcpath, path, "none", MS_BIND, 0, rootfs_path); -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index a28c5da..0fcebd4 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -2301,11 +2301,14 @@ static int set_config_console_rotate(const char *key, const char *value, - if (lxc_safe_uint(value, &lxc_conf->console.log_rotate) < 0) - return -1; - -+#ifndef HAVE_ISULAD -+ /* isulad: support rotate muti-files */ - if (lxc_conf->console.log_rotate > 1) { - ERROR("The \"lxc.console.rotate\" config key can only be set " - "to 0 or 1"); - return -1; - } -+#endif - - return 0; - } -diff --git a/src/lxc/log.c b/src/lxc/log.c -index 9794582..79caa2c 100644 ---- a/src/lxc/log.c -+++ b/src/lxc/log.c -@@ -60,30 +60,30 @@ static inline const char *isulad_get_fifo_path(const char *file) - { - #define ISULAD_FIFO_PREFIX "fifo:" - -- if (strncmp(file, ISULAD_FIFO_PREFIX, strlen(ISULAD_FIFO_PREFIX)) == 0) { -- return (file + strlen(ISULAD_FIFO_PREFIX)); -- } -- return NULL; -+ if (strncmp(file, ISULAD_FIFO_PREFIX, strlen(ISULAD_FIFO_PREFIX)) == 0) { -+ return (file + strlen(ISULAD_FIFO_PREFIX)); -+ } -+ return NULL; - } - - static int isulad_open_fifo(const char *file_path) - { - #define LOG_FIFO_SIZE (1024 * 1024) -- int fd; -+ int fd; - -- fd = lxc_unpriv(open(file_path, O_RDWR | O_NONBLOCK | O_CLOEXEC, 0640)); -- if (fd == -1) { -- fprintf(stderr, "Open fifo %s failed: %s\n", file_path, strerror(errno)); -- return -1; -- } -+ fd = lxc_unpriv(open(file_path, O_RDWR | O_NONBLOCK | O_CLOEXEC, 0640)); -+ if (fd == -1) { -+ fprintf(stderr, "Open fifo %s failed: %s\n", file_path, strerror(errno)); -+ return -1; -+ } - -- if (fcntl(fd, F_SETPIPE_SZ, LOG_FIFO_SIZE) == -1) { -- printf("Set fifo buffer size failed: %s", strerror(errno)); -- close(fd); -- return -1; -- } -+ if (fcntl(fd, F_SETPIPE_SZ, LOG_FIFO_SIZE) == -1) { -+ printf("Set fifo buffer size failed: %s", strerror(errno)); -+ close(fd); -+ return -1; -+ } - -- return fd; -+ return fd; - } - #endif - -@@ -354,10 +354,10 @@ static int log_append_logfile(const struct lxc_log_appender *appender, - - log_container_name = lxc_log_get_container_name(); - #ifdef HAVE_ISULAD -- /* use isulad log format */ -- if (log_container_name != NULL && strlen(log_container_name) > 15) { -- log_container_name = log_container_name + (strlen(log_container_name) - 15); -- } -+ /* use isulad log format */ -+ if (log_container_name != NULL && strlen(log_container_name) > 15) { -+ log_container_name = log_container_name + (strlen(log_container_name) - 15); -+ } - #endif - - if (fd_to_use < 0) -@@ -633,10 +633,10 @@ static int __lxc_log_set_file(const char *fname, int create_dirs) - } - - #ifdef HAVE_ISULAD -- fname = isulad_get_fifo_path(fname); -- if (fname == NULL) { -- return ret_errno(EINVAL); -- } -+ fname = isulad_get_fifo_path(fname); -+ if (fname == NULL) { -+ return ret_errno(EINVAL); -+ } - #endif - - #if USE_CONFIGPATH_LOGS -@@ -649,7 +649,7 @@ static int __lxc_log_set_file(const char *fname, int create_dirs) - return log_error_errno(-errno, errno, "Failed to create dir for log file \"%s\"", fname); - - #if HAVE_ISULAD -- lxc_log_fd = isulad_open_fifo(fname); -+ lxc_log_fd = isulad_open_fifo(fname); - #else - lxc_log_fd = log_open(fname); - #endif -@@ -749,9 +749,9 @@ int lxc_log_init(struct lxc_log *log) - if (lxc_log_fd >= 0) { - lxc_log_category_lxc.appender = &log_appender_logfile; - #ifdef HAVE_ISULAD -- if (!lxc_quiet_specified && !log->quiet) -+ if (!lxc_quiet_specified && !log->quiet) - #endif -- lxc_log_category_lxc.appender->next = &log_appender_stderr; -+ lxc_log_category_lxc.appender->next = &log_appender_stderr; - } - - return ret; -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 75c1bbc..821cfa1 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -5641,6 +5641,8 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath - c->add_terminal_fifos = lxcapi_add_terminal_fifo; - c->set_terminal_winch = lxcapi_set_terminal_winch; - c->set_exec_terminal_winch = lxcapi_set_exec_terminal_winch; -+ c->want_disable_pty = lxcapi_want_disable_pty; -+ c->want_open_stdin = lxcapi_want_open_stdin; - #endif - return c; - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 0942c31..f6a96b4 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1387,24 +1387,9 @@ static int do_start(void *data) - */ - #ifdef HAVE_ISULAD - if (!handler->disable_pty && handler->daemonize && !handler->conf->autodev) { -- char path[PATH_MAX]; -- -- ret = snprintf(path, sizeof(path), "%s/dev/null", -- handler->conf->rootfs.mount); -- if (ret < 0 || ret >= sizeof(path)) -- goto out_warn_father; -- -- ret = access(path, F_OK); -- if (ret != 0) { -- devnull_fd = open_devnull(); -- -- if (devnull_fd < 0) -- goto out_warn_father; -- WARN("Using /dev/null from the host for container init's standard file descriptors. Migration will not work"); -- } -- } - #else - if (handler->daemonize && !handler->conf->autodev) { -+#endif - char path[PATH_MAX]; - - ret = snprintf(path, sizeof(path), "%s/dev/null", -@@ -1421,7 +1406,6 @@ static int do_start(void *data) - WARN("Using /dev/null from the host for container init's standard file descriptors. Migration will not work"); - } - } --#endif - - /* Ask father to setup cgroups and wait for him to finish. */ - ret = lxc_sync_barrier_parent(handler, LXC_SYNC_CGROUP); -@@ -2059,13 +2043,29 @@ static int lxc_spawn(struct lxc_handler *handler) - TRACE("Cloned child process %d", handler->pid); - - #ifdef HAVE_ISULAD -- /* isulad: save pid/ppid info into file*/ -- if (handler->conf->container_info_file) { -- if (lxc_save_container_info(handler->conf->container_info_file, handler->pid)) { -- ERROR("Failed to save cloned container pid"); -- goto out_delete_net; -- } -- } -+ /* isulad: close pipe after clone */ -+ if (handler->conf->console.pipes[0][0] >= 0) { -+ close(handler->conf->console.pipes[0][0]); -+ handler->conf->console.pipes[0][0] = -1; -+ } -+ -+ if (handler->conf->console.pipes[1][1] >= 0) { -+ close(handler->conf->console.pipes[1][1]); -+ handler->conf->console.pipes[1][1] = -1; -+ } -+ -+ if (handler->conf->console.pipes[2][1] >= 0) { -+ close(handler->conf->console.pipes[2][1]); -+ handler->conf->console.pipes[2][1] = -1; -+ } -+ -+ /* isulad: save pid/ppid info into file*/ -+ if (handler->conf->container_info_file) { -+ if (lxc_save_container_info(handler->conf->container_info_file, handler->pid)) { -+ ERROR("Failed to save cloned container pid"); -+ goto out_delete_net; -+ } -+ } - #endif - - /* Verify that we can actually make use of pidfds. */ -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 39a6718..14686fc 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -2090,3 +2090,4 @@ int lxc_terminal_map_ids(struct lxc_conf *c, struct lxc_terminal *terminal) - - return 0; - } -+ -diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c -index 321c847..72a4494 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -53,8 +53,14 @@ static const struct option my_longopts[] = { - {"share-uts", required_argument, 0, OPT_SHARE_UTS}, - {"share-pid", required_argument, 0, OPT_SHARE_PID}, - #ifdef HAVE_ISULAD -+ {"in-fifo", required_argument, 0, OPT_INPUT_FIFO}, -+ {"out-fifo", required_argument, 0, OPT_OUTPUT_FIFO}, -+ {"err-fifo", required_argument, 0, OPT_STDERR_FIFO}, - {"container-pidfile", required_argument, 0, OPT_CONTAINER_INFO}, - {"exit-fifo", required_argument, 0, OPT_EXIT_FIFO}, -+ {"start-timeout", required_argument, 0, OPT_START_TIMEOUT}, -+ {"disable-pty", no_argument, 0, OPT_DISABLE_PTY}, -+ {"open-stdin", no_argument, 0, OPT_OPEN_STDIN}, - #endif - LXC_COMMON_OPTIONS - }; --- -1.8.3.1 - diff --git a/0023-Supporting-rootfs-mount-propagation.patch b/0023-Supporting-rootfs-mount-propagation.patch deleted file mode 100644 index d0477e7..0000000 --- a/0023-Supporting-rootfs-mount-propagation.patch +++ /dev/null @@ -1,933 +0,0 @@ -From 0f756bece17253aadfe72e8f2eafe8a61d969f87 Mon Sep 17 00:00:00 2001 -From: wujing -Date: Tue, 14 Apr 2020 04:53:05 -0400 -Subject: [PATCH 23/49] Supporting rootfs mount propagation - -Signed-off-by: wujing ---- - src/lxc/conf.c | 429 +++++++++++++++++++++++++++++++++++----- - src/lxc/conf.h | 24 ++- - src/lxc/confile.c | 19 ++ - src/lxc/criu.c | 7 + - src/lxc/storage/btrfs.c | 11 ++ - src/lxc/storage/dir.c | 38 +++- - src/lxc/storage/overlay.c | 8 + - src/lxc/storage/storage_utils.c | 13 +- - src/lxc/storage/zfs.c | 9 + - src/lxc/utils.h | 4 + - 10 files changed, 498 insertions(+), 64 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 4088363..e0a6f98 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -61,6 +61,8 @@ - #include "loop.h" - #include "utils.h" - #include "uuid.h" -+#include "path.h" -+#include "utils.h" - - #ifdef MAJOR_IN_MKDEV - #include -@@ -1236,12 +1238,106 @@ static int lxc_fill_autodev(const struct lxc_rootfs *rootfs) - return 0; - } - -+static void null_endofword(char *word) -+{ -+ while (*word && *word != ' ' && *word != '\t') -+ word++; -+ *word = '\0'; -+} -+ -+/* skip @nfields spaces in @src */ -+static char *get_field(char *src, int nfields) -+{ -+ int i; -+ char *p = src; -+ -+ for (i = 0; i < nfields; i++) { -+ while (*p && *p != ' ' && *p != '\t') -+ p++; -+ -+ if (!*p) -+ break; -+ -+ p++; -+ } -+ -+ return p; -+} -+ -+#ifdef HAVE_ISULAD -+static int rootfs_parent_mount_private(char *rootfs) -+{ -+ /* walk /proc/self/mountinfo and change parent of rootfs to private */ -+ FILE *f = fopen("/proc/self/mountinfo", "r"); -+ char *line = NULL; -+ char *parent = NULL, *options = NULL; -+ size_t len = 0; -+ int ret = 0; -+ -+ if (!f) { -+ SYSERROR("Failed to open /proc/self/mountinfo to make parent of rootfs to private"); -+ return -1; -+ } -+ -+ while (getline(&line, &len, f) != -1) { -+ char *target = NULL; -+ char *opts = NULL; -+ char *tmptarget = NULL; -+ target = get_field(line, 4); -+ if (!target) -+ continue; -+ tmptarget = safe_strdup(target); -+ null_endofword(tmptarget); -+ if (!strstr(rootfs, tmptarget)) { -+ free(tmptarget); -+ continue; -+ } -+ if (!parent || strlen(tmptarget) > strlen(parent)) { -+ free(parent); -+ parent = tmptarget; -+ } else { -+ free(tmptarget); -+ continue; -+ } -+ opts = get_field(target, 2); -+ if (!opts) -+ continue; -+ null_endofword(opts); -+ free(options); -+ options = safe_strdup(opts); -+ } -+ -+ if (!parent || !options) { -+ ERROR("Could not find parent mount of %s", rootfs); -+ ret = -1; -+ } else { -+ if (strstr(options, "shared")) { -+ if (mount(NULL, parent, NULL, MS_PRIVATE, NULL)) { -+ SYSERROR("Failed to make %s private", parent); -+ ret = -1; -+ } -+ DEBUG("Mounted parent %s of rootfs %s to private", parent, rootfs); -+ } -+ } -+ free(parent); -+ free(options); -+ fclose(f); -+ free(line); -+ return ret; -+} -+#endif -+ - static int lxc_mount_rootfs(struct lxc_conf *conf) - { - int ret; - struct lxc_storage *bdev; - const struct lxc_rootfs *rootfs = &conf->rootfs; - -+#ifdef HAVE_ISULAD -+ unsigned long flags, mntflags, pflags; -+ char *mntdata = NULL; -+#endif -+ - if (!rootfs->path) { - ret = mount("", "/", NULL, MS_SLAVE | MS_REC, 0); - if (ret < 0) -@@ -1255,6 +1351,44 @@ static int lxc_mount_rootfs(struct lxc_conf *conf) - return log_error_errno(-1, errno, "Failed to access to \"%s\". Check it is present", - rootfs->mount); - -+#ifdef HAVE_ISULAD -+ // Support mount propagations of rootfs -+ // Get rootfs mnt propagation options, such as slave or shared -+ if (parse_mntopts(conf->rootfs.options, &mntflags, &pflags, &mntdata) < 0) { -+ free(mntdata); -+ return -1; -+ } -+ free(mntdata); -+ -+ flags = MS_SLAVE | MS_REC; -+ if (pflags) -+ flags = pflags; -+ -+ /* Mount propagation inside container can not greater than host. -+ * So we must change propagation of root according to flags, default is rslave. -+ * That means shared propagation inside container is disabled by default. -+ */ -+ ret = mount("", "/", NULL, flags, NULL); -+ if (ret < 0) { -+ return log_error_errno(-1, errno, "Failed to make / to propagation flags %lu.", flags); -+ } -+ -+ /* Make parent mount private to make sure following bind mount does -+ * not propagate in other namespaces. Also it will help with kernel -+ * check pass in pivot_root. (IS_SHARED(new_mnt->mnt_parent)) -+ */ -+ ret = rootfs_parent_mount_private(conf->rootfs.mount); -+ if (ret != 0) { -+ return log_error(-1, "Failed to make parent of rootfs %s to private.", conf->rootfs.mount); -+ } -+ -+ ret = mount(conf->rootfs.mount, conf->rootfs.mount, "bind", MS_BIND | MS_REC, NULL); -+ if (ret < 0) { -+ SYSERROR("Failed to mount rootfs %s", conf->rootfs.mount); -+ return -1; -+ } -+#endif -+ - bdev = storage_init(conf); - if (!bdev) - return log_error(-1, "Failed to mount rootfs \"%s\" onto \"%s\" with options \"%s\"", -@@ -1802,7 +1936,43 @@ static int lxc_setup_console(const struct lxc_rootfs *rootfs, - - return lxc_setup_ttydir_console(rootfs, console, ttydir); - } -+#ifdef HAVE_ISULAD -+static void parse_mntopt(char *opt, unsigned long *mflags, unsigned long *pflags, char **data, size_t size) -+{ -+ struct mount_opt *mo; -+ -+ /* If opt is found in mount_opt, set or clear flags. -+ * Otherwise append it to data. */ -+ -+ for (mo = &mount_opt[0]; mo->name != NULL; mo++) { -+ if (strncmp(opt, mo->name, strlen(mo->name)) == 0) { -+ if (mo->clear) -+ *mflags &= ~mo->flag; -+ else -+ *mflags |= mo->flag; -+ return; -+ } -+ } -+ -+ /* If opt is found in propagation_opt, set or clear flags. */ -+ for (mo = &propagation_opt[0]; mo->name != NULL; mo++) { -+ if (strncmp(opt, mo->name, strlen(mo->name)) != 0) -+ continue; -+ -+ if (mo->clear) -+ *pflags &= ~mo->flag; -+ else -+ *pflags |= mo->flag; -+ -+ return; -+ } - -+ if (strlen(*data)) -+ (void)strlcat(*data, ",", size); -+ -+ (void)strlcat(*data, opt, size); -+} -+#else - static int parse_mntopt(char *opt, unsigned long *flags, char **data, size_t size) - { - ssize_t ret; -@@ -1839,7 +2009,43 @@ static int parse_mntopt(char *opt, unsigned long *flags, char **data, size_t siz - - return 0; - } -+#endif -+ -+#ifdef HAVE_ISULAD -+int parse_mntopts(const char *mntopts, unsigned long *mntflags, unsigned long *pflags, char **mntdata) -+{ -+ char *data, *p, *s; -+ size_t size; -+ -+ *mntdata = NULL; -+ *mntflags = 0L; -+ *pflags = 0L; -+ -+ if (!mntopts) -+ return 0; -+ -+ s = safe_strdup(mntopts); - -+ size = strlen(s) + 1; -+ data = malloc(size); -+ if (!data) { -+ free(s); -+ return -1; -+ } -+ *data = 0; -+ -+ lxc_iterate_parts(p, s, ",") -+ parse_mntopt(p, mntflags, pflags, &data, size); -+ -+ if (*data) -+ *mntdata = data; -+ else -+ free(data); -+ free(s); -+ -+ return 0; -+} -+#else - int parse_mntopts(const char *mntopts, unsigned long *mntflags, char **mntdata) - { - __do_free char *mntopts_new = NULL, *mntopts_dup = NULL; -@@ -1870,6 +2076,7 @@ int parse_mntopts(const char *mntopts, unsigned long *mntflags, char **mntdata) - - return 0; - } -+#endif - - static void parse_propagationopt(char *opt, unsigned long *flags) - { -@@ -1908,32 +2115,6 @@ int parse_propagationopts(const char *mntopts, unsigned long *pflags) - return 0; - } - --static void null_endofword(char *word) --{ -- while (*word && *word != ' ' && *word != '\t') -- word++; -- *word = '\0'; --} -- --/* skip @nfields spaces in @src */ --static char *get_field(char *src, int nfields) --{ -- int i; -- char *p = src; -- -- for (i = 0; i < nfields; i++) { -- while (*p && *p != ' ' && *p != '\t') -- p++; -- -- if (!*p) -- break; -- -- p++; -- } -- -- return p; --} -- - static int mount_entry(const char *fsname, const char *target, - const char *fstype, unsigned long mountflags, - unsigned long pflags, const char *data, bool optional, -@@ -2186,6 +2367,82 @@ retry: - - return 0; - } -+ -+/* isulad: checkMountDestination checks to ensure that the mount destination is not over the top of /proc. -+ * dest is required to be an abs path and have any symlinks resolved before calling this function. */ -+static int check_mount_destination(const char *rootfs, const char *dest) -+{ -+ const char *invalid_destinations[] = { -+ "/proc", -+ NULL -+ }; -+ // White list, it should be sub directories of invalid destinations -+ const char *valid_destinations[] = { -+ // These entries can be bind mounted by files emulated by fuse, -+ // so commands like top, free displays stats in container. -+ "/proc/cpuinfo", -+ "/proc/diskstats", -+ "/proc/meminfo", -+ "/proc/stat", -+ "/proc/swaps", -+ "/proc/uptime", -+ "/proc/net/dev", -+ NULL -+ }; -+ const char **valid = NULL; -+ const char **invalid = NULL; -+ -+ for(valid = valid_destinations; *valid != NULL; valid++) { -+ char *fullpath = NULL; -+ char *relpath = NULL; -+ const char *parts[3] = { -+ rootfs, -+ *valid, -+ NULL -+ }; -+ fullpath = lxc_string_join("/", parts, false); -+ if (!fullpath) { -+ ERROR("Out of memory"); -+ return -1; -+ } -+ relpath = path_relative(fullpath, dest); -+ free(fullpath); -+ if (!relpath) -+ return -1; -+ if (!strcmp(relpath, ".")) { -+ free(relpath); -+ return 0; -+ } -+ free(relpath); -+ } -+ -+ for(invalid = invalid_destinations; *invalid != NULL; invalid++) { -+ char *fullpath = NULL; -+ char *relpath = NULL; -+ const char *parts[3] = { -+ rootfs, -+ *invalid, -+ NULL -+ }; -+ fullpath = lxc_string_join("/", parts, false); -+ if (!fullpath) { -+ ERROR("Out of memory"); -+ return -1; -+ } -+ relpath = path_relative(fullpath, dest); -+ free(fullpath); -+ if (!relpath) -+ return -1; -+ if (!strcmp(relpath, ".") || strncmp(relpath, "..", 2)) { -+ ERROR("%s cannot be mounted because it is located inside %s", dest, *invalid); -+ free(relpath); -+ return -1; -+ } -+ free(relpath); -+ } -+ -+ return 0; -+} - #endif - - /* rootfs, lxc_name, and lxc_path can be NULL when the container is created -@@ -2201,18 +2458,51 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - char *rootfs_path = NULL; - int ret; - bool dev, optional, relative; -- const char *dest = path; -+ const char *dest = path; -+ -+#ifdef HAVE_ISULAD -+ char *rpath = NULL; -+#endif - - optional = hasmntopt(mntent, "optional") != NULL; - dev = hasmntopt(mntent, "dev") != NULL; - relative = hasmntopt(mntent, "relative") != NULL; - -+#ifdef HAVE_ISULAD -+ // isulad: ensure that the destination of the bind mount is resolved of symlinks at mount time because -+ // any previous mounts can invalidate the next mount's destination. -+ // this can happen when a user specifies mounts within other mounts to cause breakouts or other -+ // evil stuff to try to escape the container's rootfs. -+ if (rootfs_path) { -+ rpath = follow_symlink_in_scope(path, rootfs_path); -+ if (!rpath) { -+ ERROR("Failed to get real path of '%s' in scope '%s'.", path, rootfs_path); -+ lxc_write_error_message(rootfs->errfd, "%s:%d: failed to get real path of '%s' in scope '%s'.", -+ __FILE__, __LINE__, path, rootfs_path); -+ return -1; -+ } -+ dest = rpath; -+ -+ ret = check_mount_destination(rootfs_path, dest); -+ if (ret) { -+ ERROR("Mount destination is invalid: '%s'", dest); -+ lxc_write_error_message(rootfs->errfd, "%s:%d: mount destination is invalid: '%s'.", -+ __FILE__, __LINE__, dest); -+ free(rpath); -+ return -1; -+ } -+ } -+#else - if (rootfs && rootfs->path) - rootfs_path = rootfs->mount; -+#endif - - ret = mount_entry_create_dir_file(mntent, path, rootfs, lxc_name, - lxc_path); - if (ret < 0) { -+#ifdef HAVE_ISULAD -+ free(rpath); -+#endif - if (optional) - return 0; - -@@ -2220,6 +2510,29 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - } - cull_mntent_opt(mntent); - -+#ifdef HAVE_ISULAD -+ ret = parse_mntopts(mntent->mnt_opts, &mntflags, &pflags, &mntdata); -+ if (ret < 0) { -+ free(rpath); -+ return -1; -+ } -+ -+ // support squashfs -+ if (strcmp(mntent->mnt_type, "squashfs") == 0) { -+ ret = mount_entry_with_loop_dev(mntent->mnt_fsname, dest, mntent->mnt_type, -+ mntent->mnt_opts, rootfs_path); -+ } else { -+ ret = mount_entry(mntent->mnt_fsname, dest, mntent->mnt_type, mntflags, -+ pflags, mntdata, optional, dev, relative, rootfs_path); -+ } -+ -+ if (ret < 0) { -+ lxc_write_error_message(rootfs->errfd, "%s:%d: failed to mount %s as type %s.", -+ __FILE__, __LINE__, mntent->mnt_fsname, mntent->mnt_type); -+ } -+ -+ free(rpath); -+#else - ret = parse_propagationopts(mntent->mnt_opts, &pflags); - if (ret < 0) - return -1; -@@ -2228,18 +2541,10 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - if (ret < 0) - return ret; - --#ifdef HAVE_ISULAD -- // isulad: support squashfs -- if (strcmp(mntent->mnt_type, "squashfs") == 0) { -- ret = mount_entry_with_loop_dev(mntent->mnt_fsname, dest, mntent->mnt_type, -- mntent->mnt_opts, rootfs_path); -- } else { --#endif -- ret = mount_entry(mntent->mnt_fsname, dest, mntent->mnt_type, mntflags, -- pflags, mntdata, optional, dev, relative, rootfs_path); --#ifdef HAVE_ISULAD -- } -+ ret = mount_entry(mntent->mnt_fsname, dest, mntent->mnt_type, mntflags, -+ pflags, mntdata, optional, dev, relative, rootfs_path); - #endif -+ - return ret; - } - -@@ -2329,6 +2634,28 @@ static int mount_file_entries(const struct lxc_conf *conf, - while (getmntent_r(file, &mntent, buf, sizeof(buf))) { - int ret; - -+#ifdef HAVE_ISULAD -+ //isulad, system contaienr, skip "proc/sys/xxx" path -+ if (conf->systemd != NULL && strcmp(conf->systemd, "true") == 0) { -+ if (strstr(mntent.mnt_dir, "proc/sys") != NULL) { -+ continue; -+ } -+ } -+ -+ /* Note: Workaround for volume file path with space*/ -+ mntent.mnt_fsname = lxc_string_replace(SPACE_MAGIC_STR, " ", mntent.mnt_fsname); -+ if(!mntent.mnt_fsname) { -+ SYSERROR("memory allocation error"); -+ return -1; -+ } -+ mntent.mnt_dir = lxc_string_replace(SPACE_MAGIC_STR, " ", mntent.mnt_dir); -+ if(!mntent.mnt_dir) { -+ SYSERROR("memory allocation error"); -+ free(mntent.mnt_fsname); -+ return -1; -+ } -+#endif -+ - if (!rootfs->path) - ret = mount_entry_on_systemfs(&mntent); - else if (mntent.mnt_dir[0] != '/') -@@ -2337,6 +2664,14 @@ static int mount_file_entries(const struct lxc_conf *conf, - else - ret = mount_entry_on_absolute_rootfs(&mntent, rootfs, - lxc_name, lxc_path); -+ -+#ifdef HAVE_ISULAD -+ free(mntent.mnt_fsname); -+ mntent.mnt_fsname = NULL; -+ free(mntent.mnt_dir); -+ mntent.mnt_dir = NULL; -+#endif -+ - if (ret < 0) - return -1; - } -@@ -3391,7 +3726,13 @@ int lxc_setup_rootfs_prepare_root(struct lxc_conf *conf, const char *name, - return log_trace(0, "Bind mounted container / onto itself"); - } - -+#ifdef HAVE_ISULAD -+ if (!conf->rootfs.options) { -+ remount_all_slave(); -+ } -+#else - remount_all_slave(); -+#endif - - ret = run_lxc_hooks(name, "pre-mount", conf, NULL); - if (ret < 0) -@@ -3585,16 +3926,12 @@ reset_umask: - static int setup_rootfs_mountopts(const struct lxc_rootfs *rootfs) - { - unsigned long mflags, mntflags, pflags; -- char *mntdata; -+ char *mntdata = NULL; - - if(!rootfs || !rootfs->options) - return 0; - -- if (parse_propagationopts(rootfs->options, &pflags) < 0) { -- return -1; -- } -- -- if (parse_mntopts(rootfs->options, &mntflags, &mntdata) < 0) { -+ if (parse_mntopts(rootfs->options, &mntflags, &pflags, &mntdata) < 0) { - free(mntdata); - return -1; - } -@@ -3602,9 +3939,9 @@ static int setup_rootfs_mountopts(const struct lxc_rootfs *rootfs) - - if (mntflags & MS_RDONLY) { - mflags = add_required_remount_flags("/", NULL, MS_BIND | MS_REC | mntflags | pflags | MS_REMOUNT); -- DEBUG("remounting /"); -+ DEBUG("remounting / as readonly"); - if (mount("/", "/", NULL, mflags, 0) < 0) { -- SYSERROR("Failed to remount /"); -+ SYSERROR("Failed to make / readonly."); - return -1; - } - } -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 482fe0d..22c554d 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -156,10 +156,12 @@ struct lxc_rootfs { - bool managed; - - #ifdef HAVE_ISULAD -- /* isulad: maskedpaths */ -- struct lxc_list maskedpaths; -- /* isulad: ropaths */ -- struct lxc_list ropaths; -+ /* isulad: maskedpaths */ -+ struct lxc_list maskedpaths; -+ /* isulad: ropaths */ -+ struct lxc_list ropaths; -+ /* isulad: errfd */ -+ int errfd; - #endif - - }; -@@ -444,6 +446,8 @@ struct lxc_conf { - int exit_fd; /* exit fifo fd*/ - - char *errmsg; /* record error messages */ -+ -+ char *systemd; //systemd value - #endif - - }; -@@ -492,8 +496,6 @@ extern int userns_exec_1(const struct lxc_conf *conf, int (*fn)(void *), - void *data, const char *fn_name); - extern int userns_exec_full(struct lxc_conf *conf, int (*fn)(void *), - void *data, const char *fn_name); --extern int parse_mntopts(const char *mntopts, unsigned long *mntflags, -- char **mntdata); - extern int parse_propagationopts(const char *mntopts, unsigned long *pflags); - extern void tmp_proc_unmount(struct lxc_conf *lxc_conf); - extern void remount_all_slave(void); -@@ -519,6 +521,16 @@ extern int userns_exec_minimal(const struct lxc_conf *conf, - int (*fn_parent)(void *), void *fn_parent_data, - int (*fn_child)(void *), void *fn_child_data); - #ifdef HAVE_ISULAD -+// isulad modify -+extern int parse_mntopts(const char *mntopts, unsigned long *mntflags, -+ unsigned long *pflags, char **mntdata); -+#else -+extern int parse_mntopts(const char *mntopts, unsigned long *mntflags, -+ char **mntdata); -+#endif -+ -+#ifdef HAVE_ISULAD -+// isulad add - int lxc_clear_init_args(struct lxc_conf *lxc_conf); - int lxc_clear_populate_devices(struct lxc_conf *c); - int lxc_clear_rootfs_masked_paths(struct lxc_conf *c); -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 0fcebd4..9ba3c7c 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -1358,6 +1358,10 @@ static int set_config_environment(const char *key, const char *value, - { - struct lxc_list *list_item = NULL; - -+#ifdef HAVE_ISULAD -+ char *replaced = NULL; -+#endif -+ - if (lxc_config_value_empty(value)) - return lxc_clear_environment(lxc_conf); - -@@ -1378,7 +1382,16 @@ static int set_config_environment(const char *key, const char *value, - env_var[1] = env_val; - list_item->elem = lxc_string_join("=", env_var, false); - } else { -+#ifdef HAVE_ISULAD -+ /* isulad: recover space replaced by SPACE_MAGIC_STR */ -+ replaced = lxc_string_replace(SPACE_MAGIC_STR, " ", value); -+ if(!replaced) -+ goto on_error; -+ -+ list_item->elem = replaced; -+#else - list_item->elem = strdup(value); -+#endif - } - - if (!list_item->elem) -@@ -2594,6 +2607,11 @@ static int set_config_rootfs_options(const char *key, const char *value, - int ret; - struct lxc_rootfs *rootfs = &lxc_conf->rootfs; - -+#ifdef HAVE_ISULAD -+ ret = parse_mntopts(value, &mflags, &pflags, &mdata); -+ if (ret < 0) -+ return -EINVAL; -+#else - ret = parse_mntopts(value, &mflags, &mdata); - if (ret < 0) - return -EINVAL; -@@ -2603,6 +2621,7 @@ static int set_config_rootfs_options(const char *key, const char *value, - free(mdata); - return -EINVAL; - } -+#endif - - ret = set_config_string_item(&opts, value); - if (ret < 0) { -diff --git a/src/lxc/criu.c b/src/lxc/criu.c -index 1a909bb..14a8aae 100644 ---- a/src/lxc/criu.c -+++ b/src/lxc/criu.c -@@ -371,8 +371,15 @@ static void exec_criu(struct cgroup_ops *cgroup_ops, struct lxc_conf *conf, - char *mntdata = NULL; - char arg[2 * PATH_MAX + 2]; - -+#ifdef HAVE_ISULAD -+ unsigned long pflags; -+ -+ if (parse_mntopts(mntent.mnt_opts, &flags, &pflags, &mntdata) < 0) -+ goto err; -+#else - if (parse_mntopts(mntent.mnt_opts, &flags, &mntdata) < 0) - goto err; -+#endif - - free(mntdata); - -diff --git a/src/lxc/storage/btrfs.c b/src/lxc/storage/btrfs.c -index 92a4a6d..069a9dd 100644 ---- a/src/lxc/storage/btrfs.c -+++ b/src/lxc/storage/btrfs.c -@@ -197,16 +197,27 @@ int btrfs_mount(struct lxc_storage *bdev) - const char *src; - int ret; - -+#ifdef HAVE_ISULAD -+ unsigned long pflags = 0; -+#endif -+ - if (strcmp(bdev->type, "btrfs")) - return -22; - - if (!bdev->src || !bdev->dest) - return -22; - -+#ifdef HAVE_ISULAD -+ if (parse_mntopts(bdev->mntopts, &mntflags, &pflags, &mntdata) < 0) { -+ free(mntdata); -+ return -22; -+ } -+#else - if (parse_mntopts(bdev->mntopts, &mntflags, &mntdata) < 0) { - free(mntdata); - return -22; - } -+#endif - - src = lxc_storage_get_path(bdev->src, "btrfs"); - -diff --git a/src/lxc/storage/dir.c b/src/lxc/storage/dir.c -index b3dbbd0..1dc95f1 100644 ---- a/src/lxc/storage/dir.c -+++ b/src/lxc/storage/dir.c -@@ -124,14 +124,39 @@ bool dir_detect(const char *path) - return false; - } - -+#ifdef HAVE_ISULAD - int dir_mount(struct lxc_storage *bdev) - { - __do_free char *mntdata = NULL; --#ifdef HAVE_ISULAD - unsigned long mntflags = 0, pflags = 0; -+ int ret; -+ const char *src; -+ -+ if (strcmp(bdev->type, "dir")) -+ return -22; -+ -+ if (!bdev->src || !bdev->dest) -+ return -22; -+ -+ ret = parse_mntopts(bdev->mntopts, &mntflags, &pflags, &mntdata); -+ if (ret < 0) -+ return log_error_errno(ret, errno, "Failed to parse mount options \"%s\"", bdev->mntopts); -+ -+ src = lxc_storage_get_path(bdev->src, bdev->type); -+ -+ ret = mount(src, bdev->dest, "bind", MS_BIND | MS_REC | (mntflags & ~MS_RDONLY) | pflags, mntdata); -+ if (ret < 0) { -+ return log_error_errno(-errno, errno, "Failed to mount \"%s\" on \"%s\"", src, bdev->dest); -+ } -+ TRACE("Mounted \"%s\" on \"%s\"", src, bdev->dest); -+ -+ return 0; -+} - #else -+int dir_mount(struct lxc_storage *bdev) -+{ -+ __do_free char *mntdata = NULL; - unsigned long mflags = 0, mntflags = 0, pflags = 0; --#endif - int ret; - const char *src; - -@@ -151,13 +176,6 @@ int dir_mount(struct lxc_storage *bdev) - - src = lxc_storage_get_path(bdev->src, bdev->type); - --#ifdef HAVE_ISULAD -- ret = mount(src, bdev->dest, "bind", MS_BIND | MS_REC | (mntflags & ~MS_RDONLY) | pflags, mntdata); -- if (ret < 0) { -- return log_error_errno(-errno, errno, "Failed to mount \"%s\" on \"%s\"", src, bdev->dest); -- } -- TRACE("Mounted \"%s\" on \"%s\"", src, bdev->dest); --#else - ret = mount(src, bdev->dest, "bind", MS_BIND | MS_REC | mntflags | pflags, mntdata); - if (ret < 0) - return log_error_errno(-errno, errno, "Failed to mount \"%s\" on \"%s\"", src, bdev->dest); -@@ -174,10 +192,10 @@ int dir_mount(struct lxc_storage *bdev) - } - TRACE("Mounted \"%s\" on \"%s\" with options \"%s\", mount flags \"%lu\", and propagation flags \"%lu\"", - src ? src : "(none)", bdev->dest ? bdev->dest : "(none)", mntdata, mflags, pflags); --#endif - - return 0; - } -+#endif - - int dir_umount(struct lxc_storage *bdev) - { -diff --git a/src/lxc/storage/overlay.c b/src/lxc/storage/overlay.c -index 770785c..75a81de 100644 ---- a/src/lxc/storage/overlay.c -+++ b/src/lxc/storage/overlay.c -@@ -349,6 +349,9 @@ int ovl_mount(struct lxc_storage *bdev) - char *work, *lastslash; - size_t len, len2; - int ret, ret2; -+#ifdef HAVE_ISULAD -+ unsigned long pflags = 0; -+#endif - - if (strcmp(bdev->type, "overlay") && strcmp(bdev->type, "overlayfs")) - return -22; -@@ -414,7 +417,12 @@ int ovl_mount(struct lxc_storage *bdev) - work = must_make_path(upper, LXC_OVERLAY_WORK_DIR, NULL); - upper[lastslash - upper] = '/'; - -+#ifdef HAVE_ISULAD -+ ret = parse_mntopts(bdev->mntopts, &mntflags, &pflags, &mntdata); -+#else - ret = parse_mntopts(bdev->mntopts, &mntflags, &mntdata); -+#endif -+ - if (ret < 0) { - ERROR("Failed to parse mount options"); - free(mntdata); -diff --git a/src/lxc/storage/storage_utils.c b/src/lxc/storage/storage_utils.c -index 07eee22..6fec638 100644 ---- a/src/lxc/storage/storage_utils.c -+++ b/src/lxc/storage/storage_utils.c -@@ -340,6 +340,10 @@ int find_fstype_cb(char *buffer, void *data) - char mount_err[BUFSIZ] = {0}; - int ret; - -+#ifdef HAVE_ISULAD -+ unsigned long pflags = 0; -+#endif -+ - /* we don't try 'nodev' entries */ - if (strstr(buffer, "nodev")) - return 0; -@@ -351,14 +355,19 @@ int find_fstype_cb(char *buffer, void *data) - DEBUG("Trying to mount \"%s\"->\"%s\" with FSType \"%s\"", cbarg->rootfs, - cbarg->target, fstype); - -- if (parse_mntopts(cbarg->options, &mntflags, &mntdata) < 0) { -+#ifdef HAVE_ISULAD -+ if (parse_mntopts(cbarg->options, &mntflags, &pflags, &mntdata) < 0) { - free(mntdata); - return 0; - } - --#ifdef HAVE_ISULAD - if (mount(cbarg->rootfs, cbarg->target, fstype, (mntflags & ~MS_RDONLY), mntdata)) { - #else -+ if (parse_mntopts(cbarg->options, &mntflags, &mntdata) < 0) { -+ free(mntdata); -+ return 0; -+ } -+ - if (mount(cbarg->rootfs, cbarg->target, fstype, mntflags, mntdata)) { - #endif - SYSDEBUG("Failed to mount"); -diff --git a/src/lxc/storage/zfs.c b/src/lxc/storage/zfs.c -index 4cc171f..025cf95 100644 ---- a/src/lxc/storage/zfs.c -+++ b/src/lxc/storage/zfs.c -@@ -167,13 +167,22 @@ int zfs_mount(struct lxc_storage *bdev) - const char *src; - char cmd_output[PATH_MAX] = {0}; - -+#ifdef HAVE_ISULAD -+ unsigned long pflags = 0; -+#endif -+ - if (strcmp(bdev->type, "zfs")) - return -22; - - if (!bdev->src || !bdev->dest) - return -22; - -+#ifdef HAVE_ISULAD -+ ret = parse_mntopts(bdev->mntopts, &mntflags, &pflags, &mntdata); -+#else - ret = parse_mntopts(bdev->mntopts, &mntflags, &mntdata); -+#endif -+ - if (ret < 0) { - ERROR("Failed to parse mount options"); - free(mntdata); -diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 677f632..36c458e 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -27,8 +27,12 @@ - #include "memory_utils.h" - #include "raw_syscalls.h" - #include "string_utils.h" -+ - #ifdef HAVE_ISULAD - #include "isulad_utils.h" -+ -+/* isulad: replace space with SPACE_MAGIC_STR */ -+#define SPACE_MAGIC_STR "[#)" - #endif - - /* returns 1 on success, 0 if there were any failures */ --- -1.8.3.1 - diff --git a/0024-start-do-not-check-ppid-when-set-death-signal.patch b/0024-start-do-not-check-ppid-when-set-death-signal.patch deleted file mode 100644 index 64e62af..0000000 --- a/0024-start-do-not-check-ppid-when-set-death-signal.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 52b97324185142285f78143509244d88c6962826 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Tue, 14 Apr 2020 17:38:44 +0800 -Subject: [PATCH 24/49] start: do not check ppid when set death signal - -Signed-off-by: LiFeng ---- - src/lxc/utils.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 5b04fa4..27078e2 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -1734,11 +1734,14 @@ static int process_dead(/* takes */ int status_fd) - int lxc_set_death_signal(int signal, pid_t parent, int parent_status_fd) - { - int ret; -+#ifndef HAVE_ISULAD - pid_t ppid; -+#endif - - ret = prctl(PR_SET_PDEATHSIG, prctl_arg(signal), prctl_arg(0), - prctl_arg(0), prctl_arg(0)); - -+#ifndef HAVE_ISULAD - /* verify that we haven't been orphaned in the meantime */ - ppid = (pid_t)syscall(SYS_getppid); - if (ppid == 0) { /* parent outside our pidns */ -@@ -1750,6 +1753,7 @@ int lxc_set_death_signal(int signal, pid_t parent, int parent_status_fd) - } else if (ppid != parent) { - return raise(SIGKILL); - } -+#endif - - if (ret < 0) - return -1; --- -1.8.3.1 - diff --git a/0025-support-oci-hooks.patch b/0025-support-oci-hooks.patch deleted file mode 100644 index a2acd24..0000000 --- a/0025-support-oci-hooks.patch +++ /dev/null @@ -1,1244 +0,0 @@ -From 52aa8985248200041b2a093634a8c36cb4bb8414 Mon Sep 17 00:00:00 2001 -From: haozi007 -Date: Tue, 14 Apr 2020 18:33:53 +0800 -Subject: [PATCH 25/49] support oci hooks - -Signed-off-by: haozi007 ---- - src/lxc/conf.c | 542 +++++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/conf.h | 17 ++ - src/lxc/lxccontainer.c | 110 ++++++++++ - src/lxc/lxccontainer.h | 28 +++ - src/lxc/start.c | 277 +++++++++++++++++++++++++ - src/lxc/start.h | 8 + - src/lxc/sync.h | 4 + - src/lxc/utils.c | 38 ++++ - src/lxc/utils.h | 2 + - 9 files changed, 1026 insertions(+) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index e0a6f98..71fd6f9 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -33,6 +33,11 @@ - #include - #include - -+#ifdef HAVE_ISULAD -+#include -+#include "sync.h" -+#endif -+ - #include "af_unix.h" - #include "caps.h" - #include "cgroup.h" -@@ -121,7 +126,14 @@ char *lxchook_names[NUM_LXC_HOOKS] = { - "post-stop", - "clone", - "destroy", -+#ifdef HAVE_ISULAD -+ "start-host", -+ "oci-prestart", -+ "oci-poststart", -+ "oci-poststop" -+#else - "start-host" -+#endif - }; - - struct mount_opt { -@@ -3947,6 +3959,530 @@ static int setup_rootfs_mountopts(const struct lxc_rootfs *rootfs) - } - return 0; - } -+ -+struct oci_hook_conf { -+ defs_hook *ocihook; -+ -+ int errfd; -+ int which; -+}; -+ -+struct wait_conf { -+ pid_t pid; -+ unsigned long long startat; -+ int timeout; -+ int errfd; -+ int which; -+}; -+ -+static char* generate_json_str(const char *name, const char *lxcpath, const char *rootfs) -+{ -+ char *cpid = NULL; -+ char *inmsg = NULL; -+ int rc = 0, ret = 0; -+ size_t size; -+ -+ if (!name || !lxcpath || !rootfs) { -+ ERROR("Invalid arguments"); -+ return NULL; -+ } -+ cpid = getenv("LXC_PID"); -+ if (!cpid) { -+ ERROR("Get container %s pid failed: %s", name, strerror(errno)); -+ cpid = "-1"; -+ } -+ -+ if ((strlen(name) + strlen(cpid) + strlen(rootfs) + strlen(lxcpath) + strlen(name)) > -+ SIZE_MAX - (strlen("{\"ociVersion\":\"\",\"id\":\"\",\"pid\":,\"root\":\"\",\"bundle\":\"\"}") - 1 - 1)) { -+ ERROR("Out of memory"); -+ ret = -1; -+ goto out_free; -+ } -+ -+ // {"ociVersion":"","id":"xxx","pid":777,"root":"xxx","bundle":"xxx"} -+ size = strlen("{\"ociVersion\":\"\",\"id\":\"\",\"pid\":,\"root\":\"\",\"bundle\":\"\"}") + -+ strlen(name) + strlen(cpid) + strlen(rootfs) + strlen(lxcpath) + 1 + strlen(name) + 1; -+ inmsg = malloc(size); -+ if (inmsg == NULL) { -+ ERROR("Out of memory"); -+ ret = -1; -+ goto out_free; -+ } -+ rc = snprintf(inmsg, size, -+ "{\"ociVersion\":\"\",\"id\":\"%s\",\"pid\":%s,\"root\":\"%s\",\"bundle\":\"%s/%s\"}", -+ name, cpid, rootfs, lxcpath, name); -+ if (rc < 0 || rc >= size) { -+ ERROR("Create json string failed"); -+ ret = -1; -+ } -+ -+out_free: -+ if (ret) { -+ free(inmsg); -+ inmsg = NULL; -+ } -+ return inmsg; -+} -+ -+static char **merge_ocihook_env(char **oldenvs, size_t env_len, size_t *merge_env_len) -+{ -+ char **result = NULL; -+ size_t result_len = env_len; -+ size_t i, j; -+ char *tmpenv = NULL; -+ char *lxc_envs[] = {"LD_LIBRARY_PATH", "PATH", "LXC_CGNS_AWARE", "LXC_PID", "LXC_ROOTFS_MOUNT", -+ "LXC_CONFIG_FILE", "LXC_CGROUP_PATH", "LXC_ROOTFS_PATH", "LXC_NAME" -+ }; -+ char *lxcenv_buf = NULL; -+ -+ if (result_len > SIZE_MAX - (sizeof(lxc_envs) / sizeof(char *)) - 1) -+ return NULL; -+ result_len += (sizeof(lxc_envs) / sizeof(char *)) + 1; -+ result = malloc(sizeof(char *) * result_len); -+ if (result == NULL) -+ return NULL; -+ memset(result, 0, sizeof(char *) * result_len); -+ -+ for(i = 0; i < env_len; i++) { -+ if (oldenvs[i]) -+ result[i] = safe_strdup(oldenvs[i]); -+ } -+ -+ for(j = 0; j < (sizeof(lxc_envs) / sizeof(char *)); j++) { -+ size_t env_buf_len = 0; -+ tmpenv = getenv(lxc_envs[j]); -+ if (tmpenv && i < (result_len - 1)) { -+ if (strlen(tmpenv) > (SIZE_MAX - 1 - 1 - strlen(lxc_envs[j]))) { -+ lxc_free_array((void **)result, free); -+ return NULL; -+ } -+ env_buf_len = ((strlen(tmpenv) + 1) + strlen(lxc_envs[j])) + 1; -+ lxcenv_buf = malloc(env_buf_len); -+ if (lxcenv_buf == NULL) { -+ lxc_free_array((void **)result, free); -+ return NULL; -+ } -+ if (snprintf(lxcenv_buf, env_buf_len, "%s=%s", lxc_envs[j], tmpenv) < 0) { -+ free(lxcenv_buf); -+ continue; -+ } -+ result[i++] = lxcenv_buf; -+ lxcenv_buf = NULL; -+ } -+ } -+ -+ *merge_env_len = i; -+ return result; -+} -+ -+static struct lxc_popen_FILE *lxc_popen_ocihook(const char *commandpath, char **args, int args_len, -+ char **envs, int env_len, const char *instr) -+{ -+ int ret; -+ struct lxc_popen_FILE *fp = NULL; -+ int pipe_fds[2] = {-1, -1}; -+ int pipe_msg[2] = {-1, -1}; -+ pid_t child_pid; -+ -+ ret = pipe2(pipe_fds, O_CLOEXEC | O_NONBLOCK); -+ if (ret < 0) -+ return NULL; -+ -+ ret = pipe2(pipe_msg, O_CLOEXEC | O_NONBLOCK); -+ if (ret < 0) { -+ ERROR("Pipe msg failure"); -+ close(pipe_fds[0]); -+ close(pipe_fds[1]); -+ return NULL; -+ } -+ -+ child_pid = fork(); -+ if (child_pid < 0) -+ goto on_error; -+ -+ if (child_pid == 0) { -+ close(pipe_msg[1]); -+ if (pipe_msg[0] != STDIN_FILENO) -+ dup2(pipe_msg[0], STDIN_FILENO); -+ else { -+ if (fcntl(pipe_msg[0], F_SETFD, 0) != 0) { -+ fprintf(stderr, "Failed to remove FD_CLOEXEC from fd."); -+ exit(127); -+ } -+ } -+ close(pipe_msg[0]); -+ -+ close(pipe_fds[0]); -+ -+ /* duplicate stdout */ -+ if (pipe_fds[1] != STDOUT_FILENO) -+ ret = dup2(pipe_fds[1], STDOUT_FILENO); -+ else -+ ret = fcntl(pipe_fds[1], F_SETFD, 0); -+ if (ret < 0) { -+ close(pipe_fds[1]); -+ _exit(EXIT_FAILURE); -+ } -+ -+ /* duplicate stderr */ -+ if (pipe_fds[1] != STDERR_FILENO) -+ ret = dup2(pipe_fds[1], STDERR_FILENO); -+ else -+ ret = fcntl(pipe_fds[1], F_SETFD, 0); -+ close(pipe_fds[1]); -+ if (ret < 0) -+ _exit(EXIT_FAILURE); -+ -+ if (lxc_check_inherited(NULL, true, NULL, 0) != 0) { -+ fprintf(stderr, "check inherited fd failed"); -+ exit(127); -+ } -+ -+ /* -+ * Unblock signals. -+ * This is the main/only reason -+ * why we do our lousy popen() emulation. -+ */ -+ { -+ sigset_t mask; -+ sigfillset(&mask); -+ sigprocmask(SIG_UNBLOCK, &mask, NULL); -+ } -+ -+ if (env_len > 0) -+ execvpe(commandpath, args, envs); -+ else -+ execvp(commandpath, args); -+ fprintf(stderr, "fork/exec %s: %s", commandpath, strerror(errno)); -+ exit(127); -+ } -+ -+ /* parent */ -+ -+ close(pipe_fds[1]); -+ pipe_fds[1] = -1; -+ -+ close(pipe_msg[0]); -+ pipe_msg[0]= -1; -+ if (instr) { -+ size_t len = strlen(instr); -+ if (lxc_write_nointr(pipe_msg[1], instr, len) != len) { -+ WARN("Write instr: %s failed", instr); -+ } -+ } -+ close(pipe_msg[1]); -+ pipe_msg[1]= -1; -+ -+ fp = calloc(1, sizeof(*fp)); -+ if (!fp) { -+ ERROR("Failed to allocate memory"); -+ goto on_error; -+ } -+ -+ fp->child_pid = child_pid; -+ fp->pipe = pipe_fds[0]; -+ -+ return fp; -+ -+on_error: -+ -+ if (pipe_fds[0] >= 0) -+ close(pipe_fds[0]); -+ -+ if (pipe_fds[1] >= 0) -+ close(pipe_fds[1]); -+ -+ if (pipe_msg[0] >= 0) -+ close(pipe_msg[0]); -+ -+ if (pipe_msg[1] >= 0) -+ close(pipe_msg[1]); -+ -+ if (fp) -+ free(fp); -+ -+ return NULL; -+} -+ -+void* wait_ocihook_timeout(void *arg) -+{ -+ bool alive = false; -+ struct wait_conf *conf = (struct wait_conf *)arg; -+ -+ if (!conf || conf->timeout < 1) -+ goto out; -+ -+ sleep(conf->timeout); -+ -+ alive = lxc_process_alive(conf->pid, conf->startat); -+ -+ if (alive) { -+ ERROR("%s:%d: running %s hook caused \"hook ran past specified timeout of %.1fs\"", -+ __FILE__, __LINE__, lxchook_names[conf->which], -+ (double)conf->timeout); -+ -+ lxc_write_error_message(conf->errfd, "%s:%d: running %s hook caused \"hook ran past specified timeout of %.1fs\".", -+ __FILE__, __LINE__, lxchook_names[conf->which], -+ (double)conf->timeout); -+ -+ if (kill(conf->pid, SIGKILL) && errno != ESRCH) { -+ ERROR("Send kill signal failed"); -+ goto out; -+ } -+ } -+ -+out: -+ free(conf); -+ return ((void *)0); -+} -+ -+static int run_ocihook_buffer(struct oci_hook_conf *oconf, const char *inmsg) -+{ -+ struct lxc_popen_FILE *f; -+ char output[LXC_LOG_BUFFER_SIZE] = {0}; -+ int ret; -+ pthread_t ptid; -+ int err; -+ struct wait_conf *conf = NULL; -+ pthread_attr_t attr; -+ char *buffer = oconf->ocihook->path; -+ char *err_args_msg = NULL; -+ char *err_envs_msg = NULL; -+ char **hookenvs = NULL; -+ size_t hookenvs_len = 0; -+ -+ hookenvs = merge_ocihook_env(oconf->ocihook->env, oconf->ocihook->env_len, &hookenvs_len); -+ if (!hookenvs) { -+ ERROR("Out of memory."); -+ return -1; -+ } -+ -+ f = lxc_popen_ocihook(buffer, oconf->ocihook->args, oconf->ocihook->args_len, hookenvs, hookenvs_len, inmsg); -+ lxc_free_array((void **)hookenvs, free); -+ if (!f) { -+ SYSERROR("Failed to popen() %s.", buffer); -+ return -1; -+ } -+ -+ conf = malloc(sizeof(struct wait_conf)); -+ if (conf == NULL) { -+ SYSERROR("Failed to malloc."); -+ goto on_error; -+ } -+ -+ memset(conf, 0x00, sizeof(struct wait_conf)); -+ -+ conf->pid = f->child_pid; -+ conf->startat = lxc_get_process_startat(conf->pid); -+ -+ INFO("hook_conf timeout %d", oconf->ocihook->timeout); -+ if(oconf->ocihook->timeout > 0) -+ conf->timeout = oconf->ocihook->timeout; -+ else { -+ conf->timeout = 30; -+ INFO("Set hook timeout 30s"); -+ } -+ conf->errfd = oconf->errfd; -+ conf->which = oconf->which; -+ -+ pthread_attr_init(&attr); -+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); -+ err = pthread_create(&ptid, &attr, wait_ocihook_timeout, conf); -+ if (err != 0) { -+ ERROR("Create wait timeout thread failed"); -+ free(conf); -+ goto on_error; -+ } -+ -+ ret = lxc_wait_for_pid_status(f->child_pid); -+ -+ lxc_read_nointr(f->pipe, output, sizeof(output) - 1); -+ close(f->pipe); -+ free(f); -+ -+ if (ret == -1) { -+ SYSERROR("Script exited with error."); -+ goto print_hook; -+ } else if (WIFEXITED(ret) && WEXITSTATUS(ret) != 0) { -+ ERROR("Script exited with status %d. output: %s", WEXITSTATUS(ret), output); -+ lxc_write_error_message(oconf->errfd, "%s:%d: running %s hook caused \"error running hook: exit status %d, output: %s\".", -+ __FILE__, __LINE__, -+ (oconf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[oconf->which], -+ WEXITSTATUS(ret), output); -+ -+ goto print_hook; -+ } else if (WIFSIGNALED(ret)) { -+ ERROR("Script terminated by signal %d.", WTERMSIG(ret)); -+ lxc_write_error_message(oconf->errfd, "%s:%d: running %s hook caused \"error running hook: Script terminated by signal %d\".", -+ __FILE__, __LINE__, -+ (oconf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[oconf->which], -+ WTERMSIG(ret)); -+ -+ goto print_hook; -+ } -+ -+ return 0; -+ -+on_error: -+ if (f) { -+ if (f->pipe >= 0) -+ close(f->pipe); -+ free(f); -+ } -+ -+print_hook: -+ if (oconf->ocihook->args) -+ err_args_msg = lxc_string_join(" ", (const char **)oconf->ocihook->args, false); -+ if (oconf->ocihook->env) -+ err_envs_msg = lxc_string_join(" ", (const char **)oconf->ocihook->env, false); -+ ERROR("Hook script command: \"%s\", args: \"%s\", envs: \"%s\", timeout: %d.", -+ buffer, err_args_msg ? err_args_msg : "", -+ err_envs_msg ? err_envs_msg : "", oconf->ocihook->timeout); -+ -+ free(err_args_msg); -+ free(err_envs_msg); -+ return -1; -+} -+ -+static int run_ocihook_script_argv(const char *name, const char *section, -+ struct oci_hook_conf *oconf, -+ const char *lxcpath, const char *rootfs) -+{ -+ int ret; -+ const char *script = oconf->ocihook->path; -+ char *inmsg = NULL; -+ -+ INFO("Executing script \"%s\" for container \"%s\", config section \"%s\".", -+ script, name, section); -+ -+ inmsg = generate_json_str(name, lxcpath, rootfs); -+ if (!inmsg) { -+ return -1; -+ } -+ -+ ret = run_ocihook_buffer(oconf, inmsg); -+ free(inmsg); -+ inmsg = NULL; -+ return ret; -+} -+ -+static char *get_root_path(const char *path, const char *backend) -+{ -+ char *ret = NULL; -+ char *tmp = NULL; -+ -+ if (!path) { -+ ret = safe_strdup("/"); -+ return ret; -+ } -+ if (!backend) { -+ goto default_out; -+ } -+ -+ if (strcmp(backend, "aufs") == 0 || -+ strcmp(backend, "overlayfs") == 0 || -+ strcmp(backend, "loop") == 0) { -+ tmp = strrchr(path, ':'); -+ if (tmp == NULL) { -+ ERROR("Invalid root path format"); -+ return NULL; -+ } -+ tmp++; -+ ret = safe_strdup(tmp); -+ return ret; -+ } -+ -+default_out: -+ ret = safe_strdup(path); -+ return ret; -+} -+ -+static int do_run_oci_hooks(const char *name, const char *lxcpath, struct lxc_conf *lc, int which, int errfd) -+{ -+ struct oci_hook_conf work_conf = {0}; -+ size_t i; -+ int ret = 0; -+ int nret = 0; -+ char *rootpath = NULL; -+ -+ if (!lc) { -+ return -1; -+ } -+ if (!lc->ocihooks) { -+ return 0; -+ } -+ -+ rootpath = get_root_path(lc->rootfs.path, lc->rootfs.bdev_type); -+ if (!rootpath) { -+ ERROR("Get container %s rootpath failed.", name); -+ return -1; -+ } -+ -+ work_conf.errfd = errfd; -+ work_conf.which = which; -+ switch (which) { -+ case OCI_HOOK_PRESTART: -+ for (i = 0; i < lc->ocihooks->prestart_len; i++) { -+ work_conf.ocihook = lc->ocihooks->prestart[i]; -+ ret = run_ocihook_script_argv(name, "lxc", &work_conf, lxcpath, rootpath); -+ if (ret != 0) -+ break; -+ } -+ break; -+ case OCI_HOOK_POSTSTART: -+ for (i = 0; i < lc->ocihooks->poststart_len; i++) { -+ work_conf.ocihook = lc->ocihooks->poststart[i]; -+ nret = run_ocihook_script_argv(name, "lxc", &work_conf, lxcpath, rootpath); -+ if (nret != 0) -+ WARN("running poststart hook %zu failed, ContainerId: %s", i, name); -+ } -+ break; -+ case OCI_HOOK_POSTSTOP: -+ for (i = 0; i < lc->ocihooks->poststop_len; i++) { -+ work_conf.ocihook = lc->ocihooks->poststop[i]; -+ nret = run_ocihook_script_argv(name, "lxc", &work_conf, lxcpath, rootpath); -+ if (nret != 0) -+ WARN("running poststart hook %zu failed, ContainerId: %s", i, name); -+ } -+ break; -+ default: -+ ret = -1; -+ } -+ if (rootpath) -+ free(rootpath); -+ return ret; -+} -+ -+int run_oci_hooks(const char *name, const char *hookname, struct lxc_conf *conf, const char *lxcpath) -+{ -+ int which = -1; -+ -+ if (strcmp(hookname, "oci-prestart") == 0) { -+ which = OCI_HOOK_PRESTART; -+ if (!lxcpath) { -+ ERROR("oci hook require lxcpath"); -+ return -1; -+ } -+ return do_run_oci_hooks(name, lxcpath, conf, which, conf->errpipe[1]); -+ } else if (strcmp(hookname, "oci-poststart") == 0) { -+ which = OCI_HOOK_POSTSTART; -+ if (!lxcpath) { -+ ERROR("oci hook require lxcpath"); -+ return -1; -+ } -+ return do_run_oci_hooks(name, lxcpath, conf, which, conf->errpipe[1]); -+ } else if (strcmp(hookname, "oci-poststop") == 0) { -+ which = OCI_HOOK_POSTSTOP; -+ if (!lxcpath) { -+ ERROR("oci hook require lxcpath"); -+ return -1; -+ } -+ return do_run_oci_hooks(name, lxcpath, conf, which, conf->errpipe[1]); -+ } else -+ return -1; -+ -+ return 0; -+} - #endif - - int lxc_setup(struct lxc_handler *handler) -@@ -4083,6 +4619,12 @@ int lxc_setup(struct lxc_handler *handler) - if (ret < 0) - return log_error(-1, "Failed to \"/proc\" LSMs"); - -+#ifdef HAVE_ISULAD -+ /* Ask father to run oci prestart hooks and wait for him to finish. */ -+ if (lxc_sync_barrier_parent(handler, LXC_SYNC_OCI_PRESTART_HOOK)) { -+ return log_error(-1, "Failed to sync parent to start host hook"); -+ } -+#endif - ret = lxc_setup_rootfs_switch_root(&lxc_conf->rootfs); - if (ret < 0) - return log_error(-1, "Failed to pivot root into rootfs"); -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 22c554d..61c3383 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -23,6 +23,10 @@ - #include "start.h" - #include "terminal.h" - -+#ifdef HAVE_ISULAD -+#include "oci_runtime_hooks.h" -+#endif -+ - #if HAVE_SYS_RESOURCE_H - #include - #endif -@@ -212,6 +216,11 @@ enum lxchooks { - LXCHOOK_CLONE, - LXCHOOK_DESTROY, - LXCHOOK_START_HOST, -+#ifdef HAVE_ISULAD -+ OCI_HOOK_PRESTART, -+ OCI_HOOK_POSTSTART, -+ OCI_HOOK_POSTSTOP, -+#endif - NUM_LXC_HOOKS - }; - -@@ -433,6 +442,11 @@ struct lxc_conf { - } shmount; - - #ifdef HAVE_ISULAD -+ /* -+ * isulad: support oci hook -+ * */ -+ oci_runtime_spec_hooks *ocihooks; -+ - /* isulad add: init args used to repalce init_cmd*/ - char **init_argv; - size_t init_argc; -@@ -447,6 +461,8 @@ struct lxc_conf { - - char *errmsg; /* record error messages */ - -+ int errpipe[2];//pipdfd for get error message of child or grandchild process. -+ - char *systemd; //systemd value - #endif - -@@ -535,5 +551,6 @@ int lxc_clear_init_args(struct lxc_conf *lxc_conf); - int lxc_clear_populate_devices(struct lxc_conf *c); - int lxc_clear_rootfs_masked_paths(struct lxc_conf *c); - int lxc_clear_rootfs_ro_paths(struct lxc_conf *c); -+int run_oci_hooks(const char *name, const char *hookname, struct lxc_conf *conf, const char *lxcpath); - #endif - #endif /* __LXC_CONF_H */ -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 821cfa1..9b3ab75 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -288,6 +288,8 @@ static void lxc_container_free(struct lxc_container *c) - #ifdef HAVE_ISULAD - free(c->exit_fifo); - c->exit_fifo = NULL; -+ free(c->ocihookfile); -+ c->ocihookfile = NULL; - #endif - - free(c); -@@ -632,6 +634,66 @@ static bool load_config_locked(struct lxc_container *c, const char *fname) - return true; - } - -+#ifdef HAVE_ISULAD -+static bool load_ocihooks_locked(struct lxc_container *c) -+{ -+ parser_error err = NULL; -+ oci_runtime_spec_hooks *hooks = NULL; -+ -+ if (!c->lxc_conf) -+ c->lxc_conf = lxc_conf_init(); -+ -+ if (!c->lxc_conf) -+ return false; -+ -+ hooks = oci_runtime_spec_hooks_parse_file(c->ocihookfile, NULL, &err); -+ if (!hooks) { -+ fprintf(stderr, "parse oci hooks config failed: %s\n", err); -+ free(err); -+ return true; -+ } -+ c->lxc_conf->ocihooks = hooks; -+ -+ if (err) -+ free(err); -+ return true; -+} -+ -+/* -+ * isulad: set oci hook file path -+ * */ -+static bool set_oci_hook_config_filename(struct lxc_container *c) -+{ -+#define OCI_HOOK_JSON_FILE_NAME "ocihooks.json" -+ char *newpath = NULL; -+ int len, ret; -+ -+ if (!c->config_path) -+ return false; -+ -+ /* $lxc_path + "/" + c->name + "/" + "config" + '\0' */ -+ if (strlen(c->config_path) + strlen(c->name) > SIZE_MAX - strlen(OCI_HOOK_JSON_FILE_NAME) - 3) -+ return false; -+ len = strlen(c->config_path) + strlen(c->name) + strlen(OCI_HOOK_JSON_FILE_NAME) + 3; -+ -+ newpath = malloc(len); -+ if (newpath == NULL) -+ return false; -+ -+ ret = snprintf(newpath, len, "%s/%s/%s", c->config_path, c->name, OCI_HOOK_JSON_FILE_NAME); -+ if (ret < 0 || ret >= len) { -+ fprintf(stderr, "Error printing out config file name\n"); -+ free(newpath); -+ return false; -+ } -+ -+ free(c->ocihookfile); -+ c->ocihookfile = newpath; -+ -+ return true; -+} -+#endif -+ - static bool do_lxcapi_load_config(struct lxc_container *c, const char *alt_file) - { - int lret; -@@ -665,6 +727,11 @@ static bool do_lxcapi_load_config(struct lxc_container *c, const char *alt_file) - - ret = load_config_locked(c, fname); - -+#ifdef HAVE_ISULAD -+ if (ret && file_exists(c->ocihookfile)) -+ ret = load_ocihooks_locked(c); -+#endif -+ - if (need_disklock) - container_disk_unlock(c); - else -@@ -5492,6 +5559,40 @@ static bool do_lxcapi_set_exec_terminal_winch(struct lxc_container *c, const cha - } - - WRAP_API_3(bool, lxcapi_set_exec_terminal_winch, const char *, unsigned int, unsigned int) -+ -+/* isulad add clean resources */ -+static bool do_lxcapi_clean_container_resource(struct lxc_container *c, pid_t pid) -+{ -+ int ret; -+ -+ if (!c) -+ return false; -+ -+ ret = do_lxcapi_clean_resource(c->name, c->config_path, c->lxc_conf, pid); -+ if (ret) -+ ERROR("Failed to clean container %s resource", c->name); -+ return ret == 0; -+ -+} -+ -+WRAP_API_1(bool, lxcapi_clean_container_resource, pid_t) -+ -+/* isulad get coantainer pids */ -+static bool do_lxcapi_get_container_pids(struct lxc_container *c, pid_t **pids,size_t *pids_len) -+{ -+ int ret; -+ -+ if (!c) -+ return false; -+ -+ ret = do_lxcapi_get_pids(c->name, c->config_path, c->lxc_conf, pids,pids_len); -+ if (ret) -+ ERROR("Failed to get container %s pids", c->name); -+ return ret == 0; -+ -+} -+ -+WRAP_API_2(bool, lxcapi_get_container_pids, pid_t **,size_t *) - #endif - - struct lxc_container *lxc_container_new(const char *name, const char *configpath) -@@ -5547,6 +5648,13 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath - goto err; - } - -+#ifdef HAVE_ISULAD -+ if (!set_oci_hook_config_filename(c)) { -+ fprintf(stderr, "Error allocating oci hooks file pathname\n"); -+ goto err; -+ } -+#endif -+ - if (file_exists(c->configfile) && !lxcapi_load_config(c, NULL)) { - fprintf(stderr, "Failed to load config for %s\n", name); - goto err; -@@ -5643,6 +5751,8 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath - c->set_exec_terminal_winch = lxcapi_set_exec_terminal_winch; - c->want_disable_pty = lxcapi_want_disable_pty; - c->want_open_stdin = lxcapi_want_open_stdin; -+ c->clean_container_resource = lxcapi_clean_container_resource; -+ c->get_container_pids = lxcapi_get_container_pids; - #endif - return c; - -diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index de2ee46..f1621f9 100644 ---- a/src/lxc/lxccontainer.h -+++ b/src/lxc/lxccontainer.h -@@ -118,6 +118,13 @@ struct lxc_container { - - /*! Whether container wishes to keep stdin active */ - bool open_stdin; -+ -+ /*! -+ * \private -+ * isulad: support oci hook from json file -+ * full path of json file -+ * */ -+ char *ocihookfile; - #endif - - /*! -@@ -935,6 +942,27 @@ struct lxc_container { - * \return \c true on success, else \c false. - */ - bool (*want_open_stdin)(struct lxc_container *c, bool state); -+ -+ /*! isulad add -+ * \brief An API call to clean resources of container -+ * -+ * \param c Container. -+ * \param pid Value of container process. -+ * -+ * \return \c true on success, else \c false. -+ */ -+ bool (*clean_container_resource) (struct lxc_container *c, pid_t pid); -+ -+ /*! isulad add -+ * \brief An API call to get container pids -+ * -+ * \param c Container. -+ * \param pids Value of container pids. -+ * \param pids_len Value of container pids len. -+ * \param pid Value of container pid. -+ * \return \c true on success, else \c false. -+ */ -+ bool (*get_container_pids)(struct lxc_container *c,pid_t **pids,size_t *pids_len); - #endif - }; - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index f6a96b4..4f45776 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -2239,6 +2239,20 @@ static int lxc_spawn(struct lxc_handler *handler) - ERROR("Failed to run lxc.hook.start-host"); - goto out_delete_net; - } -+#ifdef HAVE_ISULAD -+ /* isulad: Run oci prestart hook at here */ -+ ret = run_oci_hooks(name, "oci-prestart", conf, lxcpath); -+ if (ret < 0) { -+ ERROR("Failed to run oci prestart hooks"); -+ goto out_delete_net; -+ } -+ -+ /* Tell the child to continue its initialization. We'll get -+ * LXC_SYNC_POST_OCI_PRESTART_HOOK when it is ready for us to run oci prestart hooks. -+ */ -+ if (lxc_sync_barrier_child(handler, LXC_SYNC_POST_OCI_PRESTART_HOOK)) -+ goto out_delete_net; -+#endif - - /* Tell the child to complete its initialization and wait for it to exec - * or return an error. (The child will never return -@@ -2282,6 +2296,15 @@ static int lxc_spawn(struct lxc_handler *handler) - if (ret < 0) - goto out_abort; - -+#ifdef HAVE_ISULAD -+ /* isulad: Run oci prestart hook at here */ -+ ret = run_oci_hooks(name, "oci-poststart", conf, lxcpath); -+ if (ret < 0) { -+ ERROR("Failed to run oci poststart hooks"); -+ goto out_abort; -+ } -+#endif -+ - ret = lxc_set_state(name, handler, RUNNING); - if (ret < 0) { - ERROR("Failed to set state to \"%s\"", lxc_state2str(RUNNING)); -@@ -2592,3 +2615,257 @@ static bool do_destroy_container(struct lxc_handler *handler) - - return storage_destroy(handler->conf); - } -+ -+#ifdef HAVE_ISULAD -+/*isulad: set env for clean resources */ -+static int clean_resource_set_env(struct lxc_handler *handler) -+{ -+ const char *name = handler->name; -+ struct lxc_conf *conf = handler->conf; -+ char bufstr[PATH_MAX + 1]; -+ int i = 0; -+ int j = 0; -+ int len = 2; //set "LXC_PID" and "LXC_CGNS_AWARE" -+ -+ if (conf == NULL || conf->ocihooks == NULL || conf->ocihooks->poststop_len == 0) { -+ return 0; -+ } -+ -+ if (name) { -+ len++; -+ } -+ if (conf->rcfile) { -+ len++; -+ } -+ if (conf->rootfs.mount) { -+ len++; -+ } -+ if (conf->rootfs.path) { -+ len++; -+ } -+ if (conf->console.path) { -+ len++; -+ } -+ if (conf->console.log_path) { -+ len++; -+ } -+ if (handler->cgroup_ops->container_cgroup) { -+ len++; -+ } -+ -+ for (; i < conf->ocihooks->poststop_len; i++) { -+ size_t cap = conf->ocihooks->poststop[i]->env_len; -+ size_t newcap = cap + len + 1; -+ if (lxc_grow_array((void ***)&(conf->ocihooks->poststop[i]->env), &cap, newcap, 1) != 0) { -+ return -1; -+ } -+ j = conf->ocihooks->poststop[i]->env_len; -+ /* Start of environment variable setup for hooks. */ -+ if (name) { -+ snprintf(bufstr, PATH_MAX + 1, "LXC_NAME=%s", name); -+ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); -+ } -+ if (conf->rcfile) { -+ snprintf(bufstr, PATH_MAX + 1, "LXC_CONFIG_FILE=%s", conf->rcfile); -+ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); -+ } -+ if (conf->rootfs.mount) { -+ snprintf(bufstr, PATH_MAX + 1, "LXC_ROOTFS_MOUNT=%s", conf->rootfs.mount); -+ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); -+ } -+ if (conf->rootfs.path) { -+ snprintf(bufstr, PATH_MAX + 1, "LXC_ROOTFS_PATH=%s", conf->rootfs.path); -+ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); -+ } -+ if (conf->console.path) { -+ snprintf(bufstr, PATH_MAX + 1, "LXC_CONSOLE=%s", conf->console.path); -+ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); -+ } -+ if (conf->console.log_path) { -+ snprintf(bufstr, PATH_MAX + 1, "LXC_CONSOLE_LOGPATH=%s", conf->console.log_path); -+ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); -+ } -+ conf->ocihooks->poststop[i]->env[j++] = safe_strdup("LXC_CGNS_AWARE=1"); -+ -+ snprintf(bufstr, PATH_MAX + 1, "LXC_PID=%d", handler->pid); -+ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); -+ if (handler->cgroup_ops->container_cgroup) { -+ snprintf(bufstr, PATH_MAX + 1, "LXC_CGROUP_PATH=%s", handler->cgroup_ops->container_cgroup); -+ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); -+ } -+ conf->ocihooks->poststop[i]->env_len = j; -+ /* End of environment variable setup for hooks. */ -+ } -+ return 0; -+} -+ -+/*isulad: init handler for clean */ -+static struct lxc_handler *lxc_init_clean_handler(char *name, char *lxcpath, struct lxc_conf *conf, pid_t pid) -+{ -+ int i; -+ struct lxc_handler *handler; -+ -+ handler = malloc(sizeof(*handler)); -+ if (handler == NULL) -+ return NULL; -+ -+ memset(handler, 0, sizeof(*handler)); -+ -+ /* Note that am_guest_unpriv() checks the effective uid. We -+ * probably don't care if we are real root only if we are running -+ * as root so this should be fine. -+ */ -+ handler->am_root = !am_guest_unpriv(); -+ handler->data_sock[0] = handler->data_sock[1] = -1; -+ handler->conf = conf; -+ handler->lxcpath = lxcpath; -+ handler->pinfd = -1; -+ handler->sigfd = -EBADF; -+ handler->init_died = false; -+ handler->pid = pid; -+ handler->state_socket_pair[0] = handler->state_socket_pair[1] = -1; -+ if (handler->conf->reboot == REBOOT_NONE) -+ lxc_list_init(&handler->conf->state_clients); -+ -+ for (i = 0; i < LXC_NS_MAX; i++) -+ handler->nsfd[i] = -1; -+ -+ handler->name = name; -+ handler->exit_code = -1; /* isulad: record exit code of container */ -+ -+ handler->cgroup_ops = cgroup_init(conf); -+ if (!handler->cgroup_ops) { -+ ERROR("Failed to initialize cgroup driver"); -+ goto on_error; -+ } -+ -+ INFO("Container \"%s\" 's clean handler is initialized.", name); -+ -+ return handler; -+ -+on_error: -+ lxc_free_handler(handler); -+ -+ return NULL; -+} -+ -+/*isulad: init handler for clean */ -+static struct lxc_handler *lxc_init_pids_handler(char *name, char *lxcpath, struct lxc_conf *conf) -+{ -+ int i; -+ struct lxc_handler *handler; -+ -+ handler = malloc(sizeof(*handler)); -+ if (handler == NULL) -+ return NULL; -+ -+ memset(handler, 0, sizeof(*handler)); -+ -+ /* Note that am_guest_unpriv() checks the effective uid. We -+ * probably don't care if we are real root only if we are running -+ * as root so this should be fine. -+ */ -+ handler->am_root = !am_guest_unpriv(); -+ handler->data_sock[0] = handler->data_sock[1] = -1; -+ handler->conf = conf; -+ handler->lxcpath = lxcpath; -+ handler->pinfd = -1; -+ handler->sigfd = -EBADF; -+ handler->init_died = false; -+ handler->state_socket_pair[0] = handler->state_socket_pair[1] = -1; -+ if (handler->conf->reboot == REBOOT_NONE) -+ lxc_list_init(&handler->conf->state_clients); -+ -+ for (i = 0; i < LXC_NS_MAX; i++) -+ handler->nsfd[i] = -1; -+ -+ handler->name = name; -+ handler->exit_code = -1; /* isulad: record exit code of container */ -+ -+ handler->cgroup_ops = cgroup_init(conf); -+ if (!handler->cgroup_ops) { -+ ERROR("Failed to initialize cgroup driver"); -+ goto on_error; -+ } -+ -+ INFO("Container \"%s\" 's clean handler is initialized.", name); -+ -+ return handler; -+ -+on_error: -+ lxc_free_handler(handler); -+ -+ return NULL; -+} -+ -+/*isulad: do_lxcapi_clean_resource */ -+int do_lxcapi_clean_resource(char *name, char *lxcpath, struct lxc_conf *conf, pid_t pid) -+{ -+ int ret = 0; -+ struct lxc_handler *handler = NULL; -+ int retry_count = 0; -+ int max_retry = 10; -+ -+ handler = lxc_init_clean_handler(name, lxcpath, conf, pid); -+ if (!handler) { -+ ERROR("Failed to init container %s clean handler", name); -+ ret = -1; -+ goto out; -+ } -+ -+ if (clean_resource_set_env(handler) != 0) { -+ ERROR("Failed to set env for poststop hooks"); -+ ret = -1; -+ goto out; -+ } -+ -+ if (run_oci_hooks(handler->name, "oci-poststop", handler->conf, handler->lxcpath)) { -+ ERROR("Failed to run lxc.hook.post-stop for container \"%s\".", handler->name); -+ ret = -1; -+ } -+ -+retry: -+ if (!handler->cgroup_ops->payload_destroy(handler->cgroup_ops, handler)) { -+ TRACE("Trying to kill all subprocess"); -+ signal_all_processes(handler); -+ TRACE("Finished kill all subprocess"); -+ if (retry_count < max_retry) { -+ usleep(100 * 1000); /* 100 millisecond */ -+ retry_count++; -+ goto retry; -+ } -+ SYSERROR("Failed to destroy cgroup path for container: \"%s\"", handler->name); -+ ret = -1; -+ } -+ -+out: -+ lxc_free_handler(handler); -+ return ret; -+} -+ -+/*isulad: do_lxcapi_get_pids */ -+int do_lxcapi_get_pids(char *name, char *lxcpath, struct lxc_conf *conf, pid_t **pids,size_t *pids_len) -+{ -+ int ret = 0; -+ struct lxc_handler *handler = NULL; -+ struct cgroup_ops *cg_ops = NULL; -+ -+ handler = lxc_init_pids_handler(name, lxcpath, conf); -+ if (!handler) { -+ ERROR("Failed to init container %s clean handler", name); -+ ret = -1; -+ goto out; -+ } -+ -+ cg_ops = handler->cgroup_ops; -+ ret = get_all_pids(cg_ops, pids, pids_len); -+ if (ret < 0) { -+ WARN("failed to get all pids"); -+ } -+ -+out: -+ lxc_free_handler(handler); -+ return ret; -+} -+ -+#endif -diff --git a/src/lxc/start.h b/src/lxc/start.h -index 5ea5fe2..4fc3ff7 100644 ---- a/src/lxc/start.h -+++ b/src/lxc/start.h -@@ -175,4 +175,12 @@ extern int __lxc_start(struct lxc_handler *, struct lxc_operations *, void *, - - extern int resolve_clone_flags(struct lxc_handler *handler); - -+#ifdef HAVE_ISULAD -+/*isulad: do_lxcapi_clean_resource */ -+extern int do_lxcapi_clean_resource(char *name, char *lxcpath, struct lxc_conf *conf, pid_t pid); -+ -+/*isulad: do_lxcapi_get_pids */ -+extern int do_lxcapi_get_pids(char *name, char *lxcpath, struct lxc_conf *conf, pid_t **pids,size_t *pids_len); -+#endif -+ - #endif -diff --git a/src/lxc/sync.h b/src/lxc/sync.h -index ff7a1eb..56c1dfc 100644 ---- a/src/lxc/sync.h -+++ b/src/lxc/sync.h -@@ -11,6 +11,10 @@ enum { - LXC_SYNC_POST_CONFIGURE, - LXC_SYNC_CGROUP, - LXC_SYNC_CGROUP_UNSHARE, -+#ifdef HAVE_ISULAD -+ LXC_SYNC_OCI_PRESTART_HOOK, -+ LXC_SYNC_POST_OCI_PRESTART_HOOK, -+#endif - LXC_SYNC_CGROUP_LIMITS, - LXC_SYNC_READY_START, - LXC_SYNC_RESTART, -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 27078e2..39413ee 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -2122,4 +2122,42 @@ set_env: - return 0; - } - -+bool lxc_process_alive(pid_t pid, unsigned long long start_time) -+{ -+ int sret = 0; -+ bool alive = true; -+ proc_t *pid_info = NULL; -+ char filename[PATH_MAX] = {0}; -+ char sbuf[1024] = {0}; /* bufs for stat */ -+ -+ sret = kill(pid, 0); -+ if (sret < 0 && errno == ESRCH) -+ return false; -+ -+ sret = snprintf(filename, sizeof(filename), "/proc/%d/stat", pid); -+ if (sret < 0 || sret >= sizeof(filename)) { -+ ERROR("Failed to sprintf filename"); -+ goto out; -+ } -+ -+ if ((lxc_file2str(filename, sbuf, sizeof(sbuf))) == -1) { -+ ERROR("Failed to read pidfile %s", filename); -+ alive = false; -+ goto out; -+ } -+ -+ pid_info = lxc_stat2proc(sbuf); -+ if (!pid_info) { -+ ERROR("Failed to get proc stat info"); -+ alive = false; -+ goto out; -+ } -+ -+ if (start_time != pid_info->start_time) -+ alive = false; -+out: -+ free(pid_info); -+ return alive; -+} -+ - #endif -diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 36c458e..a213ba7 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -322,6 +322,8 @@ extern int lxc_file2str(const char *filename, char ret[], int cap); - extern int unsigned long long lxc_get_process_startat(pid_t pid); - // set env home in container - extern int lxc_setup_env_home(uid_t uid); -+ -+extern bool lxc_process_alive(pid_t pid, unsigned long long start_time); - #endif - - #endif /* __LXC_UTILS_H */ --- -1.8.3.1 - diff --git a/0026-Supporting-UID-GID-configuration.patch b/0026-Supporting-UID-GID-configuration.patch deleted file mode 100644 index 7c721fd..0000000 --- a/0026-Supporting-UID-GID-configuration.patch +++ /dev/null @@ -1,306 +0,0 @@ -From 61bfa0ce515288897b93640507e48f09f0d78010 Mon Sep 17 00:00:00 2001 -From: wujing -Date: Tue, 14 Apr 2020 23:17:04 -0400 -Subject: [PATCH 26/49] Supporting UID GID configuration - -Signed-off-by: wujing ---- - src/lxc/attach.c | 16 ++++++++ - src/lxc/conf.c | 19 ++++++++- - src/lxc/conf.h | 4 ++ - src/lxc/start.c | 8 ++++ - src/lxc/tools/lxc_attach.c | 99 +++++++++++++++++++++++++++++++++++++++++++--- - 5 files changed, 139 insertions(+), 7 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 33946bb..c77b929 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -749,8 +749,10 @@ static int attach_child_main(struct attach_clone_payload *payload) - goto on_error; - } - -+#ifndef HAVE_ISULAD - if (!lxc_setgroups(0, NULL) && errno != EPERM) - goto on_error; -+#endif - - if (options->namespaces & CLONE_NEWUSER) { - /* Check whether nsuid 0 has a mapping. */ -@@ -892,6 +894,12 @@ static int attach_child_main(struct attach_clone_payload *payload) - if (new_gid == ns_root_gid) - new_gid = LXC_INVALID_GID; - -+#ifdef HAVE_ISULAD -+ if (!lxc_setgroups(init_ctx->container->lxc_conf->init_groups_len, -+ init_ctx->container->lxc_conf->init_groups)) -+ goto on_error; -+#endif -+ - /* Make sure that the processes STDIO is correctly owned by the user that we are switching to */ - ret = fix_stdio_permissions(new_uid); - if (ret) -@@ -1058,6 +1066,14 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - } - conf = init_ctx->container->lxc_conf; - -+#ifdef HAVE_ISULAD -+ // always switch uid and gid for attach -+ if (options->uid == -1) -+ options->uid = init_ctx->container->lxc_conf->init_uid; -+ if (options->gid == -1) -+ options->gid = init_ctx->container->lxc_conf->init_gid; -+#endif -+ - if (!fetch_seccomp(init_ctx->container, options)) - WARN("Failed to get seccomp policy"); - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 71fd6f9..43ef067 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -5100,6 +5100,7 @@ void lxc_conf_free(struct lxc_conf *conf) - close(conf->exit_fd); - } - lxc_clear_init_args(conf); -+ lxc_clear_init_groups(conf); - lxc_clear_populate_devices(conf); - lxc_clear_rootfs_masked_paths(conf); - lxc_clear_rootfs_ro_paths(conf); -@@ -5919,11 +5920,25 @@ struct lxc_list *sort_cgroup_settings(struct lxc_list *cgroup_settings) - /*isulad clear init args*/ - int lxc_clear_init_args(struct lxc_conf *lxc_conf) - { -- size_t i; -+ int i; - -- for (i = 0; i < lxc_conf->init_argc; i++) -+ for (i = 0; i < lxc_conf->init_argc; i++) { - free(lxc_conf->init_argv[i]); -+ lxc_conf->init_argv[i] = NULL; -+ } - free(lxc_conf->init_argv); -+ lxc_conf->init_argv = NULL; -+ lxc_conf->init_argc = 0; -+ -+ return 0; -+} -+ -+/*isulad clear init groups*/ -+int lxc_clear_init_groups(struct lxc_conf *lxc_conf) -+{ -+ free(lxc_conf->init_groups); -+ lxc_conf->init_groups = NULL; -+ lxc_conf->init_groups_len = 0; - - return 0; - } -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 61c3383..879e427 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -451,6 +451,9 @@ struct lxc_conf { - char **init_argv; - size_t init_argc; - -+ gid_t *init_groups; -+ size_t init_groups_len; -+ - /* populate devices*/ - struct lxc_list populate_devs; - mode_t umask; //umask value -@@ -548,6 +551,7 @@ extern int parse_mntopts(const char *mntopts, unsigned long *mntflags, - #ifdef HAVE_ISULAD - // isulad add - int lxc_clear_init_args(struct lxc_conf *lxc_conf); -+int lxc_clear_init_groups(struct lxc_conf *lxc_conf); - int lxc_clear_populate_devices(struct lxc_conf *c); - int lxc_clear_rootfs_masked_paths(struct lxc_conf *c); - int lxc_clear_rootfs_ro_paths(struct lxc_conf *c); -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 4f45776..e2311ec 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1685,8 +1685,16 @@ static int do_start(void *data) - #if HAVE_LIBCAP - if (lxc_proc_cap_is_set(CAP_SETGID, CAP_EFFECTIVE)) - #endif -+ #ifdef HAVE_ISULAD -+ /* isulad: set groups for init process, and before we set uid and gid */ -+ if (!lxc_setgroups(handler->conf->init_groups_len, handler->conf->init_groups)) { -+ ERROR("Can not set groups"); -+ goto out_warn_father; -+ } -+ #else - if (!lxc_setgroups(0, NULL)) - goto out_warn_father; -+ #endif - - if (!lxc_switch_uid_gid(new_uid, new_gid)) - goto out_warn_father; -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index 47ac2f2..b068c9a 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -72,9 +72,11 @@ static const struct option my_longopts[] = { - {"set-var", required_argument, 0, 'v'}, - {"pty-log", required_argument, 0, 'L'}, - {"rcfile", required_argument, 0, 'f'}, -+#ifndef HAVE_ISULAD - {"uid", required_argument, 0, 'u'}, - {"gid", required_argument, 0, 'g'}, --#ifdef HAVE_ISULAD -+#else -+ {"user", required_argument, 0, 'u'}, - {"in-fifo", required_argument, 0, OPT_INPUT_FIFO}, /* isulad add terminal fifos*/ - {"out-fifo", required_argument, 0, OPT_OUTPUT_FIFO}, - {"err-fifo", required_argument, 0, OPT_STDERR_FIFO}, -@@ -130,9 +132,18 @@ Options :\n\ - multiple times.\n\ - -f, --rcfile=FILE\n\ - Load configuration file FILE\n\ -+" -+#ifndef HAVE_ISULAD -+"\ - -u, --uid=UID Execute COMMAND with UID inside the container\n\ - -g, --gid=GID Execute COMMAND with GID inside the container\n\ --", -+" -+#else -+"\ -+ --user User ID (format: UID[:GID])\n\ -+" -+#endif -+, - .options = my_longopts, - .parser = my_parser, - .checker = NULL, -@@ -142,6 +153,71 @@ Options :\n\ - .gid = LXC_INVALID_GID, - }; - -+#ifdef HAVE_ISULAD -+static int parse_user_id(const char *username, char **uid, char **gid, char **tmp_dup) -+{ -+ char *tmp = NULL; -+ char *pdot = NULL; -+ -+ if (uid == NULL || gid == NULL || tmp_dup == NULL) { -+ return -1; -+ } -+ -+ if (username != NULL) { -+ tmp = strdup(username); -+ if (tmp == NULL) { -+ ERROR("Failed to duplicate user name"); -+ return -1; -+ } -+ -+ // for free tmp in caller -+ *tmp_dup = tmp; -+ pdot = strstr(tmp, ":"); -+ if (pdot != NULL) { -+ *pdot = '\0'; -+ if (pdot != tmp) { -+ // uid found -+ *uid = tmp; -+ } -+ -+ if (*(pdot + 1) != '\0') { -+ // gid found -+ *gid = pdot + 1; -+ } -+ } else { -+ // No : found -+ if (*tmp != '\0') { -+ *uid = tmp; -+ } -+ } -+ } -+ -+ return 0; -+} -+ -+static int get_attach_uid_gid(const char *username, uid_t *user_id, gid_t *group_id) -+{ -+ char *tmp = NULL; -+ char *uid = NULL; -+ char *gid = NULL; -+ -+ // parse uid and gid by username -+ if (parse_user_id(username, &uid, &gid, &tmp) != 0) { -+ return -1; -+ } -+ -+ if (uid != NULL) { -+ *user_id = (unsigned int)atoll(uid); -+ } -+ if (gid != NULL) { -+ *group_id = (unsigned int)atoll(gid); -+ } -+ -+ free(tmp); -+ return 0; -+} -+#endif -+ - static int my_parser(struct lxc_arguments *args, int c, char *arg) - { - int ret; -@@ -199,6 +275,7 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - case 'f': - args->rcfile = arg; - break; -+#ifndef HAVE_ISULAD - case 'u': - if (lxc_safe_uint(arg, &args->uid) < 0) - return -1; -@@ -207,7 +284,13 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - if (lxc_safe_uint(arg, &args->gid) < 0) - return -1; - break; --#ifdef HAVE_ISULAD -+#else -+ case 'u': -+ if (get_attach_uid_gid(arg, &args->uid, &args->gid) != 0) { -+ ERROR("Failed to get attach user U/GID"); -+ return -1; -+ } -+ break; - case OPT_INPUT_FIFO: - args->terminal_fifos[0] = arg; - break; -@@ -286,7 +369,7 @@ static int lxc_attach_create_log_file(const char *log_file) - - #ifdef HAVE_ISULAD - // isulad: send '128 + signal' if container is killed by signal. --#define ExitSignalOffset 128 -+#define EXIT_SIGNAL_OFFSET 128 - - /*isulad: attach with terminal*/ - static int do_attach_foreground(struct lxc_container *c, lxc_attach_command_t *command, -@@ -316,7 +399,7 @@ static int do_attach_foreground(struct lxc_container *c, lxc_attach_command_t *c - - if (WIFSIGNALED(ret)) { - signal = WTERMSIG(ret); -- wexit = ExitSignalOffset + signal; -+ wexit = EXIT_SIGNAL_OFFSET + signal; - } - out: - if (c->lxc_conf->errmsg) -@@ -515,6 +598,12 @@ int main(int argc, char *argv[]) - } - } - -+ if (my_args.uid != LXC_INVALID_UID) -+ attach_options.uid = my_args.uid; -+ -+ if (my_args.gid != LXC_INVALID_GID) -+ attach_options.gid = my_args.gid; -+ - attach_options.suffix = my_args.suffix; - - /* isulad: add do attach background */ --- -1.8.3.1 - diff --git a/0027-Capabilites-security-feature-enhanced.patch b/0027-Capabilites-security-feature-enhanced.patch deleted file mode 100644 index 60419dc..0000000 --- a/0027-Capabilites-security-feature-enhanced.patch +++ /dev/null @@ -1,240 +0,0 @@ -From e71dabf21ddd2a093ebdfcc6f6c79200415d12b1 Mon Sep 17 00:00:00 2001 -From: wujing -Date: Tue, 14 Apr 2020 23:30:46 -0400 -Subject: [PATCH 27/49] Capabilites security feature enhanced - -Signed-off-by: wujing ---- - src/lxc/attach.c | 24 +++++++++++++ - src/lxc/conf.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/conf.h | 1 + - src/lxc/start.c | 20 +++++++++++ - 4 files changed, 148 insertions(+) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index c77b929..231fa5f 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -832,10 +832,12 @@ static int attach_child_main(struct attach_clone_payload *payload) - goto on_error; - } - -+#ifndef HAVE_ISULAD - close(payload->ipc_socket); - payload->ipc_socket = -EBADF; - lxc_proc_put_context_info(init_ctx); - payload->init_ctx = NULL; -+#endif - - /* The following is done after the communication socket is shut down. - * That way, all errors that might (though unlikely) occur up until this -@@ -895,6 +897,11 @@ static int attach_child_main(struct attach_clone_payload *payload) - new_gid = LXC_INVALID_GID; - - #ifdef HAVE_ISULAD -+ if (prctl(PR_SET_KEEPCAPS, 1) < 0) { -+ SYSERROR("Failed to keep permitted capabilities"); -+ goto on_error; -+ } -+ - if (!lxc_setgroups(init_ctx->container->lxc_conf->init_groups_len, - init_ctx->container->lxc_conf->init_groups)) - goto on_error; -@@ -908,6 +915,23 @@ static int attach_child_main(struct attach_clone_payload *payload) - if (!lxc_switch_uid_gid(new_uid, new_gid)) - goto on_error; - -+#ifdef HAVE_ISULAD -+ if (prctl(PR_SET_KEEPCAPS, 0) < 0) { -+ SYSERROR("Failed to clear permitted capabilities"); -+ goto on_error; -+ } -+ -+ if (lxc_drop_caps(init_ctx->container->lxc_conf) != 0) { -+ ERROR("Failed to drop caps."); -+ goto on_error; -+ } -+ -+ close(payload->ipc_socket); -+ payload->ipc_socket = -EBADF; -+ lxc_proc_put_context_info(init_ctx); -+ payload->init_ctx = NULL; -+#endif -+ - /* We're done, so we can now do whatever the user intended us to do. */ - _exit(payload->exec_function(payload->exec_payload)); - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 43ef067..325e0c2 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -2902,6 +2902,16 @@ static int dropcaps_except(struct lxc_list *caps) - lxc_list_for_each (iterator, caps) { - keep_entry = iterator->elem; - -+#ifdef HAVE_ISULAD -+ /* Do not keep any cap*/ -+ if (strcmp(keep_entry, "ISULAD_KEEP_NONE") == 0) { -+ DEBUG("Do not keep any capability"); -+ for(i = 0; i < numcaps; i++) { -+ caplist[i] = 0; -+ } -+ break; -+ } -+#endif - capid = parse_cap(keep_entry); - if (capid == -2) - continue; -@@ -4703,6 +4713,99 @@ int lxc_setup(struct lxc_handler *handler) - return 0; - } - -+#ifdef HAVE_ISULAD -+/* isulad drop caps for container*/ -+int lxc_drop_caps(struct lxc_conf *conf) -+{ -+#define __DEF_CAP_TO_MASK(x) (1U << ((x) & 31)) -+#if HAVE_LIBCAP -+ int ret = 0; -+ struct lxc_list *iterator = NULL; -+ char *keep_entry = NULL; -+ size_t i = 0; -+ int capid; -+ size_t numcaps = (size_t)lxc_caps_last_cap() + 1; -+ struct lxc_list *caps = NULL; -+ int *caplist = NULL; -+ -+ if (lxc_list_empty(&conf->keepcaps)) -+ return 0; -+ -+ caps = &conf->keepcaps; -+ -+ if (numcaps <= 0 || numcaps > 200) -+ return -1; -+ -+ // caplist[i] is 1 if we keep capability i -+ caplist = malloc(numcaps * sizeof(int)); -+ if (caplist == NULL) { -+ ERROR("Out of memory"); -+ return -1; -+ } -+ (void)memset(caplist, 0, numcaps * sizeof(int)); -+ -+ lxc_list_for_each(iterator, caps) { -+ -+ keep_entry = iterator->elem; -+ /* isulad: Do not keep any cap*/ -+ if (strcmp(keep_entry, "ISULAD_KEEP_NONE") == 0) { -+ DEBUG("Do not keep any capability"); -+ for(i = 0; i < numcaps; i++) { -+ caplist[i] = 0; -+ } -+ break; -+ } -+ -+ capid = parse_cap(keep_entry); -+ -+ if (capid == -2) -+ continue; -+ -+ if (capid < 0) { -+ ERROR("unknown capability %s", keep_entry); -+ ret = -1; -+ goto out; -+ } -+ -+ DEBUG("keep capability '%s' (%d)", keep_entry, capid); -+ -+ caplist[capid] = 1; -+ } -+ -+ struct __user_cap_header_struct cap_header_data; -+ struct __user_cap_data_struct cap_data_data[2]; -+ -+ cap_user_header_t cap_header = &cap_header_data; -+ cap_user_data_t cap_data = &cap_data_data[0]; -+ -+ memset(cap_header, 0,sizeof(struct __user_cap_header_struct)); -+ memset(cap_data, 0, sizeof(struct __user_cap_data_struct) * 2); -+ -+ cap_header->pid = 0; -+ cap_header->version = _LINUX_CAPABILITY_VERSION_3; -+ -+ for (i = 0; i < numcaps; i++) { -+ if (caplist[i]) { -+ cap_data[CAP_TO_INDEX(i)].effective = cap_data[CAP_TO_INDEX(i)].effective | (i > 31 ? __DEF_CAP_TO_MASK(i % 32) : __DEF_CAP_TO_MASK(i)); -+ cap_data[CAP_TO_INDEX(i)].permitted = cap_data[CAP_TO_INDEX(i)].permitted | (i > 31 ? __DEF_CAP_TO_MASK(i % 32) : __DEF_CAP_TO_MASK(i)); -+ cap_data[CAP_TO_INDEX(i)].inheritable = cap_data[CAP_TO_INDEX(i)].inheritable | (i > 31 ? __DEF_CAP_TO_MASK(i % 32) : __DEF_CAP_TO_MASK(i)); -+ } -+ } -+ -+ if (capset(cap_header, cap_data)) { -+ SYSERROR("Failed to set capabilitys"); -+ ret = -1; -+ goto out; -+ } -+ -+#endif -+ -+out: -+ free(caplist); -+ return ret; -+} -+#endif -+ - int run_lxc_hooks(const char *name, char *hookname, struct lxc_conf *conf, - char *argv[]) - { -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 879e427..7b6fd3b 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -555,6 +555,7 @@ int lxc_clear_init_groups(struct lxc_conf *lxc_conf); - int lxc_clear_populate_devices(struct lxc_conf *c); - int lxc_clear_rootfs_masked_paths(struct lxc_conf *c); - int lxc_clear_rootfs_ro_paths(struct lxc_conf *c); -+int lxc_drop_caps(struct lxc_conf *conf); - int run_oci_hooks(const char *name, const char *hookname, struct lxc_conf *conf, const char *lxcpath); - #endif - #endif /* __LXC_CONF_H */ -diff --git a/src/lxc/start.c b/src/lxc/start.c -index e2311ec..bb2e74a 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1652,6 +1652,13 @@ static int do_start(void *data) - } - } - -+#ifdef HAVE_ISULAD -+ if (prctl(PR_SET_KEEPCAPS, 1) < 0) { -+ SYSERROR("Failed to keep permitted capabilities"); -+ goto out_warn_father; -+ } -+#endif -+ - /* The container has been setup. We can now switch to an unprivileged - * uid/gid. - */ -@@ -1705,6 +1712,19 @@ static int do_start(void *data) - goto out_warn_father; - } - -+#ifdef HAVE_ISULAD -+ /* isulad: drop the cap of current process */ -+ if (prctl(PR_SET_KEEPCAPS, 0) < 0) { -+ SYSERROR("Failed to clear permitted capabilities"); -+ goto out_warn_father; -+ } -+ -+ if (lxc_drop_caps(handler->conf)) { -+ SYSERROR("Failed to drop caps"); -+ goto out_warn_father; -+ } -+#endif -+ - if (handler->conf->monitor_signal_pdeath != SIGKILL) { - ret = lxc_set_death_signal(handler->conf->monitor_signal_pdeath, - handler->monitor_pid, status_fd); --- -1.8.3.1 - diff --git a/0028-Supporting-workdir-configuration.patch b/0028-Supporting-workdir-configuration.patch deleted file mode 100644 index d681a71..0000000 --- a/0028-Supporting-workdir-configuration.patch +++ /dev/null @@ -1,167 +0,0 @@ -From cbe77bd42528e92d9e3871a36133a2a11f5a3f21 Mon Sep 17 00:00:00 2001 -From: wujing -Date: Wed, 15 Apr 2020 00:28:40 -0400 -Subject: [PATCH 28/49] Supporting workdir configuration - -Signed-off-by: wujing ---- - src/lxc/attach.c | 18 ++++++++++++++++++ - src/lxc/lxc.h | 7 +++++++ - src/lxc/lxccontainer.c | 26 +++++++++++++++++++++++++- - src/lxc/lxccontainer.h | 14 ++++++++++++++ - src/lxc/start.c | 10 ++++++++++ - 5 files changed, 74 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 231fa5f..cb480ed 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -708,6 +708,24 @@ static int attach_child_main(struct attach_clone_payload *payload) - TRACE("Dropped capabilities"); - } - -+#ifdef HAVE_ISULAD -+ /* isulad: set workdir */ -+ if (init_ctx->container->lxc_conf->init_cwd) { -+ char *init_cwd; -+ init_cwd = init_ctx->container->lxc_conf->init_cwd; -+ /* try to create workdir if not exist */ -+ struct stat st; -+ if (stat(init_cwd, &st) < 0 && mkdir_p(init_cwd, 0750) < 0) { -+ SYSERROR("Try to create directory \"%s\" as workdir failed when attach", init_cwd); -+ goto on_error; -+ } -+ if (chdir(init_cwd)) { -+ SYSERROR("Could not change directory to \"%s\" when attach", init_cwd); -+ goto on_error; -+ } -+ } -+#endif -+ - /* Always set the environment (specify (LXC_ATTACH_KEEP_ENV, NULL, NULL) - * if you want this to be a no-op). - */ -diff --git a/src/lxc/lxc.h b/src/lxc/lxc.h -index 630eff0..99fd422 100644 ---- a/src/lxc/lxc.h -+++ b/src/lxc/lxc.h -@@ -83,6 +83,13 @@ extern lxc_state_t lxc_state(const char *name, const char *lxcpath); - */ - extern struct lxc_container *lxc_container_new(const char *name, const char *configpath); - -+#ifdef HAVE_ISULAD -+/* -+ * Create a new container without loading config. -+ */ -+extern struct lxc_container *lxc_container_without_config_new(const char *name, const char *configpath); -+#endif -+ - /* - * Returns 1 on success, 0 on failure. - */ -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 9b3ab75..ce2b2bf 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -5595,7 +5595,11 @@ static bool do_lxcapi_get_container_pids(struct lxc_container *c, pid_t **pids,s - WRAP_API_2(bool, lxcapi_get_container_pids, pid_t **,size_t *) - #endif - -+#ifdef HAVE_ISULAD -+static struct lxc_container *do_lxc_container_new(const char *name, const char *configpath, bool load_config) -+#else - struct lxc_container *lxc_container_new(const char *name, const char *configpath) -+#endif - { - struct lxc_container *c; - size_t len; -@@ -5653,12 +5657,19 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath - fprintf(stderr, "Error allocating oci hooks file pathname\n"); - goto err; - } --#endif - -+ if (load_config && file_exists(c->configfile)) { -+ if (!lxcapi_load_config(c, NULL)) { -+ fprintf(stderr, "Failed to load config for %s\n", name); -+ goto err; -+ } -+ } -+#else - if (file_exists(c->configfile) && !lxcapi_load_config(c, NULL)) { - fprintf(stderr, "Failed to load config for %s\n", name); - goto err; - } -+#endif - - rc = ongoing_create(c); - switch (rc) { -@@ -5761,6 +5772,19 @@ err: - return NULL; - } - -+#ifdef HAVE_ISULAD -+// isulad: new container without load config to save time -+struct lxc_container *lxc_container_without_config_new(const char *name, const char *configpath) -+{ -+ return do_lxc_container_new(name, configpath, false); -+} -+ -+struct lxc_container *lxc_container_new(const char *name, const char *configpath) -+{ -+ return do_lxc_container_new(name, configpath, true); -+} -+#endif -+ - int lxc_get_wait_states(const char **states) - { - int i; -diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index f1621f9..e69be8f 100644 ---- a/src/lxc/lxccontainer.h -+++ b/src/lxc/lxccontainer.h -@@ -1097,6 +1097,20 @@ struct lxc_console_log { - */ - struct lxc_container *lxc_container_new(const char *name, const char *configpath); - -+#ifdef HAVE_ISULAD -+/*! -+ * \brief Create a new container without loading config. -+ * -+ * \param name Name to use for container. -+ * \param configpath Full path to configuration file to use. -+ * -+ * \return Newly-allocated container, or \c NULL on error. -+ * -+ * \note This function can only used for listing container. -+ */ -+struct lxc_container *lxc_container_without_config_new(const char *name, const char *configpath); -+#endif -+ - /*! - * \brief Add a reference to the specified container. - * -diff --git a/src/lxc/start.c b/src/lxc/start.c -index bb2e74a..70ce1bd 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1609,6 +1609,16 @@ static int do_start(void *data) - close_prot_errno_disarm(devnull_fd); - - if (handler->conf->init_cwd) { -+#ifdef HAVE_ISULAD -+ /* try to craete workdir if not exist */ -+ struct stat st; -+ if (stat(handler->conf->init_cwd, &st) < 0 && mkdir_p(handler->conf->init_cwd, 0755) < 0) { -+ SYSERROR("Try to create directory \"%s\" as workdir failed", handler->conf->init_cwd); -+ lxc_write_error_message(handler->conf->errpipe[1], "%s:%d: Failed to create workdir: %s.", -+ __FILE__, __LINE__, strerror(errno)); -+ goto out_warn_father; -+ } -+#endif - ret = chdir(handler->conf->init_cwd); - if (ret < 0) { - SYSERROR("Could not change directory to \"%s\"", --- -1.8.3.1 - diff --git a/0029-Supporting-additional-groups-configuration.patch b/0029-Supporting-additional-groups-configuration.patch deleted file mode 100644 index e6bb049..0000000 --- a/0029-Supporting-additional-groups-configuration.patch +++ /dev/null @@ -1,103 +0,0 @@ -From f25dd7358ea454e78c41094e79764ea9e09f28e7 Mon Sep 17 00:00:00 2001 -From: wujing -Date: Wed, 15 Apr 2020 03:57:20 -0400 -Subject: [PATCH 29/49] Supporting additional groups configuration - -Signed-off-by: wujing ---- - src/lxc/confile.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 65 insertions(+) - -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 9ba3c7c..55cba6d 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -149,6 +149,7 @@ lxc_config_define(sysctl); - lxc_config_define(proc); - #ifdef HAVE_ISULAD - lxc_config_define(init_args); -+lxc_config_define(init_groups); - lxc_config_define(populate_device); - lxc_config_define(umask); - lxc_config_define(rootfs_masked_paths); -@@ -268,6 +269,7 @@ static struct lxc_config_t config_jump_table[] = { - { "lxc.proc", set_config_proc, get_config_proc, clr_config_proc, }, - #ifdef HAVE_ISULAD - { "lxc.isulad.init.args", set_config_init_args, get_config_init_args, clr_config_init_args, }, -+ { "lxc.isulad.init.groups", set_config_init_groups, get_config_init_groups, clr_config_init_groups, }, - { "lxc.isulad.populate.device", set_config_populate_device, get_config_populate_device, clr_config_populate_device, }, - { "lxc.isulad.umask", set_config_umask, get_config_umask, clr_config_umask, }, - { "lxc.isulad.rootfs.maskedpaths", set_config_rootfs_masked_paths, get_config_rootfs_masked_paths, clr_config_rootfs_masked_paths, }, -@@ -6247,6 +6249,69 @@ static inline int clr_config_init_args(const char *key, struct lxc_conf *c, - return lxc_clear_init_args(c); - } - -+/* isulad: set config for init groups */ -+static int set_config_init_groups(const char *key, const char *value, -+ struct lxc_conf *lxc_conf, void *data) -+{ -+ char *groups = NULL; -+ char *token = NULL; -+ int ret = -1; -+ -+ if (lxc_config_value_empty(value)) -+ return lxc_clear_init_groups(lxc_conf); -+ -+ groups = strdup(value); -+ if (!groups) -+ return -1; -+ -+ /* In case several capability keep is specified in a single line -+ * split these caps in a single element for the list. -+ */ -+ lxc_iterate_parts(token, groups, " \t") { -+ gid_t *tmp = NULL; -+ if (lxc_mem_realloc((void **)&tmp, (lxc_conf->init_groups_len + 1) * sizeof(gid_t), lxc_conf->init_groups, -+ (lxc_conf->init_groups_len) * sizeof(gid_t)) != 0) { -+ ERROR("Out of memory"); -+ goto on_error; -+ } -+ lxc_conf->init_groups = tmp; -+ tmp[lxc_conf->init_groups_len] = atoll(token); -+ lxc_conf->init_groups_len++; -+ } -+ -+ ret = 0; -+ -+on_error: -+ free(groups); -+ -+ return ret; -+} -+ -+/* isulad: get config init groups */ -+static int get_config_init_groups(const char *key, char *retv, int inlen, -+ struct lxc_conf *c, void *data) -+{ -+ int i, len, fulllen = 0; -+ -+ if (!retv) -+ inlen = 0; -+ else -+ memset(retv, 0, inlen); -+ -+ for (i = 0; i < c->init_groups_len; i++) { -+ strprint(retv, inlen, "%u\n", c->init_groups[i]); -+ } -+ -+ return fulllen; -+} -+ -+/* isulad: clr config init args*/ -+static inline int clr_config_init_groups(const char *key, struct lxc_conf *c, -+ void *data) -+{ -+ return lxc_clear_init_groups(c); -+} -+ - /* isulad: set config for populate device */ - static int set_config_populate_device(const char *key, const char *value, - struct lxc_conf *lxc_conf, void *data) --- -1.8.3.1 - diff --git a/0030-set-negative-files.limit-value-to-max.patch b/0030-set-negative-files.limit-value-to-max.patch deleted file mode 100644 index 89205c8..0000000 --- a/0030-set-negative-files.limit-value-to-max.patch +++ /dev/null @@ -1,71 +0,0 @@ -From eef7e463b7d4bebc305d65c35288c9fab6a5486f Mon Sep 17 00:00:00 2001 -From: wujing -Date: Wed, 15 Apr 2020 05:45:49 -0400 -Subject: [PATCH 30/49] set negative files.limit value to max - -Signed-off-by: wujing ---- - src/lxc/cgroups/cgfsng.c | 19 +++++++++++++++---- - src/lxc/storage/storage.c | 8 +++++++- - 2 files changed, 22 insertions(+), 5 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 00270ab..b6aef12 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -3481,16 +3481,27 @@ __cgfsng_ops static bool cgfsng_setup_limits_legacy(struct cgroup_ops *ops, - cg = iterator->elem; - - if (do_devices == !strncmp("devices", cg->subsystem, 7)) { -- if (isulad_cg_legacy_set_data(ops, cg->subsystem, cg->value)) { -+ const char *cgvalue = cg->value; -+ if (strcmp(cg->subsystem, "files.limit") == 0) { -+ if (lxc_safe_long_long(cgvalue, &setvalue) != 0) { -+ SYSERROR("Invalid integer value %s", cgvalue); -+ goto out; -+ } -+ if (setvalue <= 0) { -+ cgvalue = "max"; -+ } -+ } -+ if (isulad_cg_legacy_set_data(ops, cg->subsystem, cgvalue)) { - if (do_devices && (errno == EACCES || errno == EPERM)) { -- SYSWARN("Failed to set \"%s\" to \"%s\"", cg->subsystem, cg->value); -+ SYSWARN("Failed to set \"%s\" to \"%s\"", cg->subsystem, cgvalue); - continue; - } -- SYSERROR("Failed to set \"%s\" to \"%s\"", cg->subsystem, cg->value); -+ SYSERROR("Failed to set \"%s\" to \"%s\"", cg->subsystem, cgvalue); - goto out; - } -- DEBUG("Set controller \"%s\" set to \"%s\"", cg->subsystem, cg->value); -+ DEBUG("Set controller \"%s\" set to \"%s\"", cg->subsystem, cgvalue); - } -+ - // isulad: check cpu shares - if (strcmp(cg->subsystem, "cpu.shares") == 0) { - if (isulad_cg_legacy_get_data(ops, cg->subsystem, value, sizeof(value) - 1) < 0) { -diff --git a/src/lxc/storage/storage.c b/src/lxc/storage/storage.c -index 876311a..5291b24 100644 ---- a/src/lxc/storage/storage.c -+++ b/src/lxc/storage/storage.c -@@ -591,9 +591,15 @@ bool storage_destroy(struct lxc_conf *conf) - int destroy_rv = 0; - - r = storage_init(conf); -+#ifdef HAVE_ISULAD -+ if (r == NULL) { -+ WARN("%s 's storage init failed, the storage may be deleted already", conf->name); -+ return true; -+ } -+#else - if (!r) - return ret; -- -+#endif - destroy_rv = r->ops->destroy(r); - if (destroy_rv == 0) - ret = true; --- -1.8.3.1 - diff --git a/0031-head-file-remove-macro-HAVE_ISULAD-in-installed-head.patch b/0031-head-file-remove-macro-HAVE_ISULAD-in-installed-head.patch deleted file mode 100644 index c211fa2..0000000 --- a/0031-head-file-remove-macro-HAVE_ISULAD-in-installed-head.patch +++ /dev/null @@ -1,115 +0,0 @@ -From 5065f006a775e345fa80c1250442ff0f5c05383f Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Wed, 15 Apr 2020 17:46:54 +0800 -Subject: [PATCH 31/49] head file: remove macro HAVE_ISULAD in installed head - file - -Signed-off-by: LiFeng ---- - src/lxc/attach_options.h | 25 ++----------------------- - src/lxc/lxccontainer.h | 6 ------ - 2 files changed, 2 insertions(+), 29 deletions(-) - -diff --git a/src/lxc/attach_options.h b/src/lxc/attach_options.h -index 7b0ea5e..5f01739 100644 ---- a/src/lxc/attach_options.h -+++ b/src/lxc/attach_options.h -@@ -113,15 +113,12 @@ typedef struct lxc_attach_options_t { - - /*! File descriptor to log output. */ - int log_fd; --#ifdef HAVE_ISULAD -+ - char *init_fifo[3]; /* isulad: default fifos for the start */ - int64_t timeout;/* isulad: Seconds for waiting on a container to attach/exec before it is killed*/ - const char *suffix; --#endif -- - } lxc_attach_options_t; - --#ifdef HAVE_ISULAD - /*! Default attach options to use */ - #define LXC_ATTACH_OPTIONS_DEFAULT \ - { \ -@@ -140,25 +137,7 @@ typedef struct lxc_attach_options_t { - /* .log_fd = */ -EBADF, \ - /* .init_fifo = */ {NULL, NULL, NULL}, \ - } --#else --/*! Default attach options to use */ --#define LXC_ATTACH_OPTIONS_DEFAULT \ -- { \ -- /* .attach_flags = */ LXC_ATTACH_DEFAULT, \ -- /* .namespaces = */ -1, \ -- /* .personality = */ -1, \ -- /* .initial_cwd = */ NULL, \ -- /* .uid = */ (uid_t)-1, \ -- /* .gid = */ (gid_t)-1, \ -- /* .env_policy = */ LXC_ATTACH_KEEP_ENV, \ -- /* .extra_env_vars = */ NULL, \ -- /* .extra_keep_env = */ NULL, \ -- /* .stdin_fd = */ 0, \ -- /* .stdout_fd = */ 1, \ -- /* .stderr_fd = */ 2, \ -- /* .log_fd = */ -EBADF, \ -- } --#endif -+ - /*! - * Representation of a command to run in a container. - */ -diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index e69be8f..6ede70c 100644 ---- a/src/lxc/lxccontainer.h -+++ b/src/lxc/lxccontainer.h -@@ -107,7 +107,6 @@ struct lxc_container { - /*! Full path to configuration file */ - char *config_path; - --#ifdef HAVE_ISULAD - /*! isulad: - * \private - * exit FIFO File to open used monitor the state of lxc monitor process. -@@ -125,7 +124,6 @@ struct lxc_container { - * full path of json file - * */ - char *ocihookfile; --#endif - - /*! - * \brief Determine if \c /var/lib/lxc/$name/config exists. -@@ -886,7 +884,6 @@ struct lxc_container { - */ - int (*init_pidfd)(struct lxc_container *c); - --#ifdef HAVE_ISULAD - /*! isulad add - * \brief An API call to set the path of info file - * -@@ -963,7 +960,6 @@ struct lxc_container { - * \return \c true on success, else \c false. - */ - bool (*get_container_pids)(struct lxc_container *c,pid_t **pids,size_t *pids_len); --#endif - }; - - /*! -@@ -1097,7 +1093,6 @@ struct lxc_console_log { - */ - struct lxc_container *lxc_container_new(const char *name, const char *configpath); - --#ifdef HAVE_ISULAD - /*! - * \brief Create a new container without loading config. - * -@@ -1109,7 +1104,6 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath - * \note This function can only used for listing container. - */ - struct lxc_container *lxc_container_without_config_new(const char *name, const char *configpath); --#endif - - /*! - * \brief Add a reference to the specified container. --- -1.8.3.1 - diff --git a/0032-link-proc-mounts-to-etc-mtab.patch b/0032-link-proc-mounts-to-etc-mtab.patch deleted file mode 100644 index 00a0a47..0000000 --- a/0032-link-proc-mounts-to-etc-mtab.patch +++ /dev/null @@ -1,68 +0,0 @@ -From e86ebe923f1ecc072d8a99949871b46fe8188ac9 Mon Sep 17 00:00:00 2001 -From: wujing -Date: Wed, 15 Apr 2020 06:01:36 -0400 -Subject: [PATCH 32/49] link proc mounts to etc mtab - -Signed-off-by: wujing ---- - src/lxc/conf.c | 37 +++++++++++++++++++++++++++++++++++++ - 1 file changed, 37 insertions(+) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 325e0c2..6856b1d 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -3977,6 +3977,37 @@ struct oci_hook_conf { - int which; - }; - -+static int create_mtab_link() -+{ -+ ssize_t ret; -+ int mret; -+ struct stat sbuf; -+ const char *pathname = "/proc/mounts"; -+ const char *slink = "/etc/mtab"; -+ -+ if (file_exists(slink)) { -+ return 0; -+ } -+ -+ ret = stat(pathname, &sbuf); -+ if (ret < 0) { -+ SYSERROR("Failed to stat %s: %s", pathname, strerror(errno)); -+ return -1; -+ } -+ -+ mret = symlink(pathname, slink); -+ if (mret < 0 && errno != EEXIST) { -+ if (errno == EROFS) { -+ WARN("Failed to create link %s for target %s. Read-only filesystem", slink, pathname); -+ } else { -+ SYSERROR("Failed to create \"%s\"", slink); -+ return -1; -+ } -+ } -+ -+ return 0; -+} -+ - struct wait_conf { - pid_t pid; - unsigned long long startat; -@@ -4696,6 +4727,12 @@ int lxc_setup(struct lxc_handler *handler) - return log_error(-1, "failed to setup readonlypaths"); - } - } -+ -+ // isulad: create link /etc/mtab for /proc/mounts -+ if (create_mtab_link() != 0) { -+ ERROR("failed to create link /etc/mtab for target /proc/mounts"); -+ goto on_error; -+ } - #endif - - if (!lxc_list_empty(&lxc_conf->keepcaps)) { --- -1.8.3.1 - diff --git a/0033-build-add-secure-build-flags.patch b/0033-build-add-secure-build-flags.patch deleted file mode 100644 index 15e3f3d..0000000 --- a/0033-build-add-secure-build-flags.patch +++ /dev/null @@ -1,423 +0,0 @@ -From 2b69f168a6847885233e88be02a1143a4c55b59f Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Wed, 15 Apr 2020 18:58:24 +0800 -Subject: [PATCH 33/49] build: add secure build flags - -Signed-off-by: LiFeng ---- - configure.ac | 14 +++++- - src/lxc/Makefile.am | 8 +++- - src/lxc/cgroups/cgfsng.c | 117 ++++++++++++++++++++++++--------------------- - src/lxc/confile.c | 1 - - src/lxc/terminal.c | 6 ++- - src/lxc/tools/lxc_attach.c | 2 - - src/lxc/utils.c | 7 +++ - 7 files changed, 93 insertions(+), 62 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 56d0cb7..438d292 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -43,6 +43,7 @@ AM_INIT_AUTOMAKE([-Wall -Werror -Wno-portability subdir-objects]) - AC_CANONICAL_HOST - AM_PROG_CC_C_O - AC_USE_SYSTEM_EXTENSIONS -+CFLAGS=`echo "${CFLAGS#\-g}"` - - # Test if we have a new enough compiler. - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -@@ -190,6 +191,11 @@ AC_ARG_ENABLE([werror], - [AS_HELP_STRING([--disable-werror], [do not treat warnings as errors])], - [enable_werror=$enableval], [enable_werror=yes]) - -+AC_ARG_ENABLE([debug], -+ [AC_HELP_STRING([--enable-debug], -+ [set -g into cflags [default=no]])], -+ [], [enable_debug=no]) -+ - # Allow disabling rpath - AC_ARG_ENABLE([rpath], - [AS_HELP_STRING([--enable-rpath], [set rpath in executables [default=no]])], -@@ -732,7 +738,6 @@ AX_CHECK_COMPILE_FLAG([-fno-strict-aliasing], [CFLAGS="$CFLAGS -fno-strict-alias - AX_CHECK_COMPILE_FLAG([-fstack-clash-protection], [CFLAGS="$CFLAGS -fstack-clash-protection"],,[-Werror]) - AX_CHECK_LINK_FLAG([-fstack-protector-strong], [CFLAGS="$CFLAGS -fstack-protector-strong"],,[-Werror]) - AX_CHECK_LINK_FLAG([--param=ssp-buffer-size=4], [CFLAGS="$CFLAGS --param=ssp-buffer-size=4"],,[-Werror]) --AX_CHECK_COMPILE_FLAG([-g], [CFLAGS="$CFLAGS -g"],,[-Werror]) - AX_CHECK_COMPILE_FLAG([--mcet -fcf-protection], [CFLAGS="$CFLAGS --mcet -fcf-protection"],,[-Werror]) - AX_CHECK_COMPILE_FLAG([-Werror=implicit-function-declaration], [CFLAGS="$CFLAGS -Werror=implicit-function-declaration"],,[-Werror]) - AX_CHECK_COMPILE_FLAG([-Wlogical-op], [CFLAGS="$CFLAGS -Wlogical-op"],,[-Werror]) -@@ -759,12 +764,17 @@ AX_CHECK_COMPILE_FLAG([-fexceptions], [CFLAGS="$CFLAGS -fexceptions"],,[-Werror] - - AX_CHECK_LINK_FLAG([-z relro], [LDFLAGS="$LDFLAGS -z relro"],,[]) - AX_CHECK_LINK_FLAG([-z now], [LDFLAGS="$LDFLAGS -z now"],,[]) -+AX_CHECK_LINK_FLAG([-z noexecstack], [LDFLAGS="$LDFLAGS -z noexecstack"],,[]) - --CFLAGS="$CFLAGS -Wvla -std=gnu11" -+CFLAGS="$CFLAGS -Wvla -std=gnu11 -D_FORTIFY_SOURCE=2 -Wall -fPIC -fPIE -pie" - if test "x$enable_werror" = "xyes"; then - CFLAGS="$CFLAGS -Werror" - fi - -+if test "x$enable_debug" = "xyes"; then -+ CFLAGS="$CFLAGS -g" -+fi -+ - AC_ARG_ENABLE([thread-safety], - [AS_HELP_STRING([--enable-thread-safety], [enforce thread-safety otherwise fail the build [default=yes]])], - [enable_thread_safety=$enableval], [enable_thread_safety=yes]) -diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am -index c288c51..0e1ba8d 100644 ---- a/src/lxc/Makefile.am -+++ b/src/lxc/Makefile.am -@@ -276,6 +276,10 @@ liblxc_la_CFLAGS += -fsanitize=address \ - -fno-omit-frame-pointer - endif - -+if HAVE_ISULAD -+liblxc_la_CFLAGS += -D_FORTIFY_SOURCE=2 -Wall -+endif -+ - if ENABLE_UBSAN - liblxc_la_CFLAGS += -fsanitize=undefined - endif -@@ -286,7 +290,9 @@ liblxc_la_LDFLAGS = -pthread \ - -version-info @LXC_ABI_MAJOR@ - - if HAVE_ISULAD --liblxc_la_LDFLAGS += @YAJL_LIBS@ -+liblxc_la_LDFLAGS += @YAJL_LIBS@ -Wl,-z,relro \ -+ -Wl,-z,now \ -+ -Wl,-z,noexecstack - endif - - liblxc_la_LIBADD = $(CAP_LIBS) \ -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index b6aef12..1047c08 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -214,6 +214,7 @@ static char *read_file(const char *fnam) - return move_ptr(buf); - } - -+#ifndef HAVE_ISULAD - /* Taken over modified from the kernel sources. */ - #define NBITS 32 /* bits in uint32_t */ - #define DIV_ROUND_UP(n, d) (((n) + (d)-1) / (d)) -@@ -476,12 +477,14 @@ static bool copy_parent_file(const char *parent_cgroup, - value, child_cgroup, file); - return true; - } -+#endif - - static inline bool is_unified_hierarchy(const struct hierarchy *h) - { - return h->version == CGROUP2_SUPER_MAGIC; - } - -+#ifndef HAVE_ISULAD - /* - * Initialize the cpuset hierarchy in first directory of @cgroup_leaf and set - * cgroup.clone_children so that children inherit settings. Since the -@@ -561,6 +564,7 @@ static int cg_legacy_handle_cpuset_hierarchy(struct hierarchy *h, - - return fret; - } -+#endif - - /* Given two null-terminated lists of strings, return true if any string is in - * both. -@@ -946,29 +950,6 @@ static void lxc_cgfsng_print_basecg_debuginfo(char *basecginfo, char **klist, - TRACE("named subsystem %d: %s", k, *it); - } - --static int cgroup_tree_remove(struct hierarchy **hierarchies, -- const char *container_cgroup) --{ -- if (!container_cgroup || !hierarchies) -- return 0; -- -- for (int i = 0; hierarchies[i]; i++) { -- struct hierarchy *h = hierarchies[i]; -- int ret; -- -- if (!h->container_full_path) -- continue; -- -- ret = lxc_rm_rf(h->container_full_path); -- if (ret < 0) -- WARN("Failed to destroy \"%s\"", h->container_full_path); -- -- free_disarm(h->container_full_path); -- } -- -- return 0; --} -- - struct generic_userns_exec_data { - struct hierarchy **hierarchies; - const char *container_cgroup; -@@ -977,29 +958,6 @@ struct generic_userns_exec_data { - char *path; - }; - --static int cgroup_tree_remove_wrapper(void *data) --{ -- struct generic_userns_exec_data *arg = data; -- uid_t nsuid = (arg->conf->root_nsuid_map != NULL) ? 0 : arg->conf->init_uid; -- gid_t nsgid = (arg->conf->root_nsgid_map != NULL) ? 0 : arg->conf->init_gid; -- int ret; -- -- if (!lxc_setgroups(0, NULL) && errno != EPERM) -- return log_error_errno(-1, errno, "Failed to setgroups(0, NULL)"); -- -- ret = setresgid(nsgid, nsgid, nsgid); -- if (ret < 0) -- return log_error_errno(-1, errno, "Failed to setresgid(%d, %d, %d)", -- (int)nsgid, (int)nsgid, (int)nsgid); -- -- ret = setresuid(nsuid, nsuid, nsuid); -- if (ret < 0) -- return log_error_errno(-1, errno, "Failed to setresuid(%d, %d, %d)", -- (int)nsuid, (int)nsuid, (int)nsuid); -- -- return cgroup_tree_remove(arg->hierarchies, arg->container_cgroup); --} -- - #ifdef HAVE_ISULAD - - static int isulad_cgroup_tree_remove(struct hierarchy **hierarchies, -@@ -1100,6 +1058,52 @@ __cgfsng_ops static bool isulad_cgfsng_payload_destroy(struct cgroup_ops *ops, - return true; - } - #else -+static int cgroup_tree_remove(struct hierarchy **hierarchies, -+ const char *container_cgroup) -+{ -+ if (!container_cgroup || !hierarchies) -+ return 0; -+ -+ for (int i = 0; hierarchies[i]; i++) { -+ struct hierarchy *h = hierarchies[i]; -+ int ret; -+ -+ if (!h->container_full_path) -+ continue; -+ -+ ret = lxc_rm_rf(h->container_full_path); -+ if (ret < 0) -+ WARN("Failed to destroy \"%s\"", h->container_full_path); -+ -+ free_disarm(h->container_full_path); -+ } -+ -+ return 0; -+} -+ -+static int cgroup_tree_remove_wrapper(void *data) -+{ -+ struct generic_userns_exec_data *arg = data; -+ uid_t nsuid = (arg->conf->root_nsuid_map != NULL) ? 0 : arg->conf->init_uid; -+ gid_t nsgid = (arg->conf->root_nsgid_map != NULL) ? 0 : arg->conf->init_gid; -+ int ret; -+ -+ if (!lxc_setgroups(0, NULL) && errno != EPERM) -+ return log_error_errno(-1, errno, "Failed to setgroups(0, NULL)"); -+ -+ ret = setresgid(nsgid, nsgid, nsgid); -+ if (ret < 0) -+ return log_error_errno(-1, errno, "Failed to setresgid(%d, %d, %d)", -+ (int)nsgid, (int)nsgid, (int)nsgid); -+ -+ ret = setresuid(nsuid, nsuid, nsuid); -+ if (ret < 0) -+ return log_error_errno(-1, errno, "Failed to setresuid(%d, %d, %d)", -+ (int)nsuid, (int)nsuid, (int)nsuid); -+ -+ return cgroup_tree_remove(arg->hierarchies, arg->container_cgroup); -+} -+ - __cgfsng_ops static void cgfsng_payload_destroy(struct cgroup_ops *ops, - struct lxc_handler *handler) - { -@@ -1227,6 +1231,14 @@ try_lxc_rm_rf: - } - #endif - -+#ifdef HAVE_ISULAD -+__cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, -+ struct lxc_handler *handler) -+{ -+ return true; -+} -+#else -+ - static int mkdir_eexist_on_last(const char *dir, mode_t mode) - { - const char *tmp = dir; -@@ -1311,13 +1323,6 @@ static void cgroup_tree_leaf_remove(struct hierarchy *h, bool payload) - SYSWARN("Failed to rmdir(\"%s\") cgroup", full_path); - } - --#ifdef HAVE_ISULAD --__cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, -- struct lxc_handler *handler) --{ -- return true; --} --#else - __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, - struct lxc_handler *handler) - { -@@ -3038,6 +3043,7 @@ static int device_cgroup_parse_access(struct device_item *device, const char *va - return 0; - } - -+#ifndef HAVE_ISULAD - static int device_cgroup_rule_parse(struct device_item *device, const char *key, - const char *val) - { -@@ -3124,6 +3130,7 @@ static int device_cgroup_rule_parse(struct device_item *device, const char *key, - - return device_cgroup_parse_access(device, ++val); - } -+#endif - - #ifdef HAVE_ISULAD - __cgfsng_ops static int cgfsng_set(struct cgroup_ops *ops, -@@ -3307,6 +3314,7 @@ static int convert_devpath(const char *invalue, char *dest) - return 0; - } - -+#ifndef HAVE_ISULAD - /* Called from setup_limits - here we have the container's cgroup_data because - * we created the cgroups. - */ -@@ -3339,6 +3347,7 @@ static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename, - - return lxc_write_openat(h->container_full_path, filename, value, strlen(value)); - } -+#endif - - #ifdef HAVE_ISULAD - /* Called from setup_limits - here we have the container's cgroup_data because -@@ -3923,7 +3932,6 @@ static int cg_hybrid_init(struct cgroup_ops *ops, bool relative, bool unprivileg - __do_free char *base_cgroup = NULL, *mountpoint = NULL; - __do_free_string_list char **controller_list = NULL; - int type; -- bool writeable; - struct hierarchy *new; - - type = get_cgroup_version(line); -@@ -3989,6 +3997,7 @@ static int cg_hybrid_init(struct cgroup_ops *ops, bool relative, bool unprivileg - base_cgroup[1] = '\0'; - } - #else -+ bool writeable; - if (type == CGROUP2_SUPER_MAGIC) - writeable = test_writeable_v2(mountpoint, base_cgroup); - else -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 55cba6d..f00afe9 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -6228,7 +6228,6 @@ static int get_config_init_args(const char *key, char *retv, int inlen, - struct lxc_conf *c, void *data) - { - int i, len, fulllen = 0; -- struct lxc_list *it; - - if (!retv) - inlen = 0; -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 14686fc..c0a4d1a 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -287,6 +287,7 @@ static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) - return lxc_terminal_create_log_file(terminal); - } - -+#ifndef HAVE_ISULAD - static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, char *buf, - int bytes_read) - { -@@ -392,6 +393,7 @@ static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, char *buf, - bytes_read -= ret; - return bytes_read; - } -+#endif - - #ifdef HAVE_ISULAD - /* get time buffer */ -@@ -1240,8 +1242,8 @@ void lxc_terminal_free(struct lxc_conf *conf, int fd) - - static int lxc_terminal_peer_default(struct lxc_terminal *terminal) - { -- struct lxc_terminal_state *ts; -- const char *path; -+ struct lxc_terminal_state *ts = NULL; -+ const char *path = NULL; - int ret = 0; - - if (terminal->path) -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index b068c9a..48e18bb 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -507,11 +507,9 @@ out: - - int main(int argc, char *argv[]) - { -- int ret = -1; - int wexit = 0; - struct lxc_log log; - char *errmsg = NULL; -- pid_t pid; - lxc_attach_options_t attach_options = LXC_ATTACH_OPTIONS_DEFAULT; - lxc_attach_command_t command = (lxc_attach_command_t){.program = NULL}; - -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 39413ee..ba69995 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -1427,9 +1427,11 @@ static int lxc_get_unused_loop_dev(char *name_loop) - { - int loop_nr, ret; - int fd_ctl = -1, fd_tmp = -1; -+#if HAVE_ISULAD - // isulad: retry and try mknod - int max_retry = 200; - bool try_mknod = true; -+#endif - - fd_ctl = open("/dev/loop-control", O_RDWR | O_CLOEXEC); - if (fd_ctl < 0) { -@@ -1446,7 +1448,10 @@ static int lxc_get_unused_loop_dev(char *name_loop) - ret = snprintf(name_loop, LO_NAME_SIZE, "/dev/loop%d", loop_nr); - if (ret < 0 || ret >= LO_NAME_SIZE) - goto on_error; -+ -+#if HAVE_ISULAD - retry: -+#endif - fd_tmp = open(name_loop, O_RDWR | O_CLOEXEC); - if (fd_tmp < 0) { - #if HAVE_ISULAD -@@ -1693,6 +1698,7 @@ uint64_t lxc_find_next_power2(uint64_t n) - return n; - } - -+#ifndef HAVE_ISULAD - static int process_dead(/* takes */ int status_fd) - { - __do_close int dupfd = -EBADF; -@@ -1730,6 +1736,7 @@ static int process_dead(/* takes */ int status_fd) - - return ret; - } -+#endif - - int lxc_set_death_signal(int signal, pid_t parent, int parent_status_fd) - { --- -1.8.3.1 - diff --git a/0034-support-timeout.patch b/0034-support-timeout.patch deleted file mode 100644 index 442e6e9..0000000 --- a/0034-support-timeout.patch +++ /dev/null @@ -1,726 +0,0 @@ -From b13e288b8a46262e2c062ddfc152f10739b1691a Mon Sep 17 00:00:00 2001 -From: haozi007 -Date: Wed, 15 Apr 2020 17:35:53 +0800 -Subject: [PATCH 34/49] support timeout - -Signed-off-by: haozi007 ---- - src/lxc/attach.c | 104 ++++++++++++++++++++++++++++++++++++++-- - src/lxc/attach.h | 6 +++ - src/lxc/commands.c | 5 ++ - src/lxc/execute.c | 12 +++++ - src/lxc/lxc.h | 13 ++++- - src/lxc/lxccontainer.c | 41 ++++++++++++++-- - src/lxc/lxccontainer.h | 16 +++++++ - src/lxc/start.c | 115 +++++++++++++++++++++++++++++++++++++++++++-- - src/lxc/start.h | 6 +++ - src/lxc/tools/arguments.h | 2 + - src/lxc/tools/lxc_attach.c | 10 ++++ - src/lxc/tools/lxc_start.c | 14 ++++++ - src/lxc/utils.c | 11 +++++ - src/lxc/utils.h | 2 + - 14 files changed, 346 insertions(+), 11 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index cb480ed..510c069 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -45,12 +45,27 @@ - #include "terminal.h" - #include "utils.h" - -+#if HAVE_SYS_PERSONALITY_H -+#include -+#endif -+ - #ifdef HAVE_ISULAD - #include "exec_commands.h" --#endif - --#if HAVE_SYS_PERSONALITY_H --#include -+typedef enum { -+ ATTACH_INIT, -+ ATTACH_TIMEOUT, -+ ATTACH_MAX, -+} attach_timeout_t; -+ -+static volatile attach_timeout_t g_attach_timeout_state = ATTACH_INIT; -+ -+struct attach_timeout_conf { -+ int64_t timeout; -+ unsigned long long start_time; -+ pid_t pid; -+}; -+ - #endif - - lxc_log_define(attach, lxc); -@@ -1038,9 +1053,67 @@ static inline void lxc_attach_terminal_close_log(struct lxc_terminal *terminal) - close_prot_errno_disarm(terminal->log_fd); - } - -+#ifdef HAVE_ISULAD -+/* isulad: attach timeout thread function */ -+static void* wait_attach_timeout(void *arg) -+{ -+ struct attach_timeout_conf *conf = (struct attach_timeout_conf *)arg; -+ -+ if (!conf || conf->timeout < 1) -+ goto out; -+ sleep(conf->timeout); -+ if (lxc_process_alive(conf->pid, conf->start_time)) { -+ g_attach_timeout_state = ATTACH_TIMEOUT; -+ if (kill(conf->pid, SIGKILL) < 0) { -+ ERROR("Failed to send signal %d to pid %d", SIGKILL, conf->pid); -+ } -+ } -+ -+out: -+ free(conf); -+ return ((void *)0); -+} -+ -+/* isulad: create attach timeout thread */ -+static int create_attach_timeout_thread(int64_t attach_timeout, pid_t pid) -+{ -+ int ret = 0; -+ pthread_t ptid; -+ pthread_attr_t attr; -+ struct attach_timeout_conf *timeout_conf = NULL; -+ -+ timeout_conf = malloc(sizeof(struct attach_timeout_conf)); -+ if (timeout_conf == NULL) { -+ ERROR("Failed to malloc attach timeout conf"); -+ ret = -1; -+ goto out; -+ } -+ -+ memset(timeout_conf, 0, sizeof(struct attach_timeout_conf)); -+ timeout_conf->timeout = attach_timeout; -+ timeout_conf->pid = pid; -+ timeout_conf->start_time = lxc_get_process_startat(pid); -+ -+ pthread_attr_init(&attr); -+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); -+ ret = pthread_create(&ptid, &attr, wait_attach_timeout, timeout_conf); -+ if (ret != 0) { -+ ERROR("Create attach wait timeout thread failed"); -+ free(timeout_conf); -+ goto out; -+ } -+ -+out: -+ return ret; -+} -+int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, -+ void *exec_payload, lxc_attach_options_t *options, -+ pid_t *attached_process, char **err_msg) -+#else - int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - void *exec_payload, lxc_attach_options_t *options, - pid_t *attached_process) -+#endif - { - int i, ret, status; - int ipc_sockets[2]; -@@ -1417,6 +1490,26 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - - *attached_process = attached_pid; - -+#ifdef HAVE_ISULAD -+ if (options->timeout > 0) { -+ ret = create_attach_timeout_thread(options->timeout, *attached_process); -+ if (ret) { -+ ERROR("Failed to create attach timeout thread for container."); -+ goto close_mainloop; -+ } -+ } -+ /* isulad: read error msg from pipe */ -+ ssize_t size_read; -+ char errbuf[BUFSIZ + 1] = {0}; -+ -+ size_read = read(conf->errpipe[0], errbuf, BUFSIZ); -+ if (size_read > 0) { -+ if (err_msg) -+ *err_msg = safe_strdup(errbuf); -+ goto close_mainloop; -+ } -+#endif -+ - /* Now shut down communication with child, we're done. */ - shutdown(ipc_sockets[0], SHUT_RDWR); - close(ipc_sockets[0]); -@@ -1433,6 +1526,11 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - } - } - -+#ifdef HAVE_ISULAD -+ if (g_attach_timeout_state == ATTACH_TIMEOUT && err_msg != NULL && *err_msg == NULL) { -+ *err_msg = safe_strdup("Attach exceeded timeout"); -+ } -+#endif - close_mainloop: - if (options->attach_flags & LXC_ATTACH_TERMINAL) - lxc_mainloop_close(&descr); -diff --git a/src/lxc/attach.h b/src/lxc/attach.h -index ef5a6c1..8316344 100644 ---- a/src/lxc/attach.h -+++ b/src/lxc/attach.h -@@ -20,9 +20,15 @@ struct lxc_proc_context_info { - int ns_fd[LXC_NS_MAX]; - }; - -+#ifdef HAVE_ISULAD -+extern int lxc_attach(struct lxc_container *container, -+ lxc_attach_exec_t exec_function, void *exec_payload, -+ lxc_attach_options_t *options, pid_t *attached_process, char **err_msg); -+#else - extern int lxc_attach(struct lxc_container *container, - lxc_attach_exec_t exec_function, void *exec_payload, - lxc_attach_options_t *options, pid_t *attached_process); -+#endif - - extern int lxc_attach_remount_sys_proc(void); - -diff --git a/src/lxc/commands.c b/src/lxc/commands.c -index b21c12b..c32aef1 100644 ---- a/src/lxc/commands.c -+++ b/src/lxc/commands.c -@@ -119,7 +119,12 @@ static int lxc_cmd_rsp_recv(int sock, struct lxc_cmd_rr *cmd) - int ret; - struct lxc_cmd_rsp *rsp = &cmd->rsp; - -+#ifdef HAVE_ISULAD -+ /*isulad: add timeout 1s to avoid long block due to [lxc monitor] error*/ -+ ret = lxc_abstract_unix_recv_fds_timeout(sock, &fd_rsp, 1, rsp, sizeof(*rsp), 1000 * 1000); -+#else - ret = lxc_abstract_unix_recv_fds(sock, &fd_rsp, 1, rsp, sizeof(*rsp)); -+#endif - if (ret < 0) - return log_warn_errno(-1, - errno, "Failed to receive response for command \"%s\"", -diff --git a/src/lxc/execute.c b/src/lxc/execute.c -index 7dd8358..59ff604 100644 ---- a/src/lxc/execute.c -+++ b/src/lxc/execute.c -@@ -88,14 +88,26 @@ static struct lxc_operations execute_start_ops = { - .post_start = execute_post_start - }; - -+#ifdef HAVE_ISULAD -+int lxc_execute(const char *name, char *const argv[], int quiet, -+ struct lxc_handler *handler, const char *lxcpath, -+ bool daemonize, int *error_num, unsigned int start_timeout) -+#else - int lxc_execute(const char *name, char *const argv[], int quiet, - struct lxc_handler *handler, const char *lxcpath, - bool daemonize, int *error_num) -+#endif - { -+ - struct execute_args args = {.argv = argv, .quiet = quiet}; - - TRACE("Doing lxc_execute"); - handler->conf->is_execute = true; -+#ifdef HAVE_ISULAD -+ return __lxc_start(handler, &execute_start_ops, &args, lxcpath, -+ daemonize, error_num, start_timeout); -+#else - return __lxc_start(handler, &execute_start_ops, &args, lxcpath, - daemonize, error_num); -+#endif - } -diff --git a/src/lxc/lxc.h b/src/lxc/lxc.h -index 99fd422..ec2feaa 100644 ---- a/src/lxc/lxc.h -+++ b/src/lxc/lxc.h -@@ -32,9 +32,14 @@ struct lxc_handler; - * @daemonize : whether or not the container is daemonized - * Returns 0 on success, < 0 otherwise - */ -+#ifdef HAVE_ISULAD -+extern int lxc_start(char *const argv[], struct lxc_handler *handler, -+ const char *lxcpath, bool daemonize, int *error_num, -+ unsigned int start_timeout); -+#else - extern int lxc_start(char *const argv[], struct lxc_handler *handler, - const char *lxcpath, bool daemonize, int *error_num); -- -+#endif - /* - * Start the specified command inside an application container - * @name : the name of the container -@@ -44,9 +49,15 @@ extern int lxc_start(char *const argv[], struct lxc_handler *handler, - * @daemonize : whether or not the container is daemonized - * Returns 0 on success, < 0 otherwise - */ -+#ifdef HAVE_ISULAD -+extern int lxc_execute(const char *name, char *const argv[], int quiet, -+ struct lxc_handler *handler, const char *lxcpath, -+ bool daemonize, int *error_num, unsigned int start_timeout); -+#else - extern int lxc_execute(const char *name, char *const argv[], int quiet, - struct lxc_handler *handler, const char *lxcpath, - bool daemonize, int *error_num); -+#endif - - /* - * Close the fd associated with the monitoring -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index ce2b2bf..f622a63 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -1234,17 +1234,25 @@ reboot: - goto on_error; - } - -+#ifdef HAVE_ISULAD - if (useinit) { - ret = lxc_execute(c->name, argv, 1, handler, c->config_path, -- c->daemonize, &c->error_num); -+ c->daemonize, &c->error_num, c->start_timeout); - } - else { --#ifdef HAVE_ISULAD - handler->disable_pty = c->disable_pty; - handler->open_stdin = c->open_stdin; --#endif -+ ret = lxc_start(argv, handler, c->config_path, c->daemonize, -+ &c->error_num, c->start_timeout); -+#else -+ if (useinit) { -+ ret = lxc_execute(c->name, argv, 1, handler, c->config_path, -+ c->daemonize, &c->error_num); -+ } -+ else { - ret = lxc_start(argv, handler, c->config_path, c->daemonize, - &c->error_num); -+#endif - } - - if (conf->reboot == REBOOT_REQ) { -@@ -4200,8 +4208,13 @@ static int lxcapi_attach(struct lxc_container *c, - - current_config = c->lxc_conf; - -+#ifdef HAVE_ISULAD -+ ret = lxc_attach(c, exec_function, exec_payload, options, -+ attached_process, &c->lxc_conf->errmsg); -+#else - ret = lxc_attach(c, exec_function, exec_payload, options, - attached_process); -+#endif - current_config = NULL; - return ret; - } -@@ -4221,7 +4234,11 @@ static int do_lxcapi_attach_run_wait(struct lxc_container *c, - command.program = (char *)program; - command.argv = (char **)argv; - -+#ifdef HAVE_ISULAD -+ ret = lxc_attach(c, lxc_attach_run_command, &command, options, &pid, NULL); -+#else - ret = lxc_attach(c, lxc_attach_run_command, &command, options, &pid); -+#endif - if (ret < 0) - return ret; - -@@ -5593,6 +5610,23 @@ static bool do_lxcapi_get_container_pids(struct lxc_container *c, pid_t **pids,s - } - - WRAP_API_2(bool, lxcapi_get_container_pids, pid_t **,size_t *) -+ -+/* isulad add start timeout */ -+static bool do_lxcapi_set_start_timeout(struct lxc_container *c, unsigned int start_timeout) -+{ -+ if (!c || !c->lxc_conf) -+ return false; -+ if (container_mem_lock(c)) { -+ ERROR("Error getting mem lock"); -+ return false; -+ } -+ c->start_timeout = start_timeout; -+ container_mem_unlock(c); -+ return true; -+} -+ -+WRAP_API_1(bool, lxcapi_set_start_timeout, unsigned int) -+ - #endif - - #ifdef HAVE_ISULAD -@@ -5764,6 +5798,7 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath - c->want_open_stdin = lxcapi_want_open_stdin; - c->clean_container_resource = lxcapi_clean_container_resource; - c->get_container_pids = lxcapi_get_container_pids; -+ c->set_start_timeout = lxcapi_set_start_timeout; - #endif - return c; - -diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index 6ede70c..2951ac7 100644 ---- a/src/lxc/lxccontainer.h -+++ b/src/lxc/lxccontainer.h -@@ -125,6 +125,12 @@ struct lxc_container { - * */ - char *ocihookfile; - -+ /*! isulad: -+ * \private -+ * start_timeout. -+ */ -+ unsigned int start_timeout; -+ - /*! - * \brief Determine if \c /var/lib/lxc/$name/config exists. - * -@@ -960,6 +966,16 @@ struct lxc_container { - * \return \c true on success, else \c false. - */ - bool (*get_container_pids)(struct lxc_container *c,pid_t **pids,size_t *pids_len); -+ -+ /*! isulad add -+ * \brief An API call to set start timeout -+ * -+ * \param c Container. -+ * \param start_timeout Value of start timeout. -+ * -+ * \return \c true on success, else \c false. -+ */ -+ bool (*set_start_timeout)(struct lxc_container *c, unsigned int start_timeout); - }; - - /*! -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 70ce1bd..0bc1143 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -880,6 +880,21 @@ out_restore_sigmask: - } - - #ifdef HAVE_ISULAD -+/* isulad: start timeout thread */ -+typedef enum { -+ START_INIT, -+ START_TIMEOUT, -+ START_MAX, -+} start_timeout_t; -+ -+static start_timeout_t global_timeout_state = START_INIT; -+static sem_t global_timeout_sem; -+ -+struct start_timeout_conf { -+ unsigned int timeout; -+ int errfd; -+}; -+ - void trim_line(char *s) - { - size_t len; -@@ -2285,6 +2300,12 @@ static int lxc_spawn(struct lxc_handler *handler) - goto out_delete_net; - } - -+ if (START_TIMEOUT == global_timeout_state) { -+ lxc_write_error_message(conf->errpipe[1], "Starting the container \"%s\" timeout.", name); -+ ERROR("Starting the container \"%s\" timeout.", name); -+ goto out_delete_net; -+ } -+ - /* Tell the child to continue its initialization. We'll get - * LXC_SYNC_POST_OCI_PRESTART_HOOK when it is ready for us to run oci prestart hooks. - */ -@@ -2341,6 +2362,13 @@ static int lxc_spawn(struct lxc_handler *handler) - ERROR("Failed to run oci poststart hooks"); - goto out_abort; - } -+ -+ if (START_TIMEOUT == global_timeout_state) { -+ lxc_write_error_message(conf->errpipe[1], "Starting the container \"%s\" timeout.", name); -+ ERROR("Starting the container \"%s\" timeout.", name); -+ goto out_abort; -+ } -+ - #endif - - ret = lxc_set_state(name, handler, RUNNING); -@@ -2368,17 +2396,82 @@ out_sync_fini: - } - - #ifdef HAVE_ISULAD -+/* isulad: start timeout thread function */ -+static void* wait_start_timeout(void *arg) -+{ -+ struct start_timeout_conf *conf = (struct start_timeout_conf *)arg; -+ -+ sem_post(&global_timeout_sem); -+ -+ if (!conf || conf->timeout < 1) -+ goto out; -+ -+ sleep(conf->timeout); -+ -+ global_timeout_state = START_TIMEOUT; -+ -+out: -+ free(conf); -+ return ((void *)0); -+} -+ -+/* isulad: create start timeout thread */ -+static int create_start_timeout_thread(struct lxc_conf *conf, unsigned int start_timeout) -+{ -+ int ret = 0; -+ pthread_t ptid; -+ pthread_attr_t attr; -+ struct start_timeout_conf *timeout_conf = NULL; -+ -+ if (sem_init(&global_timeout_sem, 0, 0)) { -+ ERROR("Failed to init start timeout semaphore");/*lint !e613*/ -+ ret = -1; -+ return ret; -+ } -+ -+ timeout_conf = malloc(sizeof(struct start_timeout_conf)); -+ if (timeout_conf == NULL) { -+ ERROR("Failed to malloc start timeout conf"); -+ ret = -1; -+ goto out; -+ } -+ -+ memset(timeout_conf, 0, sizeof(struct start_timeout_conf)); -+ timeout_conf->errfd = conf->errpipe[1]; -+ timeout_conf->timeout = start_timeout; -+ -+ pthread_attr_init(&attr); -+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); -+ ret = pthread_create(&ptid, &attr, wait_start_timeout, timeout_conf); -+ if (ret != 0) { -+ ERROR("Create start wait timeout thread failed"); -+ free(timeout_conf); -+ goto out; -+ } -+ -+ sem_wait(&global_timeout_sem); -+out: -+ sem_destroy(&global_timeout_sem); -+ return ret; -+} -+ - // isulad: send '128 + signal' if container is killed by signal. - #define EXIT_SIGNAL_OFFSET 128 - #endif - -+ -+#ifdef HAVE_ISULAD -+int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, -+ void *data, const char *lxcpath, bool daemonize, int *error_num, -+ unsigned int start_timeout) -+{ -+ int exit_code; -+#else - int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, - void *data, const char *lxcpath, bool daemonize, int *error_num) - { -- int ret, status; --#ifdef HAVE_ISULAD -- int exit_code; - #endif -+ int ret, status; - const char *name = handler->name; - struct lxc_conf *conf = handler->conf; - struct cgroup_ops *cgroup_ops; -@@ -2393,6 +2486,16 @@ int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, - handler->daemonize = daemonize; - cgroup_ops = handler->cgroup_ops; - -+#ifdef HAVE_ISULAD -+ /* isulad: add start timeout limit */ -+ if (start_timeout > 0) { -+ ret = create_start_timeout_thread(conf, start_timeout); -+ if (ret) { -+ ERROR("Failed to create start timeout thread for container \"%s\".", name); -+ goto out_abort; -+ } -+ } -+#endif - if (!attach_block_device(handler->conf)) { - ERROR("Failed to attach block device"); - ret = -1; -@@ -2574,14 +2677,18 @@ static struct lxc_operations start_ops = { - }; - - int lxc_start(char *const argv[], struct lxc_handler *handler, -- const char *lxcpath, bool daemonize, int *error_num) -+ const char *lxcpath, bool daemonize, int *error_num, unsigned int start_timeout) - { - struct start_args start_arg = { - .argv = argv, - }; - - TRACE("Doing lxc_start"); -+#ifdef HAVE_ISULAD -+ return __lxc_start(handler, &start_ops, &start_arg, lxcpath, daemonize, error_num, start_timeout); -+#else - return __lxc_start(handler, &start_ops, &start_arg, lxcpath, daemonize, error_num); -+#endif - } - - static void lxc_destroy_container_on_signal(struct lxc_handler *handler, -diff --git a/src/lxc/start.h b/src/lxc/start.h -index 4fc3ff7..cea37bc 100644 ---- a/src/lxc/start.h -+++ b/src/lxc/start.h -@@ -170,8 +170,14 @@ extern void lxc_end(struct lxc_handler *handler); - */ - extern int lxc_check_inherited(struct lxc_conf *conf, bool closeall, - int *fds_to_ignore, size_t len_fds); -+#ifdef HAVE_ISULAD -+extern int __lxc_start(struct lxc_handler *handler, -+ struct lxc_operations* ops, void *data, const char *lxcpath, -+ bool daemonize, int *error_num, unsigned int start_timeout); -+#else - extern int __lxc_start(struct lxc_handler *, struct lxc_operations *, void *, - const char *, bool, int *); -+#endif - - extern int resolve_clone_flags(struct lxc_handler *handler); - -diff --git a/src/lxc/tools/arguments.h b/src/lxc/tools/arguments.h -index a6d9967..41ea109 100644 ---- a/src/lxc/tools/arguments.h -+++ b/src/lxc/tools/arguments.h -@@ -47,6 +47,8 @@ struct lxc_arguments { - const char *suffix; /* isulad add, suffix used for connect with parent of execed process*/ - int disable_pty; - int open_stdin; -+ unsigned int start_timeout; /* isulad: Seconds for waiting on a container to start before it is killed*/ -+ int64_t attach_timeout; /* for lxc-attach */ - #endif - - /* for lxc-console */ -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index 48e18bb..a855a8d 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -81,6 +81,7 @@ static const struct option my_longopts[] = { - {"out-fifo", required_argument, 0, OPT_OUTPUT_FIFO}, - {"err-fifo", required_argument, 0, OPT_STDERR_FIFO}, - {"suffix", required_argument, 0, OPT_ATTACH_SUFFIX}, -+ {"timeout", required_argument, 0, OPT_ATTACH_TIMEOUT}, - #endif - LXC_COMMON_OPTIONS - }; -@@ -141,6 +142,7 @@ Options :\n\ - #else - "\ - --user User ID (format: UID[:GID])\n\ -+ --timeout Timeout in seconds (default: 0)\n\ - " - #endif - , -@@ -303,6 +305,13 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - case OPT_ATTACH_SUFFIX: - args->suffix = arg; - break; -+ case OPT_ATTACH_TIMEOUT: -+ if(!is_non_negative_num(arg)) { -+ ERROR("Error attach timeout parameter:%s.\n", arg); -+ return -1; -+ } -+ args->attach_timeout = (unsigned int)atoll(arg); -+ break; - #endif - } - -@@ -581,6 +590,7 @@ int main(int argc, char *argv[]) - attach_options.env_policy = env_policy; - attach_options.extra_env_vars = extra_env; - attach_options.extra_keep_env = extra_keep; -+ attach_options.timeout = my_args.attach_timeout; - - if (my_args.argc > 0) { - command.program = my_args.argv[0]; -diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c -index 72a4494..b430a1e 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -29,6 +29,7 @@ - #include "log.h" - - #ifdef HAVE_ISULAD -+#include - #include "isulad_utils.h" - #endif - -@@ -61,6 +62,7 @@ static const struct option my_longopts[] = { - {"start-timeout", required_argument, 0, OPT_START_TIMEOUT}, - {"disable-pty", no_argument, 0, OPT_DISABLE_PTY}, - {"open-stdin", no_argument, 0, OPT_OPEN_STDIN}, -+ {"start-timeout", required_argument, 0, OPT_START_TIMEOUT}, - #endif - LXC_COMMON_OPTIONS - }; -@@ -155,6 +157,13 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - case OPT_OPEN_STDIN: - args->open_stdin = 1; - break; -+ case OPT_START_TIMEOUT: -+ if(!is_non_negative_num(arg)) { -+ fprintf(stderr, "Error start timeout parameter:%s.\n", arg); -+ return -1; -+ } -+ args->start_timeout = (unsigned int)atoi(arg); -+ break; - #endif - - } -@@ -354,6 +363,11 @@ int main(int argc, char *argv[]) - if (my_args.open_stdin) { - c->want_open_stdin(c, true); - } -+ -+ /* isulad: add start timeout */ -+ if(my_args.start_timeout) { -+ c->set_start_timeout(c, my_args.start_timeout); -+ } - #endif - - if (my_args.console) -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index ba69995..810b7fe 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -2167,4 +2167,15 @@ out: - return alive; - } - -+bool is_non_negative_num(const char *s) -+{ -+ if (!s || !strcmp(s, "")) -+ return false; -+ while(*s != '\0') { -+ if(!isdigit(*s)) -+ return false; -+ ++s; -+ } -+ return true; -+} - #endif -diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index a213ba7..39ef579 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -324,6 +324,8 @@ extern int unsigned long long lxc_get_process_startat(pid_t pid); - extern int lxc_setup_env_home(uid_t uid); - - extern bool lxc_process_alive(pid_t pid, unsigned long long start_time); -+ -+extern bool is_non_negative_num(const char *s); - #endif - - #endif /* __LXC_UTILS_H */ --- -1.8.3.1 - diff --git a/0035-Seccomp-security-feature-enhanced.patch b/0035-Seccomp-security-feature-enhanced.patch deleted file mode 100644 index 20598e1..0000000 --- a/0035-Seccomp-security-feature-enhanced.patch +++ /dev/null @@ -1,659 +0,0 @@ -From 327e83ff13bec4bf1fa80ede9515d3f9531d7d1f Mon Sep 17 00:00:00 2001 -From: wujing -Date: Wed, 15 Apr 2020 06:37:43 -0400 -Subject: [PATCH 35/49] Seccomp security feature enhanced - -Signed-off-by: wujing ---- - src/lxc/conf.c | 3 +- - src/lxc/seccomp.c | 548 +++++++++++++++++++++++++++++++++++++++++++++++++++++- - 2 files changed, 548 insertions(+), 3 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 6856b1d..e8ee749 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4730,8 +4730,7 @@ int lxc_setup(struct lxc_handler *handler) - - // isulad: create link /etc/mtab for /proc/mounts - if (create_mtab_link() != 0) { -- ERROR("failed to create link /etc/mtab for target /proc/mounts"); -- goto on_error; -+ return log_error(-1, "failed to create link /etc/mtab for target /proc/mounts"); - } - #endif - -diff --git a/src/lxc/seccomp.c b/src/lxc/seccomp.c -index 081d315..a75adb7 100644 ---- a/src/lxc/seccomp.c -+++ b/src/lxc/seccomp.c -@@ -295,7 +295,11 @@ on_error: - #endif - - #if HAVE_DECL_SECCOMP_SYSCALL_RESOLVE_NAME_ARCH -+#ifdef HAVE_ISULAD -+enum lxc_arch_t { -+#else - enum lxc_hostarch_t { -+#endif - lxc_seccomp_arch_all = 0, - lxc_seccomp_arch_native, - lxc_seccomp_arch_i386, -@@ -351,8 +355,13 @@ int get_hostarch(void) - return lxc_seccomp_arch_unknown; - } - -+#ifdef HAVE_ISULAD -+scmp_filter_ctx get_new_ctx(enum lxc_arch_t n_arch, -+ uint32_t default_policy_action, uint32_t *architectures) -+#else - scmp_filter_ctx get_new_ctx(enum lxc_hostarch_t n_arch, - uint32_t default_policy_action, bool *needs_merge) -+#endif - { - int ret; - uint32_t arch; -@@ -475,10 +484,17 @@ scmp_filter_ctx get_new_ctx(enum lxc_hostarch_t n_arch, - return NULL; - } - TRACE("Removed native arch from main seccomp context"); -- -+#ifdef HAVE_ISULAD -+ *architectures = arch; -+#else - *needs_merge = true; -+#endif - } else { -+#ifdef HAVE_ISULAD -+ *architectures = SCMP_ARCH_NATIVE; -+#else - *needs_merge = false; -+#endif - TRACE("Arch %d already present in main seccomp context", (int)n_arch); - } - -@@ -510,7 +526,11 @@ bool do_resolve_add_rule(uint32_t arch, char *line, scmp_filter_ctx ctx, - if (ret < 0) { - errno = -ret; - SYSERROR("Failed loading rule to reject force umount"); -+#ifdef HAVE_ISULAD -+ return true; -+#else - return false; -+#endif - } - - INFO("Set seccomp rule to reject force umounts"); -@@ -519,14 +539,24 @@ bool do_resolve_add_rule(uint32_t arch, char *line, scmp_filter_ctx ctx, - - nr = seccomp_syscall_resolve_name(line); - if (nr == __NR_SCMP_ERROR) { -+#ifdef HAVE_ISULAD -+ DEBUG("Failed to resolve syscall \"%s\"", line); -+ DEBUG("This syscall will NOT be handled by seccomp"); -+#else - WARN("Failed to resolve syscall \"%s\"", line); - WARN("This syscall will NOT be handled by seccomp"); -+#endif - return true; - } - - if (nr < 0) { -+#ifdef HAVE_ISULAD -+ DEBUG("Got negative return value %d for syscall \"%s\"", nr, line); -+ DEBUG("This syscall will NOT be handled by seccomp"); -+#else - WARN("Got negative return value %d for syscall \"%s\"", nr, line); - WARN("This syscall will NOT be handled by seccomp"); -+#endif - return true; - } - -@@ -553,14 +583,42 @@ bool do_resolve_add_rule(uint32_t arch, char *line, scmp_filter_ctx ctx, - rule->args_num, arg_cmp); - if (ret < 0) { - errno = -ret; -+#ifdef HAVE_ISULAD -+ DEBUG("Failed loading rule for %s (nr %d action %d (%s))", -+ line, nr, rule->action, get_action_name(rule->action)); -+#else - SYSERROR("Failed loading rule for %s (nr %d action %d (%s))", - line, nr, rule->action, get_action_name(rule->action)); -+#endif - return false; - } - - return true; - } - -+#ifdef HAVE_ISULAD -+#define SCMP_ARCH_INDEX_MAX 3 -+ -+struct scmp_ctx_info { -+ uint32_t architectures[SCMP_ARCH_INDEX_MAX]; -+ enum lxc_arch_t lxc_arch[SCMP_ARCH_INDEX_MAX]; -+ scmp_filter_ctx contexts[SCMP_ARCH_INDEX_MAX]; -+ bool needs_merge[SCMP_ARCH_INDEX_MAX]; -+}; -+ -+static int get_arch_index(enum lxc_arch_t arch, struct scmp_ctx_info *ctx) -+{ -+ int i; -+ -+ for (i = 0; i < SCMP_ARCH_INDEX_MAX; i++) { -+ if (ctx->lxc_arch[i] == arch) -+ return i; -+ } -+ -+ return -1; -+} -+#endif -+ - /* - * v2 consists of - * [x86] -@@ -575,6 +633,493 @@ bool do_resolve_add_rule(uint32_t arch, char *line, scmp_filter_ctx ctx, - * write - * close - */ -+#ifdef HAVE_ISULAD -+static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_conf *conf) -+{ -+ int ret; -+ char *p; -+ enum lxc_arch_t cur_rule_arch, native_arch; -+ bool blacklist = false; -+ uint32_t default_policy_action = -1, default_rule_action = -1; -+ struct seccomp_v2_rule rule; -+ struct scmp_ctx_info ctx; -+ -+ if (strncmp(line, "blacklist", 9) == 0) -+ blacklist = true; -+ else if (strncmp(line, "whitelist", 9) != 0) { -+ ERROR("Bad seccomp policy style \"%s\"", line); -+ return -1; -+ } -+ -+ p = strchr(line, ' '); -+ if (p) { -+ default_policy_action = get_v2_default_action(p + 1); -+ if (default_policy_action == -2) -+ return -1; -+ } -+ -+ /* for blacklist, allow any syscall which has no rule */ -+ if (blacklist) { -+ if (default_policy_action == -1) -+ default_policy_action = SCMP_ACT_ALLOW; -+ -+ if (default_rule_action == -1) -+ default_rule_action = SCMP_ACT_KILL; -+ } else { -+ if (default_policy_action == -1) -+ default_policy_action = SCMP_ACT_KILL; -+ -+ if (default_rule_action == -1) -+ default_rule_action = SCMP_ACT_ALLOW; -+ } -+ -+ memset(&ctx, 0, sizeof(ctx)); -+ ctx.architectures[0] = SCMP_ARCH_NATIVE; -+ ctx.architectures[1] = SCMP_ARCH_NATIVE; -+ ctx.architectures[2] = SCMP_ARCH_NATIVE; -+ native_arch = get_hostarch(); -+ cur_rule_arch = native_arch; -+ if (native_arch == lxc_seccomp_arch_amd64) { -+ cur_rule_arch = lxc_seccomp_arch_all; -+ -+ ctx.lxc_arch[0] = lxc_seccomp_arch_i386; -+ ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_i386, -+ default_policy_action, &ctx.architectures[0]); -+ if (!ctx.contexts[0]) -+ goto bad; -+ -+ ctx.lxc_arch[1] = lxc_seccomp_arch_x32; -+ ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_x32, -+ default_policy_action, &ctx.architectures[1]); -+ if (!ctx.contexts[1]) -+ goto bad; -+ -+ ctx.lxc_arch[2] = lxc_seccomp_arch_amd64; -+ ctx.contexts[2] = get_new_ctx(lxc_seccomp_arch_amd64, -+ default_policy_action, &ctx.architectures[2]); -+ if (!ctx.contexts[2]) -+ goto bad; -+#ifdef SCMP_ARCH_PPC -+ } else if (native_arch == lxc_seccomp_arch_ppc64) { -+ cur_rule_arch = lxc_seccomp_arch_all; -+ -+ ctx.lxc_arch[0] = lxc_seccomp_arch_ppc; -+ ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_ppc, -+ default_policy_action, &ctx.architectures[0]); -+ if (!ctx.contexts[0]) -+ goto bad; -+ -+ ctx.lxc_arch[1] = lxc_seccomp_arch_ppc64; -+ ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_ppc64, -+ default_policy_action, &ctx.architectures[1]); -+ if (!ctx.contexts[1]) -+ goto bad; -+#endif -+#ifdef SCMP_ARCH_ARM -+ } else if (native_arch == lxc_seccomp_arch_arm64) { -+ cur_rule_arch = lxc_seccomp_arch_all; -+ -+ ctx.lxc_arch[0] = lxc_seccomp_arch_arm; -+ ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_arm, -+ default_policy_action, &ctx.architectures[0]); -+ if (!ctx.contexts[0]) -+ goto bad; -+ -+#ifdef SCMP_ARCH_AARCH64 -+ ctx.lxc_arch[1] = lxc_seccomp_arch_arm64; -+ ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_arm64, -+ default_policy_action, &ctx.architectures[1]); -+ if (!ctx.contexts[1]) -+ goto bad; -+#endif -+#endif -+#ifdef SCMP_ARCH_MIPS -+ } else if (native_arch == lxc_seccomp_arch_mips64) { -+ cur_rule_arch = lxc_seccomp_arch_all; -+ -+ ctx.lxc_arch[0] = lxc_seccomp_arch_mips; -+ ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_mips, -+ default_policy_action, &ctx.architectures[0]); -+ if (!ctx.contexts[0]) -+ goto bad; -+ -+ ctx.lxc_arch[1] = lxc_seccomp_arch_mips64n32; -+ ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_mips64n32, -+ default_policy_action, &ctx.architectures[1]); -+ if (!ctx.contexts[1]) -+ goto bad; -+ -+ ctx.lxc_arch[2] = lxc_seccomp_arch_mips64; -+ ctx.contexts[2] = get_new_ctx(lxc_seccomp_arch_mips64, -+ default_policy_action, &ctx.architectures[2]); -+ if (!ctx.contexts[2]) -+ goto bad; -+ } else if (native_arch == lxc_seccomp_arch_mipsel64) { -+ cur_rule_arch = lxc_seccomp_arch_all; -+ ctx.lxc_arch[0] = lxc_seccomp_arch_mipsel; -+ ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_mipsel, -+ default_policy_action, &ctx.architectures[0]); -+ if (!ctx.contexts[0]) -+ goto bad; -+ -+ ctx.lxc_arch[1] = lxc_seccomp_arch_mipsel64n32; -+ ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_mipsel64n32, -+ default_policy_action, &ctx.architectures[1]); -+ if (!ctx.contexts[1]) -+ goto bad; -+ -+ ctx.lxc_arch[2] = lxc_seccomp_arch_mipsel64; -+ ctx.contexts[2] = get_new_ctx(lxc_seccomp_arch_mipsel64, -+ default_policy_action, &ctx.architectures[2]); -+ if (!ctx.contexts[2]) -+ goto bad; -+#endif -+ } -+ -+ if (default_policy_action != SCMP_ACT_KILL) { -+ ret = seccomp_reset(conf->seccomp.seccomp_ctx, default_policy_action); -+ if (ret != 0) { -+ ERROR("Error re-initializing Seccomp"); -+ return -1; -+ } -+ -+ ret = seccomp_attr_set(conf->seccomp.seccomp_ctx, SCMP_FLTATR_CTL_NNP, 0); -+ if (ret < 0) { -+ errno = -ret; -+ SYSERROR("Failed to turn off no-new-privs"); -+ return -1; -+ } -+ -+#ifdef SCMP_FLTATR_ATL_TSKIP -+ ret = seccomp_attr_set(conf->seccomp.seccomp_ctx, SCMP_FLTATR_ATL_TSKIP, 1); -+ if (ret < 0) { -+ errno = -ret; -+ SYSWARN("Failed to turn on seccomp nop-skip, continuing"); -+ } -+#endif -+ } -+ -+ while (getline(&line, line_bufsz, f) != -1) { -+ if (line[0] == '#') -+ continue; -+ -+ if (line[0] == '\0') -+ continue; -+ -+ remove_trailing_newlines(line); -+ -+ INFO("Processing \"%s\"", line); -+ if (line[0] == '[') { -+ /* Read the architecture for next set of rules. */ -+ if (strcmp(line, "[x86]") == 0 || -+ strcmp(line, "[X86]") == 0) { -+ if (native_arch != lxc_seccomp_arch_i386 && -+ native_arch != lxc_seccomp_arch_amd64) { -+ cur_rule_arch = lxc_seccomp_arch_unknown; -+ continue; -+ } -+ -+ cur_rule_arch = lxc_seccomp_arch_i386; -+ } else if (strcmp(line, "[x32]") == 0 || -+ strcmp(line, "[X32]") == 0) { -+ if (native_arch != lxc_seccomp_arch_amd64) { -+ cur_rule_arch = lxc_seccomp_arch_unknown; -+ continue; -+ } -+ -+ cur_rule_arch = lxc_seccomp_arch_x32; -+ } else if (strcmp(line, "[X86_64]") == 0 || -+ strcmp(line, "[x86_64]") == 0) { -+ if (native_arch != lxc_seccomp_arch_amd64) { -+ cur_rule_arch = lxc_seccomp_arch_unknown; -+ continue; -+ } -+ -+ cur_rule_arch = lxc_seccomp_arch_amd64; -+ } else if (strcmp(line, "[all]") == 0 || -+ strcmp(line, "[ALL]") == 0) { -+ cur_rule_arch = lxc_seccomp_arch_all; -+ } -+#ifdef SCMP_ARCH_ARM -+ else if (strcmp(line, "[arm]") == 0 || -+ strcmp(line, "[ARM]") == 0) { -+ if (native_arch != lxc_seccomp_arch_arm && -+ native_arch != lxc_seccomp_arch_arm64) { -+ cur_rule_arch = lxc_seccomp_arch_unknown; -+ continue; -+ } -+ -+ cur_rule_arch = lxc_seccomp_arch_arm; -+ } -+#endif -+#ifdef SCMP_ARCH_AARCH64 -+ else if (strcmp(line, "[arm64]") == 0 || -+ strcmp(line, "[ARM64]") == 0) { -+ if (native_arch != lxc_seccomp_arch_arm64) { -+ cur_rule_arch = lxc_seccomp_arch_unknown; -+ continue; -+ } -+ -+ cur_rule_arch = lxc_seccomp_arch_arm64; -+ } -+#endif -+#ifdef SCMP_ARCH_PPC64LE -+ else if (strcmp(line, "[ppc64le]") == 0 || -+ strcmp(line, "[PPC64LE]") == 0) { -+ if (native_arch != lxc_seccomp_arch_ppc64le) { -+ cur_rule_arch = lxc_seccomp_arch_unknown; -+ continue; -+ } -+ -+ cur_rule_arch = lxc_seccomp_arch_ppc64le; -+ } -+#endif -+#ifdef SCMP_ARCH_PPC64 -+ else if (strcmp(line, "[ppc64]") == 0 || -+ strcmp(line, "[PPC64]") == 0) { -+ if (native_arch != lxc_seccomp_arch_ppc64) { -+ cur_rule_arch = lxc_seccomp_arch_unknown; -+ continue; -+ } -+ -+ cur_rule_arch = lxc_seccomp_arch_ppc64; -+ } -+#endif -+#ifdef SCMP_ARCH_PPC -+ else if (strcmp(line, "[ppc]") == 0 || -+ strcmp(line, "[PPC]") == 0) { -+ if (native_arch != lxc_seccomp_arch_ppc && -+ native_arch != lxc_seccomp_arch_ppc64) { -+ cur_rule_arch = lxc_seccomp_arch_unknown; -+ continue; -+ } -+ -+ cur_rule_arch = lxc_seccomp_arch_ppc; -+ } -+#endif -+#ifdef SCMP_ARCH_MIPS -+ else if (strcmp(line, "[mips64]") == 0 || -+ strcmp(line, "[MIPS64]") == 0) { -+ if (native_arch != lxc_seccomp_arch_mips64) { -+ cur_rule_arch = lxc_seccomp_arch_unknown; -+ continue; -+ } -+ -+ cur_rule_arch = lxc_seccomp_arch_mips64; -+ } else if (strcmp(line, "[mips64n32]") == 0 || -+ strcmp(line, "[MIPS64N32]") == 0) { -+ if (native_arch != lxc_seccomp_arch_mips64) { -+ cur_rule_arch = lxc_seccomp_arch_unknown; -+ continue; -+ } -+ -+ cur_rule_arch = lxc_seccomp_arch_mips64n32; -+ } else if (strcmp(line, "[mips]") == 0 || -+ strcmp(line, "[MIPS]") == 0) { -+ if (native_arch != lxc_seccomp_arch_mips && -+ native_arch != lxc_seccomp_arch_mips64) { -+ cur_rule_arch = lxc_seccomp_arch_unknown; -+ continue; -+ } -+ -+ cur_rule_arch = lxc_seccomp_arch_mips; -+ } else if (strcmp(line, "[mipsel64]") == 0 || -+ strcmp(line, "[MIPSEL64]") == 0) { -+ if (native_arch != lxc_seccomp_arch_mipsel64) { -+ cur_rule_arch = lxc_seccomp_arch_unknown; -+ continue; -+ } -+ -+ cur_rule_arch = lxc_seccomp_arch_mipsel64; -+ } else if (strcmp(line, "[mipsel64n32]") == 0 || -+ strcmp(line, "[MIPSEL64N32]") == 0) { -+ if (native_arch != lxc_seccomp_arch_mipsel64) { -+ cur_rule_arch = lxc_seccomp_arch_unknown; -+ continue; -+ } -+ -+ cur_rule_arch = lxc_seccomp_arch_mipsel64n32; -+ } else if (strcmp(line, "[mipsel]") == 0 || -+ strcmp(line, "[MIPSEL]") == 0) { -+ if (native_arch != lxc_seccomp_arch_mipsel && -+ native_arch != lxc_seccomp_arch_mipsel64) { -+ cur_rule_arch = lxc_seccomp_arch_unknown; -+ continue; -+ } -+ -+ cur_rule_arch = lxc_seccomp_arch_mipsel; -+ } -+#endif -+#ifdef SCMP_ARCH_S390X -+ else if (strcmp(line, "[s390x]") == 0 || -+ strcmp(line, "[S390X]") == 0) { -+ if (native_arch != lxc_seccomp_arch_s390x) { -+ cur_rule_arch = lxc_seccomp_arch_unknown; -+ continue; -+ } -+ -+ cur_rule_arch = lxc_seccomp_arch_s390x; -+ } -+#endif -+ else { -+ goto bad_arch; -+ } -+ -+ continue; -+ } -+ -+ /* irrelevant arch - i.e. arm on i386 */ -+ if (cur_rule_arch == lxc_seccomp_arch_unknown) -+ continue; -+ -+ memset(&rule, 0, sizeof(rule)); -+ /* read optional action which follows the syscall */ -+ ret = parse_v2_rules(line, default_rule_action, &rule); -+ if (ret != 0) { -+ ERROR("Failed to interpret seccomp rule"); -+ goto bad_rule; -+ } -+ -+ if (cur_rule_arch == native_arch) { -+ /* add for native arch */ -+ if (!do_resolve_add_rule(SCMP_ARCH_NATIVE, line, -+ conf->seccomp.seccomp_ctx, &rule)) -+ goto bad_rule; -+ -+ INFO("Added native rule for arch %d for %s action %d(%s)", -+ SCMP_ARCH_NATIVE, line, rule.action, -+ get_action_name(rule.action)); -+ } else if (cur_rule_arch != lxc_seccomp_arch_all) { -+ /* add for compat specified arch */ -+ int arch_index = get_arch_index(cur_rule_arch, &ctx); -+ if (arch_index < 0) -+ goto bad_arch; -+ -+ if (!do_resolve_add_rule(ctx.architectures[arch_index], line, -+ ctx.contexts[arch_index], &rule)) -+ goto bad_rule; -+ -+ INFO("Added compat rule for arch %d for %s action %d(%s)", -+ ctx.architectures[arch_index], line, rule.action, -+ get_action_name(rule.action)); -+ ctx.needs_merge[arch_index] = true; -+ } else { -+ /* add for all compat archs */ -+ if (!do_resolve_add_rule(SCMP_ARCH_NATIVE, line, -+ conf->seccomp.seccomp_ctx, &rule)) -+ goto bad_rule; -+ -+ INFO("Added native rule for arch %d for %s action %d(%s)", -+ SCMP_ARCH_NATIVE, line, rule.action, -+ get_action_name(rule.action)); -+ -+ if (ctx.architectures[0] != SCMP_ARCH_NATIVE) { -+ if (!do_resolve_add_rule(ctx.architectures[0], line, -+ ctx.contexts[0], &rule)) -+ goto bad_rule; -+ -+ INFO("Added compat rule for arch %d for %s action %d(%s)", -+ ctx.architectures[0], line, rule.action, -+ get_action_name(rule.action)); -+ ctx.needs_merge[0] = true; -+ } -+ -+ if (ctx.architectures[1] != SCMP_ARCH_NATIVE) { -+ if (!do_resolve_add_rule(ctx.architectures[1], line, -+ ctx.contexts[1], &rule)) -+ goto bad_rule; -+ -+ INFO("Added compat rule for arch %d for %s action %d(%s)", -+ ctx.architectures[1], line, rule.action, -+ get_action_name(rule.action)); -+ ctx.needs_merge[1] = true; -+ } -+ -+ if (ctx.architectures[2] != SCMP_ARCH_NATIVE) { -+ if (!do_resolve_add_rule(ctx.architectures[2], line, -+ ctx.contexts[2], &rule)) -+ goto bad_rule; -+ -+ INFO("Added native rule for arch %d for %s action %d(%s)", -+ ctx.architectures[2], line, rule.action, -+ get_action_name(rule.action)); -+ ctx.needs_merge[2] = true; -+ } -+ } -+ -+ } -+ -+ INFO("Merging compat seccomp contexts into main context"); -+ if (ctx.contexts[0]) { -+ if (ctx.needs_merge[0]) { -+ ret = seccomp_merge(conf->seccomp.seccomp_ctx, ctx.contexts[0]); -+ if (ret < 0) { -+ ERROR("%s - Failed to merge first compat seccomp " -+ "context into main context", strerror(-ret)); -+ goto bad; -+ } -+ -+ TRACE("Merged first compat seccomp context into main context"); -+ } else { -+ seccomp_release(ctx.contexts[0]); -+ ctx.contexts[0] = NULL; -+ } -+ } -+ -+ if (ctx.contexts[1]) { -+ if (ctx.needs_merge[1]) { -+ ret = seccomp_merge(conf->seccomp.seccomp_ctx, ctx.contexts[1]); -+ if (ret < 0) { -+ ERROR("%s - Failed to merge second compat seccomp " -+ "context into main context", strerror(-ret)); -+ goto bad; -+ } -+ -+ TRACE("Merged second compat seccomp context into main context"); -+ } else { -+ seccomp_release(ctx.contexts[1]); -+ ctx.contexts[1] = NULL; -+ } -+ } -+ -+ if (ctx.contexts[2]) { -+ if (ctx.needs_merge[2]) { -+ ret = seccomp_merge(conf->seccomp.seccomp_ctx, ctx.contexts[2]); -+ if (ret < 0) { -+ ERROR("%s - Failed to merge third compat seccomp " -+ "context into main context", strerror(-ret)); -+ goto bad; -+ } -+ -+ TRACE("Merged third compat seccomp context into main context"); -+ } else { -+ seccomp_release(ctx.contexts[2]); -+ ctx.contexts[2] = NULL; -+ } -+ } -+ -+ free(line); -+ return 0; -+ -+bad_arch: -+ ERROR("Unsupported architecture \"%s\"", line); -+ -+bad_rule: -+bad: -+ if (ctx.contexts[0]) -+ seccomp_release(ctx.contexts[0]); -+ -+ if (ctx.contexts[1]) -+ seccomp_release(ctx.contexts[1]); -+ -+ if (ctx.contexts[2]) -+ seccomp_release(ctx.contexts[2]); -+ -+ free(line); -+ -+ return -1; -+} -+#else - static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_conf *conf) - { - int ret; -@@ -1067,6 +1612,7 @@ bad: - - return -1; - } -+#endif - #else /* HAVE_DECL_SECCOMP_SYSCALL_RESOLVE_NAME_ARCH */ - static int parse_config_v2(FILE *f, char *line, struct lxc_conf *conf) - { --- -1.8.3.1 - diff --git a/0036-Security-coding-modification.patch b/0036-Security-coding-modification.patch deleted file mode 100644 index 015c050..0000000 --- a/0036-Security-coding-modification.patch +++ /dev/null @@ -1,99 +0,0 @@ -From ff35c1cd6118668e13f7ca83d7d704bb9363155a Mon Sep 17 00:00:00 2001 -From: wujing -Date: Wed, 15 Apr 2020 07:19:03 -0400 -Subject: [PATCH 36/49] Security coding modification - -Signed-off-by: wujing ---- - src/lxc/commands_utils.c | 2 +- - src/lxc/confile.c | 22 ++++++++++++++++++++++ - src/lxc/lxccontainer.c | 8 ++++++++ - 3 files changed, 31 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/commands_utils.c b/src/lxc/commands_utils.c -index 2f2670d..c5fc094 100644 ---- a/src/lxc/commands_utils.c -+++ b/src/lxc/commands_utils.c -@@ -114,7 +114,7 @@ int lxc_make_abstract_socket_name(char *path, size_t pathlen, - } - - ret = snprintf(offset, len, "%s/%s/%s", lxcpath, name, suffix); -- if (ret < 0) -+ if (ret < 0 || (size_t)ret >= len) - return log_error_errno(-1, errno, "Failed to create abstract socket name"); - - /* -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index f00afe9..8790494 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -4288,7 +4288,12 @@ static int get_config_prlimit(const char *key, char *retv, int inlen, - - lxc_list_for_each(it, &c->limits) { - /* 2 colon separated 64 bit integers or the word 'unlimited' */ -+#ifdef HAVE_ISULAD -+#define MAX_LIMIT_BUF_LEN ((INTTYPE_TO_STRLEN(uint64_t) * 2) + 2) -+ char buf[MAX_LIMIT_BUF_LEN] = { 0 }; -+#else - char buf[INTTYPE_TO_STRLEN(uint64_t) * 2 + 2]; -+#endif - int partlen; - struct lxc_limit *lim = it->elem; - -@@ -4296,17 +4301,34 @@ static int get_config_prlimit(const char *key, char *retv, int inlen, - memcpy(buf, "unlimited", STRLITERALLEN("unlimited") + 1); - partlen = STRLITERALLEN("unlimited"); - } else { -+#ifdef HAVE_ISULAD -+ partlen = snprintf(buf, MAX_LIMIT_BUF_LEN, "%" PRIu64, (uint64_t)lim->limit.rlim_cur); -+ if (partlen < 0 || partlen >= MAX_LIMIT_BUF_LEN) { -+ return -1; -+ } -+#else - partlen = sprintf(buf, "%" PRIu64, - (uint64_t)lim->limit.rlim_cur); -+#endif - } - - if (lim->limit.rlim_cur != lim->limit.rlim_max) { - if (lim->limit.rlim_max == RLIM_INFINITY) - memcpy(buf + partlen, ":unlimited", - STRLITERALLEN(":unlimited") + 1); -+#ifdef HAVE_ISULAD -+ else { -+ int nret = snprintf(buf + partlen, (MAX_LIMIT_BUF_LEN - partlen), -+ ":%" PRIu64, (uint64_t)lim->limit.rlim_max); -+ if (nret < 0 || nret >= (MAX_LIMIT_BUF_LEN - partlen)) { -+ return -1; -+ } -+ } -+#else - else - sprintf(buf + partlen, ":%" PRIu64, - (uint64_t)lim->limit.rlim_max); -+#endif - } - - if (get_all) { -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index f622a63..ab10ac6 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -3243,6 +3243,14 @@ static bool container_destroy(struct lxc_container *c, - if (ret < 0) { - ERROR("Failed to destroy directory \"%s\" for \"%s\"", path, - c->name); -+#ifdef HAVE_ISULAD -+ char msg[BUFSIZ] = { 0 }; -+ ret = snprintf(msg, BUFSIZ, "Failed to destroy directory \"%s\": %s", path, errno ? strerror(errno) : "error"); -+ if (ret < 0 || ret >= BUFSIZ) { -+ ERROR("Sprintf failed"); -+ goto out; -+ } -+#endif - goto out; - } - INFO("Destroyed directory \"%s\" for \"%s\"", path, c->name); --- -1.8.3.1 - diff --git a/0037-cgfsng-fix-build-error-device_cgroup_rule_parse.patch b/0037-cgfsng-fix-build-error-device_cgroup_rule_parse.patch deleted file mode 100644 index 77d1350..0000000 --- a/0037-cgfsng-fix-build-error-device_cgroup_rule_parse.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 5f8d8bb11c42fbf6bca39438530db88729e50f5e Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 16 Apr 2020 11:12:28 +0800 -Subject: [PATCH 37/49] cgfsng: fix build error device_cgroup_rule_parse - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 1047c08..76576c5 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -3043,8 +3043,7 @@ static int device_cgroup_parse_access(struct device_item *device, const char *va - return 0; - } - --#ifndef HAVE_ISULAD --static int device_cgroup_rule_parse(struct device_item *device, const char *key, -+int device_cgroup_rule_parse(struct device_item *device, const char *key, - const char *val) - { - int count, ret; -@@ -3130,7 +3129,6 @@ static int device_cgroup_rule_parse(struct device_item *device, const char *key, - - return device_cgroup_parse_access(device, ++val); - } --#endif - - #ifdef HAVE_ISULAD - __cgfsng_ops static int cgfsng_set(struct cgroup_ops *ops, --- -1.8.3.1 - diff --git a/0038-Ignore-errors-when-loading-rules-fail.patch b/0038-Ignore-errors-when-loading-rules-fail.patch deleted file mode 100644 index c62a471..0000000 --- a/0038-Ignore-errors-when-loading-rules-fail.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 06a4fd31155821e4425a94ed0ff0d2353d5d940d Mon Sep 17 00:00:00 2001 -From: wujing -Date: Wed, 15 Apr 2020 23:28:36 -0400 -Subject: [PATCH 38/49] Ignore errors when loading rules fail - -Signed-off-by: wujing ---- - src/lxc/seccomp.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/seccomp.c b/src/lxc/seccomp.c -index a75adb7..b7c4de3 100644 ---- a/src/lxc/seccomp.c -+++ b/src/lxc/seccomp.c -@@ -586,11 +586,12 @@ bool do_resolve_add_rule(uint32_t arch, char *line, scmp_filter_ctx ctx, - #ifdef HAVE_ISULAD - DEBUG("Failed loading rule for %s (nr %d action %d (%s))", - line, nr, rule->action, get_action_name(rule->action)); -+ return true; - #else - SYSERROR("Failed loading rule for %s (nr %d action %d (%s))", - line, nr, rule->action, get_action_name(rule->action)); --#endif - return false; -+#endif - } - - return true; --- -1.8.3.1 - diff --git a/0039-net-adapt-to-isulad.patch b/0039-net-adapt-to-isulad.patch deleted file mode 100644 index 5ffe39d..0000000 --- a/0039-net-adapt-to-isulad.patch +++ /dev/null @@ -1,51 +0,0 @@ -From c474b4e528e591680c6f9cbbcb27bdfe4e5f94f9 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 16 Apr 2020 12:01:39 +0800 -Subject: [PATCH 39/49] net: adapt to isulad - -Signed-off-by: LiFeng ---- - src/lxc/commands_utils.c | 2 +- - src/lxc/network.c | 10 +++++++++- - 2 files changed, 10 insertions(+), 2 deletions(-) - -diff --git a/src/lxc/commands_utils.c b/src/lxc/commands_utils.c -index c5fc094..2f2670d 100644 ---- a/src/lxc/commands_utils.c -+++ b/src/lxc/commands_utils.c -@@ -114,7 +114,7 @@ int lxc_make_abstract_socket_name(char *path, size_t pathlen, - } - - ret = snprintf(offset, len, "%s/%s/%s", lxcpath, name, suffix); -- if (ret < 0 || (size_t)ret >= len) -+ if (ret < 0) - return log_error_errno(-1, errno, "Failed to create abstract socket name"); - - /* -diff --git a/src/lxc/network.c b/src/lxc/network.c -index b442ed5..19adb23 100644 ---- a/src/lxc/network.c -+++ b/src/lxc/network.c -@@ -3448,10 +3448,18 @@ static int lxc_network_setup_in_child_namespaces_common(struct lxc_netdev *netde - - /* set the network device up */ - if (netdev->flags & IFF_UP) { -+ -+#ifdef HAVE_ISULAD -+ if (netdev->name[0] != '\0') { -+ err = lxc_netdev_up(netdev->name); -+ if (err) -+ return log_error_errno(-1, -err, "Failed to set network device \"%s\" up", netdev->name); -+ } -+#else - err = lxc_netdev_up(netdev->name); - if (err) - return log_error_errno(-1, -err, "Failed to set network device \"%s\" up", netdev->name); -- -+#endif - /* the network is up, make the loopback up too */ - err = lxc_netdev_up("lo"); - if (err) --- -1.8.3.1 - diff --git a/0040-cgfsng-make-container-full-path-in-cgfsng_get_cgroup.patch b/0040-cgfsng-make-container-full-path-in-cgfsng_get_cgroup.patch deleted file mode 100644 index f987eb2..0000000 --- a/0040-cgfsng-make-container-full-path-in-cgfsng_get_cgroup.patch +++ /dev/null @@ -1,29 +0,0 @@ -From beefa97e5dd3daec438b6d8237af167fde1097dd Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 16 Apr 2020 12:35:45 +0800 -Subject: [PATCH 40/49] cgfsng: make container full path in cgfsng_get_cgroup - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 76576c5..e2a8983 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -2612,6 +2612,11 @@ __cgfsng_ops static const char *cgfsng_get_cgroup(struct cgroup_ops *ops, - return log_warn_errno(NULL, ENOENT, "Failed to find hierarchy for controller \"%s\"", - controller ? controller : "(null)"); - -+#ifdef HAVE_ISULAD -+ if (!h->container_full_path) -+ h->container_full_path = must_make_path(h->mountpoint, h->container_base_path, ops->container_cgroup, NULL); -+#endif -+ - return h->container_full_path - ? h->container_full_path + strlen(h->mountpoint) - : NULL; --- -1.8.3.1 - diff --git a/0041-build-fix-some-bug-in-free-memory.patch b/0041-build-fix-some-bug-in-free-memory.patch deleted file mode 100644 index e143c7f..0000000 --- a/0041-build-fix-some-bug-in-free-memory.patch +++ /dev/null @@ -1,52 +0,0 @@ -From dcc50d14398f1bfcde7c41e7480928e6c98b52d9 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 16 Apr 2020 12:35:45 +0800 -Subject: [PATCH 41/49] build: fix some bug in free memory - -Signed-off-by: LiFeng ---- - src/lxc/lxccontainer.c | 10 ++++++++++ - src/lxc/string_utils.c | 1 + - 2 files changed, 11 insertions(+) - -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index ab10ac6..818848a 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -6006,11 +6006,21 @@ int list_active_containers(const char *lxcpath, char ***nret, - continue; - } - -+#ifdef HAVE_ISULAD -+ if (ct_name && ct_name_cnt) { -+ if (array_contains(&ct_name, p, ct_name_cnt)) { -+ if (is_hashed) -+ free(p); -+ continue; -+ } -+ } -+#else - if (array_contains(&ct_name, p, ct_name_cnt)) { - if (is_hashed) - free(p); - continue; - } -+#endif - - if (!add_to_array(&ct_name, p, ct_name_cnt)) { - if (is_hashed) -diff --git a/src/lxc/string_utils.c b/src/lxc/string_utils.c -index dcb1160..9118add 100644 ---- a/src/lxc/string_utils.c -+++ b/src/lxc/string_utils.c -@@ -501,6 +501,7 @@ int lxc_grow_array(void ***array, size_t *capacity, size_t new_size, size_t capa - /* first time around, catch some trivial mistakes of the user - * only initializing one of these */ - if (!*array || !*capacity) { -+ free(*array); - *array = NULL; - *capacity = 0; - } --- -1.8.3.1 - diff --git a/0042-cgfsng-make-container-full-path-in-destory-cgroup.patch b/0042-cgfsng-make-container-full-path-in-destory-cgroup.patch deleted file mode 100644 index 33da326..0000000 --- a/0042-cgfsng-make-container-full-path-in-destory-cgroup.patch +++ /dev/null @@ -1,29 +0,0 @@ -From a5cc738c0f322b35a759f83d8d631e657f8bd58b Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 16 Apr 2020 16:30:34 +0800 -Subject: [PATCH 42/49] cgfsng: make container full path in destory cgroup - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index e2a8983..1e1df3b 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -970,8 +970,9 @@ static int isulad_cgroup_tree_remove(struct hierarchy **hierarchies, - struct hierarchy *h = hierarchies[i]; - int ret; - -- if (!h->container_full_path) -- continue; -+ if (!h->container_full_path) { -+ h->container_full_path = must_make_path(h->mountpoint, h->container_base_path, container_cgroup, NULL); -+ } - - ret = lxc_rm_rf(h->container_full_path); - if (ret < 0) { --- -1.8.3.1 - diff --git a/0043-support-error-report.patch b/0043-support-error-report.patch deleted file mode 100644 index 8f0828d..0000000 --- a/0043-support-error-report.patch +++ /dev/null @@ -1,683 +0,0 @@ -From 968c9e3e7715c080f23a1fd80c31d4bcf20d241b Mon Sep 17 00:00:00 2001 -From: haozi007 -Date: Thu, 16 Apr 2020 15:16:41 +0800 -Subject: [PATCH 43/49] support error report - -Signed-off-by: haozi007 ---- - src/lxc/attach.c | 60 +++++++++++++++++++++++++++++++++++++++++++---- - src/lxc/attach_options.h | 12 ++++++++++ - src/lxc/cgroups/cgfsng.c | 1 + - src/lxc/conf.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/conf.h | 5 ++++ - src/lxc/execute.c | 7 ++++++ - src/lxc/lxccontainer.c | 47 +++++++++++++++++++++++++++++++++++++ - src/lxc/start.c | 21 +++++++++++++++++ - src/lxc/start.h | 4 ++++ - src/lxc/tools/lxc_ls.c | 8 +++++++ - src/lxc/tools/lxc_start.c | 5 ++++ - src/lxc/utils.c | 16 +++++++++++++ - 12 files changed, 241 insertions(+), 4 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 510c069..734cddd 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -677,9 +677,13 @@ static int attach_child_main(struct attach_clone_payload *payload) - bool needs_lsm = (options->namespaces & CLONE_NEWNS) && - (options->attach_flags & LXC_ATTACH_LSM) && - init_ctx->lsm_label; -- - #ifdef HAVE_ISULAD -- /*isulad: set system umask */ -+ int msg_fd = -1; -+ -+ /*isulad: record errpipe fd*/ -+ msg_fd = init_ctx->container->lxc_conf->errpipe[1]; -+ init_ctx->container->lxc_conf->errpipe[1] = -1; -+ /*isulad: set system umask */ - umask(init_ctx->container->lxc_conf->umask); - #endif - -@@ -963,10 +967,12 @@ static int attach_child_main(struct attach_clone_payload *payload) - payload->ipc_socket = -EBADF; - lxc_proc_put_context_info(init_ctx); - payload->init_ctx = NULL; --#endif -- -+ _exit(payload->exec_function(payload->exec_payload, msg_fd)); -+#else - /* We're done, so we can now do whatever the user intended us to do. */ - _exit(payload->exec_function(payload->exec_payload)); -+#endif -+ - - on_error: - lxc_put_attach_clone_payload(payload); -@@ -1331,6 +1337,25 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - return -1; - } - -+#ifdef HAVE_ISULAD -+ /* isulad: pipdfd for get error message of child or grandchild process. */ -+ if (pipe2(conf->errpipe, O_CLOEXEC) != 0) { -+ SYSERROR("Failed to init errpipe"); -+ if (options->attach_flags & LXC_ATTACH_TERMINAL) { -+ lxc_terminal_delete(&terminal); -+ lxc_terminal_conf_free(&terminal); -+ if (exec_command.maincmd_fd != -1) { -+ close(exec_command.maincmd_fd); -+ } -+ } -+ close(ipc_sockets[0]); -+ close(ipc_sockets[1]); -+ free(cwd); -+ lxc_proc_put_context_info(init_ctx); -+ return -1; -+ } -+#endif -+ - /* Create intermediate subprocess, two reasons: - * 1. We can't setns() in the child itself, since we want to make - * sure we are properly attached to the pidns. -@@ -1365,6 +1390,11 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - /* close unneeded file descriptors */ - close(ipc_sockets[1]); - free(cwd); -+#ifdef HAVE_ISULAD -+ /* isulad: close errpipe */ -+ close(conf->errpipe[1]); -+ conf->errpipe[1] = -1; -+#endif - lxc_proc_close_ns_fd(init_ctx); - if (options->attach_flags & LXC_ATTACH_TERMINAL) - lxc_attach_terminal_close_slave(&terminal); -@@ -1398,7 +1428,11 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - - /* Setup resource limits */ - if (!lxc_list_empty(&conf->limits)) { -+#ifdef HAVE_ISULAD -+ ret = setup_resource_limits(&conf->limits, pid, -1); -+#else - ret = setup_resource_limits(&conf->limits, pid); -+#endif - if (ret < 0) - goto on_error; - } -@@ -1561,6 +1595,12 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - /* close unneeded file descriptors */ - close_prot_errno_disarm(ipc_sockets[0]); - -+#ifdef HAVE_ISULAD -+ /* isulad: close errpipe */ -+ close(conf->errpipe[0]); -+ conf->errpipe[0] = -1; -+#endif -+ - if (options->attach_flags & LXC_ATTACH_TERMINAL) { - lxc_attach_terminal_close_master(&terminal); - lxc_attach_terminal_close_peer(&terminal); -@@ -1665,7 +1705,11 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - _exit(EXIT_SUCCESS); - } - -+#ifdef HAVE_ISULAD -+int lxc_attach_run_command(void *payload, int msg_fd) -+#else - int lxc_attach_run_command(void *payload) -+#endif - { - int ret = -1; - lxc_attach_command_t *cmd = payload; -@@ -1681,11 +1725,19 @@ int lxc_attach_run_command(void *payload) - break; - } - } -+#ifdef HAVE_ISULAD -+ /* isulad: write error messages */ -+ lxc_write_error_message(msg_fd, "exec: \"%s\": %s.", cmd->program, strerror(errno)); -+#endif - - return log_error_errno(ret, errno, "Failed to exec \"%s\"", cmd->program); - } - -+#ifdef HAVE_ISULAD -+int lxc_attach_run_shell(void* payload, int msg_fd) -+#else - int lxc_attach_run_shell(void* payload) -+#endif - { - __do_free char *buf = NULL; - uid_t uid; -diff --git a/src/lxc/attach_options.h b/src/lxc/attach_options.h -index 5f01739..d5d4f44 100644 ---- a/src/lxc/attach_options.h -+++ b/src/lxc/attach_options.h -@@ -49,7 +49,11 @@ enum { - * - * \return Function should return \c 0 on success, and any other value to denote failure. - */ -+#ifdef HAVE_ISULAD -+typedef int (*lxc_attach_exec_t)(void* payload, int msg_fd); -+#else - typedef int (*lxc_attach_exec_t)(void* payload); -+#endif - - /*! - * LXC attach options for \ref lxc_container \c attach(). -@@ -153,7 +157,11 @@ typedef struct lxc_attach_command_t { - * - * \return \c -1 on error, exit code of lxc_attach_command_t program on success. - */ -+#ifdef HAVE_ISULAD -+extern int lxc_attach_run_command(void* payload, int msg_fd); -+#else - extern int lxc_attach_run_command(void* payload); -+#endif - - /*! - * \brief Run a shell command in the container. -@@ -162,7 +170,11 @@ extern int lxc_attach_run_command(void* payload); - * - * \return Exit code of shell. - */ -+#ifdef HAVE_ISULAD -+extern int lxc_attach_run_shell(void* payload, int msg_fd); -+#else - extern int lxc_attach_run_shell(void* payload); -+#endif - - #ifdef __cplusplus - } -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 1e1df3b..002f051 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -4233,6 +4233,7 @@ struct cgroup_ops *cgfsng_ops_init(struct lxc_conf *conf) - - cgfsng_ops->data_init = cgfsng_data_init; - #ifdef HAVE_ISULAD -+ cgfsng_ops->errfd = conf ? conf->errpipe[1] : -1; - cgfsng_ops->payload_destroy = isulad_cgfsng_payload_destroy; - #else - cgfsng_ops->payload_destroy = cgfsng_payload_destroy; -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index e8ee749..d7a78bd 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -2275,8 +2275,15 @@ static int mount_entry_create_dir_file(const struct mntent *mntent, - - if (hasmntopt(mntent, "create=dir")) { - ret = mkdir_p(path, 0755); -+#ifdef HAVE_ISULAD -+ if (ret < 0 && errno != EEXIST) { -+ lxc_write_error_message(rootfs->errfd, "%s:%d: mkdir %s: %s.", __FILE__, __LINE__, path, strerror(errno)); -+ return log_error_errno(-1, errno, "Failed to create directory \"%s\"", path); -+ } -+#else - if (ret < 0 && errno != EEXIST) - return log_error_errno(-1, errno, "Failed to create directory \"%s\"", path); -+#endif - } - - if (!hasmntopt(mntent, "create=file")) -@@ -2293,12 +2300,26 @@ static int mount_entry_create_dir_file(const struct mntent *mntent, - p2 = dirname(p1); - - ret = mkdir_p(p2, 0755); -+#ifdef HAVE_ISULAD -+ if (ret < 0 && errno != EEXIST) { -+ lxc_write_error_message(rootfs->errfd, "%s:%d: mkdir %s: %s.", __FILE__, __LINE__, path, strerror(errno)); -+ return log_error_errno(-1, errno, "Failed to create directory \"%s\"", path); -+ } -+#else - if (ret < 0 && errno != EEXIST) - return log_error_errno(-1, errno, "Failed to create directory \"%s\"", path); -+#endif - - ret = mknod(path, S_IFREG | 0000, 0); -+#ifdef HAVE_ISULAD -+ if (ret < 0 && errno != EEXIST) { -+ lxc_write_error_message(rootfs->errfd, "%s:%d: open %s: %s.", __FILE__, __LINE__, path, strerror(errno)); -+ return -errno; -+ } -+#else - if (ret < 0 && errno != EEXIST) - return -errno; -+#endif - - return 0; - } -@@ -2960,7 +2981,11 @@ static int parse_resource(const char *res) - return resid; - } - -+#ifdef HAVE_ISULAD -+int setup_resource_limits(struct lxc_list *limits, pid_t pid, int errfd) -+#else - int setup_resource_limits(struct lxc_list *limits, pid_t pid) -+#endif - { - int resid; - struct lxc_list *it; -@@ -2974,8 +2999,17 @@ int setup_resource_limits(struct lxc_list *limits, pid_t pid) - return log_error(-1, "Unknown resource %s", lim->resource); - - #if HAVE_PRLIMIT || HAVE_PRLIMIT64 -+#if HAVE_ISULAD -+ if (prlimit(pid, resid, &lim->limit, NULL) != 0) { -+ lxc_write_error_message(errfd, "%s:%d: Failed to set limit %s %lu %lu: %s.", -+ __FILE__, __LINE__, lim->resource, -+ lim->limit.rlim_cur, lim->limit.rlim_max, strerror(errno)); -+ return log_error_errno(-1, errno, "Failed to set limit %s", lim->resource); -+ } -+#else - if (prlimit(pid, resid, &lim->limit, NULL) != 0) - return log_error_errno(-1, errno, "Failed to set limit %s", lim->resource); -+#endif - - TRACE("Setup \"%s\" limit", lim->resource); - #else -@@ -3134,6 +3168,9 @@ struct lxc_conf *lxc_conf_init(void) - new->console.pipes[2][0] = -1; - new->console.pipes[2][1] = -1; - lxc_list_init(&new->console.fifos); -+ new->errmsg = NULL; -+ new->errpipe[0] = -1; -+ new->errpipe[1] = -1; - #endif - - return new; -@@ -4534,8 +4571,16 @@ int lxc_setup(struct lxc_handler *handler) - char *keyring_context = NULL; - - ret = lxc_setup_rootfs_prepare_root(lxc_conf, name, lxcpath); -+#ifdef HAVE_ISULAD -+ if (ret < 0) { -+ lxc_write_error_message(lxc_conf->errpipe[1], "%s:%d: failed to setup rootfs %s.", -+ __FILE__, __LINE__, lxc_conf->rootfs.path); -+ return log_error(-1, "Failed to setup rootfs"); -+ } -+#else - if (ret < 0) - return log_error(-1, "Failed to setup rootfs"); -+#endif - - if (handler->nsfd[LXC_NS_UTS] == -EBADF) { - ret = setup_utsname(lxc_conf->utsname); -@@ -5243,6 +5288,8 @@ void lxc_conf_free(struct lxc_conf *conf) - lxc_clear_populate_devices(conf); - lxc_clear_rootfs_masked_paths(conf); - lxc_clear_rootfs_ro_paths(conf); -+ free(conf->errmsg); -+ lxc_close_error_pipe(conf->errpipe); - #endif - free(conf); - } -@@ -6127,4 +6174,16 @@ int lxc_clear_rootfs_ro_paths(struct lxc_conf *c) - return 0; - } - -+/*isulad: close error pipe */ -+void lxc_close_error_pipe(int *errpipe) -+{ -+ if (errpipe[0] >= 0) { -+ close(errpipe[0]); -+ errpipe[0] = -1; -+ } -+ if (errpipe[1] >= 0) { -+ close(errpipe[1]); -+ errpipe[1] = -1; -+ } -+} - #endif -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 7b6fd3b..4b6409e 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -506,7 +506,11 @@ extern int lxc_setup_rootfs_prepare_root(struct lxc_conf *conf, - const char *name, const char *lxcpath); - extern int lxc_setup(struct lxc_handler *handler); - extern int lxc_setup_parent(struct lxc_handler *handler); -+#ifdef HAVE_ISULAD -+extern int setup_resource_limits(struct lxc_list *limits, pid_t pid, int errfd); -+#else - extern int setup_resource_limits(struct lxc_list *limits, pid_t pid); -+#endif - extern int find_unmapped_nsid(const struct lxc_conf *conf, enum idtype idtype); - extern int mapped_hostid(unsigned id, const struct lxc_conf *conf, - enum idtype idtype); -@@ -557,5 +561,6 @@ int lxc_clear_rootfs_masked_paths(struct lxc_conf *c); - int lxc_clear_rootfs_ro_paths(struct lxc_conf *c); - int lxc_drop_caps(struct lxc_conf *conf); - int run_oci_hooks(const char *name, const char *hookname, struct lxc_conf *conf, const char *lxcpath); -+void lxc_close_error_pipe(int *errpipe); - #endif - #endif /* __LXC_CONF_H */ -diff --git a/src/lxc/execute.c b/src/lxc/execute.c -index 59ff604..16c0fed 100644 ---- a/src/lxc/execute.c -+++ b/src/lxc/execute.c -@@ -19,7 +19,11 @@ - - lxc_log_define(execute, start); - -+#ifdef HAVE_ISULAD -+static int execute_start(struct lxc_handler *handler, void* data, int fd) -+#else - static int execute_start(struct lxc_handler *handler, void* data) -+#endif - { - int argc_add, j; - char **argv; -@@ -71,6 +75,9 @@ static int execute_start(struct lxc_handler *handler, void* data) - execvp(argv[0], argv); - SYSERROR("Failed to exec %s", argv[0]); - -+#ifdef HAVE_ISULAD -+ lxc_write_error_message(fd, "Failed to exec: \"%s\": %s.", argv[0], strerror(errno)); -+#endif - free(argv); - out1: - return 1; -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 818848a..ed09a59 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -972,6 +972,8 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - char **init_cmd = NULL; - #ifdef HAVE_ISULAD - int keepfds[] = {-1, -1, -1, -1, -1}; -+ ssize_t size_read; -+ char errbuf[BUFSIZ + 1] = {0}; - #else - int keepfds[3] = {-1, -1, -1}; - #endif -@@ -1046,10 +1048,23 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - char title[2048]; - pid_t pid_first, pid_second; - -+#ifdef HAVE_ISULAD -+ //isulad: pipdfd for get error message of child or grandchild process. -+ if (pipe2(conf->errpipe, O_CLOEXEC) != 0) { -+ SYSERROR("Failed to init errpipe"); -+ free_init_cmd(init_cmd); -+ lxc_free_handler(handler); -+ return false; -+ } -+#endif -+ - pid_first = fork(); - if (pid_first < 0) { - free_init_cmd(init_cmd); - lxc_free_handler(handler); -+#ifdef HAVE_ISULAD -+ lxc_close_error_pipe(conf->errpipe); -+#endif - return false; - } - -@@ -1059,11 +1074,25 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - * the PID file, child will do the free and unlink. - */ - c->pidfile = NULL; -+#ifdef HAVE_ISULAD -+ close(conf->errpipe[1]); -+ conf->errpipe[1] = -1; -+#endif - - /* Wait for container to tell us whether it started - * successfully. - */ - started = wait_on_daemonized_start(handler, pid_first); -+#ifdef HAVE_ISULAD -+ if (!started) { -+ size_read = read(conf->errpipe[0], errbuf, BUFSIZ); -+ if (size_read > 0) { -+ conf->errmsg = safe_strdup(errbuf); -+ } -+ } -+ close(conf->errpipe[0]); -+ conf->errpipe[0] = -1; -+#endif - - free_init_cmd(init_cmd); - lxc_free_handler(handler); -@@ -1099,6 +1128,9 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - if (pid_second != 0) { - free_init_cmd(init_cmd); - lxc_free_handler(handler); -+#ifdef HAVE_ISULAD -+ lxc_close_error_pipe(conf->errpipe); -+#endif - _exit(EXIT_SUCCESS); - } - -@@ -1114,6 +1146,11 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - keepfds[0] = handler->conf->maincmd_fd; - keepfds[1] = handler->state_socket_pair[0]; - keepfds[2] = handler->state_socket_pair[1]; -+#ifdef HAVE_ISULAD -+ keepfds[4] = conf->errpipe[1]; -+ close(conf->errpipe[0]); -+ conf->errpipe[0] = -1; -+#endif - ret = lxc_check_inherited(conf, true, keepfds, - sizeof(keepfds) / sizeof(keepfds[0])); - if (ret < 0) -@@ -1148,6 +1185,9 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - if (w < 0 || (size_t)w >= sizeof(pidstr)) { - free_init_cmd(init_cmd); - lxc_free_handler(handler); -+#ifdef HAVE_ISULAD -+ lxc_close_error_pipe(conf->errpipe); -+#endif - - SYSERROR("Failed to write monitor pid to \"%s\"", c->pidfile); - -@@ -1161,6 +1201,9 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - if (ret < 0) { - free_init_cmd(init_cmd); - lxc_free_handler(handler); -+#ifdef HAVE_ISULAD -+ lxc_close_error_pipe(conf->errpipe); -+#endif - - SYSERROR("Failed to write monitor pid to \"%s\"", c->pidfile); - -@@ -1224,6 +1267,9 @@ reboot: - if (conf->exit_fd >= 0) { - keepfds[3] = conf->exit_fd; - } -+ /* isulad: keep errpipe fd */ -+ if (c->daemonize) -+ keepfds[4] = conf->errpipe[1]; - #endif - - ret = lxc_check_inherited(conf, c->daemonize, keepfds, -@@ -3250,6 +3296,7 @@ static bool container_destroy(struct lxc_container *c, - ERROR("Sprintf failed"); - goto out; - } -+ c->error_string = safe_strdup(msg); - #endif - goto out; - } -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 0bc1143..134235f 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -836,6 +836,9 @@ int lxc_init(const char *name, struct lxc_handler *handler) - ret = lxc_terminal_setup(conf); - if (ret < 0) { - ERROR("Failed to create console"); -+#ifdef HAVE_ISULAD -+ lxc_write_error_message(conf->errpipe[1], "Failed to create console for container \"%s\".", name); -+#endif - goto out_restore_sigmask; - } - TRACE("Created console"); -@@ -1470,6 +1473,9 @@ static int do_start(void *data) - /* Setup the container, ip, names, utsname, ... */ - ret = lxc_setup(handler); - if (ret < 0) { -+#ifdef HAVE_ISULAD -+ lxc_write_error_message(handler->conf->errpipe[1], "Failed to setup lxc, please check the config file."); -+#endif - ERROR("Failed to setup container \"%s\"", handler->name); - goto out_warn_father; - } -@@ -1763,7 +1769,11 @@ static int do_start(void *data) - /* After this call, we are in error because this ops should not return - * as it execs. - */ -+#ifdef HAVE_ISULAD -+ handler->ops->start(handler, handler->data, handler->daemonize ? handler->conf->errpipe[1] : -1); -+#else - handler->ops->start(handler, handler->data); -+#endif - - out_warn_father: - /* We want the parent to know something went wrong, so we return a -@@ -2246,7 +2256,11 @@ static int lxc_spawn(struct lxc_handler *handler) - goto out_delete_net; - - if (!lxc_list_empty(&conf->limits)) { -+#ifdef HAVE_ISULAD -+ ret = setup_resource_limits(&conf->limits, handler->pid, conf->errpipe[1]); -+#else - ret = setup_resource_limits(&conf->limits, handler->pid); -+#endif - if (ret < 0) { - ERROR("Failed to setup resource limits"); - goto out_delete_net; -@@ -2652,7 +2666,11 @@ struct start_args { - char *const *argv; - }; - -+#ifdef HAVE_ISULAD -+static int start(struct lxc_handler *handler, void* data, int fd) -+#else - static int start(struct lxc_handler *handler, void* data) -+#endif - { - struct start_args *arg = data; - -@@ -2660,6 +2678,9 @@ static int start(struct lxc_handler *handler, void* data) - - execvp(arg->argv[0], arg->argv); - SYSERROR("Failed to exec \"%s\"", arg->argv[0]); -+#ifdef HAVE_ISULAD -+ lxc_write_error_message(fd, "exec: \"%s\": %s.", arg->argv[0], strerror(errno)); -+#endif - return 0; - } - -diff --git a/src/lxc/start.h b/src/lxc/start.h -index cea37bc..ebeeb72 100644 ---- a/src/lxc/start.h -+++ b/src/lxc/start.h -@@ -141,7 +141,11 @@ struct execute_args { - }; - - struct lxc_operations { -+#ifdef HAVE_ISULAD -+ int (*start)(struct lxc_handler *, void *, int); -+#else - int (*start)(struct lxc_handler *, void *); -+#endif - int (*post_start)(struct lxc_handler *, void *); - }; - -diff --git a/src/lxc/tools/lxc_ls.c b/src/lxc/tools/lxc_ls.c -index 4be8564..e601f9d 100644 ---- a/src/lxc/tools/lxc_ls.c -+++ b/src/lxc/tools/lxc_ls.c -@@ -106,7 +106,11 @@ struct wrapargs { - /* - * Takes struct wrapargs as argument. - */ -+#ifdef HAVE_ISULAD -+static int ls_get_wrapper(void *wrap, int msgfd); -+#else - static int ls_get_wrapper(void *wrap); -+#endif - - /* - * To calculate swap usage we should not simply check memory.usage_in_bytes and -@@ -1005,7 +1009,11 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - return 0; - } - -+#ifdef HAVE_ISULAD -+static int ls_get_wrapper(void *wrap, int msgfd) -+#else - static int ls_get_wrapper(void *wrap) -+#endif - { - int ret = -1; - size_t len = 0; -diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c -index b430a1e..4f2c8af 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -392,6 +392,11 @@ int main(int argc, char *argv[]) - else - err = c->start(c, 0, args) ? EXIT_SUCCESS : EXIT_FAILURE; - if (err) { -+#ifdef HAVE_ISULAD -+ if (c->lxc_conf->errmsg) -+ fprintf(stderr, "%s:%s:%s:%d starting container process caused \"%s\"", c->name, -+ __FILE__, __func__, __LINE__, c->lxc_conf->errmsg); -+#endif - ERROR("The container failed to start"); - - if (my_args.daemonize) -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 810b7fe..4e418fb 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -73,6 +73,9 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev, - int ret; - struct dirent *direntp; - char pathname[PATH_MAX]; -+#ifdef HAVE_ISULAD -+ int saved_errno = 0; -+#endif - - dir = opendir(dirname); - if (!dir) -@@ -135,6 +138,11 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev, - } else { - ret = unlink(pathname); - if (ret < 0) { -+#ifdef HAVE_ISULAD -+ if (saved_errno == 0) { -+ saved_errno = errno; -+ } -+#endif - __do_close int fd = -EBADF; - - fd = open(pathname, O_RDONLY | O_CLOEXEC | O_NONBLOCK); -@@ -160,10 +168,18 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev, - } - - if (rmdir(dirname) < 0 && !btrfs_try_remove_subvol(dirname) && !hadexclude) { -+#ifdef HAVE_ISULAD -+ if (saved_errno == 0) { -+ saved_errno = errno; -+ } -+#endif - SYSERROR("Failed to delete \"%s\"", dirname); - failed = 1; - } - -+#ifdef HAVE_ISULAD -+ errno = saved_errno; -+#endif - return failed ? -1 : 0; - } - --- -1.8.3.1 - diff --git a/0044-remove-filelock-in-destroy-dir.patch b/0044-remove-filelock-in-destroy-dir.patch deleted file mode 100644 index fbca9d7..0000000 --- a/0044-remove-filelock-in-destroy-dir.patch +++ /dev/null @@ -1,153 +0,0 @@ -From 0441dc446ad9f0bc02c5ca7a76d793c8a7734fd9 Mon Sep 17 00:00:00 2001 -From: haozi007 -Date: Thu, 16 Apr 2020 15:39:50 +0800 -Subject: [PATCH 44/49] remove filelock in destroy dir - -Signed-off-by: haozi007 ---- - src/lxc/lxccontainer.c | 21 +++++++++++++++++++++ - src/lxc/lxclock.c | 27 +++++++++++++++++++++++++++ - src/lxc/lxclock.h | 4 ++++ - src/lxc/start.c | 7 +++++++ - src/lxc/storage/dir.c | 4 ++++ - 5 files changed, 63 insertions(+) - -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index ed09a59..6281a8a 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -3168,8 +3168,19 @@ static bool container_destroy(struct lxc_container *c, - bool bret = false; - int ret = 0; - -+#ifdef HAVE_ISULAD -+ if (!c) -+ return false; -+ // isulad: if container is not defined, we need to remove disk lock file -+ // which is created in lxc_container_new. -+ if (!do_lxcapi_is_defined(c)) { -+ container_disk_removelock(c); -+ return false; -+ } -+#else - if (!c || !do_lxcapi_is_defined(c)) - return false; -+#endif - - conf = c->lxc_conf; - if (container_disk_lock(c)) -@@ -3310,13 +3321,23 @@ out: - free(path); - - container_disk_unlock(c); -+#ifdef HAVE_ISULAD -+ if (bret && container_disk_removelock(c)) { -+ bret = false; -+ } -+#endif - return bret; - } - - static bool do_lxcapi_destroy(struct lxc_container *c) - { -+#ifdef HAVE_ISULAD -+ if (!c) -+ return false; -+#else - if (!c || !lxcapi_is_defined(c)) - return false; -+#endif - - if (c->lxc_conf && c->lxc_conf->rootfs.managed) { - if (has_snapshots(c)) { -diff --git a/src/lxc/lxclock.c b/src/lxc/lxclock.c -index 318e5bf..bb0dca0 100644 ---- a/src/lxc/lxclock.c -+++ b/src/lxc/lxclock.c -@@ -370,3 +370,30 @@ void container_disk_unlock(struct lxc_container *c) - lxcunlock(c->slock); - lxcunlock(c->privlock); - } -+ -+#ifdef HAVE_ISULAD -+static int lxc_removelock(struct lxc_lock *l) -+{ -+ int ret = 0; -+ -+ if (l->type == LXC_LOCK_FLOCK) { -+ ret = unlink(l->u.f.fname); -+ if (ret && errno != ENOENT) { -+ SYSERROR("Error unlink %s", l->u.f.fname); -+ return ret; -+ } -+ } -+ -+ return ret; -+} -+ -+int container_disk_removelock(struct lxc_container *c) -+{ -+ int ret; -+ -+ ret = lxc_removelock(c->slock); -+ if (ret) -+ return ret; -+ return lxc_removelock(c->privlock); -+} -+#endif -diff --git a/src/lxc/lxclock.h b/src/lxc/lxclock.h -index 9f9bc3b..6a71d7c 100644 ---- a/src/lxc/lxclock.h -+++ b/src/lxc/lxclock.h -@@ -154,4 +154,8 @@ extern int container_disk_lock(struct lxc_container *c); - */ - extern void container_disk_unlock(struct lxc_container *c); - -+#ifdef HAVE_ISULAD -+int container_disk_removelock(struct lxc_container *c); -+#endif -+ - #endif -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 134235f..6779cee 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -2143,6 +2143,13 @@ static int lxc_spawn(struct lxc_handler *handler) - if (ret < 0) - SYSERROR("Failed to set environment variable: LXC_PID=%s", pidstr); - -+#ifdef HAVE_ISULAD -+ if (handler->cgroup_ops->container_cgroup) { -+ if (setenv("LXC_CGROUP_PATH", handler->cgroup_ops->container_cgroup, 1)) -+ SYSERROR("Failed to set environment variable: LXC_CGROUP_PATH=%s.", handler->cgroup_ops->container_cgroup); -+ } -+#endif -+ - for (i = 0; i < LXC_NS_MAX; i++) - if (handler->ns_on_clone_flags & ns_info[i].clone_flag) - INFO("Cloned %s", ns_info[i].flag_name); -diff --git a/src/lxc/storage/dir.c b/src/lxc/storage/dir.c -index 1dc95f1..485572a 100644 ---- a/src/lxc/storage/dir.c -+++ b/src/lxc/storage/dir.c -@@ -94,6 +94,9 @@ int dir_create(struct lxc_storage *bdev, const char *dest, const char *n, - - int dir_destroy(struct lxc_storage *orig) - { -+#ifdef HAVE_ISULAD -+ // isulad: do not destroy rootfs for directory, it should be managed by caller -+#else - int ret; - const char *src; - -@@ -102,6 +105,7 @@ int dir_destroy(struct lxc_storage *orig) - ret = lxc_rmdir_onedev(src, NULL); - if (ret < 0) - return log_error_errno(ret, errno, "Failed to delete \"%s\"", src); -+#endif - - return 0; - } --- -1.8.3.1 - diff --git a/0045-restore-default-signal-handler.patch b/0045-restore-default-signal-handler.patch deleted file mode 100644 index e605cdd..0000000 --- a/0045-restore-default-signal-handler.patch +++ /dev/null @@ -1,120 +0,0 @@ -From 4a609606e050a9a4693541a965e34d8ac366f153 Mon Sep 17 00:00:00 2001 -From: haozi007 -Date: Thu, 16 Apr 2020 15:56:21 +0800 -Subject: [PATCH 45/49] restore default signal handler - -Signed-off-by: haozi007 ---- - hooks/Makefile.am | 3 +++ - src/lxc/attach.c | 16 ++++++++++++++++ - src/lxc/initutils.c | 4 ++++ - src/lxc/start.c | 19 +++++++++++++++++++ - 4 files changed, 42 insertions(+) - -diff --git a/hooks/Makefile.am b/hooks/Makefile.am -index 5ae73d7..ddfd4bc 100644 ---- a/hooks/Makefile.am -+++ b/hooks/Makefile.am -@@ -10,6 +10,8 @@ hooks_SCRIPTS = \ - squid-deb-proxy-client \ - nvidia - -+ -+if !HAVE_ISULAD - binhooks_PROGRAMS = \ - unmount-namespace - -@@ -20,5 +22,6 @@ if IS_BIONIC - unmount_namespace_SOURCES += \ - ../src/include/lxcmntent.c ../src/include/lxcmntent.h - endif -+endif - - EXTRA_DIST=$(hooks_SCRIPTS) -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 734cddd..1dd2b47 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -679,12 +679,28 @@ static int attach_child_main(struct attach_clone_payload *payload) - init_ctx->lsm_label; - #ifdef HAVE_ISULAD - int msg_fd = -1; -+ sigset_t mask; - - /*isulad: record errpipe fd*/ - msg_fd = init_ctx->container->lxc_conf->errpipe[1]; - init_ctx->container->lxc_conf->errpipe[1] = -1; - /*isulad: set system umask */ - umask(init_ctx->container->lxc_conf->umask); -+ -+ /*isulad: restore default signal handlers and unblock all signals*/ -+ for (int i = 1; i < NSIG; i++) -+ signal(i, SIG_DFL); -+ -+ ret = sigfillset(&mask); -+ if (ret < 0) { -+ SYSERROR("Failed to fill signal mask"); -+ goto on_error;; -+ } -+ ret = sigprocmask(SIG_UNBLOCK, &mask, NULL); -+ if (ret < 0) { -+ SYSERROR("Failed to set signal mask"); -+ goto on_error; -+ } - #endif - - /* A description of the purpose of this functionality is provided in the -diff --git a/src/lxc/initutils.c b/src/lxc/initutils.c -index 5549c2e..76f0048 100644 ---- a/src/lxc/initutils.c -+++ b/src/lxc/initutils.c -@@ -54,12 +54,16 @@ const char *lxc_global_config_value(const char *option_name) - { NULL, NULL }, - }; - -+#ifdef HAVE_ISULAD -+ static const char *values[sizeof(options) / sizeof(options[0])] = {0}; -+#else - /* placed in the thread local storage pool for non-bionic targets */ - #ifdef HAVE_TLS - static thread_local const char *values[sizeof(options) / sizeof(options[0])] = {0}; - #else - static const char *values[sizeof(options) / sizeof(options[0])] = {0}; - #endif -+#endif - - /* user_config_path is freed as soon as it is used */ - char *user_config_path = NULL; -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 6779cee..5d2faee 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1290,6 +1290,25 @@ static int do_start(void *data) - - lxc_sync_fini_parent(handler); - -+#ifdef HAVE_ISULAD -+ sigset_t mask; -+ -+ /*isulad: restore default signal handlers and unblock all signals*/ -+ for (int i = 1; i < NSIG; i++) -+ signal(i, SIG_DFL); -+ -+ ret = sigfillset(&mask); -+ if (ret < 0) { -+ SYSERROR("Failed to fill signal mask"); -+ goto out_warn_father; -+ } -+ ret = sigprocmask(SIG_UNBLOCK, &mask, NULL); -+ if (ret < 0) { -+ SYSERROR("Failed to set signal mask"); -+ goto out_warn_father; -+ } -+#endif -+ - if (lxc_abstract_unix_recv_fds(data_sock1, &status_fd, 1, NULL, 0) < 0) { - ERROR("Failed to receive status file descriptor to child process"); - goto out_warn_father; --- -1.8.3.1 - diff --git a/0046-add-support-systemd.patch b/0046-add-support-systemd.patch deleted file mode 100644 index e43f20e..0000000 --- a/0046-add-support-systemd.patch +++ /dev/null @@ -1,117 +0,0 @@ -From 1922cc534f04a7a006064e7eae2dea44d0000cc3 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Sat, 20 Apr 2019 22:40:18 +0800 -Subject: [PATCH 46/49] add support systemd - -Signed-off-by: zhangsong ---- - src/lxc/cgroups/cgfsng.c | 15 +++++++++++++++ - src/lxc/conf.c | 1 + - src/lxc/confile.c | 30 ++++++++++++++++++++++++++++++ - 3 files changed, 46 insertions(+) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 002f051..4abaa86 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -2096,6 +2096,7 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - { - int i, ret; - char *tmpfspath = NULL; -+ char *systemdpath = NULL; - bool has_cgns = false, retval = false, wants_force_mount = false; - char **merged = NULL; - -@@ -2242,10 +2243,24 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - } - } - -+ // isulad: remount /sys/fs/cgroup/systemd to readwrite for system container -+ if (handler->conf->systemd != NULL && strcmp(handler->conf->systemd, "true") == 0) { -+ systemdpath = must_make_path(root, "/sys/fs/cgroup/systemd", NULL); -+ ret = mount(systemdpath, systemdpath, "bind", -+ MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_RELATIME|MS_BIND|MS_REMOUNT, NULL); -+ if (ret < 0) { -+ SYSERROR("Failed to remount /sys/fs/cgroup/systemd."); -+ goto on_error; -+ } -+ } -+ - retval = true; - - on_error: - free(tmpfspath); -+ if (systemdpath != NULL) { -+ free(systemdpath); -+ } - lxc_free_array((void **)merged, free); - return retval; - } -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index d7a78bd..235965f 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -5283,6 +5283,7 @@ void lxc_conf_free(struct lxc_conf *conf) - if (conf->exit_fd != -1) { - close(conf->exit_fd); - } -+ free(conf->systemd); - lxc_clear_init_args(conf); - lxc_clear_init_groups(conf); - lxc_clear_populate_devices(conf); -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 8790494..771f635 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -154,6 +154,7 @@ lxc_config_define(populate_device); - lxc_config_define(umask); - lxc_config_define(rootfs_masked_paths); - lxc_config_define(rootfs_ro_paths); -+lxc_config_define(systemd); - #endif - - /* -@@ -274,6 +275,7 @@ static struct lxc_config_t config_jump_table[] = { - { "lxc.isulad.umask", set_config_umask, get_config_umask, clr_config_umask, }, - { "lxc.isulad.rootfs.maskedpaths", set_config_rootfs_masked_paths, get_config_rootfs_masked_paths, clr_config_rootfs_masked_paths, }, - { "lxc.isulad.rootfs.ropaths", set_config_rootfs_ro_paths, get_config_rootfs_ro_paths, clr_config_rootfs_ro_paths, }, -+ { "lxc.isulad.systemd", set_config_systemd, get_config_systemd, clr_config_systemd, }, - #endif - }; - -@@ -6587,4 +6589,32 @@ static inline int clr_config_rootfs_ro_paths(const char *key, struct lxc_conf *c - return lxc_clear_rootfs_ro_paths(c); - } - -+/* isulad: set config for systemd */ -+static int set_config_systemd(const char *key, const char *value, -+ struct lxc_conf *lxc_conf, void *data) -+{ -+ if (lxc_config_value_empty(value)) { -+ ERROR("Empty umask"); -+ return -1; -+ } -+ lxc_conf->systemd = strdup(value); -+ return 0; -+} -+ -+/* isulad add: get systemd value*/ -+static int get_config_systemd(const char *key, char *retv, int inlen, -+ struct lxc_conf *c, void *data) -+{ -+ return lxc_get_conf_str(retv, inlen, c->systemd); -+} -+ -+/* isulad add: clear systemd value */ -+static inline int clr_config_systemd(const char *key, struct lxc_conf *c, -+ void *data) -+{ -+ free(c->systemd); -+ c->systemd = NULL; -+ return 0; -+} -+ - #endif --- -1.8.3.1 - diff --git a/0047-support-namespaced-kernel-params-can-be-changed-in-s.patch b/0047-support-namespaced-kernel-params-can-be-changed-in-s.patch deleted file mode 100644 index efb6403..0000000 --- a/0047-support-namespaced-kernel-params-can-be-changed-in-s.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 288b6934f79456f056a2043216bbfdde4342b694 Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Fri, 26 Apr 2019 07:13:53 +0800 -Subject: [PATCH 47/49] support namespaced kernel params can be changed in - system container - -Signed-off-by: yangchenliang ---- - src/lxc/conf.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 71 insertions(+) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 235965f..15d8e42 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -1449,6 +1449,68 @@ error: - return false; - } - -+#ifdef HAVE_ISULAD -+static bool remount_readwrite(const char *path) -+{ -+ int ret, i; -+ -+ if (!path) -+ return true; -+ -+ for (i = 0; i < 5; i++) { -+ ret = mount("", path, "", MS_REMOUNT, ""); -+ if (ret < 0 && errno != ENOENT) { -+ if (errno == EINVAL) { -+ // Probably not a mountpoint, use bind-mount -+ ret = mount(path, path, "", MS_BIND, ""); -+ if (ret < 0) -+ goto on_error; -+ ret = mount(path, path, "", MS_BIND | MS_REMOUNT | MS_REC | \ -+ MS_NOEXEC | MS_NOSUID | MS_NODEV, ""); -+ if (ret < 0) -+ goto on_error; -+ } else if (errno == EBUSY) { -+ DEBUG("Try to mount \"%s\" to readonly after 100ms.", path); -+ usleep(100 * 1000); -+ continue; -+ } else { -+ goto on_error; -+ } -+ } -+ return true; -+ } -+ -+on_error: -+ SYSERROR("Unable to mount \"%s\" to readwrite", path); -+ return false; -+} -+ -+static int remount_proc_sys_mount_entries(struct lxc_list *mount_list, bool lsm_aa_allow_nesting) -+{ -+ char buf[4096]; -+ FILE *file; -+ struct mntent mntent; -+ -+ file = make_anonymous_mount_file(mount_list, lsm_aa_allow_nesting); -+ if (!file) -+ return -1; -+ -+ while (getmntent_r(file, &mntent, buf, sizeof(buf))) { -+ if (strstr(mntent.mnt_dir, "proc/sys") == NULL) { -+ continue; -+ } -+ -+ if (!remount_readwrite((const char*)mntent.mnt_dir)) { -+ fclose(file); -+ return -1; -+ } -+ } -+ -+ fclose(file); -+ return 0; -+} -+#endif -+ - // remount_readonly will bind over the top of an existing path and ensure that it is read-only. - static bool remount_readonly(const char *path) - { -@@ -4773,6 +4835,15 @@ int lxc_setup(struct lxc_handler *handler) - } - } - -+ //isulad: system container, remount /proc/sys/xxx by mount_list -+ if (lxc_conf->systemd != NULL && strcmp(lxc_conf->systemd, "true") == 0) { -+ if (!lxc_list_empty(&lxc_conf->mount_list)) { -+ if (remount_proc_sys_mount_entries(&lxc_conf->mount_list, lxc_conf->lsm_aa_allow_nesting)) { -+ return log_error(-1, "failed to remount /proc/sys"); -+ } -+ } -+ } -+ - // isulad: create link /etc/mtab for /proc/mounts - if (create_mtab_link() != 0) { - return log_error(-1, "failed to create link /etc/mtab for target /proc/mounts"); --- -1.8.3.1 - diff --git a/0048-don-t-use-the-unified-hierarchy-for-the-systemd-cgro.patch b/0048-don-t-use-the-unified-hierarchy-for-the-systemd-cgro.patch deleted file mode 100644 index aab73c3..0000000 --- a/0048-don-t-use-the-unified-hierarchy-for-the-systemd-cgro.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 4dfcafd037464a64047b70ffea3b91a70514ae92 Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Fri, 10 May 2019 11:05:42 +0800 -Subject: [PATCH 48/49] don't use the unified hierarchy for the systemd cgroup - -Signed-off-by: zhangsong ---- - src/lxc/cgroups/cgfsng.c | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 4abaa86..4a0961f 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -2097,6 +2097,7 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - int i, ret; - char *tmpfspath = NULL; - char *systemdpath = NULL; -+ char *unifiedpath = NULL; - bool has_cgns = false, retval = false, wants_force_mount = false; - char **merged = NULL; - -@@ -2245,6 +2246,16 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - - // isulad: remount /sys/fs/cgroup/systemd to readwrite for system container - if (handler->conf->systemd != NULL && strcmp(handler->conf->systemd, "true") == 0) { -+ // isulad: don't use the unified hierarchy for the systemd cgroup -+ unifiedpath = must_make_path(root, "/sys/fs/cgroup/unified", NULL); -+ if (dir_exists(unifiedpath)) { -+ ret = umount2(unifiedpath, MNT_DETACH); -+ if (ret < 0) { -+ SYSERROR("Failed to umount /sys/fs/cgroup/unified."); -+ goto on_error; -+ } -+ } -+ - systemdpath = must_make_path(root, "/sys/fs/cgroup/systemd", NULL); - ret = mount(systemdpath, systemdpath, "bind", - MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_RELATIME|MS_BIND|MS_REMOUNT, NULL); -@@ -2261,6 +2272,9 @@ on_error: - if (systemdpath != NULL) { - free(systemdpath); - } -+ if (unifiedpath != NULL) { -+ free(unifiedpath); -+ } - lxc_free_array((void **)merged, free); - return retval; - } --- -1.8.3.1 - diff --git a/0049-make-dev-bind-mount-from-host-tmpfs-for-system-conta.patch b/0049-make-dev-bind-mount-from-host-tmpfs-for-system-conta.patch deleted file mode 100644 index 1d10ca4..0000000 --- a/0049-make-dev-bind-mount-from-host-tmpfs-for-system-conta.patch +++ /dev/null @@ -1,99 +0,0 @@ -From e1e3ad7bc7cb1a26cca676ff5e4a5ceaf7eedaee Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Wed, 15 May 2019 12:42:08 +0800 -Subject: [PATCH 49/49] make /dev bind mount from host tmpfs for system - container - -Signed-off-by: zhangsong ---- - src/lxc/conf.c | 33 +++++++++++++++++++++++++++++++-- - 1 file changed, 31 insertions(+), 2 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 15d8e42..4d8fa2a 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -1074,8 +1074,13 @@ on_error: - /* Just create a path for /dev under $lxcpath/$name and in rootfs If we hit an - * error, log it but don't fail yet. - */ -+#ifdef HAVE_ISULAD -+static int mount_autodev(const char *name, const struct lxc_rootfs *rootfs, -+ int autodevtmpfssize, const char *lxcpath, char *systemd) -+#else - static int mount_autodev(const char *name, const struct lxc_rootfs *rootfs, - int autodevtmpfssize, const char *lxcpath) -+#endif - { - __do_free char *path = NULL; - int ret; -@@ -1088,6 +1093,7 @@ static int mount_autodev(const char *name, const struct lxc_rootfs *rootfs, - /* $(rootfs->mount) + "/dev/pts" + '\0' */ - clen = (rootfs->path ? strlen(rootfs->mount) : 0) + 9; - path = must_realloc(NULL, clen); -+ - sprintf(mount_options, "size=%d,mode=755", (autodevtmpfssize != 0) ? autodevtmpfssize : 500000); - DEBUG("Using mount options: %s", mount_options); - -@@ -1103,6 +1109,23 @@ static int mount_autodev(const char *name, const struct lxc_rootfs *rootfs, - goto reset_umask; - } - -+#ifdef HAVE_ISULAD -+ if (systemd != NULL && !strcmp(systemd, "true")) { -+ ret = mount(path, path, "", MS_BIND, NULL); -+ if (ret < 0) { -+ SYSERROR("Failed to bind mount path \"%s\"", path); -+ goto reset_umask; -+ } -+ } else { -+ ret = safe_mount("none", path, "tmpfs", 0, mount_options, -+ rootfs->path ? rootfs->mount : NULL); -+ if (ret < 0) { -+ SYSERROR("Failed to mount tmpfs on \"%s\"", path); -+ goto reset_umask; -+ } -+ TRACE("Mounted tmpfs on \"%s\"", path); -+ } -+#else - ret = safe_mount("none", path, "tmpfs", 0, mount_options, - rootfs->path ? rootfs->mount : NULL ); - if (ret < 0) { -@@ -1110,6 +1133,7 @@ static int mount_autodev(const char *name, const struct lxc_rootfs *rootfs, - goto reset_umask; - } - TRACE("Mounted tmpfs on \"%s\"", path); -+#endif - - ret = snprintf(path, clen, "%s/dev/pts", rootfs->path ? rootfs->mount : ""); - if (ret < 0 || (size_t)ret >= clen) { -@@ -4674,7 +4698,11 @@ int lxc_setup(struct lxc_handler *handler) - } - - if (lxc_conf->autodev > 0) { -+#ifdef HAVE_ISULAD -+ ret = mount_autodev(name, &lxc_conf->rootfs, lxc_conf->autodevtmpfssize, lxcpath, lxc_conf->systemd); -+#else - ret = mount_autodev(name, &lxc_conf->rootfs, lxc_conf->autodevtmpfssize, lxcpath); -+#endif - if (ret < 0) - return log_error(-1, "Failed to mount \"/dev\""); - } -@@ -4838,11 +4866,12 @@ int lxc_setup(struct lxc_handler *handler) - //isulad: system container, remount /proc/sys/xxx by mount_list - if (lxc_conf->systemd != NULL && strcmp(lxc_conf->systemd, "true") == 0) { - if (!lxc_list_empty(&lxc_conf->mount_list)) { -- if (remount_proc_sys_mount_entries(&lxc_conf->mount_list, lxc_conf->lsm_aa_allow_nesting)) { -+ if (remount_proc_sys_mount_entries(&lxc_conf->mount_list, -+ lxc_conf->lsm_aa_allow_nesting)) { - return log_error(-1, "failed to remount /proc/sys"); - } - } -- } -+ } - - // isulad: create link /etc/mtab for /proc/mounts - if (create_mtab_link() != 0) { --- -1.8.3.1 - diff --git a/0050-clean-add-init-fd-in-lxc_init_clean_handler.patch b/0050-clean-add-init-fd-in-lxc_init_clean_handler.patch deleted file mode 100644 index 82db298..0000000 --- a/0050-clean-add-init-fd-in-lxc_init_clean_handler.patch +++ /dev/null @@ -1,27 +0,0 @@ -From d15c6e2871202d8d8b928a4b4e11537997c24fc1 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 16 Apr 2020 21:39:19 +0800 -Subject: [PATCH] clean: add init fd in lxc_init_clean_handler - -Signed-off-by: LiFeng ---- - src/lxc/start.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 5d2faee..938ca8e 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -2913,7 +2913,9 @@ static struct lxc_handler *lxc_init_clean_handler(char *name, char *lxcpath, str - handler->lxcpath = lxcpath; - handler->pinfd = -1; - handler->sigfd = -EBADF; -+ handler->pidfd = -EBADF; - handler->init_died = false; -+ handler->monitor_status_fd = -EBADF; - handler->pid = pid; - handler->state_socket_pair[0] = handler->state_socket_pair[1] = -1; - if (handler->conf->reboot == REBOOT_NONE) --- -1.8.3.1 - diff --git a/0051-init-pids-add-init-fd-in-lxc_init_pids_handler.patch b/0051-init-pids-add-init-fd-in-lxc_init_pids_handler.patch deleted file mode 100644 index 8fceaa5..0000000 --- a/0051-init-pids-add-init-fd-in-lxc_init_pids_handler.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 3931e7ef88aa2a8a67ca967ad1fe359df736ac86 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 16 Apr 2020 22:15:30 +0800 -Subject: [PATCH] init pids: add init fd in lxc_init_pids_handler - -Signed-off-by: LiFeng ---- - src/lxc/start.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 938ca8e..e099285 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -2967,6 +2967,8 @@ static struct lxc_handler *lxc_init_pids_handler(char *name, char *lxcpath, stru - handler->sigfd = -EBADF; - handler->init_died = false; - handler->state_socket_pair[0] = handler->state_socket_pair[1] = -1; -+ handler->monitor_status_fd = -EBADF; -+ handler->pidfd = -EBADF; - if (handler->conf->reboot == REBOOT_NONE) - lxc_list_init(&handler->conf->state_clients); - --- -1.8.3.1 - diff --git a/0052-setupdev-add-judge-whether-have-mount-dev-entry.patch b/0052-setupdev-add-judge-whether-have-mount-dev-entry.patch deleted file mode 100644 index cac78bf..0000000 --- a/0052-setupdev-add-judge-whether-have-mount-dev-entry.patch +++ /dev/null @@ -1,132 +0,0 @@ -From 68d3c92b40e049a257bf86dbb29fb274a5f1125e Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Sat, 18 Apr 2020 18:13:16 +0800 -Subject: [PATCH] setupdev: add judge whether have mount /dev entry - -reason: If user specify the Destination "/dev". - 1.Should not populate devices - 2.Should not setup devpts - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- - 1 file changed, 59 insertions(+), 3 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 4d8fa2a..e8568d8 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -1942,6 +1942,9 @@ static int lxc_setup_dev_console(const struct lxc_rootfs *rootfs, - if (ret < 0 && errno != EEXIST) - return log_error_errno(-errno, errno, "Failed to create console"); - -+#ifdef HAVE_ISULAD -+ if (console->slave > 0) { -+#endif - ret = fchmod(console->slave, S_IXUSR | S_IXGRP); - if (ret < 0) - return log_error_errno(-errno, errno, "Failed to set mode \"0%o\" to \"%s\"", S_IXUSR | S_IXGRP, console->name); -@@ -1949,7 +1952,9 @@ static int lxc_setup_dev_console(const struct lxc_rootfs *rootfs, - ret = safe_mount(console->name, path, "none", MS_BIND, 0, rootfs_path); - if (ret < 0) - return log_error_errno(-1, errno, "Failed to mount \"%s\" on \"%s\"", console->name, path); -- -+#ifdef HAVE_ISULAD -+ } -+#endif - DEBUG("Mounted pts device \"%s\" onto \"%s\"", console->name, path); - return 0; - } -@@ -2913,6 +2918,51 @@ static int setup_mount_entries(const struct lxc_conf *conf, - return mount_file_entries(conf, rootfs, f, lxc_name, lxc_path); - } - -+#ifdef HAVE_ISULAD -+static bool have_dev_bind_mount_entry(FILE *file) -+{ -+ bool have_bind_dev = false; -+ char buf[PATH_MAX]; -+ struct mntent mntent; -+ -+ while (getmntent_r(file, &mntent, buf, sizeof(buf))) { -+ mntent.mnt_dir = lxc_string_replace(SPACE_MAGIC_STR, " ", mntent.mnt_dir); -+ if(!mntent.mnt_dir) { -+ SYSERROR("memory allocation error"); -+ continue; -+ } -+ -+ if (strcmp(mntent.mnt_dir, "dev") == 0 && strcmp(mntent.mnt_type, "bind") == 0) { -+ have_bind_dev = true; -+ } -+ -+ free(mntent.mnt_dir); -+ mntent.mnt_dir = NULL; -+ -+ if (have_bind_dev) -+ return true; -+ } -+ -+ return false; -+} -+ -+// returns true if /dev needs to be set up. -+static bool need_setup_dev(const struct lxc_conf *conf, struct lxc_list *mount) -+{ -+ __do_fclose FILE *f = NULL; -+ -+ f = make_anonymous_mount_file(mount, conf->lsm_aa_allow_nesting); -+ if (!f) -+ return true; -+ -+ if (have_dev_bind_mount_entry(f)) { -+ return false; -+ } else { -+ return true; -+ } -+} -+#endif -+ - static int parse_cap(const char *cap) - { - size_t i; -@@ -4655,6 +4705,9 @@ int lxc_setup(struct lxc_handler *handler) - const char *lxcpath = handler->lxcpath, *name = handler->name; - struct lxc_conf *lxc_conf = handler->conf; - char *keyring_context = NULL; -+#ifdef HAVE_ISULAD -+ bool setup_dev = true; -+#endif - - ret = lxc_setup_rootfs_prepare_root(lxc_conf, name, lxcpath); - #ifdef HAVE_ISULAD -@@ -4723,6 +4776,9 @@ int lxc_setup(struct lxc_handler *handler) - &lxc_conf->mount_list, name, lxcpath); - if (ret < 0) - return log_error(-1, "Failed to setup mount entries"); -+#ifdef HAVE_ISULAD -+ setup_dev = need_setup_dev(lxc_conf, &lxc_conf->mount_list); -+#endif - } - - if (lxc_conf->is_execute) { -@@ -4771,7 +4827,7 @@ int lxc_setup(struct lxc_handler *handler) - - #ifdef HAVE_ISULAD - /* isulad: setup devices which will be populated in the container. */ -- if (!lxc_list_empty(&lxc_conf->populate_devs)) { -+ if (!lxc_list_empty(&lxc_conf->populate_devs) && setup_dev) { - if (setup_populate_devs(&lxc_conf->rootfs, &lxc_conf->populate_devs) != 0) { - return log_error(-1, "Failed to setup devices in the container"); - } -@@ -4813,7 +4869,7 @@ int lxc_setup(struct lxc_handler *handler) - if (setup_rootfs_mountopts(&lxc_conf->rootfs)) { - return log_error(-1, "failed to set rootfs for '%s'", name); - } -- if (lxc_conf->rootfs.path) { -+ if (lxc_conf->rootfs.path != NULL && setup_dev) { - ret = lxc_setup_devpts(lxc_conf); - if (ret < 0) { - return log_error(-1, "Failed to setup new devpts instance for '%s'", name); --- -1.8.3.1 - diff --git a/0053-attach-seprate-i-and-t-flags.patch b/0053-attach-seprate-i-and-t-flags.patch deleted file mode 100644 index ed70a7b..0000000 --- a/0053-attach-seprate-i-and-t-flags.patch +++ /dev/null @@ -1,288 +0,0 @@ -From 36f64e652afc7fe3feac6d93468cbc4f3d53ec9a Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Tue, 21 Apr 2020 15:36:55 +0800 -Subject: [PATCH] attach: seprate -i and -t flags - -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 100 ++++++++++++++++++++++++++++++++++++++++++++- - src/lxc/attach_options.h | 2 + - src/lxc/start.c | 1 + - src/lxc/terminal.c | 14 ++++--- - src/lxc/tools/lxc_attach.c | 17 +++++++- - 5 files changed, 125 insertions(+), 9 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 1dd2b47..5539fb1 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -653,6 +653,9 @@ struct attach_clone_payload { - struct lxc_proc_context_info *init_ctx; - lxc_attach_exec_t exec_function; - void *exec_payload; -+#ifdef HAVE_ISULAD -+ struct lxc_terminal *terminal; -+#endif - }; - - static void lxc_put_attach_clone_payload(struct attach_clone_payload *p) -@@ -665,6 +668,49 @@ static void lxc_put_attach_clone_payload(struct attach_clone_payload *p) - } - } - -+#ifdef HAVE_ISULAD -+static int isulad_set_attach_pipes(struct lxc_terminal *terminal) -+{ -+ int ret = 0; -+ if (terminal->pipes[0][1] >= 0) { -+ close(terminal->pipes[0][1]); -+ terminal->pipes[0][1] = -1; -+ } -+ -+ if (terminal->pipes[0][0] >= 0) { -+ ret = dup2(terminal->pipes[0][0], STDIN_FILENO); -+ if (ret < 0) -+ goto out; -+ } -+ -+ if (terminal->pipes[1][0] >= 0) { -+ close(terminal->pipes[1][0]); -+ terminal->pipes[1][0] = -1; -+ } -+ -+ if (terminal->pipes[1][1] >= 0) { -+ ret = dup2(terminal->pipes[1][1], STDOUT_FILENO); -+ if (ret < 0) -+ goto out; -+ } -+ if (terminal->pipes[2][0] >= 0) { -+ close(terminal->pipes[2][0]); -+ terminal->pipes[2][0] = -1; -+ } -+ -+ if (terminal->pipes[2][1] >= 0) { -+ ret = dup2(terminal->pipes[2][1], STDERR_FILENO); -+ if (ret < 0) -+ goto out; -+ } -+ -+ setsid(); -+out: -+ return ret; -+} -+ -+#endif -+ - static int attach_child_main(struct attach_clone_payload *payload) - { - int lsm_fd, ret; -@@ -933,6 +979,25 @@ static int attach_child_main(struct attach_clone_payload *payload) - } - - if (options->attach_flags & LXC_ATTACH_TERMINAL) { -+ -+#ifdef HAVE_ISULAD -+ /* isulad: dup2 pipe[0][0] to container stdin, pipe[1][1] to container stdout, pipe[2][1] to container stderr */ -+ if (payload->terminal->disable_pty) { -+ ret = isulad_set_attach_pipes(payload->terminal); -+ if (ret < 0) { -+ SYSERROR("Failed to prepare terminal file pipes"); -+ goto on_error; -+ } -+ } -+ -+ if(!payload->terminal->disable_pty && payload->terminal_slave_fd >= 0) { -+ ret = lxc_terminal_prepare_login(payload->terminal_slave_fd); -+ if (ret < 0) { -+ SYSERROR("Failed to prepare terminal file descriptor %d", payload->terminal_slave_fd); -+ goto on_error; -+ } -+ } -+#else - ret = lxc_terminal_prepare_login(payload->terminal_slave_fd); - if (ret < 0) { - SYSERROR("Failed to prepare terminal file descriptor %d", payload->terminal_slave_fd); -@@ -940,6 +1005,7 @@ static int attach_child_main(struct attach_clone_payload *payload) - } - - TRACE("Prepared terminal file descriptor %d", payload->terminal_slave_fd); -+#endif - } - - /* Avoid unnecessary syscalls. */ -@@ -1016,6 +1082,9 @@ static int lxc_attach_terminal(struct lxc_conf *conf, - free(terminal->init_fifo[2]); - terminal->init_fifo[2] = safe_strdup(options->init_fifo[2]); - } -+ -+ terminal->disable_pty = options->disable_pty; -+ terminal->open_stdin = options->open_stdin; - #endif - - ret = lxc_terminal_create(terminal); -@@ -1410,6 +1479,21 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - /* isulad: close errpipe */ - close(conf->errpipe[1]); - conf->errpipe[1] = -1; -+ /* isulad: close pipe after clone */ -+ if (terminal.pipes[0][0] >= 0) { -+ close(terminal.pipes[0][0]); -+ terminal.pipes[0][0] = -1; -+ } -+ -+ if (terminal.pipes[1][1] >= 0) { -+ close(terminal.pipes[1][1]); -+ terminal.pipes[1][1] = -1; -+ } -+ -+ if (terminal.pipes[2][1] >= 0) { -+ close(terminal.pipes[2][1]); -+ terminal.pipes[2][1] = -1; -+ } - #endif - lxc_proc_close_ns_fd(init_ctx); - if (options->attach_flags & LXC_ATTACH_TERMINAL) -@@ -1568,6 +1652,15 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - ret_parent = 0; - to_cleanup_pid = -1; - -+ #ifdef HAVE_ISULAD -+ // iSulad: close stdin pipe if we do not want open_stdin with container stdin -+ if (!terminal.open_stdin) { -+ if (terminal.pipes[0][1] > 0) { -+ close(terminal.pipes[0][1]); -+ terminal.pipes[0][1] = -1; -+ } -+ } -+ #endif - if (options->attach_flags & LXC_ATTACH_TERMINAL) { - ret = lxc_mainloop(&descr, -1); - if (ret < 0) { -@@ -1671,6 +1764,9 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - payload.terminal_slave_fd = terminal.slave; - payload.exec_function = exec_function; - payload.exec_payload = exec_payload; -+#ifdef HAVE_ISULAD -+ payload.terminal = &terminal; -+#endif - - pid = lxc_raw_clone(CLONE_PARENT, NULL); - if (pid < 0) { -@@ -1697,9 +1793,9 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - _exit(EXIT_FAILURE); - } - -- if (options->attach_flags & LXC_ATTACH_TERMINAL) -+ if (options->attach_flags & LXC_ATTACH_TERMINAL) { - lxc_attach_terminal_close_slave(&terminal); -- -+ } - /* Tell grandparent the pid of the pid of the newly created child. */ - ret = lxc_write_nointr(ipc_sockets[1], &pid, sizeof(pid)); - if (ret != sizeof(pid)) { -diff --git a/src/lxc/attach_options.h b/src/lxc/attach_options.h -index d5d4f44..5767560 100644 ---- a/src/lxc/attach_options.h -+++ b/src/lxc/attach_options.h -@@ -121,6 +121,8 @@ typedef struct lxc_attach_options_t { - char *init_fifo[3]; /* isulad: default fifos for the start */ - int64_t timeout;/* isulad: Seconds for waiting on a container to attach/exec before it is killed*/ - const char *suffix; -+ bool disable_pty; -+ bool open_stdin; - } lxc_attach_options_t; - - /*! Default attach options to use */ -diff --git a/src/lxc/start.c b/src/lxc/start.c -index e099285..68a6116 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1789,6 +1789,7 @@ static int do_start(void *data) - * as it execs. - */ - #ifdef HAVE_ISULAD -+ close_prot_errno_disarm(status_fd); - handler->ops->start(handler, handler->data, handler->daemonize ? handler->conf->errpipe[1] : -1); - #else - handler->ops->start(handler, handler->data); -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index c0a4d1a..57def93 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -750,21 +750,23 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data, - return LXC_MAINLOOP_CONTINUE; - } else if (fd == terminal->pipes[1][0] || fd == terminal->pipes[2][0]) { - if (fd == terminal->pipes[1][0]) { -- w_log = isulad_lxc_terminal_write_log_file(terminal, "stdout", NULL, 0); -+ if (terminal->log_fd >= 0) { -+ w_log = isulad_lxc_terminal_write_log_file(terminal, "stdout", NULL, 0); -+ } - terminal->pipes[1][0] = -EBADF; - } else if (fd == terminal->pipes[2][0]) { -- w_log = isulad_lxc_terminal_write_log_file(terminal, "stderr", NULL, 0); -+ if (terminal->log_fd >= 0) { -+ w_log = isulad_lxc_terminal_write_log_file(terminal, "stderr", NULL, 0); -+ } - terminal->pipes[2][0] = -EBADF; - } -- if (w_log < 0) -- TRACE("Failed to write %d bytes to terminal log", r); - close(fd); -- return LXC_MAINLOOP_CONTINUE; -+ return LXC_MAINLOOP_CLOSE; - } else if (fd == terminal->pipes[0][1]) { - TRACE("closed stdin pipe of container stdin"); - terminal->pipes[0][1] = -EBADF; - close(fd); -- return LXC_MAINLOOP_CONTINUE; -+ return LXC_MAINLOOP_CLOSE; - } else { - ERROR("Handler received unexpected file descriptor"); - } -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index a855a8d..da7a7d2 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -82,6 +82,8 @@ static const struct option my_longopts[] = { - {"err-fifo", required_argument, 0, OPT_STDERR_FIFO}, - {"suffix", required_argument, 0, OPT_ATTACH_SUFFIX}, - {"timeout", required_argument, 0, OPT_ATTACH_TIMEOUT}, -+ {"disable-pty", no_argument, 0, OPT_DISABLE_PTY}, -+ {"open-stdin", no_argument, 0, OPT_OPEN_STDIN}, - #endif - LXC_COMMON_OPTIONS - }; -@@ -312,9 +314,14 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - } - args->attach_timeout = (unsigned int)atoll(arg); - break; -+ case OPT_DISABLE_PTY: -+ args->disable_pty = 1; -+ break; -+ case OPT_OPEN_STDIN: -+ args->open_stdin = 1; -+ break; - #endif - } -- - return 0; - } - -@@ -614,6 +621,14 @@ int main(int argc, char *argv[]) - - attach_options.suffix = my_args.suffix; - -+ if (my_args.disable_pty) { -+ attach_options.disable_pty = true; -+ } -+ -+ if (my_args.open_stdin) { -+ attach_options.open_stdin = true; -+ } -+ - /* isulad: add do attach background */ - if (attach_options.attach_flags & LXC_ATTACH_TERMINAL) - wexit = do_attach_foreground(c, &command, &attach_options, &errmsg); --- -1.8.3.1 - diff --git a/0054-start-do-not-check-pid-die-when-lxc_poll-exit.patch b/0054-start-do-not-check-pid-die-when-lxc_poll-exit.patch deleted file mode 100644 index 99681e0..0000000 --- a/0054-start-do-not-check-pid-die-when-lxc_poll-exit.patch +++ /dev/null @@ -1,31 +0,0 @@ -From d5558ec70cbc4949d0a411ec32278201fdc189db Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Wed, 22 Apr 2020 11:14:22 +0800 -Subject: [PATCH] start: do not check pid die when lxc_poll exit - -Signed-off-by: LiFeng ---- - src/lxc/start.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 68a6116..51d1325 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -2595,11 +2595,13 @@ int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, - goto out_delete_network; - } - -+#ifndef HAVE_ISULAD - if (!handler->init_died && handler->pid > 0) { - ERROR("Child process is not killed"); - ret = -1; - goto out_delete_network; - } -+#endif - - status = lxc_wait_for_pid_status(handler->pid); - if (status < 0) --- -1.8.3.1 - diff --git a/0055-terminal-not-close-pipe-when-lxc_poll-exit.patch b/0055-terminal-not-close-pipe-when-lxc_poll-exit.patch deleted file mode 100644 index daaee5e..0000000 --- a/0055-terminal-not-close-pipe-when-lxc_poll-exit.patch +++ /dev/null @@ -1,64 +0,0 @@ -From d0e0cc557dba264c4228e29edb178d57b25af2f5 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Wed, 22 Apr 2020 20:54:19 +0800 -Subject: [PATCH] terminal: not close pipe when lxc_poll exit - -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 4 +++- - src/lxc/terminal.c | 5 +++-- - src/lxc/tools/lxc_attach.c | 3 +++ - 3 files changed, 9 insertions(+), 3 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 5539fb1..51f5c08 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -1542,7 +1542,9 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - if (ret < 0) - goto on_error; - #ifdef HAVE_ISULAD -- (void)lxc_exec_cmd_mainloop_add(&descr, &exec_command); -+ if (suffix != NULL) { -+ (void)lxc_exec_cmd_mainloop_add(&descr, &exec_command); -+ } - #endif - TRACE("Initialized terminal mainloop"); - } -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 57def93..0197503 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -760,12 +760,13 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data, - } - terminal->pipes[2][0] = -EBADF; - } -- close(fd); -+ /* notes: do not close the master fd due to if we close the fd, the process may -+ * recive SIGHUP and the exit code will be 141 (128 + 13) -+ */ - return LXC_MAINLOOP_CLOSE; - } else if (fd == terminal->pipes[0][1]) { - TRACE("closed stdin pipe of container stdin"); - terminal->pipes[0][1] = -EBADF; -- close(fd); - return LXC_MAINLOOP_CLOSE; - } else { - ERROR("Handler received unexpected file descriptor"); -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index da7a7d2..190f3c8 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -417,6 +417,9 @@ static int do_attach_foreground(struct lxc_container *c, lxc_attach_command_t *c - signal = WTERMSIG(ret); - wexit = EXIT_SIGNAL_OFFSET + signal; - } -+ -+ ERROR("Execd pid %d exit with %d", pid, wexit); -+ - out: - if (c->lxc_conf->errmsg) - *errmsg = safe_strdup(c->lxc_conf->errmsg); --- -1.8.3.1 - diff --git a/0056-attach-add-sigfd-to-monitor-the-exit-of-pid.patch b/0056-attach-add-sigfd-to-monitor-the-exit-of-pid.patch deleted file mode 100644 index 71bb8f6..0000000 --- a/0056-attach-add-sigfd-to-monitor-the-exit-of-pid.patch +++ /dev/null @@ -1,178 +0,0 @@ -From cb3a7926948c4d9668d54521cb7907436723b67a Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Wed, 22 Apr 2020 23:30:23 +0800 -Subject: [PATCH] attach: add sigfd to monitor the exit of pid - -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++- - src/lxc/terminal.c | 4 +-- - 2 files changed, 87 insertions(+), 3 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 51f5c08..b25222e 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -1197,6 +1197,56 @@ static int create_attach_timeout_thread(int64_t attach_timeout, pid_t pid) - out: - return ret; - } -+ -+static int attach_signal_handler(int fd, uint32_t events, void *data, -+ struct lxc_epoll_descr *descr) -+{ -+ int ret; -+ siginfo_t info; -+ pid_t *pid = data; -+ -+ /* Check whether init is running. */ -+ info.si_pid = 0; -+ ret = waitid(P_PID, *pid, &info, WEXITED | WNOWAIT | WNOHANG); -+ if (ret == 0 && info.si_pid == *pid) { -+ return log_error(LXC_MAINLOOP_CLOSE, "Container attach init process %d exited", *pid); -+ } -+ -+ return LXC_MAINLOOP_CONTINUE; -+} -+ -+static int isulad_setup_signal_fd(sigset_t *oldmask) -+{ -+ int ret; -+ sigset_t mask; -+ const int signals[] = {SIGBUS, SIGILL, SIGSEGV, SIGWINCH}; -+ -+ /* Block everything except serious error signals. */ -+ ret = sigfillset(&mask); -+ if (ret < 0) -+ return -EBADF; -+ -+ for (int sig = 0; sig < (sizeof(signals) / sizeof(signals[0])); sig++) { -+ ret = sigdelset(&mask, signals[sig]); -+ if (ret < 0) -+ return -EBADF; -+ } -+ -+ ret = pthread_sigmask(SIG_BLOCK, &mask, oldmask); -+ if (ret < 0) -+ return log_error_errno(-EBADF, errno, -+ "Failed to set signal mask"); -+ -+ ret = signalfd(-1, &mask, SFD_CLOEXEC); -+ if (ret < 0) -+ return log_error_errno(-EBADF, -+ errno, "Failed to create signal file descriptor"); -+ -+ TRACE("Created signal file descriptor %d", ret); -+ -+ return ret; -+} -+ - int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - void *exec_payload, lxc_attach_options_t *options, - pid_t *attached_process, char **err_msg) -@@ -1471,6 +1521,11 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - int ret_parent = -1; - pid_t to_cleanup_pid = pid; - struct lxc_epoll_descr descr = {0}; -+#ifdef HAVE_ISULAD -+ int isulad_sigfd; -+ sigset_t isulad_oldmask; -+ struct lxc_epoll_descr isulad_descr = {0}; -+#endif - - /* close unneeded file descriptors */ - close(ipc_sockets[1]); -@@ -1541,7 +1596,12 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - ret = lxc_attach_terminal_mainloop_init(&terminal, &descr); - if (ret < 0) - goto on_error; -+ - #ifdef HAVE_ISULAD -+ ret = lxc_attach_terminal_mainloop_init(&terminal, &isulad_descr); -+ if (ret < 0) -+ goto on_error; -+ - if (suffix != NULL) { - (void)lxc_exec_cmd_mainloop_add(&descr, &exec_command); - } -@@ -1549,6 +1609,16 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - TRACE("Initialized terminal mainloop"); - } - -+#ifdef HAVE_ISULAD -+ /* The signal fd has to be created before forking otherwise if the child -+ * process exits before we setup the signal fd, the event will be lost -+ * and the command will be stuck. -+ */ -+ isulad_sigfd = isulad_setup_signal_fd(&isulad_oldmask); -+ if (isulad_sigfd < 0) -+ goto close_mainloop; -+#endif -+ - /* Let the child process know to go ahead. */ - status = 0; - ret = lxc_write_nointr(ipc_sockets[0], &status, sizeof(status)); -@@ -1637,6 +1707,7 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - /* isulad: read error msg from pipe */ - ssize_t size_read; - char errbuf[BUFSIZ + 1] = {0}; -+ pid_t tmp_pid = *attached_process; - - size_read = read(conf->errpipe[0], errbuf, BUFSIZ); - if (size_read > 0) { -@@ -1644,6 +1715,13 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - *err_msg = safe_strdup(errbuf); - goto close_mainloop; - } -+ if (options->attach_flags & LXC_ATTACH_TERMINAL) { -+ ret = lxc_mainloop_add_handler(&descr, isulad_sigfd, attach_signal_handler, &tmp_pid); -+ if (ret < 0) { -+ ERROR("Failed to add signal handler for %d to mainloop", tmp_pid); -+ goto close_mainloop; -+ } -+ } - #endif - - /* Now shut down communication with child, we're done. */ -@@ -1672,13 +1750,19 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, - } - - #ifdef HAVE_ISULAD -+ // do lxc_mainloop to make sure we do not lose any output -+ (void)lxc_mainloop(&isulad_descr, 100); - if (g_attach_timeout_state == ATTACH_TIMEOUT && err_msg != NULL && *err_msg == NULL) { - *err_msg = safe_strdup("Attach exceeded timeout"); - } - #endif - close_mainloop: -- if (options->attach_flags & LXC_ATTACH_TERMINAL) -+ if (options->attach_flags & LXC_ATTACH_TERMINAL) { -+#ifdef HAVE_ISULAD -+ lxc_mainloop_close(&isulad_descr); -+#endif - lxc_mainloop_close(&descr); -+ } - - on_error: - if (ipc_sockets[0] >= 0) { -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 0197503..e696b4e 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -763,11 +763,11 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data, - /* notes: do not close the master fd due to if we close the fd, the process may - * recive SIGHUP and the exit code will be 141 (128 + 13) - */ -- return LXC_MAINLOOP_CLOSE; -+ return LXC_MAINLOOP_CONTINUE; - } else if (fd == terminal->pipes[0][1]) { - TRACE("closed stdin pipe of container stdin"); - terminal->pipes[0][1] = -EBADF; -- return LXC_MAINLOOP_CLOSE; -+ return LXC_MAINLOOP_CONTINUE; - } else { - ERROR("Handler received unexpected file descriptor"); - } --- -1.8.3.1 - diff --git a/0057-attach-add-read-data-from-attach-sigfd.patch b/0057-attach-add-read-data-from-attach-sigfd.patch deleted file mode 100644 index e6a3e9c..0000000 --- a/0057-attach-add-read-data-from-attach-sigfd.patch +++ /dev/null @@ -1,34 +0,0 @@ -From a2097f947d40ff2da0b6ab47dbbc90a349ed33b9 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 23 Apr 2020 11:05:37 +0800 -Subject: [PATCH] attach: add read data from attach sigfd - -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index b25222e..068cc5f 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -1203,8 +1203,16 @@ static int attach_signal_handler(int fd, uint32_t events, void *data, - { - int ret; - siginfo_t info; -+ struct signalfd_siginfo siginfo; - pid_t *pid = data; - -+ ret = lxc_read_nointr(fd, &siginfo, sizeof(siginfo)); -+ if (ret < 0) -+ return log_error(LXC_MAINLOOP_ERROR, "Failed to read signal info from signal file descriptor %d", fd); -+ -+ if (ret != sizeof(siginfo)) -+ return log_error(LXC_MAINLOOP_ERROR, "Unexpected size for struct signalfd_siginfo"); -+ - /* Check whether init is running. */ - info.si_pid = 0; - ret = waitid(P_PID, *pid, &info, WEXITED | WNOWAIT | WNOHANG); --- -1.8.3.1 - diff --git a/0058-support-syslog-for-console.patch b/0058-support-syslog-for-console.patch deleted file mode 100644 index cab967e..0000000 --- a/0058-support-syslog-for-console.patch +++ /dev/null @@ -1,251 +0,0 @@ -From da93b4863324d200ffc69eb7eb87b686b47cc2ce Mon Sep 17 00:00:00 2001 -From: haozi007 -Date: Thu, 23 Apr 2020 19:46:22 +0800 -Subject: [PATCH] support syslog for console - -Signed-off-by: haozi007 ---- - src/lxc/confile.c | 109 +++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/terminal.c | 44 +++++++++++++++++- - src/lxc/terminal.h | 10 +++++ - 3 files changed, 162 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 771f6355..b1d101a9 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -155,6 +155,9 @@ lxc_config_define(umask); - lxc_config_define(rootfs_masked_paths); - lxc_config_define(rootfs_ro_paths); - lxc_config_define(systemd); -+lxc_config_define(console_log_driver); -+lxc_config_define(console_syslog_tag); -+lxc_config_define(console_syslog_facility); - #endif - - /* -@@ -276,6 +279,9 @@ static struct lxc_config_t config_jump_table[] = { - { "lxc.isulad.rootfs.maskedpaths", set_config_rootfs_masked_paths, get_config_rootfs_masked_paths, clr_config_rootfs_masked_paths, }, - { "lxc.isulad.rootfs.ropaths", set_config_rootfs_ro_paths, get_config_rootfs_ro_paths, clr_config_rootfs_ro_paths, }, - { "lxc.isulad.systemd", set_config_systemd, get_config_systemd, clr_config_systemd, }, -+ { "lxc.console.logdriver", set_config_console_log_driver, get_config_console_log_driver, clr_config_console_log_driver, }, -+ { "lxc.console.syslog_tag", set_config_console_syslog_tag, get_config_console_syslog_tag, clr_config_console_syslog_tag, }, -+ { "lxc.console.syslog_facility", set_config_console_syslog_facility, get_config_console_syslog_facility, clr_config_console_syslog_facility, }, - #endif - }; - -@@ -6617,4 +6623,107 @@ static inline int clr_config_systemd(const char *key, struct lxc_conf *c, - return 0; - } - -+static int set_config_console_log_driver(const char *key, const char *value, -+ struct lxc_conf *lxc_conf, void *data) -+{ -+ return set_config_string_item(&lxc_conf->console.log_driver, value); -+} -+ -+static int set_config_console_syslog_tag(const char *key, const char *value, -+ struct lxc_conf *lxc_conf, void *data) -+{ -+ char buf[16] = { 0 }; -+ -+ if (value == NULL) { -+ return -1; -+ } -+ (void)strlcpy(buf, value, 16); -+ return set_config_string_item(&lxc_conf->console.log_syslog_tag, buf); -+} -+ -+static int parse_facility(const char *facility) -+{ -+#define FACILITIES_LEN 20 -+ const char *facility_keys[FACILITIES_LEN] = { -+ "kern", "user", "mail", "daemon", "auth", -+ "syslog", "lpr", "news", "uucp", "cron", "authpriv", "ftp", -+ "local0", "local1", "local2", "local3", "local4", "local5", "local6", "local7" -+ }; -+ const int facilities[FACILITIES_LEN] = { -+ LOG_KERN, LOG_USER, LOG_MAIL, LOG_DAEMON, LOG_AUTH, LOG_SYSLOG, -+ LOG_LPR, LOG_NEWS, LOG_UUCP, LOG_CRON, LOG_AUTHPRIV, LOG_FTP, -+ LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3, LOG_LOCAL4, -+ LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7 -+ }; -+ int i = 0; -+ -+ if (facility == NULL) { -+ return -1; -+ } -+ -+ for (; i < FACILITIES_LEN; i++) { -+ if (strcmp(facility, facility_keys[i]) == 0) { -+ return facilities[i]; -+ } -+ } -+ -+ return -1; -+} -+ -+static int set_config_console_syslog_facility(const char *key, const char *value, -+ struct lxc_conf *lxc_conf, void *data) -+{ -+ int facility; -+ -+ facility = parse_facility(value); -+ if (facility < 0) { -+ NOTICE("Invalid facility: %s", value); -+ facility = LOG_DAEMON; -+ } -+ -+ lxc_conf->console.log_syslog_facility = facility; -+ return 0; -+} -+ -+static int get_config_console_log_driver(const char *key, char *retv, int inlen, -+ struct lxc_conf *c, void *data) -+{ -+ return lxc_get_conf_str(retv, inlen, c->console.log_driver); -+} -+ -+static int get_config_console_syslog_tag(const char *key, char *retv, int inlen, -+ struct lxc_conf *c, void *data) -+{ -+ return lxc_get_conf_str(retv, inlen, c->console.log_syslog_tag); -+} -+ -+static int get_config_console_syslog_facility(const char *key, char *retv, int inlen, -+ struct lxc_conf *c, void *data) -+{ -+ return lxc_get_conf_int(c, retv, inlen, c->console.log_syslog_facility); -+} -+ -+static inline int clr_config_console_log_driver(const char *key, -+ struct lxc_conf *c, void *data) -+{ -+ free(c->console.log_driver); -+ c->console.log_driver = NULL; -+ return 0; -+} -+ -+static inline int clr_config_console_syslog_tag(const char *key, -+ struct lxc_conf *c, void *data) -+{ -+ free(c->console.log_syslog_tag); -+ c->console.log_syslog_tag= NULL; -+ return 0; -+} -+ -+static inline int clr_config_console_syslog_facility(const char *key, -+ struct lxc_conf *c, void *data) -+{ -+ c->console.log_syslog_facility = LOG_DAEMON; -+ return 0; -+} -+ - #endif -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index e696b4e4..9b831dc2 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -30,6 +30,7 @@ - #include "utils.h" - #ifdef HAVE_ISULAD - #include "logger_json_file.h" -+#include "include/strlcpy.h" - #endif - - #if HAVE_PTY_H -@@ -535,7 +536,7 @@ static int isulad_lxc_terminal_rotate_write_data(struct lxc_terminal *terminal, - return bytes_read; - } - --static ssize_t isulad_logger_write(struct lxc_terminal *terminal, const char *type, const char *buf, -+static ssize_t isulad_logger_json_write(struct lxc_terminal *terminal, const char *type, const char *buf, - int bytes_read) - { - logger_json_file *msg = NULL; -@@ -579,6 +580,31 @@ cleanup: - return ret; - } - -+static ssize_t isulad_logger_syslog_write(struct lxc_terminal *terminal, const char *buf) -+{ -+ syslog(LOG_INFO, "%s", buf); -+ return 0; -+} -+ -+static inline bool is_syslog(const char *driver) -+{ -+ if (driver == NULL) { -+ return false; -+ } -+ -+ return (strcmp("syslog", driver) == 0); -+} -+ -+static inline ssize_t isulad_logger_write(struct lxc_terminal *terminal, const char *type, const char *buf, -+ int bytes_read) -+{ -+ if (is_syslog(terminal->log_driver)) { -+ return isulad_logger_syslog_write(terminal, buf); -+ } -+ -+ return isulad_logger_json_write(terminal, type, buf, bytes_read); -+} -+ - static int isulad_lxc_terminal_write_log_file(struct lxc_terminal *terminal, const char *type, char *buf, - int bytes_read) - { -@@ -1385,6 +1411,10 @@ void lxc_terminal_delete(struct lxc_terminal *terminal) - terminal->log_fd = -1; - - #ifdef HAVE_ISULAD -+ if (is_syslog(terminal->log_driver)) { -+ closelog(); -+ free(terminal->log_driver); -+ } - /* isulad: close all pipes */ - if (terminal->pipes[0][0] >= 0) - close(terminal->pipes[0][0]); -@@ -1776,6 +1806,18 @@ int lxc_terminal_setup(struct lxc_conf *conf) - if (ret < 0) - return -1; - -+#ifdef HAVE_ISULAD -+ if (is_syslog(terminal->log_driver)) { -+ if (terminal->log_syslog_tag == NULL) { -+ terminal->log_syslog_tag = malloc(16 * sizeof(char)); -+ (void)strlcpy(terminal->log_syslog_tag, conf->name, 16); -+ } -+ if (terminal->log_syslog_facility <= 0) { -+ terminal->log_syslog_facility = LOG_DAEMON; -+ } -+ openlog(terminal->log_syslog_tag, LOG_PID, terminal->log_syslog_facility); -+ } -+#endif - ret = lxc_terminal_create_log_file(terminal); - if (ret < 0) - goto err; -diff --git a/src/lxc/terminal.h b/src/lxc/terminal.h -index f49142dc..9de4cd05 100644 ---- a/src/lxc/terminal.h -+++ b/src/lxc/terminal.h -@@ -79,6 +79,16 @@ struct lxc_terminal { - - /* whether the log file will be rotated */ - unsigned int log_rotate; -+#ifdef HAVE_ISULAD -+ /* driver of log, support file and syslog */ -+ char *log_driver; -+ -+ /* syslog tag for every log */ -+ char *log_syslog_tag; -+ -+ /* syslog facility */ -+ int log_syslog_facility; -+#endif - }; - - struct /* lxc_terminal_ringbuf */ { --- -2.25.3 - diff --git a/0059-set-state-to-stopped.patch b/0059-set-state-to-stopped.patch deleted file mode 100644 index 184fc05..0000000 --- a/0059-set-state-to-stopped.patch +++ /dev/null @@ -1,29 +0,0 @@ -From cdaabd27b2d3d091007d816d396c0b55301f2a42 Mon Sep 17 00:00:00 2001 -From: haozi007 -Date: Mon, 27 Apr 2020 10:54:37 +0800 -Subject: [PATCH] set state to stopped - -if send cmd to lxc-monitor timeout - -Signed-off-by: haozi007 ---- - src/lxc/commands.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/src/lxc/commands.c b/src/lxc/commands.c -index c32aef19..37354e87 100644 ---- a/src/lxc/commands.c -+++ b/src/lxc/commands.c -@@ -122,6 +122,9 @@ static int lxc_cmd_rsp_recv(int sock, struct lxc_cmd_rr *cmd) - #ifdef HAVE_ISULAD - /*isulad: add timeout 1s to avoid long block due to [lxc monitor] error*/ - ret = lxc_abstract_unix_recv_fds_timeout(sock, &fd_rsp, 1, rsp, sizeof(*rsp), 1000 * 1000); -+ if (ret < 0 && (errno == ECONNRESET || errno == EAGAIN || errno == EWOULDBLOCK)) { -+ errno = ECONNRESET; /*isulad set errno ECONNRESET when timeout */ -+ } - #else - ret = lxc_abstract_unix_recv_fds(sock, &fd_rsp, 1, rsp, sizeof(*rsp)); - #endif --- -2.25.3 - diff --git a/0060-attach-append-error-msg-when-call-attach-failed.patch b/0060-attach-append-error-msg-when-call-attach-failed.patch deleted file mode 100644 index 838da34..0000000 --- a/0060-attach-append-error-msg-when-call-attach-failed.patch +++ /dev/null @@ -1,49 +0,0 @@ -From de512a0c11bff1bfc8f0045e144bddc689742a21 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 30 Apr 2020 16:40:14 +0800 -Subject: [PATCH] attach: append error msg when call attach failed - -Signed-off-by: LiFeng ---- - src/lxc/tools/lxc_attach.c | 13 ++++++++++--- - 1 file changed, 10 insertions(+), 3 deletions(-) - -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index 190f3c8..dbddc2a 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -401,12 +401,17 @@ static int do_attach_foreground(struct lxc_container *c, lxc_attach_command_t *c - ret = c->attach(c, lxc_attach_run_command, command, attach_options, &pid); - else - ret = c->attach(c, lxc_attach_run_shell, NULL, attach_options, &pid); -- if (ret < 0) -+ if (ret < 0) { -+ *errmsg = safe_strdup("Internal error, failed to call attach"); - goto out; -+ } - - ret = lxc_wait_for_pid_status(pid); -- if (ret < 0) -+ if (ret < 0) { -+ free(*errmsg); -+ *errmsg = safe_strdup("Internal error, failed to wait attached process"); - goto out; -+ } - - if (WIFEXITED(ret)) - wexit = WEXITSTATUS(ret); -@@ -421,8 +426,10 @@ static int do_attach_foreground(struct lxc_container *c, lxc_attach_command_t *c - ERROR("Execd pid %d exit with %d", pid, wexit); - - out: -- if (c->lxc_conf->errmsg) -+ if (c->lxc_conf->errmsg) { -+ free(*errmsg); - *errmsg = safe_strdup(c->lxc_conf->errmsg); -+ } - return wexit; - } - --- -1.8.3.1 - diff --git a/0061-mount-fix-symlink-error-use-parsed-path.patch b/0061-mount-fix-symlink-error-use-parsed-path.patch deleted file mode 100644 index 267d6ae..0000000 --- a/0061-mount-fix-symlink-error-use-parsed-path.patch +++ /dev/null @@ -1,41 +0,0 @@ -From ac457309669377f9094936978ee695d6503fafc4 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 30 Apr 2020 19:20:18 +0800 -Subject: [PATCH] mount: fix symlink error, use parsed path - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index e8568d8..ad32725 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -2592,6 +2592,9 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - dev = hasmntopt(mntent, "dev") != NULL; - relative = hasmntopt(mntent, "relative") != NULL; - -+ if (rootfs && rootfs->path) -+ rootfs_path = rootfs->mount; -+ - #ifdef HAVE_ISULAD - // isulad: ensure that the destination of the bind mount is resolved of symlinks at mount time because - // any previous mounts can invalidate the next mount's destination. -@@ -2616,12 +2619,9 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - return -1; - } - } --#else -- if (rootfs && rootfs->path) -- rootfs_path = rootfs->mount; - #endif - -- ret = mount_entry_create_dir_file(mntent, path, rootfs, lxc_name, -+ ret = mount_entry_create_dir_file(mntent, dest, rootfs, lxc_name, - lxc_path); - if (ret < 0) { - #ifdef HAVE_ISULAD --- -1.8.3.1 - diff --git a/0062-change-log-level-of-seccomp-setup.patch b/0062-change-log-level-of-seccomp-setup.patch deleted file mode 100644 index db3799f..0000000 --- a/0062-change-log-level-of-seccomp-setup.patch +++ /dev/null @@ -1,113 +0,0 @@ -From a7370435ac0591b5e2e4059b1aadd546bc92dae4 Mon Sep 17 00:00:00 2001 -From: haozi007 -Date: Wed, 6 May 2020 23:22:22 -0400 -Subject: [PATCH] change log level of seccomp setup - -Signed-off-by: haozi007 ---- - src/lxc/seccomp.c | 32 ++++++++++++++++++++++++++++++++ - 1 file changed, 32 insertions(+) - -diff --git a/src/lxc/seccomp.c b/src/lxc/seccomp.c -index b7c4de36..4b9d23c5 100644 ---- a/src/lxc/seccomp.c -+++ b/src/lxc/seccomp.c -@@ -562,7 +562,11 @@ bool do_resolve_add_rule(uint32_t arch, char *line, scmp_filter_ctx ctx, - - memset(&arg_cmp, 0, sizeof(arg_cmp)); - for (i = 0; i < rule->args_num; i++) { -+#ifdef HAVE_ISULAD -+ DEBUG("arg_cmp[%d]: SCMP_CMP(%u, %llu, %llu, %llu)", i, -+#else - INFO("arg_cmp[%d]: SCMP_CMP(%u, %llu, %llu, %llu)", i, -+#endif - rule->args_value[i].index, - (long long unsigned int)rule->args_value[i].op, - (long long unsigned int)rule->args_value[i].mask, -@@ -809,7 +813,11 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - - remove_trailing_newlines(line); - -+#ifdef HAVE_ISULAD -+ DEBUG("Processing \"%s\"", line); -+#else - INFO("Processing \"%s\"", line); -+#endif - if (line[0] == '[') { - /* Read the architecture for next set of rules. */ - if (strcmp(line, "[x86]") == 0 || -@@ -987,7 +995,11 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - conf->seccomp.seccomp_ctx, &rule)) - goto bad_rule; - -+#ifdef HAVE_ISULAD -+ DEBUG("Added native rule for arch %d for %s action %d(%s)", -+#else - INFO("Added native rule for arch %d for %s action %d(%s)", -+#endif - SCMP_ARCH_NATIVE, line, rule.action, - get_action_name(rule.action)); - } else if (cur_rule_arch != lxc_seccomp_arch_all) { -@@ -1000,7 +1012,11 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - ctx.contexts[arch_index], &rule)) - goto bad_rule; - -+#ifdef HAVE_ISULAD -+ DEBUG("Added compat rule for arch %d for %s action %d(%s)", -+#else - INFO("Added compat rule for arch %d for %s action %d(%s)", -+#endif - ctx.architectures[arch_index], line, rule.action, - get_action_name(rule.action)); - ctx.needs_merge[arch_index] = true; -@@ -1010,7 +1026,11 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - conf->seccomp.seccomp_ctx, &rule)) - goto bad_rule; - -+#ifdef HAVE_ISULAD -+ DEBUG("Added native rule for arch %d for %s action %d(%s)", -+#else - INFO("Added native rule for arch %d for %s action %d(%s)", -+#endif - SCMP_ARCH_NATIVE, line, rule.action, - get_action_name(rule.action)); - -@@ -1019,7 +1039,11 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - ctx.contexts[0], &rule)) - goto bad_rule; - -+#ifdef HAVE_ISULAD -+ DEBUG("Added compat rule for arch %d for %s action %d(%s)", -+#else - INFO("Added compat rule for arch %d for %s action %d(%s)", -+#endif - ctx.architectures[0], line, rule.action, - get_action_name(rule.action)); - ctx.needs_merge[0] = true; -@@ -1030,7 +1054,11 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - ctx.contexts[1], &rule)) - goto bad_rule; - -+#ifdef HAVE_ISULAD -+ DEBUG("Added compat rule for arch %d for %s action %d(%s)", -+#else - INFO("Added compat rule for arch %d for %s action %d(%s)", -+#endif - ctx.architectures[1], line, rule.action, - get_action_name(rule.action)); - ctx.needs_merge[1] = true; -@@ -1041,7 +1069,11 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - ctx.contexts[2], &rule)) - goto bad_rule; - -+#ifdef HAVE_ISULAD -+ DEBUG("Added native rule for arch %d for %s action %d(%s)", -+#else - INFO("Added native rule for arch %d for %s action %d(%s)", -+#endif - ctx.architectures[2], line, rule.action, - get_action_name(rule.action)); - ctx.needs_merge[2] = true; --- -2.26.2 - diff --git a/0063-hook-fix-memeory-leak.patch b/0063-hook-fix-memeory-leak.patch deleted file mode 100644 index 3572b07..0000000 --- a/0063-hook-fix-memeory-leak.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 5cff3f195151267b65c88c1412aa9553fa1e0510 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 11 May 2020 12:14:30 +0800 -Subject: [PATCH] hook: fix memeory leak - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index ad32725..f46255a 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -5447,6 +5447,9 @@ void lxc_conf_free(struct lxc_conf *conf) - lxc_clear_rootfs_ro_paths(conf); - free(conf->errmsg); - lxc_close_error_pipe(conf->errpipe); -+ if (conf->ocihooks) { -+ free_oci_runtime_spec_hooks(conf->ocihooks); -+ } - #endif - free(conf); - } --- -1.8.3.1 - diff --git a/0064-termainal-fix-console-log-memory-leak.patch b/0064-termainal-fix-console-log-memory-leak.patch deleted file mode 100644 index 148de7b..0000000 --- a/0064-termainal-fix-console-log-memory-leak.patch +++ /dev/null @@ -1,26 +0,0 @@ -From c08e50a792a088715e6752e5f93f8dff65f7cf27 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 11 May 2020 14:00:17 +0800 -Subject: [PATCH] termainal: fix console log memory leak - -Signed-off-by: LiFeng ---- - src/lxc/terminal.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 9b831dc..3d2960b 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -2114,6 +2114,8 @@ void lxc_terminal_conf_free(struct lxc_terminal *terminal) - free(terminal->init_fifo[1]); - free(terminal->init_fifo[2]); - lxc_terminal_delete_fifo(-1, &terminal->fifos); -+ free(terminal->log_driver); -+ free(terminal->log_syslog_tag); - #endif - } - --- -1.8.3.1 - diff --git a/0065-lxc-disable-terminal-stdout-stderr-pipe-O_NONBLOCK.patch b/0065-lxc-disable-terminal-stdout-stderr-pipe-O_NONBLOCK.patch deleted file mode 100644 index 98e9e92..0000000 --- a/0065-lxc-disable-terminal-stdout-stderr-pipe-O_NONBLOCK.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 8c232b149654907867c12f10d801769f66d3500c Mon Sep 17 00:00:00 2001 -From: gaohuatao -Date: Wed, 13 May 2020 23:19:25 -0400 -Subject: [PATCH] lxc: disable terminal stdout/stderr pipe O_NONBLOCK - -Signed-off-by: gaohuatao ---- - src/lxc/terminal.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 3d2960be..7441de79 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -1668,12 +1668,12 @@ int lxc_terminal_create(struct lxc_terminal *terminal) - goto err; - } - /* for stdout */ -- if (pipe2(terminal->pipes[1], O_NONBLOCK | O_CLOEXEC)) { -+ if (pipe2(terminal->pipes[1], O_CLOEXEC)) { - ERROR("Failed to create stdout pipe"); - goto err; - } - /* for stderr */ -- if (pipe2(terminal->pipes[2], O_NONBLOCK | O_CLOEXEC)) { -+ if (pipe2(terminal->pipes[2], O_CLOEXEC)) { - ERROR("Failed to create stderr pipe"); - goto err; - } --- -2.19.1 - diff --git a/0066-lxc-fix-tests-build-error.patch b/0066-lxc-fix-tests-build-error.patch deleted file mode 100644 index dd19a67..0000000 --- a/0066-lxc-fix-tests-build-error.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 0bd5b0420aba3a8fb20c686db49a842a7a1eee4f Mon Sep 17 00:00:00 2001 -From: lifeng68 -Date: Tue, 19 May 2020 06:25:10 -0400 -Subject: [PATCH] lxc: fix tests build error - -Signed-off-by: lifeng68 ---- - src/tests/Makefile.am | 4 ++++ - src/tests/attach.c | 9 +++++++++ - 2 files changed, 13 insertions(+) - -diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am -index 493b33c9d..59905d326 100644 ---- a/src/tests/Makefile.am -+++ b/src/tests/Makefile.am -@@ -58,6 +58,10 @@ AM_CFLAGS=-DLXCROOTFSMOUNT=\"$(LXCROOTFSMOUNT)\" \ - -I $(top_srcdir)/src/lxc/tools \ - -pthread - -+if HAVE_ISULAD -+AM_CFLAGS += -I $(top_srcdir)/src/lxc/json -+endif -+ - if ENABLE_APPARMOR - AM_CFLAGS += -DHAVE_APPARMOR - endif -diff --git a/src/tests/attach.c b/src/tests/attach.c -index 07e641d56..acb4c89f4 100644 ---- a/src/tests/attach.c -+++ b/src/tests/attach.c -@@ -29,6 +29,7 @@ - #include "lxctest.h" - #include "utils.h" - #include "lsm/lsm.h" -+#include "config.h" - - #include - -@@ -76,7 +77,11 @@ static void test_attach_lsm_set_config(struct lxc_container *ct) - ct->save_config(ct, NULL); - } - -+#ifdef HAVE_ISULAD -+static int test_attach_lsm_func_func(void* payload, int fd) -+#else - static int test_attach_lsm_func_func(void* payload) -+#endif - { - TSTOUT("%s", lsm_process_label_get(syscall(SYS_getpid))); - return 0; -@@ -187,7 +192,11 @@ static int test_attach_lsm_func(struct lxc_container *ct) { return 0; } - static int test_attach_lsm_cmd(struct lxc_container *ct) { return 0; } - #endif /* HAVE_APPARMOR || HAVE_SELINUX */ - -+#ifdef HAVE_ISULAD -+static int test_attach_func_func(void* payload, int fd) -+#else - static int test_attach_func_func(void* payload) -+#endif - { - TSTOUT("%d", (int)syscall(SYS_getpid)); - return 0; --- -2.18.2 - diff --git a/0067-set-normal-ret-value-when-populate-exist-device-successfully.patch b/0067-set-normal-ret-value-when-populate-exist-device-successfully.patch deleted file mode 100644 index 12e7932..0000000 --- a/0067-set-normal-ret-value-when-populate-exist-device-successfully.patch +++ /dev/null @@ -1,25 +0,0 @@ -From e57686a8b94905829fc295981bc8d0a1253f186b Mon Sep 17 00:00:00 2001 -From: wangkang -Date: Fri, 22 May 2020 10:00:00 +0800 -Subject: [PATCH] lxc: set normal ret value when populate exist device - successfully - ---- - src/lxc/conf.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index f46255a4..6890da12 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4108,6 +4108,7 @@ static int setup_populate_devs(const struct lxc_rootfs *rootfs, struct lxc_list - ret = -1; - goto reset_umask; - } -+ ret = 0; - } - - reset_umask: --- -2.18.2 - diff --git a/0068-lxc-config-default-cgroup-pattern-to-lxc-n.patch b/0068-lxc-config-default-cgroup-pattern-to-lxc-n.patch deleted file mode 100644 index 58f931e..0000000 --- a/0068-lxc-config-default-cgroup-pattern-to-lxc-n.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 05ab7596df7f6c4b10401d4a9006f391176d3898 Mon Sep 17 00:00:00 2001 -From: lifeng68 -Date: Wed, 27 May 2020 17:13:25 +0800 -Subject: [PATCH] lxc: config default cgroup pattern to lxc%n - -Signed-off-by: lifeng68 ---- - configure.ac | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index 438d2923..3e86431d 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -496,7 +496,7 @@ AC_ARG_WITH([rootfs-path], - # cgroup pattern specification - AC_ARG_WITH([cgroup-pattern], - [AS_HELP_STRING([--with-cgroup-pattern=pattern], [pattern for container cgroups])], -- [with_cgroup_pattern=$withval], [with_cgroup_pattern=['']]) -+ [with_cgroup_pattern=$withval], [with_cgroup_pattern=['lxc/%n']]) - - # The path for the apparmor_parser's cache for generated apparmor profiles - AC_ARG_WITH([apparmor-cache-dir], --- -2.20.1 - diff --git a/0069-rootfs-support-use-host-rootfs-as-container-rootfs.patch b/0069-rootfs-support-use-host-rootfs-as-container-rootfs.patch deleted file mode 100644 index 2bb91d0..0000000 --- a/0069-rootfs-support-use-host-rootfs-as-container-rootfs.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 25a47f44f377e20b2939679f7df79c333627c97a Mon Sep 17 00:00:00 2001 -From: lifeng68 -Date: Wed, 24 Jun 2020 17:07:50 +0800 -Subject: [PATCH] rootfs: support use host rootfs / as container rootfs - -Signed-off-by: lifeng68 ---- - src/lxc/conf.c | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 6890da12..0744c19b 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -1367,7 +1367,7 @@ static int lxc_mount_rootfs(struct lxc_conf *conf) - { - int ret; - struct lxc_storage *bdev; -- const struct lxc_rootfs *rootfs = &conf->rootfs; -+ struct lxc_rootfs *rootfs = &conf->rootfs; - - #ifdef HAVE_ISULAD - unsigned long flags, mntflags, pflags; -@@ -1378,6 +1378,14 @@ static int lxc_mount_rootfs(struct lxc_conf *conf) - ret = mount("", "/", NULL, MS_SLAVE | MS_REC, 0); - if (ret < 0) - return log_error_errno(-1, errno, "Failed to remount \"/\" MS_REC | MS_SLAVE"); -+#ifdef HAVE_ISULAD -+ if (!access(rootfs->mount, F_OK)) { -+ rootfs->path = safe_strdup("/"); -+ if (mount("/", rootfs->mount, NULL, MS_BIND, 0)) { -+ return log_error_errno(-1, errno, "Failed to mount \"/\" to %s", rootfs->mount); -+ } -+ } -+#endif - - return 0; - } --- -2.25.1 - diff --git a/0070-freeze-do-not-communicate-to-lxc-parent-when-unpause.patch b/0070-freeze-do-not-communicate-to-lxc-parent-when-unpause.patch deleted file mode 100644 index 6c7c124..0000000 --- a/0070-freeze-do-not-communicate-to-lxc-parent-when-unpause.patch +++ /dev/null @@ -1,72 +0,0 @@ -From e0387970de1ba7517dcfe88f32297775d90126f5 Mon Sep 17 00:00:00 2001 -From: lifeng68 -Date: Fri, 10 Jul 2020 11:51:20 +0800 -Subject: [PATCH 2/2] freeze: do not communicate to lxc parent when unpause - -Signed-off-by: lifeng68 ---- - src/lxc/lxccontainer.c | 31 +++++++++++++++++++++++++++++++ - 1 file changed, 31 insertions(+) - -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 6281a8a72..eef98df67 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -516,6 +516,20 @@ static bool do_lxcapi_is_running(struct lxc_container *c) - - WRAP_API(bool, lxcapi_is_running) - -+#ifdef HAVE_ISULAD -+static bool do_lxcapi_freeze(struct lxc_container *c) -+{ -+ if (!c || !c->lxc_conf) { -+ return false; -+ } -+ -+ if (lxc_freeze(c->lxc_conf, c->name, c->config_path) < 0) { -+ return false; -+ } -+ -+ return true; -+} -+#else - static bool do_lxcapi_freeze(struct lxc_container *c) - { - lxc_state_t s; -@@ -529,9 +543,25 @@ static bool do_lxcapi_freeze(struct lxc_container *c) - - return true; - } -+#endif -+ - - WRAP_API(bool, lxcapi_freeze) - -+#ifdef HAVE_ISULAD -+static bool do_lxcapi_unfreeze(struct lxc_container *c) -+{ -+ if (!c || !c->lxc_conf) { -+ return false; -+ } -+ -+ if (lxc_unfreeze(c->lxc_conf, c->name, c->config_path) < 0) { -+ return false; -+ } -+ -+ return true; -+} -+#else - static bool do_lxcapi_unfreeze(struct lxc_container *c) - { - lxc_state_t s; -@@ -545,6 +575,7 @@ static bool do_lxcapi_unfreeze(struct lxc_container *c) - - return true; - } -+#endif - - WRAP_API(bool, lxcapi_unfreeze) - --- -2.25.1 - diff --git a/apply-patches b/apply-patches index eb98055..f866a3f 100755 --- a/apply-patches +++ b/apply-patches @@ -16,9 +16,9 @@ set -ex -pkg=lxc-4.0.1 +pkg=lxc-4.0.3 cwd=$PWD -src=$cwd/lxc-4.0.1 +src=$cwd/lxc-4.0.3 tar -xzvf $pkg.tar.gz diff --git a/lxc-4.0.1.tar.gz b/lxc-4.0.1.tar.gz deleted file mode 100644 index e8b8d4ddd06a9b512cbc4c47ecd7599c6e58571f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1352119 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±&DCD{G$@q{V<3L8DAfGsct` zhn!s`g$$;L*YGRA)BdpmD+1Qq_$|M#mgo)ajRyP6Uy@SkJhK}*E2Q-{3p*}@1&vV) zvse019V$I_BrVFxnEJTe)22~+CMzM}6AMk%Zv5pMs7dmigm4D9p^NW>!-HKik)|ZN z$rnO>pC^H=vG1Y<#v5_{1%eM83`K5R;nWfh#9Df{*?7mleQ4HdJG;+Mx~(0$N$2*s z{U7P%G4jrX^Z$*y^gUL;UUh3iRPm5-Ht2T!@Y(-6L8(K(=J%-n4XhkDWY3@Cj4iUY zHaq4bHVQy!-a%J+d`oD&!j<5R@X6AxypVT?ZD9dVhlei6LA}PSUc1xoY{J)e(CCOS z=l=^|o4l~sJu{6Ipg~-eqF)?W{fyeQ-eyOkJ3(U_-kY7hV>mJO*SM<8qsswlYj`Ce)5(23Vc- z8t+tXAE+-d0Gg#p-3A>O!PlFBU=%cKBvpuJ5#0%>T5bQ-NRCy;9B+w8guirsH*`>h z=2x@Wc@WU(b*rNte+mq_D&aA#yV8$8oN+%I!NIRT@rK53u*iNyyQym@!~+9hKM&w= z61qeOM|(SRdq))vGtlU7A!>?YRlXj_8A&rCnZ~DW<<9OA0ezt79hoeG{GhcgWq1P<1t)A+`ydkc>IBoPlVyqT z!cmrS+Xh(tuc9fifm?oz9lMUt&s$?>5C&A9j^m#HHhANbT0x>6-L^A^Ic6uYqZbaI z_$J%i_Rg3^s&&eM{pg(|roOZLY;Wtp-Zi~IwT@|!AH7>Udnc#Ihy7R2ULBmivUkiZ zQmtzS>__k1-of5!|781k?+8Bree#pNf0m7M#Dk0>ek|u6UGue6)4?qrIO-iE16xK|fW`b`H0n9UlIxuy3-=T)h*( zAH9FCPE_6NukGD4i&X2K0sE;YZ|i6e8*x%Nd#cb}(Tyyvd`?ULd>*dk@Zt*Um3eD9! z3H{N#`0~~1?rS`~y?XIt@8E^Ki|Inux|o9gRI^A|b44>q1?HMPg#1+9Iz2qxFQ!ah zVy=!6=qF<(hc91l9qbf$P8FJusR-y#CY+t*sblm4^9f}qpFkZW>VEZXR=;?OxjIIm zpKP`5o}A8DZB$~u)rO#-G*N^Y)kEed(fq=U^;2vZ6EBR>{q6-lDY{$XL zLa=Qa7B-m1lPP%*9!>`wxq9QXDqTR3i)Z(IdU*+bRsI^NgcqfPL3rdFg2!EH*J=dT zCFjmGYf)c#XfVPchX>-}FffKCcRWScD^Pqn?@ceh;#8&J z$HA-p{q2`K-3@w9cNDsFE5hJ$zYn1k-XhIGe}Pn-OSjF~ju+9>O-__RiR5zw7}UrE_R+dzO@*=9ZQ^H> z9$v@6BxVPP{TKU(&-y2?o}HY^S5)+-mYg=QR{7P?M$xS*v*Y7rKO-WglP{U#Jd>RFZVOSFu#pEt^5IPb1aybb`P6&PcAJ&;h zVdvcQJLGKnqFobwqDxQfKf=GJs!_72S)Y{w6d;k$1%}FGZ_v93xw?_A$B0^1`zg^Sa_3v6VZx5FRkc^<&Ws9ZSI_8S0>g)Lt7(t z;nW)!34bj6`i#3MZ=t7UwFjJ$*WcIjXWgJFeMjY!sG(>k>3u)R@hOV}9hengu&<*# zRf`CEzO7o!Q4bB(yZqN@OGJ&+!Fh+aDqtk=e_5xwdU$)ZZ2hgKtnWM+-gcYhS|fwG z-dN+VG3reN2HKb|+teSHTX4hL3vqDP>I|fY*V3^>8nFf@XuTO|6 zxv!}9at#u@AjQ`gB!QB*aOn0mtYP%86ygrQ9|Uit8zvBNu8{j&yV5fd`j<*x=11t?^a*gs)NBnt$o_I=`;4WtNnJd|F^Dlt>X5uzd~qv&rb2Igi|R zLez)K5i#Y~$XOE=)^NxmeYBZy2$HP$*Dim9&P#-G348VP-T{g)%RtW0VATm68W0Q`2_Wn3CtRv#bvQ-v2Gwy< zO(%dXiqJ)Zf6MA8?j?q@prZog9s^ahJmLXRQ*&vl3CjeQC^80Msh1>1L4CwchA2;c z*IsY0J#9;37Jjox;@Lg;iQ#`QxAykwkDzew_loA|1`bUP4n`aqCl*HyXVh>8ild!26t(3bh6fMHel;II$7^Ff1ocw7I#WbW71R^|c5QT#D5^u6`AvbeT|p`0q-Kx_N+if$99D<3 z{Di>{2b58#(=&G+7Q;zS(G6k}?ZYD9BmsZ44m8#z<2D+PDM_>WqWx*>INNAEU~(Un zw@ek2P2dTl4btJ?TH@<(ZSzBo)Nb^4!&5e(L#Ill5aeBoR>`N6>!>!xw-XPY_5MC}hN$`*NCdcZ zxja^z?|5&qZRGw_?O+iJ3QIJ;bp9frm0u+((t{9`9FY)FpWGp~*IRe3LB=*b^pL%oRY0@L<7T6bI;z;j7 z%w2_a!{Yu{EEiElCa~G{}-qdG{CZ-4Z!2Z91|Dafxm7E$HC~cs5 zC%TBN0mAvRZFX{C#PPZD&&0hV=+L|LVyOSg+WNOozx)1w{`xnGgdC?z6#E7W4pgh{ zZvS}L-|jN{JP@C!;&gu|b%ZxUNss?(EuVbBY9*RCx4l6V%ivLe0Ec~nrn%7E++0`` zKe>x){}L}2oO6nyNdt;!^_$ye#zbS9fJ|x)fVp7}ydF4P{q?VO)Pnig+I!8uZ?B!P zADH1(4*%)Z*Mw?svqsGp9c{M!raZ}O4k#N9@zHi~T=^A`w2AV1D3f9BsYR+|z>JO# zDwb=y3?z-;prRv5G92XbWBU^I{09x6UF8f#M?PysdZT5RY~{J64^m&ZNpM_+xyaBb z;5k3agj^L7UkB_mh+(>-4N(YAnuk7ndGc?NKhFc$JI;9BJamT_HfdMG#3Tjp?Aii; zeVOh2zZXYG?C*Fsf6A`#5*yB4w_}Vg8f^-EO@23v$8&ZaqDT-j9s~ooQHgBN=WRfO zjL5tBmGhR=b;3g^emxsZSZi|JooM15oHM0DM5z`7FC#OZ zICz^KA;J3Y0JSUOtvnit3i#omraA5w`arr2XmMpCY56)LQ!R6)7947gK?TWMA<)Sx zAWg|SkP>z2$MqEs&4zLipVI`okLWddLw=`S-aM%CYPmC2<)2&n=*CM2w%F9%o=Yrx zZ&F^^Wi#u|hA7>X&5G(q8QvC6>d*&569AHAzKge4a36;Kzq6t?<&-R70-!*ErHV@w zA($;UXl>VJ2d%j%3?vOMCqoDc0wHF}23qlwh^vVkeCDz=t7)T!J~}CvsJx?uxa)i~ z(P`pC;u<@(95R+hT)``>P7>9>gaIayr~xD!fECQ^Y)#B5G}O?%aJQ+7s)ndjh-_lJ z1KH4V&W`Yxi6fD6HQkBa4q#0`-`n3UROXywMbK<4NEc(iwx7T;@NznWb1<^RL|>xe z7di{xT-2klX;xl0^xM#uB%p{5i}i21O;McR_iJUk7BEsk@$(^YN)ZfY>`X8|4Yy3H%al+hq&`znLJk(W*;?4yg zfC(9PWi6vFPnQFEs3??&uaA~dXNgd zV#I3(%3i70>L4|sw)7@b058wIi+GczLq9iG)PX0B`3hzlBLf%U7DX)BMUIX?kHU)x zoJX|g8Z{%76cW)GszCKxyH*^{x?W2)s-EqFDnn-tqXea>{KA-G#ynMB&fH* zUafb=7e$jh^!HZT)hxVb+6pfL>$(+0T!7WV(Kc_YtmfP}z3nRy*v`m1_;@l05U}=1G zgo#9CV#9wjTAEh30h+4+cdY;SsfWfHtroX&RY5wmf8zF;BP3Hf99_YvBg8aB1Y}Ap zAux27h^B@U7?3F@pA6Yn843;l@!)xqf1YC?Hra5pRN?yV2-%CW=}r(K+Aea!Up7v6 zUmopmo$mf>>xVYAoP3O7C9Y0lmc+{!)!i|3JREmzJ5y=2QETW6JzYku?WB}QNSC7( zo|K}W=`wPOC&gq+t#-_}Q8F(O3vA*H-r%)>xDpQA32Ug#203HkwRY>N_#Db&yYGaT zkvv~w&@D6!>HhC=V#x+#|w@-hv z%8EDT)f(e>ky03d`g;w%50HSPJGmv>Gq$u1+uoD4b@n`TU3L;&#Mj79o}-D2SbTf_ zpv@%+vxVY@93=~cjRY(=>&Qb_!^naW2AA{39`<75hGS2OuNbR!6)mkmfIUa!733oz z#(5XF7}k&nn4DY>yUhmw(yT?{0FT(s2LIBm?H$0h?(aj2_|~kw{MXLjasLRC#J6T` z>*s&LPx#xcDbw&C{-)Cy<~rAJ?y#Y7dq1h~8ll}j-YDWT4}OhErhqDB8E5Ucbbl#M zJA*zN-^idkQFo)pbs=2jT|}$EC)^T?3lD2t+uLfbbpIh@gJHB4B80^5a!nrfWh^Xl z;^jpR6HQT+3W|_fNnsK?x?KH8+7Ybx4z=du&2)vX!gWx(tJHw$Z-RgeKw8v15yX;4 zYmxmZ#ASKCE91gqmn5%$ukrold-7F%lV8Lq|4<#!o@s2zL6iIDd-Xl}s=moD;*)>i z-=ElW#-u}MF7-`rG$1My`|Nx9Reh6R#3%pA!_BdzQ1fl{z4#`-h)@23e}@7of54(f zfp)R?{EPVHAF2&va?MbXoB;StD*azV$Y#rVYLOC9MzL!)moxepVp3>Hk1dsV$@Nsc z!_?)vaR92bX3~mgUDAZP#z~(d#zgGD@8wtZO@8?#V^i2ud61iZ9~}>62y5T!Sa7RJfDCUP5R?YQV^|b%uI5mQNJ|lb|(D z+&q@3A#}Mnap;if)ujvmhCT#JxdABdp#{5#;E(iWfwkg;Auzv0v;^LYI&U{}=MYpl>y%S5%p zvzt7>nY@P3v*k#G6!p(Cqf{U}5uWdO5KjL7k+i(@P)b}lTx~|3cBj?3gwNmL9NSr3 zWEfEozBW2+aj~;G*}TF3n*1r~v%}Y@Ts#)t7B4-8A`vswiyJCM)iFL$oqM`5BsK=O zX(>I_Vl4?l2Go}PsI!+_|H7nq_}RjkeIM#I`E2CJqt>g}^e_w=AjNSNR&MgBju-g2 zxU`!BZZ;cC(MS&nkK6LnjlUaLHvxuG?^CSUJ_X7}dD~3ExO^B^H&rT|2nF4dbK92+ z>7=M7xmlw}((16(JZqr60L+n*jyqT5WOoPBITmi!pjTTzlej|nt!G6hGfHA}ecnzA z9j_rX(ktRZL&1Rs7p0fPHSq?0I5W8#8ktnBH5dl2FCtoI+ob1~#LI^SIM(0_j)AZO zQCHN*vyX;8zfj3q1h-NM>32z31kph8qaFv=_El<0JSu*z zh9!wd^mKMwlD zR`5`b6Jg@B6sU?l4uVl3cB4Q^?4dgfoMHcB@k5;_1uViKTx4U&M<%h;A( z5%biaf!i!l0lSo~EqL{;vfMTRzM#XBUV`qeb(Wi7s$@Oe+Zwv66gC@NVX5js{+-W&Rir^syUWID;&W z>6s<50tju*HkO~sE8kKWfiMVCL?RNaNr>UpA2^VH?)h2iP|GaKThITO?xGWpN(m*Q zUv9nF+wP-7u>^riE8j0Pb?Hkc1yW33xRFW=th0*FTjRt~VA-JJnfLl31GB4)&h!o}BhmGOLkZR`Nah_sdtOdxq#M zl1l3Xc6atp4V?fcl+_FD9qC#-{8{$wl9c3D*rB=gZZ(cUDEG^?gyY#1h zLw~QOmK{BG+R>l-!kKbfim_#v-A99bw3)oJ_a;s_90WrYYtQkClx+>?mYK5-+snS#CHd*q;DxsQ zYP+)l%8D_W+|qdQowVeDCQc)#^bFBFM~+u7FqD6GRuxbU~8V1 zTAIV~O944fX=5O3egz(pb1O0DZAalv$K1CZ=r%68N~6n(pfy1T6MSg{5a^R zcGGNTS&F&ks@}-OQ$(LuN1A+cij+PvN@G(zDffpX4Uchf%r7=yOnNi>Xgkz+Xdq5x(9+pUAE+ z+%kFOE{R*?s;~_qlc6gRzJCEc?A#f=;a0}Nbp`hnh^EDV|9gM`l$>Fqv2m}lR?~hr zYag&B=mgy*7<8geULGRu)mXSR78cxO#|R&$?I9%Kc=gE23=4_R=i+l8^A29(w}bu( zd`Pn({*~-|;Hzfo0>6Z<34F5|ia@ey>tQC~Jr<;->@6TgSWdvVe1iwb+&ZQ|+zD&u9|>pZt0szHD#f9|>x37 zE)comJpq#J-Vsv# zp(r9$@kBsMB@VyxG_**CcHOE*B8FZRArfsC5}!pCg*^$fX}KyOOP*5QQ0t8&BBZ1a zjdFSEbDV!L!Wqz{U;Z;Cyy6H3dJ(JmNcAeA2!83j9#M#|%8wVlQ|q1a()f?Fcl=hb z^MoEA>F9gCccvb){UV;FonbPR`c*s-6|A%lBt?K-UaZcGD)e=Q8NR~~f8M?xoC@^~;lqzXx_HB77*i;P`g*c>YYVG8gS;V5_ zfmB@)f}_D6Ij{8+oO{*+vIJ|0X%iuA|5S3ph} zOfRpL2Yd280!DLF75@h5FE5XElW#vF^Xz7i2R)n|%1pYjD(~w2zp+Ct)M%61x!OyD7cjNi$KtL;Ukd0z@Je+5oGN6SO5O;CI zx87i$I&|n+)%^2r_58DRML4Q=tINQUSKZrr7f2SixQe-nIS<3^>Z%cR2Gm-?bV3Z4 zXvW;dXI78_omBx%;QW;&;Dr^9(@==!-jZBc_L===>qDD~zfiv-{ATf#?h>%@5aqJAP+R^2BR03BTB8zSs2gIf- zVKjj{Mo_73%A;Pb1RT;0xB zM*>(d6K;Gp-%KdLeB@|HGjea{!f(JDRs640h4S^%X*AUjkrp5;(yB*EJDd%5wF9LE z$cnW3u`&-b7k#C}We%Vf`CQGO)#7RgO&gRQZTaJ72E>Z6(xKA=WJ6l<=xKwpqpflP zwE)?WRy>BkQsnMSRbI*br97SBS2v_-+NWBd#RA+n}sy zE6UbZusp=oWa}J28}cf$bq2(Ou#z;H0m(r)hbUYCY^!7rQ8*7WcM9Ejp80bN#=2rl zZD{5bg>wMY$g7IN84!i=DhS?`zQRcrP9Ygy4MrXYD=ULU6;?f9s6Ap?U&HaVOKy`I>d| z?0c|#a9C&GC6RskgH4RIr^i(WY#3G5kylx1*He0 z^~O7We)(%r)}>df@86rGU`BM$AP`R^b5O_^mFa-*88q}hF$W2M%4kM|&mfSrm4ibO zV{<(&i1PzLZ(SeuL^!B2dgTaYg6~gp;wXX`gSl}5QRIy= zqPLtm-4zU+$s?F6=h8vSVpq;veCG;yund1D3>cl^(4#2p_$U~U@mPq*Jbx>r4M+S5 zbSEB9*Z?Ra3dSzEEoQvdNf?}ufQpgkeuOQZ`rrYn%g4l1e}v9NDCF`b8skI319Tri z6ssETuxRXzM(o=2VSB{ZU0->FD^9LzfUZ3#f=lb%WrLCH`0j86@HrQ-KB!jS4e0v$ z6boHYm{>?h7ZNZG5v0M=;&ks0ap|2kpli)`ts!DazbD5ykk-Xl!1#$jLubO87-zT7 z;s0nr0~5B4SB7} zo~TL%yTUSSO}56?+1j^k?Yr6s==U}cx$3Z`2m`LV%h>J|Jz)w>WV@z%cD6JfJJB2V zuQ3`)wiKpn##)IKnM#5i=L(ZXOhJBKeJIb9Pp zPQWe$Fh0yqv11@IoZx}%nr)o`b+iqJToY4;i1{md;Jy60tAU_h6XA`oDAX{ofirSo)cB^Jowem#Za%S0zU*$A zFY1jgP`;(-;fBNR898iv&E5k+z(=$9WbM1=8B~7gv%&2pESOb>??-8Q!l1DpHNzXa z?CebRfbUD8`}>sK7cijyL5LlA2Fv8yWp8}+4sd~846wr@zUwvbJ2rz|2UB1@udC?f=7k)_RQ%Se$H?+rw$UkqAXvxSic(;3vUbEK= zd*}tP#-kQH*KcS*8e2dAi#4C^zSui}#m3!U)tz2=US}Vg?C*Lo*@S$Pnj1PctiSHi zDjtL%&J#xlMwQr-X3ZT%ZaRnef>=AvlWbO#{UFzQ2c1l;wE>`xYe@PmP*H`E=418) zUpiP8i>lDRb-wPB*udnn0zFtnGGcl&>aRVpqa)+h=G8a=~W@K?5MiFKOGA~wY2dvbb-4JSo1faTM5!_e*IPdt3}q74i`ok z(KY6)o5$hK`@12Wl(d;-I7WZ&)FVE>qEp>799~?ZIKpahdyUTP4zTppj3pg?eFkVG zy)_biKx++s$P%v^>>T*r8=SC_kg4QwXl3ruEksPjn{g>dsc)>GB!0zkHv`Hh zA(u8UW(;?&dQfT(Q14lm#^3+mLw_B(wv$yN#=lv+szsgOIw!x>JDV)(drQYlP+UfQF(z(Q1f9vqt8<6Bf7FO@q&Us}UGl2vIHdt0lErO zU7dV5eH2qsLPLzUUce_8u=SvJLk zy!B1yvA;{y@Z+0rmf1U6n%L4VNB@iWt4uOb!f)*oPBJ7m1=@ z)Y?#VWNj7EF0*=Fz`z%y09O5tY{NI~Tj}A5eyTPR>@wsV-Tvkq?^jtq8KX5y`H-+9 zg=|gL1nD1;5%ZlLTY~;4#oPZ=}uyVd}W#8Z$hZ?W}I1)i*ZA)yjvjBZg~^dccp!LEDmhS9PiiSibc zDB9Kqz_$~apKcRa-vaw}g_=O$y7U)VAu?=Wg2-Pt@PpDD{QE{v4dDi)T=FD2kSa+I zrcC&4V}&qotl)liLpuVm5B3AT9lWRs=1V(YSGEVse;{#rj@1Fgx|nw$nSG*C-mB(6 zQwbFFoT{YyG3QhzFiX*%#zrkb?iw>vB8b>MK#&xIytbN7L&uLuk%sjHWYoSw-CTe~ zhkGR-8Fr>2ZLR`2p1Z>#426RLLqNR0$0h7~YZwejBZ&Kw(U(=O79oD=#Z%}D4f!Mt zCT_@?bVOB>A2)uOY@>1r={y)tVT@FAP1g|6_U@sYgga{F^$Y_yBIe@Wc#&!i@7XFM zb)5)RO;?($G*TyysDIUkc`3T%=*Nk8-AN8ELayd*(Bw^` z7iKoXp>q7&He*MU=i#9{f+4vA6ux^+EHFYf0IVj|2q7B?!eKvjyT3pWBG|?H`)-Wb zepLz12)O32D~T|!iH?6UL~P(-AbZ131%f#KjRfmlq`!Pw;8)H+8J9aRYC{x&FOaMC zxR8Dx`6E+^MO3V}#A_2xt~Yzjy``mJep_1pb!EA?%(>)J8#ra>2w>OXh*0mX*L$@c z`HS_wt#>AQ$aDl6$U1^R8y~V&+$kiTDkd-hILB36X+r_6rcZyyoS`x`gtGKu&cmSi z*r7&dP<&w0+IG&{Ce9jykIHjK>d=Pgm0qphxh!|gsD7j{4+%TVY^Ugu@Bz<3y_iUv zK9)F9zb7Zl%arzwHeXAavh?fwUSqk#wBtpOpD*-Ng%e)FnS#-o0)>0{4Mzvog^CyJ zQn-gos3t&x`RiP|2S%_aQoh9$E?#Frglx|-ud?;!G&JG+pc;lbtC+tIEn9*{EFuJF zJ6%c#JS3=-=kM(4!h?!$#826dW!7SAvXg4C38^~6EG8U`i-Is=&?dYAi>AQG0TJKB zTpXM>!SK_9XiA+=OMO+e_DEE~cElF~@!gv^JzR_I7>@H;(;^=>k~#1WhuniQE}h^t ziwi6?a>CnHq9E~Ha8)1?7dGS^6qtMe=)$#W3s<_(#B+y*poSS4|)X;j6 zB#;FBzJ+lcm`Lbjl@s6OI%Mb$P~Qt1Hpj-ixUEi!2>}2p(YJbXRutOP&I$~b7&}>B zj2%q(;@++?K9KADcjg)>C5JNExPh9VkrZ~&SlC&ETnM1up7TT|8ajC$Q=?XK90!U zB+lshQ#ZL{*5I*d7SFFM8!O9Heq(d;c=D4blgRAH{d11xp7|l zEFVoLU|lqSaiRjZf>f*hVyl2!ke2?giB0(QhP0p)LwRy#!vPRm&?f|Xb`$Gc43)~ zF{=sh82`Rb!qOMIP5Q!EqlU{Lbh8Qt-1&tLZe;QnHlC*bg-qOaAY$x_cJ!CO7?=h3 z^+jNb`Ie8S9c%t0A_fyREf)jR_+<1O@YN>IZdk$it6vwt(&hUd+^jQE^o{jofjEwp zMNL}%>mu<(3%}pL?{_IfWO=k#!6l*~i#jkxByjvfy@`)rEJ@q~ktWhQ!P^Y?D0HTi3Vf-^y1` zAdKT@Dv7gb5eT02@T(O`{BCo^^AsO0x|dkbv-msK%>(9F&JOj*fB*8|>%`gr@yGr0 zk9GasivKuWjK27N(S4M9Z!ekyigDSMBvY1lU^56w~a4}Xjd zy7e3XNRaJ5PxE3~vFM-c&h^2K;M>34iE3{*H@tiQpF&SE1^R9}os5an{yi06A3AKh zX9*GxY<1AvVSB{0juDgj$a!C`Y{hIr%4o04<>*S~<|fA#Ah^5@sDVxx0q zikSA;k4eGiZ-FY*;y=uLYEtAp{(t%7H|E`mp9TEoG=D@-Bl48Jd zIqjqFCNnt2$i4sR$n3aWqJRo46&-iKsEE`916?DRP=L2cQ z8>EjxUaRoM%1~y>6;H9dzvOM|$%uTs1Qlp{ z$s|FxF<~CQ1>OtgNFSTn_&-bX6Z$InI^<$iAU&K`|he3 zDO|tDc>Ce~xN^5l)BItiOpST)a4}l(8i@uE$I9QJ2z-P`Fx{<;a8Y#aZvsgHVyXkrD z{y(qKPR&(LHDD1$nDQ?cynnf&zy5Nn4+Pe9pMRL!2JU~kp}))nw+Mf^VSk&4x+Z_Q zAwTpss!ILC8`wW(5PJ2O(?v@XogLGYP{gdxr9^*M8oC%ijDK%0V$&V67id@Lp(nc0 zQ9aB~&sZuJlW8N<9sW*XG=1H!_5)G3~bPwo0|F5B{vMer%?X zZkU0*xe9W9LL2m#WclwK%m4TIH}hk4`J3OqdbINAlc@aTQANgi^v8{wAoRz5nr}oa z<{$Kr{?c^x|E1PcX>X;u-nGruXMh{YZ~Mp{d-B*_2OsmBxa**oYP0a3Z5qzdTm?Oa zP5e8x57wLdcWrY$7NwP5*oS&<$wR%6hc_B_akOAG!abk-GB*9X-~>TKd{OupE&@hv zR(Iq1*4)OC_Qqms6a{AQ>acG#5PbC&{s$1dm^%CV;!1@`(COm_Pc0XIzwfEcFK(5SWH=(WWtvam|3^c>U3sgaAM3g$G$d#%z|-&G zeAJ)oP8-dBTDDTEy$rSYU429NcWQ(mrg)=_3BtR?tje)n!6~IJ zoWJj4d(k6>>pn4H9~3&aJ&P{PUlpq@zRTsxStpqF(tMJU;MNX|TeHVRM8E`#j)P_a zf%a_Mo;g)+88Q~V79~e$v$15E*%VhAz^;DluJ9jj>Q_vxLI7R6bpbisg5mBngLF3> z9lCf&<4b0|R8?7C4l#PQz9%v2+{eKk&W#q@sdSD?;AZLe=o@x<+)FTZf7SH7re+J? z2@F+(JYFtkZmyHy0IX084XDUNjJv9RcN8y=X1-#Z&4|R`VRGe&Os%#G(yw)T&Y4qj{ttGU4Y`X5ZG z_69g2H>MLVa~wsOy@1>KpD|Ny#B#z7HU9s2)* zAvU&X+gAOGf<9}FtTN0w8GRYQP|u0}AURbpyiqZp#3v+_p)&Dk#K{nnY(Tsq+vVwe z8h0PAs_!UW4dF(lPDEeEhaB%BZ_gFAprDt~l7~CSg14N) zCcoZBln0yb_!vainQ*1VsT`1JDe=_$ZkQkm>u|ya?n~{7@S28666)nLYB4jFXWB_` zj;DwCV-oJUoeSudc4PElULbMA`c9WVpO+b}NCc z^;1i99tNm9ke{k@k1kh|A+6Y$$NItf%8%z6D<4gxyt ze^>VaUNsz25?v25WN40 z!&6&M>h-wW6X5EO38ZF2%vR`3qb;f=WqFv4U#8=gp6*ezYVOq-a^>@l@3+A2Eyw=$ zmcyS~-2A{FUc!e#H~8ydeZ1r_Ghp*8u}+c(KpMNjOCA{eU1Pip>aK0_Z zl3Ni+zdcG$;9fgm=9PJL?nfMQyDyW|G`^V(PEuMY!-SR75i<){j(Vvb9j4Itsv>Jp z&}Ovl=d;nwNtxR{=vS-_k8Qp7a;O5A%l85zDLhyne_|2_Qf_=l~7!|lCY zN!S$#pmc{mAMfrRKik=Re0=!g@!?S*QFr^N;)DK=0)PK0PdPQy!i|IH@vjRvw8^j3 zv!rQSkTgvqrlOH;vtS${CopmD938_D`R%uUgD?La-#GkkYiB3=(sS3fsKqALlS_35 zj&I)B-`MEoo~Lm%YmsREsoiSe3K-pwbjn;_$kyWhedyK0gQPHsh@Lswc_o(YvY13 z2Q)0T;eD1?JgrP$Wl<#zlHyDPcQn`7?jCh^fxydra(Q3kU(X?J(VNe=4mQ8r*ge{K zyuGu1^fRQEr`t!nTZf17)4hXuBi`RQINIKPv9oay@4qEHzFTS67W>=h;fy{wOTcDlt3u6oLhhoun|(7&L=Al{#z42a0=5X5uj zS|ZsGcgi#NDVF?!GoeXHnz6W`DIf_`=@a@D?XpGF=IHtfMn2XZx`g0Tk>SkCv?|nY zgVVREuXFmUn_9X$f8;G}Rr&yR;eo}WDJDjAi*phpy!mvT3|Wj6G!%kCje(An2u|`? zb8jVD40xnJ(9_=Q+`*ZI=3(lOfd|jP=P#fS_}`o8jxmS}11y=CVF@5ANZ=;bGw~j0 z#Yi*X@fjl9kUH;AMfAu1**^Mi@5NEPvHLTOiU)*@Ki{`xj}et~M-E4W4B7z2V;T{? z{3hrdGp)v<`QWank83}%ACf-=A5V{h5k-m>Z%Jt~xpg4hP44*OD zoh{zt56&i&(fZ2D#l=PYG@rJM@#)Gy`Y2bvZF3gRBNeahwwWZSr)keJ2#K6DO18uW zpFb&4+3hGfr>TJhfRB3laB)#+m9iH-lQ~lqHsvK)s*~g1piGl-_w1Mha)#4f@*INK z`v=kZ!=De2ceWoNY#jW240oG{zVkio7srFivGxVL=57}Li7$Wo<(IMKA)pS9_V#vE z^NnXevK&uBda5yodI-0Nw+SgEPv~DG4&gi2?fURWaH$W+>3QZqHP`YH(JjzyK_(4b z6mzb2b0B0O{G!s-G2kz;!J>aUmd10tn=so{>#mS4y{@>SbcGajmm{8faq>TDSMsa! zi|uHXnaDcxtNHsNZ9{lMVL|%|M{LnY27^QrS>V>O-m;_cZ*p=Bfd+5@y5=D=KEV4} zWX%?LO*DrEPu#7*@6wP{<&ZYEe`-h4;#m7UmOhU`Wgp&{{VcLxTQoNitqTb@J1cHAoLTC1GGFBxy6uML*yn5Uz<(5>j9v7wQCj7df zmUiS_$OFA)5YRS}-Zof_41i<(SSQ5fc44(8Iz5^aF*)3NBEa2xA}LgQ@&+x!2>UZm z&I=?S?snO3#H<}17(}sHeTsFs*;%suF;YMfQ`?SyqA@&N`1J<$3yHQbHJJ{OivEhfV`_{o0ot2aB8FaK;w#AlhLN8C4f@=y9+xV$%{M0pm zeE4J;8}0ewvT?s3sPdB)+4SD-bAD;}xxY6_V&KFv;GXclwbanCcXp2t`4#-IR3MWi zDZ}JdHk=MM3zcvUDn5V?zB=v>iJGKL=j;VK*<BU`1A%!p zVf&5z#Cuz8Twr-|#=CemeU9-k(rGnIglLmgve1rbn*5U|%)jvRWIE0z z6kZa+n6w_)&iiY-vYml+xUesnM)HchPVnDZJKQ%f@I@qfWr!Y4==73(BZfFWRq5Sd zd2?|->4b26QXKPUV;2X4DfiYrKd#=N)iL*pBcpo;-%zhxK1Uk54el%I3jK$X?}S*d z-gGzudhI>_uO}~_%LMf|+CL}g7p(E`2KsX&v`^eQ#Imc>YCU7x5w*jabj)ub54kt~ zM$-e~9~cP(lHAl5reU7gFgeY-gaPit!XUiG`J_o+hV=pwvm>I@h$0;*Y~Scpr-S08 z`Yqh!Og2ql5xzSwVAVmx*Z3@)gOA;t{MpJqeD=xCj!W%qS#G)uo`_%4-xY8tWm$9) zRBILy_t{|Su^RFSj2sO7ob?+Q2I8|Ho8v{#VZyi#Im|Zr0DC$h7Lw6SlQ89`B^n+- z-Pw3{sLkcVU(Hkk8nS^3uO(cyZUWCxny^6J~mdsSwJ2h9c;@s z;a?sQg^jc+>WNg*EQl+UKyx=Al2V96xkWeGwV%;_=)MnnqWC6dRRij5}tk95Ikf zaz7Gs3UF2p!^n^wd~($|q}6q1FVID5{4vtjkCJTMH2Gt+I@VTKLLq4VhNBRoN|eW> zY2g$!X)o!2luvpH$H5~3O>?UaoC6_z&U1*t79Kcv)bdCzU z;eJ=n8!G}N@ky3Lvcs<9m(8PNdf-9Gza79>6&NlWn0a~YQ|{8@tH^DV{1cnPA&>GG zT^j!eWGF&zAU9F#W8ydpn)NCAXKf6h)pSZf-*~pYdA#|Y#2NdOIjL#M>Eng&dK^a~ z%2$v>rXPQexI_rr$!>9%+)t8ceQ4EKe?gzy-F~`tcyw$}_uvkL2{RTFk&UJtPpDM8 z7eD!NqviMb=jp+@?6L{BV(>Oy>VUB!pe0rs-K1BsSXV{Z7u}q=iV)Q+D0#NJHeXr>O z=hxLR4&Xhi@M!i%M?jF(h?T!)mtMg7i7cF&L{;+PLZw{rP}H9eYQc77qC`s0j?_D* zb%G-xHQ-Ure#|^`VMS@qlSU(0FlUG8a(i&>F}JoE*g5Myjh;n1NUxl$#tEu zntD&q6R3@)vJ7kVlW}huA(9>%%dvx3{_1_8pt+5+9xa!S(EnWRq2>)8CKJ`|a@Tw` z$g=Q$;?vq5i~bFPx$snGUkc+GlN5*4RNR;9P7td}dtI_qiG@Qv4q5FYI}DjsgO`fj zRq^4bV0|;}K|Vc}2fG{3w<4p}=8p$st=x7y8Nl=pL2cVIu`Yedq(S!AN=20~)hSV<y8klC_ zZ40$e)bAg$cn5cqQ zqWl~UvMzB94HhnT?dVNeNom6&p zk=qS#(?(I9NI9b?;+rbn@V(}~#8}0Q3{%J6HF{SISJOv4}Y;{x3ExQ@J+gB zH7Mpr6g;ta4eeDbZnnATX}!L8#G)G#G)b8@I}8b-U?84n|h=qx7#R%UzbYmJ4G|`)g#o>K+%K zKpuXEo;BNzlOFXp=!Ss4$|^35H6e+Qk>+mmci_OtE^)4J6|xO0%y-yM!60cz+&-|x zA2WI?O!d90dA_ktd@e{UUL}+_)fdwMK zsq{>^hu8zV&%+PTcory-{mtE_*(e7K+!xbEZ3JzHKUlx=SQ-SRBY5IhV`v~>vqVy# zezE-_PcNFOTktff{or&(_0KYALjouGwlwKA^NO|4)CA4c+eoH9HSqO7#gh*gSMVA`Sf@o zhAHpbn43Hw+OkHCq*I$u!q>E)$fqZUc-Tgc0yjMfKbz)647=a%oyg0@rX%Xndx@zom;rX?eWk4My+G9>n2yB)YNt)ejp74>6c`Fpi2^t@(b_m@EZMsy=d|3;fJM z+2&BM!`W?mA_Z>(w+?!kTJN1w#WRq4t(cwp`_q2en~1&VP2w`;5Q?)W7o@R$g^F3N5>Jv#!da zmKUfI2C0>xW!T)V_BXJ4cvNl}59_VnCpG_S4bJi7br$vBVkKfH@Y8=;*a;2Fv;2{#npN5NVH$VzpNNJ3I2 zfBWaYNCQviu@;|zW*PyXxK{(gL#PD+jkW0g?WH%W2C za6Qak(cR61m7S-&({`RNb0!_}u&1q=A>R$&gp(v!>*2LV#j#ftHY&Fe+9ytwgG=M{ zUP=!j|J=E$BgbP?(91|lO+SBqv}p@NiXM3G`b0RSQ)w-uN3b z83>dXLQFF$4gUBezG>2CnP(<;S>m^c=iyWOSp?aj?E8hyt=1hizTl-2H4m{Tx@QEd z_&;CShLMXV*C0F2v4op`+Q0bA*ekCVnY;rS`>IL&jGEkoG|8EnEE#*eYj&2=kWmO5tr z734S^4u~cmOU31uau~G_po z>6bz6CaxDA4(tNOs{Hf`0x~#`Pwr#H)P?%FqI*QIUgE6i5=+jxZ4V_^60z?RzWfC5 z+Ds`Zft&XGnCy9qZ8a!Lm-#^;S>jtJKb75pH^=D`rXbG$5b-@$tf30lkGvMekkuMU zcxA!K6Te8glCHcyG@jfvS{pekBDYsx{6=0Ji;a}igCQxuS7W?O2s!OS`r`6O#m=6J!yDwtZ{7NsR9o~;iwW6Z{=yZeB?b-~n6qpdpPoz$Z*sPjj>;U|hm<{I(7XM` z+m|(Wk|JPY{FQJfjHl}UAIm)KaJ?L?O#E;Z1=%C0^)#m~R-EQYfN)%lkipd@l2i+t z*c2twg^LZ)GUtU|<=4+{?SIr*EG46E!*H(1NBx?8A(;!3UwCoP>P2*pBoFCDB+N|A zjL%&8^szdTM)9)sQ`&(CGCX5T&d9bL4_$RBGWSTq3%xuEysChHGNU}-uSg&*mm>`1v{LCYwL`UV*2W zn(+^W^YG1bi5lVVvD`%?R-HQli6))y?-5IIc(~)9ut!5Vz_Z5*%R-a%R0yGK1m-=8 z4rzB0uXAZinv^{HjnOC>4}s~Xb)t9hl&IkJ6|pL#giDeUjr3N{yNkAE+65?F1HFM~ zhg;l}|7?I8cs5LjedMxah@0np^O$c&(f-DB9xMG-JGg5&N`|}$OjE-a^oS!%o)lfS zWC~Q!T5Di?lQDM~B>UUMzxwZZu*r_;5jO*(%xXus>AQ&RK#C3iCQf4SgM7(fJKWgy zK2Rn(1BD3TD~S!^9voos;MhJO;J{+TU)U*5OIQCU#2|O?7(7mNbcX1PWu#$6p*g@r ztm57Xxyi9Kq1n)T+7OSuxuQcHvVZz?|6ya_Zm+gGE1P@!KNGw09=@?k|L)$t{ioHt zoz=T*9s0X^@6PHf-(T&l-oDeh^{39QySLZw-n(~iZS7BV?^b8+Pw}7rmHw^DKl}Gz zN}-^*6*rCcuRX z6`E?uQYO*LusZ?UwI;S)HymYP@S8PV{t&ZmB_d-fvPAJym5f9S-#Eyn& zOJvfFN#19+2)|@y77ZOhF#?<{6=G{4yJLi4o0CNraAIWQXLH zTqKv08w>;ML1-()E+-0V@v`8wz&wIDe$1jaDs)X+(d5b*9XQLj}jBpycGJTfB<6ssp zIUMr9jgZWXU_B_24I@ILHCYXIW6~r~J;6kP{^XKJNK(;R!DIYcGt8kUJVP%GEn~Tb zuw5`Fu!iG;eV>z;7*3F^u4Pj;qWHmB6-o+omfWM!nC3*^+@tQBXB%Qo9Dv^BREs!Y z7$?DYDCF%#*?_h2#W!`i$ESk+)Wc8{$;B60dA8JYY1=d#nMn=E_G8#Y2vDaf=U~$e zbX=qk`3dc-Xyc)={d~dR@iC39E2GP}9(PWHF^|*1TQqyx9cQpM{r1>Zg>gnoePe$X zCe4yyIg`DzS5@g1c-nw!gFNE zz{H_^WNYpS%4zq^?f8~S>=H5K&Jf|?kYWd=(j`h}vTCYMwWysG@RTjhM=MTn@l#KQO zf-eQqOVg;!NGo8qWEEvt+1R)A(XpeRNy)?}j)W1yL^I%Ikda8JQhJ`z1N%LO8xk+a zq7|xBVNeU17qX5)1L|dVp?Qy|c~qZ9Wpm?&jB{zGw8@eI5>sk42r_o`iG83=FpiYc zm4z{O0oXV*hbGxsmV24Otfe!_Kmj7NzJy7-65ct{K$(S>Y2X`s=26eIZ*oT(POv44 zF3Ibq@%o|{6OH@oO}m=dk+>&9;odZ1@91cXRHfGGWdsUQ!U!R`BZTwgqkWnKsv~hf z3P|fkD#x8$3;@IgQkx{1gi=iAi?a-|_+pl2Zp>sKEogh0p-O&Co|#3WWSqemIz2%$ zF{Ef>C@U{Pu*0U{(MSmeNTQb-F`wo=n|@OgKnh7LnCTT>iNlt#x)wPiH+D87NlFr( z#-xF;3sc2AJj*e@7QD3K#-$#Mti5O5XfByMc`B0i*rMPlVV|USbU0xntmoJ#;VIfc zPZ-)wG!i8xZ2ZRT85{bJ_bYOf?Ra@K9gi^au9R9Em%{Ed(iCNCGXL@M45ov(CR;KX zB{dgr4@f%J9Ev(1Vf7?CRqS&NF;{kFl#PorO=PA7!CRbR%5m- zbhLHw{4n0weFC?NC)@08fyS$CI?mvRII)Cn;mA8<7KAor6Vg4*}RFYUNfWYY$q{b7U0 zx8G#LA@lkwqxEcp;;f9!=;L@R>7JP;A{k1i9zJ5?1v+vUsMUhL06$$U$%12Q7C0R; zr?zo44jHq?r%9guJ#p|RG+U4(nL3fN380MR%={-9s$Mb@2V=T037d`R7qJ&fKPk_! zM6NcF<1QR?&{7B!)N?&fUTPAoB#(#%>I(^%>E42ZLQ`qum1%Cjx$ja{YxmrHqnPxSZ${&StHsEHW=TP)XJDOOd>-hW6Q*eGbqul^F%mwtl7TKQ!)ccB_T^k zqJWOvZlPcnWEg#ymz?mOqHe86Vo0^LT%Fd`ZoBROBN zR6ESC?-pP=%7sW}BIXVzHgCCIyhOg3XXZquj*w!Ck8AJ{P;jYPMBavcVZSWu3j1w` zZaIJ7${Eol9SlSqQz*@6>Xnk-RD@OB@F$@!m<*pIsddmZsslq{OD2{ARqliPb%fa^ zvd2iz#8DkK@*w-UYsVZLE5F=2&`DbgV_;L@@g!{|L}BvpduL4&(T<(AMA#LG)54@f z!_{(6!!%_f7K9PbIAivKAjIgjNlIYRa}%PcIrA4hd2~TVWuF`gTL7gH(Kt?C=hJ!C zZ^^dwH>*e(6C6sKW>>m*dkegWma;URCIR6+1gnZ9z}p6B?sX54vLA&YOBFN{Pc!gg z!tA046O?!&wIQurglRw`ThW7y)VO6p*_G_-k^N91KWkbGaZgfFq4HCL}c@XjrvmD9ji3wF`Wce!U+IVB1^*| zb8;m2a=0yJwC#$fwP_tAd-QvZgq71Y&7w`ZETu|qT^^I!Gjd=zLA{mDRS#WfE1jf{ z0DL0Nr&CT(ENE;dG9wL`&B6fnwP32YYenWbg*64ym*7Hr$wbn|Pje&0vbZa#(1&i} zgjljPRaHRbkHNE|CF4mMfY)r0Cb)`<-^U@#_8V31xQwKNkj;$|2E>XqR{wVJxkx@Y ze=OlvtrmS`5|g$ON%mlM2#cBmJ5x(hTPrW2!*G~Z7(n-#VmaSc#%XI>Rk{0x$klOb7P)oW9R#ter~K?y|Ho?7u~#>osOWuy^#Em4kT zlj%fxao2fueso~x#RUn+C#Lc{LP}O7x)#Rf&11ZPc1lgSkrWPKo1__y zGVPU*7uI&BI0iq?Sm`iSnHtE*mKPS`LSB}Ge@juyp$i%pQ*?!pm=Zzrh%y=*S6}q% zxg*P}IPx&n*c=OXi$@Ppr2?3@mg0&ef*z|~K)1%3@Mn5L2!taQ3Ym1-m1EoxCFZoW zIu?JBl|_qms$!aAm3{yT+7i4#C+S%-=(lu#^DP^o5UCCkL*WnvufUeC@E*#RF#^8m z$i%)U_G~+iwC5&Hm}5*5u!*ITf3Q5uwCpmy$+)^{;ik$CYiI9f3j9zziJMI?2;^8QjFw$O1yl&4`RLh-;nHHmamKTHK z6o(1PmI<3N9gIAs5N-RoKON9%K483|37_ij(Do39hzaX-%n|hC_WqtnI3`f;Q=dH& zYgy+OudT*U2n<{`2?YYV{#;3f7a|oaVhxHIR8^HeYZ3!6sIAA$p>!S(vcZ@tgtSs@ z!50Yt!4>YrW=V_25(OduNk(T#^)ms?V)MN?RGBb`5xfc+PyjCkmDtvCH)DiRlH71S zG7?)$c@b5&s2qiA81D{XLBmYgiN@68(;C|%I51Zes_K0)i{(P$$?3MZFtQM7k`8z* zF7qZWEfmP(9t)Pyu3c1M>dY)OYl{{&Lz7qUcH7&xKN$b4O;M=%Cy=gg#f8gEOwZ@V zGGJ-saEXkX4lW?jSQGGQvt-j@GnvlI5efWalx6#{Q)9tgBh?sz*(vn(>Ss1r*>yj9 znWl)soj}W-h$)zDxSW#BFoGe|1okJtjG#d=?8&*c+4NL?PrBV=Y*=w6LHC?dW1<;% zXAeN(mzb-t#*#;7W{QB{mt znLG2c8QYgs_hOV{KGxdem62r;%+lU&!dNwPrD~?>t5=CT$kxR|mn<>!Dq24r_FV$l zrKee<@JDjl$g$;3D%2nlHU`>}G=TWTS=;gXFq(zOir z;8FX>N6RK(f{!9gqb*&s(`1ZVbd0g;;&dr0c&V@5s|qfsTpl48NQW|*4@)DhdXAIH zrP}PBhDMMxC($PBadt`eop7D1a~XSTm{ciTenxAWs+uc~drNS=updUm{%lhVL5k^> zaL;1=;9h1LUhV@ns$U8Yuj-d{LRK@aZVAkH>X&AJMb2#Qf@fiM5GJg3sO~$Whxf{P z7&P@5&#m_emT3o3cVu8 z!1R=}$kw!cY^A6FH#2fNO-Z2;5LeJ4pL=k&Psb~mju?0D`e*7cF)MnUqP)S3voutc zG$@QKWwIl80+vLX0sK2N4?@qNH>8b8xU&pLD5iOh8nMQj+@AT5@hMN;!HVo(?nvFV z->WFonK2--hfW*j)!3kSc3CnHtZrVCZo%oNy%r5Py3}HRZ#YWw%%*VSE}B(+obH16 zL2o)1{h8@qI+PQPC|5BQ?*YbH*3mk5K!S=m^2M%4PMi5DO$@M_#B1;y5_P zXOFsu(xtz2>e1mXSREhLL-Jg;R*eJndAMW%SJs5ti>x$CB~cU?-ELAcXC~q(OzN;; zK(QbmmXJ}=i_t6lF6_<2mowCE9xF%6Or*t$VG!@0IKF7c#y?SMjJLC_k%C_=Gpwg) zEJd!f_-55-U)EzuSWAJR(^7k@K6k-Yq7utRav3DD=bQ3z#sEz(H5TolV1pb~mQPZ_ zAP5<_4&GHHU=K{<(#wWt9*IgArpu6&mNndM%|s>Hc;fjd+uLTlRokwFlDC_fn9?oJhTm>3&qet7l^#% zsZiTK9~in!YOOXt5^mS1`bK4Kk4*Gbln@DlPZvTXPxfW78p#}>Pwop z7&b>>d?zYsH|~iwWcNaAN{tkHZb(qZLk`0ky1+y6PH6TWET=;eGPsEmbgZXSG(oH= z&zhEn1!>7rG`aL0X0-I3Jy%U*I!luwowzN85uFwE{0vFJ)Oc086VOd++sQ0GerUg{cBHIthaHlzU&Ab5a zAT^!1D@IcP4HZ@h$5^Q;YO_=w7!8EXT-XzS+b<5bolCM<_Rf|=-rr)LhoICBFI&Kk zZrX!kprvtO>aiZbOfLnzLijS*w@paxg*rtp|92WU#yiy|P{y5LfS^E8QhQ%wLd)44 zT^bAzTA_#wU-Ee$95W{UZkA6$476a7GQLisYzw4BhDstJwGh`u4HXeGAgUsnm$>Gz zX;U*LhV~#}&I#OHhKV|fZubKtT3#cSzADxbeU2v!qrE$UhAopF}6Q~#<_I+-GTomEgBQQM`_ zAi>=sxNC3=4#6d8aChh6?(PtrAi>=^xVyVMK@RS4&gA>2rsiVmo2qr!-Fx>%ckj1$ zziT}!F?;e^jx372xk!x1BB=B+>D~eEd`d;bR0_wWXRW9zI%%HCuP%K>7GmbXC(tuF=C;T+Q$3;pQwB*zN&gBO4F$ z+I;Q(=?P^c?wp z;=&g4?M850~pbZ0~6!*2Z-E_?v4ni1iVDjiF+&Jh-O*6)6s;mMNITX1h zFpesW!}9Ulgqm~s{zCLv7Z>U02M+Sz^*NUCCpj5oiU|7+BOEzW_}g)Q!m+tp`u#ew zAMuM)rqc!(73{9LsJxTN{5znvHZN*Ux$jj(xslfmP3Q_)=)oj(Br0#RKW_;0F4;+b zke+CG9Muw!B}Fzx;Yt#`!hcc-{JjwC43lQWUt| z;c}uNvCDa_;q7&P$fzmjRa_->()@6y{w*F1wYI~qOmk|PlVv*dYja)oj^b;D5{rtB zEvEyv2{zX;ngvx9QRGY{Tzk8dsYy0X<}g6>30EhGEj$h$KP2V!)rLd)+U6jI)tbbI zI?M5(1oSqm+gTm%6HjM>z{zxVA(!;!6vGkNJ@j)43O=R$5QjM`lueTR34?ED4BD)8 zODN-!O;{h;;!c{H=R>Li0K zn=GaswJxQG!q7stLoojEGf9Hm*s-fTy<0PK>VtkT&&BSADAB9hm0xN?df@VZ|3+xp z(;q^JO+B94_<7WU!;fu>2B$C^OVnjJf$l7EaK6~NXE&I3Kw*N9khcGqf=p$5M^2$2WY;)(U8~|Xpa=B<^ z9wK_MvRa3ooe3d2|Hv-3W9(;vm9u-L;Z57dVu@#M8NQA(2}$_Q44gAIV*iQ$^Lw7D z82?IG50<7hFRTao_l#X>J`AJ&RT#5M&!srI%)a}<1l1vQ9x4>vm05A=IhQG^HVvi3 zJ@t;OM?Zy-KA%hk2X_Zr0~qW^vx;Bby*(&?Lf>*Hj5=-k(hw#?iI)%4l) zUb=P558z$TUn6H(!s$(}@wb~M0}ybQbH>2|wJ3aZSmfd;m1nzM;9`=fr?zN!4>?=! zE4}MKkcZHY?7Vo8V4afZa?ljIg-!hgVo;#gw=`t#K~z`S(eT+79XAcPVDtJ30^Fro zQs^Q(ulKktiS*Wh=(Bhm!tn3<%S-GR;ts+QbOWxaRZ^aI2J+vP5!=Y4(4gqgHn`n7 zDr5>ILPp-)v*A;j@%=)tp89UAcuWS5f-9tx*|1}9&yZL?=9;L|j2z5tYx`-d#Ukg5x|_tyOp2b&%aPQ&YP|R< zDl8el7xgi?xP? zsx!|>d?*=mqAheOi#wuGw>Ua8Ldbe|hMUA0=(Cd7K#uRa zQ7P&=<6KnBj7=4Ae<};rOGb8=kK~yYn!aMRnzzHx@ts%5{>BGe@Z+k(-5Ej~4RjT( z$stVQwb#)_O-vHl&}A5hri@6u@(=UedP3_8Au3OU8!1S795EYs=&CIS3$v21$Cbxu zn6(p^(N9Fw+@n`mqGC%?eaesyRIf}k57 ze@9Wb$G*1*Bl^f+q@dq?4RWoqhw34gO-1Iv^ah0e~@hvy8ABLJhSOwg1 zqdL`~3|Uc49BChjpGj6;iH4GCpL@Y2FD@run9vG*@WqF>e0f3{IpT_Mgf5QpuiN@f zx16oD+Vs(Hcjn>G!#AbXTajYY7Un6hQB-Z5>@Xcb@0EB$}v5IJUvQHaLZtY0= z6rs+lv&Qod_cHbiS8D{x1ts#~2O;{^8U>Dhmyu|BO(*6D1ff#V%?IhOxWGFTES;sY?} z9t+cc!%ov5Q>+@WEnqZKmpHoLOukm)wMjsd*RC~QK&Lq0^PH8?WRZ7Ir?FI`aPcV? zmFy?vLp-KTPQ|;(2y0%9W8DS;C(L6yo7j@mOwi=9(iifA2!4-p&gEa<<5BjHnM^qk zt^WygN*1TSl`kTTDzmOwXW;0u#GdQ1_9e`LMaDHOW+eBaaOOl!cUW`sUMS6-P@Lg5 z&~C)Z1|0gFSm()7(Ba!=R%{#UKDX0lP*-2V)ZPUv9+K5i2=XEVjIqsZrrmFT=U{G^C*iMVCp(LxbsY$ej@n}1E0iwqbgONKfO+QCHH)wn5Pqx8sO z<8O6xQjfj1&?VhiUyGv=}a+G8p2Sl62l!=oq1S-i=4`=)JSDZBGnNE zk^C@55yI`GlB!WjQeFKbCFYiVESXs4&>W1x6V~}Btp3-8!*+wA)e8cG1zl<;e|?x^S6di^h0s)kRflS^iAcQhqgUvqhlknpz? z_bkn&!dS|x7|E$mT;`be=t6HyrTFwJ>}_DpwRtN73zb(L(hL zat)$cxhKNZd3!9`HzifkZ2fu}tmPRKtrR&y*lvsGW_2Jk4TpEfI*2`b1uuf;^kIvBWrmMPve)iCO$ z|0qmXy}s4zmK9}VQaP%tx`Ib>eEIu&_xwptbdL7IhRMZa+o_bG9BJyT-&&e5!#rCD+;FI(TN&RS4*~B5>Eso+*?G!qnebk%hx}6g`O=oFb(yOrSL6A#`mPdHD&$uZz#tkC^=x4 zV2NPoS@dHBbo-PVbi!omHNM6<;90X(vjOv_QR=>AB))efJ)sjSDT8Hyew|cYDBY(v zVZjtJ<={9oY4c;~)vqPxruqsozR`oh%Xdr-(?@5pHf>_(;>>KJnEJTdQn=bIWxDuc z7)s~X=K?NhzOC|J1p9JR9fHauTt$cR$eY83<-hM zqcwP?T@Q&!B27mgWd5gmkdAQ`PAT@X=-Q2x;=$eZI>{v%(e|?}!QGh}BlA3VB%uO! zvDpueYD*r3hq*8TP^+Clf>uUM38T7rYwc{=S?^(|ucv^w>n4(H8{jTH>E*-JECPSA zPR|1?@T~ky!Pil4TEBR^J?ZM{>IMBs>N0mQGh_0H@(kV&I@cI9QrGvHv? z%I6&8;Mw?XEM2tJ)A%4UybA-;=6Aof9YZDfY<0!pe(U=F@d!%M1U65R+J7_!)VX`g z!WMM5<}XCHp6)$@j;CYjzNTxwXL_%02}T22tSuHVtZH%hY}c3XG4@?yJ5=d@G?oYmef>Q@M84ACQ zERgpT+F9M&>~96~%QPuuI=tU)e=6knsMI%ZY1SdOzqMFLd0;S{ zRw&T?h@am3w%vAWsLX+l07R77JUbHmK_QdZH_y-2=q(;dD!>sQ9$rI|S$~PoK(Qiz zUok-^A1zJTyCarvziVpF?AV*fzr&ByF(HimdlNoz;%;Mzr`4fNd_QfZwBJ4782oJR z1od0^R>wt0cIMQCwtrg?EBmh=UzY6@ia9VTSb1!Q^sClg8R*%>6i|l`^$zGJMhAF4 z!2GtPGMRP4plERIX_XThTv+~bk3DRuLa`PES1W5_{NSj`$h@bvPe~F)qrfH!Eg*%A zp9BdLTgprRjLjTel@lUPDTcXv8*NLSis`0HXU_5MU5HKz?-5qW+anJZSkHT^AVfCF zpZuv_jJ1veF7z`1@3Ym^2lMgoA-8p{g$|x~D&V1eo@&tS$D7ibfIWNUVD9;7TRJ3` z$}uDJ2kE!JI*Cm+=o2vbHH`Jnmb1wVHecqva$Isu<>&x~j~UiFQ7rc5=EXU(XjFWl z+-!?%M-LeD=kGa!jit(i2q?e zarA|0)j`*%^;1BlYH>tYG~F+wUJuTV6yo(MUs3yn%RzPAqmljBoEs$t%T;+ZEFHmo zd&4Zi^v1IA+(rydQe66@SG7+(_Y_~@F$cVO>~W;lva5*OP6n0p-aU46JQYxX=tOz> zYL-*tr>%mOog<5Tc|DZ@QJUt~F&t?;cy*YUTC; zje^~@iSVcM($yR0#mTrYh?Fn}8n#-Un@0=2jB)>X`5T!Qs{ezZ4F<$K%=GWgG0s}Y z81Zsx<1miQv}=&=BilP@ey~FmKDPi=c^v_NnxUmrqG2@*+lSXH!H)&MGYj$p3Yo_CgolX&X)AMs5~Q#uU=BasZ3* z-yW$vG>|=yr>7UXl&*e<@ri8Axd_1lT z)`v$VXZo}THZcFkYW$l%KRi4_c<#@%7V+osrn~hBvG1}35=UO`ZkUe4la)IJ! zNpkh@3$s4lUWRMxPtg}PXigo1_Q&o#(2Rjy=f#Nba1g>*bA1WmHx%r>A-NlyzE{Pw z#I+Tin)LUj)JJz`q=ZjPTAhrDrN0dY3{3J_M_VQNiZ_Y$x)Pz~I0FgYoQ1Z7xehj( zK%;dgw*ErRJP%F>vgVexRmDzLZG~#hTbpG-#q6&gE-BH+PG}|djN~_NcPU|*N!Kef zoDp8`3j}PQrx(T z8mQ&mu1&5*Gs%8##=e-Wi(OD9opC$JPz|uWbvMkHWWdn*;uWK6vG1huZ9z}$5vF}% zrOph}mW1{5L#G!mNBb8pzj}c}e59!BmMMFInkUMTXvnA9j)~Td%FF5TzUASR6TM60 ztK0z7H1JlJ-R#Z6Td=^H3y3vGC`ZoNW25;CoSr`vI>_wD5+cVOK7u}ET`yWRw|fiK zDqUr7;r~U30DZSsYeK~2I)U^ra>CA4h$zWu3lORX6t2czIq)NRmZWN!<`?>Sg|`FYGSohRdR^MZ<6oHm{JJX_4% zv0y8OOwHjH@{dqMZIDIuwElaoe%`;ne5Ep=&!dy98ht&k7Eml?jU1n(huWIqW^U^8 z@|i;e>g~)+Z@q7kydC|Ut&y+$1P=yQ9ud;JNXIu4{<1^cqwkgv=RPoVC9Qvh1EWZ^ zAqZa*s5x)=0C}Xsj^ZR3IMrS#wRrpE2UBTNkay)Lzu#1sx6JYgT@AUoOd$(nPGNdA zZZbt_7}Fv9O`ef>0e!XPjoXJ8#wWJS7z13pI4>PQ?0OCa#%!Sge?rX zkzXQC)ZBH3ezdSA=lFj5SG#LfNt(o{b_kG)6Blo?lgNF|R8bp~u^ekdxCt48HU6Wq zw|FdWvghFjcUs|MwxEezO z>R+Rfk`3)4>w`sK%@P{?xejL*Y09m#V55HPp~qQUS@eyt`00eC&f#5pra&DH3ot$x zV)bfG);Ag*azS}R)%@_&L`+Cl;;Pmx1txTI($*k zZuBAi_1-~ZwewYAyGz=>`0!p+Xk4v2S&Ne2E`dv=MrO_hr5nacJN)-~sfhV4R2mSErvVKR;?*2m>VC*tC6QYV!PU|?H+6|IQ{Ljk6O2y zuV#=)GL$7J&3x2S%Q4qs{D>rv?~f{#pLCztUxsWw-aGVGHFvF7bI0JKQFq6E<;pru zynpsVKb!jo0#%Mvw|U#fooFYgIte9_VkHq&giq~CD9eS(ai)&rCdZ2XWGza(xiI}2 z;;FNy;~o>7wKIbMIEY#z^6ufBVv?4mEIO#)-x)^IP$uSLmJ`Wpf0;zbx4E7>yc|Z4 zebo3vdKGQB<^5iy=>2!dc!`J5AvPE#_AC>Dg(1p+QXnP-&~{Gf<0$^}4>8%9mzmiPpzAU!@?7S?j8#(e;~NV^OPK^mZ8n5DIX2V{3;>BrfW{-(+xOjGtrq;gAr_MMlW%o`fT z?(6}yeWWC5*$s(J+--Nco-A)AT8cTE)S_)Z$r&6V!Zjy#glKF!MH<+@HVvM+qJ#xi zny1&DuoGa|>0(l{P9ze-lnhGSC0NtEnfplo9KAXwqf!=>x?a1wMRM#CHwn+{Ba-zd zjAJ;*#e0A|;=7c2Wwh~JksQ2@Kw8^aZ~nzgw9dUQYNNYq|xpK0Xp=*1?%eZvV% ziJQJ^St5OWO8?AZVS`&Qm8|?*WPByJpF>|8mv_D;jEjy!v%Dzd5&QX^upPFEO=CZb zF?7fzDa=Q{dUW86c4PrPV@Xz+=NrxMj0SEQ?aUnZU=ll0G8Vd`Sm!nZ>wQD%n5!@X z5>N0drxlTYIa*}63Hy1&a`#4ev$V1-WyxLUos0!`L}Qlf+^%6$c^_Y|Z+aJBGAd~Z zAwdd#2xqTao8Fd?y&S7;$sDGnbR>5}VpMd`n7Q#J+U~J6TYRg_9beYFWn6ht7%bgbFaeLw zCyNGr&(MDr%t?oRbxp3HdN`KeCdSus#3UqD>iE6osUVpj^xel@_KgucpO_FHr*JH= zv8N$V0#OZ#m{rc_ajFJF%e8^w5URMkx)WbU3>9@}ksBM6aUY@eL;hvB2Y`5EO}BRB zhc*@c1&`!;pt}kC{OSEo_pS0#tLHNhX)*2IaN%B0%Y;i-y2+}fXvIkq5+=GX1*`qn zA6|44OEJI^Ib!C|8P50|U$mb}XdC2JtEmq9n&Mi~pAR#tviN!5$=+pYvwl)sOl!yd z=0GQ;N3r(yqIbA9NV9NEE5S%)wnOqFcfgY8cyDFBd!|jQrKy6-Q;MYMmB=PmP`0X6 z4*9gz$l-gG0#sb(oU&{&yDN_B<-jT+>KOb*ONKKfUp0DuTX%ENr01l0iaIxN{@v&7 znf{f7+sbls%c%s}{S@k+V1O`=)vq3uN+9+)_Gtu*KZPkkszCQOniy-t?x$0YbrNu3 zSNugNBQ%GnX!#3yMZLzT7#75TRMM&a^eID`HNbL)0<-Rc>gW(_Ep@?)(IgE{V_?_e zd%;l_kHOK(x2PEpJNCyM@~`#%vN(uTV`f{1IGL0WepNEHr!~E|Z7%+uTRQrxxC7C# zj=x4m(#Imz37@6!kczoGK|&pdJWn18Xf5PDfvp#gydRY`&b{+x62pMVkdIy>pXA&1 zTdz`0!m%N1?Qh^Zkd{ZT$){}U_P?Wuq1sEAA&QTN11?}N4S`2LZDPtZ;F^Ez1$7aCw>Fo%({GL!%8^F9 z+pYUS6|8b01yh=D@ANktHd}ZA`0D0eGg)pveqaWDxU=?Z)W_pEet&+vcL8VB!yl67`B0DLZny_i ze}jaJ@8Ll->y3=fHNUM&z2puj?PLWOSr;n<*%wYt{vOF`k50Qb73=p^Tm?TggJo=e zwY5%ZV-+)n^`zr)?0(W~|2SD0ZN?lA_a$c4+ss{O8bx!;I{sJifhP=4*Ex^c%$86- zSpEnfXjGW{Q=(54`{JTWsy=Ar5{GP6%`yN5R}Y8$U-_0!_9{3X_Sc-Z>ZNI;;3N4g z2~r0S?S4Xip&HwN%B33-+(j%uc#*oisTSw zNbB-USITS;>@5|{81UwL7~j7Q_M}Hi7;(^sk2#CycOjX_`|T*L%N+I~pd7mR?erJg z%R84jS7CvQI2CU2;c!fvin?KYay_n&77g#~iMh$#{N)*|Ab;>lUV6_BOaF54HG6mokTf;EOFRe6ZRxc#fel*)a+hYnhUEJ@A);(-GML7F z-jjoiga>it7C3!?buTqXQU7>J<02kQTI>4SA2{~1a)}S8NWngzZj@dD0^HHhVhOby zuw6>D7g$>$DyZNvt`CJNomVh!AG*Obgg*$qP_L|GLYixz{CHSoQ){l*hIM&8H~ci> zTuMa465OGR?nroZtvQDlXuF8G;suRfi+SNRl=Wku6es#=jfHp*t<2Aus>VWUqV-=s z=Z3=&Kwy!2%n<8#Bm&z;fmCSfb@4?#Ibo#w*;#B;m^+{wv$h6PM;ElIdpXF4#v2)? zb4-zkaL|-6h((G-?a4ky8*;A)^_c?~UGq@a6uY;b?%+@_PT6O6su%k~=j6lwehBtX z&%nEY^?qmmlV6<)D_K=&^(l8pfC0+w-|Gz@bj{7Mm+|k{zclY(4Gr=1p12X_ybMDq z6kbLpPWxVUd@od;NG4^-B{*J3C1#Ol$w`@9alSo|77^fiNvqw;kPS&C``H068jAL0 z$Oa4EM_~gI-;*MsJV00EK6(mw$|eL@Y#+`DbKwn_SrToo4;ZOMI`zz`o`tw0D1Mrq z?-OH?w%_XiVJB#fLUN}s1p!RAkoB&mnHxiL6)<4_19AnS3F>adyNXKzL46{oTQzhF zseVs|n?Mlmw)xZMts!el$($edIwStk6Qly!ol$<|N$}s^iJr2S!SDe#b`gqFa;|0H zlMVG0;BsbSPQC-z2C(qg?c(Xc2XmIJJE@#ZoP znYO~rEq;|9{v+!kL;vIy^mxz zRl9H#lXi@Z@FPp&x1h>iWVUF^D{IEEszv|RZ>ZwxV=3<3fvOEgSvI^RY)g5(V*fZA z@+2%0W4-77`je4^AY?X5eg=j96c6AGk}5u=C6c2*VtezJxtyTf5{%UdwveF!b*z9~Px1I_O-pz#mNvmn(3g_Cpkno6xYLpRFGU_em*HfELh3tA;(z z^GI8yvejsbg4ndLP`xk96LSyWrk5Nue5#*ciIogpwrWB@M2z&VsZm9bOk3VJj7Cfi zkOPr1ErQ+D*35d%GiWH{JwAgG(K0RzvZ-eHGp^s${|-4GQP|g1n)=qw!!@paGDG@i zkZ}lP`bM_z6NE1+XdRN*x(~8q5jxghG`o3L7YGtHzY=!zxem#t%vb441rGV%6fu7g z$U7!P0h(J7=8boQL32sZHzn;`Sgn5l`pLxDmz|3x zUSBSx_Z9ZD3BSxjai@((0U5WQsHyH8Y`Z0CnrklZq5h->SsywP-YS2?o1JmZck zS+=o-yEkj>kl+t`zhT$P6juy6t*Avg#7L9FCwIcDuC6H{kz~vK&2(k$lhZ!KhDYn; zA;xNhQ+ZzhwA^inHcxYDPYWdGq|-6T*qK0(^#Ek(vB2B{ZeYu%rdqP#GT)! zsL3k^8k(Uc&j`fz1WYp^e_Ajmll=Y{fRWQ$SVS`|=_8mlN|Gv-n!4*?_^Zl#U&Q@v zs+0x!p#`P=BN^P%esI7nD$*{A`5f_OF8yNv%UsLz+&k$2H$M+&>{<|d1NE4VhL5+U zj1-z$iDd|d24;9o;SDfY=QU~stH=o#$59QaT$NhQm) zDv`nRzt_Qh|KA#;4-PBnQP!_}3S(OA%b6Uou&1bECv;|vz4B4}oE>CPO(@d&9X(r1 z+kj}pmcb>(;3^tVxyAqAPHxBVIneN3bwVj}O|be(Yt!dgGw>3;zah~GuSR-Kmmum` zk{n0v^{xtK^8I-79c@>f_`X16qxyIu1X^4KMMXoUMD^yWl)-aB;I_o41gZ7Wm@2A7C#D=P?5V+cA~g9KWPTY=tI1PUT^0ygU1k0~)^u3EcW8VOY zUA};8sWT$t^NQIdn2E;1caEm4BS970v-?vhQg?#1Kq#ijYG%zH$@X>zcrC;LU_1&2 z7uyhPH-4%r8Epzkr%Y#g1^83gvFP2`G_g3P@yGk0J6foyeEi7nLy>-9IMU9g6KBP= z&&pYMoIn+;Y4miZ*nCbc+FKRsfAoIkejh+`$};{0D24-4g6|$L1uJnsb}sc6-y6YK zAuj>`nh?ML(T7h3M93Q~;vTp(GpPmlod;9&Eny5(c2sJM(E8Pn5jF%9fv69?Qp%QO zEkhA+HQZHc;11gAcG*h+@B#nci$fcMEG-$9gXEpczCpm?#i6Y3HMOMDK)rT7vC z!Wi{cbV4BCJa?vH`p0{Z#a|Y!ZGKzd%XiV%D@@2vd#lHZD>y%)4cz7@BJ1*)=dFiy zjr`*H@VHe0LD*`4&;h?;K)Ua-!0a3L^W6)D0%Bc%dR%G!QYta|j8ludIL5=N04hEL z3>$Wzyy+dfR5KZ}9S)?fSPwLpix6^~^;)|SKA_qJO2tus|EMNW9%G>jt(vHaiA7ouu5BXQk4%m6ff_K6Hk)fMu+s|4@MG)vaCdvlKApC4`-8ou69d|e2F(V7 zBmp3407weZ9S`!w-qMc)dHn9Q{a60ZZEeiy6J2ecg1SyYD|1_pzkMp_x|G};Svmkr z9RR@&09}X7LOcG}n?T2t;{Aioy*u5jH_Pj*=KaIv>AB$C3ZSUgy2Vh&FaX=Hk;rc$ zs#_F|EG~)lB6HK-?t__Kf(p{UsBCcuE@V z9nrh}r40ar)+r+m>XxXx!nhWM`#=lok+{B^g>kcj7ifaZtquCI7_V6@{emX1e zWf?I*a}+gD87mFa2M%4E?u|>|g`8smuT~3FsTH(b+3K~khidf5sN#d$)`fg%0Pj%? z)1?)(Q~B-shtcyH>2`%DtZX+jvmty|EzFEo&}n7w{f~lIMkhbq(QfYy0Pi+bcP-4G zR?to5x0fHg?~IB5xY|9)O@{E>wcDn_fxLmQm2l?)Q+EOOFJ_5uhWoyrrb@du;GQhV zIp|U^|3g${w5NHrhE4m4yS&!sQmWL9n+`R}j*{Mm5*PDehz-9T%(0T6q(B1^_lqEU#TdvcgYfbzy zz59SWPfw}~{pcKKPceEwDa=%ZoDiXupr@y{xv5jo; z<_)j+lz|?wOCd8U84SRJZMjd0FZYng%jqqjcyMj?7syE0%;OHa6r`&pUU`j44?D0> zg9<K#MH865opZaTkM6#wMEYmod^yhEn6RzPt+f=`iRt9o zHkqRgVUKp z>UECO;>4|{pB1T>uOFl2%K|59zP$5~Um>*Z-q=?VwgVk7gyrBVuRGYaV$%M1CATcA zoiEe_2b(xWH=}sqwqqn_J(-ai-tL{>=3wYB-Y9la#u0tbHkq;OXFjF`<-5Ne zrc(pYv91 zh*JcLo%Gdy2g9P&I0pGF5NumWWd{MoouNBm$H1={=g(Fnr9tM(ONXTR$)IV;f%Cs* z)r)h~`*REVougRDwYx^lLp^g=Rs%y9_|kA0^yXJwi^w1-(A}iaaeL0pa04CyCZ2PS zsgtqXA)q^MLe1ub?1Th?j_Du6Q^-op@a(luyImlb5SYcsD~a1m!+?*YmFE>Ue=3R& z{+v|wfRCkojU)A*gkiWTf8aCuQSFNfaMztI_%4B9umAJWcpNbu4fyFZ82doVOGn~qUa!prxKP(HF)mEEXNEs*xXnB(+7HpW5_~y;oKH{07dSj7Oz89 z)ojK~bHEv|>am{_^6F+ArqYv0)6eMR)lc`ED6uM!$)hy(i2)kYpINliP1WD;{M*o8 zaXVqqdtObwUMgvx!qK0PYFjcY8Vxo}yH2{LVXqAe@xiY@4w#HveI9sxTsyaH&pc|^ zFAKIU*jqQm)LUVDHjWIv^_0VVSf)US84!W2msR7XN%%Hrs@3hUWQ|&Lm}BzRw+)4& z8iE;y(YUYayP-vHT{kpyR2@EC&yxf1-453})V9`R?zfzZGJoI)M|4HmYUgH7j~Gm# zPjd>N95)wt9!<=e|a}%JhDbR2EQc5@AtxZTmdnFugc~dVs zqx0sLoi=>Uu|1&f>B8v1OTx5gY45o25v;0Sbh$N96qlQOaMi+-XGiMv+4XaXb~K{T z9hR5k^RHXBkw*{*^>c|8;A;0}c)Gs(yW&dGM@aQ`meSd7c=w%2>#ODw+V*Eh=jTlh zo)rpsgYQCHMTlc4?;CCYIBDwoT87C{JUoC$p1*f9j(3B!L#Nt&=_P5!6CC81d-euO zT|#8rBA}9@hUK5y`rh&!G22C#cT%oJS|cQjZdKf~31U&T4=~i{=S^ga(^jTW$IX{6DBa_qXEZ|E zxqmse(cB9funkWv01qnt2Ikl&9EWl2g+#%7o;xt$cTdPOCP)~oA>n*|fKE@D*WiK# zK2Eb7*LD3-DS}t@31Vlvavoa4xYL^({^{Xr7pePRR{N4qdS;SkgqLjViD>WO_R?(s zAxDAHu$1^;%G=dEEV!!k5S;|n#kXq4&dJy=FMUZp!tYsS6{@nM(o(?IwJIaaKDYMA zCo~Qr{>vz2G)B}TN*L?!P|n*RE=u(e`5aJCE6Jbcw;)7LRqxiHoisnp8V1M z3xAZPxQmdTT_%7_Qrq*7u<6LuGvCuwg<)o+Z~MpSSf+n`Aa)uB7&7W- zv9*bU_?3I~S-6pAyTHbeQvRtHY(e6ial&GYrPWRHkLhd7VGyfeLICbI3_(k1^Jal{bZFl+D}H{4Z+0a@7Y zbT&nO0>;2!>=KiPAX0m5zt2D>n+tz6x0cE)sl3Zf_TzPRFW+_m$+K4u{sBG#Ud)h1 zv{U-NwnSW*=QO!w7Xg=Itqx1?lKh?_$j?Kmn~XuIWXXHctL=P9zRS^yFAZ(g4W5y+ zg9Lcak~lip`L_<8{Nu8N)a1Q_4cX!!dvR}?!RejpJwAsuhe%EG$K7ShQQJ3h zZ|6xbiU8ghZ|t7P6u<5#GkJ$o_$~Yo0*70+j>evu zjJLP<4dIm?x2F@!$>opH)~O+?ZBhZ|54k6t(CitsM}rG;^@XD95PgUF=g=L##gmA( zbzc4dT-@l|)H-5YA?oayz^5draix||IJ^3}qo>u{``FO!H_<94#vhc}QOF#Dja7h2^T5+EF%mxZTX64stt zdBx*TvAO>C*V5RT{ADFU_UF!~*NvI{$zctdl#+;lvFN36k&@@3Vdo#Eu7s`T9+V(_us(}f_x0~}+0ncfjrAO#`f;G_kr+xyiXpeOY;p;0`-zO;KQmhFq z9Fjc*eG+&*;y*w@z4_yzFG*9EQw2!@Y<3Ta&dpOPBlF@*iO2N@pJw989Z4L15M6hD zuVg7?Sn@HhG-3(KPV)d~ed4XW^dNpsc^E=M{sf&c<+!=E<^O$hyS@;v57j%qy8ks= z=JigsX#&pfiQgZyn`{i%UpU$dvLD*Z@-g<5Iy~{82dvr0v&}St8j_WlRev!?@I14% z@i@J;kwCdbe~|Zs^*rHVgw09wf|SHdc}sBx%`57Iw#`FXEEACbGIJDfD^{i6{JHCB z9muzOlfO{nb8M`4gtspAgyssMQAXLEbliMMJHDOlkznZ#IKH$69EtLKAShf~%ucI} zj91I3sEBTXqsVXAI$ZC!pgG(}`XkzzuA;Inokp7L?jCB$r4Wca?_r;g@VCAQ06%;u z&}Mr4aYzNyZ)UG!BlNNd)vkO@5wF_tEKtDQc_K;K%GW-YK2Jl+2J(QoKl^YL%CQo? zdjP%uv}^Q^PlCNG&tfa$oKtm|xT1wz2S{!ZnGuke)0OJsUgl8sVR4g7i*B&4S9z;Mh`1Q3 zf`aTRI?4;QmCTc4JRx)xBg5DkKc)ZrB8v;Vt>0bnwp>+k=I(FM^+GQoH_jFL2N~}w zInTVkeX55n3U{P&JMsq|p_!cZ)p&_lcyi7ol78k}*ps-iUj84iT7phGmulrH?TZQl z!F{R^hNodEjvLT9jqv{hmOyF0J6U@*Ome<2Kj~g!FhYLGok`E!nb0hI=b354zaB-f zA|8*%B<{arMYOvVi+lA?%3rrE7fcnl@?7;=#A2JT5_M` zY3|R>yL=RtZu^vG|CDFRIPLkbgmDA>9mVrcW;)ZS8J6-q||d`e}n?gssElqk|V)k3z+q82AfOBv~u&m2Vo^_tzOs zzo?ne=C-_Mv#QZ;PSctxZfMQfk&znWpQC4s(X$wGNuOK&VgG=`m%tZ`~o0+jWF3E+@k%Y9GFM zN-XNu;d<1lSzeE4ShJ0SJ+P%OMPEFERfB%BJ?O9MK=y^&9~T>6S`=g67wVEk_t+)x z3sK~=-oIk^hAv-xHKFMx0l+%pEyc+Y6|DQ?lnxlLn^;`cthZ+$##`|zWVglD`{Fn# zK2Pk3$L4`AYOal6I9I4Ij3?9=Y@}FpLsgK;K#lTtDPCSa&8Kmrzx?8T(S#ebMXewH z@-;h)%#Zb%27}O%z+~;GgJD|ID(Z6m)ve7}K@+z^Z@fANn69fT5Gy^hc(4?=!@**L zQ}M;R@yPmvU7n=J<5axR(veu#7Vlp*=C}QVOi4`0(OeL(&vH_+UMI&;8@@OUJx`)9 z-Wc3wK(#Nf&)myz{;j|}#(tpcVe@uhXzFo2svZXG^HDvXYx9~tz-wSi6dXXWH;#8Z zh~QXzy@6Cu#J3+z_4s|g@iZLXZ$Bh^yuaR9e6HXfV2a@;wFgBMH9j2o<2KzY<752S$ePO@w-2^)z0p+v z#iJWHLnl?-126S(v7tSpKr}RDq3$98*9Cr+PXsT!{7HmAj7qRhhAhIXwsqs^|$UTOYDd8#l;z&nK86OvHD|}5m9R}ZgAkC0gRN!NBk2KWU&&!Aa>gI@1Gje$O?>xHkCE$gAD{(1URF(!PU z{vLbmv7tZ?K<vzEehQ1$u0O4JEW4m~n1L%8jgF|R$ynJtUl|K6_?Z(}+VbP1H|2e*R760R( z@vryox9#M@=~>#WATus@H1GJ&o&#BRaNQBXd2~?kz#Fi-(uD`gd!CyemtD7Oj7Wn3 zzp$Zee45n3UoI_?3k{HI)8CHAlI)Se*gu{$t9 z(%o+h6C9h(XF=tgwXc}o6srD}KSU;p>mKLDA;fG@^x}7giE122#m@;mPoulil0}Mo z$kn`;!u$B>!{yTLChbfJrp4t?aJS<_Jv?p{Vd?}Ie$RbT{n!q zyT&H0-1}nL;rh*b*o*K{>g?O}+;q?uPhWTT{}IpX*o$D9)4kt{q?jbr1Ubvq31~3M zktwi*n(tZ3k=mTUjw|Ka*Gq)&Ps?<{zDUHUmm(ah6y{lS0t^!*nETr_8>bSdoeW}# zNBsUcW!9j*AP^>s#ACvqGQZ3{9cLWKSh2rchE>z9+!|qXtDI()k^WQn*|@f_5lo-d z*?A`Y^IyUMSQ^)3{Fm?RkM)S{i=YAhLP-PvSdXF#)o{eB!oYhi@n!EKpj>t&73$>O zkumyLK@a|zT_}xv!J9*H!+U{n#Jd{x`rfR1{orM}_FI=;<1%bp22JhpRY%|TxQ5V8 ztKHBjM38vaz6j+0^%}l~*Wq)6u?>oYC}LO{7+Kf=CJGA!1OMFePq7--v_X9RlQRwu z9%``v-QMoceBSAqr={u)d}SNV-EUyrt!TxsK>7-HPJIuF&}VL%u9T6%*3#|8+sW)H z-a=*{vBE-T(=ISSBn$AP&{e!K| z?Y$R=jyH`sElo=OXvkj~|8lE+=bP58_T5`cNC<<%temuEBKc5JId9BqQC&?yr2E-J zjogb2g<6r&b&?KaPP7x>#8G#6S^j_mgEU9zhj5OaAX!Z}O?ya=)85_N`U#$k>z~tg z{R`xOtXd7;Tm6^LTDAVmo!hrQ=YRc3`5%jX*{}Vg86E3s0&|F;mHdvx%}$cfoBQ7= z|6ekE-}(PmJDpqA`Y*Tc-dp{=|3AdPtRGiAwxUos^{~MkFKTqWYjUxxIn#Y{{ah7Q zx2>AbR+GclyKt@|;XV88qV~2Oex|Me!t}qgnD3YVudUsx*Z*4kO#eT`zcp9?E1ry# z5ea#V_RgYI*dSJKJS180l8a_=jSZ6jxB^FybGjw@rK#@`)63nnSn{JHsjBG{8V4yQGiY(7nWb& zLq;wm?iKl>7Wt4$CM>#Ae>~!u#XW3yYip)I?oJzQZSVfDvE#qmj(&Od_1)vUw||QY znqSl%6lEI0IU>3k6C9#pG0i8@l>e;J_YbqYn_{}iV+$w&A}UzhYAN8Y875u&b}}f7 z7;~oipC#u=BTH?^X;}=;Q>0>tAf6EHNl>R=yJxL9Yo~3#eQRyy?(O9h64#9$Kn8r> z(LQ12fM%}c9Jr%mkaaH!zNu7hak!M`#q{(noC^(E)*wO67JcGZTRAC;N&EA`@rlU) zJ~Q$@>Hq5OyPaD7*SnwVzkl5N4~_L-o69`ti$tbydZ4huVpTD4nhb}@Ta_BPX1#>Z zg$CYc|KqBcmXmRD*)C6qgLjht|Em3e_s&{P{=akYbN#mu^6$Z)mzTK)$U1nh=_`*M z46>7PGQNx=Wbt=7{kI=Kr>pU(jjeL8h5vpXMH|z}Spk=qCrO^AgLo(XJFzQ8{Gi9z z?SWns=YWL%?f&@NC}P98ex@PS|79^{o@bl}x%xGMf5iFuFL7g<_q0acBpnY+STt|} ztHuuPYI^pJ3mXjL{pksDEYS{8tsJZ+u`sw(o=Fn@dBp|p$7u$xDpKYtUTb&Em$bhY zGU?x>DbmQtnty$Xx#K~CDtabIYJKLfTO?psi2z#yU~U0`=&Aw$P3iyR_%KZkT%$&~ z8aRmKLqXu{rG!ia;xnV4X)(()W}=yI9jDziBbJp54UH~eW6ih<10OjP4~qBUK1Vz# zamrv`jeHQSW>l>?(TeYMs7aE)B;=0|C)Aiac$)R8^QVKN7`NibML9w9=Ns|rTBozR z+_|;diC-LUMA7mx;qZe$KiS(n`gwngX4EIagw}Ka#p9jrO&bax|AJOqyGMXD+(e38 zlkUcn<{(~h@#!nl;Mk<)1r=WS*1cb*DT@FNZ_=Y%OZIGCWBblRPC^d(ukCu!LoXN-dnR&+Jx`6wAD*Moyu ziPDp~kqT6G9)`enM^n}e{OrSwJP&6 zc5XlcFexqc4D9S%)o<3YFx>WxYZfdX zI5_hI%Q0|?nUt~pcH8fHCG7fobLM*<`qXjpF9G4dKWFD<$!Sh!PS%}^pw|KQQGgGo zx^5q5;Ojt{@#bg-SS3)LKtJs=b_QQ*$J-P2ROOOLCm26a+bWFGSM=SIu@`S91E`-a z)s5*RXHCI^8tC~w z2LXhWwu|o;qRLsPLz>dJA%Fcynd=8D^3+Wv7>GNmnS)tgj=xXSk&qd!{2V6&xRd~? zyczov?I2Xwc?GS54Nuo&@Ej5Tvs|DiRdTvMkxSZPWB+=X<=HU%d%B!Vl;bVe^Gx4O z1{cX?xy-4H{091NMtpugStg*5*4Kht?98sMXvTc2=uR;a*SnUTUM8k&nZxSs6Zkuo zX>S>xSMDxHB`p@Y!pV9;FMxJcty>;dY|JCJx+GJzmvtOm%cclWDFaLK|*X~s1 zfBN~^{_}4y{~xB~(=`4LmL=khOI)?jIP}{$XDwah_ga6OGxhQI1GNf3Io;f6VhV2_okYLruao>n#tH z(RGyxqK#NKjPl3R88l6r3Aqq3X5q)R^@&V$-P~1r4_blis|BvNKG#VUkV(LVr z$PDqXOg@gclI|I|BSEKR>59lW!dr3DbPJ-1%Vmm=iS(T(gK1jQOHZL|0D(QD2VI;% zi_^tcym-0@iobXQ2MrEyXA$r+zBo(S!+_~3J~m3nU>i(~8_C-}67WyQ#dIV;=@_Q> zPm0Oe{g_KnibR3WqJ7qDp3wc+ww4%O?*&2!qGY)dd&Q-P=8rImt3HA6fN9*S1RJ` z0M=87&YJYDb?*q!w@y>tvsh%dn3$53VL)R-T_GJj{lvKGrX7cmtc2IJ9RX^*fF|69 z-zpwXX~}1-*fj+6Yf9$LG;K>AA_8%|rhhu3DUXs1&?Djx;RGc-hpsrBUbsxNENW?1 zFUzs1f~9Ezx1HKSQ;Mo*5HC@<7M_Np*7nHIPGWxhDP&?D9bfECvN>Lor9JBm@j^hoq^NcPh;&Lb~V+$O9L|t8>lo zvw~NKqxA6rmpE6n#|r!}ovvy9wI)A|Pu5r0G1~QxTy@rEP`Fmm$YAI}%()2WE}xRt z(m_Nvl0Wc}Sn})@5=@Bcg$`{PaWk9!o~Y-ta~jbpL9;lA?-)oGf73u2!EwqfdtU^+ zApWptmn;PxB1G1#$_M}_apo)=wZuD6)~Bnkh0q52B;0zNl#oYKS-*A-Yu=$^EtEq= zapp^-kDMs_S+Dk4ul8^5|0CA6cj*3emHzME?K{=@zgxHNeD?qO?EmvwtM^%}_gSm= z>1*|jgU0*Q=y_k5ug#N&r7tJEPpw_mHRXN!{)8P!;#JPI_j+o-ifm7!^Jt*3z5ZYx zhn<`x-Iv6)(@q(`W=G4-qggJDI&Ma1A6QXYcR{jv7C1IRF*b%grJXQDtY;1<=1#y zg>mVxA}a`kcb!rrD~ka`2)YdEB53T7ikklqov>-|Dp+jyXAJV1WW}LT;CR-m4Bs#+ zW|18#iI8Z!!4zo->+lQe;=nIk*h=SdHtO<{bJ$rtDzbc1!?kPa?y4I7w^Hb{pPv@R zx-K1l9e=>Xa8Fj(2wD|eTmWrscn&v`J|z8|0ygeXb9Tw1Mw1K~=8Ew=HSjfEoUR3| z34mot`Sp&Q*MZfd>15GtYgUFZNx-&Fa`7wU@KR83+g{!m>aV zc6>4|FHeeBEyCcFETN6tPkY5UX{mz(=s{VYiC#L64~PXC8|Kr5)743xUnJG1c#<}i zed?HTHdHEoMfkxgWEs0S+z~S9XEz1}wVW3IJRMxNoa%X$OjrrZAW6H^3A@1ArIFs$ zYtBTM((WB4CC&kOEu4q^_ z_D#%sN=Y?uk*o=eUv4!xYwI+19d$$M5z4y|cJ6X|LekT8D26i(RhGjzGNW;qq~la= zoIy7&j&tV?&SCXsJSJ`#MjLuz*&8cp7hYja3w=XrrZE}2mTl|F9>5V;EPH{WLg1vU z_+(IYy?9Y?noL0qMEV7$1gz^%$Gn6_RAw84apGNX#Ja&bp8)cwQ^7n*C?K?n#|Y$*HgYfeuNWu{YNG9DndT{s%nQYIKc)~gBc9>#Ukk>qFc(G@dKYK;aN@h|P9 zH_Y<(%k*+gWAR^N;WRazqzQWPrFBOh4H%j!AwE~|bp9c$AsQ1VEzNQlGb=Y3!GZ+w%30~(ro^w*{Bn})6<5M;u!|x29Gip`f zP#q#@2D8iQXv9HiB$*lZ(1|XNCXJ^}p>2v$%ahoMTJiFk)8D<(TKp?Sd1(Zd23Eax znAe8v>0w%y$tnKkLhvR6Z&){=iZHap>Dc*gaF`QSfCipARtv<`T6iNbsLL(y%*d{$ zpf1&Ve2(n;?1A#x1La-$f3$VaaN?(T;{69-Ms%MaOPRK1=%#~WJyk6gNvirh~qM;rnxWsM~>RIndE+u3`(v2%=i zQodma;V;$p|IbQWy2r80M{iY&fW0)$oo9AvPbP|TwE>*jzM47FcLqqUlBJxI@Jw_u zG}Y2xcsU)ha$O=!Ak0EIfN+~ihzCq)I3d^<4XUp;ic5{zM+9jYIaEO;st9<|dtwQW6>;uphdr)TyR6G4 zv$CzcIV^OYwPgJJ0f{j{dTJU^E(}of-GQVktyzkpICvFKPR7N6_?Kcjdf({SWtD!L zHsiYo|0X16Yq;rI1&e%>SApg^(86?x*&4MgU2uF`o>r_~Tn;Ocx=lYGukuM?xPq6E z5a#iB58|in&I4;aw0wr7a>*y7&s1phKDe2-Puox}uKY*7^ogMR&JWMuGmgV1-yWO~ z+vo3r#ynA)LemJXWX?bA47kFTTRn39kG9@;C~fDVCJgcG zjO@;P9a$j8d@{q5Fw}JN&WEIU=pom;jJm98iZt@Ft}mLe^Zu;z{;cx;{O_ISe_PJ8 z?z@Wsy+Z$g`_|pNwfb+L>p%YM=>Ko|`u~|Z-9GF8KkNTLhkpJ$CUnDT@xIf!*>B9Z z96V2QsHUkg2VIy#Sf*Z$&0F%mGr7rdt5Kom`r1*W)htY+x_*sl&o_=at-n3WdT;(R zd_>>;?UQlVJAI4yJr~8SI~NL-u+n$6;JtK^{_8Ecs_tu>=YJg)*Cb3;pRB31zeQ~&Tu)DokGmM(})&l$jad0$%Fl(PbaPFKwRIWSn$gvIC@c(m03|@9}rflF|n0NYW~+SZK5j z8yGx!>_b4lP5jMtjKCcm0wpsHg23xpx)@Z|{RwC~P}!ktS2k9RA>iyZS7D@7o|K3q z*o1h=K-MbN;A}aC&FL7rivclsIsS8wdXeKvX+j6(?N6bK$91Ug>*eZX+FA4~0k>k0 zhg!;l2Eo)~EqhPS;a46AuQxFhWBZ9stbsXs%>|PvbmSZ~fzlH#vwCqx{9)5B3pN+B zf7&2Lx3@mT1pODec>Hx_4RC-XjYU;PLK^U2$?$>uU4bx-a8bogVDoD<)0urE^v6TeluL;k(Q+cb0FP*!aaw^HE^ z=G#cWcr)YZ7q4p-ef_U5b2jIXJcg@Hj9)gL$@AH)`EL^c6MA2~3oGDU``@iww{P98#{b+|UHfeR z`<(yvvk~yK5%6;m(EASpsyf`gzc`?VFI^o9G$UT%14RR21e)sNA{`8tU*=p-f>^Gz zG&#>uWhO1zzrMIwCSeG~k11)GfHp>=f=PzR_iaw~1@mMV3ELnorGsL`99_w!8bDL! z6A2ei#a_-PWjcT++G@D73ALZld66~jdEUxZ16;MFH~kws4zon-={NGj!Qel0)TMpPpO5`4Oxo*s-q|GR@i z4}zjBGXyjwn&2$wav_U77MJ_uVo0Rwhv!IgU^VGNYPmJhcEX3AK#cfvm@7b|v<7qR zA~AH{UUp9sf~LsYsKtqy`X}QaNY=F?ykG$7o@MDdrk}v;=p~%UBm;3ApgLC~Rjz7XYK{)= zkSo7HiRmTez3BsMX;wFx-%X(Bv&*N6e3HBzNLY?m4#F_$b=d&4f|tC|w!EArSAKex zLFMx(jgyQ)G&qA4GdPm1Q)otIik#;;DT9JHlGv)!?U;3!eL5lnoM|KG$WSs#FWN$q zPBmXxYEz;=(;XMqYM9Ls482Qrtn=_+?65H7k5&>_x|6_5VO@-0I*X-AV5-KxQ%>1L z2xEYPV~DomsK|TPkn7d_N)QfuYC|miG3m;Ac0^8_<&w+Xf|ATQI)E9q5u zgv){iUvdSCYD|e%;nS|<+ny%6YAQd|69>tmof(z}89&r6I6&94#r87}x#hf6IZ`L( znv8nk%LT87ACha9np{bu_!7HMSb@~0c_JuKY^g13_7axoQF4-L)?lXeLgHOBFZZi= z6rvO!50p~`4H%o43a95_6$Y0Uej0DgEPrA?UoG*}e1>>rD}*G0i-VfML7hUeT}%ws z5-`w|X|-NCLQ#F$gg^V}lc$sRszskzbWn!*F{k(RWd8eYG0^F48|P7LMvL^)HEU>) zjn413lU|SZP3bjsj09V{#KVK-KbFA&^X1cV!k}-6xPARd?fKR4wl!HA(11uCF;qx+ z2LadeBE;@YGVGmkDw)pRMr%RbwdYLi*fN)rZ=O6L$xW@}pGls5;!3RzilnD>)LO$@ z*3=R9SfMbw-NaARcF5nbndgXqA5434GTLc|jA}~aWL7buy9tBP42yGNxXnC3d0Xm7 zk!x8sxUraIh1iXwUNZ6AIs8?9=izob%Xc4W=jTCpi)W!~P9Fng0fc1Nt@NbymZcd< z;;3FuRg96G{GUjqk|1M~s{BPT~`xo3W; zNzl{Dyd`CQhGXEoGmndpOjwlzO_c4{h`wBYQ+I^zj!zB4dTSV~ej|BV9U#OF&h_WTQ5Yl_iyn2hUNSO(#9Bn;V`cPpquYZwg+y?xe&k_%W{pF%OJ;AEjd!dH5^t z8)f>pDHIiQb~p?cG0H1JpmVI$6u`m%k_7&noh1^V%QIH?Bk_jq>2Ukm{*MPO{5?2& zzP;H+jF?LuYAHn&5+<;x0Kz zPv9K?uJ;M5EKAQbsdH9VF!C+1@o4Md`P-qR+rcGX-QGQ#m-P01p{2m=gCb_rGJP7T zc{nLX?*lPWX@>;jkSKd3H*|D-QyjG&a>^n?sqeRUc3uZZeI&J=S=woO{1{kT(!zXD z9K{DeMGW1>nXNj-`6zk_n}E!~X5pTe)>P&l{&jY${2<RJTgo-C^(DukFT3Sq$KO z!j81eM%POBC|AW2F(*lfb?D^Mt31Tq%ooz*khssmrSjgT^_d7?bfyULRxaOu$0&q9m#neHf z`h_{_~gq{fUUc7hYZG>h>U28!7lyGYM z$u*Ja#rBgGSnqUh1~0s$LxMHS>4^w{lS-vo{M#)i>XRbzmI=~RN_;FVgdBqaeo!4Q zDqbRtY|ajly-YPuO`;dYa5cv_c`IW+Nk^EqC0<= zZra+iQ2zLp&OVL`5Tj`SV#mT#&~NWo)gFG#>1ajTwhu~|`L@!TxX-~n%riD6Dp%0) z%05wzYI5BzF~h81LyIr5{{yLMTb+dkSWyg*OL+GkC%ylPAI6>4YS%OS`9PSsH9AX& zaO!;%iI@m0+d`9ua?`!EoQ#W0gvC2e;)fAD+?3u&{%kh+n(PMZHvvpr<-@YWXOl+U z7I8;{@);DKVXvYYXadnkrck?LeZShiV$Aea`^s5y5eB}Nu0l2|IBYMqXi)c3SW_F` zxh3Ki2Fax-u~XA_;Nk#+KbhG}%hgYI3S(0a)@fjP-TF59MLlVUxW_lCc@EQac9Yld z`Y);bLQ+B@p;cBrryaJD`@4yKM$|Jw>Hk?$I=6$-*<}frWBYz>pdVz*aU9~i-fZxu zF!ijh6KTz#33c$)pUF<%tbxEr_${gV9_Ivl-o71sqAa1u#4=y1m7QJ)ka+0nH`|nBb-cyGRss2y^ZSB-SLi!2 z<1?Yp7oEWfhj#rqPpw%mcA8(b+Qo~)+0rUqS$JtE4ST+zw>Az`^>I5(#zvAUB|iQ- zFtg|E#MPueNfC&{ofWpf<{?$wPMSU6XwIC5pm~{e037>6-@C%cu8LDOdqqnMQCMqa z6>F&zgKy1z+10zm3=M@7)+-Pc=d_xzk5#FH&e*6I%Z4!g*mrC+Et_F)vhpz3FfF-c zLp>=1Vp0%$R3(b~0fbicNwQW4TTkzU7!~+1vuoaT#CkFpOyJvO)j=Vsq? z#9LB@5V0q5&9>pY6?vL~86Ne$!pZhFTFmJDv}TPF`V+Y4iqk9W3WvosXSGD1w*5wq zG!RK&G%?8-F=VEn3zP8$^bQnJ-t-nvI(bW6N{6G#Weu663MZe=?BiP$Bh=)n!M<`f zzv&=Ak-RY^mg8WyoY0L}oorlr*=2$-nX-5-z)i5?%km~wuY@X@)&lY34#}_jPU%-r zRh)?!ej9=CRjQh$WdoX_CHKz>EhJuD;EpXk=iA^Y5iT>rWVsvJduB`~`-^ub*k^=W zv{*CA7`ox(X(gU+UMYL)im@U1SL6^@hYQ z`i0+XP+_*xhpMfa7@E^|Cco31XoM(Bz6i3K_YjhnU)H5L&ySVRMz%zM{oUpsq+8r!nPib_rcZIaVL3Y@aQoxp z)n&YKu+RHNu6Cd7$Ka4N9V>mZGSY^x%wR`PX_g28+TJgHckkL!&7yey_Bb`Emzqez z<4aefe8zHj&x!)TN@CwBZSIj?=fFZVn6*AF-VsDEq~v{hCJsJ8wAz-&F2r~c&|ap4 zb3_H2u>461rnzxC)qcc3IWfDr8(W9PYZ4JA-q`Y0N)q2pUxC(op?p>!KZ7yg5Gda7_gefI;ZGenR3%H#ZNTMSsd)+SMAI8-`kUwVJl8g+i~ZcwRY$3 z*Cg?*uB_dDYvyE-|O?XpBS|cfxd>T(j z(BdRWTQW!`5e1_0F5ASfjEkh#O=>Cy9WAYs2A|r90=E{NEP+JPo-*2=#oZ`cE0lxJ z2!K=}DihOhVWz~q*I+TA@s2s^1`;J-wy%+WG+UGL#3)})OrGsCp30hHj!1vXvcRTuP!2LPv=t+;>;E*pen1(dk>a{{1OsCg;C zu?uRziUg09p#*EDyG{WhX`9vWj}y*m-?LN=!eU;iz;?;`Ft}c@$)n+ruEt~$3bx`4 z#CAad(z#2b?&Oq6Iua3ak`!u##3KzTh9N%R*mN>TE7&ADE0Ls&v}`~y%@h$s>(7oH zgc*lN`x15L$%WL%bRfL|1!s`e8tGJ&^eBK$htzl?8pDf+Cy7LaT_oe4)1K%IXKH}r zJ!8sgIKT7R<83(xx5MIp-^~J#zS9!M|{WN zR#V{mt@2vp$(my+pojLATMhm5*XJDc)u!>$PbQ>^6HScJ@6Iifcxk%1Bh?d-C!>e1 z5?D`l#El2Zxn*U55ePg@CtBc}y&1j6LC?*?`H*O{<8q8rVrR`CIlcq23cvN>g6lgkab+RUhRK@^900>f}@E^#p2dyZGC=W=S#F#xpLPG;KI^lzP!`6Q2lGI1G7w z=&TUAGzZXRob>xyckTj~b5{_y{d9~7iD5QK#s}<@n+UH{+Wao zOW=l)&FnR(wj@sCgcyyaJGKoPiB@1Ka7{fgpBWtOEb*--cKPyKAOO{{p_%MfzWW+B zg>dF(RX`iMW8xZ?C&}PtoD2)mdksamSf#on7!!rmQFB3l$!=D|k=GGMD`R5@3%R*e zFhc!o4S;T1H5RV8y{PC#Bh0h%4q)_dGGNK%uPvKiJv=Kc%^4f;zv%ao9YHr5pBvM> zD>`+xbo$&plCE7ZJ~njLMliL#djM@p_Q=wD^|F^` zyav-@o)YVHf)vX9ackqVf=Qcjz|VXmFFAG8s# zR$uuMS`X_+NS`~uT~$Q%3!E9CaOGv$oea#8?`3nMFRs_Ee`5IIyzIYVdPE*X1weg0 z>|8mJyYF-$cY}fOQXS{LQEeQJ&F75!BcuFqGJU`FV3@qhhSQ-Wq(o}kDPo`mJ=tLP zDU!+elaS>oAdgb8r;K}-^ebb%E^}AVXY{Pq+SYWfyBlVLxh(Mpu6C7_UvOU3q?3k) znCUFffq3yLa*?auTFjRy7Ssx?$V{HbX~Vd}Q=sO3_bILO*#$_%`(Ei`(lw-L=7M{{ z)6KGF&EZ{9B$q53m>%mSOb!QiU6hrI3H&4EP%J+w zG~#ornyK>ra91ODzVcErUvIejFbHIZqtSdH2mb?Usd`a|yIEfMD4Of-&{?}R)8FA^ zu9kX0ec09V!kmo%n@)0~pl35m-_-0bp#M^5qq?(*8mrT5mW=Jm^Xs80c-8@-a z<;})CvQ4k1Vm3aGzNhe&$||)$H7lz`!RDS>DG3hx?blpLV)9MDz4ZLLOKCD{nls4Y zCmYRGG09#|jf!BY)k`RV0uiR-GV|dg=-jeXVq;3nW)I%p|6yli_fsPecRv_0zk4lW zKHI{1B{9ESA?8)RP$OAcU%ymJUTMCzx_WE9ck=amXMJ^jt#f;wD9!Ele!6% z^z2?zhpMxpc-eU1I31k-epVX)H0MXa(5Wip9$*b{B!;ooS1i-)c}ZTTrl?LOdP+a^1^;}w5}Q4**ht8_w_Q#>seLr%%sx}p+a*%@A@;Qzc4(08aS}OwRNC4kPPi| zkJ6gIa{z#Pe|&ly0LVNmXQ>x2t4d}|YU-50eaBZa+U!jQPvzwCH|-LrU0)# z3CUgE&&Vs{WNzPZP+!dT^EAYyoA^H!uX_)2Wo!3n((J)hNw-)Io;M*k1;6vv8eiHBsM%9~(?j!cf{JqE9(;F3(}|anULXla z&f*mDS_!~6+X4O8kYM)uP&#c-9 zWYxU8Z=T-pA|93Lv_}gwxpcnsH;HtNCgsxnyobo0RU+hX7n>>O+Hq0h=pJU6|io4XwWm=7O{%E+p z=?ePUblZfZSJX<|?$^s{8#%)j*yY6DUNT}$0u_|2nj|NZomWmY3Geb;zc3cbS%M6Y z7l{Y*I~L_dk&z8bPO1_#UB=-tvIvHejd^snG1n+$#IGdj#ruz1Q|Z@0gHT=7ql^5vJr81~{t*y|Sk6oO4_6pke5 zth4rY?E?&sVUo)LbVF$3e2mWcOMAUKmPta_g8r~9@rY;~!(mMrQNjV@ohIr{d zv$}S>?Uz-=H{yp6>2GE}#+T1C^HsilMwcP2^%GO+!Gki#ChaD{DtqPS6w-VQi!Zrb ze6$)1yZHUdqT~uw}+5BeFsCP)0Dl66( z8WdNASRasYNT2K~f2K|!oH|7nPMlBx3D%U!8fGGvd0WyyqVl+xl`kbhh^$ymC2=Jg zlCf01y06PlwLc~DTBSShKGaVt4lx1Hn)Qb1ozJROMS6$pnN+nIb6~&bAk3F}S-q9k znF*1v5hP6`@G?zD@#$F9>!Si-%y{S13j>q5;Ve}Y!zW73d0O?HFD8L(#rMeJ$btpl3&CwGd625uiq9 zU9!4G7US$RLlm~nTBEdjq1{=CIR`@zX??48mW1SH<(a0IM16uZpEPqqti>}ss*dWs zbCnj?r|NAf&Wb_wK9{hXN~vb6^t{$~YusRs*$&J9jT;O^`@Nf_<`mu?OcCPcK_sTS_bt{z~I+YcYjQ^qr%uF1c9FQsuDs$ z(qFCEmt9*KX*;SbC1)!m2gx*t*DsRpO)gbAn*+AuUDu$mLuFEZqb_bo{+hz#qRe1y?b zU{fOH5a>K_k6sq$!5pLd#YN6FOZu1s>NlQd=i&#Pi&x2zx*$o`n)tkZ?y(3DFms%~ z-vS9&=m1zTFFshY&pwD{Wb(c&BYrqWuvRupRN(nCFAn3=+ViHO2`fI?EIV({qspuz zfe7QySx0Hdi#&Vv&DZh%(a&Wi-+dJLAaVLAdsd*4W~L-0CRpQ+8QSa^Z$B42i@vNM zsP*b0sCNW-xM@4&fQqm+t?{mp#!C3Wh#Bq>dAOkPnT}4!NzcVA4r!NvGyzt<`!y)4Ini|GV^((!nyN&@RK*MK-c7ythCmF_5ZvG(SS+^Vgt7Hqnjd#MV?1)u}i>ge%Oq zS>uV#gK+}jnxG9nL0YXwf|ZPDF>`2Ivfk1`p>nhU#PJZ)4@dOyx|`-EE8In;eP?y` zdoPVfi#p+KlwN@oZ~Sfk5X;d^!RZ2hfmH1p64y0M#L_^#1b8q6;F)a~RYem{o5HK7 z36*;);F-!eNw|se%a_5DctN=A-h%4T7x2vm#uu&FC=`oEL7QDN!%VVa%856uCOirS zo%;DKl9q>%+PPr|JTb$s_ieQ5HHR?;snbXB-48*@t6zS1l-w&cyDGj`#fWj1l}Z-L zIm>4;nhuPxu1Hf=$IRT0A%=Wc-PtlF>KUc?yJoA;7BP zuq6#w(n+@!1H52%R?doHs6)^iowJxux%gst?`SJtcITBN^J!jA$I5wWDa2%anrig` zB=_f>|6h2_ycE2!qS+`N{PL7_vAx=uU{+n@-GP`Xf}U=~DE?cf|#gO0??gqiVvjajC#412&jh z+USd{tW0uT3~G4^+3e-Q$9dsa{-;1$3!f#e=_5H4mLs*IOSYFSqrA#>d{M}B&v{YU zoA_vN^XO>rg)V_DhiUt<6#@cVqc-YqLS8ctB}w2jW2=K7P49o;ZXr%er)LvB z_&>-Y%g}1~>5w{ke`S`{N^527nuUuw54$Eh8h4J0r+CZbs~XD*0K+}E^0rSGW%Ifr zuqh{RFt!b`#W>@d(HgSDh1u|IWN4`nr$iAoK^lsGaC4IdTs0yNWw7(x;u38=ccZHV z6&?^_A>n*Dki^23ry#K2e;`_%xAFp^YxJj_5{X%@dg9Y(=5^U@()4+I{*9>e`Nlp{7a+srfEF}m)(Mka^<4nZ`l#PyVHa=xj1F$cL@|X{$ap}*u{gry`!gx$Itg( z>>gP#{&U5=&}yh8rYylkoJs6FT)M8A>9Rj6K?!nNy>n(vSQqQT`x12m2kKp{$D?I@ zsxS@In4Y+ZvL(r7+@p23kJ(?sk4y;|dnZ>O`O43_qe+G^nZ0H5Hm4<#+%FD81;%S;p z{iX5WmM0`#oT65?d!5J89Niq05RO*@w*nKpH=2$|DEHist`}!JC(8D1mu!4tS7lw6 z;A*(cT$GPG9a^k;2*?QVTKHE*nbIx0Rg5+CgZEZc(Y&HLD_2le6d-~O+WzQZ8aqn) zwvhN&-T(}W*TnxBpmpx)q*nSvpR}-Lp*8rGYjfWqK~BCw}M5trOM+z0W9*%~?0RObs%j zR>g;-CT}BhTADVEPh9?ziD&N(qaIy}61DV;>s^f_<=!U#=UkT(6c1M2CD}mcNUjaX z9wYcjLx;=*8$Q?W&-SN-l_uubz9T zQ9`obg@bmoad$ctQJ`$ffw5;D*TkK}D?m7R54Ia8Dhm1`jbdj7Bx3DZ`r^xlUMN6)p&~yRb0+e z7g>0(TIQiTv)RaveIkqgzlgY8d?qd*3C}!f-gu%Id&am?j&CYtTVF;s+c$|dPDPyJ zhj@W(ZtNc){(N}6@#OjTE|OIxCmD*UwqBRWx%h`q0=&zFse@|>jl+*4G|nOdeyolP zjTN!Z>#d1C2Z`Y8pTJek_&ccXYrH5H$q;&VM{-&cSDse%>LxW45>U+IzG@D<2$~Q1ef9KdVl0rEAjxCTo*)?MX#i+Q>7d^N zLeM~)L>6EK!qHHrYw1(MjQ?%4=(C*vQ8Dfv3j4JM{csY06JdOZVt+NWdIPY(kgM(f ze4I3X{Q2c9vD5SfCngtBVKO2aQf_m}Su16jn%eZ@h@|gVY{(-!Lc&?fB7Va8#rm4g z*Yx5E|Fjj_SNlB8_cTULdE=txHeFyh_J&*cq4r_v2Wv*Jt=2WUWx3e+Nu#TNa9+kY zao8IAXjZU-cnuzYwx!2rHDxd!A0Eb356^}zT{$@1__DMD| zWhTe9EOp4-M{l1X3Lxvh0rq8OT`+3Ep4#qSoLH|rqhb;C>`kSnPNkCpLWO951qAjD zxAB$+tX;$NajuJP96FN54<$f@VAZTMYiv%ZO)Ne|ad-wr*LC)N4S(6U3X(i9p(5%% zdUc@WxbjAw(a<^$E?iPG1tpGK(RZYx6L<4L!nHJD|NUfAE4?&3H6Yb^*LJ+k6)&Qi z3juPh+Ypvk5Glwd1N?{3)p7{s86En3(AI`nOOBz*2f2>T>+ebU(+2}r zeKL=JIgBlG#LYiUBqJUBZYf4_aIvi!pve-5SZOyWi1x@&d#kX-i5^%YdA7_YC8%o}(;M|Di|zO3uwfhLc&Pr)kh2%6LL zNy=Hg>bwp|-6Wm{U!!CCe#boW#ymZOnziZr;55mZ=XK~KnP(zVOm%@)ULS*^7_F~V z*KU#y24!rL_%jwYu6zAOj$WcZ{j7bCvG$&P6473Y(;5W#u8FS(KO&`4cRDV!bEJfW zA@FtRzn~o_xf*5X1fd3e?6+~AtKa z7#V{~wPldgX5l=3Hr6CR)iY96FbBg9c@i4Qj3)wi8Yd zWD3Zc&)IKr?JYv)Y@!*7F5~_b#pT@l77QOk{!mlIFS?GX=K*N__I`7IhFBx1dR(eA z6uylI>1oovY?g4X+NSN}pcy-#j9@o#!X$$*)e|WjpmYn)_H{_CUo@M+n9$qf1 zvYeAeIi0)|i<}iR2PEyq3*F8_Eq!jo_@xBZ^h7^Z_dQ>*!&s9?wkof3gMW$g^mcDt`7{g4?NFe|-N@Jw#QBe8{6i$cLl&>FZyAbH@PiLRj za&){Gk)k6ag%pM}P6RpJOpMz{qr0VtaW>(?OIC!&X;NNVTMB<8>8UcIW|NZYyDaOa zIlDOU>M9{^$R(gjOWS(%Np6Rh%*Kwu=0=11VwyK(D)y{DgcjN<5tnf#-Rj#S!Q06) z#xS0x*T}cn^;%nt!MGTW8WQdb-Qg1FUd>ldgUE5$NZ|58*!P48HI4B-b4J#|KpCQ0 zU?J*LMK>wu$0?1ZGy;*O61yWAgb>$S7VHU7?IgtrO=%1*SFCA9*sa;JR$N6-i^?_S zDRC3gIt}6jB<>t&u>i~8g4Wlo8j^{5v6jK-drw~MY<-do%+f7TC0OWLh9Mgo0B0biV)`Ub z653xV|Mr3R*GoifG;A({Ec@!zGQ$P?NX~lQqgux^5kS+X6Tya^i z#KB%O4J*p!@PbeJYgo^^<*jJEQTu!{KoTm?oW`zSK$@h+)cPO&M2?tU>%27ofZ1?v zPG+)5NJ!JY>EoMi)aIuyD~uyWj2kmv3Q%>4ZJaQ#Iv!xgd)%u1iyLCrLy<$cwmG4D z>4ThTvmo%Us`~1-^PJ8aL@O3qg$wTKmQ>a`s#>JAnvv_y<(Y#wn|~^p)6JY`mEJIi zcD$9)VBA7*%0!nV5WQo+7!{``{ferxS9KMIOH0$dDX(BPwbcIhla;(|tcK98*TKEc z;u!_IpZGDI)ONTBMfGYHZg#>I+*sRSy?l(&;cIB4CSUH^`My12O?&SPZ0w z+Hm1var8p+|8REW?3_r%Y3j;bnmt^MuPVj#)+hD}9c*CMYzYIa0k7HL=AY~D@+`k7 zydpeY1t#|}GdxwrYV2#Q1*ihS#>1RSd=7{dVYlqP@9u_&n6-nq|i5{B<$;Xfb3btPN_=d}Wb ztK7=UP!&bnxn|KDpuU)ueASc0K|9U(Xw0WWf@L?>WhSyvH8CzubFK8ahykbxNEE-m zqE|FxXT^BZo${b@N}d$8%+(>j*(vg23$}uLZg!KY+g%q9cDA2yA000^ph;6yoCLnH z^(Zh2nK$Z|a@dI2Dx^(z_nvOgGzvlE4GwqV9U6fMVuEaMW&v7z-xi=ca$ev3L#Sh4 zHD7VNyl#(Xik~WiBrdw&-~TSTmSz66nq#%J@95o^cYFu5`tY*sP6qQy^riuY(V5yx ziVej1gAl}$N8SFVKAsOi8|xqS$m5Y;XtH!w=c}=$T*eCdy?Oek_Mff9u+p9x!VMk} z=^z9K!lPM6qt}i%aVml**e&v9_n;vn0&jcqx8nT=MsoQA*}~MZOJ}FG>+1Du-jL2H z-o58IkT)kX-XdPx8u@8#>5UP6cqob+38sMC_$yB2x{J4N+`}VT7 zSni(Yo-0K3MdroyDjCSiTH1*?xu8wiLLICx=6}EoMX06Bc)yjCbp_fMN8TsJylTB` z>slp5PdIjpL@+qENa0=hEycDV z@x&`c9rRxn=jGoeY;l0$FwH%0?dgc#Op~D!^)@QbIeD$AQjY(vRwJH563C=H9-_a@ z1mWw<8rWLGnO=gF2;(`dJ+0jC(-vSmjdBsmEl3UHJ(b}-$I4DOy zCuI}rLAGfPs^#69l1DYXRVj)!XUgcmFQ+lR)Gvbp1{xviw_o*|)T9limXhYklq;5^ z#x|)oy4MOyIe;lxF_j+FGCH{Yw6?`Kxp)tUTrA!w{g}GPk+%_WUhpXwlpG;;tvSp> z8@J;ETeF7q( zm6jbi{GwTna|7BR45T1J%^aU4oT zo~na^WU^(K4J0UY1zCH^Bxxbz=^0#Jx}i@u!5B_cd3Ss%shi~nyEL$25^tMh#0Z8S zrqMb?fp2)=+g+-}V^-1_N{nM79#jFU^= zOJe*NfK<6}2Oa?~GYY;Bh;i7j^j+2Xy9L9p7glYQNHjCL5i4@1rOReUSP5``vt3<* zIql}vPhi6yrd@2GkPo^l*r?`wVenWTTgGW`3Lj4O$FAGGjFVG>RB%}TLhAP<*sVMs z!-m6Q3Y{a485rWaXd1ZWcVyr2lk_yp&45UHVwmUC;fcrmnRFBge`kgt3$J|Di@3D&r2*nKc%m6_ep;VuDoK?CNIb&}juMunsq4 zZwE;^N$2MzmCyp&RBrfq)#&V|9#;-2FkY}PF0@=eOenXEn-POoSD$l5Q;#>*Wn;-- zU97A^8(tIqZ5j{{rF(rkdfUybhvmIHAGKMuyjN*+0~b?DnOnL(rgTQ|$}z9=^ET{WOrQ0T`DVvIEEO3_#>`~O6QP*KijEW1_Egn8W@|$-{So#L zKwENg{VG#Vt3HH6()a(Z3{n#>iBGZ1Wz57=Qd~#}ocm}5J-@n9$cD=D?qJI296TA5 z@#z$Xhm!b67*t}*jdE9hO*PMxnMIKi>&3;V4Q1VtR@{wV-gKgp4-DDqU8^olUJ_Y; zp(*DGq_z*lEofp@c{lRo9yuek85KJ-YgmY%H9^k|?NWL3q~}ou{seuhS9GV&24nV* zB=4PtweMPq!QXuU7VxBYhAM;6z|7PVvVcu830o`L4)93TIxrt6seu9IJGW(g(QMmd zi$hN!iw$j>hc|~rP~$LJbM+FL{?-qg;3e_rv%uX z&89gsdlv{w|00wFn3x0Z#_bL<5h4f}zK{zq>1+7j`U+aDOo|o#FxW`ke%t@_5~UU&Nk$A?>R*goFf`tf-G zVEc!|`7*U;Jiv4t-sKaU*e56<&(oVr0Ld^bHC-)yWX4I&DIp9N>2Z}cVaqkH8hTT_ z&oNP~vFt&fQ&VJvO4NRyS+SdaKT{sbti5#X&a(;Um|Na{(v&2Oo=TMvdOR$Mojakk zUL+$q9sTq#d66&or+HV9WT~ps*~=vgTa%2TA}w)dYTTUW)(_W^)}rqk){@gWPi|y6 zqYd1ndHH$mXwEMQ09^YH$rf%d$*_^vE*+oOHCNqnQI-~RvmJSxRy`|4^A#}mL9xE7 zU0l7xxCSqHO!|R!>DA4f^z(3Q;49xhO#YREID(5~;AZ*$m@IRgbDV4gV3~FB!YI+USJy$rVx6UZ>+jQ1S-=Eh)I=@I*^3ObD9*XP8?mcp8a-P zN=>j?I7bx{xbty|$YjK?Wo~<{)|1{zHhF3kudU*r(Y|p(7FUZW97xva%5>tz%GHg( zPRE2K+EYJHEd1oIsY{sD!ZJf;KcX9<_hi#93S#%f0}23;T%81h79*L3&TN3fUu$wk z7pG?giWWf81S}t2@e)Ce+uB#<-4C*_vmQUxZ)KxEC{`;Y=bA2sF8X%pLDo<4=vpd%&5qX% z#^&3TTRsEq>wI7WP0G?A8d&0XEdvjFY^w^}h435gQYH7DD~w<~X^m&6bN{o7DfRj- zHJZ|t>Vq!d4azp=15_wanxALmBIoa$-i@(VH;3AV5;s&K;=<9dA;jqC|5N=nAi6$Wx z^1(R{F`gD@P?Sn74$!)SQesoGrUWFVKOKwm!@i-)XU42pKOTItoD?JdB81>FR8@h& zbV^eR3ru18snWZ}GDsg_MZPGIJF+pu*+<8@P@PpJ_9(#eMjVy=UFqaa5Oe3J&Ew5y zyNAacKW-dsts4p~W@gKdHWu}WXG9IXF7ogY_I96cKRZUG@VdsXH6-nb>anfPfchq% z{cdmX`{SdZ_w}RR?%>2Lx;t9&qU;ObBRAYGP9zeMlMfVgR&vqV`npwMS>$#P=_zT` zf?i2Dxxio$N9?H>ZBZUKU8i3RH8yVu!NaZ1qwT%jb)yv)J+KEy(5nD=dHSygHl5=; zhTIQZ2Zt7N#-eM>ZW2RK%SSJ>gQ=w_4nYI6P3*iY)GBIbew$BV*;jGKC5IR~9!ypl zCSHHVptoF3E(fW{y-4}T>Z=M)5~HgxL;<7Ody{Rvv-j+HXX}Tpo%I@}9u%kXAU%g^ z?)CfK-FOa?ST@rCH|g*f^mw?xvAGp*KiS$n+J3sdb@1Eq?%}!+ylNq8mkO-kTai+N zRSP8IgvVnIa-O~NE}@b5h~i+g>K{Ly8g?zaTUbm_Yyu3gzownZyi%FYIHb5cPGO?T zi=gQ7)tKqw(wl((U~li}DN>Zb*gdKrF}8rEDYt5?ZoTP;_BW2cTUVoKX(A;2(uOfh z96ke5FFvdEQTp%`C`svq%D}nIY7|6vpMZHFtl~_NH8|)elgXRR^YFlKkUFd7b9Xxa zkUb)fGds;RFVXe)RWp|~SC~08xyOp>1U0v<$zCWB*F8Bs<=8yhS0__LFX|m|tuvFh zS6-5eW+s_WGMaF%Cr6Sp1TG{s!2d1^^I;hJ3HYN)hE_#Pgw z&@<#S@Yt9o<4!m;9kw@sfY)=OKnCdH8$o9QgB{L&8o^#n~5GiezwBhAjpitf(%W}Z7_Uc$)*j7-2Ed&5|DxFoaIcGuomMs|O{){FN; zV6h9?V(~uW0R=e=6D5>64XckHo&(OzP~^!3!2?jP76SxBoA_wu>qq~ppnp%rtY?AV z-=6(o38oWWh6XdWGH{5+F>yGtx{o`L9d=<&@@zC6)RX(ih9F8;nyMVSagNzV5S|2z zq`iQ}ji2)(S3~*1!10VwAr=!2<8S)|ap&_i`ti*KaqRV+^s&Js5@$xqDGz-~gY8Yo zHI9_&q<|ioPfgBals6?Tx~OLYD9@%7IOJXA|B5*J5%JSI0s51gsl`^uwpaQAwck8fmgrIzFYb8O6!uw~GV zZTU(vBu~guTHRYx$F1&8?`|6ra(|Y@;6aXofXx^KG051l1cwY@z`VHM~ZG~MVpDq7r z*XW1lea37@{1<5M+3qa&zS#)PyAYBDR8!!Fyg-w>=#buOk$iGL$|c;2T$c@RF!FY# z`zo4l0vEbuyz$iSASkxuRK%Z?Bs{IaHgmFs49MCO!L$pzd4O^^k9$V?ttWwU zga@kIGeMj`;}pdm)zYhJkol4Do9cU=G1<>3N;AbM)a-~r-4gobyg&!YmW8)gd~%Tu zq!+Qh;WP*+Y`_WknsCA) z{9slZ6iU7eW9P@T*crqtEX@31%PqcNA4%bd@iX)W48`p;QVCx-11pE7!*wg(wTNO@ zwalb6vIKBoS-I%KCtO`aE;^={Af2n~T4=H<88V?_9+Vpd+Cs@z>n*e9 zN$bhxZx2Ge`T0Sat}5dEdxFy-BAY>@C^;O9=-Ei13b|tz^5m9b5FD=5FXc$Ov?cOa zKOQy}@?zWkWq2BiQ&FtbKhEhD7j_^bJWOaJi2CL$Dc-Wsqw{%@jpCg#872%ElW3}& ztda1FGl!wxDjaeYm#E0(8@T(l4H(%{xE0ByEP9&w5!2Ji(2*_L(jf{$n~!vnh$!E( z6Eye7P8>NBmT>em>-3<%(oZR2Jhx6>FF*37Kvy&L?0IlYf}CZZ;& zUt)mV0;i)I@T_)>P=Z7qUd>jzP)jcEDQ?~z%A>H?P)QjGM=$|J z91Ai?0-W^qQZ2@kjNzzeo2Gu81hjSgwb5l3WF_z1E-R1LQ<*cbXtR;E`Z2Rt=}fr! z>qHpGYFjC{#H2T<{7K#Ji0q8`huiS!Hb(n(25c}#s+3XH zgq|haO8z*|ZKR6F&wpeSuR~}y7c+*S02IVDFnl9MKw!KQQZvTgP-G-Uqjbc)#_xbQ%LaghOPU->0lfx7@>eU!na*Z#bRwAQ9$_z>wJ6#id*+fI-e36sBLU$Tp`!F2%L?nyr|Z+K3NbTj|#?C z26-rtO?)CiIh>g4iLgFAdXw!WK($gfBh@_eYvcY@>QuH+68pe}%8MXsawm}95EKME zgWpF?!Es-A(^mk&*eZ^r;lQhel?kJ86#>*!~B~lek z3SSMqyvUyNgby-FqH!d3y23K(NhTj-=(+%8vrZu>r$qW(q4i|o`{}Sl9xTf^I^0x%?Sa3@^S{%3 z6#h(?vgG&H>Fo_QlFIoqE5Tz>a3WPs<&yGjkW|eOpgc!{OzqnM%;z3&2Ys+ZXSpFR zKo3R2t?>fF9hQ8-0@jts$4ExaVdQKCB?!$aau&}D)H2e#i?=8Qgpy`+c5Phj(gYf{ z;2eQcBtLMa4l=?}E{9IT`@Y>CdMK>I4*1|Hg9DJ3@L>S2LbBfqFuzd=45@CpQdx^+ zYFrjEs|xh`VVR3yCV>BJ_H2y!;+#_xfB`u4sU*7Vqm^F9YZ&|o_7BK$}p-YEL1`Gq_BrFgXqeq5nQA{=4^wwQb4tpOtb!oNsZW6%%wy7F5Tiz$o^nQ>Bvxg3h=Z8sbn*zP9i{ zBVCqW1ucNc9#Ly8gBs-r1i&)+f555Dh_Z#8<~cGM5i+ZB!ZiT#mZEeE5_FW1V5DT5 z$s&T>I6)-`_A#E=f>WFZN{*eIe@%SW2^pZt-JI#LM&lVGaeEL+HDf)1y%RK&6)={V%HC~}uQUyeE{ z{E+iVJ8TOK`dUU5ep(>%ltQ^y10kO%nvAAt!Kf$_+!=F7~e)KZp)w%#hqj`bst;?GQyum3*G@+h;r#aTRKfoC!LTQGZeIVE^&4kzb6A^&dJqcuZqC&X~Cz!s$YE z#;u-*X<>uxBpf)&V#YT$!kdRz=nI5!`i#mPpD(+dJ#pQ%KaH7hMk>Fl&xrj&nBqG1 zfCV2hGWgWb29F#uf%^&3J-lIarUF;Md;2m|>&YyqeKUHazAwr~!T`cytQ6Ml=YvW~ z`hyyxMHyrRpwUy503t8aEvZjnW08nfPvy0IC`gFZbz9+KH4RIe?P5lG(x35mn0~bM z5)(ZTcv%NI5mjoZO|=2e7y}QtHQw9l2WwkMaXRh*w99xqQm``>pU^XSxTIzhnMN4;@ySA=rW7r*n?wLMDUc7d-~cn#K4M~Kftd3JfjgKYuPk!{ zMo$-HK?0^iB?am%hVsgF87?d!CUQjbnJibh*T)Lz@E;nNPCW%fmuISSwkb?_Avw!jqd{C*FC@?!PQj*PiEuISwfx3ZArI%R zxf{d@EQT(^)>ZCf7CbFaqe=3*(HAK#wJcPD{?V8qzD=3 z+E4PcB@y#X2kr^()N60M1Pb5)Ix<+gq=jx|kwq$tNMdiJBZ|Jg9rjk~5SY#U)s#V> z+-;+|Si*1Kx76?|t($L^fMZiE2oNfV+ozO(oNP!{hI3I$>Zq)W;sO zcfjjEetc};*fR&99&m04f zh!uh$tJnwUWh9>-_ih-UQ4m65(bV*fRx>Wsqo=%W2e#35$x6_>1@nv6(}pKzQ-xCX zvzLGBU&g5-2&+y|!k|vCA#aou{%JXD0m%+|5(rOsirq|Nn8D40!nBkORW;V(giW)+ zbNdbr9i;5lvZ%vVKkl47##SolfE*kR$R|KMRw@D@Pw5^pZAdCxGT@F$h*Z%pbJ_e!cn8zxcqzV(-FCd4It@fxg7>>q`*#1wzTLa<-+TXK-}r>1 zaJG1AcM{9vF%NPevansrJ>5HZ%fEN-+2gMFs8MfcPtUG>neoT=_3rE0x3hQmzTTa? zcJG_;d&c+e+VdZK6SekyGkF=hpVGM*8YOMogqSj69KACf*#Sb4K5VJ)>G}`&CoWL{ z)$66S3SGTDRMG^Hk3s*dK~e z{S#i$`P|F9mfU3VCRUA|$dcwb4tPDCy)lKj*R;=Id$mEmC>@X}uIzFl7FbR%WQy~p@E* ziJF*j6n0P4qpnf!Y-ZFuLj?9?=g3@^*i>=?nB6!O>GsR%Zu*gQaTG30*CH&O%Z_{9 z$iTX%XE^?X9_3L?FBLk+;Wh%|gT0_8`11ku6WP~2oiBHb$F7g2Q!tcL0i_XOkz>Nj&7HFTdtbc6m}P_PXQm{Hqg;}#l$zG=qb zAf%^CWU{CWf)EFPphjtZw==Q6?r5mA=DPIQ=66YjN3+i5+@q{=B-3PwziM9OR3y0F%FWy+Z@9E*PAKaYrjnJ(z3(HrtI>`J2- zb0PZNhZocgzZuA9_9eQyo=E(p^$-7pp8vZ+w(ISNrRc_Au%fB-R1zmKnayv;H}J0e z=3Oub=h2e=&?p59%%9)0vD-j8Y` zc`!Zdzdw?Hkgp^XucwE7;~+4g;PC!2b)EqtK=Sj(NyfU84rV~d%mdghOc2>kE!IXBNJ&c_g z5uL!)i}?)QHuuYz%S%2@npzt^*~ zx3{OOcUMoZcVeVJK?ez*%!h^!QVuM6T*H(-d1UaQ*9R;Wj@9X9QW1_!!9!wR0mJe(z`M=%vL>JIjR~KoX;7i3^D($1p_5?n` zzUU{9cSB`oLqIFg&;&MAN|XM}YKk>=V;lt3Op7UOF;z-W+3n$z<{I*`AwTD1R^?2W zk&@kNS3hsA^+3*`hzO3%BR_Ah(P5fRpKj@0a98d^f~r@k>m*3%U4H&l-GT^4UuvY} zDeMQPiU(=l9+?#Hn;RE*ag!RWVCPV2V6_Dgnrmhfo0$wZGudo2U174Ptryz{Y)*R< z^X<#r>aq8~LjsA_RGddW0c&yuWJrN+%Sfnuah*{}uI5T+sVyTQ(9~fmNgKLcw15_0 zgdzis*slg8&2?Xnxv9 zV@5WZt~u4mOa3X!%`5~;l6Y%R25LJfLLZ+iY?y>iFa{4rzroP-fS80n%)BP0kQGjR zD8bH*EP`@EaMYNJ6x?ts2Yw|}@Hpu*`tZ_B6Pyqw+&Wdsq0q-JGzp$w%CW}gB~0&? z@JeuP>9P?WNg=!Tp3|vfIr>rfJaAAwv(BilSD)qNO#7j0_^KG6eLoDxyP7~WrD&h1N zY!gm`ZQ3_*U9zC`A8eCugKdVlV4IC4BYgv7@F`4BNOoakhacf<&22E^SRp6s382;# zt9>2GE2$6NsuMQ7-dIZ>IGIj$qn3u z5*`A*u^5LWbkK?Xl+DoP zA@+nPW2Esp3c-`YVcQ0TXiPE44U`Sij0mjcr6N@fIOF1@{&aB)VV9oBqkT{PqS%5= zMq~1s5shqN-Vt;dY_Y6QHX16%9GF(I$XRTybVM>oABWlXed#2Ltt z3$d_v00hcu1YiwEY_{lksZ0|dE?TE&WD&L2;NVlkLnn^Ecx2>g_zu#KHg(^O)sL@l z*X;}y=?}d(A`+~Ekxqd4Ay_CaUu}z+LI_qP-IZjSd}dkE7qw~Td#;= zdzh zIGmZ3WS&nRO(Cc)2~6UU>Dr|QmFp`rYWyc6Hz|zWo}{>HJiln?6Z(M3U-b?SFH$N$ zb2>G%b>wGQN}3@#;Q^(W#0*y>;9n^j2$#elDM4Tjb{A4J3;fLr+U`k}CoTLv$^Yo! zT&J=+*_%&d5=X^GrA}a?f|oP6RAxEfg&{3*UG!22vL%rwP$!{q#81lD=MsKN>Py(s zOAnXv+jSVN)R=^)K%6Q?ra|0R=GBH-Dt8`vKw%;o3YZft-ZA0I!OTF2J%9)$X3qAl zBO$|v)(j0D%#orZGMf@{AVvCO0=3K+Lr0}GQ5%iz}qjt()cM?T<~#fIj6BHnopV(#V=Pc*r4?M0(@aR&CuRHEfgL z@=4-|Pv;gTq<&YrG3D9#Y^i)Pu1;T~ zYQ*?!DcbAGJCZ8I1^0);=)&Dbg_wlqK~;ysHXh+T9sftoA1sRdAc%w z&WCBlS*yD&o;O5E6$#>&RjHjqWc8hwOfeDWv=Mr)9*<=@FI37={;;tT2cA&8Y;5E) zK_GD~1!H(&f|!Eh@!0yMI4go$DgXQqzI98wC}tU@ICKSM=(<$IQ$~SYrlbYXxH0WY zK8EU*sqEwwZg2yH9ePWG8rSKR*AaOoCSlkg572d2hn~xOZzIkX?5UHNNwslzOe73= zJ~~Sfq$zKA#qR!Ifr*9b7;1Yv9mBYJ=sNKAK!djhl{BGg5ujL|Z}sSW6+B^5(d;60 zZHbZyw9*V=5WlHLmFXjtBdk=PSw27o(hNvrAz#V&3kS zGBK+#y4mGT%(O*`35l{+o?^T`%6(!r6z)PpyHKca;&vY;I;E(JhE!9Isdwn6$aYQP z?Sb5traD2+`#5@FQMmkXE2(^$ZCFGUguyj20fXTQ({tIW%oiH@L1uBs>PFfYO;&`& z;q1F(m_kJn&BYKM0SqfL72W9^9BJK9-Q~v^(M=1^BYLVp1hjusmpPdkpG`?*PNuYW zkuDM1`{{gVyrH-3=tl?(7F`?y)|%FzuEvO>zGEit@=D+b_4o@h1mzW_(RSoPVT~xd=F?VItONlYGC#>E6+)tr__;JLQStb=%r)19VaA zc~fPbAzFCZ$<_^ZLVq3u4axVX)0i9bQ^|t31rw7_S0orXx)hm^7ouNrs~Sh&hRdJe zg1@OKNJ^)9rVd4bgiGa9C5(t+g`hBjcG@H|tVx8l^CH`T$s#oAG^L4ejNK{xQK8

BF#=WH66nW9rH0i@Y| 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

uiYX`K1#Ty?0BW@d%$E; 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 z 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

H3v=9xxx5xdyYcrVRFDk7W2$`fmgVSTiP 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

niUZwCA96k9}gOG9Iq0eE8$h+^By%5(uM* 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

%9Ty=xnl0BZiS3h* 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%0A0OSSkems4@?Lr6F4h3KqJ%aP+uKvGKLenP#g@f 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 z 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⁡%%j=PeoN6i%(WvlQEU(JWJ!DJ|lkB7{4 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 q3N_LW3eyIPoU%apuV6>`J@x$^ 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

whiKS3y`69zNNuK5eS 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

X2gh$P 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 z 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 %!9%9~b&+f+g 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%0D6eu~ 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 diff --git a/lxc-4.0.3.tar.gz b/lxc-4.0.3.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..88376b2b8687616c874225ca8c983b2a78993ba0 GIT binary patch literal 1368461 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 z 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 z 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%0D9=c>jDPqQe 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%0A3ueqDE2${wKcOF5J6E=!qY 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%0A~h!ono|%vh|okb#Id)`#aPUjSxMK>+sjD8 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� zUow~r86IHk@MRMjfj0NwG>_jLpS1UaKrXWUrG~B_tob^1kV+S+>Eqxy{A>GYzrEW$ zIOb2ss^iFr!PD7!&2g-fjm;_#sADF&*@%~4@*vZ$&qhrO|2-RI&B|`4;xgq);q-O| znGBctW64O2A)f2-xgd706VpoyX=c*0?sLBAEijkYJrlyl>lw36-vGqD59k_w!iE?O z==JE$483baMPV*KS%=2z;E*vLFMwVqFhgqlAZRr?e7%?6O6$bq+|lN=<8vS;svrdZ~=E@#FUJj9}3@zWaxrZ&<0<#p*&9ZVe2qz0zJ zI}vn7U)UrZHUzsh3L6>GDj-J6%fk1|tT$Aamh&Y+}QpjPUZSI|^2x zaT6Zb@c@$MH5stZ5=yVJJO;F%@03fUU#`?}^pH(Y5hRWP#%bog?lLTe2&7oo_s-f2 zqraar{jrs(=0w(b-n{)r+n3QIc>}1tp8+60n5Ujb@MEp3!Dp8DM& zU>0Pd7xnKUw$S8VgqAy_8O2?png-R&o>+Uwn$?V{Dx0UlDH(Xu+*4Dv?ogjgY>N(N;so;Mc!vHGrmD>`lP)2xIB z!XCkje4thd4eMRQL~C}{OE#^pbYlmX{ManlIA?dcYk21H^f?F|Gbqw#*E|Ia^^Z=x zK`n84mGcrEV2*Bg`~*MJUZzQ(329|7mFQwPhGeQDe$d_xK`#9syDYJRM#Dy=X8}l1 zA^^$B!Ed+!Q!~hal4;zx-+WVI|0m{h*8cDDx3K?vyt4MY@SET4|Ne#cpVm|ss=Zcv z^{=u2TwVS4+f_PqI{!7e8-DZ6V>@PQv!~ z&Pmwx{OY|hd*Ihv%S>c8quECTFZ~hPXaAie@CvBErlQjiYb&ddnk%c#m4~gBRrnpN zaX9BqGk?^>wbrB7V-CW=34?X`0TZz*)oL0J+4>*Br@r5n*e|apeFzINgXcubCWy)~ z{kebnKBiaX`%C)7Io+dvYe-Lf+?)L%rmN*qn7_F-5P=PQlZ!xLEG=~pM9Vt95feO3 zwVZmoc{%|&(?^pD@s&4E#KZ=+S!lV}KH7S*xqq_xbZ2+x@;;@*={~DLMKDIt(hUTKS-7ktxp0JnG8gA7RL^v zscR{b3^pal3&$ZMLJse%N{|;%8xbB<)#2^Q)ZPfJO2yXBK#cYOB6MXl&ihUVDD01S z49*b3$ZTEbc9Ri#NwQTtO9tI|8=`5JI*HsQHad@J>O$Szp9cUx8mV$WS45<%oySxt zDB+}-#|q?`+q7&@?I28L-y)cBWxu9M** z2jcxQ5SyoWu;e$6O=Za;kzsNF12{to>~SmTau6uQ@KB2qFMJRS!{}x<_N~f1|>vFWipL`_ZV$e>7Jg zRgCtaGl@U+0o)scA_E{@2@Vq8zmGp&rfd~1f4CCO1W;=kcbp8Zh~H$9#%2?06A@on zGpPF+hQ8&GUHZ>X3TDQ_Zwr5-J&mL3Rhpgc!oF~!S>x^pgNFEED$z3}JTd_;Lam4N zbVMxPbQUwXP|VnDF0TE@v5}gsb zjbbK28Z0-0Z9pU!6+L(nzeK=qlP`%4AfkE1$l!_{Uk|IFHea3`fT`c87^~3A7h8Y; zJyHNAKNZ|^NV@aK@-)RCY1g2Ta|+~Jk48^r57K{_ZOx$Pxo!?%0A@EX;#d_{;c{*s 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 z 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%0DkD{|54ltoiB$!; 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

2*B!k1xW)o8nrbY1 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νXp|aCUBIqKVHZMVj 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π7TDb2!?@Umih-z??(P`jF) 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

bx<43HJ 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�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 - 4.0.1-2020042001 +* Mon Apr 20 2020 openEuler Buildteam - 4.0.3-2020071501 - Type:enhancement - ID:NA - SUG:NA -- DESC: update lxc to 4.0.1 +- DESC: update lxc to 4.0.3 -- Gitee

O){^|x+)4!FULSs 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�x38vi-br#I(;y|oGUuW5x&Z1caj>;Uln4Jkg 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