From 62d859727b8fbc8939c5f261b87827987bbc2a91 Mon Sep 17 00:00:00 2001 From: lifeng Date: Mon, 27 Apr 2020 10:40:43 +0800 Subject: [PATCH] LTS: update lxc to 4.0.1 Signed-off-by: lifeng --- 0001-iSulad-add-HAVE_ISULAD-macro.patch | 50 + ...xc.isulad.init.args-config-interface.patch | 137 +- ...-add-support-share-namespace-by-path.patch | 35 - ...lxc.isulad.populate.device-interface.patch | 1336 ++- ...ch => 0004-confile-add-support-umask.patch | 110 +- 0004-support-isulad-fifo-log.patch | 96 - 0005-auto-mount-cgroup-sys-and-proc.patch | 80 - 0005-cgroup-refact-cgroup-implemt.patch | 1149 +++ ...hen-set-no-ro-mount-mount-propagatio.patch | 39 - ...-container-exit-code-and-stop-signal.patch | 120 +- ...=> 0007-check-and-save-pid-info-file.patch | 588 +- 0007-use-isulad-log-format.patch | 74 - ... 0008-support-block-device-as-rootfs.patch | 156 +- ...lxc_start-add-default-terminal-fifos.patch | 538 - ...upport-mount-squashfs-in-mount-entry.patch | 130 +- 0010-IO-refact-terminal-progress.patch | 3568 +++++++ ...fifo-to-monitor-state-of-lxc-monitor.patch | 258 +- 0012-Adapt-to-isulad-log.patch | 142 + 0012-Init-fifos-in-lxc_attach_terminal.patch | 28 - ...r.patch => 0013-set-env-in-container.patch | 164 +- ... => 0014-exec-refact-attach-progress.patch | 374 +- ...upport-rotate-for-container-log-file.patch | 93 - ...-add-masked-paths-and-readonly-paths.patch | 248 +- 0015-fix-high-gcc-compile-bug.patch | 41 - 0016-start-separate-i-and-t.patch | 369 + ...nal_fifos-Add-terminal-fifos-dynamic.patch | 235 +- ...check-cgroup-cpu.shares-after-setted.patch | 99 - ...pty-after-setup-rootfs-mount-options.patch | 157 + ...eadonly-and-make-soft-link-of-subcgr.patch | 87 - ...lement-resize-function-in-exec-start.patch | 604 +- ...e-decode-escape-charactors-in-config.patch | 104 + ...fix-log-error-when-symlink-subcgroup.patch | 44 - ...cgroup-add-retry-for-destory-cgroups.patch | 443 +- 0021-lxc-attch-add-error-message.patch | 374 - 0022-support-terminal-log.patch | 313 + ...-Supporting-rootfs-mount-propagation.patch | 854 +- ...uid-and-gid-from-lxc-container-confi.patch | 31 - ...ymlink-in-mount-entry-and-not-permit.patch | 821 -- ...not-check-ppid-when-set-death-signal.patch | 40 + 0025-support-oci-hooks.patch | 3195 ++---- 0026-Supporting-UID-GID-configuration.patch | 306 + ...apabilites-security-feature-enhanced.patch | 210 +- 0027-fix-bug-of-memory-leak.patch | 78 - ...028-Supporting-workdir-configuration.patch | 130 +- 0028-support-rootfs-for-container.patch | 123 - ...ting-additional-groups-configuration.patch | 103 + ...et-negative-files.limit-value-to-max.patch | 71 + 0031-clean-add-clean-resources-api.patch | 488 - ...-macro-HAVE_ISULAD-in-installed-head.patch | 115 + ...-caps-when-cap.keep-ISULAD_KEEP_NONE.patch | 33 - ...=> 0032-link-proc-mounts-to-etc-mtab.patch | 43 +- 0033-build-add-secure-build-flags.patch | 423 + ...t-time.patch => 0034-support-timeout.patch | 664 +- 0035-Seccomp-security-feature-enhanced.patch | 659 ++ 0035-lxc-fixup-builds-with-newer-glibc.patch | 25 - 0036-Security-coding-modification.patch | 99 + ...build-error-device_cgroup_rule_parse.patch | 35 + ...gnore-errors-when-loading-rules-fail.patch | 28 +- ...ven-terminal-as-controlling-terminal.patch | 46 - 0039-net-adapt-to-isulad.patch | 51 + ...-message-when-container-start-failed.patch | 816 -- ...t-200ms-for-cmds-send-to-lxc-monitor.patch | 107 - ...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 + 0042-lxc-seccomp-adopt-to-lxc3.0.patch | 169 - ...er-of-handler-to-fix-coredump-of-att.patch | 28 - 0043-support-error-report.patch | 683 ++ ... 0044-remove-filelock-in-destroy-dir.patch | 125 +- ...upport-space-in-volume-mount-and-env.patch | 118 - ... 0045-restore-default-signal-handler.patch | 133 +- 0046-Do-not-test-cgroup-writeable.patch | 48 - ...md.patch => 0046-add-support-systemd.patch | 87 +- ...mory-leak-in-lxc_global_config_value.patch | 44 - ...ed-kernel-params-can-be-changed-in-s.patch | 49 +- ...r-ONLCR-flag-from-master-of-terminal.patch | 59 - ...ified-hierarchy-for-the-systemd-cgro.patch | 16 +- ...-Add-100ms-timeout-for-console-epoll.patch | 28 - ...unt-from-host-tmpfs-for-system-conta.patch | 99 + ...dd-init-fd-in-lxc_init_clean_handler.patch | 27 + ...ules-for-specified-architecture-only.patch | 408 - 0051-if-ocihook-is-empty.patch | 34 - ...add-init-fd-in-lxc_init_pids_handler.patch | 26 + ...mp-fail-when-all-specified-in-config.patch | 192 - ...d-judge-whether-have-mount-dev-entry.patch | 132 + 0053-attach-seprate-i-and-t-flags.patch | 288 + ...estroy-empty-cgroup-path-return-ture.patch | 31 - 0054-fix-invalid-log-message.patch | 42 - ...not-check-pid-die-when-lxc_poll-exit.patch | 24 +- 0055-Fix-compile-error.patch | 229 - ...al-not-close-pipe-when-lxc_poll-exit.patch | 64 + ...add-sigfd-to-monitor-the-exit-of-pid.patch | 178 + ...INUX_CAPABILITY_VERSION_3-to-set-cap.patch | 48 - ...tach-add-read-data-from-attach-sigfd.patch | 34 + ...not-check-ppid-when-set-death-signal.patch | 36 - 0058-support-syslog-for-console.patch | 251 + 0059-delete-unused-variable-ppid.patch | 27 - ...le-to-write-console-log-of-container.patch | 610 -- ...e-the-path-args-envs-execvp-dirctory.patch | 50 - ...fore-set-read-only-path-and-masked-p.patch | 74 - ...-Reduce-seccomp-processing-log-level.patch | 46 - ...eturn-true-if-storage_init-init-fail.patch | 30 - ...oes-not-report-an-error-after-execut.patch | 28 - ...t-error-when-remove-directory-failed.patch | 72 - ...tdout-stderr-log-of-container-consol.patch | 1244 --- ...esses-if-container-shared-pid-namesp.patch | 207 - ...-path-according-to-cgroup-mountpoint.patch | 126 - 0072-lxc-adapt-to-docker-18.09.patch | 66 - 0073-lxc-support-set-additional-groups.patch | 247 - 0074-lxc-only-add-valid-fd-to-mainloop.patch | 28 - 0075-lxc-add-timeout-for-attach.patch | 278 - 0076-lxc-delete-unused-variable.patch | 26 - ...-files.limit-to-max-and-fix-bug-of-s.patch | 117 - 0078-Run-pre-start-hook-before-chroot.patch | 70 - ...inherid-env-from-parent-in-oci-hooks.patch | 29 - 0080-lxc-fix-compile-error.patch | 35 - ...c-Change-the-range-of-attach-timeout.patch | 78 - ...-lxc-fix-memory-leak-cause-by-setenv.patch | 150 - 0083-lxc-free-lxc-handler.patch | 41 - 0084-lxc-memory-leak-of-lxc_grow_array.patch | 28 - 0085-lxc-update-json-file-from-isulad.patch | 1089 -- 0087-lxc-adapt-to-spec-of-oci-hook.patch | 41 - 0088-fix-lxc-build-error.patch | 29 - ...dd-get-container-processes-pids-func.patch | 177 - 0090-lxc-remove-unused-variable.patch | 26 - ...put-error-when-create-unified-cgroup.patch | 45 - 0093-optimize-isulad_kit-operator.patch | 424 - 0094-exec-load-uid-gid-and-groups.patch | 197 - 0096-close-inherited-fd-in-hook-process.patch | 34 - ...error-when-fork-exec-error-for-hooks.patch | 72 - ...d-mount-from-host-tmpfs-for-system-c.patch | 67 - ...al-do-not-close-the-master-fd-of-pty.patch | 28 - 0100-start-add-check-save-pid-info-file.patch | 139 - 0101-lxc-fix-code-error.patch | 8983 ----------------- 0102-lxc-fix-compile-warnings.patch | 84 - 0103-lxc-fix-code-error-in-conf.c.patch | 109 - 0104-lxc-fix-code-error.patch | 179 - 0105-lxc-fix-code-error-warnings.patch | 74 - ...t-to-1s-for-cmds-send-to-lxc-monitor.patch | 31 - 0107-add-log-for-failure-of-rename-file.patch | 33 - 0108-check-calloc-input-valid.patch | 33 - 0109-add-secure-compile-flags-to-lxc.patch | 104 - 0110-add-doc-for-lxc.patch | 31 - ...xc-use-safe_strdup-instead-of-strdup.patch | 752 -- 0112-fix-secure-errors.patch | 278 - ...-Malloc-parameter-check-and-judgment.patch | 575 -- 0114-lxc-fix-code-errors.patch | 155 - 0115-fix-compile-error-on-ubuntu.patch | 371 - 0116-lxc-set-base-cgroup-path-to.patch | 34 - ...ce-with-dir-mode-750-and-set-uid-gid.patch | 53 - 0118-fix-sscanf-return-value-check.patch | 55 - 0119-remove-unuse-binary.patch | 33 - 0120-remove-unuse-unmount-namespace.patch | 25 - ...timize-log-when-root-path-is-invalid.patch | 26 - 0122-lxc-fix-code-reivew-errors.patch | 210 - ...-in-accordance-with-hook-spec-in-oci.patch | 81 - ...ose-maincmd-fd-before-destroy-cgroup.patch | 102 - 0125-lxc-fix-strcat-bug-in-cleanpath.patch | 28 - 0126-add-user-option-for-lxc-attach.patch | 134 - ...y-write-size-begin-if-buffer-is-full.patch | 26 - 0129-cgfsng-add-retry-for-enter-cgroup.patch | 70 - ...intf-create-abstract-socket-name-bug.patch | 26 - ...ommands-and-terminal-memory-leak-bug.patch | 43 - 0132-lxc-fix-bug-in-cgroup-parent.patch | 169 - 0133-lxc-fix-bug-in-cgfsng.patch | 179 - 0134-lxc-do-cpuset-same-as-runc.patch | 319 - 0135-lxc-fix-code-warnings-for-cgfsng.c.patch | 55 - 0136-lxc-fix-retry-bug-in-cgroup.patch | 79 - 0137-lxc-fix-bug-in-read-proc.patch | 43 - ...cgroup-path-by-config-instead-of-cmd.patch | 318 - ...c-remove-umask-when-populate-devices.patch | 110 - apply-patches | 4 +- lxc-3.0.3.tar.gz | Bin 1263371 -> 0 bytes lxc-4.0.1.tar.gz | Bin 0 -> 1352119 bytes ...019-5736-runC-rexec-callers-as-memfd.patch | 401 - lxc.spec | 227 +- series.conf | 194 +- 177 files changed, 14879 insertions(+), 31849 deletions(-) create mode 100644 0001-iSulad-add-HAVE_ISULAD-macro.patch rename 0001-confile-add-lxc.isulad.init.args-config-interface.patch => 0002-confile-add-lxc.isulad.init.args-config-interface.patch (57%) delete mode 100644 0002-namespace-add-support-share-namespace-by-path.patch rename 0057-confile-add-support-umask.patch => 0004-confile-add-support-umask.patch (49%) delete mode 100644 0004-support-isulad-fifo-log.patch delete mode 100644 0005-auto-mount-cgroup-sys-and-proc.patch create mode 100644 0005-cgroup-refact-cgroup-implemt.patch delete mode 100644 0006-conf.c-fix-bug-when-set-no-ro-mount-mount-propagatio.patch rename 0008-isulad-modify-exit-code-and-stop-signal.patch => 0006-modify-container-exit-code-and-stop-signal.patch (39%) rename 0010-Save-pid-ppid-info-into-file-for-isulad.patch => 0007-check-and-save-pid-info-file.patch (34%) delete mode 100644 0007-use-isulad-log-format.patch rename 0030-support-block-device-as-rootfs.patch => 0008-support-block-device-as-rootfs.patch (67%) delete mode 100644 0009-lxc_start-add-default-terminal-fifos.patch rename 0033-support-mount-squashfs-in-mount-entry.patch => 0009-support-mount-squashfs-in-mount-entry.patch (74%) create mode 100644 0010-IO-refact-terminal-progress.patch rename 0011-Add-exit-FIFO-to-monitor-state-of-lxc-monitor.patch => 0011-add-exit-fifo-to-monitor-state-of-lxc-monitor.patch (40%) create mode 100644 0012-Adapt-to-isulad-log.patch delete mode 100644 0012-Init-fifos-in-lxc_attach_terminal.patch rename 0013-isulad-set-env-home-in-container.patch => 0013-set-env-in-container.patch (31%) rename 0018-lxc-attach-add-support-terminal-fifos.patch => 0014-exec-refact-attach-progress.patch (47%) delete mode 100644 0014-support-rotate-for-container-log-file.patch rename 0016-add-masked-paths-and-ro-paths.patch => 0015-add-masked-paths-and-readonly-paths.patch (63%) delete mode 100644 0015-fix-high-gcc-compile-bug.patch create mode 100644 0016-start-separate-i-and-t.patch rename 0045-add_terminal_fifos-Add-terminal-fifos-dynamically.patch => 0017-attach-add_terminal_fifos-Add-terminal-fifos-dynamic.patch (37%) delete mode 100644 0017-isulad-check-cgroup-cpu.shares-after-setted.patch create mode 100644 0018-pty-setup-pty-after-setup-rootfs-mount-options.patch delete mode 100644 0019-remount-cgroup-readonly-and-make-soft-link-of-subcgr.patch rename 0138-resize-implement-resize-function-in-exec-start.patch => 0019-resize-implement-resize-function-in-exec-start.patch (56%) create mode 100644 0020-confile-decode-escape-charactors-in-config.patch delete mode 100644 0020-fix-log-error-when-symlink-subcgroup.patch rename 0070-lxc-signal-all-process-for-shared-container-when-con.patch => 0021-cgroup-add-retry-for-destory-cgroups.patch (33%) delete mode 100644 0021-lxc-attch-add-error-message.patch create mode 100644 0022-support-terminal-log.patch rename 0022-support-rootfs-mount-propagation.patch => 0023-Supporting-rootfs-mount-propagation.patch (30%) delete mode 100644 0023-attach.c-change-uid-and-gid-from-lxc-container-confi.patch delete mode 100644 0024-isulad-support-symlink-in-mount-entry-and-not-permit.patch create mode 100644 0024-start-do-not-check-ppid-when-set-death-signal.patch create mode 100644 0026-Supporting-UID-GID-configuration.patch rename 0036-drop_caps-add-drop-caps-of-current-process.patch => 0027-Capabilites-security-feature-enhanced.patch (46%) delete mode 100644 0027-fix-bug-of-memory-leak.patch rename 0034-some-small-bugfix.patch => 0028-Supporting-workdir-configuration.patch (54%) delete mode 100644 0028-support-rootfs-for-container.patch create mode 100644 0029-Supporting-additional-groups-configuration.patch create mode 100644 0030-set-negative-files.limit-value-to-max.patch delete mode 100644 0031-clean-add-clean-resources-api.patch create mode 100644 0031-head-file-remove-macro-HAVE_ISULAD-in-installed-head.patch delete mode 100644 0032-Drop-all-caps-when-cap.keep-ISULAD_KEEP_NONE.patch rename 0128-link-proc-mounts-to-etc-mtab.patch => 0032-link-proc-mounts-to-etc-mtab.patch (51%) create mode 100644 0033-build-add-secure-build-flags.patch rename 0029-add-start-timeout-to-limit-start-time.patch => 0034-support-timeout.patch (32%) create mode 100644 0035-Seccomp-security-feature-enhanced.patch delete mode 100644 0035-lxc-fixup-builds-with-newer-glibc.patch create mode 100644 0036-Security-coding-modification.patch create mode 100644 0037-cgfsng-fix-build-error-device_cgroup_rule_parse.patch rename 0063-lxc-ignore-systemcall-load-failure-error.patch => 0038-Ignore-errors-when-loading-rules-fail.patch (36%) delete mode 100644 0038-make-the-given-terminal-as-controlling-terminal.patch create mode 100644 0039-net-adapt-to-isulad.patch delete mode 100644 0039-print-error-message-when-container-start-failed.patch delete mode 100644 0040-add-timeout-200ms-for-cmds-send-to-lxc-monitor.patch create mode 100644 0040-cgfsng-make-container-full-path-in-cgfsng_get_cgroup.patch create mode 100644 0041-build-fix-some-bug-in-free-memory.patch create mode 100644 0042-cgfsng-make-container-full-path-in-destory-cgroup.patch delete mode 100644 0042-lxc-seccomp-adopt-to-lxc3.0.patch delete mode 100644 0043-check-null-pointer-of-handler-to-fix-coredump-of-att.patch create mode 100644 0043-support-error-report.patch rename 0026-remove-filelock-and-do-not-destroy-directory-when-de.patch => 0044-remove-filelock-in-destroy-dir.patch (43%) delete mode 100644 0044-support-space-in-volume-mount-and-env.patch rename 0037-restore-default-signal-handlers-and-set-umask-0027.patch => 0045-restore-default-signal-handler.patch (36%) delete mode 100644 0046-Do-not-test-cgroup-writeable.patch rename 0086-confile-add-support-systemd.patch => 0046-add-support-systemd.patch (60%) delete mode 100644 0047-Fix-memory-leak-in-lxc_global_config_value.patch rename 0091-lxc-support-namespaced-kernel-params-can-be-changed-.patch => 0047-support-namespaced-kernel-params-can-be-changed-in-s.patch (59%) delete mode 100644 0048-clear-ONLCR-flag-from-master-of-terminal.patch rename 0095-lxc-don-t-use-the-unified-hierarchy-for-the-systemd-.patch => 0048-don-t-use-the-unified-hierarchy-for-the-systemd-cgro.patch (79%) delete mode 100644 0049-Add-100ms-timeout-for-console-epoll.patch create mode 100644 0049-make-dev-bind-mount-from-host-tmpfs-for-system-conta.patch create mode 100644 0050-clean-add-init-fd-in-lxc_init_clean_handler.patch delete mode 100644 0050-seccomp-add-rules-for-specified-architecture-only.patch delete mode 100644 0051-if-ocihook-is-empty.patch create mode 100644 0051-init-pids-add-init-fd-in-lxc_init_pids_handler.patch delete mode 100644 0052-Fix-seccomp-fail-when-all-specified-in-config.patch create mode 100644 0052-setupdev-add-judge-whether-have-mount-dev-entry.patch create mode 100644 0053-attach-seprate-i-and-t-flags.patch delete mode 100644 0053-destroy-empty-cgroup-path-return-ture.patch delete mode 100644 0054-fix-invalid-log-message.patch rename 0041-return-1-when-_lxc_start-fails.patch => 0054-start-do-not-check-pid-die-when-lxc_poll-exit.patch (36%) delete mode 100644 0055-Fix-compile-error.patch create mode 100644 0055-terminal-not-close-pipe-when-lxc_poll-exit.patch create mode 100644 0056-attach-add-sigfd-to-monitor-the-exit-of-pid.patch delete mode 100644 0056-caps-use-_LINUX_CAPABILITY_VERSION_3-to-set-cap.patch create mode 100644 0057-attach-add-read-data-from-attach-sigfd.patch delete mode 100644 0058-do-not-check-ppid-when-set-death-signal.patch create mode 100644 0058-support-syslog-for-console.patch delete mode 100644 0059-delete-unused-variable-ppid.patch delete mode 100644 0060-using-json-file-to-write-console-log-of-container.patch delete mode 100644 0061-Fix-hook-use-the-path-args-envs-execvp-dirctory.patch delete mode 100644 0062-setup-sysctls-before-set-read-only-path-and-masked-p.patch delete mode 100644 0064-lxc-Reduce-seccomp-processing-log-level.patch delete mode 100644 0065-Storage-return-true-if-storage_init-init-fail.patch delete mode 100644 0066-lxc-Pids-limit-does-not-report-an-error-after-execut.patch delete mode 100644 0067-lxc-report-error-when-remove-directory-failed.patch delete mode 100644 0068-support-record-stdout-stderr-log-of-container-consol.patch delete mode 100644 0069-lxc-killall-processes-if-container-shared-pid-namesp.patch delete mode 100644 0071-lxc-get-cgroup-path-according-to-cgroup-mountpoint.patch delete mode 100644 0072-lxc-adapt-to-docker-18.09.patch delete mode 100644 0073-lxc-support-set-additional-groups.patch delete mode 100644 0074-lxc-only-add-valid-fd-to-mainloop.patch delete mode 100644 0075-lxc-add-timeout-for-attach.patch delete mode 100644 0076-lxc-delete-unused-variable.patch delete mode 100644 0077-lxc-set-negative-files.limit-to-max-and-fix-bug-of-s.patch delete mode 100644 0078-Run-pre-start-hook-before-chroot.patch delete mode 100644 0079-inherid-env-from-parent-in-oci-hooks.patch delete mode 100644 0080-lxc-fix-compile-error.patch delete mode 100644 0081-lxc-Change-the-range-of-attach-timeout.patch delete mode 100644 0082-lxc-fix-memory-leak-cause-by-setenv.patch delete mode 100644 0083-lxc-free-lxc-handler.patch delete mode 100644 0084-lxc-memory-leak-of-lxc_grow_array.patch delete mode 100644 0085-lxc-update-json-file-from-isulad.patch delete mode 100644 0087-lxc-adapt-to-spec-of-oci-hook.patch delete mode 100644 0088-fix-lxc-build-error.patch delete mode 100644 0089-lxc-add-get-container-processes-pids-func.patch delete mode 100644 0090-lxc-remove-unused-variable.patch delete mode 100644 0092-lxc-add-output-error-when-create-unified-cgroup.patch delete mode 100644 0093-optimize-isulad_kit-operator.patch delete mode 100644 0094-exec-load-uid-gid-and-groups.patch delete mode 100644 0096-close-inherited-fd-in-hook-process.patch delete mode 100644 0097-lxc-report-error-when-fork-exec-error-for-hooks.patch delete mode 100644 0098-lxc-make-dev-bind-mount-from-host-tmpfs-for-system-c.patch delete mode 100644 0099-terminal-do-not-close-the-master-fd-of-pty.patch delete mode 100644 0100-start-add-check-save-pid-info-file.patch delete mode 100644 0101-lxc-fix-code-error.patch delete mode 100644 0102-lxc-fix-compile-warnings.patch delete mode 100644 0103-lxc-fix-code-error-in-conf.c.patch delete mode 100644 0104-lxc-fix-code-error.patch delete mode 100644 0105-lxc-fix-code-error-warnings.patch delete mode 100644 0106-set-timeout-to-1s-for-cmds-send-to-lxc-monitor.patch delete mode 100644 0107-add-log-for-failure-of-rename-file.patch delete mode 100644 0108-check-calloc-input-valid.patch delete mode 100644 0109-add-secure-compile-flags-to-lxc.patch delete mode 100644 0110-add-doc-for-lxc.patch delete mode 100644 0111-lxc-use-safe_strdup-instead-of-strdup.patch delete mode 100644 0112-fix-secure-errors.patch delete mode 100644 0113-Malloc-parameter-check-and-judgment.patch delete mode 100644 0114-lxc-fix-code-errors.patch delete mode 100644 0115-fix-compile-error-on-ubuntu.patch delete mode 100644 0116-lxc-set-base-cgroup-path-to.patch delete mode 100644 0117-pupulate-device-with-dir-mode-750-and-set-uid-gid.patch delete mode 100644 0118-fix-sscanf-return-value-check.patch delete mode 100644 0119-remove-unuse-binary.patch delete mode 100644 0120-remove-unuse-unmount-namespace.patch delete mode 100644 0121-optimize-log-when-root-path-is-invalid.patch delete mode 100644 0122-lxc-fix-code-reivew-errors.patch delete mode 100644 0123-in-accordance-with-hook-spec-in-oci.patch delete mode 100644 0124-lxc-close-maincmd-fd-before-destroy-cgroup.patch delete mode 100644 0125-lxc-fix-strcat-bug-in-cleanpath.patch delete mode 100644 0126-add-user-option-for-lxc-attach.patch delete mode 100644 0127-log-only-write-size-begin-if-buffer-is-full.patch delete mode 100644 0129-cgfsng-add-retry-for-enter-cgroup.patch delete mode 100644 0130-fix-snprintf-create-abstract-socket-name-bug.patch delete mode 100644 0131-fix-commands-and-terminal-memory-leak-bug.patch delete mode 100644 0132-lxc-fix-bug-in-cgroup-parent.patch delete mode 100644 0133-lxc-fix-bug-in-cgfsng.patch delete mode 100644 0134-lxc-do-cpuset-same-as-runc.patch delete mode 100644 0135-lxc-fix-code-warnings-for-cgfsng.c.patch delete mode 100644 0136-lxc-fix-retry-bug-in-cgroup.patch delete mode 100644 0137-lxc-fix-bug-in-read-proc.patch delete mode 100644 0139-lxc-fix-get-cgroup-path-by-config-instead-of-cmd.patch delete mode 100644 0140-lxc-remove-umask-when-populate-devices.patch delete mode 100644 lxc-3.0.3.tar.gz create mode 100644 lxc-4.0.1.tar.gz delete mode 100644 lxc-CVE-2019-5736-runC-rexec-callers-as-memfd.patch diff --git a/0001-iSulad-add-HAVE_ISULAD-macro.patch b/0001-iSulad-add-HAVE_ISULAD-macro.patch new file mode 100644 index 0000000..cbae979 --- /dev/null +++ b/0001-iSulad-add-HAVE_ISULAD-macro.patch @@ -0,0 +1,50 @@ +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/0001-confile-add-lxc.isulad.init.args-config-interface.patch b/0002-confile-add-lxc.isulad.init.args-config-interface.patch similarity index 57% rename from 0001-confile-add-lxc.isulad.init.args-config-interface.patch rename to 0002-confile-add-lxc.isulad.init.args-config-interface.patch index ffddf8b..cb8adf7 100644 --- a/0001-confile-add-lxc.isulad.init.args-config-interface.patch +++ b/0002-confile-add-lxc.isulad.init.args-config-interface.patch @@ -1,31 +1,43 @@ -From dd7c0b3cc5f4ce91f81dcb4f02bc8c4aaa023024 Mon Sep 17 00:00:00 2001 +From 549a0a959b84a483d9f733cf7a157900f4c889c4 Mon Sep 17 00:00:00 2001 From: LiFeng -Date: Thu, 10 Jan 2019 06:54:37 -0500 -Subject: [PATCH 001/140] confile: add lxc.isulad.init.args config interface +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 | 13 +++++++++++ - src/lxc/conf.h | 8 +++++++ - src/lxc/confile.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/lxccontainer.c | 30 +++++++++++++++++++++++++ - 4 files changed, 112 insertions(+) + 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 d95bc4c..f20d629 100644 +index 2f6be9f..62a6979 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c -@@ -4014,6 +4014,18 @@ void lxc_clear_includes(struct lxc_conf *conf) - } +@@ -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) +{ -+ int i; ++ size_t i; + + for (i = 0; i < lxc_conf->init_argc; i++) + free(lxc_conf->init_argv[i]); @@ -33,72 +45,65 @@ index d95bc4c..f20d629 100644 + + return 0; +} -+ - void lxc_conf_free(struct lxc_conf *conf) - { - if (!conf) -@@ -4057,6 +4069,7 @@ void lxc_conf_free(struct lxc_conf *conf) - lxc_clear_limits(conf, "lxc.prlimit"); - lxc_clear_sysctls(conf, "lxc.sysctl"); - lxc_clear_procs(conf, "lxc.proc"); -+ lxc_clear_init_args(conf); - free(conf->cgroup_meta.dir); - free(conf->cgroup_meta.controllers); - free(conf); ++#endif diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 41f67cf..95c3027 100644 +index 64885c3..8a198e4 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h -@@ -376,6 +376,10 @@ struct lxc_conf { - - /* procs */ - struct lxc_list procs; +@@ -398,6 +398,13 @@ struct lxc_conf { + /* Absolute path (in the container) to the shared mount point */ + char *path_cont; + } shmount; + -+ /* isulad add: init args used to repalce init_cmd*/ ++#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, -@@ -442,4 +446,8 @@ extern int lxc_clear_sysctls(struct lxc_conf *c, const char *key); - extern int setup_proc_filesystem(struct lxc_list *procs, pid_t pid); - extern int lxc_clear_procs(struct lxc_conf *c, const char *key); - -+/* isulad add begin */ +@@ -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); -+/* isulad add end */ -+ ++#endif #endif /* __LXC_CONF_H */ diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 05c6823..7297b35 100644 +index 0ca577f..e535beb 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c -@@ -150,6 +150,10 @@ lxc_config_define(tty_dir); +@@ -147,6 +147,9 @@ lxc_config_define(tty_dir); lxc_config_define(uts_name); lxc_config_define(sysctl); lxc_config_define(proc); -+/*isulad add begin*/ ++#ifdef HAVE_ISULAD +lxc_config_define(init_args); -+/*isulad add end*/ -+ ++#endif - static struct lxc_config_t config_jump_table[] = { - { "lxc.arch", set_config_personality, get_config_personality, clr_config_personality, }, -@@ -234,6 +238,10 @@ static struct lxc_config_t config_jump_table[] = { + /* + * 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, }, + -+ /*isulad add begin*/ -+ { "lxc.isulad.init.args", set_config_init_args, get_config_init_args, clr_config_init_args, }, -+ /*isulad add end*/ ++#endif }; static const size_t config_jump_table_size = sizeof(config_jump_table) / sizeof(struct lxc_config_t); -@@ -2184,6 +2192,33 @@ static int set_config_namespace_share(const char *key, const char *value, - return set_config_string_item(&lxc_conf->ns_share[ns_idx], value); - } +@@ -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) @@ -126,13 +131,6 @@ index 05c6823..7297b35 100644 + return 0; +} + - struct parse_line_conf { - struct lxc_conf *conf; - bool from_include; -@@ -3716,6 +3751,25 @@ static int get_config_namespace_share(const char *key, char *retv, int inlen, - return fulllen; - } - +/* isulad: get config init args */ +static int get_config_init_args(const char *key, char *retv, int inlen, + struct lxc_conf *c, void *data) @@ -152,31 +150,22 @@ index 05c6823..7297b35 100644 + return fulllen; +} + - /* Callbacks to clear config items. */ - static inline int clr_config_personality(const char *key, struct lxc_conf *c, - void *data) -@@ -4520,6 +4574,13 @@ static int clr_config_net_ipv6_address(const char *key, - return 0; - } - +/* 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); +} -+ - static int get_config_net_nic(const char *key, char *retv, int inlen, - struct lxc_conf *c, void *data) - { ++#endif diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index ad70886..b4cacce 100644 +index 487d838..f4462fd 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c -@@ -847,6 +847,31 @@ static bool wait_on_daemonized_start(struct lxc_handler *handler, int pid) +@@ -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) +{ @@ -201,18 +190,20 @@ index ad70886..b4cacce 100644 + } + return argv; +} ++#endif + static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const argv[]) { int ret; -@@ -903,6 +928,11 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a +@@ -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); } -+ /* isulad: use init argv as 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) { diff --git a/0002-namespace-add-support-share-namespace-by-path.patch b/0002-namespace-add-support-share-namespace-by-path.patch deleted file mode 100644 index dab8b2f..0000000 --- a/0002-namespace-add-support-share-namespace-by-path.patch +++ /dev/null @@ -1,35 +0,0 @@ -From bcc0965a02a571c39713056536d63f3378dcba3a Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 10 Jan 2019 08:42:19 -0500 -Subject: [PATCH 002/140] namespace: add support share namespace by path - -Signed-off-by: LiFeng ---- - src/lxc/confile_utils.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/src/lxc/confile_utils.c b/src/lxc/confile_utils.c -index 7280463..9049ce8 100644 ---- a/src/lxc/confile_utils.c -+++ b/src/lxc/confile_utils.c -@@ -789,6 +789,17 @@ int lxc_inherit_namespace(const char *lxcname_or_pid, const char *lxcpath, - int fd, pid; - char *dup, *lastslash; - -+ /* isulad: add support share namespace by path. -+ * e.g. "lxc.namespace.share.net = /proc/PID/ns/net or /var/run/netns/net" -+ */ -+ if (file_exists(lxcname_or_pid) && !dir_exists(lxcname_or_pid)) { -+ fd = open(lxcname_or_pid, O_RDONLY | O_CLOEXEC); -+ if (fd < 0) -+ return -EINVAL; -+ -+ return fd; -+ } -+ - lastslash = strrchr(lxcname_or_pid, '/'); - if (lastslash) { - dup = strdup(lxcname_or_pid); --- -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 index 146239f..3b26bf1 100644 --- a/0003-confile-add-lxc.isulad.populate.device-interface.patch +++ b/0003-confile-add-lxc.isulad.populate.device-interface.patch @@ -1,62 +1,105 @@ -From b4e5d9e162a17f50367aad1ea92df7dc09fa34e9 Mon Sep 17 00:00:00 2001 +From 481e3bf2c164d5303c6f827fc2bcbb67508d0ff5 Mon Sep 17 00:00:00 2001 From: LiFeng -Date: Fri, 11 Jan 2019 01:51:25 -0500 -Subject: [PATCH 003/140] confile: add lxc.isulad.populate.device interface +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/conf.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++--- - src/lxc/conf.h | 28 +++++++++++- - src/lxc/confile.c | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 269 insertions(+), 8 deletions(-) + 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 f20d629..20b7aba 100644 +index 62a6979..e9c0a37 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c -@@ -2745,6 +2745,10 @@ struct lxc_conf *lxc_conf_init(void) - memset(&new->cgroup_meta, 0, sizeof(struct lxc_cgroup)); +@@ -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); -+ /* isulad add end */ ++#endif + return new; } -@@ -3487,6 +3491,85 @@ static bool execveat_supported(void) - return true; +@@ -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; -+ char *pathdirname; ++ int ret = 0; ++ char *pathdirname = NULL; + char path[MAXPATHLEN]; -+ mode_t cmask; + mode_t file_mode = 0; -+ struct lxc_populate_devs *dev_elem; -+ struct lxc_list *it; ++ struct lxc_populate_devs *dev_elem = NULL; ++ struct lxc_list *it = NULL; ++ mode_t cur_mask; + + INFO("Populating devices into container"); -+ cmask = umask(S_IXUSR | S_IXGRP | S_IXOTH); ++ 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) -+ return -1; ++ if (ret < 0 || ret >= MAXPATHLEN) { ++ ret = -1; ++ goto reset_umask; ++ } + + /* create any missing directories */ -+ pathdirname = strdup(path); ++ pathdirname = safe_strdup(path); + pathdirname = dirname(pathdirname); -+ ret = mkdir_p(pathdirname, 0750); ++ ret = mkdir_p(pathdirname, 0755); + free(pathdirname); + if (ret < 0) { + WARN("Failed to create target directory"); -+ return -1; ++ ret = -1; ++ goto reset_umask; + } + + if (!strcmp(dev_elem->type, "c")) { @@ -65,95 +108,95 @@ index f20d629..20b7aba 100644 + file_mode = dev_elem->file_mode | S_IFBLK; + } else { + ERROR("Failed to parse devices type '%s'", dev_elem->type); -+ return -1; ++ ret = -1; ++ goto reset_umask; + } + + DEBUG("Try to mknod '%s':'%d':'%d':'%d'\n", path, -+ file_mode, dev_elem->maj, dev_elem->min); ++ 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); ++ file_mode, dev_elem->maj, dev_elem->min); + + char hostpath[MAXPATHLEN]; -+ FILE *pathfile; ++ 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) -+ return -1; -+ pathfile = fopen(path, "wb"); ++ 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); -+ return -1; ++ ret = -1; ++ goto reset_umask; + } + fclose(pathfile); + if (safe_mount(hostpath, path, 0, MS_BIND, NULL, -+ rootfs->path ? rootfs->mount : NULL) != 0) { ++ rootfs->path ? rootfs->mount : NULL) != 0) { + SYSERROR("Failed bind mounting device %s from host into container", -+ dev_elem->name); -+ return -1; ++ dev_elem->name); ++ ret = -1; ++ goto reset_umask; + } + } + if (chown(path, dev_elem->uid, dev_elem->gid) < 0) { + ERROR("Error chowning %s", path); -+ return -1; ++ ret = -1; ++ goto reset_umask; + } + } -+ umask(cmask); ++ ++reset_umask: ++ (void)umask(cur_mask); + + INFO("Populated devices into container /dev"); -+ return 0; ++ return ret; +} ++#endif + int lxc_setup(struct lxc_handler *handler) { int ret; -@@ -3584,6 +3667,16 @@ int lxc_setup(struct lxc_handler *handler) - return -1; +@@ -3382,6 +3480,15 @@ int lxc_setup(struct lxc_handler *handler) + return log_error(-1, "Failed to populate \"/dev\""); } -+ /*isulad: move mount entrues here, before we do lxc_fill_autodev and populate devices */ -+ if (!lxc_list_empty(&lxc_conf->mount_list)) { -+ ret = setup_mount_entries(lxc_conf, &lxc_conf->rootfs, -+ &lxc_conf->mount_list, name, lxcpath); -+ if (ret < 0) { -+ ERROR("Failed to setup mount entries"); -+ return -1; ++#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 + - ret = run_lxc_hooks(name, "mount", lxc_conf, NULL); - if (ret < 0) { - ERROR("Failed to run mount hooks"); -@@ -3604,12 +3697,11 @@ int lxc_setup(struct lxc_handler *handler) - } - } - -- if (!lxc_list_empty(&lxc_conf->mount_list)) { -- ret = setup_mount_entries(lxc_conf, &lxc_conf->rootfs, -- &lxc_conf->mount_list, name, lxcpath); -- if (ret < 0) { -- ERROR("Failed to setup mount entries"); -- return -1; -+ /* 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)) { -+ ERROR("Failed to setup devices in the container"); -+ return -1;; - } - } + /* 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) -@@ -4026,6 +4118,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,*next; ++ 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; @@ -166,31 +209,17 @@ index f20d629..20b7aba 100644 + return 0; +} + - void lxc_conf_free(struct lxc_conf *conf) - { - if (!conf) -@@ -4069,9 +4177,12 @@ void lxc_conf_free(struct lxc_conf *conf) - lxc_clear_limits(conf, "lxc.prlimit"); - lxc_clear_sysctls(conf, "lxc.sysctl"); - lxc_clear_procs(conf, "lxc.proc"); -- lxc_clear_init_args(conf); - free(conf->cgroup_meta.dir); - free(conf->cgroup_meta.controllers); -+ /* isulad add begin */ -+ lxc_clear_init_args(conf); -+ lxc_clear_populate_devices(conf); -+ /* isulad add end */ - free(conf); - } - + #endif diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 95c3027..cced868 100644 +index 8a198e4..452458c 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h -@@ -171,6 +171,26 @@ struct lxc_rootfs { +@@ -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 @@ -208,164 +237,146 @@ index 95c3027..cced868 100644 + uid_t uid; + gid_t gid; +}; ++#endif + -+ -+/* - * Automatic mounts for LXC to perform inside the container - */ - enum { -@@ -377,9 +397,13 @@ struct lxc_conf { - /* procs */ - struct lxc_list procs; - -- /* isulad add: init args used to repalce init_cmd*/ -+ /* isulad add begin */ -+ /* init args used to repalce init_cmd*/ + 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; -+ /* isulad add end */ - }; + #endif - extern int write_id_mapping(enum idtype idtype, pid_t pid, const char *buf, -@@ -448,6 +472,8 @@ extern int lxc_clear_procs(struct lxc_conf *c, const char *key); - - /* isulad add begin */ + }; +@@ -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); -+ - /* isulad add end */ - + #endif #endif /* __LXC_CONF_H */ diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 7297b35..e3212d3 100644 +index e535beb..f0772f9 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c -@@ -152,6 +152,7 @@ lxc_config_define(sysctl); +@@ -149,6 +149,7 @@ lxc_config_define(sysctl); lxc_config_define(proc); - /*isulad add begin*/ + #ifdef HAVE_ISULAD lxc_config_define(init_args); +lxc_config_define(populate_device); - /*isulad add end*/ - + #endif -@@ -241,6 +242,7 @@ static struct lxc_config_t config_jump_table[] = { - - /*isulad add begin*/ - { "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, }, - /*isulad add end*/ + /* +@@ -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 }; -@@ -2219,6 +2221,93 @@ static int set_config_init_args(const char *key, const char *value, - return 0; +@@ -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 init args */ ++ ++/* 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) ++ 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[PATH_MAX] = {0}; -+ char type[3] = {0}; -+ char *replace_value = NULL; -+ mode_t filemode = 0; -+ struct lxc_list *iter; -+ 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, "%[^:]:%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 = strdup(type); -+ if (!replace_value) -+ return -1; -+ -+ 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) -+ goto on_error; -+ -+ lxc_list_init(dev_list); -+ -+ dev_elem = malloc(sizeof(*dev_elem)); -+ if (!dev_elem) -+ goto on_error; -+ memset(dev_elem, 0, sizeof(*dev_elem)); -+ -+ dev_elem->name = strdup(name); -+ if (!dev_elem->name) -+ goto on_error; -+ -+ dev_elem->type = strdup(type); -+ if (!dev_elem->type) -+ goto on_error; -+ -+ dev_elem->file_mode = filemode; -+ dev_elem->maj = major; -+ dev_elem->min = minor; -+ -+ lxc_list_add_elem(dev_list, dev_elem); -+ -+ lxc_list_add_tail(&lxc_conf->populate_devs, dev_list); -+ -+ return 0; ++ 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; + -+on_error: -+ free(dev_list); -+ if (dev_elem) { -+ free(dev_elem->name); -+ free(dev_elem->type); -+ free(dev_elem); -+ } -+ return -1; ++ 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; +} + - struct parse_line_conf { - struct lxc_conf *conf; - bool from_include; -@@ -3770,6 +3859,34 @@ static int get_config_init_args(const char *key, char *retv, int inlen, - return fulllen; - } - +/* 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) ++ struct lxc_conf *c, void *data) +{ + int len; -+ struct lxc_list *it; ++ struct lxc_list *it = NULL; + int fulllen = 0; + + if (!retv) @@ -376,31 +387,898 @@ index 7297b35..e3212d3 100644 + 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); ++ elem->name, elem->type, elem->maj, ++ elem->min, elem->file_mode, elem->uid, elem->gid); + } + + return fulllen; +} + -+ - /* Callbacks to clear config items. */ - static inline int clr_config_personality(const char *key, struct lxc_conf *c, - void *data) -@@ -4581,6 +4698,13 @@ static inline int clr_config_init_args(const char *key, struct lxc_conf *c, - return lxc_clear_init_args(c); - } - +/* isulad: clr config populate devices*/ +static inline int clr_config_populate_device(const char *key, struct lxc_conf *c, -+ void *data) ++ void *data) +{ + return lxc_clear_populate_devices(c); +} + - static int get_config_net_nic(const char *key, char *retv, int inlen, - struct lxc_conf *c, void *data) - { + #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/0057-confile-add-support-umask.patch b/0004-confile-add-support-umask.patch similarity index 49% rename from 0057-confile-add-support-umask.patch rename to 0004-confile-add-support-umask.patch index 58e513c..bcea2b7 100644 --- a/0057-confile-add-support-umask.patch +++ b/0004-confile-add-support-umask.patch @@ -1,91 +1,93 @@ -From 5712305711a0f57d2d167b49da1093204abaffcd Mon Sep 17 00:00:00 2001 +From e1bf4afdac0f4e1c19ad24c7c9fb915ce72906ed Mon Sep 17 00:00:00 2001 From: LiFeng -Date: Wed, 30 Jan 2019 03:39:42 -0500 -Subject: [PATCH 057/140] confile: add support umask +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 | 4 ++-- - src/lxc/conf.c | 5 +++-- + src/lxc/attach.c | 5 +++++ + src/lxc/conf.c | 6 ++++++ src/lxc/conf.h | 1 + src/lxc/confile.c | 38 ++++++++++++++++++++++++++++++++++++++ - 4 files changed, 44 insertions(+), 4 deletions(-) + 4 files changed, 50 insertions(+) diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index b44ea74..9768897 100644 +index 406b8ec..56d62ed 100644 --- a/src/lxc/attach.c +++ b/src/lxc/attach.c -@@ -768,8 +768,8 @@ static int attach_child_main(struct attach_clone_payload *payload) - msg_fd = init_ctx->container->lxc_conf->errpipe[1]; - init_ctx->container->lxc_conf->errpipe[1] = -1; +@@ -659,6 +659,11 @@ static int attach_child_main(struct attach_clone_payload *payload) + (options->attach_flags & LXC_ATTACH_LSM) && + init_ctx->lsm_label; -- /*isulad: set system umask 0027 for safe control */ -- umask(0027); -+ /*isulad: set system umask */ ++#ifdef HAVE_ISULAD ++ /*isulad: set system umask */ + umask(init_ctx->container->lxc_conf->umask); - - /*isulad: restore default signal handlers and unblock all signals*/ - for (i = 1; i < NSIG; i++) ++#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 0c6aa28..67beefe 100644 +index e9c0a37..e3fce51 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c -@@ -3163,6 +3163,7 @@ struct lxc_conf *lxc_conf_init(void) - new->errmsg = NULL; - new->errpipe[0] = -1; - new->errpipe[1] = -1; +@@ -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*/ - /* isulad add end */ + #endif return new; -@@ -4216,8 +4217,8 @@ int lxc_setup(struct lxc_handler *handler) - } - } +@@ -3522,6 +3523,11 @@ int lxc_setup(struct lxc_handler *handler) + if (ret < 0) + return -1; -- /*isulad: set system umask 0027 for safe control*/ -- umask(0027); ++#ifdef HAVE_ISULAD + /*isulad: set system umask */ + umask(lxc_conf->umask); - ++#endif ++ ret = setup_personality(lxc_conf->personality); - if (ret < 0) { + if (ret < 0) + return log_error(-1, "Failed to set personality"); diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 88f5b41..93cf15d 100644 +index 452458c..7ed3cd0 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h @@ -427,6 +427,7 @@ struct lxc_conf { - char *errmsg; /* record error messages */ - int errpipe[2];//pipdfd for get error message of child or grandchild process. + /* populate devices*/ + struct lxc_list populate_devs; + mode_t umask; //umask value - /* isulad add end */ - }; + #endif + }; diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index f66d01b..3940b32 100644 +index f0772f9..2df269a 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c -@@ -155,6 +155,7 @@ lxc_config_define(proc); - /*isulad add begin*/ +@@ -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); - /*isulad add end*/ + #endif - -@@ -247,6 +248,7 @@ static struct lxc_config_t config_jump_table[] = { + /* +@@ -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.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.umask", set_config_umask, get_config_umask, clr_config_umask, }, - /*isulad add end*/ + #endif }; -@@ -2371,6 +2373,27 @@ on_error: - +@@ -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 */ @@ -109,13 +111,6 @@ index f66d01b..3940b32 100644 + } +} + - struct parse_line_conf { - struct lxc_conf *conf; - bool from_include; -@@ -3141,6 +3164,13 @@ static int get_config_tty_max(const char *key, char *retv, int inlen, - return lxc_get_conf_size_t(c, retv, inlen, c->ttys.max); - } - +/* isulad add: get umask value*/ +static int get_config_umask(const char *key, char *retv, int inlen, + struct lxc_conf *c, void *data) @@ -123,13 +118,6 @@ index f66d01b..3940b32 100644 + return lxc_get_conf_size_t(c, retv, inlen, c->umask); +} + - static int get_config_tty_dir(const char *key, char *retv, int inlen, - struct lxc_conf *c, void *data) - { -@@ -4396,6 +4426,14 @@ static int clr_config_namespace_share(const char *key, - return 0; - } - +/* isulad add: clear umask value */ +static inline int clr_config_umask(const char *key, struct lxc_conf *c, + void *data) @@ -138,9 +126,7 @@ index f66d01b..3940b32 100644 + return 0; +} + - static int get_config_includefiles(const char *key, char *retv, int inlen, - struct lxc_conf *c, void *data) - { + #endif -- 1.8.3.1 diff --git a/0004-support-isulad-fifo-log.patch b/0004-support-isulad-fifo-log.patch deleted file mode 100644 index 9dbb2cc..0000000 --- a/0004-support-isulad-fifo-log.patch +++ /dev/null @@ -1,96 +0,0 @@ -From f83ae83808419f6742265b8bafc3441fdca65cbb Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Fri, 11 Jan 2019 16:11:34 +0800 -Subject: [PATCH 004/140] support isulad fifo log - -support isulad fifo log in lxc3.0 - -Signed-off-by: LiFeng ---- - src/lxc/log.c | 42 ++++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 40 insertions(+), 2 deletions(-) - -diff --git a/src/lxc/log.c b/src/lxc/log.c -index 1e0cc6a..4e74459 100644 ---- a/src/lxc/log.c -+++ b/src/lxc/log.c -@@ -68,6 +68,7 @@ static int syslog_enable = 0; - int lxc_quiet_specified; - int lxc_log_use_global_fd; - static int lxc_loglevel_specified; -+static bool isulad_use_log_fifo_flag = false; - - static char log_prefix[LXC_LOG_PREFIX_SIZE] = "lxc"; - static char *log_fname = NULL; -@@ -138,6 +139,37 @@ static char *lxc_log_get_va_msg(struct lxc_log_event *event) - return msg; - } - -+static const char *isulad_use_log_fifo(const char *file) -+{ -+#define ISULAD_FIFO_PREFIX "fifo:" -+ -+ if (strncmp(file, ISULAD_FIFO_PREFIX, strlen(ISULAD_FIFO_PREFIX)) == 0) { -+ isulad_use_log_fifo_flag = true; -+ return (file + strlen(ISULAD_FIFO_PREFIX)); -+ } -+ return file; -+} -+ -+static int isulad_open_fifo(const char *file_path) -+{ -+#define LOG_FIFO_SIZE (1024 * 1024) -+ int fd = -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; -+ } -+ -+ return fd; -+} -+ - /*---------------------------------------------------------------------------*/ - static int log_append_syslog(const struct lxc_log_appender *appender, - struct lxc_log_event *event) -@@ -609,7 +641,11 @@ static int __lxc_log_set_file(const char *fname, int create_dirs) - return -1; - } - -- lxc_log_fd = log_open(fname); -+ if (isulad_use_log_fifo_flag) { -+ lxc_log_fd = isulad_open_fifo(fname); -+ } else { -+ lxc_log_fd = log_open(fname); -+ } - if (lxc_log_fd == -1) - return -1; - -@@ -642,6 +678,7 @@ int lxc_log_init(struct lxc_log *log) - { - int ret; - int lxc_priority = LXC_LOG_LEVEL_ERROR; -+ const char *tmp_log_fname; - - if (!log) - return -1; -@@ -673,7 +710,8 @@ int lxc_log_init(struct lxc_log *log) - if (strcmp(log->file, "none") == 0) - return 0; - -- ret = __lxc_log_set_file(log->file, 1); -+ tmp_log_fname = isulad_use_log_fifo(log->file); -+ ret = __lxc_log_set_file(tmp_log_fname, 1); - if (ret < 0) { - ERROR("Failed to enable logfile"); - return -1; --- -1.8.3.1 - diff --git a/0005-auto-mount-cgroup-sys-and-proc.patch b/0005-auto-mount-cgroup-sys-and-proc.patch deleted file mode 100644 index eee484b..0000000 --- a/0005-auto-mount-cgroup-sys-and-proc.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 7cb675179d84838d751312fb675c442325413270 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Thu, 10 Jan 2019 20:40:19 +0800 -Subject: [PATCH 005/140] auto mount cgroup sys and proc - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 8 ++++++-- - src/lxc/conf.c | 15 ++++++++++++--- - 2 files changed, 18 insertions(+), 5 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index acc6c30..aff2b5e 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1648,6 +1648,10 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - - /* 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); -@@ -1700,8 +1704,8 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - continue; - } - -- path2 = must_make_path(controllerpath, h->container_base_path, -- ops->container_cgroup, NULL); -+ // Ignore ops->container_cgroup so we will not see directory lxc after /sys/fs/cgroup/xxx in container -+ path2 = must_make_path(controllerpath, h->container_base_path, NULL); - ret = mkdir_p(path2, 0755); - if (ret < 0) { - free(controllerpath); -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 20b7aba..18753d1 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -670,8 +670,8 @@ 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 }, -- { 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 }, -+ { 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 }, - { 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, NULL, "%r/sys", NULL, MS_REMOUNT|MS_BIND|MS_RDONLY, NULL }, - { LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_MIXED, "sysfs", "%r/sys/devices/virtual/net", "sysfs", 0, NULL }, -@@ -710,6 +710,15 @@ static int lxc_mount_auto_mounts(struct lxc_conf *conf, int flags, struct lxc_ha - return -1; - } - -+ if (mkdir_p(destination, 0755) < 0) { -+ SYSERROR("Failed to create mount target '%s'", destination); -+ saved_errno = errno; -+ free(source); -+ free(destination); -+ errno = saved_errno; -+ return -1; -+ } -+ - mflags = add_required_remount_flags(source, destination, - default_mounts[i].flags); - r = safe_mount(source, destination, default_mounts[i].fstype, -@@ -717,7 +726,7 @@ static int lxc_mount_auto_mounts(struct lxc_conf *conf, int flags, struct lxc_ha - conf->rootfs.path ? conf->rootfs.mount : NULL); - saved_errno = errno; - if (r < 0 && errno == ENOENT) { -- INFO("Mount source or target for \"%s\" on \"%s\" does " -+ INFO("Mount source for \"%s\" on \"%s\" does " - "not exist. Skipping", source, destination); - r = 0; - } else if (r < 0) { --- -1.8.3.1 - diff --git a/0005-cgroup-refact-cgroup-implemt.patch b/0005-cgroup-refact-cgroup-implemt.patch new file mode 100644 index 0000000..0f4426e --- /dev/null +++ b/0005-cgroup-refact-cgroup-implemt.patch @@ -0,0 +1,1149 @@ +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-conf.c-fix-bug-when-set-no-ro-mount-mount-propagatio.patch b/0006-conf.c-fix-bug-when-set-no-ro-mount-mount-propagatio.patch deleted file mode 100644 index b64419d..0000000 --- a/0006-conf.c-fix-bug-when-set-no-ro-mount-mount-propagatio.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 80fcf03d746825fcf809f7b415782a410d9d87d3 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Fri, 11 Jan 2019 16:55:01 +0800 -Subject: [PATCH 006/140] conf.c: fix bug when set no ro mount, mount - propagation will be skipped - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 7 +++---- - 1 file changed, 3 insertions(+), 4 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 18753d1..37a5ff7 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -2087,6 +2087,9 @@ static int mount_entry(const char *fsname, const char *target, - } - } - -+#ifdef HAVE_STATVFS -+ skipremount: -+#endif - if (pflags) { - ret = mount(NULL, target, NULL, pflags, NULL); - if (ret < 0) { -@@ -2103,10 +2106,6 @@ static int mount_entry(const char *fsname, const char *target, - DEBUG("Changed mount propagation for \"%s\"", target); - } - -- --#ifdef HAVE_STATVFS --skipremount: --#endif - DEBUG("Mounted \"%s\" on \"%s\" with filesystem type \"%s\"", - srcpath ? srcpath : "(null)", target, fstype); - --- -1.8.3.1 - diff --git a/0008-isulad-modify-exit-code-and-stop-signal.patch b/0006-modify-container-exit-code-and-stop-signal.patch similarity index 39% rename from 0008-isulad-modify-exit-code-and-stop-signal.patch rename to 0006-modify-container-exit-code-and-stop-signal.patch index a565d18..5e10943 100644 --- a/0008-isulad-modify-exit-code-and-stop-signal.patch +++ b/0006-modify-container-exit-code-and-stop-signal.patch @@ -1,87 +1,80 @@ -From 98dbcb7dacbf18393295a9dcf054a65f9033ea5d Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Fri, 11 Jan 2019 17:44:53 +0800 -Subject: [PATCH 008/140] isulad: modify exit code and stop signal +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 -1. modify default stop signal and disable reboot by signal. -2. send '128 + signal' if container is killed by signal. - -Signed-off-by: LiFeng +Signed-off-by: wujing --- - src/lxc/lxccontainer.c | 6 ++---- - src/lxc/start.c | 33 ++++++++++++++++----------------- - 2 files changed, 18 insertions(+), 21 deletions(-) + 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 b4cacce..1d7f5be 100644 +index f4462fd..a617172 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c -@@ -2069,7 +2069,8 @@ static bool do_lxcapi_shutdown(struct lxc_container *c, int timeout) +@@ -2101,7 +2101,12 @@ WRAP_API_1(bool, lxcapi_reboot2, int) + static bool do_lxcapi_shutdown(struct lxc_container *c, int timeout) { - int killret, ret; - pid_t pid; -- int haltsignal = SIGPWR, state_client_fd = -EBADF; -+ // isulad: keep default signal the same as docker -+ int haltsignal = SIGTERM, state_client_fd = -EBADF; + __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}; - - if (!c) -@@ -2082,11 +2083,8 @@ static bool do_lxcapi_shutdown(struct lxc_container *c, int timeout) + 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; -- else if (task_blocks_signal(pid, (SIGRTMIN + 3))) -- haltsignal = (SIGRTMIN + 3); ++#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 that we - * don't miss a state. + /* + * Add a new state client before sending the shutdown signal so diff --git a/src/lxc/start.c b/src/lxc/start.c -index 72e2de2..d64bdac 100644 +index a25bd04..5dcf828 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c -@@ -1893,11 +1893,14 @@ out_abort: +@@ -1886,10 +1886,18 @@ out_sync_fini: return -1; } ++#ifdef HAVE_ISULAD +// isulad: send '128 + signal' if container is killed by signal. -+#define ExitSignalOffset 128 ++#define EXIT_SIGNAL_OFFSET 128 ++#endif + - int __lxc_start(const char *name, struct lxc_handler *handler, - struct lxc_operations* ops, void *data, const char *lxcpath, - bool daemonize, int *error_num) + int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, + void *data, const char *lxcpath, bool daemonize, int *error_num) { -- int ret, status; -+ int ret, status, exit_code; + int ret, status; ++#ifdef HAVE_ISULAD ++ int exit_code; ++#endif + const char *name = handler->name; struct lxc_conf *conf = handler->conf; - - ret = lxc_init(name, handler); -@@ -1966,22 +1969,18 @@ int __lxc_start(const char *name, struct lxc_handler *handler, + 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)) { -- switch(WTERMSIG(status)) { -- case SIGINT: /* halt */ -- DEBUG("Container \"%s\" is halting", name); -- break; -- case SIGHUP: /* reboot */ -- DEBUG("Container \"%s\" is rebooting", name); -- handler->conf->reboot = REBOOT_REQ; -- break; -- case SIGSYS: /* seccomp */ -- DEBUG("Container \"%s\" violated its seccomp policy", name); -- break; -- default: -- DEBUG("Unknown exit status for container \"%s\" init %d", name, WTERMSIG(status)); -- break; -- } ++ if (WIFSIGNALED(status)) { + int signal = WTERMSIG(status); + signal = WTERMSIG(status); -+ exit_code = ExitSignalOffset + signal; ++ exit_code = EXIT_SIGNAL_OFFSET + signal; + ERROR("Container \"%s\" init exited with signal %d", name, signal); + } else if (WIFEXITED(status)) { + exit_code = WEXITSTATUS(status); @@ -89,15 +82,28 @@ index 72e2de2..d64bdac 100644 + } 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); -@@ -1994,7 +1993,7 @@ int __lxc_start(const char *name, struct lxc_handler *handler, - handler->pinfd = -1; - } + if (ret < 0) +@@ -2000,7 +2024,11 @@ int __lxc_start(struct lxc_handler *handler, struct lxc_operations *ops, + + close_prot_errno_disarm(handler->pinfd); -- lxc_monitor_send_exit_code(name, status, handler->lxcpath); ++#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; diff --git a/0010-Save-pid-ppid-info-into-file-for-isulad.patch b/0007-check-and-save-pid-info-file.patch similarity index 34% rename from 0010-Save-pid-ppid-info-into-file-for-isulad.patch rename to 0007-check-and-save-pid-info-file.patch index 2e021ef..3eaa02f 100644 --- a/0010-Save-pid-ppid-info-into-file-for-isulad.patch +++ b/0007-check-and-save-pid-info-file.patch @@ -1,58 +1,59 @@ -From 523b705fb269a9463b9412aa3a814a9c71a743cc Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Fri, 11 Jan 2019 22:53:56 -0500 -Subject: [PATCH 010/140] Save pid/ppid info into file for isulad +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: LiFeng +Signed-off-by: wujing --- src/lxc/conf.c | 1 + src/lxc/conf.h | 2 + - src/lxc/lxccontainer.c | 24 ++++++++++ - src/lxc/lxccontainer.h | 10 ++++ - src/lxc/start.c | 41 +++++++++++++++++ - src/lxc/tools/arguments.h | 2 + - src/lxc/tools/lxc_start.c | 20 ++++++++ - src/lxc/utils.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/utils.h | 66 +++++++++++++++++++++++++++ - 9 files changed, 280 insertions(+) + 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 7b7f95b..0b4b63b 100644 +index e806605..43437af 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c -@@ -4194,6 +4194,7 @@ void lxc_conf_free(struct lxc_conf *conf) - /* isulad add begin */ +@@ -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); -+ free(conf->container_info_file); - /* isulad add end */ - free(conf); - } + #endif diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index cced868..e0954f9 100644 +index 7ed3cd0..23942ac 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h -@@ -403,6 +403,8 @@ struct lxc_conf { - size_t init_argc; +@@ -428,6 +428,8 @@ struct lxc_conf { /* populate devices*/ struct lxc_list populate_devs; + mode_t umask; //umask value + + char *container_info_file; - /* isulad add end */ - }; + #endif + }; diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 318c71e..5679b9b 100644 +index a617172..33bb3ec 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c -@@ -4988,6 +4988,29 @@ static bool do_lxcapi_set_terminal_default_fifos(struct lxc_container *c, const +@@ -5293,6 +5293,31 @@ static int do_lxcapi_seccomp_notify_fd(struct lxc_container *c) - WRAP_API_2(bool, lxcapi_set_terminal_default_fifos, const char *, const char *) + 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; ++ struct lxc_conf *conf = NULL; + + if (!c || !c->lxc_conf || !info_file) + return false; @@ -64,34 +65,39 @@ index 318c71e..5679b9b 100644 + conf = c->lxc_conf; + if (conf->container_info_file) + free(conf->container_info_file); -+ conf->container_info_file = strdup(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; -@@ -5113,6 +5136,7 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath - - /* isulad add begin */ - c->set_terminal_init_fifos = lxcapi_set_terminal_default_fifos; +@@ -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; - /* isulad add end */ ++#endif return c; + err: diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index 486531e..3c845fe 100644 +index 4577de7..edfff32 100644 --- a/src/lxc/lxccontainer.h +++ b/src/lxc/lxccontainer.h -@@ -857,6 +857,16 @@ struct lxc_container { - * \return \c true on success, else \c false. +@@ -865,6 +865,18 @@ struct lxc_container { + * \return pidfd of init process of the container. */ - bool (*set_terminal_init_fifos)(struct lxc_container *c, const char *in, const char *out); + int (*init_pidfd)(struct lxc_container *c); + ++#ifdef HAVE_ISULAD + /*! isulad add + * \brief An API call to set the path of info file + * @@ -101,38 +107,32 @@ index 486531e..3c845fe 100644 + * \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 d64bdac..9d71dd7 100644 +index 5dcf828..f5f9565 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c -@@ -1553,6 +1553,39 @@ static inline int do_share_ns(void *arg) +@@ -1537,6 +1537,94 @@ static inline int do_share_ns(void *arg) return 0; } -+/* isuald: save pid/ppid info */ -+static int lxc_save_container_info(char *filename, pid_t pid) ++#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_t p_pid = 0; -+ unsigned long long start_at = 0; -+ unsigned long long p_start_at = 0; + -+ pid_fp = fopen(filename, "w"); ++ pid_fp = lxc_fopen(filename, "w"); + if (pid_fp == NULL) { + SYSERROR("Failed to create pidfile '%s'",filename); + ret = -1; + goto out; + } + -+ start_at = lxc_get_process_startat(pid); -+ -+ p_pid = getpid(); -+ p_start_at = lxc_get_process_startat(p_pid); -+ + 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; @@ -144,83 +144,164 @@ index d64bdac..9d71dd7 100644 + 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 -@@ -1683,6 +1716,14 @@ static int lxc_spawn(struct lxc_handler *handler) +@@ -1648,6 +1736,16 @@ static int lxc_spawn(struct lxc_handler *handler) } TRACE("Cloned child process %d", handler->pid); -+ /* 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; -+ } -+ } -+ - 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); ++#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 b7af2b5..b6df23f 100644 +index cb0ba74..91f4e9a 100644 --- a/src/lxc/tools/arguments.h +++ b/src/lxc/tools/arguments.h -@@ -63,6 +63,7 @@ struct lxc_arguments { +@@ -40,6 +40,9 @@ struct lxc_arguments { + /* for lxc-start */ const char *share_ns[32]; /* size must be greater than LXC_NS_MAX */ - const char *terminal_fifos[2]; /* isulad add, fifos used to redirct stdin/out/err */ ++#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; -@@ -176,6 +177,7 @@ struct lxc_arguments { - /* isulad add begin */ - #define OPT_INPUT_FIFO OPT_USAGE - 7 - #define OPT_OUTPUT_FIFO OPT_USAGE - 8 -+#define OPT_CONTAINER_INFO OPT_USAGE - 9 - /* isulad add end*/ +@@ -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 8f03f11..2f94d67 100644 +index 459b867..83ee75a 100644 --- a/src/lxc/tools/lxc_start.c +++ b/src/lxc/tools/lxc_start.c -@@ -69,8 +69,11 @@ static const struct option my_longopts[] = { +@@ -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}, -+ /* isulad add begin */ - {"in-fifo", required_argument, 0, OPT_INPUT_FIFO}, - {"out-fifo", required_argument, 0, OPT_OUTPUT_FIFO}, ++#ifdef HAVE_ISULAD + {"container-pidfile", required_argument, 0, OPT_CONTAINER_INFO}, -+ /* isulad add end */ ++#endif LXC_COMMON_OPTIONS }; -@@ -148,6 +151,9 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - case OPT_OUTPUT_FIFO: - args->terminal_fifos[1] = arg; +@@ -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; } -@@ -189,6 +195,7 @@ int main(int argc, char *argv[]) - struct lxc_log log; - int err = EXIT_FAILURE; - char *rcfile = NULL; -+ char *container_info_file = NULL; /* isulad: info file*/ - char *const default_args[] = { +@@ -163,6 +171,9 @@ int main(int argc, char *argv[]) "/sbin/init", NULL, -@@ -313,6 +320,18 @@ int main(int argc, char *argv[]) + }; ++#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) { @@ -232,40 +313,43 @@ index 8f03f11..2f94d67 100644 + goto out; + } + } ++#endif + if (my_args.console) if (!c->set_config_item(c, "lxc.console.path", my_args.console)) goto out; -@@ -353,5 +372,6 @@ int main(int argc, char *argv[]) +@@ -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 67c3b3e..4728284 100644 +index 160b3db..ebcdae0 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c -@@ -1828,3 +1828,117 @@ int lxc_setup_keyring(void) - - return ret; +@@ -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 */ -+static int lxc_file2str(const char *filename, char ret[], int cap) ++int lxc_file2str(const char *filename, char ret[], int cap) +{ -+ int fd, num_read; ++ int fd, num_read; + -+ if ((fd = open(filename, O_RDONLY | O_CLOEXEC)) == -1) -+ return -1;/*lint !e960*/ -+ if ((num_read = read(fd, ret, cap - 1)) <= 0) -+ num_read = -1;/*lint !e960*/ -+ else -+ ret[num_read] = 0;/*lint !e613*//*lint !e960*/ -+ close(fd); ++ 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; ++ return num_read; +} + +/* isuald: lxc_stat2proc() makes sure it can handle arbitrary executable file basenames @@ -273,114 +357,119 @@ index 67c3b3e..4728284 100644 + * 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(char *S) ++static proc_t *lxc_stat2proc(const char *S) +{ -+ int num; -+ proc_t *P = NULL; -+ char *tmp = NULL; -+ -+ if (!S) -+ return NULL;/*lint !e960*/ -+ -+ tmp = strrchr(S, ')'); /* split into "PID (cmd" and "" *//*lint !e586*/ -+ if (!tmp) -+ return NULL;/*lint !e960*/ -+ *tmp = '\0'; /* replace trailing ')' with NUL */ -+ -+ P = malloc(sizeof(proc_t)); -+ if (!P) -+ return NULL;/*lint !e960*/ -+ 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 < 0 && errno) { -+ ERROR("Call sscanf error: %s", 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 *//*lint !e566*/ -+ "%ld %ld %ld %ld " -+ "%Lu " /* start_time *//*lint !e566*/ -+ "%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,/*lint !e561*/ -+ &P->priority, &P->nice, &P->timeout, &P->it_real_value, -+ &P->start_time,/*lint !e561*/ -+ &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 (P->tty == 0) -+ P->tty = -1; /* the old notty val, update elsewhere bef. moving to 0 *//*lint !e960*/ -+ return P; ++ 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)) {/*lint !e574*/ -+ 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) {/*lint !e574*/ -+ ERROR("Failed to get proc stat info"); -+ goto out; -+ } -+ -+ startat = pid_info->start_time; ++ 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; ++ free(pid_info); ++ return startat; +} -+ + #endif diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 2d38178..8e4ed89 100644 +index 3c30565..11d6548 100644 --- a/src/lxc/utils.h +++ b/src/lxc/utils.h -@@ -56,6 +56,71 @@ extern char *get_rundir(void); +@@ -44,6 +44,73 @@ extern char *get_rundir(void); #endif #endif -+/* isuald: -+ 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, ++#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. @@ -389,63 +478,66 @@ index 2d38178..8e4ed89 100644 + * 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 */ ++ // 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); -@@ -245,5 +310,6 @@ extern int recursive_destroy(char *dirname); - extern int lxc_setup_keyring(void); +@@ -246,6 +313,8 @@ extern int fix_stdio_permissions(uid_t uid); - extern int fd_nonblock(int fd); + #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 */ -- diff --git a/0007-use-isulad-log-format.patch b/0007-use-isulad-log-format.patch deleted file mode 100644 index a16ee90..0000000 --- a/0007-use-isulad-log-format.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 371dc5d5822cd629b86313c6b6cb39f02e7164e8 Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Fri, 11 Jan 2019 17:00:48 +0800 -Subject: [PATCH 007/140] use isulad log format - -use isulad log format - -Signed-off-by: LiFeng ---- - src/lxc/log.c | 19 ++++++++++++++----- - 1 file changed, 14 insertions(+), 5 deletions(-) - -diff --git a/src/lxc/log.c b/src/lxc/log.c -index 4e74459..91fb7ef 100644 ---- a/src/lxc/log.c -+++ b/src/lxc/log.c -@@ -139,6 +139,7 @@ static char *lxc_log_get_va_msg(struct lxc_log_event *event) - return msg; - } - -+/* use fifo to save log */ - static const char *isulad_use_log_fifo(const char *file) - { - #define ISULAD_FIFO_PREFIX "fifo:" -@@ -150,6 +151,7 @@ static const char *isulad_use_log_fifo(const char *file) - return file; - } - -+/* open isulad fifo */ - static int isulad_open_fifo(const char *file_path) - { - #define LOG_FIFO_SIZE (1024 * 1024) -@@ -349,6 +351,8 @@ static int log_append_logfile(const struct lxc_log_appender *appender, - ssize_t ret; - int fd_to_use = -1; - const char *log_container_name; -+ const char *isulad_prefix; -+ size_t isulad_len = 0; - - #ifndef NO_LXC_CONF - if (current_config) -@@ -367,11 +371,14 @@ static int log_append_logfile(const struct lxc_log_appender *appender, - if (lxc_unix_epoch_to_utc(date_time, LXC_LOG_TIME_SIZE, &event->timestamp) < 0) - return -1; - -+ /* use isulad log format */ -+ if (log_container_name && strlen(log_container_name) > 15) { -+ isulad_len = strlen(log_container_name) - 15; -+ } -+ isulad_prefix = log_container_name ? (log_container_name + isulad_len) : log_prefix; - n = snprintf(buffer, sizeof(buffer), -- "%s%s%s %s %-8s %s - %s:%s:%d - ", -- log_prefix, -- log_container_name ? " " : "", -- log_container_name ? log_container_name : "", -+ "%15s %s %-8s %s - %s:%s:%d - ", -+ isulad_prefix, - date_time, - lxc_log_priority_to_string(event->priority), - event->category, -@@ -752,7 +759,9 @@ int lxc_log_init(struct lxc_log *log) - - if (lxc_log_fd != -1) { - lxc_log_category_lxc.appender = &log_appender_logfile; -- lxc_log_category_lxc.appender->next = &log_appender_stderr; -+ if (!lxc_quiet_specified) -+ if (!log->quiet) -+ lxc_log_category_lxc.appender->next = &log_appender_stderr; - } - - return ret; --- -1.8.3.1 - diff --git a/0030-support-block-device-as-rootfs.patch b/0008-support-block-device-as-rootfs.patch similarity index 67% rename from 0030-support-block-device-as-rootfs.patch rename to 0008-support-block-device-as-rootfs.patch index 1e548d0..6d84a30 100644 --- a/0030-support-block-device-as-rootfs.patch +++ b/0008-support-block-device-as-rootfs.patch @@ -1,26 +1,27 @@ -From c1b8d03c8911964c8323e4878ecfeca8162a7e08 Mon Sep 17 00:00:00 2001 +From 6792a7f76d9084734d94e815b462ed2977fe107e Mon Sep 17 00:00:00 2001 From: tanyifeng Date: Tue, 15 Jan 2019 16:00:30 +0800 -Subject: [PATCH 030/140] support block device as rootfs +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 | 10 ++--- + src/lxc/conf.c | 36 +++++++++++++++++ src/lxc/storage/block.c | 86 +++++++++++++++++++++++++++++++++++++++++ src/lxc/storage/block.h | 41 ++++++++++++++++++++ - src/lxc/storage/dir.c | 10 +---- - src/lxc/storage/storage.c | 18 +++++++++ - src/lxc/storage/storage_utils.c | 2 +- - 7 files changed, 153 insertions(+), 15 deletions(-) + 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 5678b8d..260a7eb 100644 +index 21441c0..d8c2492 100644 --- a/src/lxc/Makefile.am +++ b/src/lxc/Makefile.am -@@ -130,6 +130,7 @@ liblxc_la_SOURCES = af_unix.c af_unix.h \ +@@ -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 \ @@ -29,36 +30,59 @@ index 5678b8d..260a7eb 100644 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 439353b..88763ee 100644 +index 43437af..35488e0 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c -@@ -3865,13 +3865,10 @@ static int setup_populate_devs(const struct lxc_rootfs *rootfs, struct lxc_list - // isulad: setup rootfs mountopts - static int setup_rootfs_mountopts(const struct lxc_rootfs *rootfs) - { -- unsigned long mntflags, pflags; +@@ -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; - -- // only remount / when container shares rootfs with host. -- if(!rootfs || !rootfs->path || strcmp(rootfs->path, "/")) -- return 0; -- if (!rootfs->options) ++ char *mntdata; ++ + if(!rootfs || !rootfs->options) - return 0; ++ 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 - if (parse_mntopts(rootfs->options, &mntflags, &pflags, &mntdata) < 0) { -@@ -3881,8 +3878,9 @@ static int setup_rootfs_mountopts(const struct lxc_rootfs *rootfs) - free(mntdata); + 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"); - 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, MS_BIND |MS_REMOUNT| MS_RDONLY, 0)) { -+ if (mount("/", "/", NULL, MS_BIND | MS_REMOUNT | MS_RDONLY, 0) < 0) { - SYSERROR("Failed to make / readonly."); - return -1; - } ++#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 @@ -199,38 +223,52 @@ index 0000000..2fa7565 + +#endif /* __LXC_BLK_H */ diff --git a/src/lxc/storage/dir.c b/src/lxc/storage/dir.c -index deeecec..2b548d0 100644 +index 18a10a4..b3dbbd0 100644 --- a/src/lxc/storage/dir.c +++ b/src/lxc/storage/dir.c -@@ -150,7 +150,7 @@ bool dir_detect(const char *path) +@@ -127,7 +127,11 @@ bool dir_detect(const char *path) int dir_mount(struct lxc_storage *bdev) { - int ret; -- unsigned long mflags = 0, mntflags = 0, pflags = 0; + __do_free char *mntdata = NULL; ++#ifdef HAVE_ISULAD + unsigned long mntflags = 0, pflags = 0; - char *mntdata; ++#else + unsigned long mflags = 0, mntflags = 0, pflags = 0; ++#endif + int ret; const char *src; -@@ -169,13 +169,7 @@ int dir_mount(struct lxc_storage *bdev) +@@ -147,6 +151,13 @@ int dir_mount(struct lxc_storage *bdev) src = lxc_storage_get_path(bdev->src, bdev->type); -- ret = mount(src, bdev->dest, "bind", MS_BIND | MS_REC | mntflags | pflags, mntdata); -- if ((0 == ret) && (mntflags & MS_RDONLY)) { -- DEBUG("Remounting \"%s\" on \"%s\" readonly", -- src ? src : "(none)", bdev->dest ? bdev->dest : "(none)"); -- mflags = add_required_remount_flags(src, bdev->dest, MS_BIND | MS_REC | mntflags | pflags | MS_REMOUNT); -- ret = mount(src, bdev->dest, "bind", mflags, mntdata); -- } ++#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; + } - if (ret < 0) { - SYSERROR("Failed to mount \"%s\" on \"%s\"", src, bdev->dest); diff --git a/src/lxc/storage/storage.c b/src/lxc/storage/storage.c -index c4f4c2e..18f754a 100644 +index 3f1b713..876311a 100644 --- a/src/lxc/storage/storage.c +++ b/src/lxc/storage/storage.c -@@ -61,6 +61,7 @@ +@@ -41,6 +41,7 @@ #include "storage_utils.h" #include "utils.h" #include "zfs.h" @@ -238,10 +276,11 @@ index c4f4c2e..18f754a 100644 #ifndef HAVE_STRLCPY #include "include/strlcpy.h" -@@ -114,6 +115,21 @@ static const struct lxc_storage_ops loop_ops = { +@@ -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, @@ -255,30 +294,35 @@ index c4f4c2e..18f754a 100644 + .can_snapshot = false, + .can_backup = true, +}; -+ ++#endif + /* lvm */ static const struct lxc_storage_ops lvm_ops = { .detect = &lvm_detect, -@@ -199,6 +215,8 @@ static const struct lxc_storage_type bdevs[] = { +@@ -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 46e08a3..b4dcb57 100644 +index a3ee353..bfbb782 100644 --- a/src/lxc/storage/storage_utils.c +++ b/src/lxc/storage/storage_utils.c -@@ -416,7 +416,7 @@ int find_fstype_cb(char *buffer, void *data) +@@ -335,7 +335,11 @@ int find_fstype_cb(char *buffer, void *data) return 0; } -- if (mount(cbarg->rootfs, cbarg->target, fstype, mntflags, mntdata)) { ++#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; diff --git a/0009-lxc_start-add-default-terminal-fifos.patch b/0009-lxc_start-add-default-terminal-fifos.patch deleted file mode 100644 index d52551c..0000000 --- a/0009-lxc_start-add-default-terminal-fifos.patch +++ /dev/null @@ -1,538 +0,0 @@ -From 3adac5cde53927f37a666fa8bda4ff06489ec694 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Fri, 11 Jan 2019 21:52:11 -0500 -Subject: [PATCH 009/140] lxc_start: add default terminal fifos - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 4 + - src/lxc/lxccontainer.c | 30 +++++++ - src/lxc/lxccontainer.h | 10 +++ - src/lxc/terminal.c | 194 +++++++++++++++++++++++++++++++++++++++++++++- - src/lxc/terminal.h | 16 ++++ - src/lxc/tools/arguments.h | 5 ++ - src/lxc/tools/lxc_start.c | 11 +++ - src/lxc/utils.c | 23 ++++++ - src/lxc/utils.h | 4 + - 9 files changed, 294 insertions(+), 3 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 37a5ff7..7b7f95b 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -2714,6 +2714,10 @@ struct lxc_conf *lxc_conf_init(void) - new->console.slave = -1; - new->console.name[0] = '\0'; - memset(&new->console.ringbuf, 0, sizeof(struct lxc_ringbuf)); -+ /* isulad init console fifos */ -+ new->console.init_fifo[0] = NULL; -+ new->console.init_fifo[1] = NULL; -+ lxc_list_init(&new->console.fifos); - new->maincmd_fd = -1; - new->nbd_idx = -1; - new->rootfs.mount = strdup(default_rootfs_mount); -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 1d7f5be..318c71e 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -4961,6 +4961,33 @@ out: - return ret; - } - -+/* isulad add set console fifos*/ -+static bool do_lxcapi_set_terminal_default_fifos(struct lxc_container *c, const char *in, const char *out) -+{ -+ struct lxc_conf *conf; -+ -+ if (!c || !c->lxc_conf || !in || !out) -+ return false; -+ if (container_mem_lock(c)) { -+ ERROR("Error getting mem lock"); -+ return false; -+ } -+ -+ conf = c->lxc_conf; -+ if (conf->console.init_fifo[0]) -+ free(conf->console.init_fifo[0]); -+ conf->console.init_fifo[0] = strdup(in); -+ -+ if (conf->console.init_fifo[1]) -+ free(conf->console.init_fifo[1]); -+ conf->console.init_fifo[1] = strdup(out); -+ -+ container_mem_unlock(c); -+ return true; -+} -+ -+WRAP_API_2(bool, lxcapi_set_terminal_default_fifos, const char *, const char *) -+ - struct lxc_container *lxc_container_new(const char *name, const char *configpath) - { - struct lxc_container *c; -@@ -5084,6 +5111,9 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath - c->migrate = lxcapi_migrate; - c->console_log = lxcapi_console_log; - -+ /* isulad add begin */ -+ c->set_terminal_init_fifos = lxcapi_set_terminal_default_fifos; -+ /* isulad add end */ - return c; - - err: -diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index 9e06215..486531e 100644 ---- a/src/lxc/lxccontainer.h -+++ b/src/lxc/lxccontainer.h -@@ -847,6 +847,16 @@ struct lxc_container { - * \return \c true if the container was rebooted successfully, else \c false. - */ - bool (*reboot2)(struct lxc_container *c, int timeout); -+ -+ /*! 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); - }; - - /*! -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 4060e7f..c507712 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -364,6 +364,20 @@ static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, char *buf, - return bytes_read; - } - -+/* isulad: forward data to all fifos */ -+static void lxc_forward_data_to_fifo(struct lxc_list *list, char *buf, int r) -+{ -+ struct lxc_list *it,*next; -+ struct lxc_fifos_fd *elem = NULL; -+ -+ lxc_list_for_each_safe(it, list, next) { -+ elem = it->elem; -+ lxc_write_nointr(elem->out_fd, buf, r); -+ } -+ -+ return; -+} -+ - int lxc_terminal_io_cb(int fd, uint32_t events, void *data, - struct lxc_epoll_descr *descr) - { -@@ -384,7 +398,13 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data, - terminal->tty_state = NULL; - } - terminal->peer = -EBADF; -- } else { -+ 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 { - ERROR("Handler received unexpected file descriptor"); - } - close(fd); -@@ -392,7 +412,7 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data, - return LXC_MAINLOOP_CLOSE; - } - -- if (fd == terminal->peer) -+ if (fd == terminal->peer || lxc_terminal_is_fifo(fd, &terminal->fifos)) - w = lxc_write_nointr(terminal->master, buf, r); - - w_rbuf = w_log = 0; -@@ -401,6 +421,9 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data, - if (terminal->peer >= 0) - w = lxc_write_nointr(terminal->peer, buf, r); - -+ /* isulad: forward data to fifos */ -+ lxc_forward_data_to_fifo(&terminal->fifos, buf, r); -+ - /* write to terminal ringbuffer */ - if (terminal->buffer_size > 0) - w_rbuf = lxc_ringbuf_write(&terminal->ringbuf, buf, r); -@@ -450,6 +473,27 @@ static int lxc_terminal_mainloop_add_peer(struct lxc_terminal *terminal) - return 0; - } - -+/* isulad add fifo to mainloop */ -+static int lxc_console_mainloop_add_fifo(struct lxc_terminal *terminal) -+{ -+ int ret = 0; -+ struct lxc_list *it,*next; -+ 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) - { -@@ -473,7 +517,20 @@ int lxc_terminal_mainloop_add(struct lxc_epoll_descr *descr, - */ - terminal->descr = descr; - -- return lxc_terminal_mainloop_add_peer(terminal); -+ ret = lxc_terminal_mainloop_add_peer(terminal); -+ if (ret < 0) { -+ ERROR("Failed to add handler for terminal peer to mainloop"); -+ return -1; -+ } -+ -+ /* isulad add fifo to mainloop */ -+ ret = lxc_console_mainloop_add_fifo(terminal); -+ if (ret < 0) { -+ ERROR("Failed to add handler for terminal fifos to mainloop"); -+ return -1; -+ } -+ -+ return 0; - } - - int lxc_setup_tios(int fd, struct termios *oldtios) -@@ -812,6 +869,9 @@ void lxc_terminal_delete(struct lxc_terminal *terminal) - if (terminal->log_fd >= 0) - close(terminal->log_fd); - terminal->log_fd = -1; -+ -+ /* isulad: delete all fifos */ -+ lxc_terminal_delete_fifo(-1, &terminal->fifos); - } - - /** -@@ -880,6 +940,77 @@ int lxc_terminal_create_log_file(struct lxc_terminal *terminal) - return 0; - } - -+/* isulad: open terminal fifos */ -+static int terminal_fifo_open(const char *fifo_path, int flags) -+{ -+ int fd = -1; -+ -+ fd = open(fifo_path, flags); -+ if (fd < 0) { -+ WARN("Failed to open fifo %s to send message: %s.", fifo_path, -+ strerror(errno)); -+ return -1; -+ } -+ -+ return fd; -+} -+ -+/* isulad: set terminal fifos */ -+static int lxc_terminal_set_fifo(struct lxc_terminal *console, const char *in, const char *out) -+{ -+ int fifofd_in = -1, fifofd_out = -1; -+ struct lxc_fifos_fd *fifo_elem = NULL; -+ -+ if (!in || !out) -+ return -1; -+ -+ if (!fifo_exists(in) || !fifo_exists(out)) { -+ ERROR("File %s or %s does not refer to a FIFO", in, out); -+ return -1; -+ } -+ -+ fifofd_in = terminal_fifo_open(in, O_RDONLY | O_NONBLOCK | O_CLOEXEC); -+ if (fifofd_in < 0) { -+ ERROR("Failed to open FIFO: %s", in); -+ return -1; -+ } -+ -+ fifofd_out = terminal_fifo_open(out, O_WRONLY | O_NONBLOCK | O_CLOEXEC); -+ if (fifofd_out < 0) { -+ ERROR("Failed to open FIFO: %s", out); -+ close(fifofd_in); -+ return -1; -+ } -+ -+ fifo_elem = malloc(sizeof(*fifo_elem)); -+ if (!fifo_elem) { -+ close(fifofd_in); -+ close(fifofd_out); -+ return -1; -+ } -+ memset(fifo_elem, 0, sizeof(*fifo_elem)); -+ -+ fifo_elem->in_fifo = strdup(in); -+ fifo_elem->out_fifo = strdup(out); -+ fifo_elem->in_fd = fifofd_in; -+ fifo_elem->out_fd = fifofd_out; -+ lxc_list_add_elem(&fifo_elem->node, fifo_elem); -+ lxc_list_add_tail(&console->fifos, &fifo_elem->node); -+ -+ return fifofd_in; -+} -+ -+/* isulad: add default fifos */ -+static int lxc_terminal_fifo_default(struct lxc_terminal *terminal) -+{ -+ if (!terminal->init_fifo[0] || !terminal->init_fifo[1]) { -+ ERROR("Invalid default terminal fifos"); -+ return -1; -+ } -+ -+ return lxc_terminal_set_fifo(terminal, terminal->init_fifo[0], terminal->init_fifo[1]); -+} -+ - int lxc_terminal_create(struct lxc_terminal *terminal) - { - int ret; -@@ -902,6 +1033,13 @@ int lxc_terminal_create(struct lxc_terminal *terminal) - 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"); -@@ -914,6 +1052,13 @@ int lxc_terminal_create(struct lxc_terminal *terminal) - 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: -@@ -1198,12 +1343,55 @@ void lxc_terminal_init(struct lxc_terminal *terminal) - lxc_terminal_info_init(&terminal->proxy); - } - -+/* isulad: judge the fd whether is fifo */ -+static bool lxc_terminal_is_fifo(int fd, struct lxc_list *list) -+{ -+ struct lxc_list *it,*next; -+ 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,*next; -+ 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); -+ close(elem->in_fd); -+ close(elem->out_fd); -+ free(elem); -+ } -+ } -+ -+ return 0; -+} -+ - void lxc_terminal_conf_free(struct lxc_terminal *terminal) - { - free(terminal->log_path); - free(terminal->path); - if (terminal->buffer_size > 0 && terminal->ringbuf.addr) - lxc_ringbuf_release(&terminal->ringbuf); -+ /*isulad: free console fifos */ -+ free(terminal->init_fifo[0]); -+ free(terminal->init_fifo[1]); -+ lxc_terminal_delete_fifo(-1, &terminal->fifos); - } - - 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 bfd271f..d25da65 100644 ---- a/src/lxc/terminal.h -+++ b/src/lxc/terminal.h -@@ -115,6 +115,17 @@ struct lxc_terminal { - /* the in-memory ringbuffer */ - struct lxc_ringbuf ringbuf; - }; -+ char *init_fifo[2]; /* isulad: default fifos for the start */ -+ struct lxc_list fifos; /* isulad: fifos used to forward teminal */ -+}; -+ -+/* isulad: fifo struct */ -+struct lxc_fifos_fd { -+ char *in_fifo; -+ char *out_fifo; -+ int in_fd; -+ int out_fd; -+ struct lxc_list node; - }; - - /** -@@ -295,4 +306,9 @@ extern void lxc_terminal_init(struct lxc_terminal *terminal); - extern int lxc_terminal_map_ids(struct lxc_conf *c, - struct lxc_terminal *terminal); - -+/* isulad: judge the fd whether is fifo*/ -+static bool lxc_terminal_is_fifo(int fd, struct lxc_list *list); -+/* isulad: if fd == -1, means delete all the fifos*/ -+int lxc_terminal_delete_fifo(int fd, struct lxc_list *list); -+ - #endif /* __LXC_TERMINAL_H */ -diff --git a/src/lxc/tools/arguments.h b/src/lxc/tools/arguments.h -index 810050a..b7af2b5 100644 ---- a/src/lxc/tools/arguments.h -+++ b/src/lxc/tools/arguments.h -@@ -62,6 +62,7 @@ struct lxc_arguments { - - /* for lxc-start */ - const char *share_ns[32]; /* size must be greater than LXC_NS_MAX */ -+ const char *terminal_fifos[2]; /* isulad add, fifos used to redirct stdin/out/err */ - - /* for lxc-console */ - unsigned int ttynum; -@@ -172,6 +173,10 @@ struct lxc_arguments { - #define OPT_SHARE_IPC OPT_USAGE - 4 - #define OPT_SHARE_UTS OPT_USAGE - 5 - #define OPT_SHARE_PID OPT_USAGE - 6 -+/* isulad add begin */ -+#define OPT_INPUT_FIFO OPT_USAGE - 7 -+#define OPT_OUTPUT_FIFO OPT_USAGE - 8 -+/* isulad add end*/ - - 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 4553cb5..8f03f11 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -69,6 +69,8 @@ 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}, -+ {"in-fifo", required_argument, 0, OPT_INPUT_FIFO}, -+ {"out-fifo", required_argument, 0, OPT_OUTPUT_FIFO}, - LXC_COMMON_OPTIONS - }; - -@@ -140,6 +142,12 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - case OPT_SHARE_PID: - args->share_ns[LXC_NS_PID] = arg; - break; -+ case OPT_INPUT_FIFO: -+ args->terminal_fifos[0] = arg; -+ break; -+ case OPT_OUTPUT_FIFO: -+ args->terminal_fifos[1] = arg; -+ break; - } - return 0; - } -@@ -322,6 +330,9 @@ int main(int argc, char *argv[]) - if (my_args.close_all_fds) - c->want_close_all_fds(c, true); - -+ if (my_args.terminal_fifos[0] && my_args.terminal_fifos[1]) -+ c->set_terminal_init_fifos(c, my_args.terminal_fifos[0], my_args.terminal_fifos[1]); -+ - if (args == default_args) - err = c->start(c, 0, NULL) ? EXIT_SUCCESS : EXIT_FAILURE; - else -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 6e9165a..67c3b3e 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -611,6 +611,19 @@ bool dir_exists(const char *path) - return S_ISDIR(sb.st_mode); - } - -+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); -+} -+ -+ - /* Note we don't use SHA-1 here as we don't want to depend on HAVE_GNUTLS. - * FNV has good anti collision properties and we're not worried - * about pre-image resistance or one-way-ness, we're just trying to make -@@ -1715,6 +1728,16 @@ int fd_cloexec(int fd, bool cloexec) - return 0; - } - -+/* isulad: fd_nonblock */ -+int fd_nonblock(int fd) -+{ -+ long flags; -+ -+ flags = fcntl(fd, F_GETFL); -+ -+ return fcntl(fd, F_SETFL, flags | O_NONBLOCK); -+} -+ - int recursive_destroy(char *dirname) - { - int ret; -diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 94196d0..2d38178 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -147,6 +147,8 @@ extern gid_t get_ns_gid(gid_t orig); - - extern bool dir_exists(const char *path); - -+extern bool fifo_exists(const char *path); -+ - #define FNV1A_64_INIT ((uint64_t)0xcbf29ce484222325ULL) - extern uint64_t fnv_64a_buf(void *buf, size_t len, uint64_t hval); - -@@ -242,4 +244,6 @@ extern int fd_cloexec(int fd, bool cloexec); - extern int recursive_destroy(char *dirname); - extern int lxc_setup_keyring(void); - -+extern int fd_nonblock(int fd); -+ - #endif /* __LXC_UTILS_H */ --- -1.8.3.1 - diff --git a/0033-support-mount-squashfs-in-mount-entry.patch b/0009-support-mount-squashfs-in-mount-entry.patch similarity index 74% rename from 0033-support-mount-squashfs-in-mount-entry.patch rename to 0009-support-mount-squashfs-in-mount-entry.patch index d0384e1..99bbb8a 100644 --- a/0033-support-mount-squashfs-in-mount-entry.patch +++ b/0009-support-mount-squashfs-in-mount-entry.patch @@ -1,33 +1,35 @@ -From 572633fe6deaea6b8e4d423225aab452c6f0b7c0 Mon Sep 17 00:00:00 2001 +From 6124835dde5abfeeb8ac796813f2f18803b96117 Mon Sep 17 00:00:00 2001 From: tanyifeng Date: Tue, 15 Jan 2019 19:54:13 +0800 -Subject: [PATCH 033/140] support mount squashfs in mount entry +Subject: [PATCH 09/49] support mount squashfs in mount entry Signed-off-by: LiFeng +Signed-off-by: WangFengTu --- - src/lxc/conf.c | 88 +++++++++++++++++++++++++++++++++++++++-- - src/lxc/storage/loop.c | 36 ++++++++++++++--- - src/lxc/storage/storage_utils.c | 36 ++++++++++++++++- - src/lxc/utils.c | 33 ++++++++++++++-- + 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, 181 insertions(+), 13 deletions(-) + 5 files changed, 191 insertions(+), 12 deletions(-) diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 54b967b..fea0f59 100644 +index 35488e0..1f779b9 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c -@@ -78,6 +78,7 @@ +@@ -58,6 +58,7 @@ #include "storage/overlay.h" #include "syscall_wrappers.h" #include "terminal.h" +#include "loop.h" - #include "path.h" #include "utils.h" + #include "uuid.h" -@@ -2444,6 +2445,82 @@ static int mount_entry_create_dir_file(const struct mntent *mntent, +@@ -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) +{ @@ -103,48 +105,54 @@ index 54b967b..fea0f59 100644 + + 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, -@@ -2502,8 +2579,14 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - return -1; - } +@@ -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; -- ret = mount_entry(mntent->mnt_fsname, dest, mntent->mnt_type, mntflags, + 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 { -+ ret = mount_entry(mntent->mnt_fsname, dest, mntent->mnt_type, mntflags, -+ pflags, mntdata, optional, dev, relative, rootfs_path); -+ } - - free(mntdata); - free(rpath); -@@ -3897,7 +3980,6 @@ static int setup_rootfs_mountopts(const struct lxc_rootfs *rootfs) - return 0; ++ } 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; } -- - int lxc_setup(struct lxc_handler *handler) - { - int ret; diff --git a/src/lxc/storage/loop.c b/src/lxc/storage/loop.c -index 35cb13e..760def8 100644 +index eebc1b6..345be50 100644 --- a/src/lxc/storage/loop.c +++ b/src/lxc/storage/loop.c -@@ -41,6 +41,7 @@ - #include "loop.h" +@@ -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); -@@ -236,9 +237,11 @@ bool loop_detect(const char *path) +@@ -216,9 +217,11 @@ bool loop_detect(const char *path) int loop_mount(struct lxc_storage *bdev) { @@ -157,7 +165,7 @@ index 35cb13e..760def8 100644 if (strcmp(bdev->type, "loop")) return -22; -@@ -246,13 +249,29 @@ int loop_mount(struct lxc_storage *bdev) +@@ -226,13 +229,29 @@ int loop_mount(struct lxc_storage *bdev) if (!bdev->src || !bdev->dest) return -22; @@ -188,7 +196,7 @@ index 35cb13e..760def8 100644 } DEBUG("Prepared loop device \"%s\"", loname); -@@ -261,14 +280,21 @@ int loop_mount(struct lxc_storage *bdev) +@@ -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); @@ -214,10 +222,10 @@ index 35cb13e..760def8 100644 int loop_umount(struct lxc_storage *bdev) diff --git a/src/lxc/storage/storage_utils.c b/src/lxc/storage/storage_utils.c -index b4dcb57..0a87778 100644 +index bfbb782..07eee22 100644 --- a/src/lxc/storage/storage_utils.c +++ b/src/lxc/storage/storage_utils.c -@@ -339,10 +339,14 @@ int is_blktype(struct lxc_storage *b) +@@ -259,10 +259,14 @@ int is_blktype(struct lxc_storage *b) return 0; } @@ -232,7 +240,7 @@ index b4dcb57..0a87778 100644 int ret; struct cbarg { const char *rootfs; -@@ -371,15 +375,30 @@ int mount_unknown_fs(const char *rootfs, const char *target, +@@ -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]); @@ -265,17 +273,17 @@ index b4dcb57..0a87778 100644 return -1; } -@@ -399,6 +418,8 @@ int find_fstype_cb(char *buffer, void *data) - unsigned long mntflags, pflags; - char *mntdata; +@@ -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")) -@@ -419,6 +440,17 @@ int find_fstype_cb(char *buffer, void *data) - if (mount(cbarg->rootfs, cbarg->target, fstype, (mntflags & ~MS_RDONLY), mntdata)) { +@@ -342,6 +363,17 @@ int find_fstype_cb(char *buffer, void *data) + #endif SYSDEBUG("Failed to mount"); free(mntdata); + // isulad: recored error @@ -293,10 +301,18 @@ index b4dcb57..0a87778 100644 } diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index d1a22f7..120a13d 100644 +index ebcdae0..90113e0 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c -@@ -1053,7 +1053,7 @@ static int open_if_safe(int dirfd, const char *nextpath) +@@ -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. */ @@ -305,7 +321,7 @@ index d1a22f7..120a13d 100644 { int curlen = 0, dirfd, fulllen, i; char *dup; -@@ -1473,6 +1473,9 @@ static int lxc_get_unused_loop_dev(char *name_loop) +@@ -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; @@ -315,15 +331,15 @@ index d1a22f7..120a13d 100644 fd_ctl = open("/dev/loop-control", O_RDWR | O_CLOEXEC); if (fd_ctl < 0) { -@@ -1489,10 +1492,34 @@ static int lxc_get_unused_loop_dev(char *name_loop) +@@ -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 (fd_tmp < 0) { + 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) { @@ -346,17 +362,25 @@ index d1a22f7..120a13d 100644 + usleep(5000); /* 5 millisecond */ + goto retry; + } - SYSERROR("Failed to open loop \"%s\"", name_loop); ++ 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: - close(fd_ctl); diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index abc88ca..4313942 100644 +index 11d6548..fbb0d55 100644 --- a/src/lxc/utils.h +++ b/src/lxc/utils.h -@@ -224,6 +224,7 @@ extern bool cgns_supported(void); +@@ -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); diff --git a/0010-IO-refact-terminal-progress.patch b/0010-IO-refact-terminal-progress.patch new file mode 100644 index 0000000..4e41386 --- /dev/null +++ b/0010-IO-refact-terminal-progress.patch @@ -0,0 +1,3568 @@ +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 similarity index 40% rename from 0011-Add-exit-FIFO-to-monitor-state-of-lxc-monitor.patch rename to 0011-add-exit-fifo-to-monitor-state-of-lxc-monitor.patch index f2e4b7c..3f83889 100644 --- a/0011-Add-exit-FIFO-to-monitor-state-of-lxc-monitor.patch +++ b/0011-add-exit-fifo-to-monitor-state-of-lxc-monitor.patch @@ -1,261 +1,271 @@ -From 70b6cb3c2a07f49af1f7dd251eac39e20c539f7e Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Sat, 12 Jan 2019 02:07:15 -0500 -Subject: [PATCH 011/140] Add exit FIFO to monitor state of [lxc monitor] +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: LiFeng +Signed-off-by: wujing --- - src/lxc/conf.c | 3 +++ + src/lxc/conf.c | 4 ++++ src/lxc/conf.h | 2 ++ - src/lxc/confile.c | 8 ++++---- - src/lxc/lxccontainer.c | 20 +++++++++++++++++++- - src/lxc/lxccontainer.h | 6 ++++++ - src/lxc/start.c | 10 ++++++++++ - src/lxc/start.h | 2 ++ - src/lxc/terminal.c | 4 ++-- - src/lxc/tools/arguments.h | 2 ++ - src/lxc/tools/lxc_start.c | 9 +++++++++ - 10 files changed, 59 insertions(+), 7 deletions(-) + 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 0b4b63b..bc45e44 100644 +index 1487b73..a904348 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c -@@ -2759,6 +2759,7 @@ struct lxc_conf *lxc_conf_init(void) - +@@ -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; - /* isulad add end */ - - return new; -@@ -4195,6 +4196,8 @@ void lxc_conf_free(struct lxc_conf *conf) - lxc_clear_init_args(conf); - lxc_clear_populate_devices(conf); + 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) ++ if (conf->exit_fd != -1) { + close(conf->exit_fd); - /* isulad add end */ - free(conf); - } ++ } + lxc_clear_init_args(conf); + lxc_clear_populate_devices(conf); + #endif diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index e0954f9..2d939cd 100644 +index 23942ac..c5b70e1 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h -@@ -405,6 +405,8 @@ struct lxc_conf { - struct lxc_list populate_devs; +@@ -430,6 +430,8 @@ struct lxc_conf { + mode_t umask; //umask value char *container_info_file; + + int exit_fd; /* exit fifo fd*/ - /* isulad add end */ - }; - -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index e3212d3..cbef2e2 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -240,10 +240,10 @@ static struct lxc_config_t config_jump_table[] = { - { "lxc.sysctl", set_config_sysctl, get_config_sysctl, clr_config_sysctl, }, - { "lxc.proc", set_config_proc, get_config_proc, clr_config_proc, }, + #endif -- /*isulad add begin*/ -- { "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, }, -- /*isulad add end*/ -+ /*isulad add begin*/ -+ { "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, }, -+ /*isulad add end*/ }; - - static const size_t config_jump_table_size = sizeof(config_jump_table) / sizeof(struct lxc_config_t); diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 5679b9b..8029f33 100644 +index 891fc62..64cde99 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c -@@ -295,6 +295,10 @@ static void lxc_container_free(struct lxc_container *c) +@@ -281,6 +281,11 @@ static void lxc_container_free(struct lxc_container *c) free(c->config_path); c->config_path = NULL; -+ /* isulad: free exit fifo */ ++#ifdef HAVE_ISULAD + free(c->exit_fifo); + c->exit_fifo = NULL; ++#endif + free(c); } -@@ -882,7 +886,7 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a +@@ -894,7 +899,11 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a NULL, }; char **init_cmd = NULL; -- int keepfds[3] = {-1, -1, -1}; -+ int keepfds[4] = {-1, -1, -1, -1}; ++#ifdef HAVE_ISULAD ++ int keepfds[] = {-1, -1, -1, -1, -1}; ++#else + int keepfds[3] = {-1, -1, -1}; ++#endif /* container does exist */ if (!c) -@@ -1077,6 +1081,16 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a +@@ -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 = open(c->exit_fifo, O_WRONLY | O_NONBLOCK | O_CLOEXEC); ++ 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 */ -@@ -1111,6 +1125,10 @@ reboot: +@@ -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]; -+ /* isulad: keep exit fifo fd */ ++ ++#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 3c845fe..503038a 100644 +index 4a9ba13..fa9bd5e 100644 --- a/src/lxc/lxccontainer.h +++ b/src/lxc/lxccontainer.h -@@ -81,6 +81,12 @@ struct lxc_container { - */ - char *pidfile; +@@ -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 + /*! - * \private - * Container semaphore lock. + * \brief Determine if \c /var/lib/lxc/$name/config exists. + * diff --git a/src/lxc/start.c b/src/lxc/start.c -index 9d71dd7..9365d11 100644 +index f5f9565..70e8282 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c -@@ -730,6 +730,7 @@ struct lxc_handler *lxc_init_handler(const char *name, struct lxc_conf *conf, - handler->nsfd[i] = -1; +@@ -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 */ - - if (daemonize && handler->conf->reboot == REBOOT_NONE) { - /* Create socketpair() to synchronize on daemonized startup. -@@ -1005,6 +1006,14 @@ void lxc_fini(const char *name, struct lxc_handler *handler) ++#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)) ++ 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. */ -@@ -2038,6 +2047,7 @@ int __lxc_start(const char *name, struct lxc_handler *handler, +@@ -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; -+ handler->exit_code = exit_code; /* isuald: record exit code*/ - out_fini: ++#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 df987dc..f59bf54 100644 +index 7e2371c..1368d0e 100644 --- a/src/lxc/start.h +++ b/src/lxc/start.h -@@ -133,6 +133,8 @@ struct lxc_handler { +@@ -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/terminal.c b/src/lxc/terminal.c -index c507712..508e2e6 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -1004,8 +1004,8 @@ static int lxc_terminal_set_fifo(struct lxc_terminal *console, const char *in, c - static int lxc_terminal_fifo_default(struct lxc_terminal *terminal) - { - if (!terminal->init_fifo[0] || !terminal->init_fifo[1]) { -- ERROR("Invalid default terminal fifos"); -- return -1; -+ DEBUG("Invalid default terminal fifos"); -+ return 0; - } - - return lxc_terminal_set_fifo(terminal, terminal->init_fifo[0], terminal->init_fifo[1]); diff --git a/src/lxc/tools/arguments.h b/src/lxc/tools/arguments.h -index b6df23f..61f4a0a 100644 +index 214949b..ea5f938 100644 --- a/src/lxc/tools/arguments.h +++ b/src/lxc/tools/arguments.h -@@ -64,6 +64,7 @@ struct lxc_arguments { - const char *share_ns[32]; /* size must be greater than LXC_NS_MAX */ - const char *terminal_fifos[2]; /* isulad add, fifos used to redirct stdin/out/err */ +@@ -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 */ - unsigned int ttynum; -@@ -178,6 +179,7 @@ struct lxc_arguments { - #define OPT_INPUT_FIFO OPT_USAGE - 7 - #define OPT_OUTPUT_FIFO OPT_USAGE - 8 - #define OPT_CONTAINER_INFO OPT_USAGE - 9 -+#define OPT_EXIT_FIFO OPT_USAGE - 10 - /* isulad add end*/ - - extern int lxc_arguments_parse(struct lxc_arguments *args, int argc, diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c -index 2f94d67..60c7d70 100644 +index 4c4c820..8041f02 100644 --- a/src/lxc/tools/lxc_start.c +++ b/src/lxc/tools/lxc_start.c -@@ -73,6 +73,7 @@ static const struct option my_longopts[] = { - {"in-fifo", required_argument, 0, OPT_INPUT_FIFO}, - {"out-fifo", required_argument, 0, OPT_OUTPUT_FIFO}, +@@ -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}, - /* isulad add end */ + #endif LXC_COMMON_OPTIONS }; -@@ -154,6 +155,9 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) +@@ -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; + break; + #endif ++ } return 0; } -@@ -332,6 +336,11 @@ int main(int argc, char *argv[]) +@@ -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 = strdup(my_args.exit_monitor_fifo); -+ } -+ - if (my_args.console) - if (!c->set_config_item(c, "lxc.console.path", my_args.console)) - goto out; ++ 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 new file mode 100644 index 0000000..3b8e380 --- /dev/null +++ b/0012-Adapt-to-isulad-log.patch @@ -0,0 +1,142 @@ +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/0012-Init-fifos-in-lxc_attach_terminal.patch b/0012-Init-fifos-in-lxc_attach_terminal.patch deleted file mode 100644 index 1353b2f..0000000 --- a/0012-Init-fifos-in-lxc_attach_terminal.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 0c5c03e94eb4beb4d55275bef52b14f1eef09d66 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Sat, 12 Jan 2019 03:23:53 -0500 -Subject: [PATCH 012/140] Init fifos in lxc_attach_terminal - -Signed-off-by: LiFeng ---- - src/lxc/terminal.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 508e2e6..410f643 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -1341,6 +1341,10 @@ void lxc_terminal_init(struct lxc_terminal *terminal) - terminal->peer = -EBADF; - terminal->log_fd = -EBADF; - lxc_terminal_info_init(&terminal->proxy); -+ /* isulad init console fifos */ -+ terminal->init_fifo[0] = NULL; -+ terminal->init_fifo[1] = NULL; -+ lxc_list_init(&terminal->fifos); - } - - /* isulad: judge the fd whether is fifo */ --- -1.8.3.1 - diff --git a/0013-isulad-set-env-home-in-container.patch b/0013-set-env-in-container.patch similarity index 31% rename from 0013-isulad-set-env-home-in-container.patch rename to 0013-set-env-in-container.patch index d99a515..5ee528d 100644 --- a/0013-isulad-set-env-home-in-container.patch +++ b/0013-set-env-in-container.patch @@ -1,111 +1,119 @@ -From 3e630813a53666d5cdb8db81addcb86e9fe3c341 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Sat, 12 Jan 2019 14:42:27 +0800 -Subject: [PATCH 013/140] isulad: set env home in container +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: LiFeng +Signed-off-by: wujing --- - src/lxc/attach.c | 5 +++++ - src/lxc/cgroups/cgfsng.c | 5 +++-- - src/lxc/conf.c | 2 +- - src/lxc/start.c | 4 ++++ - src/lxc/utils.c | 29 +++++++++++++++++++++++++++++ - src/lxc/utils.h | 3 +++ - 6 files changed, 45 insertions(+), 3 deletions(-) + 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 e7ba705..2bbf1eb 100644 +index 78b4700..801dc27 100644 --- a/src/lxc/attach.c +++ b/src/lxc/attach.c -@@ -876,6 +876,11 @@ static int attach_child_main(struct attach_clone_payload *payload) +@@ -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/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index aff2b5e..3e702b3 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1704,8 +1704,9 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - continue; - } - -- // Ignore ops->container_cgroup so we will not see directory lxc after /sys/fs/cgroup/xxx in container -- path2 = must_make_path(controllerpath, h->container_base_path, NULL); -+ // 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); -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index bc45e44..5065e69 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -3680,7 +3680,7 @@ int lxc_setup(struct lxc_handler *handler) - return -1; - } - -- /*isulad: move mount entrues here, before we do lxc_fill_autodev and populate devices */ -+ /*isulad: move mount entries here, before we do lxc_fill_autodev and populate devices */ - if (!lxc_list_empty(&lxc_conf->mount_list)) { - ret = setup_mount_entries(lxc_conf, &lxc_conf->rootfs, - &lxc_conf->mount_list, name, lxcpath); diff --git a/src/lxc/start.c b/src/lxc/start.c -index 9365d11..b13326c 100644 +index 70e8282..17766bc 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c -@@ -1398,6 +1398,10 @@ static int do_start(void *data) - new_uid = handler->conf->init_uid; - new_gid = handler->conf->init_gid; +@@ -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) ++ if (lxc_setup_env_home(new_uid) < 0) { + goto out_warn_father; ++ } ++#endif + - /* Avoid unnecessary syscalls. */ - if (new_uid == nsuid) - new_uid = LXC_INVALID_UID; + /* 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 4728284..74e74a1 100644 +index 90113e0..5b04fa4 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c -@@ -45,6 +45,7 @@ - #include +@@ -28,6 +28,7 @@ #include #include + #include +#include #include "config.h" #include "log.h" -@@ -1829,6 +1830,34 @@ int lxc_setup_keyring(void) - return ret; +@@ -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 __DEFAULT_HOMEDIR__ "/" -+ int ret = 0; -+ char *homedir; -+ struct passwd pwd, *result = NULL; ++#define __PASSWD_FILE__ "/etc/passwd" ++ char *homedir = "/"; // default home dir is / ++ FILE *stream = NULL; ++ struct passwd pw, *pwbufp = NULL; + char buf[BUFSIZ]; + -+ ret = getpwuid_r(uid, &pwd, buf, BUFSIZ, &result); -+ if (ret || !result || !result->pw_dir) { -+ WARN("User invalid, can not find user '%u'", uid); -+ homedir = __DEFAULT_HOMEDIR__; -+ } else { -+ homedir = result->pw_dir; ++ 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'"); @@ -116,24 +124,20 @@ index 4728284..74e74a1 100644 + return 0; +} + -+ - /* isulad: read file to buffer */ - static int lxc_file2str(const char *filename, char ret[], int cap) - { + #endif diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 8e4ed89..364bf67 100644 +index fbb0d55..677f632 100644 --- a/src/lxc/utils.h +++ b/src/lxc/utils.h -@@ -309,6 +309,9 @@ extern int fd_cloexec(int fd, bool cloexec); - extern int recursive_destroy(char *dirname); - extern int lxc_setup_keyring(void); - -+// isulad: set env home in container -+extern int lxc_setup_env_home(uid_t uid); -+ - extern int fd_nonblock(int fd); +@@ -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/0018-lxc-attach-add-support-terminal-fifos.patch b/0014-exec-refact-attach-progress.patch similarity index 47% rename from 0018-lxc-attach-add-support-terminal-fifos.patch rename to 0014-exec-refact-attach-progress.patch index 8f2aace..5753672 100644 --- a/0018-lxc-attach-add-support-terminal-fifos.patch +++ b/0014-exec-refact-attach-progress.patch @@ -1,59 +1,23 @@ -From 0c11550c088cca12b6900623240799dc911da458 Mon Sep 17 00:00:00 2001 +From 61b64be9ac4e5d46e9363bb605c7b2e14d0cd2a2 Mon Sep 17 00:00:00 2001 From: LiFeng -Date: Mon, 14 Jan 2019 02:18:26 -0500 -Subject: [PATCH 018/140] lxc-attach: add support terminal fifos - -1. support terminal fifos to redirect terminal -2. support lxc-attach run in background +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 | 18 ++++- - src/lxc/attach_options.h | 3 + - src/lxc/terminal.c | 27 +++++-- - src/lxc/tools/arguments.h | 2 +- - src/lxc/tools/lxc_attach.c | 181 +++++++++++++++++++++++++++++++++++++++++---- - 5 files changed, 204 insertions(+), 27 deletions(-) + 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 2bbf1eb..1886bde 100644 +index 801dc27..e66ca1c 100644 --- a/src/lxc/attach.c +++ b/src/lxc/attach.c -@@ -988,12 +988,23 @@ 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); - -+ /* isulad: if we pass fifo in option, use them as init fifos */ -+ if (options->init_fifo[0] && options->init_fifo[1]) { -+ if (terminal->init_fifo[0]) -+ free(terminal->init_fifo[0]); -+ terminal->init_fifo[0] = strdup(options->init_fifo[0]); -+ -+ if (terminal->init_fifo[1]) -+ free(terminal->init_fifo[1]); -+ terminal->init_fifo[1] = strdup(options->init_fifo[1]); -+ } -+ - ret = lxc_terminal_create(terminal); - if (ret < 0) { - ERROR("Failed to create terminal"); -@@ -1203,7 +1214,7 @@ int lxc_attach(const char *name, const char *lxcpath, - } - - 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); -@@ -1489,7 +1500,7 @@ int lxc_attach(const char *name, const char *lxcpath, +@@ -1420,7 +1420,7 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function, } if (pid == 0) { @@ -62,70 +26,77 @@ index 2bbf1eb..1886bde 100644 ret = pthread_sigmask(SIG_SETMASK, &terminal.tty_state->oldmask, NULL); if (ret < 0) { -@@ -1497,7 +1508,6 @@ int lxc_attach(const char *name, const char *lxcpath, - _exit(EXIT_FAILURE); - } - } -- - ret = attach_child_main(&payload); - if (ret < 0) - ERROR("Failed to exec"); diff --git a/src/lxc/attach_options.h b/src/lxc/attach_options.h -index 193fd7e..081618c 100644 +index 3a02ee5..7b0ea5e 100644 --- a/src/lxc/attach_options.h +++ b/src/lxc/attach_options.h -@@ -135,6 +135,8 @@ typedef struct lxc_attach_options_t { +@@ -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 - /*! File descriptor to log output. */ - int log_fd; -+ -+ char *init_fifo[2]; /* isulad: default fifos for the start */ } lxc_attach_options_t; ++#ifdef HAVE_ISULAD /*! Default attach options to use */ -@@ -153,6 +155,7 @@ typedef struct lxc_attach_options_t { + #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}, \ ++ /* .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 7aa4730..ee3aef2 100644 +index c8cd83f..775743d 100644 --- a/src/lxc/terminal.c +++ b/src/lxc/terminal.c -@@ -514,7 +514,7 @@ static int lxc_terminal_mainloop_add_peer(struct lxc_terminal *terminal) - } - - /* isulad add fifo to mainloop */ --static int lxc_console_mainloop_add_fifo(struct lxc_terminal *terminal) -+static int lxc_terminal_mainloop_add_fifo(struct lxc_terminal *terminal) - { - int ret = 0; - struct lxc_list *it,*next; -@@ -564,7 +564,7 @@ int lxc_terminal_mainloop_add(struct lxc_epoll_descr *descr, - } - - /* isulad add fifo to mainloop */ -- ret = lxc_console_mainloop_add_fifo(terminal); -+ ret = lxc_terminal_mainloop_add_fifo(terminal); - if (ret < 0) { - ERROR("Failed to add handler for terminal fifos to mainloop"); - return -1; -@@ -789,13 +789,28 @@ 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; -+ const char *path = NULL; - int ret = 0; +@@ -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) + */ @@ -142,71 +113,84 @@ index 7aa4730..ee3aef2 100644 + DEBUG("Not have a controlling terminal"); + return 0; + } ++#endif terminal->peer = lxc_unpriv(open(path, O_RDWR | O_CLOEXEC)); if (terminal->peer < 0) { -@@ -1355,7 +1370,7 @@ int lxc_terminal_prepare_login(int fd) +@@ -1884,9 +1901,15 @@ int lxc_terminal_prepare_login(int fd) if (ret < 0) return -1; -- ret = lxc_terminal_set_stdfds(fd); ++#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 61f4a0a..047e9f1 100644 +index ea5f938..e0866d6 100644 --- a/src/lxc/tools/arguments.h +++ b/src/lxc/tools/arguments.h -@@ -62,7 +62,7 @@ struct lxc_arguments { - - /* for lxc-start */ - const char *share_ns[32]; /* size must be greater than LXC_NS_MAX */ -- const char *terminal_fifos[2]; /* isulad add, fifos used to redirct stdin/out/err */ -+ char *terminal_fifos[2]; /* isulad add, fifos used to redirct stdin/out/err */ +@@ -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 8c8e7d3..6d0ffe5 100644 +index a8f493a..47ac2f2 100644 --- a/src/lxc/tools/lxc_attach.c +++ b/src/lxc/tools/lxc_attach.c -@@ -75,6 +75,8 @@ static const struct option my_longopts[] = { - {"set-var", required_argument, 0, 'v'}, - {"pty-log", required_argument, 0, 'L'}, +@@ -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 }; -@@ -133,6 +135,9 @@ Options :\n\ - .log_file = "none", - }; - -+// isulad: send '128 + signal' if container is killed by signal. -+#define ExitSignalOffset 128 -+ - static int my_parser(struct lxc_arguments *args, int c, char *arg) - { - int ret; -@@ -190,6 +195,12 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - case 'f': - args->rcfile = arg; +@@ -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; -@@ -253,10 +264,143 @@ static int lxc_attach_create_log_file(const char *log_file) +@@ -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, @@ -238,8 +222,8 @@ index 8c8e7d3..6d0ffe5 100644 + wexit = ExitSignalOffset + signal; + } +out: -+ //if (c->lxc_conf->errmsg) -+ // *errmsg = strdup(c->lxc_conf->errmsg); ++ if (c->lxc_conf->errmsg) ++ *errmsg = safe_strdup(c->lxc_conf->errmsg); + return wexit; +} + @@ -283,7 +267,7 @@ index 8c8e7d3..6d0ffe5 100644 + msgpipe[1] = -1; + size_read = read(msgpipe[0], msgbuf, BUFSIZ); + if (size_read > 0) { -+ *errmsg = strdup(msgbuf); ++ *errmsg = safe_strdup(msgbuf); + ret = -1; + } + @@ -319,8 +303,10 @@ index 8c8e7d3..6d0ffe5 100644 + 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); ++ 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; @@ -339,72 +325,128 @@ index 8c8e7d3..6d0ffe5 100644 + exit(0); +} + - int main(int argc, char *argv[]) - { - int ret = -1; - int wexit = 0; ++int main(int argc, char *argv[]) ++{ ++ int ret = -1; ++ int wexit = 0; ++ struct lxc_log log; + char *errmsg = NULL; - struct lxc_log log; - pid_t pid; - lxc_attach_options_t attach_options = LXC_ATTACH_OPTIONS_DEFAULT; -@@ -316,8 +460,13 @@ int main(int argc, char *argv[]) - if (elevated_privileges) - attach_options.attach_flags &= ~(elevated_privileges); - -- if (stdfd_is_pty()) -+ if (my_args.terminal_fifos[0] && my_args.terminal_fifos[1]) { ++ 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.attach_flags |= LXC_ATTACH_TERMINAL; + } - - attach_options.namespaces = namespace_flags; - attach_options.personality = new_personality; -@@ -332,27 +481,27 @@ int main(int argc, char *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) -- goto out; ++ ++ 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); + } - } - -- if (command.program) -- ret = c->attach(c, lxc_attach_run_command, &command, &attach_options, &pid); ++ } ++ ++ 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 -- ret = c->attach(c, lxc_attach_run_shell, NULL, &attach_options, &pid); -- if (ret < 0) -- goto out; ++ else + wexit = do_attach_background(c, &command, &attach_options, &errmsg); - -- ret = lxc_wait_for_pid_status(pid); -- if (ret < 0) -- goto out; -- -- if (WIFEXITED(ret)) -- wexit = WEXITSTATUS(ret); ++ + if (errmsg) { + fprintf(stderr, "%s:%s:%s:%d starting container process caused \"%s\"", c->name, + __FILE__, __func__, __LINE__, errmsg); + free(errmsg); + } - --out: - lxc_container_put(c); -- if (ret >= 0) ++ ++ lxc_container_put(c); + if (wexit >= 0) - exit(wexit); ++ 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/0014-support-rotate-for-container-log-file.patch b/0014-support-rotate-for-container-log-file.patch deleted file mode 100644 index 55e075b..0000000 --- a/0014-support-rotate-for-container-log-file.patch +++ /dev/null @@ -1,93 +0,0 @@ -From 42efaa5362d755d9f9bf028c283ca24bc6a03cbb Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Sat, 12 Jan 2019 15:29:56 +0800 -Subject: [PATCH 014/140] support rotate for container log file - -support rotate for container log file - -Signed-off-by: LiFeng ---- - src/lxc/confile.c | 3 +++ - src/lxc/terminal.c | 40 ++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 43 insertions(+) - -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index cbef2e2..e782211 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -1802,11 +1802,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; - -+ /* -+ * 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; - } -+ */ - - return 0; - } -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 410f643..3bb3a52 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -229,6 +229,39 @@ static int lxc_terminal_truncate_log_file(struct lxc_terminal *terminal) - return lxc_unpriv(ftruncate(terminal->log_fd, 0)); - } - -+/* -+ * isuald: support mult-logfiles -+ * */ -+static int lxc_terminal_rename_old_log_file(struct lxc_terminal *terminal) -+{ -+ int ret; -+ size_t i; -+ char tmp[PATH_MAX] = {0}; -+ char *rename_fname = NULL; -+ -+ for (i = terminal->log_rotate - 1; i > 1; i--) { -+ ret = sprintf(tmp, "%s.%d", terminal->log_path, i); -+ if (ret < 0) -+ return -EFBIG; -+ if (rename_fname) -+ free(rename_fname); -+ rename_fname = strdup(tmp); -+ ret = sprintf(tmp, "%s.%d", terminal->log_path, (i - 1)); -+ if (ret < 0) { -+ free(rename_fname); -+ return -EFBIG; -+ } -+ ret = lxc_unpriv(rename(tmp, rename_fname)); -+ if (ret < 0 && errno != ENOENT) -+ return ret; -+ } -+ -+ if (rename_fname) -+ free(rename_fname); -+ -+ return 0; -+} -+ - static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) - { - int ret; -@@ -242,6 +275,13 @@ static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) - if (terminal->log_fd < 0) - return -EBADF; - -+ /* 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; -+ } -+ - len = strlen(terminal->log_path) + sizeof(".1"); - tmp = alloca(len); - --- -1.8.3.1 - diff --git a/0016-add-masked-paths-and-ro-paths.patch b/0015-add-masked-paths-and-readonly-paths.patch similarity index 63% rename from 0016-add-masked-paths-and-ro-paths.patch rename to 0015-add-masked-paths-and-readonly-paths.patch index 7cf8cad..bfe5a18 100644 --- a/0016-add-masked-paths-and-ro-paths.patch +++ b/0015-add-masked-paths-and-readonly-paths.patch @@ -1,24 +1,24 @@ -From 6abc6c02684ec9d48033969399352050789da2d6 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Sat, 12 Jan 2019 15:55:52 +0800 -Subject: [PATCH 016/140] add masked paths and ro paths +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: LiFeng +Signed-off-by: wujing --- - src/lxc/conf.c | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/conf.h | 8 ++++ - src/lxc/confile.c | 113 ++++++++++++++++++++++++++++++++++++++++++++- - 3 files changed, 255 insertions(+), 1 deletion(-) + 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 5065e69..537f956 100644 +index a904348..fce241b 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c -@@ -1343,6 +1343,95 @@ static int lxc_mount_rootfs(struct lxc_conf *conf) +@@ -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 ). @@ -49,7 +49,7 @@ index 5065e69..537f956 100644 +// 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, savederrno, i; ++ int ret, i; + + if (!path) + return true; @@ -63,7 +63,7 @@ index 5065e69..537f956 100644 + if (ret < 0) + goto on_error; + ret = mount(path, path, "", MS_BIND | MS_REMOUNT | MS_RDONLY | MS_REC | \ -+ MS_NOEXEC | MS_NOSUID | MS_NODEV, ""); ++ MS_NOEXEC | MS_NOSUID | MS_NODEV, ""); + if (ret < 0) + goto on_error; + } else if (errno == EBUSY) { @@ -88,8 +88,8 @@ index 5065e69..537f956 100644 + struct lxc_list *it; + + lxc_list_for_each(it, maskedpaths) { -+ if (!mask_path((char *)it->elem)) -+ return -1; ++ if (!mask_path((char *)it->elem)) ++ return -1; + } + + return 0; @@ -100,56 +100,69 @@ index 5065e69..537f956 100644 + struct lxc_list *it; + + lxc_list_for_each(it, ropaths) { -+ if (!remount_readonly((char *)it->elem)) -+ return -1; ++ if (!remount_readonly((char *)it->elem)) ++ return -1; + } + + return 0; +} ++#endif + int lxc_chroot(const struct lxc_rootfs *rootfs) { - int i, ret; -@@ -2759,6 +2848,8 @@ struct lxc_conf *lxc_conf_init(void) + __do_free char *nroot = NULL; +@@ -2666,8 +2756,9 @@ struct lxc_conf *lxc_conf_init(void) + seccomp_conf_init(new); - /* isulad add begin */ + #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; - /* isulad add end */ + 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"); + } -@@ -3759,6 +3850,22 @@ int lxc_setup(struct lxc_handler *handler) - if (ret < 0) - return -1; - -+ //isulad: setup rootfs masked paths ++#ifdef HAVE_ISULAD ++ // isulad: setup rootfs masked paths + if (!lxc_list_empty(&lxc_conf->rootfs.maskedpaths)) { + if (setup_rootfs_maskedpaths(&lxc_conf->rootfs.maskedpaths)) { -+ ERROR("failed to setup maskedpaths"); -+ return -1; ++ 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)) { -+ ERROR("failed to setup readonlypaths"); -+ return -1; ++ return log_error(-1, "failed to setup readonlypaths"); + } + } ++#endif + - ret = setup_personality(lxc_conf->personality); - if (ret < 0) { - ERROR("Failed to set personality"); -@@ -4147,6 +4254,32 @@ int lxc_clear_populate_devices(struct lxc_conf *c) + 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,*next; ++ struct lxc_list *it = NULL; ++ struct lxc_list *next = NULL; + + lxc_list_for_each_safe(it, &c->rootfs.maskedpaths, next) { + lxc_list_del(it); @@ -162,7 +175,8 @@ index 5065e69..537f956 100644 +/*isulad: clear rootfs ro paths*/ +int lxc_clear_rootfs_ro_paths(struct lxc_conf *c) +{ -+ struct lxc_list *it,*next; ++ struct lxc_list *it = NULL; ++ struct lxc_list *next = NULL; + + lxc_list_for_each_safe(it, &c->rootfs.ropaths, next) { + lxc_list_del(it); @@ -172,91 +186,72 @@ index 5065e69..537f956 100644 + return 0; +} + - void lxc_conf_free(struct lxc_conf *conf) - { - if (!conf) -@@ -4195,6 +4328,8 @@ void lxc_conf_free(struct lxc_conf *conf) - /* isulad add begin */ - lxc_clear_init_args(conf); - lxc_clear_populate_devices(conf); -+ lxc_clear_rootfs_masked_paths(conf); -+ lxc_clear_rootfs_ro_paths(conf); - free(conf->container_info_file); - if (conf->exit_fd != -1) - close(conf->exit_fd); + #endif diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 2d939cd..7927812 100644 +index 52460a3..482fe0d 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h -@@ -160,6 +160,8 @@ struct lxc_tty_info { - * @options : mount options +@@ -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; -@@ -168,6 +170,10 @@ struct lxc_rootfs { - char *options; +@@ -152,6 +154,14 @@ struct lxc_rootfs { unsigned long mountflags; char *data; -+ /* isulad: maskedpaths */ -+ struct lxc_list maskedpaths; -+ /* isulad: ropaths */ -+ struct lxc_list ropaths; + bool managed; ++ ++#ifdef HAVE_ISULAD ++ /* isulad: maskedpaths */ ++ struct lxc_list maskedpaths; ++ /* isulad: ropaths */ ++ struct lxc_list ropaths; ++#endif ++ }; /* -@@ -477,6 +483,8 @@ extern int lxc_clear_procs(struct lxc_conf *c, const char *key); - /* isulad add begin */ +@@ -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); - - /* isulad add end */ - + #endif + #endif /* __LXC_CONF_H */ diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index e782211..e199965 100644 +index 2df269a..bf0fdf0 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c -@@ -139,6 +139,8 @@ lxc_config_define(pty_max); - lxc_config_define(rootfs_mount); - lxc_config_define(rootfs_options); - lxc_config_define(rootfs_path); +@@ -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); - lxc_config_define(seccomp_profile); - lxc_config_define(selinux_context); - lxc_config_define(signal_halt); -@@ -243,6 +245,8 @@ static struct lxc_config_t config_jump_table[] = { - /*isulad add begin*/ + #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, }, - /*isulad add end*/ + #endif }; -@@ -2224,7 +2228,7 @@ static int set_config_init_args(const char *key, const char *value, +@@ -6311,4 +6315,106 @@ static inline int clr_config_umask(const char *key, struct lxc_conf *c, return 0; } --/* isulad: set config for init args */ -+/* 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) - { -@@ -2308,6 +2312,62 @@ on_error: - free(dev_elem); - } - return -1; -+} -+ +/* 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_conf *lxc_conf, void *data) +{ + struct lxc_list *list_item = NULL; + @@ -264,13 +259,10 @@ index e782211..e199965 100644 + return lxc_clear_rootfs_masked_paths(lxc_conf); + + list_item = malloc(sizeof(*list_item)); -+ if (!list_item) ++ if (list_item == NULL) + goto on_error; + -+ list_item->elem = strdup(value); -+ -+ if (!list_item->elem) -+ goto on_error; ++ list_item->elem = safe_strdup(value); + + lxc_list_add_tail(&lxc_conf->rootfs.maskedpaths, list_item); + @@ -282,9 +274,28 @@ index e782211..e199965 100644 + 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_conf *lxc_conf, void *data) +{ + struct lxc_list *list_item = NULL; + @@ -292,13 +303,10 @@ index e782211..e199965 100644 + return lxc_clear_rootfs_ro_paths(lxc_conf); + + list_item = malloc(sizeof(*list_item)); -+ if (!list_item) ++ if (list_item == NULL) + goto on_error; + -+ list_item->elem = strdup(value); -+ -+ if (!list_item->elem) -+ goto on_error; ++ list_item->elem = safe_strdup(value); + + lxc_list_add_tail(&lxc_conf->rootfs.ropaths, list_item); + @@ -308,38 +316,14 @@ index e782211..e199965 100644 + free(list_item); + + return -1; - - } - -@@ -3889,6 +3949,43 @@ static int get_config_populate_device(const char *key, char *retv, int inlen, - return fulllen; - } - -+// 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; -+ -+ 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: 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) ++ struct lxc_conf *c, void *data) +{ + int len, fulllen = 0; -+ struct lxc_list *it; ++ struct lxc_list *it = NULL; + + if (!retv) + inlen = 0; @@ -352,30 +336,22 @@ index e782211..e199965 100644 + + return fulllen; +} - - /* Callbacks to clear config items. */ - static inline int clr_config_personality(const char *key, struct lxc_conf *c, -@@ -4708,6 +4805,20 @@ static inline int clr_config_populate_device(const char *key, struct lxc_conf *c - return lxc_clear_populate_devices(c); - } - ++ +/* isulad: clr config rootfs masked paths */ +static inline int clr_config_rootfs_masked_paths(const char *key, struct lxc_conf *c, -+ void *data) ++ 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) ++ void *data) +{ + return lxc_clear_rootfs_ro_paths(c); +} + - static int get_config_net_nic(const char *key, char *retv, int inlen, - struct lxc_conf *c, void *data) - { + #endif -- 1.8.3.1 diff --git a/0015-fix-high-gcc-compile-bug.patch b/0015-fix-high-gcc-compile-bug.patch deleted file mode 100644 index 5d79915..0000000 --- a/0015-fix-high-gcc-compile-bug.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 5b07aee14b1c49e11cdf42fb2b9c8887751cedb7 Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Sat, 12 Jan 2019 16:28:41 +0800 -Subject: [PATCH 015/140] fix high gcc compile bug - -fix high gcc compile bug - -Signed-off-by: LiFeng ---- - src/lxc/terminal.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 3bb3a52..7aa4730 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -235,18 +235,18 @@ static int lxc_terminal_truncate_log_file(struct lxc_terminal *terminal) - static int lxc_terminal_rename_old_log_file(struct lxc_terminal *terminal) - { - int ret; -- size_t i; -+ unsigned int i; - char tmp[PATH_MAX] = {0}; - char *rename_fname = NULL; - - for (i = terminal->log_rotate - 1; i > 1; i--) { -- ret = sprintf(tmp, "%s.%d", terminal->log_path, i); -+ ret = sprintf(tmp, "%s.%u", terminal->log_path, i); - if (ret < 0) - return -EFBIG; - if (rename_fname) - free(rename_fname); - rename_fname = strdup(tmp); -- ret = sprintf(tmp, "%s.%d", terminal->log_path, (i - 1)); -+ ret = sprintf(tmp, "%s.%u", terminal->log_path, (i - 1)); - if (ret < 0) { - free(rename_fname); - return -EFBIG; --- -1.8.3.1 - diff --git a/0016-start-separate-i-and-t.patch b/0016-start-separate-i-and-t.patch new file mode 100644 index 0000000..65a0e4a --- /dev/null +++ b/0016-start-separate-i-and-t.patch @@ -0,0 +1,369 @@ +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/0045-add_terminal_fifos-Add-terminal-fifos-dynamically.patch b/0017-attach-add_terminal_fifos-Add-terminal-fifos-dynamic.patch similarity index 37% rename from 0045-add_terminal_fifos-Add-terminal-fifos-dynamically.patch rename to 0017-attach-add_terminal_fifos-Add-terminal-fifos-dynamic.patch index af7465e..30c1b77 100644 --- a/0045-add_terminal_fifos-Add-terminal-fifos-dynamically.patch +++ b/0017-attach-add_terminal_fifos-Add-terminal-fifos-dynamic.patch @@ -1,34 +1,51 @@ -From 934f4937ec177e9c95445b800ca11adbb7c3a0ef Mon Sep 17 00:00:00 2001 +From 29c1823334219c03b1ef4d6b4965529b73ff071b Mon Sep 17 00:00:00 2001 From: LiFeng -Date: Thu, 17 Jan 2019 02:18:14 -0500 -Subject: [PATCH 045/140] add_terminal_fifos: Add terminal fifos dynamically +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 | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/commands.h | 4 ++++ - src/lxc/lxccontainer.c | 24 +++++++++++++++++++ - src/lxc/lxccontainer.h | 10 ++++++++ - src/lxc/terminal.c | 47 ++++++++++++++++++++++++++++++++++++++ - src/lxc/terminal.h | 1 + - 6 files changed, 148 insertions(+) + 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 47a824a..46b2805 100644 +index 991bca2..0ffc5c7 100644 --- a/src/lxc/commands.c +++ b/src/lxc/commands.c -@@ -96,6 +96,7 @@ static const char *lxc_cmd_str(lxc_cmd_t cmd) - [LXC_CMD_ADD_STATE_CLIENT] = "add_state_client", - [LXC_CMD_CONSOLE_LOG] = "console_log", - [LXC_CMD_SERVE_STATE_CLIENTS] = "serve_state_clients", -+ [LXC_CMD_SET_TERMINAL_FIFOS] = "set_terminal_fifos", +@@ -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) -@@ -1056,6 +1057,66 @@ reap_client_fd: - return 1; +@@ -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 + * @@ -36,21 +53,30 @@ index 47a824a..46b2805 100644 + * + * 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) ++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 (!in_fifo || !out_fifo) { ++ if (len + strlen(cmd_in_fifo) + strlen(split) + strlen(cmd_out_fifo) + ++ strlen(split) + strlen(cmd_err_fifo) == SIZE_MAX) + return -1; -+ } -+ -+ len = strlen(in_fifo) + strlen("&&&&") + strlen(out_fifo) + 1; ++ len += strlen(cmd_in_fifo) + strlen(split) + strlen(cmd_out_fifo) + strlen(split) + strlen(cmd_err_fifo) + 1; + tmp = malloc(len); -+ if (!tmp) ++ 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; -+ snprintf(tmp, len, "%s%s%s", in_fifo, "&&&&", out_fifo); ++ } + + struct lxc_cmd_rr cmd = { + .req = { @@ -78,7 +104,7 @@ index 47a824a..46b2805 100644 +} + +static int lxc_cmd_set_terminal_fifos_callback(int fd, struct lxc_cmd_req *req, -+ struct lxc_handler *handler) ++ struct lxc_handler *handler, struct lxc_epoll_descr *descr) +{ + struct lxc_cmd_rsp rsp; + memset(&rsp, 0, sizeof(rsp)); @@ -86,61 +112,77 @@ index 47a824a..46b2805 100644 + 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) - { -@@ -1075,6 +1136,7 @@ static int lxc_cmd_process(int fd, struct lxc_cmd_req *req, - [LXC_CMD_ADD_STATE_CLIENT] = lxc_cmd_add_state_client_callback, - [LXC_CMD_CONSOLE_LOG] = lxc_cmd_console_log_callback, - [LXC_CMD_SERVE_STATE_CLIENTS] = lxc_cmd_serve_state_clients_callback, -+ [LXC_CMD_SET_TERMINAL_FIFOS] = lxc_cmd_set_terminal_fifos_callback, + 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) { + if (req->cmd >= LXC_CMD_MAX) diff --git a/src/lxc/commands.h b/src/lxc/commands.h -index 2c024b6..0c64544 100644 +index 9e52484..95815e6 100644 --- a/src/lxc/commands.h +++ b/src/lxc/commands.h -@@ -46,6 +46,7 @@ typedef enum { - LXC_CMD_ADD_STATE_CLIENT, - LXC_CMD_CONSOLE_LOG, - LXC_CMD_SERVE_STATE_CLIENTS, +@@ -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; -@@ -125,4 +126,7 @@ extern int lxc_try_cmd(const char *name, const char *lxcpath); - extern int lxc_cmd_console_log(const char *name, const char *lxcpath, - struct lxc_console_log *log); +@@ -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 *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 d641851..bfbf223 100644 +index e27b63b..d0e6e2b 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c -@@ -5164,6 +5164,29 @@ static bool do_lxcapi_clean_container_resource(struct lxc_container *c, pid_t pi - - WRAP_API_1(bool, lxcapi_clean_container_resource, pid_t) +@@ -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) ++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 || !in_fifo || !out_fifo) ++ 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)) { ++ if (lxc_cmd_set_terminal_fifos(c->name, c->config_path, in_fifo, out_fifo, err_fifo)) { + ERROR("Error set console fifos"); + ret = false; + } @@ -149,47 +191,25 @@ index d641851..bfbf223 100644 + return ret; +} + -+WRAP_API_2(bool, lxcapi_add_terminal_fifo, const char *, const char *) -+ - static struct lxc_container *do_lxc_container_new(const char *name, const char *configpath, bool load_config) - { - struct lxc_container *c; -@@ -5299,6 +5322,7 @@ static struct lxc_container *do_lxc_container_new(const char *name, const char * ++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_start_timeout = lxcapi_set_start_timeout; - c->clean_container_resource = lxcapi_clean_container_resource; + c->set_terminal_init_fifos = lxcapi_set_terminal_default_fifos; + c->add_terminal_fifos = lxcapi_add_terminal_fifo; - /* isulad add end */ + #endif return c; -diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index a00e0ec..c1d83ba 100644 ---- a/src/lxc/lxccontainer.h -+++ b/src/lxc/lxccontainer.h -@@ -878,6 +878,16 @@ struct lxc_container { - bool (*set_terminal_init_fifos)(struct lxc_container *c, const char *in, const char *out); - - /*! 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); -+ -+ /*! isulad add - * \brief An API call to set the path of info file - * - * \param c Container. diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index ee3aef2..a33830d 100644 +index 775743d..4d7c2cd 100644 --- a/src/lxc/terminal.c +++ b/src/lxc/terminal.c -@@ -1473,3 +1473,50 @@ int lxc_terminal_map_ids(struct lxc_conf *c, struct lxc_terminal *terminal) - - return 0; +@@ -1607,6 +1607,63 @@ err: + lxc_terminal_delete(terminal); + return -ENODEV; } + +/* isulad: add fifos dynamic*/ @@ -198,34 +218,44 @@ index ee3aef2..a33830d 100644 + int ret = 0; + struct lxc_terminal *terminal = &conf->console; + int fifofd_in = -1; -+ char *tmp = NULL, *saveptr = NULL, *in = NULL, *out = NULL; ++ char *tmp = NULL, *saveptr = NULL, *in = NULL, *out = NULL, *err = NULL; ++ const char *none_fifo_name = "none"; + -+ tmp = strdup(fifonames); -+ if (!tmp) { -+ ret = -1; -+ goto free_out; -+ } ++ 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; + -+ fifofd_in = lxc_terminal_set_fifo(terminal, in, out); -+ if (fifofd_in < 0) { ++ 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)) { ++ lxc_terminal_io_cb, terminal)) { + ERROR("console fifo not added to mainloop"); + lxc_terminal_delete_fifo(fifofd_in, &terminal->fifos); + ret = -1; @@ -238,16 +268,21 @@ index ee3aef2..a33830d 100644 + return ret; +} + + #else + int lxc_terminal_create(struct lxc_terminal *terminal) + { diff --git a/src/lxc/terminal.h b/src/lxc/terminal.h -index d25da65..d006b80 100644 +index dfc03c6..b4160b3 100644 --- a/src/lxc/terminal.h +++ b/src/lxc/terminal.h -@@ -310,5 +310,6 @@ extern int lxc_terminal_map_ids(struct lxc_conf *c, - static bool lxc_terminal_is_fifo(int fd, struct lxc_list *list); - /* isulad: if fd == -1, means delete all the fifos*/ - int lxc_terminal_delete_fifo(int fd, struct lxc_list *list); -+int lxc_terminal_add_fifos(struct lxc_conf *conf, const char *fifonames); +@@ -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/0017-isulad-check-cgroup-cpu.shares-after-setted.patch b/0017-isulad-check-cgroup-cpu.shares-after-setted.patch deleted file mode 100644 index 51f9f67..0000000 --- a/0017-isulad-check-cgroup-cpu.shares-after-setted.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 068331c965f3011f03e31b67d9791b2f81fd69b0 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Mon, 14 Jan 2019 11:03:03 +0800 -Subject: [PATCH 017/140] isulad: check cgroup cpu.shares after setted - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 61 insertions(+) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 3e702b3..ab5732b 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -2204,6 +2204,42 @@ static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename, - return ret; - } - -+/* Called from setup_limits - here we have the container's cgroup_data because -+ * we created the cgroups. -+ */ -+static int cg_legacy_get_data(struct cgroup_ops *ops, const char *filename, -+ char *value, size_t len) -+{ -+ char *fullpath, *p; -+ struct hierarchy *h; -+ int ret = 0; -+ char *controller = NULL; -+ -+ len = strlen(filename); -+ controller = alloca(len + 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; -+ return -ENOENT; -+ } -+ -+ fullpath = must_make_path(h->container_full_path, filename, NULL); -+ ret = lxc_read_from_file(fullpath, value, len); -+ free(fullpath); -+ return ret; -+} -+ - static bool __cg_legacy_setup_limits(struct cgroup_ops *ops, - struct lxc_list *cgroup_settings, - bool do_devices) -@@ -2211,6 +2247,8 @@ static bool __cg_legacy_setup_limits(struct cgroup_ops *ops, - struct lxc_list *iterator, *next, *sorted_cgroup_settings; - struct lxc_cgroup *cg; - bool ret = false; -+ char value[21]; -+ long long int readvalue, setvalue; - - if (lxc_list_empty(cgroup_settings)) - return true; -@@ -2236,6 +2274,29 @@ static bool __cg_legacy_setup_limits(struct cgroup_ops *ops, - DEBUG("Set controller \"%s\" set to \"%s\"", - cg->subsystem, cg->value); - } -+ // isulad: check cpu shares -+ if (strcmp(cg->subsystem, "cpu.shares") == 0) { -+ if (cg_legacy_get_data(ops, cg->subsystem, value, sizeof(value)) < 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); -+ goto out; -+ } else if (setvalue < readvalue) { -+ ERROR("The minimum allowed cpu-shares is %s", value); -+ goto out; -+ } -+ } - } - - ret = true; --- -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 new file mode 100644 index 0000000..1612fe7 --- /dev/null +++ b/0018-pty-setup-pty-after-setup-rootfs-mount-options.patch @@ -0,0 +1,157 @@ +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-remount-cgroup-readonly-and-make-soft-link-of-subcgr.patch b/0019-remount-cgroup-readonly-and-make-soft-link-of-subcgr.patch deleted file mode 100644 index f5de1fb..0000000 --- a/0019-remount-cgroup-readonly-and-make-soft-link-of-subcgr.patch +++ /dev/null @@ -1,87 +0,0 @@ -From 16616f224d5577594548b2ce1ee50f51a449e20d Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Mon, 14 Jan 2019 13:51:01 +0800 -Subject: [PATCH 019/140] remount cgroup readonly and make soft link of - subcgroup - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 44 insertions(+) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index ab5732b..705985f 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1621,6 +1621,7 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - 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; -@@ -1667,6 +1668,14 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - 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); -@@ -1721,10 +1730,45 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - if (ret < 0) - goto on_error; - } -+ -+ // isulad: symlink subcgroup -+ if (merged) { -+ char **mc; -+ for (mc = merged; *mc; mc++) { -+ char *token; -+ char *merge = must_copy_string(*mc); -+ lxc_iterate_parts(token, merge, ",") { -+ 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, merge); -+ free(merge); -+ free(link); -+ goto on_error; -+ } -+ free(link); -+ } -+ free(merge); -+ } -+ } -+ -+ -+ // 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; - } - --- -1.8.3.1 - diff --git a/0138-resize-implement-resize-function-in-exec-start.patch b/0019-resize-implement-resize-function-in-exec-start.patch similarity index 56% rename from 0138-resize-implement-resize-function-in-exec-start.patch rename to 0019-resize-implement-resize-function-in-exec-start.patch index 62011cb..cb27896 100644 --- a/0138-resize-implement-resize-function-in-exec-start.patch +++ b/0019-resize-implement-resize-function-in-exec-start.patch @@ -1,88 +1,178 @@ -From d51a587ee6a9ba82e52f5f1a61191e257865041d Mon Sep 17 00:00:00 2001 +From f690df5983011dd3b61f0e139c3e939f3fecf37a Mon Sep 17 00:00:00 2001 From: LiFeng -Date: Fri, 29 Nov 2019 22:12:10 -0500 -Subject: [PATCH 138/140] resize: implement resize function in exec/start +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 | 1 + - src/lxc/attach.c | 45 ++++- - src/lxc/attach.h | 2 +- - src/lxc/commands.c | 44 +++++ - src/lxc/commands.h | 9 + - src/lxc/exec_commands.c | 416 +++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/exec_commands.h | 73 ++++++++ - src/lxc/lxccontainer.c | 64 ++++++- - src/lxc/lxccontainer.h | 15 +- - src/lxc/terminal.c | 26 +++ - src/lxc/terminal.h | 1 + - src/lxc/tools/arguments.h | 3 +- - src/lxc/tools/lxc_attach.c | 20 ++- - src/lxc/tools/lxc_copy.c | 2 +- - src/lxc/tools/lxc_ls.c | 2 +- - 15 files changed, 698 insertions(+), 25 deletions(-) + 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 27240cc..c21eb85 100644 +index 23935e5..c288c51 100644 --- a/src/lxc/Makefile.am +++ b/src/lxc/Makefile.am -@@ -101,6 +101,7 @@ liblxc_la_SOURCES = af_unix.c af_unix.h \ - cgroups/cgroup_utils.c cgroups/cgroup_utils.h \ - compiler.h \ - commands.c commands.h \ -+ exec_commands.c exec_commands.h \ - commands_utils.c commands_utils.h \ - conf.c conf.h \ - confile.c confile.h \ +@@ -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 1f14eb4..03a7646 100644 +index e66ca1c..33946bb 100644 --- a/src/lxc/attach.c +++ b/src/lxc/attach.c -@@ -64,6 +64,7 @@ - #include "syscall_wrappers.h" +@@ -45,6 +45,10 @@ #include "terminal.h" #include "utils.h" -+#include "exec_commands.h" ++#ifdef HAVE_ISULAD ++#include "exec_commands.h" ++#endif ++ #if HAVE_SYS_PERSONALITY_H #include -@@ -1208,7 +1209,7 @@ out: - return ret; - } - --int lxc_attach(const char *name, const char *lxcpath, -+int lxc_attach(const char *name, const char *lxcpath, const char *suffix, - lxc_attach_exec_t exec_function, void *exec_payload, - lxc_attach_options_t *options, pid_t *attached_process, char **err_msg) - { -@@ -1221,6 +1222,10 @@ int lxc_attach(const char *name, const char *lxcpath, - struct lxc_terminal terminal; + #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) { -@@ -1354,6 +1359,10 @@ int lxc_attach(const char *name, const char *lxcpath, + 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); } -@@ -1394,15 +1403,30 @@ int lxc_attach(const char *name, const char *lxcpath, +@@ -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); @@ -90,31 +180,15 @@ index 1f14eb4..03a7646 100644 + close(exec_command.maincmd_fd); + } + } ++#endif free(cwd); lxc_proc_put_context_info(init_ctx); return -1; - } - -- - /* 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; -@@ -1418,6 +1442,15 @@ int lxc_attach(const char *name, const char *lxcpath, +@@ -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); @@ -124,67 +198,67 @@ index 1f14eb4..03a7646 100644 + } + close(ipc_sockets[0]); + close(ipc_sockets[1]); ++#endif free(cwd); lxc_proc_put_context_info(init_ctx); return -1; -@@ -1474,6 +1507,8 @@ int lxc_attach(const char *name, const char *lxcpath, +@@ -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"); } -@@ -1597,6 +1632,9 @@ int lxc_attach(const char *name, const char *lxcpath, +@@ -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); -@@ -1615,6 +1653,9 @@ int lxc_attach(const char *name, const char *lxcpath, +@@ -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/attach.h b/src/lxc/attach.h -index e62b98b..8626a8e 100644 ---- a/src/lxc/attach.h -+++ b/src/lxc/attach.h -@@ -41,7 +41,7 @@ struct lxc_proc_context_info { - int ns_fd[LXC_NS_MAX]; - }; - --extern int lxc_attach(const char *name, const char *lxcpath, -+extern int lxc_attach(const char *name, const char *lxcpath, const char *suffix, - lxc_attach_exec_t exec_function, void *exec_payload, - lxc_attach_options_t *options, pid_t *attached_process, char **err_msg); - diff --git a/src/lxc/commands.c b/src/lxc/commands.c -index b70564f..8fd929d 100644 +index 0ffc5c7..184a219 100644 --- a/src/lxc/commands.c +++ b/src/lxc/commands.c -@@ -97,6 +97,7 @@ static const char *lxc_cmd_str(lxc_cmd_t cmd) - [LXC_CMD_CONSOLE_LOG] = "console_log", - [LXC_CMD_SERVE_STATE_CLIENTS] = "serve_state_clients", - [LXC_CMD_SET_TERMINAL_FIFOS] = "set_terminal_fifos", -+ [LXC_CMD_SET_TERMINAL_WINCH] = "set_terminal_winch", +@@ -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 }; - if (cmd >= LXC_CMD_MAX) -@@ -1126,6 +1127,48 @@ static int lxc_cmd_set_terminal_fifos_callback(int fd, struct lxc_cmd_req *req, +@@ -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; @@ -215,7 +289,7 @@ index b70564f..8fd929d 100644 +} + +static int lxc_cmd_set_terminal_winch_callback(int fd, struct lxc_cmd_req *req, -+ struct lxc_handler *handler) ++ 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); @@ -227,48 +301,36 @@ index b70564f..8fd929d 100644 + +} + + #endif + static int lxc_cmd_process(int fd, struct lxc_cmd_req *req, - struct lxc_handler *handler) - { -@@ -1146,6 +1189,7 @@ 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_SET_TERMINAL_FIFOS] = lxc_cmd_set_terminal_fifos_callback, -+ [LXC_CMD_SET_TERMINAL_WINCH] = lxc_cmd_set_terminal_winch_callback, +@@ -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 }; - if (req->cmd >= LXC_CMD_MAX) { diff --git a/src/lxc/commands.h b/src/lxc/commands.h -index 6b64849..c8cc8cd 100644 +index 95815e6..aa8289d 100644 --- a/src/lxc/commands.h +++ b/src/lxc/commands.h -@@ -47,6 +47,7 @@ typedef enum { - LXC_CMD_CONSOLE_LOG, - LXC_CMD_SERVE_STATE_CLIENTS, +@@ -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; - -@@ -80,6 +81,11 @@ struct lxc_cmd_console_log { - - }; - -+struct lxc_cmd_set_terminal_winch_request { -+ unsigned int height; -+ unsigned int width; -+}; -+ - extern int lxc_cmd_terminal_winch(const char *name, const char *lxcpath); - extern int lxc_cmd_console(const char *name, int *ttynum, int *fd, - const char *lxcpath); -@@ -129,4 +135,7 @@ extern int lxc_cmd_console_log(const char *name, const char *lxcpath, +@@ -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 @@ -772,87 +834,25 @@ index 0000000..2581ee9 + +#endif /* __exec_commands_h */ diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 9f9cbfc..7ef57f0 100644 +index d0e6e2b..75c1bbc 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c -@@ -47,6 +47,7 @@ - #include "cgroup.h" - #include "commands.h" - #include "commands_utils.h" -+#include "exec_commands.h" - #include "conf.h" - #include "config.h" - #include "confile.h" -@@ -4214,7 +4215,7 @@ static bool do_lxcapi_rename(struct lxc_container *c, const char *newname) - - WRAP_API_1(bool, lxcapi_rename, const char *) - --static int lxcapi_attach(struct lxc_container *c, lxc_attach_exec_t exec_function, void *exec_payload, lxc_attach_options_t *options, pid_t *attached_process) -+static int lxcapi_attach(struct lxc_container *c, const char *suffix, lxc_attach_exec_t exec_function, void *exec_payload, lxc_attach_options_t *options, pid_t *attached_process) - { - int ret; - -@@ -4223,12 +4224,12 @@ static int lxcapi_attach(struct lxc_container *c, lxc_attach_exec_t exec_functio - - current_config = c->lxc_conf; - -- ret = lxc_attach(c->name, c->config_path, exec_function, exec_payload, options, attached_process, &c->lxc_conf->errmsg); -+ ret = lxc_attach(c->name, c->config_path, suffix, exec_function, exec_payload, options, attached_process, &c->lxc_conf->errmsg); - current_config = NULL; - return ret; - } - --static int do_lxcapi_attach_run_wait(struct lxc_container *c, lxc_attach_options_t *options, const char *program, const char * const argv[]) -+static int do_lxcapi_attach_run_wait(struct lxc_container *c, const char *suffix, lxc_attach_options_t *options, const char *program, const char * const argv[]) - { - lxc_attach_command_t command; - pid_t pid; -@@ -4240,7 +4241,7 @@ static int do_lxcapi_attach_run_wait(struct lxc_container *c, lxc_attach_options - command.program = (char*)program; - command.argv = (char**)argv; +@@ -62,6 +62,10 @@ + #include "utils.h" + #include "version.h" -- r = lxc_attach(c->name, c->config_path, lxc_attach_run_command, &command, options, &pid, NULL); -+ r = lxc_attach(c->name, c->config_path, suffix, lxc_attach_run_command, &command, options, &pid, NULL); - if (r < 0) { - ERROR("ups"); - return r; -@@ -4249,12 +4250,12 @@ static int do_lxcapi_attach_run_wait(struct lxc_container *c, lxc_attach_options - return lxc_wait_for_pid_status(pid); ++#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_ } --static int lxcapi_attach_run_wait(struct lxc_container *c, lxc_attach_options_t *options, const char *program, const char * const argv[]) -+static int lxcapi_attach_run_wait(struct lxc_container *c, const char *suffix, lxc_attach_options_t *options, const char *program, const char * const argv[]) - { - int ret; - - current_config = c ? c->lxc_conf : NULL; -- ret = do_lxcapi_attach_run_wait(c, options, program, argv); -+ ret = do_lxcapi_attach_run_wait(c, suffix, options, program, argv); - current_config = NULL; - - return ret; -@@ -5109,7 +5110,7 @@ static bool do_lxcapi_restore(struct lxc_container *c, char *directory, bool ver - - WRAP_API_2(bool, lxcapi_restore, char *, bool) - --static int lxcapi_attach_run_waitl(struct lxc_container *c, lxc_attach_options_t *options, const char *program, const char *arg, ...) -+static int lxcapi_attach_run_waitl(struct lxc_container *c, const char *suffix, lxc_attach_options_t *options, const char *program, const char *arg, ...) - { - va_list ap; - const char **argv; -@@ -5131,7 +5132,7 @@ static int lxcapi_attach_run_waitl(struct lxc_container *c, lxc_attach_options_t - } - argv[0] = arg; - -- ret = do_lxcapi_attach_run_wait(c, options, program, (const char * const *)argv); -+ ret = do_lxcapi_attach_run_wait(c, suffix, options, program, (const char * const *)argv); - free((void*)argv); - - out: -@@ -5230,6 +5231,51 @@ static bool do_lxcapi_clean_container_resource(struct lxc_container *c, pid_t pi - - WRAP_API_1(bool, lxcapi_clean_container_resource, pid_t) - + 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; @@ -896,75 +896,27 @@ index 9f9cbfc..7ef57f0 100644 +} + +WRAP_API_3(bool, lxcapi_set_exec_terminal_winch, const char *, unsigned int, unsigned int) -+ -+ - /* isulad get coantainer pids */ - static bool do_lxcapi_get_container_pids(struct lxc_container *c, pid_t **pids,size_t *pids_len) - { -@@ -5484,6 +5530,8 @@ static struct lxc_container *do_lxc_container_new(const char *name, const char * - c->clean_container_resource = lxcapi_clean_container_resource; + #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->get_container_pids = lxcapi_get_container_pids; + c->set_terminal_winch = lxcapi_set_terminal_winch; + c->set_exec_terminal_winch = lxcapi_set_exec_terminal_winch; - /* isulad add end */ + #endif return c; -diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index 608f815..976acf4 100644 ---- a/src/lxc/lxccontainer.h -+++ b/src/lxc/lxccontainer.h -@@ -674,7 +674,7 @@ struct lxc_container { - * - * \return \c 0 on success, \c -1 on error. - */ -- int (*attach)(struct lxc_container *c, lxc_attach_exec_t exec_function, -+ int (*attach)(struct lxc_container *c, const char *suffix, lxc_attach_exec_t exec_function, - void *exec_payload, lxc_attach_options_t *options, pid_t *attached_process); - - /*! -@@ -688,7 +688,7 @@ struct lxc_container { - * \return \c waitpid(2) status of exited process that ran \p - * program, or \c -1 on error. - */ -- int (*attach_run_wait)(struct lxc_container *c, lxc_attach_options_t *options, const char *program, const char * const argv[]); -+ int (*attach_run_wait)(struct lxc_container *c, const char *suffix, lxc_attach_options_t *options, const char *program, const char * const argv[]); - - /*! - * \brief Run a program inside a container and wait for it to exit (list variant). -@@ -701,7 +701,7 @@ struct lxc_container { - * \return \c waitpid(2) status of exited process that ran \p - * program, or \c -1 on error. - */ -- int (*attach_run_waitl)(struct lxc_container *c, lxc_attach_options_t *options, const char *program, const char *arg, ...); -+ int (*attach_run_waitl)(struct lxc_container *c, const char *suffix, lxc_attach_options_t *options, const char *program, const char *arg, ...); - - /*! - * \brief Create a container snapshot. -@@ -958,6 +958,15 @@ 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 terminal winch -+ * -+ * \param c Container. -+ * \return \c true on success, else \c false. -+ */ -+ 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); - }; - - /*! diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index bccc23d..535f374 100644 +index 1f46d49..39a6718 100644 --- a/src/lxc/terminal.c +++ b/src/lxc/terminal.c -@@ -69,6 +69,32 @@ __attribute__((constructor)) void lxc_terminal_init_global(void) - lxc_list_init(&lxc_ttys); +@@ -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; @@ -991,143 +943,21 @@ index bccc23d..535f374 100644 + return ret; +} + - void lxc_terminal_winsz(int srcfd, int dstfd) - { - int ret; + /* + * isulad: support mult-logfiles + * */ diff --git a/src/lxc/terminal.h b/src/lxc/terminal.h -index 9bb341f..4b5c70e 100644 +index b4160b3..f49142d 100644 --- a/src/lxc/terminal.h +++ b/src/lxc/terminal.h -@@ -313,5 +313,6 @@ extern int lxc_terminal_map_ids(struct lxc_conf *c, - /* isulad: if fd == -1, means delete all the fifos*/ - int lxc_terminal_delete_fifo(int fd, struct lxc_list *list); +@@ -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 */ -diff --git a/src/lxc/tools/arguments.h b/src/lxc/tools/arguments.h -index de02aeb..cb7f776 100644 ---- a/src/lxc/tools/arguments.h -+++ b/src/lxc/tools/arguments.h -@@ -71,6 +71,7 @@ struct lxc_arguments { - - /* for lxc-attach */ - int64_t attach_timeout; -+ const char *suffix; /* isulad add, suffix used for connect with parent of execed process*/ - - /* for lxc-console */ - unsigned int ttynum; -@@ -191,7 +192,7 @@ struct lxc_arguments { - #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 - /* isulad add end*/ - - extern int lxc_arguments_parse(struct lxc_arguments *args, int argc, -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index 0d40155..56684e7 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -82,6 +82,7 @@ static const struct option my_longopts[] = { - {"out-fifo", required_argument, 0, OPT_OUTPUT_FIFO}, - {"err-fifo", required_argument, 0, OPT_STDERR_FIFO}, - {"timeout", required_argument, 0, OPT_ATTACH_TIMEOUT}, -+ {"suffix", required_argument, 0, OPT_ATTACH_SUFFIX}, - LXC_COMMON_OPTIONS - }; - -@@ -287,6 +288,9 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - } - args->attach_timeout = (unsigned int)atoll(arg); - break; -+ case OPT_ATTACH_SUFFIX: -+ args->suffix = arg; -+ break; - } - - return 0; -@@ -351,7 +355,7 @@ static int lxc_attach_create_log_file(const char *log_file) - } - - /*isulad: attach with terminal*/ --static int do_attach_foreground(struct lxc_container *c, lxc_attach_command_t *command, -+static int do_attach_foreground(struct lxc_container *c, const char *suffix, lxc_attach_command_t *command, - lxc_attach_options_t *attach_options, - char **errmsg) - { -@@ -361,9 +365,9 @@ static int do_attach_foreground(struct lxc_container *c, lxc_attach_command_t *c - int signal; - - if (command->program) -- ret = c->attach(c, lxc_attach_run_command, command, attach_options, &pid); -+ ret = c->attach(c, suffix, lxc_attach_run_command, command, attach_options, &pid); - else -- ret = c->attach(c, lxc_attach_run_shell, NULL, attach_options, &pid); -+ ret = c->attach(c, suffix, lxc_attach_run_shell, NULL, attach_options, &pid); - if (ret < 0) - goto out; - -@@ -399,7 +403,7 @@ static void close_msg_pipe(int *errpipe) - } - - /*isulad: attach without terminal in background */ --static int do_attach_background(struct lxc_container *c, lxc_attach_command_t *command, -+static int do_attach_background(struct lxc_container *c, const char *suffix, lxc_attach_command_t *command, - lxc_attach_options_t *attach_options, - char **errmsg) - { -@@ -458,9 +462,9 @@ static int do_attach_background(struct lxc_container *c, lxc_attach_command_t *c - setsid(); - - if (command->program) -- ret = c->attach(c, lxc_attach_run_command, command, attach_options, &pid); -+ ret = c->attach(c, suffix, lxc_attach_run_command, command, attach_options, &pid); - else -- ret = c->attach(c, lxc_attach_run_shell, NULL, attach_options, &pid); -+ ret = c->attach(c, suffix, 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); -@@ -580,9 +584,9 @@ int main(int argc, char *argv[]) - - /* isulad: add do attach background */ - if (attach_options.attach_flags & LXC_ATTACH_TERMINAL) -- wexit = do_attach_foreground(c, &command, &attach_options, &errmsg); -+ wexit = do_attach_foreground(c, my_args.suffix, &command, &attach_options, &errmsg); - else -- wexit = do_attach_background(c, &command, &attach_options, &errmsg); -+ wexit = do_attach_background(c, my_args.suffix, &command, &attach_options, &errmsg); - - if (errmsg) { - fprintf(stderr, "%s:%s:%s:%d starting container process caused \"%s\"", c->name, -diff --git a/src/lxc/tools/lxc_copy.c b/src/lxc/tools/lxc_copy.c -index 954f1dd..b4e2b8f 100644 ---- a/src/lxc/tools/lxc_copy.c -+++ b/src/lxc/tools/lxc_copy.c -@@ -467,7 +467,7 @@ static int do_clone_ephemeral(struct lxc_container *c, - goto destroy_and_put; - - if (arg->daemonize && arg->argc) { -- ret = clone->attach_run_wait(clone, &attach_options, arg->argv[0], (const char *const *)arg->argv); -+ ret = clone->attach_run_wait(clone, NULL, &attach_options, arg->argv[0], (const char *const *)arg->argv); - if (ret < 0) - goto destroy_and_put; - clone->shutdown(clone, -1); -diff --git a/src/lxc/tools/lxc_ls.c b/src/lxc/tools/lxc_ls.c -index e261c7b..9fd1bf3 100644 ---- a/src/lxc/tools/lxc_ls.c -+++ b/src/lxc/tools/lxc_ls.c -@@ -544,7 +544,7 @@ static int ls_get(struct ls **m, size_t *size, const struct lxc_arguments *args, - - /* fork(): Attach to the namespace of the container and - * run ls_get() in it which is called in ls_get_wrapper(). */ -- check = c->attach(c, ls_get_wrapper, &wargs, &aopt, &out); -+ check = c->attach(c, NULL, ls_get_wrapper, &wargs, &aopt, &out); - /* close the socket */ - close(wargs.pipefd[1]); - -- 1.8.3.1 diff --git a/0020-confile-decode-escape-charactors-in-config.patch b/0020-confile-decode-escape-charactors-in-config.patch new file mode 100644 index 0000000..e0c786e --- /dev/null +++ b/0020-confile-decode-escape-charactors-in-config.patch @@ -0,0 +1,104 @@ +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/0020-fix-log-error-when-symlink-subcgroup.patch b/0020-fix-log-error-when-symlink-subcgroup.patch deleted file mode 100644 index 86350fe..0000000 --- a/0020-fix-log-error-when-symlink-subcgroup.patch +++ /dev/null @@ -1,44 +0,0 @@ -From a4a3b0c8f6a33676c62729ab7fc1e7d6f54536b8 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Mon, 14 Jan 2019 15:33:12 +0800 -Subject: [PATCH 020/140] fix log error when symlink subcgroup - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 705985f..7f2a200 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1736,21 +1736,21 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - char **mc; - for (mc = merged; *mc; mc++) { - char *token; -- char *merge = must_copy_string(*mc); -- lxc_iterate_parts(token, merge, ",") { -+ 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, merge); -- free(merge); -+ SYSERROR("Failed to create link %s for target %s", link, *mc); -+ free(copy); - free(link); - goto on_error; - } - free(link); - } -- free(merge); -+ free(copy); - } - } - --- -1.8.3.1 - diff --git a/0070-lxc-signal-all-process-for-shared-container-when-con.patch b/0021-cgroup-add-retry-for-destory-cgroups.patch similarity index 33% rename from 0070-lxc-signal-all-process-for-shared-container-when-con.patch rename to 0021-cgroup-add-retry-for-destory-cgroups.patch index 89aa437..0302337 100644 --- a/0070-lxc-signal-all-process-for-shared-container-when-con.patch +++ b/0021-cgroup-add-retry-for-destory-cgroups.patch @@ -1,37 +1,171 @@ -From 38b34aa2e20484616c40dba507f1c7a36afb56c2 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Thu, 21 Mar 2019 17:21:44 +0800 -Subject: [PATCH 070/140] lxc: signal all process for shared container when - container init exited +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: tanyifeng Signed-off-by: LiFeng --- - src/lxc/cgroups/cgfsng.c | 2 +- - src/lxc/start.c | 332 +++++++++++++++++++++++++---------------------- - 2 files changed, 175 insertions(+), 159 deletions(-) + 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 ab7ca35..5ceb06b 100644 +index 881dd39..00270ab 100644 --- a/src/lxc/cgroups/cgfsng.c +++ b/src/lxc/cgroups/cgfsng.c -@@ -1056,7 +1056,7 @@ static int cgroup_rmdir(struct hierarchy **hierarchies, +@@ -1000,6 +1000,106 @@ static int cgroup_tree_remove_wrapper(void *data) + return cgroup_tree_remove(arg->hierarchies, arg->container_cgroup); + } - ret = recursive_destroy(h->container_full_path); - if (ret < 0) { -- SYSERROR("Failed to destroy \"%s\"", h->container_full_path); -+ SYSWARN("Failed to destroy \"%s\"", h->container_full_path); - return -1; - } ++#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 1c9eb0a..b14e46f 100644 +index 800f884..0942c31 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c -@@ -941,6 +941,162 @@ out_close_maincmd_fd: +@@ -879,6 +879,170 @@ out_restore_sigmask: return -1; } ++#ifdef HAVE_ISULAD +void trim_line(char *s) +{ + size_t len; @@ -46,6 +180,7 @@ index 1c9eb0a..b14e46f 100644 + FILE *f; + char *line = NULL; + size_t sz = 0; ++ pid_t *tmp_pids = NULL; + + f = fopen_cloexec(path, "r"); + if (!f) @@ -55,7 +190,16 @@ index 1c9eb0a..b14e46f 100644 + pid_t pid; + trim_line(line); + pid = (pid_t)atoll(line); -+ *pids = realloc(*pids, sizeof(pid_t) * (*len + 1)); ++ 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)++; + } @@ -67,13 +211,13 @@ index 1c9eb0a..b14e46f 100644 + +static int _recursive_read_cgroup_procs(const char *dirpath, pid_t **pids, size_t *len) +{ -+ struct dirent *direntp; -+ DIR *dir; ++ struct dirent *direntp = NULL; ++ DIR *dir = NULL; + int ret, failed = 0; + char pathname[PATH_MAX]; + + dir = opendir(dirpath); -+ if (!dir && errno != ENOENT) { ++ if (dir == NULL) { + WARN("Failed to open \"%s\"", dirpath); + return 0; + } @@ -83,7 +227,7 @@ index 1c9eb0a..b14e46f 100644 + int rc; + + if (!strcmp(direntp->d_name, ".") || -+ !strcmp(direntp->d_name, "..")) ++ !strcmp(direntp->d_name, "..")) + continue; + + rc = snprintf(pathname, PATH_MAX, "%s/%s", dirpath, direntp->d_name); @@ -123,18 +267,14 @@ index 1c9eb0a..b14e46f 100644 + +int get_all_pids(struct cgroup_ops *cg_ops, pid_t **pids, size_t *len) +{ -+ char *devices_path = NULL; -+ int ret; ++ const char *devices_path = NULL; + -+ devices_path = must_make_path("/sys/fs/cgroup", "devices", cg_ops->container_cgroup, NULL); ++ devices_path = cg_ops->get_cgroup_full_path(cg_ops, "devices"); + if (!file_exists(devices_path)) { -+ free(devices_path); + return 0; + } + -+ ret = _recursive_read_cgroup_procs(devices_path, pids, len); -+ free(devices_path); -+ return ret; ++ return _recursive_read_cgroup_procs(devices_path, pids, len); +} + +static int set_cgroup_freezer(struct cgroup_ops *cg_ops, const char *value) @@ -142,7 +282,7 @@ index 1c9eb0a..b14e46f 100644 + char *fullpath; + int ret; + -+ fullpath = must_make_path("/sys/fs/cgroup", "freezer", cg_ops->container_cgroup, "freezer.state", NULL); ++ 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; @@ -187,214 +327,61 @@ index 1c9eb0a..b14e46f 100644 + + free(pids); +} ++#endif + - void lxc_fini(const char *name, struct lxc_handler *handler) + void lxc_end(struct lxc_handler *handler) { - int i, ret; -@@ -949,6 +1105,8 @@ void lxc_fini(const char *name, struct lxc_handler *handler) - char *namespaces[LXC_NS_MAX + 1]; - size_t namespace_count = 0; - struct cgroup_ops *cgroup_ops = handler->cgroup_ops; -+ int retry_count = 0; -+ int max_retry = 10; + int ret; +@@ -952,11 +1116,37 @@ void lxc_end(struct lxc_handler *handler) - /* The STOPPING state is there for future cleanup code which can take - * awhile. -@@ -1013,7 +1171,21 @@ void lxc_fini(const char *name, struct lxc_handler *handler) - while (namespace_count--) - free(namespaces[namespace_count]); + lsm_process_cleanup(handler->conf, handler->lxcpath); -- cgroup_ops->destroy(cgroup_ops, handler); -+ // if we shared pid namespace with others, should kill all processes within container cgroup -+ if (handler->conf->ns_share[LXC_NS_PID] != NULL) { -+ TRACE("Trying to kill all subprocess"); -+ signal_all_processes(handler); -+ TRACE("Finished kill all subprocess"); ++#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->destroy(cgroup_ops, handler)) { -+ if (retry_count < max_retry) { -+ usleep(100 * 1000); /* 100 millisecond */ -+ retry_count++; -+ goto 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. -@@ -2494,162 +2666,6 @@ static void clean_resource_set_env(struct lxc_handler *handler) - /* End of environment variable setup for hooks. */ - } - --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; -- -- 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); -- *pids = realloc(*pids, sizeof(pid_t) * (*len + 1)); -- (*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; -- DIR *dir; -- int ret, failed = 0; -- char pathname[PATH_MAX]; -- -- dir = opendir(dirpath); -- if (!dir && errno != ENOENT) { -- 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) --{ -- char *devices_path = NULL; -- int ret; -- -- devices_path = must_make_path("/sys/fs/cgroup", "devices", cg_ops->container_cgroup, NULL); -- if (!file_exists(devices_path)) { -- free(devices_path); -- return 0; -- } -- -- ret = _recursive_read_cgroup_procs(devices_path, pids, len); -- free(devices_path); -- return ret; --} -- --static int set_cgroup_freezer(struct cgroup_ops *cg_ops, const char *value) --{ -- char *fullpath; -- int ret; -- -- fullpath = must_make_path("/sys/fs/cgroup", "freezer", cg_ops->container_cgroup, "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); --} -- - /*isulad: do_lxcapi_clean_resource */ - int do_lxcapi_clean_resource(char *name, char *lxcpath, struct lxc_conf *conf, pid_t pid) - { -@@ -2687,7 +2703,7 @@ retry: - retry_count++; - goto retry; - } -- ERROR("Failed to destroy cgroup for container \"%s\".", handler->name); -+ SYSERROR("Failed to destroy cgroup path for container: \"%s\"", handler->name); - ret = -1; - } + * 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/0021-lxc-attch-add-error-message.patch b/0021-lxc-attch-add-error-message.patch deleted file mode 100644 index 7c0b131..0000000 --- a/0021-lxc-attch-add-error-message.patch +++ /dev/null @@ -1,374 +0,0 @@ -From c26c254376f73d9b43dd1747746a2bc265a85bb3 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 14 Jan 2019 04:29:40 -0500 -Subject: [PATCH 021/140] lxc-attch: add error message - -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 49 +++++++++++++++++++++++++++++++++++++++++----- - src/lxc/attach.h | 4 ++-- - src/lxc/attach_options.h | 6 +++--- - src/lxc/conf.c | 27 +++++++++++++++++++++---- - src/lxc/conf.h | 3 +++ - src/lxc/lxccontainer.c | 4 ++-- - src/lxc/tools/lxc_attach.c | 8 ++++---- - src/lxc/tools/lxc_ls.c | 4 ++-- - src/lxc/utils.c | 21 ++++++++++++++++++++ - src/lxc/utils.h | 1 + - 10 files changed, 105 insertions(+), 22 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 1886bde..570b9d0 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -757,10 +757,15 @@ static int attach_child_main(struct attach_clone_payload *payload) - gid_t ns_root_gid = 0; - lxc_attach_options_t* options = payload->options; - struct lxc_proc_context_info* init_ctx = payload->init_ctx; -+ int msg_fd = -1; - bool needs_lsm = (options->namespaces & CLONE_NEWNS) && - (options->attach_flags & LXC_ATTACH_LSM) && - init_ctx->lsm_label; - -+ /*isulad: record errpipe fd*/ -+ msg_fd = init_ctx->container->lxc_conf->errpipe[1]; -+ init_ctx->container->lxc_conf->errpipe[1] = -1; -+ - /* 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 -@@ -980,7 +985,7 @@ static int attach_child_main(struct attach_clone_payload *payload) - goto on_error; - - /* We're done, so we can now do whatever the user intended us to do. */ -- _exit(payload->exec_function(payload->exec_payload)); -+ _exit(payload->exec_function(payload->exec_payload, msg_fd)); - - on_error: - lxc_put_attach_clone_payload(payload); -@@ -1085,7 +1090,7 @@ static inline void lxc_attach_terminal_close_log(struct lxc_terminal *terminal) - - int lxc_attach(const char *name, const char *lxcpath, - lxc_attach_exec_t exec_function, void *exec_payload, -- lxc_attach_options_t *options, pid_t *attached_process) -+ lxc_attach_options_t *options, pid_t *attached_process, char **err_msg) - { - int i, ret, status; - int ipc_sockets[2]; -@@ -1268,6 +1273,15 @@ int lxc_attach(const char *name, const char *lxcpath, - return -1; - } - -+ -+ /* isulad: pipdfd for get error message of child or grandchild process. */ -+ if (pipe2(conf->errpipe, O_CLOEXEC) != 0) { -+ SYSERROR("Failed to init errpipe"); -+ free(cwd); -+ lxc_proc_put_context_info(init_ctx); -+ return -1; -+ } -+ - /* 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. -@@ -1291,6 +1305,11 @@ int lxc_attach(const char *name, const char *lxcpath, - /* close unneeded file descriptors */ - close(ipc_sockets[1]); - free(cwd); -+ -+ /* isulad: close errpipe */ -+ close(conf->errpipe[1]); -+ conf->errpipe[1] = -1; -+ - lxc_proc_close_ns_fd(init_ctx); - if (options->attach_flags & LXC_ATTACH_TERMINAL) - lxc_attach_terminal_close_slave(&terminal); -@@ -1399,6 +1418,19 @@ int lxc_attach(const char *name, const char *lxcpath, - - *attached_process = attached_pid; - -+ /* 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 = strdup(errbuf); -+ if (!(*err_msg)) -+ ERROR("Out of memory"); -+ goto close_mainloop; -+ } -+ - /* Now shut down communication with child, we're done. */ - shutdown(ipc_sockets[0], SHUT_RDWR); - close(ipc_sockets[0]); -@@ -1439,7 +1471,11 @@ int lxc_attach(const char *name, const char *lxcpath, - - /* close unneeded file descriptors */ - close(ipc_sockets[0]); -- ipc_sockets[0] = -EBADF; -+ ipc_sockets[0] = -EBADF;\ -+ -+ /* isulad: close errpipe */ -+ close(conf->errpipe[0]); -+ conf->errpipe[0] = -1; - - if (options->attach_flags & LXC_ATTACH_TERMINAL) { - lxc_attach_terminal_close_master(&terminal); -@@ -1539,7 +1575,7 @@ int lxc_attach(const char *name, const char *lxcpath, - _exit(0); - } - --int lxc_attach_run_command(void *payload) -+int lxc_attach_run_command(void *payload, int msg_fd) - { - int ret = -1; - lxc_attach_command_t *cmd = payload; -@@ -1556,11 +1592,14 @@ int lxc_attach_run_command(void *payload) - } - } - -+ /* isulad: write errorm messages */ -+ lxc_write_error_message(msg_fd, "exec: \"%s\": %s", cmd->program, strerror(errno)); -+ - SYSERROR("Failed to exec \"%s\"", cmd->program); - return ret; - } - --int lxc_attach_run_shell(void* payload) -+int lxc_attach_run_shell(void* payload, int msg_fd) - { - uid_t uid; - struct passwd pwent; -diff --git a/src/lxc/attach.h b/src/lxc/attach.h -index 4bf9578..e62b98b 100644 ---- a/src/lxc/attach.h -+++ b/src/lxc/attach.h -@@ -42,7 +42,7 @@ struct lxc_proc_context_info { - }; - - extern int lxc_attach(const char *name, const char *lxcpath, -- lxc_attach_exec_t exec_function, void *exec_payload, -- lxc_attach_options_t *options, pid_t *attached_process); -+ lxc_attach_exec_t exec_function, void *exec_payload, -+ lxc_attach_options_t *options, pid_t *attached_process, char **err_msg); - - #endif /* __LXC_ATTACH_H */ -diff --git a/src/lxc/attach_options.h b/src/lxc/attach_options.h -index 081618c..7b0a8cb 100644 ---- a/src/lxc/attach_options.h -+++ b/src/lxc/attach_options.h -@@ -71,7 +71,7 @@ enum { - * - * \return Function should return \c 0 on success, and any other value to denote failure. - */ --typedef int (*lxc_attach_exec_t)(void* payload); -+typedef int (*lxc_attach_exec_t)(void* payload, int msg_fd); - - /*! - * LXC attach options for \ref lxc_container \c attach(). -@@ -173,7 +173,7 @@ typedef struct lxc_attach_command_t { - * - * \return \c -1 on error, exit code of lxc_attach_command_t program on success. - */ --extern int lxc_attach_run_command(void* payload); -+extern int lxc_attach_run_command(void* payload, int msg_fd); - - /*! - * \brief Run a shell command in the container. -@@ -182,7 +182,7 @@ extern int lxc_attach_run_command(void* payload); - * - * \return Exit code of shell. - */ --extern int lxc_attach_run_shell(void* payload); -+extern int lxc_attach_run_shell(void* payload, int msg_fd); - - #ifdef __cplusplus - } -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 537f956..8d8230f 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -2803,10 +2803,6 @@ struct lxc_conf *lxc_conf_init(void) - new->console.slave = -1; - new->console.name[0] = '\0'; - memset(&new->console.ringbuf, 0, sizeof(struct lxc_ringbuf)); -- /* isulad init console fifos */ -- new->console.init_fifo[0] = NULL; -- new->console.init_fifo[1] = NULL; -- lxc_list_init(&new->console.fifos); - new->maincmd_fd = -1; - new->nbd_idx = -1; - new->rootfs.mount = strdup(default_rootfs_mount); -@@ -2851,6 +2847,14 @@ struct lxc_conf *lxc_conf_init(void) - lxc_list_init(&new->rootfs.maskedpaths); - lxc_list_init(&new->rootfs.ropaths); - new->exit_fd = -1; -+ /* isulad init console fifos */ -+ new->console.init_fifo[0] = NULL; -+ new->console.init_fifo[1] = NULL; -+ lxc_list_init(&new->console.fifos); -+ -+ new->errmsg = NULL; -+ new->errpipe[0] = -1; -+ new->errpipe[1] = -1; - /* isulad add end */ - - return new; -@@ -4280,6 +4284,19 @@ 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; -+ } -+} -+ - void lxc_conf_free(struct lxc_conf *conf) - { - if (!conf) -@@ -4333,6 +4350,8 @@ void lxc_conf_free(struct lxc_conf *conf) - free(conf->container_info_file); - if (conf->exit_fd != -1) - close(conf->exit_fd); -+ free(conf->errmsg); -+ lxc_close_error_pipe(conf->errpipe); - /* isulad add end */ - free(conf); - } -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 7927812..db474e1 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -413,6 +413,9 @@ struct lxc_conf { - 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. - /* isulad add end */ - }; - -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 8029f33..31f4819 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -4063,7 +4063,7 @@ static int lxcapi_attach(struct lxc_container *c, lxc_attach_exec_t exec_functio - - current_config = c->lxc_conf; - -- ret = lxc_attach(c->name, c->config_path, exec_function, exec_payload, options, attached_process); -+ ret = lxc_attach(c->name, c->config_path, exec_function, exec_payload, options, attached_process, &c->lxc_conf->errmsg); - current_config = NULL; - return ret; - } -@@ -4080,7 +4080,7 @@ static int do_lxcapi_attach_run_wait(struct lxc_container *c, lxc_attach_options - command.program = (char*)program; - command.argv = (char**)argv; - -- r = lxc_attach(c->name, c->config_path, lxc_attach_run_command, &command, options, &pid); -+ r = lxc_attach(c->name, c->config_path, lxc_attach_run_command, &command, options, &pid, NULL); - if (r < 0) { - ERROR("ups"); - return r; -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index 6d0ffe5..a590fd1 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -295,8 +295,8 @@ static int do_attach_foreground(struct lxc_container *c, lxc_attach_command_t *c - wexit = ExitSignalOffset + signal; - } - out: -- //if (c->lxc_conf->errmsg) -- // *errmsg = strdup(c->lxc_conf->errmsg); -+ if (c->lxc_conf->errmsg) -+ *errmsg = strdup(c->lxc_conf->errmsg); - return wexit; - } - -@@ -376,8 +376,8 @@ static int do_attach_background(struct lxc_container *c, lxc_attach_command_t *c - 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); -+ if (c->lxc_conf->errmsg) -+ lxc_write_error_message(msgpipe[1], "%s", c->lxc_conf->errmsg); - close(msgpipe[1]); - msgpipe[1] = -1; - ret = -1; -diff --git a/src/lxc/tools/lxc_ls.c b/src/lxc/tools/lxc_ls.c -index cb3eb1e..e261c7b 100644 ---- a/src/lxc/tools/lxc_ls.c -+++ b/src/lxc/tools/lxc_ls.c -@@ -122,7 +122,7 @@ struct wrapargs { - /* - * Takes struct wrapargs as argument. - */ --static int ls_get_wrapper(void *wrap); -+static int ls_get_wrapper(void *wrap, int msgfd); - - /* - * To calculate swap usage we should not simply check memory.usage_in_bytes and -@@ -1023,7 +1023,7 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - return 0; - } - --static int ls_get_wrapper(void *wrap) -+static int ls_get_wrapper(void *wrap, int msgfd) - { - int ret = -1; - size_t len = 0; -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 74e74a1..8ec9f46 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -1971,3 +1971,24 @@ out: - return startat; - } - -+/* 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) -+ SYSERROR("Failed to call vsnprintf"); -+ sret = write(errfd, errbuf, strlen(errbuf)); -+ if (sret < 0) -+ SYSERROR("Write errbuf failed"); -+} -+ -diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 364bf67..3d56fd9 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -314,5 +314,6 @@ extern int lxc_setup_env_home(uid_t uid); - - extern int fd_nonblock(int fd); - extern int unsigned long long lxc_get_process_startat(pid_t pid); -+extern void lxc_write_error_message(int errfd, const char *format, ...); - - #endif /* __LXC_UTILS_H */ --- -1.8.3.1 - diff --git a/0022-support-terminal-log.patch b/0022-support-terminal-log.patch new file mode 100644 index 0000000..4935f67 --- /dev/null +++ b/0022-support-terminal-log.patch @@ -0,0 +1,313 @@ +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/0022-support-rootfs-mount-propagation.patch b/0023-Supporting-rootfs-mount-propagation.patch similarity index 30% rename from 0022-support-rootfs-mount-propagation.patch rename to 0023-Supporting-rootfs-mount-propagation.patch index bcee583..d0477e7 100644 --- a/0022-support-rootfs-mount-propagation.patch +++ b/0023-Supporting-rootfs-mount-propagation.patch @@ -1,26 +1,36 @@ -From 26046eb2a18d2a7668dc213c86806efeca7d87a8 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Mon, 14 Jan 2019 17:02:02 +0800 -Subject: [PATCH 022/140] support rootfs mount propagation +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: LiFeng +Signed-off-by: wujing --- - src/lxc/conf.c | 230 ++++++++++++++++++++++++++-------------- - src/lxc/conf.h | 2 +- - src/lxc/confile.c | 8 +- - src/lxc/criu.c | 4 +- - src/lxc/storage/btrfs.c | 4 +- - src/lxc/storage/dir.c | 9 +- - src/lxc/storage/overlay.c | 4 +- - src/lxc/storage/storage_utils.c | 4 +- - src/lxc/storage/zfs.c | 4 +- - 9 files changed, 165 insertions(+), 104 deletions(-) + 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 8d8230f..55d1e45 100644 +index 4088363..e0a6f98 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c -@@ -1296,11 +1296,102 @@ static int lxc_fill_autodev(const struct lxc_rootfs *rootfs) +@@ -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; } @@ -50,6 +60,7 @@ index 8d8230f..55d1e45 100644 + return p; +} + ++#ifdef HAVE_ISULAD +static int rootfs_parent_mount_private(char *rootfs) +{ + /* walk /proc/self/mountinfo and change parent of rootfs to private */ @@ -65,13 +76,13 @@ index 8d8230f..55d1e45 100644 + } + + while (getline(&line, &len, f) != -1) { -+ char *target, *opts, *tmptarget; ++ char *target = NULL; ++ char *opts = NULL; ++ char *tmptarget = NULL; + target = get_field(line, 4); + if (!target) + continue; -+ tmptarget = strdup(target); -+ if (!tmptarget) -+ continue; ++ tmptarget = safe_strdup(target); + null_endofword(tmptarget); + if (!strstr(rootfs, tmptarget)) { + free(tmptarget); @@ -89,9 +100,7 @@ index 8d8230f..55d1e45 100644 + continue; + null_endofword(opts); + free(options); -+ options = strdup(opts); -+ if (!options) -+ continue; ++ options = safe_strdup(opts); + } + + if (!parent || !options) { @@ -112,23 +121,29 @@ index 8d8230f..55d1e45 100644 + 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; -+ unsigned long flags, mntflags, pflags; -+ char *mntdata; ++#ifdef HAVE_ISULAD ++ unsigned long flags, mntflags, pflags; ++ char *mntdata = NULL; ++#endif ++ if (!rootfs->path) { ret = mount("", "/", NULL, MS_SLAVE | MS_REC, 0); -@@ -1319,6 +1410,44 @@ static int lxc_mount_rootfs(struct lxc_conf *conf) - return -1; - } - -+ // isulad-start: support mount propagations of rootfs -+ //Get rootfs mnt propagation options, such as slave or shared + 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; @@ -145,8 +160,7 @@ index 8d8230f..55d1e45 100644 + */ + ret = mount("", "/", NULL, flags, NULL); + if (ret < 0) { -+ SYSERROR("Failed to make / to propagation flags %lu.", flags); -+ return -1; ++ 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 @@ -155,41 +169,41 @@ index 8d8230f..55d1e45 100644 + */ + ret = rootfs_parent_mount_private(conf->rootfs.mount); + if (ret != 0) { -+ ERROR("Failed to make parent of rootfs %s to private.", conf->rootfs.mount); -+ return -1; ++ 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; -+ }// isulad-end: support mount propagations of rootfs ++ } ++#endif + bdev = storage_init(conf); - if (!bdev) { - ERROR("Failed to mount rootfs \"%s\" onto \"%s\" with options \"%s\"", -@@ -1960,7 +2089,7 @@ static int lxc_setup_console(const struct lxc_rootfs *rootfs, + 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); } - --static void parse_mntopt(char *opt, unsigned long *flags, char **data, size_t size) ++#ifdef HAVE_ISULAD +static void parse_mntopt(char *opt, unsigned long *mflags, unsigned long *pflags, char **data, size_t size) - { - struct mount_opt *mo; - -@@ -1970,26 +2099,40 @@ static void parse_mntopt(char *opt, unsigned long *flags, char **data, size_t si - for (mo = &mount_opt[0]; mo->name != NULL; mo++) { - if (strncmp(opt, mo->name, strlen(mo->name)) == 0) { - if (mo->clear) -- *flags &= ~mo->flag; ++{ ++ 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 -- *flags |= mo->flag; ++ else + *mflags |= mo->flag; - return; - } - } - ++ 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) @@ -202,77 +216,72 @@ index 8d8230f..55d1e45 100644 + + return; + } + ++ if (strlen(*data)) ++ (void)strlcat(*data, ",", size); + - 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 - (void)strlcat(*data, opt, size); + return 0; } - --int parse_mntopts(const char *mntopts, unsigned long *mntflags, char **mntdata) ++#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; ++{ ++ char *data, *p, *s; ++ size_t size; ++ ++ *mntdata = NULL; ++ *mntflags = 0L; + *pflags = 0L; ++ ++ if (!mntopts) ++ return 0; ++ ++ s = safe_strdup(mntopts); - if (!mntopts) - return 0; -@@ -2007,7 +2150,7 @@ int parse_mntopts(const char *mntopts, unsigned long *mntflags, char **mntdata) - *data = 0; ++ 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) - lxc_iterate_parts(p, s, ",") -- parse_mntopt(p, mntflags, &data, size); -+ parse_mntopt(p, mntflags, pflags, &data, size); + return 0; + } ++#endif - if (*data) - *mntdata = data; -@@ -2018,71 +2161,6 @@ int parse_mntopts(const char *mntopts, unsigned long *mntflags, char **mntdata) + 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 parse_propagationopt(char *opt, unsigned long *flags) --{ -- struct mount_opt *mo; -- -- /* 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) -- *flags &= ~mo->flag; -- else -- *flags |= mo->flag; -- -- return; -- } --} -- --int parse_propagationopts(const char *mntopts, unsigned long *pflags) --{ -- char *p, *s; -- -- if (!mntopts) -- return 0; -- -- s = strdup(mntopts); -- if (!s) { -- SYSERROR("Failed to allocate memory"); -- return -ENOMEM; -- } -- -- *pflags = 0L; -- lxc_iterate_parts(p, s, ",") -- parse_propagationopt(p, pflags); -- free(s); -- -- return 0; --} -- -static void null_endofword(char *word) -{ - while (*word && *word != ' ' && *word != '\t') @@ -302,206 +311,623 @@ index 8d8230f..55d1e45 100644 static int mount_entry(const char *fsname, const char *target, const char *fstype, unsigned long mountflags, unsigned long pflags, const char *data, bool optional, -@@ -2289,10 +2367,9 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - const char *lxc_path) - { +@@ -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; -- unsigned long mntflags; -+ unsigned long mntflags, pflags; - char *mntdata; bool dev, optional, relative; -- unsigned long pflags = 0; - char *rootfs_path = NULL; +- const char *dest = path; ++ const char *dest = path; ++ ++#ifdef HAVE_ISULAD ++ char *rpath = NULL; ++#endif optional = hasmntopt(mntent, "optional") != NULL; -@@ -2312,11 +2389,7 @@ static inline int mount_entry_on_generic(struct mntent *mntent, + 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); -- ret = parse_propagationopts(mntent->mnt_opts, &pflags); -- if (ret < 0) -- return -1; -- -- ret = parse_mntopts(mntent->mnt_opts, &mntflags, &mntdata); ++#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; + } -@@ -3544,7 +3617,8 @@ int lxc_setup_rootfs_prepare_root(struct lxc_conf *conf, const char *name, - return 0; +@@ -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"); } -- remount_all_slave(); -+ if (!conf->rootfs.options) ++#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) { + 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 db474e1..7393dbf 100644 +index 482fe0d..22c554d 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h -@@ -463,7 +463,7 @@ extern int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data, +@@ -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, +-extern int parse_mntopts(const char *mntopts, unsigned long *mntflags, - char **mntdata); -+ unsigned long *pflags, 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 e199965..db63b55 100644 +index 0fcebd4..9ba3c7c 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c -@@ -2065,16 +2065,10 @@ static int set_config_rootfs_options(const char *key, const char *value, - char *mdata = NULL, *opts = NULL; +@@ -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; -- ret = parse_mntopts(value, &mflags, &mdata); ++#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 = parse_propagationopts(value, &pflags); -- if (ret < 0) { -- free(mdata); -- return -EINVAL; -- } -- ret = set_config_string_item(&opts, value); if (ret < 0) { - free(mdata); diff --git a/src/lxc/criu.c b/src/lxc/criu.c -index 31c1940..bb97859 100644 +index 1a909bb..14a8aae 100644 --- a/src/lxc/criu.c +++ b/src/lxc/criu.c -@@ -389,9 +389,9 @@ static void exec_criu(struct cgroup_ops *cgroup_ops, struct lxc_conf *conf, - while (getmntent_r(mnts, &mntent, buf, sizeof(buf))) { - char *fmt, *key, *val, *mntdata; +@@ -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]; -- unsigned long flags; -+ unsigned long flags, pflags; -- if (parse_mntopts(mntent.mnt_opts, &flags, &mntdata) < 0) ++#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 bbfce61..a02c215 100644 +index 92a4a6d..069a9dd 100644 --- a/src/lxc/storage/btrfs.c +++ b/src/lxc/storage/btrfs.c -@@ -212,7 +212,7 @@ bool btrfs_detect(const char *path) - - int btrfs_mount(struct lxc_storage *bdev) - { -- unsigned long mntflags; -+ unsigned long mntflags, pflags; - char *mntdata; +@@ -197,16 +197,27 @@ int btrfs_mount(struct lxc_storage *bdev) const char *src; int ret; -@@ -223,7 +223,7 @@ int btrfs_mount(struct lxc_storage *bdev) + ++#ifdef HAVE_ISULAD ++ unsigned long pflags = 0; ++#endif ++ + if (strcmp(bdev->type, "btrfs")) + return -22; + if (!bdev->src || !bdev->dest) return -22; -- if (parse_mntopts(bdev->mntopts, &mntflags, &mntdata) < 0) { -+ if (parse_mntopts(bdev->mntopts, &mntflags, &pflags, &mntdata) < 0) { ++#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 79b6469..c7b5ee2 100644 +index b3dbbd0..1dc95f1 100644 --- a/src/lxc/storage/dir.c +++ b/src/lxc/storage/dir.c -@@ -170,20 +170,13 @@ int dir_mount(struct lxc_storage *bdev) - if (!bdev->src || !bdev->dest) - return -22; +@@ -124,14 +124,39 @@ bool dir_detect(const char *path) + return false; + } -- ret = parse_mntopts(bdev->mntopts, &mntflags, &mntdata); ++#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) { - ERROR("Failed to parse mount options \"%s\"", bdev->mntopts); - free(mntdata); - return -EINVAL; - } ++ 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) -- ret = parse_propagationopts(bdev->mntopts, &pflags); -- if (ret < 0) { -- ERROR("Failed to parse propagation options \"%s\"", bdev->mntopts); -- free(mntdata); -- return -EINVAL; -- } -- 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 01546b1..90408a3 100644 +index 770785c..75a81de 100644 --- a/src/lxc/storage/overlay.c +++ b/src/lxc/storage/overlay.c -@@ -495,7 +495,7 @@ int ovl_mount(struct lxc_storage *bdev) - char *options_work, *work, *lastslash; - int lastslashidx; +@@ -349,6 +349,9 @@ int ovl_mount(struct lxc_storage *bdev) + char *work, *lastslash; size_t len, len2; -- unsigned long mntflags; -+ unsigned long mntflags, pflags; - char *mntdata; int ret, ret2; ++#ifdef HAVE_ISULAD ++ unsigned long pflags = 0; ++#endif -@@ -575,7 +575,7 @@ int ovl_mount(struct lxc_storage *bdev) - memcpy(work + lastslashidx, "olwork", STRLITERALLEN("olwork")); - work[lastslashidx + STRLITERALLEN("olwork")] = '\0'; + 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] = '/'; -- ret = parse_mntopts(bdev->mntopts, &mntflags, &mntdata); ++#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 fa4e727..46e08a3 100644 +index 07eee22..6fec638 100644 --- a/src/lxc/storage/storage_utils.c +++ b/src/lxc/storage/storage_utils.c -@@ -396,7 +396,7 @@ int find_fstype_cb(char *buffer, void *data) - const char *options; - } *cbarg = data; - -- unsigned long mntflags; -+ unsigned long mntflags, pflags; - char *mntdata; - char *fstype; +@@ -340,6 +340,10 @@ int find_fstype_cb(char *buffer, void *data) + char mount_err[BUFSIZ] = {0}; + int ret; -@@ -411,7 +411,7 @@ int find_fstype_cb(char *buffer, void *data) ++#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 ba104da..752b0c5 100644 +index 4cc171f..025cf95 100644 --- a/src/lxc/storage/zfs.c +++ b/src/lxc/storage/zfs.c -@@ -184,7 +184,7 @@ int zfs_mount(struct lxc_storage *bdev) - size_t oldlen, newlen, totallen; - char *mntdata, *tmp; +@@ -167,13 +167,22 @@ int zfs_mount(struct lxc_storage *bdev) const char *src; -- unsigned long mntflags; -+ unsigned long mntflags, pflags; char cmd_output[PATH_MAX] = {0}; ++#ifdef HAVE_ISULAD ++ unsigned long pflags = 0; ++#endif ++ if (strcmp(bdev->type, "zfs")) -@@ -193,7 +193,7 @@ int zfs_mount(struct lxc_storage *bdev) + return -22; + if (!bdev->src || !bdev->dest) return -22; -- ret = parse_mntopts(bdev->mntopts, &mntflags, &mntdata); ++#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/0023-attach.c-change-uid-and-gid-from-lxc-container-confi.patch b/0023-attach.c-change-uid-and-gid-from-lxc-container-confi.patch deleted file mode 100644 index b2163de..0000000 --- a/0023-attach.c-change-uid-and-gid-from-lxc-container-confi.patch +++ /dev/null @@ -1,31 +0,0 @@ -From ecd40a856d039f7bc67ac076041a07cb369eaa77 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Mon, 14 Jan 2019 17:09:57 +0800 -Subject: [PATCH 023/140] attach.c: change uid and gid from lxc container - config - -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 570b9d0..e6e4b0d 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -1146,6 +1146,12 @@ int lxc_attach(const char *name, const char *lxcpath, - } - conf = init_ctx->container->lxc_conf; - -+ // 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; -+ - if (!fetch_seccomp(init_ctx->container, options)) - WARN("Failed to get seccomp policy"); - --- -1.8.3.1 - diff --git a/0024-isulad-support-symlink-in-mount-entry-and-not-permit.patch b/0024-isulad-support-symlink-in-mount-entry-and-not-permit.patch deleted file mode 100644 index a46a07d..0000000 --- a/0024-isulad-support-symlink-in-mount-entry-and-not-permit.patch +++ /dev/null @@ -1,821 +0,0 @@ -From cf669a5cfd241dc8ec9ce2571e73fc13d4266bce Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Mon, 14 Jan 2019 20:12:06 +0800 -Subject: [PATCH 024/140] isulad: support symlink in mount entry, and not - permit mount to /proc - -Signed-off-by: LiFeng ---- - src/lxc/Makefile.am | 2 + - src/lxc/conf.c | 108 ++++++++++- - src/lxc/path.c | 546 ++++++++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/path.h | 70 +++++++ - 4 files changed, 721 insertions(+), 5 deletions(-) - 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 08e2fab..f2928b7 100644 ---- a/src/lxc/Makefile.am -+++ b/src/lxc/Makefile.am -@@ -12,6 +12,7 @@ noinst_HEADERS = attach.h \ - confile_utils.h \ - criu.h \ - error.h \ -+ path.h \ - file_utils.h \ - ../include/netns_ifaddrs.h \ - initutils.h \ -@@ -95,6 +96,7 @@ liblxc_la_SOURCES = af_unix.c af_unix.h \ - commands_utils.c commands_utils.h \ - conf.c conf.h \ - confile.c confile.h \ -+ path.c path.h \ - confile_utils.c confile_utils.h \ - criu.c criu.h \ - error.c error.h \ -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 55d1e45..800573a 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -77,6 +77,7 @@ - #include "storage/overlay.h" - #include "syscall_wrappers.h" - #include "terminal.h" -+#include "path.h" - #include "utils.h" - - #ifdef MAJOR_IN_MKDEV -@@ -2309,6 +2310,79 @@ static void cull_mntent_opt(struct mntent *mntent) - } - } - -+/* 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, **invalid; -+ -+ for(valid = valid_destinations; *valid != NULL; valid++) { -+ char *fullpath, *relpath; -+ 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, *relpath; -+ 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; -+} -+ - static int mount_entry_create_dir_file(const struct mntent *mntent, - const char *path, - const struct lxc_rootfs *rootfs, -@@ -2370,7 +2444,8 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - unsigned long mntflags, pflags; - char *mntdata; - bool dev, optional, relative; -- char *rootfs_path = NULL; -+ char *rootfs_path = NULL, *rpath = NULL; -+ const char *dest = path; - - optional = hasmntopt(mntent, "optional") != NULL; - dev = hasmntopt(mntent, "dev") != NULL; -@@ -2379,9 +2454,29 @@ 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, -- lxc_path); -+ // 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 for '%s'", path); -+ return -1; -+ } -+ dest = rpath; -+ -+ ret = check_mount_destination(rootfs_path, dest); -+ if (ret) { -+ ERROR("Mount destination is invalid: '%s'", dest); -+ free(rpath); -+ return -1; -+ } -+ } -+ -+ ret = mount_entry_create_dir_file(mntent, dest, rootfs, lxc_name, lxc_path); - if (ret < 0) { -+ free(rpath); - if (optional) - return 0; - -@@ -2390,13 +2485,16 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - cull_mntent_opt(mntent); - - ret = parse_mntopts(mntent->mnt_opts, &mntflags, &pflags, &mntdata); -- if (ret < 0) -+ if (ret < 0) { -+ free(rpath); - return -1; -+ } - -- ret = mount_entry(mntent->mnt_fsname, path, mntent->mnt_type, mntflags, -+ ret = mount_entry(mntent->mnt_fsname, dest, mntent->mnt_type, mntflags, - pflags, mntdata, optional, dev, relative, rootfs_path); - - free(mntdata); -+ free(rpath); - return ret; - } - -diff --git a/src/lxc/path.c b/src/lxc/path.c -new file mode 100644 -index 0000000..e917dcb ---- /dev/null -+++ b/src/lxc/path.c -@@ -0,0 +1,546 @@ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "path.h" -+#include "log.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 = strdup(path); -+ if (!basec) { -+ ERROR("Out of memory"); -+ return false; -+ } -+ -+ bname = basename(basec); -+ 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; -+ -+ len = strlen(cleanedpath) + 3; -+ respath = malloc(len); -+ if (!respath) { -+ 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); -+ i = len - 1; -+ while (i >= 0 && path[i] != '/') -+ i--; -+ -+ *dir = malloc(i + 2); -+ if (!*dir) { -+ ERROR("Out of memory"); -+ return false; -+ } -+ memcpy(*dir, path, i + 1); -+ *(*dir + i + 1) = '\0'; -+ -+ *base = strdup(path + i + 1); -+ if (!*base) { -+ ERROR("Out of memory"); -+ free(*dir); -+ *dir = NULL; -+ return false; -+ } -+ -+ return true; -+} -+ -+/* -+ * 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 *resolved) -+{ -+ char *rpath, *dest; -+ const char *start, *end, *rpath_limit; -+ -+ if (path == NULL || path[0] == '\0') -+ return NULL; -+ -+ if (resolved == NULL) { -+ rpath = malloc(PATH_MAX); -+ if (rpath == NULL) { -+ ERROR("Out of memory"); -+ return NULL; -+ } -+ } else { -+ rpath = resolved; -+ } -+ rpath_limit = rpath + PATH_MAX; -+ -+ if (!IS_ABSOLUTE_FILE_NAME(path)) { -+ if (!getcwd(rpath, PATH_MAX)) { -+ ERROR("Failed to getcwd"); -+ rpath[0] = '\0'; -+ goto error; -+ } -+ dest = strchr(rpath, '\0'); -+ start = path; -+ } else { -+ dest = rpath; -+ *dest++ = '/'; -+ start = path; -+ } -+ -+ for (end = start; *start; start = end) { -+ /* Skip sequence of multiple path-separators. */ -+ while (ISSLASH(*start)) -+ ++start; -+ -+ /* Find end of path component. */ -+ for (end = start; *end && !ISSLASH(*end); ++end) -+ /* Nothing. */; -+ -+ if (end - start == 0) { -+ break; -+ } else if (end - start == 1 && start[0] == '.') { -+ /* nothing */; -+ } else if (end - start == 2 && start[0] == '.' && start[1] == '.') { -+ /* Back up to previous component, ignore if at root already. */ -+ if (dest > rpath + 1) -+ for (--dest; dest > rpath && !ISSLASH(dest[-1]); --dest) -+ continue; -+ } else { -+ size_t new_size; -+ -+ if (!ISSLASH(dest[-1])) -+ *dest++ = '/'; -+ -+ if (dest + (end - start) >= rpath_limit) { -+ long long dest_offset = dest - rpath; -+ char *new_rpath; -+ -+ if (resolved) { -+ printf("Path is to long"); -+ if (dest > rpath + 1) -+ dest--; -+ *dest = '\0'; -+ goto error; -+ } -+ -+ new_size = rpath_limit - rpath; -+ if (end - start + 1 > PATH_MAX) -+ new_size += end - start + 1; -+ else -+ new_size += PATH_MAX; -+ new_rpath = (char *) realloc(rpath, new_size); -+ if (new_rpath == NULL) { -+ ERROR("Out of memory"); -+ goto error; -+ } -+ rpath = new_rpath; -+ rpath_limit = rpath + new_size; -+ -+ dest = rpath + dest_offset; -+ } -+ -+ memcpy(dest, start, end - start); -+ dest += end - start; -+ *dest = '\0'; -+ } -+ } -+ if (dest > rpath + 1 && ISSLASH(dest[-1])) -+ --dest; -+ *dest = '\0'; -+ -+ return rpath; -+ -+error: -+ if (resolved == NULL) -+ free(rpath); -+ return NULL; -+} -+ -+// evalSymlinksInScope will evaluate symlinks in `path` within a scope `root` and return -+// a result guaranteed to be contained within the scope `root`, at the time of the call. -+// Symlinks in `root` are not evaluated and left as-is. -+// Errors encountered while attempting to evaluate symlinks in path will be returned. -+// Non-existing paths are valid and do not constitute an error. -+// `path` has to contain `root` as a prefix, or else an error will be returned. -+// Trying to break out from `root` does not constitute an error. -+// -+// Example: -+// If /foo/bar -> /outside, -+// FollowSymlinkInScope("/foo/bar", "/foo") == "/foo/outside" instead of "/oustide" -+char *eval_symlinks_in_scope(const char *fullpath, const char *rootpath) -+{ -+ char resroot[PATH_MAX] = {0}, *root = NULL; -+ char *rpath, *dest, *prefix, *extra_buf = NULL; -+ const char *start, *end, *rpath_limit; -+ int num_links = 0; -+ size_t prefix_len; -+ -+ if (!fullpath || !rootpath) -+ return NULL; -+ -+ root = cleanpath(rootpath, resroot); -+ if (!root) { -+ ERROR("Failed to get cleaned path"); -+ return NULL; -+ } -+ -+ if (!strcmp(fullpath, root)) -+ return strdup(fullpath); -+ -+ if (!strstr(fullpath, root)) { -+ ERROR("Path '%s' is not in '%s'", fullpath, root); -+ return NULL; -+ } -+ -+ rpath = malloc(PATH_MAX); -+ if (rpath == NULL) { -+ ERROR("Out of memory"); -+ goto error; -+ return NULL; -+ } -+ rpath_limit = rpath + PATH_MAX; -+ -+ prefix = root; -+ prefix_len = strlen(prefix); -+ if (!strcmp(prefix, "/")) -+ prefix_len = 0; -+ -+ dest = rpath; -+ if (prefix_len) { -+ memcpy(rpath, prefix, prefix_len); -+ dest += prefix_len; -+ } -+ *dest++ = '/'; -+ start = fullpath + prefix_len; -+ -+ for (end = start; *start; start = end) { -+ struct stat st; -+ int n; -+ -+ /* Skip sequence of multiple path-separators. */ -+ while (ISSLASH(*start)) -+ ++start; -+ -+ /* Find end of path component. */ -+ for (end = start; *end && !ISSLASH(*end); ++end) -+ /* Nothing. */; -+ -+ if (end - start == 0) { -+ break; -+ } else if (end - start == 1 && start[0] == '.') { -+ /* nothing */; -+ } else if (end - start == 2 && start[0] == '.' && start[1] == '.') { -+ /* Back up to previous component, ignore if at root already. */ -+ if (dest > rpath + prefix_len + 1) -+ for (--dest; dest > rpath && !ISSLASH(dest[-1]); --dest) -+ continue; -+ } else { -+ size_t new_size; -+ -+ if (!ISSLASH(dest[-1])) -+ *dest++ = '/'; -+ -+ if (dest + (end - start) >= rpath_limit) { -+ long long dest_offset = dest - rpath; -+ char *new_rpath; -+ -+ new_size = rpath_limit - rpath; -+ if (end - start + 1 > PATH_MAX) -+ new_size += end - start + 1; -+ else -+ new_size += PATH_MAX; -+ new_rpath = (char *) realloc(rpath, new_size); -+ if (new_rpath == NULL) { -+ ERROR("Out of memory"); -+ goto error; -+ } -+ rpath = new_rpath; -+ rpath_limit = rpath + new_size; -+ -+ dest = rpath + dest_offset; -+ } -+ -+ memcpy(dest, start, end - start); -+ dest += end - start; -+ *dest = '\0'; -+ -+ if (lstat(rpath, &st) < 0) { -+ // if rpath does not exist, accept it -+ continue; -+ } -+ -+ if (S_ISLNK(st.st_mode)) { -+ char *buf; -+ size_t len; -+ -+ if (++num_links > MAXSYMLINKS) { -+ ERROR("Too many links in '%s'", fullpath); -+ goto error; -+ } -+ -+ buf = malloc(PATH_MAX); -+ if (!buf) { -+ ERROR("Out of memory"); -+ goto error; -+ } -+ -+ n = readlink(rpath, buf, PATH_MAX - 1); -+ if (n < 0) { -+ free(buf); -+ goto error; -+ } -+ buf[n] = '\0'; -+ -+ if (!extra_buf) { -+ extra_buf = malloc(PATH_MAX); -+ if (!extra_buf) { -+ ERROR("Out of memory"); -+ free(buf); -+ goto error; -+ } -+ } -+ -+ len = strlen(end); -+ if ((long int)(n + len) >= PATH_MAX) { -+ free(buf); -+ ERROR("Path is too long"); -+ goto error; -+ } -+ -+ /* Careful here, end may be a pointer into extra_buf... */ -+ memmove(&extra_buf[n], end, len + 1); -+ fullpath = end = memcpy(extra_buf, buf, n); -+ -+ if (IS_ABSOLUTE_FILE_NAME(buf)) { -+ if (prefix_len) -+ memcpy(rpath, prefix, prefix_len); -+ dest = rpath + prefix_len; -+ *dest++ = '/'; /* It's an absolute symlink */ -+ } else { -+ /* Back up to previous component, ignore if at root -+ already: */ -+ if (dest > rpath + prefix_len + 1) -+ for (--dest; dest > rpath && !ISSLASH(dest[-1]); --dest) -+ continue; -+ } -+ } -+ } -+ } -+ if (dest > rpath + prefix_len + 1 && ISSLASH(dest[-1])) -+ --dest; -+ *dest = '\0'; -+ -+ if (extra_buf) -+ free(extra_buf); -+ -+ return rpath; -+ -+error: -+ if (extra_buf) -+ free(extra_buf); -+ 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); -+ if (!full) { -+ ERROR("Failed to get cleaned path"); -+ return NULL; -+ } -+ -+ root = cleanpath(rootpath, resroot); -+ 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); -+ 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); -+ if (!base) { -+ ERROR("Failed to get cleaned path"); -+ return NULL; -+ } -+ -+ targ = cleanpath(targpath, restarg); -+ if (!targ) { -+ ERROR("Failed to get cleaned path"); -+ return NULL; -+ } -+ -+ if (strcmp(base, targ) == 0) -+ return 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; -+ -+ 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 strdup(targ + t0); -+} -\ No newline at end of file -diff --git a/src/lxc/path.h b/src/lxc/path.h -new file mode 100644 -index 0000000..e3a04cc ---- /dev/null -+++ b/src/lxc/path.h -@@ -0,0 +1,70 @@ -+#ifndef __LCRD_PATH_H_ -+#define __LCRD_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 *resolved); -+ -+// evalSymlinksInScope will evaluate symlinks in `path` within a scope `root` and return -+// a result guaranteed to be contained within the scope `root`, at the time of the call. -+// Symlinks in `root` are not evaluated and left as-is. -+// Errors encountered while attempting to evaluate symlinks in path will be returned. -+// Non-existing paths are valid and do not constitute an error. -+// `path` has to contain `root` as a prefix, or else an error will be returned. -+// Trying to break out from `root` does not constitute an error. -+// -+// Example: -+// If /foo/bar -> /outside, -+// FollowSymlinkInScope("/foo/bar", "/foo") == "/foo/outside" instead of "/oustide" -+char *eval_symlinks_in_scope(const char *fullpath, const char *rootpath); -+ -+// 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 --- -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 new file mode 100644 index 0000000..64e62af --- /dev/null +++ b/0024-start-do-not-check-ppid-when-set-death-signal.patch @@ -0,0 +1,40 @@ +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 index b2fe665..a2acd24 100644 --- a/0025-support-oci-hooks.patch +++ b/0025-support-oci-hooks.patch @@ -1,130 +1,57 @@ -From 38eef3f6000e2c4219007cf0f3638ef101fc67fb Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Mon, 14 Jan 2019 17:47:17 +0800 -Subject: [PATCH 025/140] support oci hooks +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 -support oci hooks - -Signed-off-by: LiFeng +Signed-off-by: haozi007 --- - configure.ac | 3 + - src/lxc/Makefile.am | 13 +- - src/lxc/conf.c | 528 ++++++++++++++++- - src/lxc/conf.h | 9 + - src/lxc/json/defs.c | 198 +++++++ - src/lxc/json/defs.h | 37 ++ - src/lxc/json/json_common.c | 1196 ++++++++++++++++++++++++++++++++++++++ - src/lxc/json/json_common.h | 185 ++++++ - src/lxc/json/oci_runtime_hooks.c | 53 ++ - src/lxc/json/oci_runtime_hooks.h | 15 + - src/lxc/json/oci_runtime_spec.c | 196 +++++++ - src/lxc/json/oci_runtime_spec.h | 37 ++ - src/lxc/json/read-file.c | 94 +++ - src/lxc/json/read-file.h | 11 + - src/lxc/lxccontainer.c | 66 +++ - src/lxc/lxccontainer.h | 7 + - src/lxc/start.c | 17 + - src/lxc/utils.c | 66 ++- - src/lxc/utils.h | 2 + - 19 files changed, 2716 insertions(+), 17 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/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 + 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/configure.ac b/configure.ac -index 950c8dd..4da52a2 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -120,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], -diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am -index f2928b7..5678b8d 100644 ---- a/src/lxc/Makefile.am -+++ b/src/lxc/Makefile.am -@@ -43,6 +43,11 @@ noinst_HEADERS = attach.h \ - ../tests/lxctest.h \ - tools/arguments.h \ - storage/storage_utils.h \ -+ json/defs.h \ -+ json/json_common.h \ -+ json/oci_runtime_hooks.h \ -+ json/oci_runtime_spec.h \ -+ json/read-file.h \ - utils.h - - if IS_BIONIC -@@ -140,6 +145,11 @@ liblxc_la_SOURCES = af_unix.c af_unix.h \ - terminal.c \ - utils.c utils.h \ - version.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/oci_runtime_spec.c json/oci_runtime_spec.h \ -+ json/read-file.c json/read-file.h \ - $(LSM_SOURCES) - - if IS_BIONIC -@@ -192,6 +202,7 @@ AM_CFLAGS = -DLXCROOTFSMOUNT=\"$(LXCROOTFSMOUNT)\" \ - -I $(top_srcdir)/src \ - -I $(top_srcdir)/src/lxc \ - -I $(top_srcdir)/src/lxc/storage \ -+ -I $(top_srcdir)/src/lxc/json \ - -I $(top_srcdir)/src/lxc/cgroups - - if ENABLE_APPARMOR -@@ -224,7 +235,7 @@ liblxc_la_CFLAGS = -fPIC \ - liblxc_la_LDFLAGS = -pthread \ - -Wl,-no-undefined \ - -Wl,-soname,liblxc.so.$(firstword $(subst ., ,@LXC_ABI@)) \ -- -version-info @LXC_ABI_MAJOR@ -+ -version-info @LXC_ABI_MAJOR@ @YAJL_LIBS@ - - liblxc_la_LIBADD = $(CAP_LIBS) \ - $(GNUTLS_LIBS) \ diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 800573a..6a14de1 100644 +index e0a6f98..71fd6f9 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c -@@ -53,6 +53,7 @@ - #include +@@ -33,6 +33,11 @@ #include #include -+#include ++#ifdef HAVE_ISULAD ++#include ++#include "sync.h" ++#endif ++ #include "af_unix.h" #include "caps.h" -@@ -137,7 +138,10 @@ char *lxchook_names[NUM_LXC_HOOKS] = { + #include "cgroup.h" +@@ -121,7 +126,14 @@ char *lxchook_names[NUM_LXC_HOOKS] = { "post-stop", "clone", "destroy", -- "start-host" ++#ifdef HAVE_ISULAD + "start-host", + "oci-prestart", + "oci-poststart", + "oci-poststop" ++#else + "start-host" ++#endif }; struct mount_opt { -@@ -4082,13 +4086,530 @@ int lxc_setup(struct lxc_handler *handler) +@@ -3947,6 +3959,530 @@ static int setup_rootfs_mountopts(const struct lxc_rootfs *rootfs) + } return 0; } - ++ +struct oci_hook_conf { + defs_hook *ocihook; + @@ -156,18 +83,26 @@ index 800573a..6a14de1 100644 + ERROR("Get container %s pid failed: %s", name, strerror(errno)); + cpid = "-1"; + } -+ // {"ociVersion":"","id":"xxx","pid":777,"root":"xxx","bundlePath":"xxx"} -+ size = 1 + 16 + 5 + strlen(name) + 3 + 6 + strlen(cpid) + 1 -+ + 7 + strlen(rootfs) + 3 + 13 + strlen(lxcpath) + 1 + strlen(name) + 3 + 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) { ++ if (inmsg == NULL) { + ERROR("Out of memory"); + ret = -1; + goto out_free; + } + rc = snprintf(inmsg, size, -+ "{\"ociVersion\":\"\",\"id\":\"%s\",\"pid\":%s,\"root\":\"%s\",\"bundlePath\":\"%s/%s\"}", -+ name, cpid, rootfs, lxcpath, name); ++ "{\"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; @@ -183,34 +118,43 @@ index 800573a..6a14de1 100644 + +static char **merge_ocihook_env(char **oldenvs, size_t env_len, size_t *merge_env_len) +{ -+ char **result; ++ char **result = NULL; + size_t result_len = env_len; + size_t i, j; -+ char *tmpenv; -+ char *lxc_envs[] = {"LXC_CGNS_AWARE", "LXC_PID", "LXC_ROOTFS_MOUNT", -+ "LXC_CONFIG_FILE", "LXC_CGROUP_PATH", "LXC_ROOTFS_PATH", "LXC_NAME"}; -+ char *lxcenv_buf; ++ 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) ++ if (result == NULL) + return NULL; + memset(result, 0, sizeof(char *) * result_len); + + for(i = 0; i < env_len; i++) { + if (oldenvs[i]) -+ result[i] = strdup(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)) { -+ lxcenv_buf = malloc(strlen(tmpenv) + 1 + strlen(lxc_envs[j]) + 1); -+ if (!lxcenv_buf) { ++ 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 (sprintf(lxcenv_buf, "%s=%s", lxc_envs[j], tmpenv) < 0) { ++ if (snprintf(lxcenv_buf, env_buf_len, "%s=%s", lxc_envs[j], tmpenv) < 0) { + free(lxcenv_buf); + continue; + } @@ -223,8 +167,8 @@ index 800573a..6a14de1 100644 + return result; +} + -+static struct lxc_popen_FILE *lxc_popen_ocihook(char *commandpath, char **args, int args_len, -+ char **envs, int env_len, const char *instr) ++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; @@ -249,17 +193,12 @@ index 800573a..6a14de1 100644 + goto on_error; + + if (child_pid == 0) { -+ /* child */ -+ size_t result_capacity; -+ int r; -+ char **real_args; -+ + 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) { -+ SYSERROR("Failed to remove FD_CLOEXEC from fd."); ++ fprintf(stderr, "Failed to remove FD_CLOEXEC from fd."); + exit(127); + } + } @@ -286,6 +225,11 @@ index 800573a..6a14de1 100644 + 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 @@ -297,20 +241,11 @@ index 800573a..6a14de1 100644 + sigprocmask(SIG_UNBLOCK, &mask, NULL); + } + -+ result_capacity = args_len; -+ real_args = malloc(sizeof(char *) * (result_capacity + 2 + 1)); -+ if (!real_args) -+ _exit(EXIT_FAILURE); -+ memset(real_args, 0, sizeof(char *) * (result_capacity + 2 + 1)); -+ real_args[0] = strdup("sh"); -+ real_args[1] = strdup(commandpath); -+ for(r = 2; r < (args_len + 1); r++) -+ real_args[r] = strdup(args[r-1]); -+ + if (env_len > 0) -+ execvpe("/bin/sh", real_args, envs); ++ execvpe(commandpath, args, envs); + else -+ execvp("/bin/sh", real_args); ++ execvp(commandpath, args); ++ fprintf(stderr, "fork/exec %s: %s", commandpath, strerror(errno)); + exit(127); + } + @@ -375,16 +310,12 @@ index 800573a..6a14de1 100644 + + if (alive) { + ERROR("%s:%d: running %s hook caused \"hook ran past specified timeout of %.1fs\"", -+ __FILE__, __LINE__, -+ (conf->which == LXCHOOK_START_HOST) ? "prestart" : lxchook_names[conf->which], -+ (double)conf->timeout); -+ -+ if (conf->errfd >= 0) { -+ lxc_write_error_message(conf->errfd, "%s:%d: running %s hook caused \"hook ran past specified timeout of %.1fs\"", -+ __FILE__, __LINE__, -+ (conf->which == LXCHOOK_START_HOST) ? "prestart" : lxchook_names[conf->which], -+ (double)conf->timeout); -+ } ++ __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"); @@ -397,7 +328,7 @@ index 800573a..6a14de1 100644 + return ((void *)0); +} + -+static int run_ocihook_buffer(struct oci_hook_conf *oconf, char *inmsg) ++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}; @@ -426,7 +357,7 @@ index 800573a..6a14de1 100644 + } + + conf = malloc(sizeof(struct wait_conf)); -+ if (!conf) { ++ if (conf == NULL) { + SYSERROR("Failed to malloc."); + goto on_error; + } @@ -451,6 +382,7 @@ index 800573a..6a14de1 100644 + err = pthread_create(&ptid, &attr, wait_ocihook_timeout, conf); + if (err != 0) { + ERROR("Create wait timeout thread failed"); ++ free(conf); + goto on_error; + } + @@ -464,23 +396,19 @@ index 800573a..6a14de1 100644 + 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); -+ if (conf->errfd >= 0) { -+ lxc_write_error_message(conf->errfd, "%s:%d: running %s hook caused \"error running hook: exit status %d, output:%s\"", -+ __FILE__, __LINE__, -+ (conf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[conf->which], -+ WEXITSTATUS(ret), output); -+ } ++ 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)); -+ if (conf->errfd >= 0) { -+ lxc_write_error_message(conf->errfd, "%s:%d: running %s hook caused \"error running hook: Script terminated by signal %d\"", -+ __FILE__, __LINE__, -+ (conf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[conf->which], -+ 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; + } @@ -500,8 +428,8 @@ index 800573a..6a14de1 100644 + 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 : "", conf->timeout); ++ buffer, err_args_msg ? err_args_msg : "", ++ err_envs_msg ? err_envs_msg : "", oconf->ocihook->timeout); + + free(err_args_msg); + free(err_envs_msg); @@ -509,12 +437,12 @@ index 800573a..6a14de1 100644 +} + +static int run_ocihook_script_argv(const char *name, const char *section, -+ struct oci_hook_conf *oconf, -+ const char *lxcpath, const char *rootfs) ++ struct oci_hook_conf *oconf, ++ const char *lxcpath, const char *rootfs) +{ + int ret; + const char *script = oconf->ocihook->path; -+ char *inmsg; ++ char *inmsg = NULL; + + INFO("Executing script \"%s\" for container \"%s\", config section \"%s\".", + script, name, section); @@ -536,7 +464,7 @@ index 800573a..6a14de1 100644 + char *tmp = NULL; + + if (!path) { -+ ret = strdup("/"); ++ ret = safe_strdup("/"); + return ret; + } + if (!backend) { @@ -544,38 +472,37 @@ index 800573a..6a14de1 100644 + } + + if (strcmp(backend, "aufs") == 0 || -+ strcmp(backend, "overlayfs") == 0 || -+ strcmp(backend, "loop") == 0) { ++ strcmp(backend, "overlayfs") == 0 || ++ strcmp(backend, "loop") == 0) { + tmp = strrchr(path, ':'); -+ tmp++; -+ ret = strdup(tmp); -+ if (!ret) { -+ ERROR("Out of memory"); ++ if (tmp == NULL) { ++ ERROR("Invalid root path format"); + return NULL; + } ++ tmp++; ++ ret = safe_strdup(tmp); + return ret; + } + +default_out: -+ ret = strdup(path); -+ if (!ret) { -+ ERROR("Out of memory"); -+ return NULL; -+ } ++ ret = safe_strdup(path); + return ret; +} + -+static int run_oci_hooks(const char *name, const char *lxcpath, struct lxc_conf *lc, int which, int errfd) ++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}; -+ oci_runtime_spec_hooks *ocihooks = NULL; + size_t i; + int ret = 0; -+ char *rootpath; ++ int nret = 0; ++ char *rootpath = NULL; + -+ if (!lc || !lc->ocihooks) { ++ if (!lc) { + return -1; + } ++ if (!lc->ocihooks) { ++ return 0; ++ } + + rootpath = get_root_path(lc->rootfs.path, lc->rootfs.bdev_type); + if (!rootpath) { @@ -586,2456 +513,682 @@ index 800573a..6a14de1 100644 + 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]; -+ ret = run_ocihook_script_argv(name, "lxc", &work_conf, lxcpath, rootpath); -+ if (ret != 0) -+ break; -+ } -+ break; -+ case OCI_HOOK_POSTSTOP: -+ for (i = 0; i < lc->ocihooks->poststop_len; i++) { -+ work_conf.ocihook = lc->ocihooks->poststop[i]; -+ ret = run_ocihook_script_argv(name, "lxc", &work_conf, lxcpath, rootpath); -+ if (ret != 0) -+ break; -+ } -+ break; -+ default: -+ ret = -1; ++ 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_lxc_hooks(const char *name, char *hookname, struct lxc_conf *conf, - char *argv[]) - { - struct lxc_list *it; - int which = -1; - -- if (strcmp(hookname, "pre-start") == 0) ++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) { -+ int ret; + which = OCI_HOOK_PRESTART; -+ if (!argv || !argv[0]) { ++ if (!lxcpath) { + ERROR("oci hook require lxcpath"); + return -1; + } -+ return run_oci_hooks(name, argv[0], conf, which, conf->errpipe[1]); ++ return do_run_oci_hooks(name, lxcpath, conf, which, conf->errpipe[1]); + } else if (strcmp(hookname, "oci-poststart") == 0) { -+ int ret; + which = OCI_HOOK_POSTSTART; -+ if (!argv || !argv[0]) { ++ if (!lxcpath) { + ERROR("oci hook require lxcpath"); + return -1; + } -+ return run_oci_hooks(name, argv[0], conf, which, conf->errpipe[1]); ++ return do_run_oci_hooks(name, lxcpath, conf, which, conf->errpipe[1]); + } else if (strcmp(hookname, "oci-poststop") == 0) { -+ int ret; + which = OCI_HOOK_POSTSTOP; -+ if (!argv || !argv[0]) { ++ if (!lxcpath) { + ERROR("oci hook require lxcpath"); + return -1; + } -+ return run_oci_hooks(name, argv[0], conf, which, conf->errpipe[1]); -+ } else if (strcmp(hookname, "pre-start") == 0) - which = LXCHOOK_PRESTART; - else if (strcmp(hookname, "start-host") == 0) - which = LXCHOOK_START_HOST; -@@ -4476,6 +4997,9 @@ void lxc_conf_free(struct lxc_conf *conf) ++ 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"); - if (current_config == conf) - current_config = NULL; -+ // isulad: free oci hooks -+ if (conf->ocihooks) -+ free_oci_runtime_spec_hooks(conf->ocihooks); - lxc_terminal_conf_free(&conf->console); - free(conf->rootfs.mount); - free(conf->rootfs.bdev_type); ++#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 7393dbf..2263e47 100644 +index 22c554d..61c3383 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h -@@ -35,6 +35,7 @@ - #include - #include +@@ -23,6 +23,10 @@ + #include "start.h" + #include "terminal.h" ++#ifdef HAVE_ISULAD +#include "oci_runtime_hooks.h" - #include "compiler.h" - #include "config.h" - #include "list.h" -@@ -239,6 +240,9 @@ enum lxchooks { ++#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 }; -@@ -307,6 +311,11 @@ struct lxc_conf { - struct lxc_list hooks[NUM_LXC_HOOKS]; - }; +@@ -433,6 +442,11 @@ struct lxc_conf { + } shmount; + #ifdef HAVE_ISULAD + /* + * isulad: support oci hook + * */ + oci_runtime_spec_hooks *ocihooks; + - char *lsm_aa_profile; - unsigned int lsm_aa_allow_incomplete; - char *lsm_se_context; -diff --git a/src/lxc/json/defs.c b/src/lxc/json/defs.c -new file mode 100644 -index 0000000..38df2f7 ---- /dev/null -+++ b/src/lxc/json/defs.c -@@ -0,0 +1,198 @@ -+// Generated from defs.json. Do not edit! -+#ifndef _GNU_SOURCE -+#define _GNU_SOURCE -+#endif -+#include -+#include -+#include "securec.h" -+#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) { -+ char *str = YAJL_GET_STRING(val); -+ ret->path = safe_strdup(str ? str : ""); -+ } -+ } -+ { -+ yajl_val tmp = get_val(tree, "args", yajl_t_array); -+ if (tmp && YAJL_GET_ARRAY(tmp)) { -+ size_t i; -+ ret->args_len = YAJL_GET_ARRAY(tmp)->len; -+ 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) { -+ 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 && YAJL_GET_ARRAY(tmp)) { -+ size_t i; -+ ret->env_len = YAJL_GET_ARRAY(tmp)->len; -+ 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) { -+ 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) { -+ 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) -+ return; -+ free(ptr->path); -+ ptr->path = NULL; -+ if (ptr->args) { -+ size_t i; -+ for (i = 0; i < ptr->args_len; i++) { -+ if (ptr->args[i]) { -+ free(ptr->args[i]); -+ ptr->args[i] = NULL; -+ } -+ } -+ free(ptr->args); -+ ptr->args = NULL; -+ } -+ if (ptr->env) { -+ size_t i; -+ for (i = 0; i < ptr->env_len; i++) { -+ if (ptr->env[i]) { -+ 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 && ptr->path)) { -+ 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 && ptr->path) { -+ 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 && ptr->args)) { -+ 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 && ptr->args) { -+ 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 && ptr->env)) { -+ 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 && ptr->env) { -+ 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 && 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 && 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 + /* 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. + -+typedef struct { -+ char *path; + 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; + -+ char **args; -+ size_t args_len; ++ if (!c->lxc_conf) ++ c->lxc_conf = lxc_conf_init(); + -+ char **env; -+ size_t env_len; ++ if (!c->lxc_conf) ++ return false; + -+ int timeout; ++ 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; +} -+defs_hook; + -+void free_defs_hook(defs_hook *ptr); ++/* ++ * 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; + -+defs_hook *make_defs_hook(yajl_val tree, struct parser_context *ctx, parser_error *err); ++ if (!c->config_path) ++ return false; + -+yajl_gen_status gen_defs_hook(yajl_gen g, defs_hook *ptr, struct parser_context *ctx, parser_error *err); ++ /* $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; + -+#ifdef __cplusplus -+} -+#endif ++ newpath = malloc(len); ++ if (newpath == NULL) ++ return false; + -+#endif -diff --git a/src/lxc/json/json_common.c b/src/lxc/json/json_common.c -new file mode 100755 -index 0000000..8b91844 ---- /dev/null -+++ b/src/lxc/json/json_common.c -@@ -0,0 +1,1196 @@ -+// 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); -+} ++ 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; ++ } + -+yajl_gen_status reformat_uint(void *ctx, long long unsigned int num) { -+ char numstr[MAX_NUM_STR_LEN]; -+ int ret; ++ free(c->ocihookfile); ++ c->ocihookfile = newpath; + -+ ret = sprintf(numstr, "%llu", num); -+ if (ret < 0) { -+ return yajl_gen_in_error_state; -+ } -+ return reformat_number(ctx, (const char *)numstr, strlen(numstr)); ++ return true; +} ++#endif + -+yajl_gen_status reformat_int(void *ctx, long long int num) { -+ char numstr[MAX_NUM_STR_LEN]; -+ int ret; + 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 + -+ ret = sprintf(numstr, "%lld", num); -+ if (ret < 0) { -+ return yajl_gen_in_error_state; -+ } -+ return reformat_number(ctx, (const char *)numstr, strlen(numstr)); -+} + 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) + -+yajl_gen_status reformat_double(void *ctx, double num) { -+ yajl_gen g = (yajl_gen) ctx; -+ return yajl_gen_double(g, num); -+} ++/* isulad add clean resources */ ++static bool do_lxcapi_clean_container_resource(struct lxc_container *c, pid_t pid) ++{ ++ int ret; + -+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); -+} ++ if (!c) ++ return false; + -+yajl_gen_status reformat_null(void *ctx) { -+ yajl_gen g = (yajl_gen) ctx; -+ return yajl_gen_null(g); -+} ++ 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; + -+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); -+} ++WRAP_API_1(bool, lxcapi_clean_container_resource, pid_t) + -+yajl_gen_status reformat_start_map(void *ctx) { -+ yajl_gen g = (yajl_gen) ctx; -+ return yajl_gen_map_open(g); -+} ++/* isulad get coantainer pids */ ++static bool do_lxcapi_get_container_pids(struct lxc_container *c, pid_t **pids,size_t *pids_len) ++{ ++ int ret; + -+yajl_gen_status reformat_end_map(void *ctx) { -+ yajl_gen g = (yajl_gen) ctx; -+ return yajl_gen_map_close(g); -+} ++ if (!c) ++ return false; + -+yajl_gen_status reformat_start_array(void *ctx) { -+ yajl_gen g = (yajl_gen) ctx; -+ return yajl_gen_array_open(g); -+} ++ 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; + -+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; ++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 + -+ } -+ yajl_gen_config(*g, yajl_gen_beautify, !(ctx->options & GEN_OPTIONS_SIMPLIFY)); -+ yajl_gen_config(*g, yajl_gen_validate_utf8, 1); -+ return true; -+} + 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; + -+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); -+} ++ /*! ++ * \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; ++ } + -+void *safe_malloc(size_t size) { -+ void *ret = NULL; -+ if (size == 0) { -+ abort(); -+ } -+ ret = calloc(1, size); -+ if (ret == NULL) { -+ abort(); -+ } -+ return ret; -+} ++ /* 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 + -+int common_safe_double(const char *numstr, double *converted) { -+ char *err_str = NULL; -+ double d; + 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); + } + -+ if (!numstr) { -+ return -EINVAL; -+ } ++#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; ++ } + -+ errno = 0; -+ d = strtod(numstr, &err_str); -+ if (errno > 0) { -+ return -errno; -+ } ++ 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++; ++ } + -+ if (!err_str || err_str == numstr || *err_str != '\0') { -+ return -EINVAL; -+ } ++ 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"); + -+ *converted = d; -+ return 0; ++ 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; +} + -+int common_safe_uint8(const char *numstr, uint8_t *converted) { -+ char *err = NULL; -+ unsigned long int uli; -+ -+ if (!numstr) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ uli = strtoul(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (!err || err == numstr || *err != '\0') { -+ return -EINVAL; -+ } -+ -+ if (uli > UINT8_MAX) { -+ return -ERANGE; -+ } -+ -+ *converted = (uint8_t)uli; -+ 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; + -+int common_safe_uint16(const char *numstr, uint16_t *converted) { -+ char *err = NULL; -+ unsigned long int uli; ++ handler = malloc(sizeof(*handler)); ++ if (handler == NULL) ++ return NULL; + -+ if (!numstr) { -+ return -EINVAL; -+ } ++ 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; ++ } + -+ errno = 0; -+ uli = strtoul(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } ++ INFO("Container \"%s\" 's clean handler is initialized.", name); + -+ if (!err || err == numstr || *err != '\0') { -+ return -EINVAL; -+ } ++ return handler; + -+ if (uli > UINT16_MAX) { -+ return -ERANGE; -+ } ++on_error: ++ lxc_free_handler(handler); + -+ *converted = (uint16_t)uli; -+ return 0; ++ return NULL; +} + -+int common_safe_uint32(const char *numstr, uint32_t *converted) { -+ char *err = NULL; -+ unsigned long long int ull; ++/*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; + -+ if (!numstr) { -+ return -EINVAL; -+ } ++ 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; ++ } + -+ errno = 0; -+ ull = strtoull(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } ++ INFO("Container \"%s\" 's clean handler is initialized.", name); + -+ if (!err || err == numstr || *err != '\0') { -+ return -EINVAL; -+ } ++ return handler; + -+ if (ull > UINT32_MAX) { -+ return -ERANGE; -+ } ++on_error: ++ lxc_free_handler(handler); + -+ *converted = (uint32_t)ull; -+ return 0; ++ return NULL; +} + -+int common_safe_uint64(const char *numstr, uint64_t *converted) { -+ char *err = NULL; -+ unsigned long long int ull; ++/*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; + -+ if (!numstr) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ ull = strtoull(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (!err || 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) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ ull = strtoull(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (!err || 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) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ li = strtol(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (!err || 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) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ li = strtol(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (!err || 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) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ lli = strtol(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (!err || 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) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ lli = strtoll(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (!err || 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) { -+ return -EINVAL; -+ } -+ -+ errno = 0; -+ lli = strtol(numstr, &err, 0); -+ if (errno > 0) { -+ return -errno; -+ } -+ -+ if (!err || err == numstr || *err != '\0') { -+ return -EINVAL; -+ } -+ -+ if (lli > INT_MAX || lli < INT_MIN) { -+ return -ERANGE; -+ } -+ -+ *converted = (int)lli; -+ return 0; -+} -+ -+char *safe_strdup(const char *src) -+{ -+ char *dst = NULL; -+ -+ if (!src) { -+ return NULL; -+ } -+ -+ dst = strdup(src); -+ if (!dst) { -+ abort(); -+ } -+ -+ return dst; -+} -+ -+ -+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) { -+ 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 = sprintf(numstr, "%lld", (long long int)map->keys[i]); -+ if (nret < 0) { -+ 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) { -+ 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 && YAJL_GET_OBJECT(src)) { -+ size_t i; -+ size_t len = YAJL_GET_OBJECT(src)->len; -+ 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) { -+ int invalid; -+ invalid = common_safe_int(srckey, &(ret->keys[i])); -+ if (invalid) { -+ if (!*err && 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) { -+ int invalid; -+ if (!YAJL_IS_NUMBER(srcval)) { -+ if (!*err && 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 && 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; -+ int *vals; -+ -+ if (!map) { -+ 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) { -+ if (memcpy(keys, map->keys, map->len * sizeof(int)) != EOK) { -+ free(keys); -+ free(vals); -+ return -1; -+ } -+ if (memcpy(vals, map->values, map->len * sizeof(int)) != EOK) { -+ free(keys); -+ free(vals); -+ return -1; -+ } -+ } -+ 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) { -+ 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 = sprintf(numstr, "%lld", (long long int)map->keys[i]); -+ if (nret < 0) { -+ 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) { -+ 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 bool -+ } -+ 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 && YAJL_GET_OBJECT(src)) { -+ size_t i; -+ size_t len = YAJL_GET_OBJECT(src)->len; -+ 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) { -+ int invalid; -+ invalid = common_safe_int(srckey, &(ret->keys[i])); -+ if (invalid) { -+ if (!*err && 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) { -+ if (YAJL_IS_TRUE(srcval)) { -+ ret->values[i] = true; -+ } else if (YAJL_IS_FALSE(srcval)) { -+ ret->values[i] = false; -+ } else { -+ if (!*err && 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; -+ bool *vals; -+ -+ if (!map) { -+ 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) { -+ if (memcpy(keys, map->keys, map->len * sizeof(int)) != EOK) { -+ free(keys); -+ free(vals); -+ return -1; -+ } -+ if (memcpy(vals, map->values, map->len * sizeof(bool)) != EOK) { -+ free(keys); -+ free(vals); -+ return -1; -+ } -+ } -+ 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) { -+ 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 = sprintf(numstr, "%lld", (long long int)map->keys[i]); -+ if (nret < 0) { -+ 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) { -+ 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 && YAJL_GET_OBJECT(src)) { -+ size_t i; -+ size_t len = YAJL_GET_OBJECT(src)->len; -+ 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) { -+ int invalid; -+ invalid = common_safe_int(srckey, &(ret->keys[i])); -+ if (invalid) { -+ if (!*err && 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) { -+ if (!YAJL_IS_STRING(srcval)) { -+ if (!*err && 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; -+ char **vals; -+ -+ if (!map) { -+ 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) { -+ if (memcpy(keys, map->keys, map->len * sizeof(int)) != EOK) { -+ free(keys); -+ free(vals); -+ return -1; -+ } -+ if (memcpy(vals, map->values, map->len * sizeof(char *)) != EOK) { -+ free(keys); -+ free(vals); -+ return -1; -+ } -+ } -+ 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) { -+ 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) { -+ 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 && YAJL_GET_OBJECT(src)) { -+ size_t i; -+ size_t len = YAJL_GET_OBJECT(src)->len; -+ 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) { -+ int invalid; -+ if (!YAJL_IS_NUMBER(srcval)) { -+ if (!*err && 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 && 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; -+ int *vals; -+ -+ if (!map) { -+ 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) { -+ if (memcpy(keys, map->keys, map->len * sizeof(char *)) != EOK) { -+ free(keys); -+ free(vals); -+ return -1; -+ } -+ if (memcpy(vals, map->values, map->len * sizeof(int)) != EOK) { -+ free(keys); -+ free(vals); -+ return -1; -+ } -+ } -+ 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) { -+ 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) { -+ 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 && YAJL_GET_OBJECT(src)) { -+ size_t i; -+ size_t len = YAJL_GET_OBJECT(src)->len; -+ 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) { -+ if (YAJL_IS_TRUE(srcval)) { -+ ret->values[i] = true; -+ } else if (YAJL_IS_FALSE(srcval)) { -+ ret->values[i] = false; -+ } else { -+ if (!*err && 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; -+ bool *vals; -+ -+ if (!map) { -+ 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) { -+ if (memcpy(keys, map->keys, map->len * sizeof(char *)) != EOK) { -+ free(keys); -+ free(vals); -+ return -1; -+ } -+ if (memcpy(vals, map->values, map->len * sizeof(bool)) != EOK) { -+ free(keys); -+ free(vals); -+ return -1; -+ } -+ } -+ 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) { -+ 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) { -+ 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 && YAJL_GET_OBJECT(src)) { -+ size_t i; -+ size_t len = YAJL_GET_OBJECT(src)->len; -+ 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) { -+ if (!YAJL_IS_STRING(srcval)) { -+ if (!*err && 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; -+ char **keys; -+ char **vals; -+ -+ if (!map) { -+ return -1; -+ } -+ -+ 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) { -+ if (memcpy(keys, map->keys, map->len * sizeof(char *)) != EOK) { -+ free(keys); -+ free(vals); -+ return -1; -+ } -+ if (memcpy(vals, map->values, map->len * sizeof(char *)) != EOK) { -+ free(keys); -+ free(vals); -+ return -1; -+ } -+ } -+ 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..904fe3c ---- /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 "securec.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 -+ -+#define GEN_SET_ERROR_AND_RETURN(stat, err) { \ -+ if (!*(err)) {\ -+ 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); -+ -+char *safe_strdup(const char *src); -+ -+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/oci_runtime_hooks.c b/src/lxc/json/oci_runtime_hooks.c -new file mode 100644 -index 0000000..3aa134e ---- /dev/null -+++ b/src/lxc/json/oci_runtime_hooks.c -@@ -0,0 +1,53 @@ -+/****************************************************************************** -+ * 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 = 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 = 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..1f6073c ---- /dev/null -+++ b/src/lxc/json/oci_runtime_spec.c -@@ -0,0 +1,196 @@ -+// Generated from spec.json. Do not edit! -+#ifndef _GNU_SOURCE -+#define _GNU_SOURCE -+#endif -+#include -+#include -+#include "securec.h" -+#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 && YAJL_GET_ARRAY(tmp)) { -+ 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 && YAJL_GET_ARRAY(tmp)) { -+ 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 && YAJL_GET_ARRAY(tmp)) { -+ 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) -+ return; -+ if (ptr->prestart) { -+ size_t i; -+ for (i = 0; i < ptr->prestart_len; i++) -+ if (ptr->prestart[i]) { -+ free_defs_hook(ptr->prestart[i]); -+ ptr->prestart[i] = NULL; -+ } -+ free(ptr->prestart); -+ ptr->prestart = NULL; -+ } -+ if (ptr->poststart) { -+ size_t i; -+ for (i = 0; i < ptr->poststart_len; i++) -+ if (ptr->poststart[i]) { -+ free_defs_hook(ptr->poststart[i]); -+ ptr->poststart[i] = NULL; -+ } -+ free(ptr->poststart); -+ ptr->poststart = NULL; -+ } -+ if (ptr->poststop) { -+ size_t i; -+ for (i = 0; i < ptr->poststop_len; i++) -+ if (ptr->poststop[i]) { -+ 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 && ptr->prestart)) { -+ 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 && ptr->prestart) { -+ 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 && ptr->poststart)) { -+ 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 && ptr->poststart) { -+ 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 && ptr->poststop)) { -+ 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 && ptr->poststop) { -+ 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); ++ handler = lxc_init_clean_handler(name, lxcpath, conf, pid); ++ if (!handler) { ++ ERROR("Failed to init container %s clean handler", name); ++ ret = -1; ++ goto out; ++ } + -+yajl_gen_status gen_oci_runtime_spec_hooks(yajl_gen g, oci_runtime_spec_hooks *ptr, struct parser_context *ctx, parser_error *err); ++ if (clean_resource_set_env(handler) != 0) { ++ ERROR("Failed to set env for poststop hooks"); ++ ret = -1; ++ goto out; ++ } + -+#ifdef __cplusplus -+} -+#endif ++ 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; ++ } + -+#endif -diff --git a/src/lxc/json/read-file.c b/src/lxc/json/read-file.c -new file mode 100644 -index 0000000..ad0eda1 ---- /dev/null -+++ b/src/lxc/json/read-file.c -@@ -0,0 +1,94 @@ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include "read-file.h" -+ -+#ifndef O_CLOEXEC -+#define O_CLOEXEC 02000000 -+#endif ++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; ++ } + -+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; -+ ++ lxc_free_handler(handler); ++ return ret; +} + -+char *read_file(const char *path, size_t *length) ++/*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) +{ -+ char *buf = NULL; -+ char rpath[PATH_MAX + 1] = {0}; -+ int fd, tmperrno; -+ FILE *fp; -+ -+ 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 31f4819..68134d8 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -271,6 +271,9 @@ static void lxc_container_free(struct lxc_container *c) - free(c->configfile); - c->configfile = NULL; - -+ free(c->ocihookfile); -+ c->ocihookfile = NULL; -+ - free(c->error_string); - c->error_string = NULL; - -@@ -612,6 +615,30 @@ static bool load_config_locked(struct lxc_container *c, const char *fname) - return true; - } - -+static bool load_ocihooks_locked(struct lxc_container *c) -+{ -+ parser_error err = NULL; -+ oci_runtime_spec_hooks *hooks; -+ -+ if (!c->lxc_conf) -+ c->lxc_conf = lxc_conf_init(); -+ -+ if (!c->lxc_conf) -+ return false; ++ int ret = 0; ++ struct lxc_handler *handler = NULL; ++ struct cgroup_ops *cg_ops = NULL; + -+ 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; ++ handler = lxc_init_pids_handler(name, lxcpath, conf); ++ if (!handler) { ++ ERROR("Failed to init container %s clean handler", name); ++ ret = -1; ++ goto out; + } -+ c->lxc_conf->ocihooks = hooks; -+ -+ if (err) -+ free(err); -+ return true; -+} -+ - static bool do_lxcapi_load_config(struct lxc_container *c, const char *alt_file) - { - int lret; -@@ -645,6 +672,9 @@ static bool do_lxcapi_load_config(struct lxc_container *c, const char *alt_file) - - ret = load_config_locked(c, fname); - -+ if (ret && file_exists(c->ocihookfile)) -+ ret = load_ocihooks_locked(c); -+ - if (need_disklock) - container_disk_unlock(c); - else -@@ -3242,6 +3272,37 @@ static bool set_config_filename(struct lxc_container *c) - 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; -+ int len, ret; -+ -+ if (!c->config_path) -+ return false; + -+ /* $lxc_path + "/" + c->name + "/" + "config" + '\0' */ -+ len = strlen(c->config_path) + strlen(c->name) + strlen(OCI_HOOK_JSON_FILE_NAME) + 3; -+ newpath = malloc(len); -+ if (!newpath) -+ 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; ++ cg_ops = handler->cgroup_ops; ++ ret = get_all_pids(cg_ops, pids, pids_len); ++ if (ret < 0) { ++ WARN("failed to get all pids"); + } + -+ free(c->ocihookfile); -+ c->ocihookfile = newpath; -+ -+ return true; ++out: ++ lxc_free_handler(handler); ++ return ret; +} + - static bool do_lxcapi_set_config_path(struct lxc_container *c, const char *path) - { - char *p; -@@ -5081,6 +5142,11 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath - goto err; - } - -+ if (!set_oci_hook_config_filename(c)) { -+ fprintf(stderr, "Error allocating oci hooks file pathname\n"); -+ goto err; -+ } -+ - if (file_exists(c->configfile) && !lxcapi_load_config(c, NULL)) { - fprintf(stderr, "Failed to load config for %s\n", name); - goto err; -diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index 503038a..5d23cc7 100644 ---- a/src/lxc/lxccontainer.h -+++ b/src/lxc/lxccontainer.h -@@ -77,6 +77,13 @@ struct lxc_container { ++#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 *, - /*! - * \private -+ * isulad: support oci hook from json file -+ * full path of json file -+ * */ -+ char *ocihookfile; -+ -+ /*! -+ * \private - * File to store pid. - */ - char *pidfile; -diff --git a/src/lxc/start.c b/src/lxc/start.c -index b13326c..63f5af8 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1887,6 +1887,16 @@ static int lxc_spawn(struct lxc_handler *handler) - goto out_delete_net; - } + extern int resolve_clone_flags(struct lxc_handler *handler); -+ /* isulad: Run oci prestart hook at here */ -+ char* oci_hook_args[1]; -+ oci_hook_args[0] = alloca(strlen(lxcpath) + 1); -+ (void)strlcpy(oci_hook_args[0], lxcpath, strlen(lxcpath)); -+ ret = run_lxc_hooks(name, "oci-prestart", conf, oci_hook_args); -+ if (ret < 0) { -+ ERROR("Failed to run oci prestart hooks"); -+ goto out_delete_net; -+ } ++#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); + - /* Tell the child to complete its initialization and wait for it to exec - * or return an error. (The child will never return - * LXC_SYNC_READY_START+1. It will either close the sync pipe, causing -@@ -1922,6 +1932,13 @@ static int lxc_spawn(struct lxc_handler *handler) - if (ret < 0) - goto out_abort; - -+ /* isulad: Run oci prestart hook at here */ -+ ret = run_lxc_hooks(name, "oci-poststart", conf, oci_hook_args); -+ if (ret < 0) { -+ ERROR("Failed to run oci poststart hooks"); -+ goto out_delete_net; -+ } ++/*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 + - ret = lxc_set_state(name, handler, RUNNING); - if (ret < 0) { - ERROR("Failed to set state to \"%s\"", lxc_state2str(RUNNING)); + #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 8ec9f46..d1a22f7 100644 +index 27078e2..39413ee 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c -@@ -1864,11 +1864,11 @@ static int lxc_file2str(const char *filename, char ret[], int cap) - int fd, num_read; - - if ((fd = open(filename, O_RDONLY | O_CLOEXEC)) == -1) -- return -1;/*lint !e960*/ -+ return -1; - if ((num_read = read(fd, ret, cap - 1)) <= 0) -- num_read = -1;/*lint !e960*/ -+ num_read = -1; - else -- ret[num_read] = 0;/*lint !e613*//*lint !e960*/ -+ ret[num_read] = 0; - close(fd); - - return num_read; -@@ -1886,16 +1886,16 @@ static proc_t *lxc_stat2proc(char *S) - char *tmp = NULL; - - if (!S) -- return NULL;/*lint !e960*/ -+ return NULL; - -- tmp = strrchr(S, ')'); /* split into "PID (cmd" and "" *//*lint !e586*/ -+ tmp = strrchr(S, ')'); /* split into "PID (cmd" and "" */ - if (!tmp) -- return NULL;/*lint !e960*/ -+ return NULL; - *tmp = '\0'; /* replace trailing ')' with NUL */ - - P = malloc(sizeof(proc_t)); - if (!P) -- return NULL;/*lint !e960*/ -+ return NULL; - memset(P, 0x00, sizeof(proc_t)); - - /* parse these two strings separately, skipping the leading "(". */ -@@ -1909,9 +1909,9 @@ static proc_t *lxc_stat2proc(char *S) - "%c " - "%d %d %d %d %d " - "%lu %lu %lu %lu %lu " -- "%Lu %Lu %Lu %Lu " /* utime stime cutime cstime *//*lint !e566*/ -+ "%Lu %Lu %Lu %Lu " /* utime stime cutime cstime */ - "%ld %ld %ld %ld " -- "%Lu " /* start_time *//*lint !e566*/ -+ "%Lu " /* start_time */ - "%lu " - "%ld " - "%lu %lu %lu %lu %lu %lu " -@@ -1922,9 +1922,9 @@ static proc_t *lxc_stat2proc(char *S) - &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,/*lint !e561*/ -+ &P->utime, &P->stime, &P->cutime, &P->cstime, - &P->priority, &P->nice, &P->timeout, &P->it_real_value, -- &P->start_time,/*lint !e561*/ -+ &P->start_time, - &P->vsize, - &P->rss, - &P->rss_rlim, &P->start_code, &P->end_code, &P->start_stack, &P->kstk_esp, -@@ -1935,7 +1935,7 @@ static proc_t *lxc_stat2proc(char *S) - ); - - if (P->tty == 0) -- P->tty = -1; /* the old notty val, update elsewhere bef. moving to 0 *//*lint !e960*/ -+ P->tty = -1; /* the old notty val, update elsewhere bef. moving to 0 */ - return P; - } - -@@ -1949,7 +1949,7 @@ unsigned long long lxc_get_process_startat(pid_t pid) - char sbuf[1024] = {0}; /* bufs for stat */ - - sret = snprintf(filename, sizeof(filename), "/proc/%d/stat", pid); -- if (sret < 0 || sret >= sizeof(filename)) {/*lint !e574*/ -+ if (sret < 0 || sret >= sizeof(filename)) { - ERROR("Failed to sprintf filename"); - goto out; - } -@@ -1960,7 +1960,7 @@ unsigned long long lxc_get_process_startat(pid_t pid) - } - - pid_info = lxc_stat2proc(sbuf); -- if (!pid_info) {/*lint !e574*/ -+ if (!pid_info) { - ERROR("Failed to get proc stat info"); - goto out; - } -@@ -1992,3 +1992,41 @@ void lxc_write_error_message(int errfd, const char *format, ...) - SYSERROR("Write errbuf failed"); +@@ -2122,4 +2122,42 @@ set_env: + return 0; } +bool lxc_process_alive(pid_t pid, unsigned long long start_time) +{ -+ int ret; + int sret = 0; + bool alive = true; + proc_t *pid_info = NULL; @@ -3071,16 +1224,20 @@ index 8ec9f46..d1a22f7 100644 + free(pid_info); + return alive; +} ++ + #endif diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 3d56fd9..abc88ca 100644 +index 36c458e..a213ba7 100644 --- a/src/lxc/utils.h +++ b/src/lxc/utils.h -@@ -316,4 +316,6 @@ extern int fd_nonblock(int fd); +@@ -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); - extern void lxc_write_error_message(int errfd, const char *format, ...); - -+extern bool lxc_process_alive(pid_t pid, unsigned long long start_time); + // 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 new file mode 100644 index 0000000..7c721fd --- /dev/null +++ b/0026-Supporting-UID-GID-configuration.patch @@ -0,0 +1,306 @@ +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/0036-drop_caps-add-drop-caps-of-current-process.patch b/0027-Capabilites-security-feature-enhanced.patch similarity index 46% rename from 0036-drop_caps-add-drop-caps-of-current-process.patch rename to 0027-Capabilites-security-feature-enhanced.patch index 64c8b90..60419dc 100644 --- a/0036-drop_caps-add-drop-caps-of-current-process.patch +++ b/0027-Capabilites-security-feature-enhanced.patch @@ -1,52 +1,56 @@ -From 35ef612b75dee5aa2bf313a8ceb24a7636319582 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Tue, 15 Jan 2019 22:55:06 -0500 -Subject: [PATCH 036/140] drop_caps: add drop caps of current process +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: LiFeng +Signed-off-by: wujing --- - src/lxc/attach.c | 26 +++++++++++++--- - src/lxc/cgroups/cgfsng.c | 35 ++++++++++----------- - src/lxc/conf.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/conf.h | 1 + - src/lxc/start.c | 16 ++++++++++ - 5 files changed, 135 insertions(+), 22 deletions(-) + 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 8cbbf96..3f60fe1 100644 +index c77b929..231fa5f 100644 --- a/src/lxc/attach.c +++ b/src/lxc/attach.c -@@ -936,11 +936,6 @@ static int attach_child_main(struct attach_clone_payload *payload) - TRACE("Loaded seccomp profile"); +@@ -832,10 +832,12 @@ static int attach_child_main(struct attach_clone_payload *payload) + goto on_error; } -- close(payload->ipc_socket); -- payload->ipc_socket = -EBADF; -- lxc_proc_put_context_info(init_ctx); -- payload->init_ctx = NULL; -- ++#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 - * point will have their messages printed to the original stderr (if -@@ -997,9 +992,30 @@ static int attach_child_main(struct attach_clone_payload *payload) - if (new_gid == ns_root_gid) +@@ -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 (init_ctx->container && init_ctx->container->lxc_conf && -+ lxc_drop_caps(init_ctx->container->lxc_conf) != 0) { ++ if (lxc_drop_caps(init_ctx->container->lxc_conf) != 0) { + ERROR("Failed to drop caps."); + goto on_error; + } @@ -55,84 +59,50 @@ index 8cbbf96..3f60fe1 100644 + 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, msg_fd)); - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 8b913a6..bc1481d 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -2664,11 +2664,11 @@ __cgfsng_ops static bool cgfsng_data_init(struct cgroup_ops *ops, struct lxc_han - { - const char *cgroup_pattern; - char *container_cgroup, *tmp; -- struct lxc_conf *conf = handler->conf; -+ struct lxc_conf *conf = NULL; - size_t len; - -- if (!conf) -- return false; -+ if (handler) -+ conf = handler->conf; - - /* copy system-wide cgroup information */ - cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern"); -@@ -2680,21 +2680,22 @@ __cgfsng_ops static bool cgfsng_data_init(struct cgroup_ops *ops, struct lxc_han - ops->cgroup_pattern = must_copy_string(cgroup_pattern); - - /* isulad: init ops->container_cgroup here instead of in cgfsng_payload_create*/ -- if (conf->cgroup_meta.dir) -- tmp = lxc_string_join("/", (const char *[]){conf->cgroup_meta.dir, handler->name, NULL}, false); -- else -- tmp = lxc_string_replace("%n", handler->name, ops->cgroup_pattern); -- if (!tmp) { -- ERROR("Failed expanding cgroup name pattern"); -- return false; -- } -- -- len = strlen(tmp) + 1; -- container_cgroup = must_realloc(NULL, len); -- (void)strlcpy(container_cgroup, tmp, len); -- free(tmp); -- ops->container_cgroup = container_cgroup; -+ if (conf) { -+ if (conf->cgroup_meta.dir) -+ tmp = lxc_string_join("/", (const char *[]){conf->cgroup_meta.dir, handler->name, NULL}, false); -+ else -+ tmp = lxc_string_replace("%n", handler->name, ops->cgroup_pattern); -+ if (!tmp) { -+ ERROR("Failed expanding cgroup name pattern"); -+ return false; -+ } - -+ len = strlen(tmp) + 1; -+ container_cgroup = must_realloc(NULL, len); -+ (void)strlcpy(container_cgroup, tmp, len); -+ free(tmp); -+ ops->container_cgroup = container_cgroup; -+ } - return true; - } + _exit(payload->exec_function(payload->exec_payload)); diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index fea0f59..6134ed3 100644 +index 43ef067..325e0c2 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c -@@ -4220,6 +4220,85 @@ int lxc_setup(struct lxc_handler *handler) +@@ -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 -+ struct lxc_list *iterator; -+ char *keep_entry; -+ int i, capid; -+ int numcaps = lxc_caps_last_cap() + 1; ++ 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; @@ -143,8 +113,12 @@ index fea0f59..6134ed3 100644 + return -1; + + // caplist[i] is 1 if we keep capability i -+ int *caplist = alloca(numcaps * sizeof(int)); -+ memset(caplist, 0, numcaps * sizeof(int)); ++ 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) { + @@ -163,9 +137,10 @@ index fea0f59..6134ed3 100644 + if (capid == -2) + continue; + -+ if (capid < 0) { ++ if (capid < 0) { + ERROR("unknown capability %s", keep_entry); -+ return -1; ++ ret = -1; ++ goto out; + } + + DEBUG("keep capability '%s' (%d)", keep_entry, capid); @@ -179,64 +154,72 @@ index fea0f59..6134ed3 100644 + 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_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; ++ 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 | __DEF_CAP_TO_MASK(i); -+ cap_data[CAP_TO_INDEX(i)].permitted = cap_data[CAP_TO_INDEX(i)].permitted | __DEF_CAP_TO_MASK(i); -+ cap_data[CAP_TO_INDEX(i)].inheritable = cap_data[CAP_TO_INDEX(i)].inheritable | __DEF_CAP_TO_MASK(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"); -+ return -1; ++ SYSERROR("Failed to set capabilitys"); ++ ret = -1; ++ goto out; + } + +#endif -+ return 0; ++ ++out: ++ free(caplist); ++ return ret; +} ++#endif + - struct oci_hook_conf { - defs_hook *ocihook; - + 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 44feb98..b92c48e 100644 +index 879e427..7b6fd3b 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h -@@ -498,6 +498,7 @@ int lxc_clear_init_args(struct lxc_conf *lxc_conf); +@@ -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); - - /* isulad add end */ - + 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 040909c..357e81d 100644 +index e2311ec..bb2e74a 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c -@@ -1411,6 +1411,11 @@ static int do_start(void *data) +@@ -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. */ -@@ -1448,6 +1453,17 @@ static int do_start(void *data) +@@ -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"); @@ -247,10 +230,11 @@ index 040909c..357e81d 100644 + SYSERROR("Failed to drop caps"); + goto out_warn_father; + } ++#endif + - /* After this call, we are in error because this ops should not return - * as it execs. - */ + 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/0027-fix-bug-of-memory-leak.patch b/0027-fix-bug-of-memory-leak.patch deleted file mode 100644 index a5875ce..0000000 --- a/0027-fix-bug-of-memory-leak.patch +++ /dev/null @@ -1,78 +0,0 @@ -From 9b7c539dec8af7c01abbcba4333b5f14e23c3b3b Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Mon, 14 Jan 2019 21:24:25 +0800 -Subject: [PATCH 027/140] fix bug of memory leak - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 11 +++++++++++ - src/lxc/conf.h | 1 + - src/lxc/lxccontainer.c | 11 +++++++---- - 3 files changed, 19 insertions(+), 4 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 6a14de1..e076bf2 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4822,6 +4822,16 @@ int lxc_clear_procs(struct lxc_conf *c, const char *key) - return 0; - } - -+int lxc_clear_namespace(struct lxc_conf *c) -+{ -+ int i; -+ for (i = 0; i < LXC_NS_MAX; i++) { -+ free(c->ns_share[i]); -+ c->ns_share[i] = NULL; -+ } -+ return 0; -+} -+ - int lxc_clear_groups(struct lxc_conf *c) - { - struct lxc_list *it, *next; -@@ -5036,6 +5046,7 @@ void lxc_conf_free(struct lxc_conf *conf) - lxc_clear_limits(conf, "lxc.prlimit"); - lxc_clear_sysctls(conf, "lxc.sysctl"); - lxc_clear_procs(conf, "lxc.proc"); -+ lxc_clear_namespace(conf); - free(conf->cgroup_meta.dir); - free(conf->cgroup_meta.controllers); - /* isulad add begin */ -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 2263e47..44feb98 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -491,6 +491,7 @@ extern int setup_sysctl_parameters(struct lxc_list *sysctls); - extern int lxc_clear_sysctls(struct lxc_conf *c, const char *key); - extern int setup_proc_filesystem(struct lxc_list *procs, pid_t pid); - extern int lxc_clear_procs(struct lxc_conf *c, const char *key); -+extern int lxc_clear_namespace(struct lxc_conf *c); - - /* isulad add begin */ - int lxc_clear_init_args(struct lxc_conf *lxc_conf); -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 81c0ec3..e6272fc 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -5418,10 +5418,13 @@ int list_active_containers(const char *lxcpath, char ***nret, - continue; - } - -- if (array_contains(&ct_name, p, ct_name_cnt)) { -- if (is_hashed) -- free(p); -- continue; -+ -+ if (ct_name && ct_name_cnt) { -+ if (array_contains(&ct_name, p, ct_name_cnt)) { -+ if (is_hashed) -+ free(p); -+ continue; -+ } - } - - if (!add_to_array(&ct_name, p, ct_name_cnt)) { --- -1.8.3.1 - diff --git a/0034-some-small-bugfix.patch b/0028-Supporting-workdir-configuration.patch similarity index 54% rename from 0034-some-small-bugfix.patch rename to 0028-Supporting-workdir-configuration.patch index 9db4036..d681a71 100644 --- a/0034-some-small-bugfix.patch +++ b/0028-Supporting-workdir-configuration.patch @@ -1,95 +1,106 @@ -From 193bc24b1974e5149cf751ae9c50383b9c1a3999 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Tue, 15 Jan 2019 20:39:11 +0800 -Subject: [PATCH 034/140] some small bugfix +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 -1. support new container without load config to save time -2. try to create workdir if not exist - -Signed-off-by: LiFeng +Signed-off-by: wujing --- - src/lxc/attach.c | 16 ++++++++++++++++ - src/lxc/lxc.h | 5 +++++ - src/lxc/lxccontainer.c | 21 +++++++++++++++++---- - src/lxc/lxccontainer.h | 12 ++++++++++++ - src/lxc/start.c | 12 ++++++++---- - 5 files changed, 58 insertions(+), 8 deletions(-) + 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 e6e4b0d..8cbbf96 100644 +index 231fa5f..cb480ed 100644 --- a/src/lxc/attach.c +++ b/src/lxc/attach.c -@@ -806,6 +806,22 @@ static int attach_child_main(struct attach_clone_payload *payload) +@@ -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 && init_ctx->container && init_ctx->container->lxc_conf && init_ctx->container->lxc_conf->init_cwd) { ++ 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) { ++ /* 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)) { ++ } ++ 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 687b4b2..5df5080 100644 +index 630eff0..99fd422 100644 --- a/src/lxc/lxc.h +++ b/src/lxc/lxc.h -@@ -104,6 +104,11 @@ extern lxc_state_t lxc_state(const char *name, const char *lxcpath); +@@ -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. */ - extern int lxc_container_get(struct lxc_container *c); diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 38059fa..e99c41c 100644 +index 9b3ab75..ce2b2bf 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c -@@ -5133,7 +5133,7 @@ static bool do_lxcapi_clean_container_resource(struct lxc_container *c, pid_t pi +@@ -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 - WRAP_API_1(bool, lxcapi_clean_container_resource, pid_t) - --struct lxc_container *lxc_container_new(const char *name, const char *configpath) ++#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; -@@ -5190,9 +5190,11 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath +@@ -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 (file_exists(c->configfile) && !lxcapi_load_config(c, NULL)) { -- fprintf(stderr, "Failed to load config for %s\n", name); -- goto err; -+ if (load_config) { -+ if (file_exists(c->configfile) && !lxcapi_load_config(c, NULL)) { ++ 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 - if (ongoing_create(c) == 2) { -@@ -5274,6 +5276,17 @@ err: + 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) +{ @@ -100,18 +111,21 @@ index 38059fa..e99c41c 100644 +{ + 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 679ca42..a00e0ec 100644 +index f1621f9..e69be8f 100644 --- a/src/lxc/lxccontainer.h +++ b/src/lxc/lxccontainer.h -@@ -1040,6 +1040,18 @@ struct lxc_console_log { +@@ -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. @@ -122,34 +136,32 @@ index 679ca42..a00e0ec 100644 + * \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. * - * \param c Container. diff --git a/src/lxc/start.c b/src/lxc/start.c -index 08d753a..040909c 100644 +index bb2e74a..70ce1bd 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c -@@ -1364,10 +1364,14 @@ static int do_start(void *data) - setsid(); +@@ -1609,6 +1609,16 @@ static int do_start(void *data) + close_prot_errno_disarm(devnull_fd); if (handler->conf->init_cwd) { -- ret = chdir(handler->conf->init_cwd); -- if (ret < 0) { -- SYSERROR("Could not change directory to \"%s\"", -- handler->conf->init_cwd); -+ /* isulad: try to craete workdir if not exist */ ++#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; + } -+ if (chdir(handler->conf->init_cwd)) { -+ SYSERROR("Could not change directory to \"%s\"", handler->conf->init_cwd); - 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/0028-support-rootfs-for-container.patch b/0028-support-rootfs-for-container.patch deleted file mode 100644 index df255ec..0000000 --- a/0028-support-rootfs-for-container.patch +++ /dev/null @@ -1,123 +0,0 @@ -From 0d83272984a667bcd530553ad4fb7ca0805ceb59 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Tue, 15 Jan 2019 09:45:44 +0800 -Subject: [PATCH 028/140] support rootfs / for container - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++-------- - 1 file changed, 53 insertions(+), 8 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index e076bf2..f429491 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -888,9 +888,6 @@ static int lxc_setup_ttys(struct lxc_conf *conf) - char *ttydir = ttys->dir; - char path[PATH_MAX], lxcpath[PATH_MAX]; - -- if (!conf->rootfs.path) -- return 0; -- - for (i = 0; i < ttys->max; i++) { - struct lxc_terminal_info *tty = &ttys->tty[i]; - -@@ -1394,7 +1391,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; - unsigned long flags, mntflags, pflags; - char *mntdata; - -@@ -1405,6 +1402,17 @@ static int lxc_mount_rootfs(struct lxc_conf *conf) - return -1; - } - -+ // isulad: bind mount / to rootfs.mount. then we can do pivot root even if we use / as root. -+ if (!access(rootfs->mount, F_OK)) { -+ rootfs->path = strdup("/"); -+ if (mount("/", rootfs->mount, NULL, MS_BIND, 0)) { -+ SYSERROR("Failed to mount / to %s.", rootfs->mount); -+ return -1; -+ } -+ } else { -+ INFO("Use '/' as container rootfs, but no valid mountpoint provided. Something may go wrong."); -+ } -+ - return 0; - } - -@@ -3854,6 +3862,35 @@ static int setup_populate_devs(const struct lxc_rootfs *rootfs, struct lxc_list - return 0; - } - -+// isulad: setup rootfs mountopts -+static int setup_rootfs_mountopts(const struct lxc_rootfs *rootfs) -+{ -+ unsigned long mntflags, pflags; -+ char *mntdata; -+ -+ // only remount / when container shares rootfs with host. -+ if(!rootfs || !rootfs->path || strcmp(rootfs->path, "/")) -+ return 0; -+ if (!rootfs->options) -+ return 0; -+ -+ if (parse_mntopts(rootfs->options, &mntflags, &pflags, &mntdata) < 0) { -+ free(mntdata); -+ return -1; -+ } -+ free(mntdata); -+ -+ if (mntflags & MS_RDONLY) { -+ DEBUG("remounting / as readonly"); -+ if (mount("/", "/", NULL, MS_BIND |MS_REMOUNT| MS_RDONLY, 0)) { -+ SYSERROR("Failed to make / readonly."); -+ return -1; -+ } -+ } -+ return 0; -+} -+ -+ - int lxc_setup(struct lxc_handler *handler) - { - int ret; -@@ -4020,12 +4057,20 @@ int lxc_setup(struct lxc_handler *handler) - return -1; - } - -- ret = lxc_setup_devpts(lxc_conf); -- if (ret < 0) { -- ERROR("Failed to setup new devpts instance"); -+ /* isulad: remount rootfs readonly if necessary */ -+ if (setup_rootfs_mountopts(&lxc_conf->rootfs)) { -+ ERROR("failed to set rootfs for '%s'", name); - return -1; - } - -+ if (lxc_conf->rootfs.path) { -+ ret = lxc_setup_devpts(lxc_conf); -+ if (ret < 0) { -+ ERROR("Failed to setup new devpts instance"); -+ return -1; -+ } -+ } -+ - ret = lxc_create_ttys(handler); - if (ret < 0) - return -1; -@@ -4184,7 +4229,7 @@ static char **merge_ocihook_env(char **oldenvs, size_t env_len, size_t *merge_en - return result; - } - --static struct lxc_popen_FILE *lxc_popen_ocihook(char *commandpath, char **args, int args_len, -+static struct lxc_popen_FILE *lxc_popen_ocihook(char *commandpath, char **args, int args_len, - char **envs, int env_len, const char *instr) - { - int ret; --- -1.8.3.1 - diff --git a/0029-Supporting-additional-groups-configuration.patch b/0029-Supporting-additional-groups-configuration.patch new file mode 100644 index 0000000..e6bb049 --- /dev/null +++ b/0029-Supporting-additional-groups-configuration.patch @@ -0,0 +1,103 @@ +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 new file mode 100644 index 0000000..89205c8 --- /dev/null +++ b/0030-set-negative-files.limit-value-to-max.patch @@ -0,0 +1,71 @@ +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-clean-add-clean-resources-api.patch b/0031-clean-add-clean-resources-api.patch deleted file mode 100644 index b85707d..0000000 --- a/0031-clean-add-clean-resources-api.patch +++ /dev/null @@ -1,488 +0,0 @@ -From 97a9081b91b573df9c381331fde2dc6ec7f257e6 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Tue, 15 Jan 2019 04:20:57 -0500 -Subject: [PATCH 031/140] clean: add clean resources api - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 124 +++++++++++++++++------------------------ - src/lxc/cgroups/cgroup.c | 2 +- - src/lxc/cgroups/cgroup.h | 4 +- - src/lxc/lxccontainer.c | 18 ++++++ - src/lxc/lxccontainer.h | 10 ++++ - src/lxc/start.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/start.h | 4 ++ - 7 files changed, 228 insertions(+), 75 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 7f2a200..8b913a6 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1050,12 +1050,15 @@ static int cgroup_rmdir(struct hierarchy **hierarchies, - int ret; - struct hierarchy *h = hierarchies[i]; - -- 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 = recursive_destroy(h->container_full_path); -- if (ret < 0) -- WARN("Failed to destroy \"%s\"", h->container_full_path); -+ if (ret < 0) { -+ ERROR("Failed to destroy \"%s\"", h->container_full_path); -+ return -1; -+ } - - free(h->container_full_path); - h->container_full_path = NULL; -@@ -1102,7 +1105,8 @@ static int cgroup_rmdir_wrapper(void *data) - return cgroup_rmdir(arg->hierarchies, arg->container_cgroup); - } - --__cgfsng_ops static void cgfsng_payload_destroy(struct cgroup_ops *ops, -+/* isulad: fix return bool instead of void*/ -+__cgfsng_ops static bool cgfsng_payload_destroy(struct cgroup_ops *ops, - struct lxc_handler *handler) - { - int ret; -@@ -1113,6 +1117,8 @@ __cgfsng_ops static void cgfsng_payload_destroy(struct cgroup_ops *ops, - wrap.hierarchies = ops->hierarchies; - wrap.conf = handler->conf; - -+ INFO("cgfsng_payload_destroy.%p, %s", ops->hierarchies, ops->container_cgroup); -+ - if (handler->conf && !lxc_list_empty(&handler->conf->id_map)) - ret = userns_exec_1(handler->conf, cgroup_rmdir_wrapper, &wrap, - "cgroup_rmdir_wrapper"); -@@ -1120,8 +1126,10 @@ __cgfsng_ops static void cgfsng_payload_destroy(struct cgroup_ops *ops, - ret = cgroup_rmdir(ops->hierarchies, ops->container_cgroup); - if (ret < 0) { - WARN("Failed to destroy cgroups"); -- return; -+ return false; - } -+ -+ return true; - } - - static bool cg_unified_create_cgroup(struct hierarchy *h, char *cgname) -@@ -1232,12 +1240,20 @@ static bool create_path_for_hierarchy(struct hierarchy *h, char *cgname) - { - int ret; - -+ h->container_full_path = must_make_path(h->mountpoint, h->container_base_path, cgname, NULL); -+ -+ if (file_exists(h->container_full_path)) { // it must not already exist -+ ERROR("Cgroup path \"%s\" already exist.", h->container_full_path); -+ //lxc_write_error_message(errfd, "%s:%d: Cgroup path \"%s\" already exist.", -+ // __FILE__, __LINE__, h->fullcgpath); -+ return false; -+ } -+ - if (!cg_legacy_handle_cpuset_hierarchy(h, cgname)) { - ERROR("Failed to handle legacy cpuset controller"); - return false; - } - -- h->container_full_path = must_make_path(h->mountpoint, h->container_base_path, cgname, NULL); - ret = mkdir_eexist_on_last(h->container_full_path, 0755); - if (ret < 0) { - ERROR("Failed to create cgroup \"%s\"", h->container_full_path); -@@ -1259,83 +1275,26 @@ static void remove_path_for_hierarchy(struct hierarchy *h, char *cgname) - h->container_full_path = NULL; - } - --/* Try to create the same cgroup in all hierarchies. Start with cgroup_pattern; -- * next cgroup_pattern-1, -2, ..., -999. -- */ -+/* isulad: create hierarchies path, if fail, return the error */ - __cgfsng_ops static bool cgfsng_payload_create(struct cgroup_ops *ops, - struct lxc_handler *handler) - { - int i; -- size_t len; -- char *container_cgroup, *offset, *tmp; -- int idx = 0; -- struct lxc_conf *conf = handler->conf; -- -- if (ops->container_cgroup) { -- WARN("cgfsng_create called a second time: %s", ops->container_cgroup); -- return false; -- } -+ char *container_cgroup = ops->container_cgroup; - -- if (!conf) -- return false; -- -- if (conf->cgroup_meta.dir) -- tmp = lxc_string_join("/", (const char *[]){conf->cgroup_meta.dir, handler->name, NULL}, false); -- else -- tmp = lxc_string_replace("%n", handler->name, ops->cgroup_pattern); -- if (!tmp) { -- ERROR("Failed expanding cgroup name pattern"); -+ if (!container_cgroup) { -+ ERROR("cgfsng_create container_cgroup is invalid"); - return false; - } - -- len = strlen(tmp) + 5; /* leave room for -NNN\0 */ -- container_cgroup = must_realloc(NULL, len); -- (void)strlcpy(container_cgroup, tmp, len); -- free(tmp); -- offset = container_cgroup + len - 5; -- --again: -- if (idx == 1000) { -- ERROR("Too many conflicting cgroup names"); -- goto out_free; -- } -- -- if (idx) { -- int ret; -- -- ret = snprintf(offset, 5, "-%d", idx); -- if (ret < 0 || (size_t)ret >= 5) { -- FILE *f = fopen("/dev/null", "w"); -- if (f) { -- fprintf(f, "Workaround for GCC7 bug: " -- "https://gcc.gnu.org/bugzilla/" -- "show_bug.cgi?id=78969"); -- fclose(f); -- } -- } -- } -- - for (i = 0; ops->hierarchies[i]; i++) { - if (!create_path_for_hierarchy(ops->hierarchies[i], container_cgroup)) { -- int j; -- ERROR("Failed to create cgroup \"%s\"", ops->hierarchies[i]->container_full_path); -- free(ops->hierarchies[i]->container_full_path); -- ops->hierarchies[i]->container_full_path = NULL; -- for (j = 0; j < i; j++) -- remove_path_for_hierarchy(ops->hierarchies[j], container_cgroup); -- idx++; -- goto again; -+ SYSERROR("Failed to create %s", ops->hierarchies[i]->container_full_path); -+ return false; - } - } - -- ops->container_cgroup = container_cgroup; -- - return true; -- --out_free: -- free(container_cgroup); -- -- return false; - } - - __cgfsng_ops static bool cgfsng_payload_enter(struct cgroup_ops *ops, pid_t pid) -@@ -2701,9 +2660,15 @@ static bool cg_init(struct cgroup_ops *ops) - return cg_hybrid_init(ops); - } - --__cgfsng_ops static bool cgfsng_data_init(struct cgroup_ops *ops) -+__cgfsng_ops static bool cgfsng_data_init(struct cgroup_ops *ops, struct lxc_handler *handler) - { - const char *cgroup_pattern; -+ char *container_cgroup, *tmp; -+ struct lxc_conf *conf = handler->conf; -+ size_t len; -+ -+ if (!conf) -+ return false; - - /* copy system-wide cgroup information */ - cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern"); -@@ -2714,6 +2679,22 @@ __cgfsng_ops static bool cgfsng_data_init(struct cgroup_ops *ops) - } - ops->cgroup_pattern = must_copy_string(cgroup_pattern); - -+ /* isulad: init ops->container_cgroup here instead of in cgfsng_payload_create*/ -+ if (conf->cgroup_meta.dir) -+ tmp = lxc_string_join("/", (const char *[]){conf->cgroup_meta.dir, handler->name, NULL}, false); -+ else -+ tmp = lxc_string_replace("%n", handler->name, ops->cgroup_pattern); -+ if (!tmp) { -+ ERROR("Failed expanding cgroup name pattern"); -+ return false; -+ } -+ -+ len = strlen(tmp) + 1; -+ container_cgroup = must_realloc(NULL, len); -+ (void)strlcpy(container_cgroup, tmp, len); -+ free(tmp); -+ ops->container_cgroup = container_cgroup; -+ - return true; - } - -@@ -2735,7 +2716,6 @@ struct cgroup_ops *cgfsng_ops_init(void) - - cgfsng_ops->data_init = cgfsng_data_init; - cgfsng_ops->destroy = cgfsng_payload_destroy; -- cgfsng_ops->destroy = cgfsng_payload_destroy; - cgfsng_ops->payload_create = cgfsng_payload_create; - cgfsng_ops->payload_enter = cgfsng_payload_enter; - cgfsng_ops->escape = cgfsng_escape; -diff --git a/src/lxc/cgroups/cgroup.c b/src/lxc/cgroups/cgroup.c -index 04e0311..8e7aef9 100644 ---- a/src/lxc/cgroups/cgroup.c -+++ b/src/lxc/cgroups/cgroup.c -@@ -50,7 +50,7 @@ struct cgroup_ops *cgroup_init(struct lxc_handler *handler) - return NULL; - } - -- if (!cgroup_ops->data_init(cgroup_ops)) -+ if (!cgroup_ops->data_init(cgroup_ops, handler)) - return NULL; - - TRACE("Initialized cgroup driver %s", cgroup_ops->driver); -diff --git a/src/lxc/cgroups/cgroup.h b/src/lxc/cgroups/cgroup.h -index ba4c153..fa4871e 100644 ---- a/src/lxc/cgroups/cgroup.h -+++ b/src/lxc/cgroups/cgroup.h -@@ -123,8 +123,8 @@ struct cgroup_ops { - */ - cgroup_layout_t cgroup_layout; - -- bool (*data_init)(struct cgroup_ops *ops); -- void (*destroy)(struct cgroup_ops *ops, struct lxc_handler *handler); -+ bool (*data_init)(struct cgroup_ops *ops, struct lxc_handler *handler); -+ bool (*destroy)(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, pid_t pid); - const char *(*get_cgroup)(struct cgroup_ops *ops, const char *controller); -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index beae459..38059fa 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -5116,6 +5116,23 @@ static bool do_lxcapi_set_start_timeout(struct lxc_container *c, unsigned int s - - WRAP_API_1(bool, lxcapi_set_start_timeout, 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) -+ - struct lxc_container *lxc_container_new(const char *name, const char *configpath) - { - struct lxc_container *c; -@@ -5248,6 +5265,7 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath - c->set_terminal_init_fifos = lxcapi_set_terminal_default_fifos; - c->set_container_info_file = lxcapi_set_container_info_file; - c->set_start_timeout = lxcapi_set_start_timeout; -+ c->clean_container_resource = lxcapi_clean_container_resource; - /* isulad add end */ - return c; - -diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index 77de704..679ca42 100644 ---- a/src/lxc/lxccontainer.h -+++ b/src/lxc/lxccontainer.h -@@ -896,6 +896,16 @@ struct lxc_container { - * \return \c true on success, else \c false. - */ - bool (*set_start_timeout)(struct lxc_container *c, unsigned int start_timeout); -+ -+ /*! 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); - }; - - /*! -diff --git a/src/lxc/start.c b/src/lxc/start.c -index f7be9e4..08d753a 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1895,6 +1895,11 @@ static int lxc_spawn(struct lxc_handler *handler) - if (ret < 0) - SYSERROR("Failed to set environment variable: LXC_PID=%s", pidstr); - -+ 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); -+ } -+ - /* Run any host-side start hooks */ - ret = run_lxc_hooks(name, "start-host", conf, NULL); - if (ret < 0) { -@@ -2289,3 +2294,139 @@ static bool do_destroy_container(struct lxc_handler *handler) - - return storage_destroy(handler->conf); - } -+ -+/*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) -+ 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(handler); -+ 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: set env for clean resources */ -+static void clean_resource_set_env(struct lxc_handler *handler) -+{ -+ const char *name = handler->name; -+ struct lxc_conf *conf = handler->conf; -+ char pidstr[20]; -+ -+ /* Start of environment variable setup for hooks. */ -+ if (name && setenv("LXC_NAME", name, 1)) -+ SYSERROR("Failed to set environment variable: LXC_NAME=%s.", name); -+ -+ if (conf->rcfile && setenv("LXC_CONFIG_FILE", conf->rcfile, 1)) -+ SYSERROR("Failed to set environment variable: LXC_CONFIG_FILE=%s.", conf->rcfile); -+ -+ if (conf->rootfs.mount && setenv("LXC_ROOTFS_MOUNT", conf->rootfs.mount, 1)) -+ SYSERROR("Failed to set environment variable: LXC_ROOTFS_MOUNT=%s.", conf->rootfs.mount); -+ -+ if (conf->rootfs.path && setenv("LXC_ROOTFS_PATH", conf->rootfs.path, 1)) -+ SYSERROR("Failed to set environment variable: LXC_ROOTFS_PATH=%s.", conf->rootfs.path); -+ -+ if (conf->console.path && setenv("LXC_CONSOLE", conf->console.path, 1)) -+ SYSERROR("Failed to set environment variable: LXC_CONSOLE=%s.", conf->console.path); -+ -+ if (conf->console.log_path && setenv("LXC_CONSOLE_LOGPATH", conf->console.log_path, 1)) -+ SYSERROR("Failed to set environment variable: LXC_CONSOLE_LOGPATH=%s.", conf->console.log_path); -+ -+ if (setenv("LXC_CGNS_AWARE", "1", 1)) -+ SYSERROR("Failed to set environment variable LXC_CGNS_AWARE=1."); -+ -+ -+ snprintf(pidstr, 20, "%d", handler->pid); -+ if (setenv("LXC_PID", pidstr, 1)) -+ SYSERROR("Failed to set environment variable: LXC_PID=%s.", pidstr); -+ -+ 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); -+ } -+ /* End of environment variable setup for hooks. */ -+} -+ -+/*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; -+ } -+ -+ clean_resource_set_env(handler); -+ -+ char* oci_hook_args[1]; -+ oci_hook_args[0] = alloca(strlen(handler->lxcpath) + 1); -+ (void)strlcpy(oci_hook_args[0], handler->lxcpath, strlen(handler->lxcpath)); -+ -+ if (run_lxc_hooks(handler->name, "oci-poststop", handler->conf, oci_hook_args)) { -+ ERROR("Failed to run lxc.hook.post-stop for container \"%s\".", handler->name); -+ ret = -1; -+ } -+ -+retry: -+ if (!handler->cgroup_ops->destroy(handler->cgroup_ops, handler)) { -+ if (retry_count < max_retry) { -+ usleep(100 * 1000); /* 100 millisecond */ -+ retry_count++; -+ goto retry; -+ } -+ ERROR("Failed to destroy cgroup for container \"%s\".", handler->name); -+ ret = -1; -+ } -+ -+ -+out_fini_handler: -+ lxc_free_handler(handler); -+out: -+ return ret; -+} -+ -diff --git a/src/lxc/start.h b/src/lxc/start.h -index a96f2ae..1d84325 100644 ---- a/src/lxc/start.h -+++ b/src/lxc/start.h -@@ -180,4 +180,8 @@ extern int __lxc_start(const char *name, struct lxc_handler *handler, - - extern int resolve_clone_flags(struct lxc_handler *handler); - -+/*isulad: do_lxcapi_clean_resource */ -+extern int do_lxcapi_clean_resource(char *name, char *lxcpath, struct lxc_conf *conf, pid_t pid); -+ -+ - #endif --- -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 new file mode 100644 index 0000000..c211fa2 --- /dev/null +++ b/0031-head-file-remove-macro-HAVE_ISULAD-in-installed-head.patch @@ -0,0 +1,115 @@ +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-Drop-all-caps-when-cap.keep-ISULAD_KEEP_NONE.patch b/0032-Drop-all-caps-when-cap.keep-ISULAD_KEEP_NONE.patch deleted file mode 100644 index d6f35d3..0000000 --- a/0032-Drop-all-caps-when-cap.keep-ISULAD_KEEP_NONE.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 9a8aa1961330227da81a6081db7254441afb3031 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Tue, 15 Jan 2019 05:39:39 -0500 -Subject: [PATCH 032/140] Drop all caps when cap.keep=ISULAD_KEEP_NONE - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 88763ee..54b967b 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -2805,6 +2805,15 @@ static int dropcaps_except(struct lxc_list *caps) - 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; --- -1.8.3.1 - diff --git a/0128-link-proc-mounts-to-etc-mtab.patch b/0032-link-proc-mounts-to-etc-mtab.patch similarity index 51% rename from 0128-link-proc-mounts-to-etc-mtab.patch rename to 0032-link-proc-mounts-to-etc-mtab.patch index f6ec562..00a0a47 100644 --- a/0128-link-proc-mounts-to-etc-mtab.patch +++ b/0032-link-proc-mounts-to-etc-mtab.patch @@ -1,20 +1,20 @@ -From 2bca52aab48cf7337df9dfb64d20f55ceac3a9ff Mon Sep 17 00:00:00 2001 +From e86ebe923f1ecc072d8a99949871b46fe8188ac9 Mon Sep 17 00:00:00 2001 From: wujing -Date: Tue, 10 Dec 2019 21:28:47 +0800 -Subject: [PATCH 128/140] link /proc/mounts to /etc/mtab +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 | 39 ++++++++++++++++++++++++++++++++++++++- - 1 file changed, 38 insertions(+), 1 deletion(-) + src/lxc/conf.c | 37 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 37 insertions(+) diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 21ec340..b66e7bc 100644 +index 325e0c2..6856b1d 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c -@@ -4101,6 +4101,37 @@ static int setup_rootfs_mountopts(const struct lxc_rootfs *rootfs) - return 0; - } +@@ -3977,6 +3977,37 @@ struct oci_hook_conf { + int which; + }; +static int create_mtab_link() +{ @@ -47,31 +47,22 @@ index 21ec340..b66e7bc 100644 + return 0; +} + - int lxc_setup(struct lxc_handler *handler) - { - int ret; -@@ -4331,7 +4362,7 @@ int lxc_setup(struct lxc_handler *handler) + 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: system container, remount /proc/sys/xxx by mount_list -+ // 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)) { -@@ -4341,6 +4372,12 @@ 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; + } -+ + #endif + if (!lxc_list_empty(&lxc_conf->keepcaps)) { - if (!lxc_list_empty(&lxc_conf->caps)) { - ERROR("Container requests lxc.cap.drop and " -- 1.8.3.1 diff --git a/0033-build-add-secure-build-flags.patch b/0033-build-add-secure-build-flags.patch new file mode 100644 index 0000000..15e3f3d --- /dev/null +++ b/0033-build-add-secure-build-flags.patch @@ -0,0 +1,423 @@ +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/0029-add-start-timeout-to-limit-start-time.patch b/0034-support-timeout.patch similarity index 32% rename from 0029-add-start-timeout-to-limit-start-time.patch rename to 0034-support-timeout.patch index fe5ad41..442e6e9 100644 --- a/0029-add-start-timeout-to-limit-start-time.patch +++ b/0034-support-timeout.patch @@ -1,108 +1,336 @@ -From be744bf5f224a4a14790c8f6a37c5335590daaf6 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 14 Jan 2019 21:38:07 -0500 -Subject: [PATCH 029/140] add start timeout to limit start time +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: LiFeng +Signed-off-by: haozi007 --- - src/lxc/conf.c | 6 +-- - src/lxc/execute.c | 4 +- - src/lxc/lxc.h | 8 ++-- - src/lxc/lxccontainer.c | 21 ++++++++- - src/lxc/lxccontainer.h | 16 +++++++ - src/lxc/start.c | 106 +++++++++++++++++++++++++++++++++++++++++++--- - src/lxc/start.h | 6 +-- - src/lxc/tools/arguments.h | 2 + - src/lxc/tools/lxc_start.c | 26 ++++++++++++ - 9 files changed, 175 insertions(+), 20 deletions(-) + 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/conf.c b/src/lxc/conf.c -index f429491..439353b 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4381,14 +4381,12 @@ void* wait_ocihook_timeout(void *arg) - - if (alive) { - ERROR("%s:%d: running %s hook caused \"hook ran past specified timeout of %.1fs\"", -- __FILE__, __LINE__, -- (conf->which == LXCHOOK_START_HOST) ? "prestart" : lxchook_names[conf->which], -+ __FILE__, __LINE__, lxchook_names[conf->which], - (double)conf->timeout); - - if (conf->errfd >= 0) { - lxc_write_error_message(conf->errfd, "%s:%d: running %s hook caused \"hook ran past specified timeout of %.1fs\"", -- __FILE__, __LINE__, -- (conf->which == LXCHOOK_START_HOST) ? "prestart" : lxchook_names[conf->which], -+ __FILE__, __LINE__, lxchook_names[conf->which], - (double)conf->timeout); +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 45ca67e..d388e63 100644 +index 7dd8358..59ff604 100644 --- a/src/lxc/execute.c +++ b/src/lxc/execute.c -@@ -111,12 +111,12 @@ static struct lxc_operations execute_start_ops = { +@@ -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) -+ bool daemonize, int *error_num, unsigned int start_timeout) + bool daemonize, int *error_num) ++#endif { ++ struct execute_args args = {.argv = argv, .quiet = quiet}; TRACE("Doing lxc_execute"); handler->conf->is_execute = true; - return __lxc_start(name, handler, &execute_start_ops, &args, lxcpath, -- daemonize, error_num); ++#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 22e3509..687b4b2 100644 +index 99fd422..ec2feaa 100644 --- a/src/lxc/lxc.h +++ b/src/lxc/lxc.h -@@ -55,7 +55,7 @@ struct lxc_handler; +@@ -32,9 +32,14 @@ struct lxc_handler; + * @daemonize : whether or not the container is daemonized + * Returns 0 on success, < 0 otherwise */ - extern int lxc_start(const char *name, char *const argv[], - struct lxc_handler *handler, const char *lxcpath, -- bool daemonize, int *error_num); -+ bool daemonize, int *error_num, unsigned int start_timeout); - ++#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 -@@ -66,9 +66,9 @@ extern int lxc_start(const char *name, char *const argv[], + * @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 */ --extern int lxc_execute(const char *name, char *const argv[], int quiet, -- struct lxc_handler *handler, const char *lxcpath, -- bool daemonize, int *error_num); -+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); ++#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 e6272fc..beae459 100644 +index ce2b2bf..f622a63 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c -@@ -1169,10 +1169,10 @@ reboot: +@@ -1234,17 +1234,25 @@ reboot: + 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->daemonize, &c->error_num, c->start_timeout); - else - ret = lxc_start(c->name, argv, 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) { - INFO("Container requested reboot"); -@@ -5100,6 +5100,22 @@ 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 *) +@@ -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) +{ @@ -119,24 +347,24 @@ index e6272fc..beae459 100644 + +WRAP_API_1(bool, lxcapi_set_start_timeout, unsigned int) + - struct lxc_container *lxc_container_new(const char *name, const char *configpath) - { - struct lxc_container *c; -@@ -5231,6 +5247,7 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath - /* isulad add begin */ - c->set_terminal_init_fifos = lxcapi_set_terminal_default_fifos; - c->set_container_info_file = lxcapi_set_container_info_file; + #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; - /* isulad add end */ + #endif return c; diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index 5d23cc7..77de704 100644 +index 6ede70c..2951ac7 100644 --- a/src/lxc/lxccontainer.h +++ b/src/lxc/lxccontainer.h -@@ -94,6 +94,12 @@ struct lxc_container { - */ - char *exit_fifo; +@@ -125,6 +125,12 @@ struct lxc_container { + * */ + char *ocihookfile; + /*! isulad: + * \private @@ -145,12 +373,12 @@ index 5d23cc7..77de704 100644 + unsigned int start_timeout; + /*! - * \private - * Container semaphore lock. -@@ -880,6 +886,16 @@ struct lxc_container { + * \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 (*set_container_info_file) (struct lxc_container *c, const char *info_file); + 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 @@ -165,16 +393,13 @@ index 5d23cc7..77de704 100644 /*! diff --git a/src/lxc/start.c b/src/lxc/start.c -index 63f5af8..f7be9e4 100644 +index 70ce1bd..0bc1143 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c -@@ -93,7 +93,22 @@ extern void mod_all_rdeps(struct lxc_container *c, bool inc); - static bool do_destroy_container(struct lxc_handler *handler); - static int lxc_rmdir_onedev_wrapper(void *data); - static void lxc_destroy_container_on_signal(struct lxc_handler *handler, -- const char *name); -+ const char *name); -+ +@@ -880,6 +880,21 @@ out_restore_sigmask: + } + + #ifdef HAVE_ISULAD +/* isulad: start timeout thread */ +typedef enum { + START_INIT, @@ -189,41 +414,41 @@ index 63f5af8..f7be9e4 100644 + unsigned int timeout; + int errfd; +}; - - static void print_top_failing_dir(const char *path) ++ + void trim_line(char *s) { -@@ -1897,6 +1912,12 @@ static int lxc_spawn(struct lxc_handler *handler) + 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); ++ 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 complete its initialization and wait for it to exec - * or return an error. (The child will never return - * LXC_SYNC_READY_START+1. It will either close the sync pipe, causing -@@ -1936,7 +1957,13 @@ static int lxc_spawn(struct lxc_handler *handler) - ret = run_lxc_hooks(name, "oci-poststart", conf, oci_hook_args); - if (ret < 0) { + /* 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_delete_net; -+ goto out_abort; -+ } + goto out_abort; + } + + if (START_TIMEOUT == global_timeout_state) { -+ //lxc_write_error_message(conf->errpipe[1], "Starting the container \"%s\" timeout.", name); ++ 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); -@@ -1964,12 +1991,71 @@ out_abort: - return -1; +@@ -2368,17 +2396,82 @@ out_sync_fini: } + #ifdef HAVE_ISULAD +/* isulad: start timeout thread function */ +static void* wait_start_timeout(void *arg) +{ @@ -258,7 +483,7 @@ index 63f5af8..f7be9e4 100644 + } + + timeout_conf = malloc(sizeof(struct start_timeout_conf)); -+ if (!timeout_conf) { ++ if (timeout_conf == NULL) { + ERROR("Failed to malloc start timeout conf"); + ret = -1; + goto out; @@ -284,38 +509,49 @@ index 63f5af8..f7be9e4 100644 +} + // isulad: send '128 + signal' if container is killed by signal. - #define ExitSignalOffset 128 + #define EXIT_SIGNAL_OFFSET 128 + #endif - int __lxc_start(const char *name, struct lxc_handler *handler, - struct lxc_operations* ops, void *data, const char *lxcpath, -- bool daemonize, int *error_num) -+ bool daemonize, int *error_num, unsigned int start_timeout) ++ ++#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, exit_code; +- int ret, status; +-#ifdef HAVE_ISULAD +- int exit_code; + #endif ++ int ret, status; + const char *name = handler->name; struct lxc_conf *conf = handler->conf; -@@ -1983,8 +2069,18 @@ int __lxc_start(const char *name, struct lxc_handler *handler, - handler->data = data; + 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_fini_nonet; ++ goto out_abort; + } + } -+ ++#endif if (!attach_block_device(handler->conf)) { ERROR("Failed to attach block device"); -+ ret = -1; - goto out_fini_nonet; - } - -@@ -2114,14 +2210,14 @@ static struct lxc_operations start_ops = { + ret = -1; +@@ -2574,14 +2677,18 @@ static struct lxc_operations start_ops = { }; - int lxc_start(const char *name, char *const argv[], struct lxc_handler *handler, + 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) { @@ -324,90 +560,111 @@ index 63f5af8..f7be9e4 100644 }; TRACE("Doing lxc_start"); -- return __lxc_start(name, handler, &start_ops, &start_arg, lxcpath, daemonize, error_num); -+ return __lxc_start(name, handler, &start_ops, &start_arg, lxcpath, daemonize, error_num, start_timeout); ++#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 f59bf54..a96f2ae 100644 +index 4fc3ff7..cea37bc 100644 --- a/src/lxc/start.h +++ b/src/lxc/start.h -@@ -174,9 +174,9 @@ extern void lxc_fini(const char *name, struct lxc_handler *handler); +@@ -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); --extern int __lxc_start(const char *, struct lxc_handler *, -- struct lxc_operations *, void *, const char *, bool, -- int *); -+extern int __lxc_start(const char *name, struct lxc_handler *handler, ++#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 047e9f1..afab9f5 100644 +index a6d9967..41ea109 100644 --- a/src/lxc/tools/arguments.h +++ b/src/lxc/tools/arguments.h -@@ -65,6 +65,7 @@ struct lxc_arguments { - char *terminal_fifos[2]; /* isulad add, fifos used to redirct stdin/out/err */ - const char *container_info; /* isulad: file used to store pid and ppid info of container */ - const char *exit_monitor_fifo; /* isulad: fifo used to monitor state of monitor process */ +@@ -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 */ - unsigned int ttynum; -@@ -180,6 +181,7 @@ struct lxc_arguments { - #define OPT_OUTPUT_FIFO OPT_USAGE - 8 - #define OPT_CONTAINER_INFO OPT_USAGE - 9 - #define OPT_EXIT_FIFO OPT_USAGE - 10 -+#define OPT_START_TIMEOUT OPT_USAGE - 11 - /* isulad add end*/ - - extern int lxc_arguments_parse(struct lxc_arguments *args, int argc, +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 60c7d70..f37f8a6 100644 +index 72a4494..b430a1e 100644 --- a/src/lxc/tools/lxc_start.c +++ b/src/lxc/tools/lxc_start.c -@@ -40,6 +40,7 @@ - #include - #include - #include -+#include +@@ -29,6 +29,7 @@ + #include "log.h" - #include + #ifdef HAVE_ISULAD ++#include + #include "isulad_utils.h" + #endif -@@ -74,6 +75,7 @@ static const struct option my_longopts[] = { - {"out-fifo", required_argument, 0, OPT_OUTPUT_FIFO}, - {"container-pidfile", required_argument, 0, OPT_CONTAINER_INFO}, - {"exit-fifo", required_argument, 0, OPT_EXIT_FIFO}, +@@ -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}, - /* isulad add end */ + #endif LXC_COMMON_OPTIONS }; -@@ -108,6 +110,18 @@ Options :\n\ - .pidfile = NULL, - }; - -+static 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; -+} -+ - static int my_parser(struct lxc_arguments *args, int c, char *arg) - { - switch (c) { -@@ -158,6 +172,13 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - case OPT_EXIT_FIFO: - args->exit_monitor_fifo = arg; +@@ -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)) { @@ -416,21 +673,54 @@ index 60c7d70..f37f8a6 100644 + } + args->start_timeout = (unsigned int)atoi(arg); + break; + #endif + } - return 0; - } -@@ -341,6 +362,11 @@ int main(int argc, char *argv[]) - c->exit_fifo = strdup(my_args.exit_monitor_fifo); +@@ -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) - if (!c->set_config_item(c, "lxc.console.path", my_args.console)) - goto out; +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 new file mode 100644 index 0000000..20598e1 --- /dev/null +++ b/0035-Seccomp-security-feature-enhanced.patch @@ -0,0 +1,659 @@ +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/0035-lxc-fixup-builds-with-newer-glibc.patch b/0035-lxc-fixup-builds-with-newer-glibc.patch deleted file mode 100644 index 37be0c3..0000000 --- a/0035-lxc-fixup-builds-with-newer-glibc.patch +++ /dev/null @@ -1,25 +0,0 @@ -From cf85b9009e0085ec861d9294e6e04f1baa2ba28d Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Wed, 16 Jan 2019 20:53:25 +0800 -Subject: [PATCH 035/140] lxc: fixup builds with newer glibc - -Signed-off-by: LiFeng ---- - src/lxc/utils.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 120a13d..c8fb993 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -44,6 +44,7 @@ - #include - #include - #include -+#include - #include - #include - --- -1.8.3.1 - diff --git a/0036-Security-coding-modification.patch b/0036-Security-coding-modification.patch new file mode 100644 index 0000000..015c050 --- /dev/null +++ b/0036-Security-coding-modification.patch @@ -0,0 +1,99 @@ +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 new file mode 100644 index 0000000..77d1350 --- /dev/null +++ b/0037-cgfsng-fix-build-error-device_cgroup_rule_parse.patch @@ -0,0 +1,35 @@ +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/0063-lxc-ignore-systemcall-load-failure-error.patch b/0038-Ignore-errors-when-loading-rules-fail.patch similarity index 36% rename from 0063-lxc-ignore-systemcall-load-failure-error.patch rename to 0038-Ignore-errors-when-loading-rules-fail.patch index 368a690..c62a471 100644 --- a/0063-lxc-ignore-systemcall-load-failure-error.patch +++ b/0038-Ignore-errors-when-loading-rules-fail.patch @@ -1,24 +1,28 @@ -From 5fb35ffb15082021cfaae7b17d31175a63701514 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Sat, 9 Mar 2019 03:10:06 +0800 -Subject: [PATCH 063/140] lxc: ignore systemcall load failure error +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 -Signed-off-by: LiFeng --- - src/lxc/seccomp.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + 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 4a5b3d0..26eac90 100644 +index a75adb7..b7c4de3 100644 --- a/src/lxc/seccomp.c +++ b/src/lxc/seccomp.c -@@ -543,7 +543,7 @@ bool do_resolve_add_rule(uint32_t arch, char *line, scmp_filter_ctx ctx, - errno = -ret; +@@ -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)); -- return false; -+ return true; +-#endif + return false; ++#endif } return true; diff --git a/0038-make-the-given-terminal-as-controlling-terminal.patch b/0038-make-the-given-terminal-as-controlling-terminal.patch deleted file mode 100644 index 59278b7..0000000 --- a/0038-make-the-given-terminal-as-controlling-terminal.patch +++ /dev/null @@ -1,46 +0,0 @@ -From a1f81f063eb08dbf3ca99d298fef016b89d7d0d1 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Tue, 15 Jan 2019 23:24:21 -0500 -Subject: [PATCH 038/140] make the given terminal as controlling terminal - -Avoid warning when start cmd /bin/sh : -sh: cannot set terminal process group (-1): Inappropriate ioctl for device -sh: no job control in this shell - -Signed-off-by: LiFeng ---- - src/lxc/start.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 708ab7f..ec61b32 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1330,7 +1330,15 @@ static int do_start(void *data) - * setup on its console ie. the pty allocated in lxc_terminal_setup() so - * make sure that that pty is stdin,stdout,stderr. - */ -+ setsid(); - if (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 -@@ -1377,8 +1385,6 @@ static int do_start(void *data) - devnull_fd = -1; - } - -- setsid(); -- - if (handler->conf->init_cwd) { - /* isulad: try to craete workdir if not exist */ - struct stat st; --- -1.8.3.1 - diff --git a/0039-net-adapt-to-isulad.patch b/0039-net-adapt-to-isulad.patch new file mode 100644 index 0000000..5ffe39d --- /dev/null +++ b/0039-net-adapt-to-isulad.patch @@ -0,0 +1,51 @@ +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/0039-print-error-message-when-container-start-failed.patch b/0039-print-error-message-when-container-start-failed.patch deleted file mode 100644 index c631c14..0000000 --- a/0039-print-error-message-when-container-start-failed.patch +++ /dev/null @@ -1,816 +0,0 @@ -From 24f908199916fc92cb7935bfccc19244d3a8d864 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Wed, 16 Jan 2019 14:38:38 +0800 -Subject: [PATCH 039/140] print error message when container start failed - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 6 +-- - src/lxc/cgroups/cgfsng.c | 22 +++++++-- - src/lxc/cgroups/cgroup.c | 4 +- - src/lxc/cgroups/cgroup.h | 2 + - src/lxc/conf.c | 122 ++++++++++++++++++++++++++-------------------- - src/lxc/conf.h | 5 +- - src/lxc/execute.c | 3 +- - src/lxc/lxccontainer.c | 37 ++++++++++++-- - src/lxc/start.c | 14 ++++-- - src/lxc/start.h | 2 +- - src/lxc/tools/lxc_start.c | 3 ++ - 11 files changed, 147 insertions(+), 73 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 4ccdd74..b44ea74 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -1396,7 +1396,7 @@ int lxc_attach(const char *name, const char *lxcpath, - - /* Setup resource limits */ - if (!lxc_list_empty(&conf->limits)) { -- ret = setup_resource_limits(&conf->limits, pid); -+ ret = setup_resource_limits(&conf->limits, pid, -1); - if (ret < 0) - goto on_error; - } -@@ -1650,8 +1650,8 @@ int lxc_attach_run_command(void *payload, int msg_fd) - } - } - -- /* isulad: write errorm messages */ -- lxc_write_error_message(msg_fd, "exec: \"%s\": %s", cmd->program, strerror(errno)); -+ /* isulad: write error messages */ -+ lxc_write_error_message(msg_fd, "exec: \"%s\": %s.", cmd->program, strerror(errno)); - - SYSERROR("Failed to exec \"%s\"", cmd->program); - return ret; -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index bc1481d..47b12a6 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1236,7 +1236,7 @@ static int mkdir_eexist_on_last(const char *dir, mode_t mode) - return 0; - } - --static bool create_path_for_hierarchy(struct hierarchy *h, char *cgname) -+static bool create_path_for_hierarchy(struct hierarchy *h, char *cgname, int errfd) - { - int ret; - -@@ -1244,8 +1244,8 @@ static bool create_path_for_hierarchy(struct hierarchy *h, char *cgname) - - if (file_exists(h->container_full_path)) { // it must not already exist - ERROR("Cgroup path \"%s\" already exist.", h->container_full_path); -- //lxc_write_error_message(errfd, "%s:%d: Cgroup path \"%s\" already exist.", -- // __FILE__, __LINE__, h->fullcgpath); -+ lxc_write_error_message(errfd, "%s:%d: Cgroup path \"%s\" already exist.", -+ __FILE__, __LINE__, h->container_full_path); - return false; - } - -@@ -1288,7 +1288,7 @@ __cgfsng_ops static bool cgfsng_payload_create(struct cgroup_ops *ops, - } - - for (i = 0; ops->hierarchies[i]; i++) { -- if (!create_path_for_hierarchy(ops->hierarchies[i], container_cgroup)) { -+ 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; - } -@@ -2203,6 +2203,11 @@ static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename, - - fullpath = must_make_path(h->container_full_path, filename, NULL); - ret = lxc_write_to_file(fullpath, value, strlen(value), false, 0666); -+ if (ret) { -+ 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; - } -@@ -2294,9 +2299,15 @@ static bool __cg_legacy_setup_limits(struct cgroup_ops *ops, - } - 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; - } - } -@@ -2699,7 +2710,7 @@ __cgfsng_ops static bool cgfsng_data_init(struct cgroup_ops *ops, struct lxc_han - return true; - } - --struct cgroup_ops *cgfsng_ops_init(void) -+struct cgroup_ops *cgfsng_ops_init(int errfd) - { - struct cgroup_ops *cgfsng_ops; - -@@ -2715,6 +2726,7 @@ struct cgroup_ops *cgfsng_ops_init(void) - return NULL; - } - -+ cgfsng_ops->errfd = errfd; - cgfsng_ops->data_init = cgfsng_data_init; - cgfsng_ops->destroy = cgfsng_payload_destroy; - cgfsng_ops->payload_create = cgfsng_payload_create; -diff --git a/src/lxc/cgroups/cgroup.c b/src/lxc/cgroups/cgroup.c -index 8e7aef9..7442c31 100644 ---- a/src/lxc/cgroups/cgroup.c -+++ b/src/lxc/cgroups/cgroup.c -@@ -38,13 +38,13 @@ - - lxc_log_define(cgroup, lxc); - --extern struct cgroup_ops *cgfsng_ops_init(void); -+extern struct cgroup_ops *cgfsng_ops_init(int errfd); - - struct cgroup_ops *cgroup_init(struct lxc_handler *handler) - { - struct cgroup_ops *cgroup_ops; - -- cgroup_ops = cgfsng_ops_init(); -+ cgroup_ops = cgfsng_ops_init(handler->conf->errpipe[1]); - if (!cgroup_ops) { - ERROR("Failed to initialize cgroup driver"); - return NULL; -diff --git a/src/lxc/cgroups/cgroup.h b/src/lxc/cgroups/cgroup.h -index fa4871e..b6116f6 100644 ---- a/src/lxc/cgroups/cgroup.h -+++ b/src/lxc/cgroups/cgroup.h -@@ -92,6 +92,8 @@ struct cgroup_ops { - char **cgroup_use; - char *cgroup_pattern; - char *container_cgroup; -+ /* isulad: errfd */ -+ int errfd; - - /* @hierarchies - * - A NULL-terminated array of struct hierarchy, one per legacy -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 88cebfd..8fa63f7 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -2414,6 +2414,8 @@ static int mount_entry_create_dir_file(const struct mntent *mntent, - ret = mkdir_p(path, 0755); - if (ret < 0 && errno != EEXIST) { - SYSERROR("Failed to create directory \"%s\"", path); -+ lxc_write_error_message(rootfs->errfd, "%s:%d: mkdir %s: %s.", -+ __FILE__, __LINE__, path, strerror(errno)); - return -1; - } - } -@@ -2435,12 +2437,17 @@ static int mount_entry_create_dir_file(const struct mntent *mntent, - free(p1); - if (ret < 0 && errno != EEXIST) { - SYSERROR("Failed to create directory \"%s\"", path); -+ lxc_write_error_message(rootfs->errfd, "%s:%d: mkdir %s: %s.", -+ __FILE__, __LINE__, p2, strerror(errno)); - return -1; - } - - ret = mknod(path, S_IFREG | 0000, 0); -- if (ret < 0 && errno != EEXIST) -+ if (ret < 0 && errno != EEXIST) { -+ lxc_write_error_message(rootfs->errfd, "%s:%d: open %s: %s.", -+ __FILE__, __LINE__, path, strerror(errno)); - return -errno; -+ } - - return 0; - } -@@ -2550,7 +2557,9 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - if (rootfs_path) { - rpath = follow_symlink_in_scope(path, rootfs_path); - if (!rpath) { -- ERROR("Failed to get real path for '%s'", path); -+ 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; -@@ -2558,6 +2567,8 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - 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; - } -@@ -2587,6 +2598,10 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - 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(mntdata); - free(rpath); -@@ -2949,7 +2964,7 @@ static int parse_resource(const char *res) - return resid; - } - --int setup_resource_limits(struct lxc_list *limits, pid_t pid) -+int setup_resource_limits(struct lxc_list *limits, pid_t pid, int errfd) - { - int resid; - struct lxc_list *it; -@@ -2966,7 +2981,10 @@ int setup_resource_limits(struct lxc_list *limits, pid_t pid) - - #if HAVE_PRLIMIT || HAVE_PRLIMIT64 - if (prlimit(pid, resid, &lim->limit, NULL) != 0) { -- SYSERROR("Failed to set limit %s", lim->resource); -+ SYSERROR("Failed to set limit %s %lu %lu.", lim->resource, lim->limit.rlim_cur, lim->limit.rlim_max); -+ 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 -1; - } - -@@ -3989,6 +4007,8 @@ int lxc_setup(struct lxc_handler *handler) - ret = lxc_setup_rootfs_prepare_root(lxc_conf, name, lxcpath); - if (ret < 0) { - ERROR("Failed to setup rootfs"); -+ lxc_write_error_message(lxc_conf->errpipe[1], "%s:%d: failed to setup rootfs %s.", -+ __FILE__, __LINE__, lxc_conf->rootfs.path); - return -1; - } - -@@ -3996,31 +4016,31 @@ int lxc_setup(struct lxc_handler *handler) - ret = setup_utsname(lxc_conf->utsname); - if (ret < 0) { - ERROR("Failed to setup the utsname %s", name); -- return -1; -+ goto on_error; - } - } - - ret = lxc_setup_keyring(); - if (ret < 0) -- return -1; -+ goto on_error; - - ret = lxc_setup_network_in_child_namespaces(lxc_conf, &lxc_conf->network); - if (ret < 0) { - ERROR("Failed to setup network"); -- return -1; -+ goto on_error; - } - - ret = lxc_network_send_name_and_ifindex_to_parent(handler); - if (ret < 0) { - ERROR("Failed to send network device names and ifindices to parent"); -- return -1; -+ goto on_error; - } - - if (lxc_conf->autodev > 0) { - ret = mount_autodev(name, &lxc_conf->rootfs, lxcpath); - if (ret < 0) { - ERROR("Failed to mount \"/dev\""); -- return -1; -+ goto on_error; - } - } - -@@ -4030,13 +4050,14 @@ int lxc_setup(struct lxc_handler *handler) - ret = lxc_mount_auto_mounts(lxc_conf, lxc_conf->auto_mounts & ~LXC_AUTO_CGROUP_MASK, handler); - if (ret < 0) { - ERROR("Failed to setup first automatic mounts"); -- return -1; -+ goto on_error; - } - -+ lxc_conf->rootfs.errfd = lxc_conf->errpipe[1]; - ret = setup_mount(lxc_conf, &lxc_conf->rootfs, lxc_conf->fstab, name, lxcpath); - if (ret < 0) { - ERROR("Failed to setup mounts"); -- return -1; -+ goto on_error; - } - - if (lxc_conf->is_execute) { -@@ -4047,13 +4068,13 @@ int lxc_setup(struct lxc_handler *handler) - ret = snprintf(path, PATH_MAX, SBINDIR "/init.lxc.static"); - if (ret < 0 || ret >= PATH_MAX) { - ERROR("Path to init.lxc.static too long"); -- return -1; -+ goto on_error; - } - - fd = open(path, O_PATH | O_CLOEXEC); - if (fd < 0) { - SYSERROR("Unable to open lxc.init.static"); -- return -1; -+ goto on_error; - } - - ((struct execute_args *)handler->data)->init_fd = fd; -@@ -4062,7 +4083,7 @@ int lxc_setup(struct lxc_handler *handler) - ret = lxc_execute_bind_init(handler); - if (ret < 0) { - ERROR("Failed to bind-mount the lxc init system"); -- return -1; -+ goto on_error; - } - } - } -@@ -4074,7 +4095,7 @@ int lxc_setup(struct lxc_handler *handler) - ret = lxc_mount_auto_mounts(lxc_conf, lxc_conf->auto_mounts & LXC_AUTO_CGROUP_MASK, handler); - if (ret < 0) { - ERROR("Failed to setup remaining automatic mounts"); -- return -1; -+ goto on_error; - } - - /*isulad: move mount entries here, before we do lxc_fill_autodev and populate devices */ -@@ -4083,27 +4104,27 @@ int lxc_setup(struct lxc_handler *handler) - &lxc_conf->mount_list, name, lxcpath); - if (ret < 0) { - ERROR("Failed to setup mount entries"); -- return -1; -+ goto on_error; - } - } - - ret = run_lxc_hooks(name, "mount", lxc_conf, NULL); - if (ret < 0) { - ERROR("Failed to run mount hooks"); -- return -1; -+ goto on_error; - } - - if (lxc_conf->autodev > 0) { - ret = run_lxc_hooks(name, "autodev", lxc_conf, NULL); - if (ret < 0) { - ERROR("Failed to run autodev hooks"); -- return -1; -+ goto on_error; - } - - ret = lxc_fill_autodev(&lxc_conf->rootfs); - if (ret < 0) { - ERROR("Failed to populate \"/dev\""); -- return -1; -+ goto on_error; - } - } - -@@ -4111,64 +4132,64 @@ int lxc_setup(struct lxc_handler *handler) - if (!lxc_list_empty(&lxc_conf->populate_devs)) { - if (setup_populate_devs(&lxc_conf->rootfs, &lxc_conf->populate_devs)) { - ERROR("Failed to setup devices in the container"); -- return -1;; -+ goto on_error; - } - } - - /* Make sure any start hooks are in the container */ - if (!verify_start_hooks(lxc_conf)) { - ERROR("Failed to verify start hooks"); -- return -1; -+ goto on_error; - } - - ret = lxc_setup_console(&lxc_conf->rootfs, &lxc_conf->console, - lxc_conf->ttys.dir); - if (ret < 0) { - ERROR("Failed to setup console"); -- return -1; -+ goto on_error; - } - - ret = lxc_setup_dev_symlinks(&lxc_conf->rootfs); - if (ret < 0) { - ERROR("Failed to setup \"/dev\" symlinks"); -- return -1; -+ goto on_error; - } - - ret = lxc_create_tmp_proc_mount(lxc_conf); - if (ret < 0) { - ERROR("Failed to \"/proc\" LSMs"); -- return -1; -+ goto on_error; - } - - ret = lxc_setup_rootfs_switch_root(&lxc_conf->rootfs); - if (ret < 0) { - ERROR("Failed to pivot root into rootfs"); -- return -1; -+ goto on_error; - } - - /* isulad: remount rootfs readonly if necessary */ - if (setup_rootfs_mountopts(&lxc_conf->rootfs)) { - ERROR("failed to set rootfs for '%s'", name); -- return -1; -+ goto on_error; - } - - if (lxc_conf->rootfs.path) { - ret = lxc_setup_devpts(lxc_conf); - if (ret < 0) { - ERROR("Failed to setup new devpts instance"); -- return -1; -+ goto on_error; - } - } - - ret = lxc_create_ttys(handler); - if (ret < 0) -- return -1; -+ goto on_error; - - //isulad: setup rootfs masked paths - if (!lxc_list_empty(&lxc_conf->rootfs.maskedpaths)) { - if (setup_rootfs_maskedpaths(&lxc_conf->rootfs.maskedpaths)) { - ERROR("failed to setup maskedpaths"); -- return -1; -+ goto on_error; - } - } - -@@ -4176,7 +4197,7 @@ int lxc_setup(struct lxc_handler *handler) - if (!lxc_list_empty(&lxc_conf->rootfs.ropaths)) { - if (setup_rootfs_ropaths(&lxc_conf->rootfs.ropaths)) { - ERROR("failed to setup readonlypaths"); -- return -1; -+ goto on_error; - } - } - -@@ -4186,7 +4207,7 @@ int lxc_setup(struct lxc_handler *handler) - ret = setup_personality(lxc_conf->personality); - if (ret < 0) { - ERROR("Failed to set personality"); -- return -1; -+ goto on_error; - } - - /* Set sysctl value to a path under /proc/sys as determined from the -@@ -4197,7 +4218,7 @@ int lxc_setup(struct lxc_handler *handler) - ret = setup_sysctl_parameters(&lxc_conf->sysctls); - if (ret < 0) { - ERROR("Failed to setup sysctl parameters"); -- return -1; -+ goto on_error; - } - } - -@@ -4206,21 +4227,24 @@ int lxc_setup(struct lxc_handler *handler) - ERROR("Container requests lxc.cap.drop and " - "lxc.cap.keep: either use lxc.cap.drop or " - "lxc.cap.keep, not both"); -- return -1; -+ goto on_error; - } - - if (dropcaps_except(&lxc_conf->keepcaps)) { - ERROR("Failed to keep capabilities"); -- return -1; -+ goto on_error; - } - } else if (setup_caps(&lxc_conf->caps)) { - ERROR("Failed to drop capabilities"); -- return -1; -+ goto on_error; - } - - NOTICE("The container \"%s\" is set up", name); - - return 0; -+on_error: -+ lxc_write_error_message(lxc_conf->errpipe[1], "Failed to setup lxc, please check the config file."); -+ return -1; - } - - /* isulad drop caps for container*/ -@@ -4555,11 +4579,9 @@ void* wait_ocihook_timeout(void *arg) - __FILE__, __LINE__, lxchook_names[conf->which], - (double)conf->timeout); - -- if (conf->errfd >= 0) { -- 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); -- } -+ 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"); -@@ -4640,22 +4662,18 @@ static int run_ocihook_buffer(struct oci_hook_conf *oconf, char *inmsg) - goto print_hook; - } else if (WIFEXITED(ret) && WEXITSTATUS(ret) != 0) { - ERROR("Script exited with status %d. output:%s", WEXITSTATUS(ret), output); -- if (conf->errfd >= 0) { -- lxc_write_error_message(conf->errfd, "%s:%d: running %s hook caused \"error running hook: exit status %d, output:%s\"", -- __FILE__, __LINE__, -- (conf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[conf->which], -- WEXITSTATUS(ret), output); -- } -+ lxc_write_error_message(conf->errfd, "%s:%d: running %s hook caused \"error running hook: exit status %d, output:%s\".", -+ __FILE__, __LINE__, -+ (conf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[conf->which], -+ WEXITSTATUS(ret), output); - - goto print_hook; - } else if (WIFSIGNALED(ret)) { - ERROR("Script terminated by signal %d.", WTERMSIG(ret)); -- if (conf->errfd >= 0) { -- lxc_write_error_message(conf->errfd, "%s:%d: running %s hook caused \"error running hook: Script terminated by signal %d\"", -- __FILE__, __LINE__, -- (conf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[conf->which], -- WTERMSIG(ret)); -- } -+ lxc_write_error_message(conf->errfd, "%s:%d: running %s hook caused \"error running hook: Script terminated by signal %d\".", -+ __FILE__, __LINE__, -+ (conf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[conf->which], -+ WTERMSIG(ret)); - - goto print_hook; - } -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index b92c48e..88f5b41 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -175,6 +175,8 @@ struct lxc_rootfs { - struct lxc_list maskedpaths; - /* isulad: ropaths */ - struct lxc_list ropaths; -+ /* isulad: errfd */ -+ int errfd; - }; - - /* -@@ -462,7 +464,7 @@ 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); --extern int setup_resource_limits(struct lxc_list *limits, pid_t pid); -+extern int setup_resource_limits(struct lxc_list *limits, pid_t pid, int errfd); - extern int find_unmapped_nsid(struct lxc_conf *conf, enum idtype idtype); - extern int mapped_hostid(unsigned id, struct lxc_conf *conf, - enum idtype idtype); -@@ -499,6 +501,7 @@ 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); -+void lxc_close_error_pipe(int *errpipe); - - /* isulad add end */ - -diff --git a/src/lxc/execute.c b/src/lxc/execute.c -index d388e63..3fc46c6 100644 ---- a/src/lxc/execute.c -+++ b/src/lxc/execute.c -@@ -40,7 +40,7 @@ - - lxc_log_define(execute, start); - --static int execute_start(struct lxc_handler *handler, void* data) -+static int execute_start(struct lxc_handler *handler, void* data, int fd) - { - int argc_add, j; - char **argv; -@@ -91,6 +91,7 @@ static int execute_start(struct lxc_handler *handler, void* data) - else - execvp(argv[0], argv); - SYSERROR("Failed to exec %s", argv[0]); -+ lxc_write_error_message(fd, "Failed to exec: \"%s\": %s.", argv[0], strerror(errno)); - - free(argv); - out1: -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index e99c41c..d641851 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -916,7 +916,9 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - NULL, - }; - char **init_cmd = NULL; -- int keepfds[4] = {-1, -1, -1, -1}; -+ int keepfds[] = {-1, -1, -1, -1, -1}; -+ ssize_t size_read; -+ char errbuf[BUFSIZ + 1] = {0}; - - /* container does exist */ - if (!c) -@@ -962,7 +964,7 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - argv = init_cmd = split_init_cmd(conf->init_cmd); - } - -- /* isulad: use init argv as init cmd */ -+ /* isulad: use init argv as init cmd */ - if (!argv) { - argv = init_cmd = use_init_args(conf->init_argv, conf->init_argc); - } -@@ -986,10 +988,19 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - char title[2048]; - pid_t pid; - -+ //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; -+ } -+ - pid = fork(); - if (pid < 0) { - free_init_cmd(init_cmd); - lxc_free_handler(handler); -+ lxc_close_error_pipe(conf->errpipe); - return false; - } - -@@ -999,11 +1010,23 @@ 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; -+ close(conf->errpipe[1]); -+ conf->errpipe[1] = -1; - - /* Wait for container to tell us whether it started - * successfully. - */ - started = wait_on_daemonized_start(handler, pid); -+ if (!started) { -+ size_read = read(conf->errpipe[0], errbuf, BUFSIZ); -+ if (size_read > 0) { -+ conf->errmsg = strdup(errbuf); -+ if (!conf->errmsg) -+ ERROR("Out of memory"); -+ } -+ } -+ close(conf->errpipe[0]); -+ conf->errpipe[0] = -1; - - free_init_cmd(init_cmd); - lxc_free_handler(handler); -@@ -1039,6 +1062,7 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - if (pid != 0) { - free_init_cmd(init_cmd); - lxc_free_handler(handler); -+ lxc_close_error_pipe(conf->errpipe); - _exit(EXIT_SUCCESS); - } - -@@ -1050,10 +1074,12 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - SYSERROR("Failed to change to \"/\" directory"); - _exit(EXIT_FAILURE); - } -- -+ close(conf->errpipe[0]); -+ conf->errpipe[0] = -1; - keepfds[0] = handler->conf->maincmd_fd; - keepfds[1] = handler->state_socket_pair[0]; - keepfds[2] = handler->state_socket_pair[1]; -+ keepfds[4] = conf->errpipe[1]; - ret = lxc_check_inherited(conf, true, keepfds, - sizeof(keepfds) / sizeof(keepfds[0])); - if (ret < 0) -@@ -1088,6 +1114,7 @@ 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); -+ lxc_close_error_pipe(conf->errpipe); - - SYSERROR("Failed to write monitor pid to \"%s\"", c->pidfile); - -@@ -1101,6 +1128,7 @@ 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); -+ lxc_close_error_pipe(conf->errpipe); - - SYSERROR("Failed to write monitor pid to \"%s\"", c->pidfile); - -@@ -1159,6 +1187,9 @@ reboot: - if (conf->exit_fd >= 0) { - keepfds[3] = conf->exit_fd; - } -+ /* isulad: keep errpipe fd */ -+ if (c->daemonize) -+ keepfds[4] = conf->errpipe[1]; - ret = lxc_check_inherited(conf, c->daemonize, keepfds, - sizeof(keepfds) / sizeof(keepfds[0])); - if (ret < 0) { -diff --git a/src/lxc/start.c b/src/lxc/start.c -index ec61b32..3e6854f 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -892,6 +892,7 @@ int lxc_init(const char *name, struct lxc_handler *handler) - ret = lxc_terminal_setup(conf); - if (ret < 0) { - ERROR("Failed to create console"); -+ lxc_write_error_message(conf->errpipe[1], "Failed to create console for container \"%s\".", name); - goto out_restore_sigmask; - } - TRACE("Created console"); -@@ -1390,6 +1391,8 @@ static int do_start(void *data) - 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; - } - if (chdir(handler->conf->init_cwd)) { -@@ -1489,7 +1492,7 @@ static int do_start(void *data) - /* After this call, we are in error because this ops should not return - * as it execs. - */ -- handler->ops->start(handler, handler->data); -+ handler->ops->start(handler, handler->data, handler->daemonize ? handler->conf->errpipe[1] : -1); - - out_warn_father: - /* We want the parent to know something went wrong, so we return a -@@ -1898,7 +1901,7 @@ static int lxc_spawn(struct lxc_handler *handler) - goto out_delete_net; - - if (!lxc_list_empty(&conf->limits)) { -- ret = setup_resource_limits(&conf->limits, handler->pid); -+ ret = setup_resource_limits(&conf->limits, handler->pid, conf->errpipe[1]); - if (ret < 0) { - ERROR("Failed to setup resource limits"); - goto out_delete_net; -@@ -1960,7 +1963,7 @@ static int lxc_spawn(struct lxc_handler *handler) - } - - if (START_TIMEOUT == global_timeout_state) { -- //lxc_write_error_message(conf->errpipe[1], "Starting the container \"%s\" timeout.", name); -+ lxc_write_error_message(conf->errpipe[1], "Starting the container \"%s\" timeout.", name); - ERROR("Starting the container \"%s\" timeout.", name); - goto out_delete_net; - } -@@ -2008,7 +2011,7 @@ static int lxc_spawn(struct lxc_handler *handler) - } - - if (START_TIMEOUT == global_timeout_state) { -- //lxc_write_error_message(conf->errpipe[1], "Starting the container \"%s\" timeout.", name); -+ lxc_write_error_message(conf->errpipe[1], "Starting the container \"%s\" timeout.", name); - ERROR("Starting the container \"%s\" timeout.", name); - goto out_abort; - } -@@ -2232,7 +2235,7 @@ struct start_args { - char *const *argv; - }; - --static int start(struct lxc_handler *handler, void* data) -+static int start(struct lxc_handler *handler, void* data, int fd) - { - struct start_args *arg = data; - -@@ -2240,6 +2243,7 @@ static int start(struct lxc_handler *handler, void* data) - - execvp(arg->argv[0], arg->argv); - SYSERROR("Failed to exec \"%s\"", arg->argv[0]); -+ lxc_write_error_message(fd, "exec: \"%s\": %s.", arg->argv[0], strerror(errno)); - return 0; - } - -diff --git a/src/lxc/start.h b/src/lxc/start.h -index 1d84325..ab72e6e 100644 ---- a/src/lxc/start.h -+++ b/src/lxc/start.h -@@ -145,7 +145,7 @@ struct execute_args { - }; - - struct lxc_operations { -- int (*start)(struct lxc_handler *, void *); -+ int (*start)(struct lxc_handler *, void *, int); - int (*post_start)(struct lxc_handler *, void *); - }; - -diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c -index f37f8a6..ec48701 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -392,6 +392,9 @@ int main(int argc, char *argv[]) - else - err = c->start(c, 0, args) ? EXIT_SUCCESS : EXIT_FAILURE; - if (err) { -+ 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); - ERROR("The container failed to start"); - - if (my_args.daemonize) --- -1.8.3.1 - diff --git a/0040-add-timeout-200ms-for-cmds-send-to-lxc-monitor.patch b/0040-add-timeout-200ms-for-cmds-send-to-lxc-monitor.patch deleted file mode 100644 index 81a925e..0000000 --- a/0040-add-timeout-200ms-for-cmds-send-to-lxc-monitor.patch +++ /dev/null @@ -1,107 +0,0 @@ -From 04512fa5baae9aeff6ac8f120e718f339b56525f Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Wed, 16 Jan 2019 02:22:13 -0500 -Subject: [PATCH 040/140] add timeout(200ms) for cmds send to [lxc monitor] - -Signed-off-by: LiFeng ---- - src/lxc/af_unix.c | 25 +++++++++++++++++++++++-- - src/lxc/af_unix.h | 2 ++ - src/lxc/commands.c | 7 +++++-- - 3 files changed, 30 insertions(+), 4 deletions(-) - -diff --git a/src/lxc/af_unix.c b/src/lxc/af_unix.c -index 02f32c4..24500a8 100644 ---- a/src/lxc/af_unix.c -+++ b/src/lxc/af_unix.c -@@ -194,8 +194,9 @@ int lxc_abstract_unix_send_fds(int fd, int *sendfds, int num_sendfds, - return ret; - } - --int lxc_abstract_unix_recv_fds(int fd, int *recvfds, int num_recvfds, -- void *data, size_t size) -+/* isulad: add wait timeout Microseconds*/ -+int lxc_abstract_unix_recv_fds_timeout(int fd, int *recvfds, int num_recvfds, -+ void *data, size_t size, unsigned int timeout) - { - int ret; - struct msghdr msg; -@@ -204,6 +205,7 @@ int lxc_abstract_unix_recv_fds(int fd, int *recvfds, int num_recvfds, - char buf[1] = {0}; - char *cmsgbuf; - size_t cmsgbufsize = CMSG_SPACE(num_recvfds * sizeof(int)); -+ struct timeval out; - - memset(&msg, 0, sizeof(msg)); - memset(&iov, 0, sizeof(iov)); -@@ -222,6 +224,19 @@ int lxc_abstract_unix_recv_fds(int fd, int *recvfds, int num_recvfds, - msg.msg_iov = &iov; - msg.msg_iovlen = 1; - -+ 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); -+ goto out; -+ } -+ } -+ - ret = recvmsg(fd, &msg, 0); - if (ret <= 0) - goto out; -@@ -238,6 +253,12 @@ out: - return ret; - } - -+int lxc_abstract_unix_recv_fds(int fd, int *recvfds, int num_recvfds, -+ void *data, size_t size) -+{ -+ return lxc_abstract_unix_recv_fds_timeout(fd, recvfds, num_recvfds, data, size, 0); -+} -+ - int lxc_abstract_unix_send_credential(int fd, void *data, size_t size) - { - struct msghdr msg = {0}; -diff --git a/src/lxc/af_unix.h b/src/lxc/af_unix.h -index f2c2fdc..74fd77f 100644 ---- a/src/lxc/af_unix.h -+++ b/src/lxc/af_unix.h -@@ -37,5 +37,7 @@ 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_abstract_unix_recv_fds_timeout(int fd, int *recvfds, int num_recvfds, -+ void *data, size_t size, unsigned int timeout); - - #endif /* __LXC_AF_UNIX_H */ -diff --git a/src/lxc/commands.c b/src/lxc/commands.c -index 133384d..47a824a 100644 ---- a/src/lxc/commands.c -+++ b/src/lxc/commands.c -@@ -126,13 +126,16 @@ static int lxc_cmd_rsp_recv(int sock, struct lxc_cmd_rr *cmd) - int ret, rspfd; - struct lxc_cmd_rsp *rsp = &cmd->rsp; - -- ret = lxc_abstract_unix_recv_fds(sock, &rspfd, 1, rsp, sizeof(*rsp)); -+ /*isulad: add timeout 200ms to avoid long block due to [lxc monitor] error*/ -+ ret = lxc_abstract_unix_recv_fds_timeout(sock, &rspfd, 1, rsp, sizeof(*rsp), 200 * 1000); - if (ret < 0) { - SYSWARN("Failed to receive response for command \"%s\"", - lxc_cmd_str(cmd->req.cmd)); - -- if (errno == ECONNRESET) -+ if (errno == ECONNRESET || errno == EAGAIN || errno == EWOULDBLOCK) { -+ errno = ECONNRESET; /*isulad set errno ECONNRESET when timeout */ - return -1; -+ } - - return -1; - } --- -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 new file mode 100644 index 0000000..f987eb2 --- /dev/null +++ b/0040-cgfsng-make-container-full-path-in-cgfsng_get_cgroup.patch @@ -0,0 +1,29 @@ +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 new file mode 100644 index 0000000..e143c7f --- /dev/null +++ b/0041-build-fix-some-bug-in-free-memory.patch @@ -0,0 +1,52 @@ +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 new file mode 100644 index 0000000..33da326 --- /dev/null +++ b/0042-cgfsng-make-container-full-path-in-destory-cgroup.patch @@ -0,0 +1,29 @@ +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/0042-lxc-seccomp-adopt-to-lxc3.0.patch b/0042-lxc-seccomp-adopt-to-lxc3.0.patch deleted file mode 100644 index d1002b5..0000000 --- a/0042-lxc-seccomp-adopt-to-lxc3.0.patch +++ /dev/null @@ -1,169 +0,0 @@ -From cd1cd3c8d36b5f689ceaac00965ab1a3e77c2f33 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Thu, 17 Jan 2019 03:09:00 +0800 -Subject: [PATCH 042/140] lxc: seccomp adopt to lxc3.0 - -Signed-off-by: LiFeng ---- - src/lxc/seccomp.c | 127 ++++++++++++++++++++++++++++-------------------------- - 1 file changed, 65 insertions(+), 62 deletions(-) - -diff --git a/src/lxc/seccomp.c b/src/lxc/seccomp.c -index 1e14be1..27bdc22 100644 ---- a/src/lxc/seccomp.c -+++ b/src/lxc/seccomp.c -@@ -936,86 +936,89 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - 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)); -- } -+ if (cur_rule_arch == lxc_seccomp_arch_all) { -+ 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)); -+ } - -- if (ctx.architectures[1] != SCMP_ARCH_NATIVE) { -- if (!do_resolve_add_rule(ctx.architectures[1], line, -- ctx.contexts[1], &rule)) -- goto bad_rule; -+ 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)); -- } -+ INFO("Added compat rule for arch %d for %s action %d(%s)", -+ ctx.architectures[1], line, rule.action, -+ get_action_name(rule.action)); -+ } - -- if (ctx.architectures[2] != SCMP_ARCH_NATIVE) { -- if (!do_resolve_add_rule(ctx.architectures[2], line, -+ if (ctx.architectures[2] != SCMP_ARCH_NATIVE) { -+ if (!do_resolve_add_rule(ctx.architectures[2], line, - ctx.contexts[2], &rule)) -- goto bad_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)); -+ INFO("Added native rule for arch %d for %s action %d(%s)", -+ ctx.architectures[2], line, rule.action, -+ get_action_name(rule.action)); -+ } - } - } - -- INFO("Merging compat seccomp contexts into main context"); -- if (ctx.contexts[0]) { -- if (ctx.needs_merge[0]) { -- ret = seccomp_merge(conf->seccomp_ctx, ctx.contexts[0]); -- if (ret < 0) { -- ERROR("Failed to merge first compat seccomp " -+ if (cur_rule_arch == lxc_seccomp_arch_all) { -+ INFO("Merging compat seccomp contexts into main context"); -+ if (ctx.contexts[0]) { -+ if (ctx.needs_merge[0]) { -+ ret = seccomp_merge(conf->seccomp_ctx, ctx.contexts[0]); -+ if (ret < 0) { -+ ERROR("Failed to merge first compat seccomp " - "context into main context"); -- goto bad; -- } -+ goto bad; -+ } - -- TRACE("Merged first compat seccomp context into main context"); -- } else { -- seccomp_release(ctx.contexts[0]); -- ctx.contexts[0] = NULL; -+ 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_ctx, ctx.contexts[1]); -- if (ret < 0) { -- ERROR("Failed to merge first compat seccomp " -- "context into main context"); -- goto bad; -- } -+ if (ctx.contexts[1]) { -+ if (ctx.needs_merge[1]) { -+ ret = seccomp_merge(conf->seccomp_ctx, ctx.contexts[1]); -+ if (ret < 0) { -+ ERROR("Failed to merge first compat seccomp " -+ "context into main context"); -+ goto bad; -+ } - -- TRACE("Merged second compat seccomp context into main context"); -- } else { -- seccomp_release(ctx.contexts[1]); -- ctx.contexts[1] = NULL; -+ 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_ctx, ctx.contexts[2]); -- if (ret < 0) { -- ERROR("Failed to merge third compat seccomp " -- "context into main context"); -- goto bad; -- } -+ if (ctx.contexts[2]) { -+ if (ctx.needs_merge[2]) { -+ ret = seccomp_merge(conf->seccomp_ctx, ctx.contexts[2]); -+ if (ret < 0) { -+ ERROR("Failed to merge third compat seccomp " -+ "context into main context"); -+ goto bad; -+ } - -- TRACE("Merged third compat seccomp context into main context"); -- } else { -- seccomp_release(ctx.contexts[2]); -- ctx.contexts[2] = NULL; -+ TRACE("Merged third compat seccomp context into main context"); -+ } else { -+ seccomp_release(ctx.contexts[2]); -+ ctx.contexts[2] = NULL; -+ } - } - } -- - free(line); - return 0; - --- -1.8.3.1 - diff --git a/0043-check-null-pointer-of-handler-to-fix-coredump-of-att.patch b/0043-check-null-pointer-of-handler-to-fix-coredump-of-att.patch deleted file mode 100644 index 897a797..0000000 --- a/0043-check-null-pointer-of-handler-to-fix-coredump-of-att.patch +++ /dev/null @@ -1,28 +0,0 @@ -From b94affbd314be09dcd5927b15bee85459f6bc2ff Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Thu, 17 Jan 2019 10:19:37 +0800 -Subject: [PATCH 043/140] check null pointer of handler to fix coredump of - attach - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgroup.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/lxc/cgroups/cgroup.c b/src/lxc/cgroups/cgroup.c -index 7442c31..720a6c9 100644 ---- a/src/lxc/cgroups/cgroup.c -+++ b/src/lxc/cgroups/cgroup.c -@@ -44,7 +44,7 @@ struct cgroup_ops *cgroup_init(struct lxc_handler *handler) - { - struct cgroup_ops *cgroup_ops; - -- cgroup_ops = cgfsng_ops_init(handler->conf->errpipe[1]); -+ cgroup_ops = cgfsng_ops_init(handler ? handler->conf->errpipe[1] : -1); - if (!cgroup_ops) { - ERROR("Failed to initialize cgroup driver"); - return NULL; --- -1.8.3.1 - diff --git a/0043-support-error-report.patch b/0043-support-error-report.patch new file mode 100644 index 0000000..8f0828d --- /dev/null +++ b/0043-support-error-report.patch @@ -0,0 +1,683 @@ +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/0026-remove-filelock-and-do-not-destroy-directory-when-de.patch b/0044-remove-filelock-in-destroy-dir.patch similarity index 43% rename from 0026-remove-filelock-and-do-not-destroy-directory-when-de.patch rename to 0044-remove-filelock-in-destroy-dir.patch index 4f09d9c..fbca9d7 100644 --- a/0026-remove-filelock-and-do-not-destroy-directory-when-de.patch +++ b/0044-remove-filelock-in-destroy-dir.patch @@ -1,63 +1,75 @@ -From 238d4ac14b663aa5db904c55568c3710429d9bca Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Mon, 14 Jan 2019 21:13:00 +0800 -Subject: [PATCH 026/140] remove filelock and do not destroy directory when - destroy container +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: LiFeng +Signed-off-by: haozi007 --- - src/lxc/lxccontainer.c | 14 ++++++++++++-- - src/lxc/lxclock.c | 25 +++++++++++++++++++++++++ - src/lxc/lxclock.h | 5 +++++ - src/lxc/storage/dir.c | 12 +----------- - 4 files changed, 43 insertions(+), 13 deletions(-) + 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 68134d8..81c0ec3 100644 +index ed09a59..6281a8a 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c -@@ -2996,8 +2996,14 @@ static bool container_destroy(struct lxc_container *c, +@@ -3168,8 +3168,19 @@ static bool container_destroy(struct lxc_container *c, bool bret = false; int ret = 0; -- if (!c || !do_lxcapi_is_defined(c)) ++#ifdef HAVE_ISULAD + if (!c) - return false; ++ 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)) -@@ -3124,12 +3130,16 @@ out: +@@ -3310,13 +3321,23 @@ out: free(path); container_disk_unlock(c); -+ if (bret) { -+ if (container_disk_removelock(c)) -+ bret = false; ++#ifdef HAVE_ISULAD ++ if (bret && container_disk_removelock(c)) { ++ bret = false; + } ++#endif return bret; } static bool do_lxcapi_destroy(struct lxc_container *c) { -- if (!c || !lxcapi_is_defined(c)) ++#ifdef HAVE_ISULAD + if (!c) ++ return false; ++#else + if (!c || !lxcapi_is_defined(c)) return false; ++#endif - if (has_snapshots(c)) { + 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 e3d4654..8890968 100644 +index 318e5bf..bb0dca0 100644 --- a/src/lxc/lxclock.c +++ b/src/lxc/lxclock.c -@@ -198,6 +198,21 @@ on_error: - return l; +@@ -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; @@ -72,14 +84,6 @@ index e3d4654..8890968 100644 + + return ret; +} -+ - int lxclock(struct lxc_lock *l, int timeout) - { - struct flock lk; -@@ -386,3 +401,13 @@ void container_disk_unlock(struct lxc_container *c) - lxcunlock(c->slock); - lxcunlock(c->privlock); - } + +int container_disk_removelock(struct lxc_container *c) +{ @@ -90,43 +94,60 @@ index e3d4654..8890968 100644 + return ret; + return lxc_removelock(c->privlock); +} ++#endif diff --git a/src/lxc/lxclock.h b/src/lxc/lxclock.h -index 364a71b..e86bc34 100644 +index 9f9bc3b..6a71d7c 100644 --- a/src/lxc/lxclock.h +++ b/src/lxc/lxclock.h -@@ -174,4 +174,9 @@ extern int container_disk_lock(struct lxc_container *c); +@@ -154,4 +154,8 @@ extern int container_disk_lock(struct lxc_container *c); */ extern void container_disk_unlock(struct lxc_container *c); -+/*! -+ * \brief isulad: remove the containers disk lock file. -+ */ ++#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 c7b5ee2..deeecec 100644 +index 1dc95f1..485572a 100644 --- a/src/lxc/storage/dir.c +++ b/src/lxc/storage/dir.c -@@ -123,17 +123,7 @@ int dir_create(struct lxc_storage *bdev, const char *dest, const char *n, +@@ -94,6 +94,9 @@ int dir_create(struct lxc_storage *bdev, const char *dest, const char *n, int dir_destroy(struct lxc_storage *orig) { -- int ret; -- const char *src; -- -- src = lxc_storage_get_path(orig->src, orig->src); -- -- ret = lxc_rmdir_onedev(src, NULL); -- if (ret < 0) { -- ERROR("Failed to delete \"%s\"", src); -- return -1; -- } -- ++#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/0044-support-space-in-volume-mount-and-env.patch b/0044-support-space-in-volume-mount-and-env.patch deleted file mode 100644 index 4fb9100..0000000 --- a/0044-support-space-in-volume-mount-and-env.patch +++ /dev/null @@ -1,118 +0,0 @@ -From 24d0250197bab7b59c3437cce7845af1fc88df7e Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Thu, 17 Jan 2019 10:18:23 +0800 -Subject: [PATCH 044/140] support space in --volume, --mount and --env - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 16 ++++++++++++++++ - src/lxc/confile.c | 9 ++++++++- - src/lxc/namespace.h | 1 + - src/lxc/utils.h | 3 +++ - 4 files changed, 28 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 8fa63f7..48e31af 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -54,6 +54,7 @@ - #include - #include - #include -+#include - - #include "af_unix.h" - #include "caps.h" -@@ -2695,6 +2696,19 @@ static int mount_file_entries(const struct lxc_conf *conf, - int ret = -1; - - while (getmntent_r(file, &mntent, buf, sizeof(buf))) { -+ /* 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; -+ } -+ ERROR("mntent.mnt_fsname:%s, mntent.mnt_dir:%s", mntent.mnt_fsname, mntent.mnt_dir); - if (!rootfs->path) - ret = mount_entry_on_systemfs(&mntent); - else if (mntent.mnt_dir[0] != '/') -@@ -2703,6 +2717,8 @@ static int mount_file_entries(const struct lxc_conf *conf, - else - ret = mount_entry_on_absolute_rootfs(&mntent, rootfs, - lxc_name, lxc_path); -+ free(mntent.mnt_fsname); -+ free(mntent.mnt_dir); - if (ret < 0) - return -1; - } -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index db63b55..7e9d5c8 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -1036,6 +1036,7 @@ static int set_config_environment(const char *key, const char *value, - struct lxc_conf *lxc_conf, void *data) - { - struct lxc_list *list_item = NULL; -+ char *replaced; - - if (lxc_config_value_empty(value)) - return lxc_clear_environment(lxc_conf); -@@ -1044,7 +1045,12 @@ static int set_config_environment(const char *key, const char *value, - if (!list_item) - goto on_error; - -- list_item->elem = strdup(value); -+ /* 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; - - if (!list_item->elem) - goto on_error; -@@ -3661,6 +3667,7 @@ static int get_config_environment(const char *key, char *retv, int inlen, - memset(retv, 0, inlen); - - lxc_list_for_each(it, &c->environment) { -+ - strprint(retv, inlen, "%s\n", (char *)it->elem); - } - -diff --git a/src/lxc/namespace.h b/src/lxc/namespace.h -index ab583da..9caaf89 100644 ---- a/src/lxc/namespace.h -+++ b/src/lxc/namespace.h -@@ -26,6 +26,7 @@ - #include - #include - #include -+#include - - #ifndef CLONE_PARENT_SETTID - #define CLONE_PARENT_SETTID 0x00100000 -diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 4313942..73ffdd9 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -43,6 +43,9 @@ - #include "raw_syscalls.h" - #include "string_utils.h" - -+/* isulad: replace space with SPACE_MAGIC_STR */ -+#define SPACE_MAGIC_STR "[#)" -+ - /* 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); --- -1.8.3.1 - diff --git a/0037-restore-default-signal-handlers-and-set-umask-0027.patch b/0045-restore-default-signal-handler.patch similarity index 36% rename from 0037-restore-default-signal-handlers-and-set-umask-0027.patch rename to 0045-restore-default-signal-handler.patch index e0e5a55..e605cdd 100644 --- a/0037-restore-default-signal-handlers-and-set-umask-0027.patch +++ b/0045-restore-default-signal-handler.patch @@ -1,44 +1,54 @@ -From 3ac4fd8b31c3c9e650cbe02383f4d65cfa078b20 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Tue, 15 Jan 2019 23:14:14 -0500 -Subject: [PATCH 037/140] restore default signal handlers and set umask 0027 +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: LiFeng +Signed-off-by: haozi007 --- - src/lxc/attach.c | 22 +++++++++++++++++++++- - src/lxc/conf.c | 3 +++ - src/lxc/start.c | 18 +++++++++++++++++- - 3 files changed, 41 insertions(+), 2 deletions(-) + 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 3f60fe1..4ccdd74 100644 +index 734cddd..1dd2b47 100644 --- a/src/lxc/attach.c +++ b/src/lxc/attach.c -@@ -750,7 +750,7 @@ static void lxc_put_attach_clone_payload(struct attach_clone_payload *p) - - static int attach_child_main(struct attach_clone_payload *payload) - { -- int fd, lsm_fd, ret; -+ int fd, lsm_fd, ret, i; - uid_t new_uid; - gid_t new_gid; - uid_t ns_root_uid = 0; -@@ -761,11 +761,31 @@ static int attach_child_main(struct attach_clone_payload *payload) - bool needs_lsm = (options->namespaces & CLONE_NEWNS) && - (options->attach_flags & LXC_ATTACH_LSM) && +@@ -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 0027 for safe control */ -+ umask(0027); + /*isulad: set system umask */ + umask(init_ctx->container->lxc_conf->umask); + + /*isulad: restore default signal handlers and unblock all signals*/ -+ for (i = 1; i < NSIG; i++) ++ for (int i = 1; i < NSIG; i++) + signal(i, SIG_DFL); + + ret = sigfillset(&mask); @@ -51,63 +61,60 @@ index 3f60fe1..4ccdd74 100644 + 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 - * parent process, otherwise /proc may not properly reflect the new pid -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 6134ed3..88cebfd 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4180,6 +4180,9 @@ int lxc_setup(struct lxc_handler *handler) - } - } +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 }, + }; -+ /*isulad: set system umask 0027 for safe control*/ -+ umask(0027); -+ - ret = setup_personality(lxc_conf->personality); - if (ret < 0) { - ERROR("Failed to set personality"); ++#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 357e81d..708ab7f 100644 +index 6779cee..5d2faee 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c -@@ -1103,7 +1103,7 @@ void lxc_abort(const char *name, struct lxc_handler *handler) - - static int do_start(void *data) - { -- int ret; -+ int ret, i; - char path[PATH_MAX]; - uid_t new_uid; - gid_t new_gid; -@@ -1112,9 +1112,25 @@ static int do_start(void *data) - gid_t nsgid = 0; - int devnull_fd = -1; - struct lxc_handler *handler = data; -+ sigset_t mask; +@@ -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 (i = 1; i < NSIG; i++) ++ 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;; ++ goto out_warn_father; + } + ret = sigprocmask(SIG_UNBLOCK, &mask, NULL); + if (ret < 0) { + SYSERROR("Failed to set signal mask"); + goto out_warn_father; + } ++#endif + - /* This prctl must be before the synchro, so if the parent dies before - * we set the parent death signal, we will detect its death with the - * synchro right after, otherwise we have a window where the parent can + 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-Do-not-test-cgroup-writeable.patch b/0046-Do-not-test-cgroup-writeable.patch deleted file mode 100644 index 9e9bc65..0000000 --- a/0046-Do-not-test-cgroup-writeable.patch +++ /dev/null @@ -1,48 +0,0 @@ -From fc6da7b9465295da1dc1d40d835a8c7680207d66 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 17 Jan 2019 03:49:16 -0500 -Subject: [PATCH 046/140] Do not test cgroup writeable - -If we run isulad in docker without cgroup namespace, the base_cgroup will be docker/XXX.., -mountpoint+base_cgroup may be not exist - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 47b12a6..6bfa693 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -581,7 +581,7 @@ static bool cg_legacy_handle_cpuset_hierarchy(struct hierarchy *h, char *cgname) - if (slash) - *slash = '/'; - -- ret = mkdir(cgpath, 0755); -+ ret = mkdir_p(cgpath, 0755); - if (ret < 0) { - if (errno != EEXIST) { - SYSERROR("Failed to create directory \"%s\"", cgpath); -@@ -2489,13 +2489,17 @@ static bool cg_hybrid_init(struct cgroup_ops *ops) - - trim(base_cgroup); - prune_init_scope(base_cgroup); -+ -+ /* 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 - if (type == CGROUP2_SUPER_MAGIC) - writeable = test_writeable_v2(mountpoint, base_cgroup); - else - writeable = test_writeable_v1(mountpoint, base_cgroup); - if (!writeable) - goto next; -- -+ */ - if (type == CGROUP2_SUPER_MAGIC) { - char *cgv2_ctrl_path; - --- -1.8.3.1 - diff --git a/0086-confile-add-support-systemd.patch b/0046-add-support-systemd.patch similarity index 60% rename from 0086-confile-add-support-systemd.patch rename to 0046-add-support-systemd.patch index a802850..e43f20e 100644 --- a/0086-confile-add-support-systemd.patch +++ b/0046-add-support-systemd.patch @@ -1,24 +1,20 @@ -From 2b8bafa86e5086ee9f85dba13a73fb3abdf8656f Mon Sep 17 00:00:00 2001 +From 1922cc534f04a7a006064e7eae2dea44d0000cc3 Mon Sep 17 00:00:00 2001 From: tanyifeng Date: Sat, 20 Apr 2019 22:40:18 +0800 -Subject: [PATCH 086/140] confile: add support systemd - -lxc.isulad.systemd=true remount systemd cgroup path to rw +Subject: [PATCH 46/49] add support systemd Signed-off-by: zhangsong -Signed-off-by: LiFeng --- - src/lxc/cgroups/cgfsng.c | 16 ++++++++++++++++ + src/lxc/cgroups/cgfsng.c | 15 +++++++++++++++ src/lxc/conf.c | 1 + - src/lxc/conf.h | 1 + src/lxc/confile.c | 30 ++++++++++++++++++++++++++++++ - 4 files changed, 48 insertions(+) + 3 files changed, 46 insertions(+) diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index cc08737..b1f56b0 100644 +index 002f051..4abaa86 100644 --- a/src/lxc/cgroups/cgfsng.c +++ b/src/lxc/cgroups/cgfsng.c -@@ -1567,6 +1567,7 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, +@@ -2096,6 +2096,7 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, { int i, ret; char *tmpfspath = NULL; @@ -26,11 +22,10 @@ index cc08737..b1f56b0 100644 bool has_cgns = false, retval = false, wants_force_mount = false; char **merged = NULL; -@@ -1711,10 +1712,25 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - goto on_error; +@@ -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); @@ -53,51 +48,39 @@ index cc08737..b1f56b0 100644 return retval; } diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 20eb840..8cdccf1 100644 +index d7a78bd..235965f 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c -@@ -5320,6 +5320,7 @@ void lxc_conf_free(struct lxc_conf *conf) - if (conf->exit_fd != -1) +@@ -5283,6 +5283,7 @@ void lxc_conf_free(struct lxc_conf *conf) + if (conf->exit_fd != -1) { close(conf->exit_fd); - free(conf->errmsg); + } + free(conf->systemd); - lxc_close_error_pipe(conf->errpipe); - /* isulad add end */ - free(conf); -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 11cf596..fb3c156 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -430,6 +430,7 @@ struct lxc_conf { - char *errmsg; /* record error messages */ - int errpipe[2];//pipdfd for get error message of child or grandchild process. - mode_t umask; //umask value -+ char *systemd; //systemd value - /* isulad add end */ - }; - + 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 60e6c46..93936cc 100644 +index 8790494..771f635 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c -@@ -157,6 +157,7 @@ lxc_config_define(init_args); - lxc_config_define(init_groups); - lxc_config_define(populate_device); +@@ -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); - /*isulad add end*/ + #endif - -@@ -251,6 +252,7 @@ static struct lxc_config_t config_jump_table[] = { + /* +@@ -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.umask", set_config_umask, get_config_umask, clr_config_umask, }, + { "lxc.isulad.systemd", set_config_systemd, get_config_systemd, clr_config_systemd, }, - /*isulad add end*/ + #endif }; -@@ -2433,6 +2435,18 @@ static int set_config_umask(const char *key, const char *value, - } +@@ -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 */ @@ -112,13 +95,6 @@ index 60e6c46..93936cc 100644 + return 0; +} + - struct parse_line_conf { - struct lxc_conf *conf; - bool from_include; -@@ -3210,6 +3224,13 @@ static int get_config_umask(const char *key, char *retv, int inlen, - return lxc_get_conf_size_t(c, retv, inlen, c->umask); - } - +/* isulad add: get systemd value*/ +static int get_config_systemd(const char *key, char *retv, int inlen, + struct lxc_conf *c, void *data) @@ -126,13 +102,6 @@ index 60e6c46..93936cc 100644 + return lxc_get_conf_str(retv, inlen, c->systemd); +} + - static int get_config_tty_dir(const char *key, char *retv, int inlen, - struct lxc_conf *c, void *data) - { -@@ -4491,6 +4512,15 @@ static inline int clr_config_umask(const char *key, struct lxc_conf *c, - return 0; - } - +/* isulad add: clear systemd value */ +static inline int clr_config_systemd(const char *key, struct lxc_conf *c, + void *data) @@ -142,9 +111,7 @@ index 60e6c46..93936cc 100644 + return 0; +} + - static int get_config_includefiles(const char *key, char *retv, int inlen, - struct lxc_conf *c, void *data) - { + #endif -- 1.8.3.1 diff --git a/0047-Fix-memory-leak-in-lxc_global_config_value.patch b/0047-Fix-memory-leak-in-lxc_global_config_value.patch deleted file mode 100644 index 4dc1792..0000000 --- a/0047-Fix-memory-leak-in-lxc_global_config_value.patch +++ /dev/null @@ -1,44 +0,0 @@ -From f238c892c331361985a2d8f0211b4fd78ce99682 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 17 Jan 2019 07:43:23 -0500 -Subject: [PATCH 047/140] Fix memory leak in lxc_global_config_value - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgroup.c | 2 ++ - src/lxc/initutils.c | 5 ----- - 2 files changed, 2 insertions(+), 5 deletions(-) - -diff --git a/src/lxc/cgroups/cgroup.c b/src/lxc/cgroups/cgroup.c -index 720a6c9..8d559be 100644 ---- a/src/lxc/cgroups/cgroup.c -+++ b/src/lxc/cgroups/cgroup.c -@@ -95,6 +95,8 @@ void cgroup_exit(struct cgroup_ops *ops) - } - free(ops->hierarchies); - -+ free(ops); -+ - return; - } - -diff --git a/src/lxc/initutils.c b/src/lxc/initutils.c -index 09b521e..60147a5 100644 ---- a/src/lxc/initutils.c -+++ b/src/lxc/initutils.c -@@ -74,12 +74,7 @@ const char *lxc_global_config_value(const char *option_name) - { NULL, NULL }, - }; - -- /* 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 - - /* user_config_path is freed as soon as it is used */ - char *user_config_path = NULL; --- -1.8.3.1 - diff --git a/0091-lxc-support-namespaced-kernel-params-can-be-changed-.patch b/0047-support-namespaced-kernel-params-can-be-changed-in-s.patch similarity index 59% rename from 0091-lxc-support-namespaced-kernel-params-can-be-changed-.patch rename to 0047-support-namespaced-kernel-params-can-be-changed-in-s.patch index 02e1e7f..efb6403 100644 --- a/0091-lxc-support-namespaced-kernel-params-can-be-changed-.patch +++ b/0047-support-namespaced-kernel-params-can-be-changed-in-s.patch @@ -1,24 +1,23 @@ -From 140cadc75c14917c9d0aa3c6c65d84fd8b682adb Mon Sep 17 00:00:00 2001 +From 288b6934f79456f056a2043216bbfdde4342b694 Mon Sep 17 00:00:00 2001 From: liuhao Date: Fri, 26 Apr 2019 07:13:53 +0800 -Subject: [PATCH 091/140] lxc: support namespaced kernel params can be changed - in system container - -support namespaced kernel params can be changed in system container +Subject: [PATCH 47/49] support namespaced kernel params can be changed in + system container Signed-off-by: yangchenliang --- - src/lxc/conf.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 77 insertions(+) + src/lxc/conf.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 71 insertions(+) diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 14d5d80..0f227aa 100644 +index 235965f..15d8e42 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c -@@ -1516,6 +1516,66 @@ error: +@@ -1449,6 +1449,68 @@ error: return false; } ++#ifdef HAVE_ISULAD +static bool remount_readwrite(const char *path) +{ + int ret, i; @@ -54,13 +53,13 @@ index 14d5d80..0f227aa 100644 + return false; +} + -+static int remount_proc_sys_mount_entries(struct lxc_list *mount_list) ++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); ++ file = make_anonymous_mount_file(mount_list, lsm_aa_allow_nesting); + if (!file) + return -1; + @@ -78,41 +77,27 @@ index 14d5d80..0f227aa 100644 + 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) { -@@ -2699,6 +2759,13 @@ static int mount_file_entries(const struct lxc_conf *conf, - int ret = -1; - - while (getmntent_r(file, &mntent, buf, sizeof(buf))) { -+ //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) { -@@ -4254,6 +4321,16 @@ int lxc_setup(struct lxc_handler *handler) +@@ -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)) { -+ ERROR("failed to remount /proc/sys"); -+ goto on_error; ++ 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"); + } + } + } + - if (!lxc_list_empty(&lxc_conf->keepcaps)) { - if (!lxc_list_empty(&lxc_conf->caps)) { - ERROR("Container requests lxc.cap.drop and " + // 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-clear-ONLCR-flag-from-master-of-terminal.patch b/0048-clear-ONLCR-flag-from-master-of-terminal.patch deleted file mode 100644 index 8ce255b..0000000 --- a/0048-clear-ONLCR-flag-from-master-of-terminal.patch +++ /dev/null @@ -1,59 +0,0 @@ -From fc95cef9efded165758645b8f04da7c0ffd6b762 Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Thu, 17 Jan 2019 20:46:33 +0800 -Subject: [PATCH 048/140] clear ONLCR flag from master of terminal - -clear ONLCR flag from master of terminal - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/terminal.c | 25 +++++++++++++++++++++++++ - 1 file changed, 25 insertions(+) - -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index a33830d..95140e0 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -1066,6 +1066,24 @@ static int lxc_terminal_fifo_default(struct lxc_terminal *terminal) - return lxc_terminal_set_fifo(terminal, terminal->init_fifo[0], terminal->init_fifo[1]); - } - -+/* -+ * isulad: disable (XSI) Map NL to CR-NL on output. -+ * */ -+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; -@@ -1082,6 +1100,13 @@ 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/0095-lxc-don-t-use-the-unified-hierarchy-for-the-systemd-.patch b/0048-don-t-use-the-unified-hierarchy-for-the-systemd-cgro.patch similarity index 79% rename from 0095-lxc-don-t-use-the-unified-hierarchy-for-the-systemd-.patch rename to 0048-don-t-use-the-unified-hierarchy-for-the-systemd-cgro.patch index b5a550e..aab73c3 100644 --- a/0095-lxc-don-t-use-the-unified-hierarchy-for-the-systemd-.patch +++ b/0048-don-t-use-the-unified-hierarchy-for-the-systemd-cgro.patch @@ -1,22 +1,18 @@ -From 724ce7ab5bf6dd83ee034d13b2d60515632e1d67 Mon Sep 17 00:00:00 2001 +From 4dfcafd037464a64047b70ffea3b91a70514ae92 Mon Sep 17 00:00:00 2001 From: liuhao Date: Fri, 10 May 2019 11:05:42 +0800 -Subject: [PATCH 095/140] lxc: don't use the unified hierarchy for the systemd - cgroup - -reason:don't use the unified hierarchy for the systemd cgroup +Subject: [PATCH 48/49] don't use the unified hierarchy for the systemd cgroup Signed-off-by: zhangsong -Signed-off-by: LiFeng --- 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 2bf142f..eee7ed6 100644 +index 4abaa86..4a0961f 100644 --- a/src/lxc/cgroups/cgfsng.c +++ b/src/lxc/cgroups/cgfsng.c -@@ -1571,6 +1571,7 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, +@@ -2097,6 +2097,7 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, int i, ret; char *tmpfspath = NULL; char *systemdpath = NULL; @@ -24,7 +20,7 @@ index 2bf142f..eee7ed6 100644 bool has_cgns = false, retval = false, wants_force_mount = false; char **merged = NULL; -@@ -1718,6 +1719,16 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, +@@ -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) { @@ -41,7 +37,7 @@ index 2bf142f..eee7ed6 100644 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); -@@ -1734,6 +1745,9 @@ on_error: +@@ -2261,6 +2272,9 @@ on_error: if (systemdpath != NULL) { free(systemdpath); } diff --git a/0049-Add-100ms-timeout-for-console-epoll.patch b/0049-Add-100ms-timeout-for-console-epoll.patch deleted file mode 100644 index 813462e..0000000 --- a/0049-Add-100ms-timeout-for-console-epoll.patch +++ /dev/null @@ -1,28 +0,0 @@ -From c144ed16a5a45c8dc2873bbb1016d8bc1fc02a9c Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Sat, 19 Jan 2019 02:05:17 -0500 -Subject: [PATCH 049/140] Add 100ms timeout for console epoll - -add 100ms timeout for console epoll to avoid lose console - -Signed-off-by: LiFeng ---- - src/lxc/start.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 7bbcb00..daf2af4 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -643,7 +643,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) { --- -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 new file mode 100644 index 0000000..1d10ca4 --- /dev/null +++ b/0049-make-dev-bind-mount-from-host-tmpfs-for-system-conta.patch @@ -0,0 +1,99 @@ +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 new file mode 100644 index 0000000..82db298 --- /dev/null +++ b/0050-clean-add-init-fd-in-lxc_init_clean_handler.patch @@ -0,0 +1,27 @@ +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/0050-seccomp-add-rules-for-specified-architecture-only.patch b/0050-seccomp-add-rules-for-specified-architecture-only.patch deleted file mode 100644 index 1291f69..0000000 --- a/0050-seccomp-add-rules-for-specified-architecture-only.patch +++ /dev/null @@ -1,408 +0,0 @@ -From 15d3b1e6c5e5ac896b15d04d486ba0c04ca39336 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Fri, 18 Jan 2019 02:11:11 -0500 -Subject: [PATCH 050/140] seccomp: add rules for specified architecture only - -LXC MR: https://github.com/lxc/lxc/pull/2786 - -Signed-off-by: LiFeng ---- - src/lxc/seccomp.c | 234 ++++++++++++++++++++++++++++++------------------------ - 1 file changed, 132 insertions(+), 102 deletions(-) - -diff --git a/src/lxc/seccomp.c b/src/lxc/seccomp.c -index 27bdc22..4a9143b 100644 ---- a/src/lxc/seccomp.c -+++ b/src/lxc/seccomp.c -@@ -291,7 +291,7 @@ on_error: - #endif - - #if HAVE_DECL_SECCOMP_SYSCALL_RESOLVE_NAME_ARCH --enum lxc_hostarch_t { -+enum lxc_arch_t { - lxc_seccomp_arch_all = 0, - lxc_seccomp_arch_native, - lxc_seccomp_arch_i386, -@@ -345,8 +345,8 @@ int get_hostarch(void) - return lxc_seccomp_arch_unknown; - } - --scmp_filter_ctx get_new_ctx(enum lxc_hostarch_t n_arch, -- uint32_t default_policy_action, bool *needs_merge) -+scmp_filter_ctx get_new_ctx(enum lxc_arch_t n_arch, -+ uint32_t default_policy_action) - { - int ret; - uint32_t arch; -@@ -464,10 +464,7 @@ scmp_filter_ctx get_new_ctx(enum lxc_hostarch_t n_arch, - return NULL; - } - TRACE("Removed native arch from main seccomp context"); -- -- *needs_merge = true; - } else { -- *needs_merge = false; - TRACE("Arch %d already present in main seccomp context", (int)n_arch); - } - -@@ -550,6 +547,27 @@ bool do_resolve_add_rule(uint32_t arch, char *line, scmp_filter_ctx ctx, - return true; - } - -+#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; -+} -+ - /* - * v2 consists of - * [x86] -@@ -568,15 +586,11 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - { - int ret; - char *p; -- enum lxc_hostarch_t cur_rule_arch, native_arch; -+ 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 { -- uint32_t architectures[3]; -- scmp_filter_ctx contexts[3]; -- bool needs_merge[3]; -- } ctx; -+ struct scmp_ctx_info ctx; - - if (strncmp(line, "blacklist", 9) == 0) - blacklist = true; -@@ -617,23 +631,23 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - cur_rule_arch = lxc_seccomp_arch_all; - - ctx.architectures[0] = SCMP_ARCH_X86; -+ ctx.lxc_arch[0] = lxc_seccomp_arch_i386; - ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_i386, -- default_policy_action, -- &ctx.needs_merge[0]); -+ default_policy_action); - if (!ctx.contexts[0]) - goto bad; - - ctx.architectures[1] = SCMP_ARCH_X32; -+ ctx.lxc_arch[1] = lxc_seccomp_arch_x32; - ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_x32, -- default_policy_action, -- &ctx.needs_merge[1]); -+ default_policy_action); - if (!ctx.contexts[1]) - goto bad; - - ctx.architectures[2] = SCMP_ARCH_X86_64; -+ ctx.lxc_arch[2] = lxc_seccomp_arch_amd64; - ctx.contexts[2] = get_new_ctx(lxc_seccomp_arch_amd64, -- default_policy_action, -- &ctx.needs_merge[2]); -+ default_policy_action); - if (!ctx.contexts[2]) - goto bad; - #ifdef SCMP_ARCH_PPC -@@ -641,17 +655,17 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - cur_rule_arch = lxc_seccomp_arch_all; - - ctx.architectures[0] = SCMP_ARCH_PPC; -+ ctx.lxc_arch[0] = lxc_seccomp_arch_ppc; - ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_ppc, -- default_policy_action, -- &ctx.needs_merge[0]); -+ default_policy_action); - if (!ctx.contexts[0]) - goto bad; - -- ctx.architectures[2] = SCMP_ARCH_PPC64; -- ctx.contexts[2] = get_new_ctx(lxc_seccomp_arch_ppc64, -- default_policy_action, -- &ctx.needs_merge[2]); -- if (!ctx.contexts[2]) -+ ctx.architectures[1] = SCMP_ARCH_PPC64; -+ ctx.lxc_arch[1] = lxc_seccomp_arch_ppc64; -+ ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_ppc64, -+ default_policy_action); -+ if (!ctx.contexts[1]) - goto bad; - #endif - #ifdef SCMP_ARCH_ARM -@@ -659,18 +673,18 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - cur_rule_arch = lxc_seccomp_arch_all; - - ctx.architectures[0] = SCMP_ARCH_ARM; -+ ctx.lxc_arch[0] = lxc_seccomp_arch_arm; - ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_arm, -- default_policy_action, -- &ctx.needs_merge[0]); -+ default_policy_action); - if (!ctx.contexts[0]) - goto bad; - - #ifdef SCMP_ARCH_AARCH64 -- ctx.architectures[2] = SCMP_ARCH_AARCH64; -- ctx.contexts[2] = get_new_ctx(lxc_seccomp_arch_arm64, -- default_policy_action, -- &ctx.needs_merge[2]); -- if (!ctx.contexts[2]) -+ ctx.architectures[1] = SCMP_ARCH_AARCH64; -+ ctx.lxc_arch[1] = lxc_seccomp_arch_arm64; -+ ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_arm64, -+ default_policy_action); -+ if (!ctx.contexts[1]) - goto bad; - #endif - #endif -@@ -679,46 +693,46 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - cur_rule_arch = lxc_seccomp_arch_all; - - ctx.architectures[0] = SCMP_ARCH_MIPS; -+ ctx.lxc_arch[0] = lxc_seccomp_arch_mips; - ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_mips, -- default_policy_action, -- &ctx.needs_merge[0]); -+ default_policy_action); - if (!ctx.contexts[0]) - goto bad; - - ctx.architectures[1] = SCMP_ARCH_MIPS64N32; -+ ctx.lxc_arch[1] = lxc_seccomp_arch_mips64n32; - ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_mips64n32, -- default_policy_action, -- &ctx.needs_merge[1]); -+ default_policy_action); - if (!ctx.contexts[1]) - goto bad; - - ctx.architectures[2] = SCMP_ARCH_MIPS64; -+ ctx.lxc_arch[2] = lxc_seccomp_arch_mips64; - ctx.contexts[2] = get_new_ctx(lxc_seccomp_arch_mips64, -- default_policy_action, -- &ctx.needs_merge[2]); -+ default_policy_action); - if (!ctx.contexts[2]) - goto bad; - } else if (native_arch == lxc_seccomp_arch_mipsel64) { - cur_rule_arch = lxc_seccomp_arch_all; - - ctx.architectures[0] = SCMP_ARCH_MIPSEL; -+ ctx.lxc_arch[0] = lxc_seccomp_arch_mipsel; - ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_mipsel, -- default_policy_action, -- &ctx.needs_merge[0]); -+ default_policy_action); - if (!ctx.contexts[0]) - goto bad; - - ctx.architectures[1] = SCMP_ARCH_MIPSEL64N32; -+ ctx.lxc_arch[1] = lxc_seccomp_arch_mipsel64n32; - ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_mipsel64n32, -- default_policy_action, -- &ctx.needs_merge[1]); -+ default_policy_action); - if (!ctx.contexts[1]) - goto bad; - - ctx.architectures[2] = SCMP_ARCH_MIPSEL64; -+ ctx.lxc_arch[2] = lxc_seccomp_arch_mipsel64; - ctx.contexts[2] = get_new_ctx(lxc_seccomp_arch_mipsel64, -- default_policy_action, -- &ctx.needs_merge[2]); -+ default_policy_action); - if (!ctx.contexts[2]) - goto bad; - #endif -@@ -928,97 +942,113 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - goto bad_rule; - } - -- if (!do_resolve_add_rule(SCMP_ARCH_NATIVE, line, -- conf->seccomp_ctx, &rule)) -- goto bad_rule; -+ if (cur_rule_arch == native_arch) { -+ if (!do_resolve_add_rule(SCMP_ARCH_NATIVE, line, -+ conf->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) { -+ int arch_index = get_arch_index(cur_rule_arch, &ctx); -+ if (arch_index < 0) -+ goto bad_arch; - -- INFO("Added native rule for arch %d for %s action %d(%s)", -- SCMP_ARCH_NATIVE, line, rule.action, -- get_action_name(rule.action)); -+ if (!do_resolve_add_rule(ctx.architectures[arch_index], line, -+ ctx.contexts[arch_index], &rule)) -+ goto bad_rule; - -- if (cur_rule_arch == lxc_seccomp_arch_all) { -+ 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 { - if (ctx.architectures[0] != SCMP_ARCH_NATIVE) { - if (!do_resolve_add_rule(ctx.architectures[0], line, -- ctx.contexts[0], &rule)) -+ 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)); -+ 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)) -+ 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.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)) -+ 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.architectures[2], line, rule.action, -+ get_action_name(rule.action)); -+ ctx.needs_merge[2] = true; - } - } -- } - -- if (cur_rule_arch == lxc_seccomp_arch_all) { -- INFO("Merging compat seccomp contexts into main context"); -- if (ctx.contexts[0]) { -- if (ctx.needs_merge[0]) { -- ret = seccomp_merge(conf->seccomp_ctx, ctx.contexts[0]); -- if (ret < 0) { -- ERROR("Failed to merge first compat seccomp " -- "context into main context"); -- goto bad; -- } -+ } - -- TRACE("Merged first compat seccomp context into main context"); -- } else { -- seccomp_release(ctx.contexts[0]); -- ctx.contexts[0] = NULL; -+ INFO("Merging compat seccomp contexts into main context"); -+ if (ctx.contexts[0]) { -+ if (ctx.needs_merge[0]) { -+ ret = seccomp_merge(conf->seccomp_ctx, ctx.contexts[0]); -+ if (ret < 0) { -+ ERROR("%s - Failed to merge first compat seccomp " -+ "context into main context", strerror(-ret)); -+ goto bad; - } -- } - -- if (ctx.contexts[1]) { -- if (ctx.needs_merge[1]) { -- ret = seccomp_merge(conf->seccomp_ctx, ctx.contexts[1]); -- if (ret < 0) { -- ERROR("Failed to merge first compat seccomp " -- "context into main context"); -- goto bad; -- } -+ TRACE("Merged first compat seccomp context into main context"); -+ } else { -+ seccomp_release(ctx.contexts[0]); -+ ctx.contexts[0] = NULL; -+ } -+ } - -- TRACE("Merged second compat seccomp context into main context"); -- } else { -- seccomp_release(ctx.contexts[1]); -- ctx.contexts[1] = NULL; -+ if (ctx.contexts[1]) { -+ if (ctx.needs_merge[1]) { -+ ret = seccomp_merge(conf->seccomp_ctx, ctx.contexts[1]); -+ if (ret < 0) { -+ ERROR("%s - Failed to merge second compat seccomp " -+ "context into main context", strerror(-ret)); -+ goto bad; - } -- } - -- if (ctx.contexts[2]) { -- if (ctx.needs_merge[2]) { -- ret = seccomp_merge(conf->seccomp_ctx, ctx.contexts[2]); -- if (ret < 0) { -- ERROR("Failed to merge third compat seccomp " -- "context into main context"); -- goto bad; -- } -+ TRACE("Merged second compat seccomp context into main context"); -+ } else { -+ seccomp_release(ctx.contexts[1]); -+ ctx.contexts[1] = NULL; -+ } -+ } - -- TRACE("Merged third compat seccomp context into main context"); -- } else { -- seccomp_release(ctx.contexts[2]); -- ctx.contexts[2] = NULL; -+ if (ctx.contexts[2]) { -+ if (ctx.needs_merge[2]) { -+ ret = seccomp_merge(conf->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; - --- -1.8.3.1 - diff --git a/0051-if-ocihook-is-empty.patch b/0051-if-ocihook-is-empty.patch deleted file mode 100644 index 71079f9..0000000 --- a/0051-if-ocihook-is-empty.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 629036e2732ed24c776b422271cef51cf8458f18 Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Tue, 22 Jan 2019 11:25:45 +0800 -Subject: [PATCH 051/140] if ocihook is empty - -return success - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 48e31af..6ea8f9c 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4782,9 +4782,12 @@ static int run_oci_hooks(const char *name, const char *lxcpath, struct lxc_conf - int ret = 0; - char *rootpath; - -- if (!lc || !lc->ocihooks) { -+ if (!lc) { - return -1; - } -+ if (!lc->ocihooks) { -+ return 0; -+ } - - rootpath = get_root_path(lc->rootfs.path, lc->rootfs.bdev_type); - if (!rootpath) { --- -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 new file mode 100644 index 0000000..8fceaa5 --- /dev/null +++ b/0051-init-pids-add-init-fd-in-lxc_init_pids_handler.patch @@ -0,0 +1,26 @@ +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-Fix-seccomp-fail-when-all-specified-in-config.patch b/0052-Fix-seccomp-fail-when-all-specified-in-config.patch deleted file mode 100644 index 4df5788..0000000 --- a/0052-Fix-seccomp-fail-when-all-specified-in-config.patch +++ /dev/null @@ -1,192 +0,0 @@ -From 2fbc0027a81a8ec79008afeb5298f5ec99203ea4 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 21 Jan 2019 23:28:43 -0500 -Subject: [PATCH 052/140] Fix seccomp fail when [all] specified in config - -Signed-off-by: LiFeng ---- - src/lxc/seccomp.c | 56 +++++++++++++++++++++++++++---------------------------- - 1 file changed, 28 insertions(+), 28 deletions(-) - -diff --git a/src/lxc/seccomp.c b/src/lxc/seccomp.c -index 4a9143b..3218a60 100644 ---- a/src/lxc/seccomp.c -+++ b/src/lxc/seccomp.c -@@ -346,7 +346,7 @@ int get_hostarch(void) - } - - scmp_filter_ctx get_new_ctx(enum lxc_arch_t n_arch, -- uint32_t default_policy_action) -+ uint32_t default_policy_action, uint32_t *architectures) - { - int ret; - uint32_t arch; -@@ -464,8 +464,10 @@ scmp_filter_ctx get_new_ctx(enum lxc_arch_t n_arch, - return NULL; - } - TRACE("Removed native arch from main seccomp context"); -+ *architectures = arch; - } else { - TRACE("Arch %d already present in main seccomp context", (int)n_arch); -+ *architectures = SCMP_ARCH_NATIVE; - } - - return ctx; -@@ -630,41 +632,36 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - if (native_arch == lxc_seccomp_arch_amd64) { - cur_rule_arch = lxc_seccomp_arch_all; - -- ctx.architectures[0] = SCMP_ARCH_X86; - ctx.lxc_arch[0] = lxc_seccomp_arch_i386; - ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_i386, -- default_policy_action); -+ default_policy_action, &ctx.architectures[0]); - if (!ctx.contexts[0]) - goto bad; - -- ctx.architectures[1] = SCMP_ARCH_X32; - ctx.lxc_arch[1] = lxc_seccomp_arch_x32; - ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_x32, -- default_policy_action); -+ default_policy_action, &ctx.architectures[1]); - if (!ctx.contexts[1]) - goto bad; - -- ctx.architectures[2] = SCMP_ARCH_X86_64; - ctx.lxc_arch[2] = lxc_seccomp_arch_amd64; - ctx.contexts[2] = get_new_ctx(lxc_seccomp_arch_amd64, -- default_policy_action); -+ 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.architectures[0] = SCMP_ARCH_PPC; - ctx.lxc_arch[0] = lxc_seccomp_arch_ppc; - ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_ppc, -- default_policy_action); -+ default_policy_action, &ctx.architectures[0]); - if (!ctx.contexts[0]) - goto bad; - -- ctx.architectures[1] = SCMP_ARCH_PPC64; - ctx.lxc_arch[1] = lxc_seccomp_arch_ppc64; - ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_ppc64, -- default_policy_action); -+ default_policy_action, &ctx.architectures[1]); - if (!ctx.contexts[1]) - goto bad; - #endif -@@ -672,18 +669,16 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - } else if (native_arch == lxc_seccomp_arch_arm64) { - cur_rule_arch = lxc_seccomp_arch_all; - -- ctx.architectures[0] = SCMP_ARCH_ARM; - ctx.lxc_arch[0] = lxc_seccomp_arch_arm; - ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_arm, -- default_policy_action); -+ default_policy_action, &ctx.architectures[0]); - if (!ctx.contexts[0]) - goto bad; - - #ifdef SCMP_ARCH_AARCH64 -- ctx.architectures[1] = SCMP_ARCH_AARCH64; - ctx.lxc_arch[1] = lxc_seccomp_arch_arm64; - ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_arm64, -- default_policy_action); -+ default_policy_action, &ctx.architectures[1]); - if (!ctx.contexts[1]) - goto bad; - #endif -@@ -692,47 +687,41 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - } else if (native_arch == lxc_seccomp_arch_mips64) { - cur_rule_arch = lxc_seccomp_arch_all; - -- ctx.architectures[0] = SCMP_ARCH_MIPS; - ctx.lxc_arch[0] = lxc_seccomp_arch_mips; - ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_mips, -- default_policy_action); -+ default_policy_action, &ctx.architectures[0]); - if (!ctx.contexts[0]) - goto bad; - -- ctx.architectures[1] = SCMP_ARCH_MIPS64N32; - ctx.lxc_arch[1] = lxc_seccomp_arch_mips64n32; - ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_mips64n32, -- default_policy_action); -+ default_policy_action, &ctx.architectures[1]); - if (!ctx.contexts[1]) - goto bad; - -- ctx.architectures[2] = SCMP_ARCH_MIPS64; - ctx.lxc_arch[2] = lxc_seccomp_arch_mips64; - ctx.contexts[2] = get_new_ctx(lxc_seccomp_arch_mips64, -- default_policy_action); -+ 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.architectures[0] = SCMP_ARCH_MIPSEL; -+; - ctx.lxc_arch[0] = lxc_seccomp_arch_mipsel; - ctx.contexts[0] = get_new_ctx(lxc_seccomp_arch_mipsel, -- default_policy_action); -+ default_policy_action, &ctx.architectures[0]); - if (!ctx.contexts[0]) - goto bad; - -- ctx.architectures[1] = SCMP_ARCH_MIPSEL64N32; - ctx.lxc_arch[1] = lxc_seccomp_arch_mipsel64n32; - ctx.contexts[1] = get_new_ctx(lxc_seccomp_arch_mipsel64n32, -- default_policy_action); -+ default_policy_action, &ctx.architectures[1]); - if (!ctx.contexts[1]) - goto bad; - -- ctx.architectures[2] = SCMP_ARCH_MIPSEL64; - ctx.lxc_arch[2] = lxc_seccomp_arch_mipsel64; - ctx.contexts[2] = get_new_ctx(lxc_seccomp_arch_mipsel64, -- default_policy_action); -+ default_policy_action, &ctx.architectures[2]); - if (!ctx.contexts[2]) - goto bad; - #endif -@@ -943,6 +932,7 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - } - - if (cur_rule_arch == native_arch) { -+ /* add for native arch */ - if (!do_resolve_add_rule(SCMP_ARCH_NATIVE, line, - conf->seccomp_ctx, &rule)) - goto bad_rule; -@@ -951,6 +941,7 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - 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; -@@ -964,6 +955,15 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - 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_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)) --- -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 new file mode 100644 index 0000000..cac78bf --- /dev/null +++ b/0052-setupdev-add-judge-whether-have-mount-dev-entry.patch @@ -0,0 +1,132 @@ +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 new file mode 100644 index 0000000..ed70a7b --- /dev/null +++ b/0053-attach-seprate-i-and-t-flags.patch @@ -0,0 +1,288 @@ +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/0053-destroy-empty-cgroup-path-return-ture.patch b/0053-destroy-empty-cgroup-path-return-ture.patch deleted file mode 100644 index 4ed4b5d..0000000 --- a/0053-destroy-empty-cgroup-path-return-ture.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 55aa538a996fb98bd76ca41029c93147d22c1ecf Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Tue, 22 Jan 2019 14:45:54 +0800 -Subject: [PATCH 053/140] destroy empty cgroup path return ture - -destroy empty cgroup path return ture - -Signed-off-by: liuhao -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 c8fb993..24e975b 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -1776,6 +1776,10 @@ int recursive_destroy(char *dirname) - - dir = opendir(dirname); - if (!dir) { -+ if (errno == ENOENT) { -+ WARN("Destroy path: %s do not exist"); -+ return 0; -+ } - SYSERROR("Failed to open dir \"%s\"", dirname); - return -1; - } --- -1.8.3.1 - diff --git a/0054-fix-invalid-log-message.patch b/0054-fix-invalid-log-message.patch deleted file mode 100644 index 86aa641..0000000 --- a/0054-fix-invalid-log-message.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 6ca37fb9e3838f3ddffec7e0325e37e6925f3562 Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Tue, 22 Jan 2019 20:14:53 +0800 -Subject: [PATCH 054/140] fix invalid log message - -fix invalid log message - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 1 - - src/lxc/utils.c | 2 +- - 2 files changed, 1 insertion(+), 2 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 6ea8f9c..1e403eb 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -2708,7 +2708,6 @@ static int mount_file_entries(const struct lxc_conf *conf, - free(mntent.mnt_fsname); - return -1; - } -- ERROR("mntent.mnt_fsname:%s, mntent.mnt_dir:%s", mntent.mnt_fsname, mntent.mnt_dir); - if (!rootfs->path) - ret = mount_entry_on_systemfs(&mntent); - else if (mntent.mnt_dir[0] != '/') -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 24e975b..4db61c5 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -1777,7 +1777,7 @@ int recursive_destroy(char *dirname) - dir = opendir(dirname); - if (!dir) { - if (errno == ENOENT) { -- WARN("Destroy path: %s do not exist"); -+ WARN("Destroy path: \"%s\" do not exist", dirname); - return 0; - } - SYSERROR("Failed to open dir \"%s\"", dirname); --- -1.8.3.1 - diff --git a/0041-return-1-when-_lxc_start-fails.patch b/0054-start-do-not-check-pid-die-when-lxc_poll-exit.patch similarity index 36% rename from 0041-return-1-when-_lxc_start-fails.patch rename to 0054-start-do-not-check-pid-die-when-lxc_poll-exit.patch index c62b4d3..99681e0 100644 --- a/0041-return-1-when-_lxc_start-fails.patch +++ b/0054-start-do-not-check-pid-die-when-lxc_poll-exit.patch @@ -1,25 +1,31 @@ -From 4315f825763d752a9a9dfcb3ade70368634ee15d Mon Sep 17 00:00:00 2001 +From d5558ec70cbc4949d0a411ec32278201fdc189db Mon Sep 17 00:00:00 2001 From: LiFeng -Date: Wed, 16 Jan 2019 05:53:36 -0500 -Subject: [PATCH 041/140] return -1 when _lxc_start fails +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 | 1 + - 1 file changed, 1 insertion(+) + src/lxc/start.c | 2 ++ + 1 file changed, 2 insertions(+) diff --git a/src/lxc/start.c b/src/lxc/start.c -index 3e6854f..7bbcb00 100644 +index 68a6116..51d1325 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c -@@ -2175,6 +2175,7 @@ int __lxc_start(const char *name, struct lxc_handler *handler, +@@ -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_abort; + 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-Fix-compile-error.patch b/0055-Fix-compile-error.patch deleted file mode 100644 index 45188cd..0000000 --- a/0055-Fix-compile-error.patch +++ /dev/null @@ -1,229 +0,0 @@ -From e1e5091673c7464a320cdfc08d91ad176a636f71 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 24 Jan 2019 05:14:24 -0500 -Subject: [PATCH 055/140] Fix compile error - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 13 ------------- - src/lxc/conf.c | 8 ++------ - src/lxc/confile.c | 1 - - src/lxc/start.c | 2 -- - src/lxc/terminal.c | 32 ++++++++++++++++---------------- - src/lxc/terminal.h | 3 --- - src/lxc/tools/lxc_attach.c | 2 -- - src/lxc/utils.c | 1 - - 8 files changed, 18 insertions(+), 44 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 6bfa693..e513218 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1263,18 +1263,6 @@ static bool create_path_for_hierarchy(struct hierarchy *h, char *cgname, int err - return cg_unified_create_cgroup(h, cgname); - } - --static void remove_path_for_hierarchy(struct hierarchy *h, char *cgname) --{ -- int ret; -- -- ret = rmdir(h->container_full_path); -- if (ret < 0) -- SYSERROR("Failed to rmdir(\"%s\") from failed creation attempt", h->container_full_path); -- -- free(h->container_full_path); -- h->container_full_path = NULL; --} -- - /* isulad: create hierarchies path, if fail, return the error */ - __cgfsng_ops static bool cgfsng_payload_create(struct cgroup_ops *ops, - struct lxc_handler *handler) -@@ -2439,7 +2427,6 @@ static bool cg_hybrid_init(struct cgroup_ops *ops) - - while (getline(&line, &len, f) != -1) { - int type; -- bool writeable; - struct hierarchy *new; - char *base_cgroup = NULL, *mountpoint = NULL; - char **controller_list = NULL; -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 1e403eb..4800943 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -1518,7 +1518,7 @@ error: - // 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, savederrno, i; -+ int ret, i; - - if (!path) - return true; -@@ -4005,7 +4005,7 @@ 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 / as readonly"); -- if (mount("/", "/", NULL, MS_BIND | MS_REMOUNT | MS_RDONLY, 0) < 0) { -+ if (mount("/", "/", NULL, mflags, 0) < 0) { - SYSERROR("Failed to make / readonly."); - return -1; - } -@@ -4776,7 +4776,6 @@ default_out: - static int run_oci_hooks(const char *name, const char *lxcpath, struct lxc_conf *lc, int which, int errfd) - { - struct oci_hook_conf work_conf = {0}; -- oci_runtime_spec_hooks *ocihooks = NULL; - size_t i; - int ret = 0; - char *rootpath; -@@ -4836,7 +4835,6 @@ int run_lxc_hooks(const char *name, char *hookname, struct lxc_conf *conf, - int which = -1; - - if (strcmp(hookname, "oci-prestart") == 0) { -- int ret; - which = OCI_HOOK_PRESTART; - if (!argv || !argv[0]) { - ERROR("oci hook require lxcpath"); -@@ -4844,7 +4842,6 @@ int run_lxc_hooks(const char *name, char *hookname, struct lxc_conf *conf, - } - return run_oci_hooks(name, argv[0], conf, which, conf->errpipe[1]); - } else if (strcmp(hookname, "oci-poststart") == 0) { -- int ret; - which = OCI_HOOK_POSTSTART; - if (!argv || !argv[0]) { - ERROR("oci hook require lxcpath"); -@@ -4852,7 +4849,6 @@ int run_lxc_hooks(const char *name, char *hookname, struct lxc_conf *conf, - } - return run_oci_hooks(name, argv[0], conf, which, conf->errpipe[1]); - } else if (strcmp(hookname, "oci-poststop") == 0) { -- int ret; - which = OCI_HOOK_POSTSTOP; - if (!argv || !argv[0]) { - ERROR("oci hook require lxcpath"); -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 7e9d5c8..f66d01b 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -3909,7 +3909,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/start.c b/src/lxc/start.c -index daf2af4..816b4a2 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -2470,8 +2470,6 @@ retry: - ret = -1; - } - -- --out_fini_handler: - lxc_free_handler(handler); - out: - return ret; -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 95140e0..252a644 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -418,6 +418,21 @@ static void lxc_forward_data_to_fifo(struct lxc_list *list, char *buf, int 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,*next; -+ 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; -+} -+ - int lxc_terminal_io_cb(int fd, uint32_t events, void *data, - struct lxc_epoll_descr *descr) - { -@@ -1067,7 +1082,7 @@ static int lxc_terminal_fifo_default(struct lxc_terminal *terminal) - } - - /* -- * isulad: disable (XSI) Map NL to CR-NL on output. -+ * isulad: disable (XSI) Map NL to CR-NL on output. - * */ - static int use_unix_newline(int master_fd) - { -@@ -1427,21 +1442,6 @@ void lxc_terminal_init(struct lxc_terminal *terminal) - lxc_list_init(&terminal->fifos); - } - --/* isulad: judge the fd whether is fifo */ --static bool lxc_terminal_is_fifo(int fd, struct lxc_list *list) --{ -- struct lxc_list *it,*next; -- 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) - { -diff --git a/src/lxc/terminal.h b/src/lxc/terminal.h -index d006b80..0c9653c 100644 ---- a/src/lxc/terminal.h -+++ b/src/lxc/terminal.h -@@ -305,9 +305,6 @@ extern void lxc_terminal_info_init(struct lxc_terminal_info *terminal); - extern void lxc_terminal_init(struct lxc_terminal *terminal); - extern int lxc_terminal_map_ids(struct lxc_conf *c, - struct lxc_terminal *terminal); -- --/* isulad: judge the fd whether is fifo*/ --static bool lxc_terminal_is_fifo(int fd, struct lxc_list *list); - /* isulad: if fd == -1, means delete all the fifos*/ - int lxc_terminal_delete_fifo(int fd, struct lxc_list *list); - int lxc_terminal_add_fifos(struct lxc_conf *conf, const char *fifonames); -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index a590fd1..8856934 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -398,11 +398,9 @@ out: - - int main(int argc, char *argv[]) - { -- int ret = -1; - int wexit = 0; - char *errmsg = NULL; - struct lxc_log log; -- 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 4db61c5..9a50fce 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -2026,7 +2026,6 @@ void lxc_write_error_message(int errfd, const char *format, ...) - - bool lxc_process_alive(pid_t pid, unsigned long long start_time) - { -- int ret; - int sret = 0; - bool alive = true; - proc_t *pid_info = NULL; --- -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 new file mode 100644 index 0000000..daaee5e --- /dev/null +++ b/0055-terminal-not-close-pipe-when-lxc_poll-exit.patch @@ -0,0 +1,64 @@ +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 new file mode 100644 index 0000000..71bb8f6 --- /dev/null +++ b/0056-attach-add-sigfd-to-monitor-the-exit-of-pid.patch @@ -0,0 +1,178 @@ +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/0056-caps-use-_LINUX_CAPABILITY_VERSION_3-to-set-cap.patch b/0056-caps-use-_LINUX_CAPABILITY_VERSION_3-to-set-cap.patch deleted file mode 100644 index 9539bd1..0000000 --- a/0056-caps-use-_LINUX_CAPABILITY_VERSION_3-to-set-cap.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 94ae346e2bff8bb29eae17604b75b1de19258277 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Sat, 26 Jan 2019 02:22:48 -0500 -Subject: [PATCH 056/140] [caps]: use _LINUX_CAPABILITY_VERSION_3 to set cap - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 8 ++++---- - src/lxc/seccomp.c | 1 - - 2 files changed, 4 insertions(+), 5 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 4800943..0c6aa28 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4322,13 +4322,13 @@ int lxc_drop_caps(struct lxc_conf *conf) - memset(cap_data, 0, sizeof(struct __user_cap_data_struct) * 2); - - cap_header->pid = 0; -- cap_header->version = _LINUX_CAPABILITY_VERSION; -+ 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 | __DEF_CAP_TO_MASK(i); -- cap_data[CAP_TO_INDEX(i)].permitted = cap_data[CAP_TO_INDEX(i)].permitted | __DEF_CAP_TO_MASK(i); -- cap_data[CAP_TO_INDEX(i)].inheritable = cap_data[CAP_TO_INDEX(i)].inheritable | __DEF_CAP_TO_MASK(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)); - } - } - -diff --git a/src/lxc/seccomp.c b/src/lxc/seccomp.c -index 3218a60..4a5b3d0 100644 ---- a/src/lxc/seccomp.c -+++ b/src/lxc/seccomp.c -@@ -706,7 +706,6 @@ static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_c - 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]); --- -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 new file mode 100644 index 0000000..e6a3e9c --- /dev/null +++ b/0057-attach-add-read-data-from-attach-sigfd.patch @@ -0,0 +1,34 @@ +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-do-not-check-ppid-when-set-death-signal.patch b/0058-do-not-check-ppid-when-set-death-signal.patch deleted file mode 100644 index a28818e..0000000 --- a/0058-do-not-check-ppid-when-set-death-signal.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 2c5d318fb3a809c017e0b57c80de500bceb9b495 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Tue, 12 Feb 2019 14:00:47 +0800 -Subject: [PATCH 058/140] do not check ppid when set death signal - -ppid will not be 0 if we shared host pid - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/utils.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 9a50fce..0aa87aa 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -1722,12 +1722,13 @@ int lxc_set_death_signal(int signal, pid_t parent) - prctl_arg(0), prctl_arg(0)); - - /* Check whether we have been orphaned. */ -- ppid = (pid_t)syscall(SYS_getppid); -+ /* isulad: delete this check, ppid will not be 0 if we shared host pid */ -+ /*ppid = (pid_t)syscall(SYS_getppid); - if (ppid != parent) { - ret = raise(SIGKILL); - if (ret < 0) - return -1; -- } -+ }*/ - - if (ret < 0) - return -1; --- -1.8.3.1 - diff --git a/0058-support-syslog-for-console.patch b/0058-support-syslog-for-console.patch new file mode 100644 index 0000000..cab967e --- /dev/null +++ b/0058-support-syslog-for-console.patch @@ -0,0 +1,251 @@ +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-delete-unused-variable-ppid.patch b/0059-delete-unused-variable-ppid.patch deleted file mode 100644 index abce727..0000000 --- a/0059-delete-unused-variable-ppid.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 72e156f81d0db66d42724172a9d4b6fefbd6fabc Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Tue, 12 Feb 2019 14:36:35 +0800 -Subject: [PATCH 059/140] delete unused variable ppid - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/utils.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 0aa87aa..91ba493 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -1716,7 +1716,7 @@ uint64_t lxc_find_next_power2(uint64_t n) - int lxc_set_death_signal(int signal, pid_t parent) - { - int ret; -- pid_t ppid; -+ //pid_t ppid; - - ret = prctl(PR_SET_PDEATHSIG, prctl_arg(signal), prctl_arg(0), - prctl_arg(0), prctl_arg(0)); --- -1.8.3.1 - diff --git a/0060-using-json-file-to-write-console-log-of-container.patch b/0060-using-json-file-to-write-console-log-of-container.patch deleted file mode 100644 index 3d0e757..0000000 --- a/0060-using-json-file-to-write-console-log-of-container.patch +++ /dev/null @@ -1,610 +0,0 @@ -From d402202eb37433f26c1e9f4ab11ce8e530ad19e7 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Wed, 30 Jan 2019 17:44:19 +0800 -Subject: [PATCH 060/140] using json-file to write console log of container - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/Makefile.am | 2 + - src/lxc/json/json_common.c | 14 ++- - src/lxc/json/json_common.h | 2 + - src/lxc/json/logger_json_file.c | 243 ++++++++++++++++++++++++++++++++++++++++ - src/lxc/json/logger_json_file.h | 45 ++++++++ - src/lxc/terminal.c | 166 +++++++++++++++++++++++++-- - 6 files changed, 457 insertions(+), 15 deletions(-) - create mode 100644 src/lxc/json/logger_json_file.c - create mode 100644 src/lxc/json/logger_json_file.h - -diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am -index 260a7eb..698f8f9 100644 ---- a/src/lxc/Makefile.am -+++ b/src/lxc/Makefile.am -@@ -47,6 +47,7 @@ noinst_HEADERS = attach.h \ - json/json_common.h \ - json/oci_runtime_hooks.h \ - json/oci_runtime_spec.h \ -+ json/logger_json_file.h \ - json/read-file.h \ - utils.h - -@@ -149,6 +150,7 @@ liblxc_la_SOURCES = af_unix.c af_unix.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 \ - $(LSM_SOURCES) -diff --git a/src/lxc/json/json_common.c b/src/lxc/json/json_common.c -index 8b91844..e339ab3 100755 ---- a/src/lxc/json/json_common.c -+++ b/src/lxc/json/json_common.c -@@ -86,7 +86,7 @@ bool json_gen_init(yajl_gen *g, struct parser_context *ctx) { - - } - yajl_gen_config(*g, yajl_gen_beautify, !(ctx->options & GEN_OPTIONS_SIMPLIFY)); -- yajl_gen_config(*g, yajl_gen_validate_utf8, 1); -+ yajl_gen_config(*g, yajl_gen_validate_utf8, !(ctx->options & GEN_OPTIONS_NOT_VALIDATE_UTF8)); - return true; - } - -@@ -1156,7 +1156,7 @@ json_map_string_string *make_json_map_string_string(yajl_val src, struct parser_ - return ret; - } - int append_json_map_string_string(json_map_string_string *map, const char *key, const char *val) { -- size_t len; -+ size_t len, i; - char **keys; - char **vals; - -@@ -1164,6 +1164,14 @@ int append_json_map_string_string(json_map_string_string *map, const char *key, - 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; - } -@@ -1193,4 +1201,4 @@ int append_json_map_string_string(json_map_string_string *map, const char *key, - - map->len++; - return 0; --} -+} -\ No newline at end of file -diff --git a/src/lxc/json/json_common.h b/src/lxc/json/json_common.h -index 904fe3c..eb8281c 100755 ---- a/src/lxc/json/json_common.h -+++ b/src/lxc/json/json_common.h -@@ -23,6 +23,8 @@ extern "C" { - # 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)) {\ -diff --git a/src/lxc/json/logger_json_file.c b/src/lxc/json/logger_json_file.c -new file mode 100644 -index 0000000..4d78103 ---- /dev/null -+++ b/src/lxc/json/logger_json_file.c -@@ -0,0 +1,243 @@ -+// Generated from json-file.json. Do not edit! -+#ifndef _GNU_SOURCE -+#define _GNU_SOURCE -+#endif -+#include -+#include -+#include "securec.h" -+#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) { -+ char *str = YAJL_GET_STRING(tmp); -+ ret->log = (uint8_t *)safe_strdup(str ? str : ""); -+ ret->log_len = str ? strlen(str) : 0; -+ } -+ } -+ { -+ yajl_val val = get_val(tree, "stream", yajl_t_string); -+ if (val) { -+ char *str = YAJL_GET_STRING(val); -+ ret->stream = safe_strdup(str ? str : ""); -+ } -+ } -+ { -+ yajl_val val = get_val(tree, "time", yajl_t_string); -+ if (val) { -+ char *str = YAJL_GET_STRING(val); -+ ret->time = safe_strdup(str ? str : ""); -+ } -+ } -+ { -+ yajl_val tmp = get_val(tree, "attrs", yajl_t_string); -+ if (tmp) { -+ char *str = YAJL_GET_STRING(tmp); -+ ret->attrs = (uint8_t *)safe_strdup(str ? str : ""); -+ ret->attrs_len = str ? 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) -+ 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 && ptr->log && 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 && ptr->log) { -+ 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 && ptr->stream)) { -+ 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 && ptr->stream) { -+ 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 && ptr->time)) { -+ 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 && ptr->time) { -+ 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 && ptr->attrs && 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 && ptr->attrs) { -+ 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; -+ size_t filesize; -+ char *content; -+ -+ if (!filename || !err) -+ 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; -+ size_t filesize; -+ char *content ; -+ -+ if (!stream || !err) -+ 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; -+ yajl_val tree; -+ char errbuf[1024]; -+ struct parser_context tmp_ctx; -+ -+ if (!jsondata || !err) -+ return NULL; -+ -+ *err = NULL; -+ if (!ctx) { -+ 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 || !err) -+ return NULL; -+ -+ *err = NULL; -+ if (!ctx) { -+ 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) -+ *err = safe_strdup("Failed to generate json"); -+ goto free_out; -+ } -+ yajl_gen_get_buf(g, &gen_buf, &gen_len); -+ if (!gen_buf) { -+ *err = safe_strdup("Error to get generated json"); -+ goto free_out; -+ } -+ -+ json_buf = safe_malloc(gen_len + 1); -+ 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/terminal.c b/src/lxc/terminal.c -index 252a644..602d43d 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -47,6 +47,7 @@ - #include "start.h" - #include "syscall_wrappers.h" - #include "terminal.h" -+#include "logger_json_file.h" - #include "utils.h" - - #if HAVE_PTY_H -@@ -298,7 +299,7 @@ static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) - return lxc_terminal_create_log_file(terminal); - } - --static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, char *buf, -+static int lxc_terminal_rotate_write_data(struct lxc_terminal *terminal, const char *buf, - int bytes_read) - { - int ret; -@@ -357,16 +358,6 @@ static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, char *buf, - if (bytes_read <= space_left) - return lxc_write_nointr(terminal->log_fd, buf, bytes_read); - -- /* There's not enough space left but at least write as much as we can -- * into the old log file. -- */ -- ret = lxc_write_nointr(terminal->log_fd, buf, space_left); -- if (ret < 0) -- return -1; -- -- /* Calculate how many bytes we still need to write. */ -- bytes_read -= space_left; -- - /* 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. - */ -@@ -404,6 +395,151 @@ static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, char *buf, - return bytes_read; - } - -+/* 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; -+ -+ 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; -+ sprintf(timebuffer + strlen(timebuffer), ".%09dZ", nanos); -+ -+ 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 ssize_t lxc_logger_write(struct lxc_terminal *terminal, const char *buf, -+ int bytes_read) -+{ -+ logger_json_file *msg = NULL; -+ ssize_t ret = -1; -+ size_t len; -+ char *json = NULL, timebuffer[64]; -+ parser_error err = NULL; -+ struct parser_context ctx = { GEN_OPTIONS_SIMPLIFY | GEN_OPTIONS_NOT_VALIDATE_UTF8, stderr }; -+ -+ msg = calloc(sizeof(logger_json_file), 1); -+ if (!msg) { -+ 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 = strdup("stdout"); -+ -+ get_now_time_buffer(timebuffer, sizeof(timebuffer)); -+ msg->time = 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 = lxc_terminal_rotate_write_data(terminal, json, len + 1); -+cleanup: -+ free(json); -+ free_logger_json_file(msg); -+ free(err); -+ return ret; -+} -+ -+static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, 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 = lxc_logger_write(terminal, 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 = lxc_logger_write(terminal, cache + begin, index - begin + 1); -+ 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, char *buf, int r) - { -@@ -437,7 +573,7 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data, - struct lxc_epoll_descr *descr) - { - struct lxc_terminal *terminal = data; -- char buf[LXC_TERMINAL_BUFFER_SIZE]; -+ char buf[2 * LXC_TERMINAL_BUFFER_SIZE]; - int r, w, w_log, w_rbuf; - - w = r = lxc_read_nointr(fd, buf, sizeof(buf)); -@@ -447,6 +583,12 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data, - - if (fd == terminal->master) { - terminal->master = -EBADF; -+ /* write remained buffer to terminal log */ -+ if (terminal->log_fd >= 0) { -+ w_log = lxc_terminal_write_log_file(terminal, NULL, 0); -+ if (w_log < 0) -+ TRACE("Failed to write %d bytes to terminal log", r); -+ } - } else if (fd == terminal->peer) { - if (terminal->tty_state) { - lxc_terminal_signal_fini(terminal->tty_state); --- -1.8.3.1 - diff --git a/0061-Fix-hook-use-the-path-args-envs-execvp-dirctory.patch b/0061-Fix-hook-use-the-path-args-envs-execvp-dirctory.patch deleted file mode 100644 index 5ba9126..0000000 --- a/0061-Fix-hook-use-the-path-args-envs-execvp-dirctory.patch +++ /dev/null @@ -1,50 +0,0 @@ -From fee671d0cd2813016f7d84fad2907ba28c24993d Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 21 Feb 2019 05:37:05 -0500 -Subject: [PATCH 061/140] Fix hook: use the path, args, envs execvp dirctory - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 17 ++--------------- - 1 file changed, 2 insertions(+), 15 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 67beefe..c2f3cf5 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4467,9 +4467,6 @@ static struct lxc_popen_FILE *lxc_popen_ocihook(char *commandpath, char **args, - - if (child_pid == 0) { - /* child */ -- size_t result_capacity; -- int r; -- char **real_args; - - close(pipe_msg[1]); - if (pipe_msg[0] != STDIN_FILENO) -@@ -4514,20 +4511,10 @@ static struct lxc_popen_FILE *lxc_popen_ocihook(char *commandpath, char **args, - sigprocmask(SIG_UNBLOCK, &mask, NULL); - } - -- result_capacity = args_len; -- real_args = malloc(sizeof(char *) * (result_capacity + 2 + 1)); -- if (!real_args) -- _exit(EXIT_FAILURE); -- memset(real_args, 0, sizeof(char *) * (result_capacity + 2 + 1)); -- real_args[0] = strdup("sh"); -- real_args[1] = strdup(commandpath); -- for(r = 2; r < (args_len + 1); r++) -- real_args[r] = strdup(args[r-1]); -- - if (env_len > 0) -- execvpe("/bin/sh", real_args, envs); -+ execvpe(commandpath, args, envs); - else -- execvp("/bin/sh", real_args); -+ execvp(commandpath, args); - exit(127); - } - --- -1.8.3.1 - diff --git a/0062-setup-sysctls-before-set-read-only-path-and-masked-p.patch b/0062-setup-sysctls-before-set-read-only-path-and-masked-p.patch deleted file mode 100644 index d3e62d6..0000000 --- a/0062-setup-sysctls-before-set-read-only-path-and-masked-p.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 6fc3c7a016b64583c9f84f90c5303376b4f8f613 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Tue, 26 Feb 2019 17:21:18 +0800 -Subject: [PATCH 062/140] setup sysctls before set read-only path and masked - path - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 34 +++++++++++++++++----------------- - 1 file changed, 17 insertions(+), 17 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index c2f3cf5..e139dff 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -3039,7 +3039,7 @@ int setup_sysctl_parameters(struct lxc_list *sysctls) - ret = lxc_write_to_file(filename, elem->value, - strlen(elem->value), false, 0666); - if (ret < 0) { -- ERROR("Failed to setup sysctl parameters %s to %s", -+ SYSERROR("Failed to setup sysctl parameters %s to %s", - elem->key, elem->value); - return -1; - } -@@ -4201,22 +4201,6 @@ int lxc_setup(struct lxc_handler *handler) - if (ret < 0) - goto on_error; - -- //isulad: setup rootfs masked paths -- if (!lxc_list_empty(&lxc_conf->rootfs.maskedpaths)) { -- if (setup_rootfs_maskedpaths(&lxc_conf->rootfs.maskedpaths)) { -- ERROR("failed to setup maskedpaths"); -- goto on_error; -- } -- } -- -- // isulad: setup rootfs ro paths -- if (!lxc_list_empty(&lxc_conf->rootfs.ropaths)) { -- if (setup_rootfs_ropaths(&lxc_conf->rootfs.ropaths)) { -- ERROR("failed to setup readonlypaths"); -- goto on_error; -- } -- } -- - /*isulad: set system umask */ - umask(lxc_conf->umask); - -@@ -4238,6 +4222,22 @@ int lxc_setup(struct lxc_handler *handler) - } - } - -+ // isulad: setup rootfs masked paths -+ if (!lxc_list_empty(&lxc_conf->rootfs.maskedpaths)) { -+ if (setup_rootfs_maskedpaths(&lxc_conf->rootfs.maskedpaths)) { -+ ERROR("failed to setup maskedpaths"); -+ goto on_error; -+ } -+ } -+ -+ // isulad: setup rootfs ro paths -+ if (!lxc_list_empty(&lxc_conf->rootfs.ropaths)) { -+ if (setup_rootfs_ropaths(&lxc_conf->rootfs.ropaths)) { -+ ERROR("failed to setup readonlypaths"); -+ goto on_error; -+ } -+ } -+ - if (!lxc_list_empty(&lxc_conf->keepcaps)) { - if (!lxc_list_empty(&lxc_conf->caps)) { - ERROR("Container requests lxc.cap.drop and " --- -1.8.3.1 - diff --git a/0064-lxc-Reduce-seccomp-processing-log-level.patch b/0064-lxc-Reduce-seccomp-processing-log-level.patch deleted file mode 100644 index 7bd66f0..0000000 --- a/0064-lxc-Reduce-seccomp-processing-log-level.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 5c4a3db298a0a7857f6bb34a285c40e6f2a4b99b Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Sun, 10 Mar 2019 00:47:05 +0800 -Subject: [PATCH 064/140] lxc: Reduce seccomp processing log level - -Signed-off-by: wujing -Signed-off-by: LiFeng ---- - src/lxc/seccomp.c | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/src/lxc/seccomp.c b/src/lxc/seccomp.c -index 26eac90..7f10777 100644 ---- a/src/lxc/seccomp.c -+++ b/src/lxc/seccomp.c -@@ -507,14 +507,14 @@ 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) { -- WARN("Failed to resolve syscall \"%s\"", line); -- WARN("This syscall will NOT be handled by seccomp"); -+ DEBUG("Failed to resolve syscall \"%s\"", line); -+ DEBUG("This syscall will NOT be handled by seccomp"); - return true; - } - - if (nr < 0) { -- WARN("Got negative return value %d for syscall \"%s\"", nr, line); -- WARN("This syscall will NOT be handled by seccomp"); -+ DEBUG("Got negative return value %d for syscall \"%s\"", nr, line); -+ DEBUG("This syscall will NOT be handled by seccomp"); - return true; - } - -@@ -541,7 +541,7 @@ bool do_resolve_add_rule(uint32_t arch, char *line, scmp_filter_ctx ctx, - rule->args_num, arg_cmp); - if (ret < 0) { - errno = -ret; -- SYSERROR("Failed loading rule for %s (nr %d action %d (%s))", -+ DEBUG("Failed loading rule for %s (nr %d action %d (%s))", - line, nr, rule->action, get_action_name(rule->action)); - return true; - } --- -1.8.3.1 - diff --git a/0065-Storage-return-true-if-storage_init-init-fail.patch b/0065-Storage-return-true-if-storage_init-init-fail.patch deleted file mode 100644 index 9a6fbfe..0000000 --- a/0065-Storage-return-true-if-storage_init-init-fail.patch +++ /dev/null @@ -1,30 +0,0 @@ -From c3f85efe70c8dabe1c7393a5fd83f4465ec46812 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 11 Mar 2019 23:26:27 -0400 -Subject: [PATCH 065/140] Storage: return true if storage_init init fail - -Signed-off-by: LiFeng ---- - src/lxc/storage/storage.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/storage/storage.c b/src/lxc/storage/storage.c -index 18f754a..88ed788 100644 ---- a/src/lxc/storage/storage.c -+++ b/src/lxc/storage/storage.c -@@ -610,8 +610,11 @@ bool storage_destroy(struct lxc_conf *conf) - int destroy_rv = 0; - - r = storage_init(conf); -- if (!r) -+ if (r == NULL) { -+ ERROR("%s 's storage init failed, the storage may be deleted already", conf->name); -+ ret = true; - return ret; -+ } - - destroy_rv = r->ops->destroy(r); - if (destroy_rv == 0) --- -1.8.3.1 - diff --git a/0066-lxc-Pids-limit-does-not-report-an-error-after-execut.patch b/0066-lxc-Pids-limit-does-not-report-an-error-after-execut.patch deleted file mode 100644 index 7958457..0000000 --- a/0066-lxc-Pids-limit-does-not-report-an-error-after-execut.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 54a21ab4594e606168d690ef09bbbd13329de843 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Fri, 15 Mar 2019 10:11:10 +0800 -Subject: [PATCH 066/140] lxc: Pids limit does not report an error after - executing the limit in the background - -Signed-off-by: wujing -Signed-off-by: LiFeng ---- - src/lxc/tools/lxc_attach.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index 8856934..acdf8a0 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -378,6 +378,8 @@ static int do_attach_background(struct lxc_container *c, lxc_attach_command_t *c - 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; --- -1.8.3.1 - diff --git a/0067-lxc-report-error-when-remove-directory-failed.patch b/0067-lxc-report-error-when-remove-directory-failed.patch deleted file mode 100644 index 07078d4..0000000 --- a/0067-lxc-report-error-when-remove-directory-failed.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 8f356ca0106a31ac7a14a17d06fb325aa16519ee Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Sat, 16 Mar 2019 10:06:13 +0800 -Subject: [PATCH 067/140] lxc: report error when remove directory failed - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/lxccontainer.c | 3 +++ - src/lxc/utils.c | 9 ++++++++- - 2 files changed, 11 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index bfbf223..3fd1a66 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -3148,8 +3148,11 @@ static bool container_destroy(struct lxc_container *c, - else - ret = lxc_rmdir_onedev(path, "snaps"); - if (ret < 0) { -+ char msg[BUFSIZ] = { 0 }; - ERROR("Failed to destroy directory \"%s\" for \"%s\"", path, - c->name); -+ sprintf(msg, "Failed to destroy directory \"%s\": %s", path, errno ? strerror(errno) : "error"); -+ c->error_string = strdup(msg); - goto out; - } - INFO("Destroyed directory \"%s\" for \"%s\"", path, c->name); -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 91ba493..480e6d0 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -88,6 +88,7 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev, - int ret, failed = 0; - char pathname[PATH_MAX]; - bool hadexclude = false; -+ int saved_errno = 0; - - dir = opendir(dirname); - if (!dir) { -@@ -153,6 +154,9 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev, - failed=1; - } else { - if (unlink(pathname) < 0) { -+ if (saved_errno == 0) { -+ saved_errno = errno; -+ } - SYSERROR("Failed to delete \"%s\"", pathname); - failed=1; - } -@@ -160,6 +164,9 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev, - } - - if (rmdir(dirname) < 0 && !btrfs_try_remove_subvol(dirname) && !hadexclude) { -+ if (saved_errno == 0) { -+ saved_errno = errno; -+ } - SYSERROR("Failed to delete \"%s\"", dirname); - failed=1; - } -@@ -169,7 +176,7 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev, - SYSERROR("Failed to close directory \"%s\"", dirname); - failed=1; - } -- -+ errno = saved_errno; - return failed ? -1 : 0; - } - --- -1.8.3.1 - diff --git a/0068-support-record-stdout-stderr-log-of-container-consol.patch b/0068-support-record-stdout-stderr-log-of-container-consol.patch deleted file mode 100644 index 50ec371..0000000 --- a/0068-support-record-stdout-stderr-log-of-container-consol.patch +++ /dev/null @@ -1,1244 +0,0 @@ -From 8168df14e2a9c51a2d1637485d45e957d0a23438 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Thu, 21 Feb 2019 20:27:47 +0800 -Subject: [PATCH 068/140] support record stdout, stderr log of container - console - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 15 +- - src/lxc/attach_options.h | 2 +- - src/lxc/commands.c | 15 +- - src/lxc/commands.h | 2 +- - src/lxc/conf.c | 33 +++-- - src/lxc/lxccontainer.c | 79 +++++++--- - src/lxc/lxccontainer.h | 35 ++++- - src/lxc/start.c | 67 ++++++++- - src/lxc/start.h | 5 + - src/lxc/terminal.c | 351 ++++++++++++++++++++++++++++++++------------- - src/lxc/terminal.h | 7 +- - src/lxc/tools/arguments.h | 14 +- - src/lxc/tools/lxc_attach.c | 7 +- - src/lxc/tools/lxc_start.c | 22 ++- - 14 files changed, 502 insertions(+), 152 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 9768897..c979c85 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -1052,15 +1052,18 @@ static int lxc_attach_terminal(struct lxc_conf *conf, - lxc_terminal_init(terminal); - - /* isulad: if we pass fifo in option, use them as init fifos */ -- if (options->init_fifo[0] && options->init_fifo[1]) { -- if (terminal->init_fifo[0]) -- free(terminal->init_fifo[0]); -+ if (options->init_fifo[0]) { -+ free(terminal->init_fifo[0]); - terminal->init_fifo[0] = strdup(options->init_fifo[0]); -- -- if (terminal->init_fifo[1]) -- free(terminal->init_fifo[1]); -+ } -+ if (options->init_fifo[1]) { -+ free(terminal->init_fifo[1]); - terminal->init_fifo[1] = strdup(options->init_fifo[1]); - } -+ if (options->init_fifo[2]) { -+ free(terminal->init_fifo[2]); -+ terminal->init_fifo[2] = strdup(options->init_fifo[2]); -+ } - - ret = lxc_terminal_create(terminal); - if (ret < 0) { -diff --git a/src/lxc/attach_options.h b/src/lxc/attach_options.h -index 7b0a8cb..71c1739 100644 ---- a/src/lxc/attach_options.h -+++ b/src/lxc/attach_options.h -@@ -136,7 +136,7 @@ typedef struct lxc_attach_options_t { - /*! File descriptor to log output. */ - int log_fd; - -- char *init_fifo[2]; /* isulad: default fifos for the start */ -+ char *init_fifo[3]; /* isulad: default fifos for the start */ - } lxc_attach_options_t; - - /*! Default attach options to use */ -diff --git a/src/lxc/commands.c b/src/lxc/commands.c -index 46b2805..f0c95df 100644 ---- a/src/lxc/commands.c -+++ b/src/lxc/commands.c -@@ -1064,21 +1064,22 @@ reap_client_fd: - * - * 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) -+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 (!in_fifo || !out_fifo) { -- return -1; -- } -- -- len = strlen(in_fifo) + strlen("&&&&") + strlen(out_fifo) + 1; -+ len += strlen(cmd_in_fifo) + strlen(split) + strlen(cmd_out_fifo) + strlen(split) + strlen(cmd_err_fifo) + 1; - tmp = malloc(len); - if (!tmp) - return -1; -- snprintf(tmp, len, "%s%s%s", in_fifo, "&&&&", out_fifo); -+ snprintf(tmp, len, "%s%s%s%s%s", cmd_in_fifo, split, cmd_out_fifo, split, cmd_err_fifo); - - struct lxc_cmd_rr cmd = { - .req = { -diff --git a/src/lxc/commands.h b/src/lxc/commands.h -index 0c64544..6b64849 100644 ---- a/src/lxc/commands.h -+++ b/src/lxc/commands.h -@@ -127,6 +127,6 @@ extern int lxc_cmd_console_log(const char *name, const char *lxcpath, - struct lxc_console_log *log); - - extern int lxc_cmd_set_terminal_fifos(const char *name, const char *lxcpath, -- const char *in_fifo, const char *out_fifo); -+ const char *in_fifo, const char *out_fifo, const char *err_fifo); - - #endif /* __commands_h */ -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index e139dff..a6b9797 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -2067,20 +2067,22 @@ static int lxc_setup_ttydir_console(const struct lxc_rootfs *rootfs, - return -errno; - } - -- ret = fchmod(console->slave, S_IXUSR | S_IXGRP); -- if (ret < 0) { -- SYSERROR("Failed to set mode \"0%o\" to \"%s\"", -- S_IXUSR | S_IXGRP, console->name); -- return -errno; -- } -+ if (console->slave > 0) { -+ ret = fchmod(console->slave, S_IXUSR | S_IXGRP); -+ if (ret < 0) { -+ SYSERROR("Failed to set mode \"0%o\" to \"%s\"", -+ S_IXUSR | S_IXGRP, console->name); -+ return -errno; -+ } - -- /* bind mount console->name to '/dev//console' */ -- ret = safe_mount(console->name, lxcpath, "none", MS_BIND, 0, rootfs_path); -- if (ret < 0) { -- ERROR("Failed to mount \"%s\" on \"%s\"", console->name, lxcpath); -- return -1; -+ /* bind mount console->name to '/dev//console' */ -+ ret = safe_mount(console->name, lxcpath, "none", MS_BIND, 0, rootfs_path); -+ if (ret < 0) { -+ ERROR("Failed to mount \"%s\" on \"%s\"", console->name, lxcpath); -+ return -1; -+ } -+ DEBUG("Mounted \"%s\" onto \"%s\"", console->name, lxcpath); - } -- DEBUG("Mounted \"%s\" onto \"%s\"", console->name, lxcpath); - - /* bind mount '/dev//console' to '/dev/console' */ - ret = safe_mount(lxcpath, path, "none", MS_BIND, 0, rootfs_path); -@@ -3158,6 +3160,13 @@ struct lxc_conf *lxc_conf_init(void) - /* isulad init console fifos */ - 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; -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 3fd1a66..8a3724c 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -702,6 +702,40 @@ static bool do_lxcapi_want_daemonize(struct lxc_container *c, bool state) - - WRAP_API_1(bool, lxcapi_want_daemonize, bool) - -+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) -+ - static bool do_lxcapi_want_close_all_fds(struct lxc_container *c, bool state) - { - if (!c || !c->lxc_conf) -@@ -1198,12 +1232,15 @@ reboot: - goto on_error; - } - -- if (useinit) -+ if (useinit) { - ret = lxc_execute(c->name, argv, 1, handler, c->config_path, - c->daemonize, &c->error_num, c->start_timeout); -- else -+ } else { -+ handler->disable_pty = c->disable_pty; -+ handler->open_stdin = c->open_stdin; - ret = lxc_start(c->name, argv, handler, c->config_path, - c->daemonize, &c->error_num, c->start_timeout); -+ } - - if (conf->reboot == REBOOT_REQ) { - INFO("Container requested reboot"); -@@ -5085,11 +5122,11 @@ out: - } - - /* isulad add set console fifos*/ --static bool do_lxcapi_set_terminal_default_fifos(struct lxc_container *c, const char *in, const char *out) -+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; - -- if (!c || !c->lxc_conf || !in || !out) -+ if (!c || !c->lxc_conf) - return false; - if (container_mem_lock(c)) { - ERROR("Error getting mem lock"); -@@ -5097,19 +5134,27 @@ static bool do_lxcapi_set_terminal_default_fifos(struct lxc_container *c, const - } - - conf = c->lxc_conf; -- if (conf->console.init_fifo[0]) -- free(conf->console.init_fifo[0]); -- conf->console.init_fifo[0] = strdup(in); -- -- if (conf->console.init_fifo[1]) -- free(conf->console.init_fifo[1]); -- conf->console.init_fifo[1] = strdup(out); -+ if (in) { -+ if (conf->console.init_fifo[0]) -+ free(conf->console.init_fifo[0]); -+ conf->console.init_fifo[0] = strdup(in); -+ } -+ if (out) { -+ if (conf->console.init_fifo[1]) -+ free(conf->console.init_fifo[1]); -+ conf->console.init_fifo[1] = strdup(out); -+ } -+ if (err) { -+ if (conf->console.init_fifo[2]) -+ free(conf->console.init_fifo[2]); -+ conf->console.init_fifo[2] = strdup(err); -+ } - - container_mem_unlock(c); - return true; - } - --WRAP_API_2(bool, lxcapi_set_terminal_default_fifos, const char *, const char *) -+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) -@@ -5168,18 +5213,18 @@ static bool do_lxcapi_clean_container_resource(struct lxc_container *c, pid_t pi - WRAP_API_1(bool, lxcapi_clean_container_resource, pid_t) - - /* isulad add clean resources */ --static bool do_lxcapi_add_terminal_fifo(struct lxc_container *c, const char *in_fifo, const char *out_fifo) -+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 || !in_fifo || !out_fifo) -+ 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)) { -+ if (lxc_cmd_set_terminal_fifos(c->name, c->config_path, in_fifo, out_fifo, err_fifo)) { - ERROR("Error set console fifos"); - ret = false; - } -@@ -5188,7 +5233,7 @@ static bool do_lxcapi_add_terminal_fifo(struct lxc_container *c, const char *in_ - return ret; - } - --WRAP_API_2(bool, lxcapi_add_terminal_fifo, const char *, const char *) -+WRAP_API_3(bool, lxcapi_add_terminal_fifo, const char *, const char *, const char *) - - static struct lxc_container *do_lxc_container_new(const char *name, const char *configpath, bool load_config) - { -@@ -5274,6 +5319,8 @@ static struct lxc_container *do_lxc_container_new(const char *name, const char * - c->init_pid = lxcapi_init_pid; - c->load_config = lxcapi_load_config; - c->want_daemonize = lxcapi_want_daemonize; -+ c->want_disable_pty = lxcapi_want_disable_pty; -+ c->want_open_stdin = lxcapi_want_open_stdin; - c->want_close_all_fds = lxcapi_want_close_all_fds; - c->start = lxcapi_start; - c->startl = lxcapi_startl; -diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index c1d83ba..c3368e4 100644 ---- a/src/lxc/lxccontainer.h -+++ b/src/lxc/lxccontainer.h -@@ -137,6 +137,15 @@ struct lxc_container { - /*! Whether container wishes to be daemonized */ - bool daemonize; - -+ /*! Whether container wishes to create pty or pipes for console log */ -+ bool disable_pty; -+ -+ /*! Whether container wishes to keep stdin active */ -+ bool open_stdin; -+ -+ /*! Whether container wishes to detach from container stdio */ -+ bool detach; -+ - /*! Full path to configuration file */ - char *config_path; - -@@ -244,6 +253,28 @@ struct lxc_container { - bool (*stop)(struct lxc_container *c); - - /*! -+ * \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); -+ -+ /*! - * \brief Change whether the container wants to run disconnected - * from the terminal. - * -@@ -875,7 +906,7 @@ struct lxc_container { - * - * \return \c true on success, else \c false. - */ -- bool (*set_terminal_init_fifos)(struct lxc_container *c, const char *in, const char *out); -+ 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 -@@ -885,7 +916,7 @@ struct lxc_container { - * - * \return \c true on success, else \c false. - */ -- bool (*add_terminal_fifos)(struct lxc_container *c, const char *in, const char *out); -+ bool (*add_terminal_fifos)(struct lxc_container *c, const char *in, const char *out, const char *err); - - /*! isulad add - * \brief An API call to set the path of info file -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 816b4a2..cad0d76 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -635,6 +635,13 @@ int lxc_poll(const char *name, struct lxc_handler *handler) - } - - TRACE("Mainloop is ready"); -+ // 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; -+ } -+ } - - ret = lxc_mainloop(&descr, -1); - close(descr.epfd); -@@ -788,6 +795,8 @@ int lxc_init(const char *name, struct lxc_handler *handler) - int ret; - const char *loglevel; - struct lxc_conf *conf = handler->conf; -+ conf->console.disable_pty = handler->disable_pty; -+ conf->console.open_stdin = handler->open_stdin; - - lsm_init(); - TRACE("Initialized LSM"); -@@ -1244,7 +1253,7 @@ 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. - */ -- if (handler->daemonize && !handler->conf->autodev) { -+ if (!handler->disable_pty && handler->daemonize && !handler->conf->autodev) { - ret = access(path, F_OK); - if (ret != 0) { - devnull_fd = open_devnull(); -@@ -1325,6 +1334,42 @@ static int do_start(void *data) - "privileges"); - } - -+ /* 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; -+ } -+ -+ } -+ - /* 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 -@@ -1332,7 +1377,7 @@ static int do_start(void *data) - * make sure that that pty is stdin,stdout,stderr. - */ - setsid(); -- if (handler->conf->console.slave >= 0) { -+ 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 */ -@@ -1367,7 +1412,7 @@ static int do_start(void *data) - - close(handler->sigfd); - -- if (handler->conf->console.slave < 0 && handler->daemonize) { -+ if (!handler->disable_pty && handler->conf->console.slave < 0 && handler->daemonize) { - if (devnull_fd < 0) { - devnull_fd = open_devnull(); - if (devnull_fd < 0) -@@ -1789,6 +1834,22 @@ static int lxc_spawn(struct lxc_handler *handler) - } - TRACE("Cloned child process %d", handler->pid); - -+ /* 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)) { -diff --git a/src/lxc/start.h b/src/lxc/start.h -index ab72e6e..0298991 100644 ---- a/src/lxc/start.h -+++ b/src/lxc/start.h -@@ -99,6 +99,11 @@ struct lxc_handler { - /* Indicates whether should we close std{in,out,err} on start. */ - bool daemonize; - -+ /* 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; -+ - /* The child's pid. */ - pid_t pid; - -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 602d43d..dfce92e 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -432,7 +432,7 @@ static bool get_now_time_buffer(char *timebuffer, size_t maxsize) - return get_time_buffer(&ts, timebuffer, maxsize); - } - --static ssize_t lxc_logger_write(struct lxc_terminal *terminal, const char *buf, -+static ssize_t lxc_logger_write(struct lxc_terminal *terminal, const char *type, const char *buf, - int bytes_read) - { - logger_json_file *msg = NULL; -@@ -452,7 +452,7 @@ static ssize_t lxc_logger_write(struct lxc_terminal *terminal, const char *buf, - } - memcpy(msg->log, buf, bytes_read); - msg->log_len = bytes_read; -- msg->stream = strdup("stdout"); -+ msg->stream = type ? strdup(type) : strdup("stdout"); - - get_now_time_buffer(timebuffer, sizeof(timebuffer)); - msg->time = strdup(timebuffer); -@@ -472,7 +472,7 @@ cleanup: - return ret; - } - --static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, char *buf, -+static int 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) -@@ -504,7 +504,7 @@ static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, char *buf, - // 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 = lxc_logger_write(terminal, cache + begin, index - begin + 1); -+ ret = lxc_logger_write(terminal, type, cache + begin, index - begin + 1); - if (ret < 0) { - WARN("Failed to log msg"); - } -@@ -516,7 +516,7 @@ static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, char *buf, - * noting that it's a partial log line. */ - if (buf == NULL || (begin == 0 && size == __BUF_CACHE_SIZE)) { - if (begin < size) { -- ret = lxc_logger_write(terminal, cache + begin, index - begin + 1); -+ ret = lxc_logger_write(terminal, type, cache + begin, index - begin + 1); - if (ret < 0) { - WARN("Failed to log msg"); - } -@@ -541,14 +541,20 @@ static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, char *buf, - } - - /* isulad: forward data to all fifos */ --static void lxc_forward_data_to_fifo(struct lxc_list *list, char *buf, int r) -+static void lxc_forward_data_to_fifo(struct lxc_list *list, bool is_err, char *buf, int r) - { - struct lxc_list *it,*next; - struct lxc_fifos_fd *elem = NULL; - - lxc_list_for_each_safe(it, list, next) { - elem = it->elem; -- lxc_write_nointr(elem->out_fd, buf, r); -+ 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; -@@ -585,7 +591,7 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data, - terminal->master = -EBADF; - /* write remained buffer to terminal log */ - if (terminal->log_fd >= 0) { -- w_log = lxc_terminal_write_log_file(terminal, NULL, 0); -+ w_log = lxc_terminal_write_log_file(terminal, "stdout", NULL, 0); - if (w_log < 0) - TRACE("Failed to write %d bytes to terminal log", r); - } -@@ -601,33 +607,57 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data, - /* isulad: delete fifos when the client close */ - lxc_terminal_delete_fifo(fd, &terminal->fifos); - return LXC_MAINLOOP_CONTINUE; -- } else { -+ } else if (fd == terminal->pipes[1][0] || fd == terminal->pipes[2][0]) { -+ if (fd == terminal->pipes[1][0]) { -+ w_log = lxc_terminal_write_log_file(terminal, "stdout", NULL, 0); -+ terminal->pipes[1][0] = -EBADF; -+ } else if (fd == terminal->pipes[2][0]) { -+ w_log = 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)) -- w = lxc_write_nointr(terminal->master, buf, r); -+ 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) { -+ 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, buf, r); -+ 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) -- w_log = lxc_terminal_write_log_file(terminal, buf, r); -+ if (terminal->log_fd >= 0) { -+ if (fd == terminal->master || fd == terminal->pipes[1][0]) -+ w_log = lxc_terminal_write_log_file(terminal, "stdout", buf, r); -+ else if (fd == terminal->pipes[2][0]) -+ w_log = lxc_terminal_write_log_file(terminal, "stderr", buf, r); -+ } - } - - if (w != r) -@@ -670,6 +700,41 @@ static int lxc_terminal_mainloop_add_peer(struct lxc_terminal *terminal) - return 0; - } - -+/* 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) - { -@@ -696,19 +761,6 @@ int lxc_terminal_mainloop_add(struct lxc_epoll_descr *descr, - { - int ret; - -- 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; -- } -- - /* We cache the descr so that we can add an fd to it when someone - * does attach to it in lxc_terminal_allocate(). - */ -@@ -720,6 +772,13 @@ int lxc_terminal_mainloop_add(struct lxc_epoll_descr *descr, - 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) { -@@ -727,6 +786,19 @@ int lxc_terminal_mainloop_add(struct lxc_epoll_descr *descr, - 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; - } - -@@ -1082,6 +1154,26 @@ void lxc_terminal_delete(struct lxc_terminal *terminal) - close(terminal->log_fd); - terminal->log_fd = -1; - -+ /* 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); - } -@@ -1168,59 +1260,79 @@ static int terminal_fifo_open(const char *fifo_path, int flags) - } - - /* isulad: set terminal fifos */ --static int lxc_terminal_set_fifo(struct lxc_terminal *console, const char *in, const char *out) -+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; -+ int fifofd_in = -1, fifofd_out = -1, fifofd_err = -1; - struct lxc_fifos_fd *fifo_elem = NULL; - -- if (!in || !out) -+ 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 (!fifo_exists(in) || !fifo_exists(out)) { -- ERROR("File %s or %s does not refer to a FIFO", in, out); -- 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; -+ } - } - -- fifofd_in = terminal_fifo_open(in, O_RDONLY | O_NONBLOCK | O_CLOEXEC); -- if (fifofd_in < 0) { -- ERROR("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; -+ } - } - -- fifofd_out = terminal_fifo_open(out, O_WRONLY | O_NONBLOCK | O_CLOEXEC); -- if (fifofd_out < 0) { -- ERROR("Failed to open FIFO: %s", out); -- 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) { -- close(fifofd_in); -- close(fifofd_out); -+ 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 = strdup(in); -- fifo_elem->out_fifo = strdup(out); -+ fifo_elem->in_fifo = strdup(in ? in : ""); -+ fifo_elem->out_fifo = strdup(out ? out : ""); -+ fifo_elem->err_fifo = 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); - -- return fifofd_in; -+ 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]) { -- DEBUG("Invalid default terminal fifos"); -- return 0; -- } -- -- return lxc_terminal_set_fifo(terminal, terminal->init_fifo[0], terminal->init_fifo[1]); -+ 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; - } - - /* -@@ -1245,48 +1357,67 @@ 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; -- } -+ 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 = 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; -- } -+ /* 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; -- } -+ 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; -- } -+ /* 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 = 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; -+ 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 */ -@@ -1581,6 +1712,13 @@ void lxc_terminal_init(struct lxc_terminal *terminal) - /* isulad init console fifos */ - 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); - } - -@@ -1599,8 +1737,14 @@ int lxc_terminal_delete_fifo(int fd, struct lxc_list *list) - free(elem->in_fifo); - if (elem->out_fifo) - free(elem->out_fifo); -- close(elem->in_fd); -- close(elem->out_fd); -+ 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); - } - } -@@ -1617,6 +1761,7 @@ void lxc_terminal_conf_free(struct lxc_terminal *terminal) - /*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); - } - -@@ -1647,7 +1792,8 @@ 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; -+ char *tmp = NULL, *saveptr = NULL, *in = NULL, *out = NULL, *err = NULL; -+ const char *none_fifo_name = "none"; - - tmp = strdup(fifonames); - if (!tmp) { -@@ -1660,14 +1806,27 @@ int lxc_terminal_add_fifos(struct lxc_conf *conf, const char *fifonames) - 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; - -- fifofd_in = lxc_terminal_set_fifo(terminal, in, out); -- if (fifofd_in < 0) { -+ 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; -diff --git a/src/lxc/terminal.h b/src/lxc/terminal.h -index 0c9653c..9bb341f 100644 ---- a/src/lxc/terminal.h -+++ b/src/lxc/terminal.h -@@ -115,16 +115,21 @@ struct lxc_terminal { - /* the in-memory ringbuffer */ - struct lxc_ringbuf ringbuf; - }; -- char *init_fifo[2]; /* isulad: default fifos for the start */ -+ 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*/ - }; - - /* 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; - }; - -diff --git a/src/lxc/tools/arguments.h b/src/lxc/tools/arguments.h -index afab9f5..d03f8a4 100644 ---- a/src/lxc/tools/arguments.h -+++ b/src/lxc/tools/arguments.h -@@ -51,6 +51,8 @@ struct lxc_arguments { - char *log_priority; - int quiet; - int daemonize; -+ int disable_pty; -+ int open_stdin; - const char *rcfile; - const char *console; - const char *console_log; -@@ -62,7 +64,7 @@ struct lxc_arguments { - - /* for lxc-start */ - const char *share_ns[32]; /* size must be greater than LXC_NS_MAX */ -- char *terminal_fifos[2]; /* isulad add, fifos used to redirct stdin/out/err */ -+ char *terminal_fifos[3]; /* isulad add, fifos used to redirct stdin/out/err */ - const char *container_info; /* isulad: file used to store pid and ppid info of container */ - const char *exit_monitor_fifo; /* isulad: fifo used to monitor state of monitor process */ - unsigned int start_timeout; /* isulad: Seconds for waiting on a container to start before it is killed*/ -@@ -179,9 +181,13 @@ struct lxc_arguments { - /* isulad add begin */ - #define OPT_INPUT_FIFO OPT_USAGE - 7 - #define OPT_OUTPUT_FIFO OPT_USAGE - 8 --#define OPT_CONTAINER_INFO OPT_USAGE - 9 --#define OPT_EXIT_FIFO OPT_USAGE - 10 --#define OPT_START_TIMEOUT OPT_USAGE - 11 -+#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 -+ - /* isulad add end*/ - - extern int lxc_arguments_parse(struct lxc_arguments *args, int argc, -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index acdf8a0..674050d 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -77,6 +77,7 @@ static const struct option my_longopts[] = { - {"rcfile", required_argument, 0, 'f'}, - {"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}, - LXC_COMMON_OPTIONS - }; - -@@ -201,6 +202,9 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - case OPT_OUTPUT_FIFO: - args->terminal_fifos[1] = arg; - break; -+ case OPT_STDERR_FIFO: -+ args->terminal_fifos[2] = arg; -+ break; - } - - return 0; -@@ -460,9 +464,10 @@ int main(int argc, char *argv[]) - if (elevated_privileges) - attach_options.attach_flags &= ~(elevated_privileges); - -- if (my_args.terminal_fifos[0] && my_args.terminal_fifos[1]) { -+ 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; -diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c -index ec48701..183fafc 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -73,9 +73,12 @@ static const struct option my_longopts[] = { - /* isulad add begin */ - {"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}, - /* isulad add end */ - LXC_COMMON_OPTIONS - }; -@@ -166,6 +169,9 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - case OPT_OUTPUT_FIFO: - args->terminal_fifos[1] = arg; - break; -+ case OPT_STDERR_FIFO: -+ args->terminal_fifos[2] = arg; -+ break; - case OPT_CONTAINER_INFO: - args->container_info = arg; - break; -@@ -179,6 +185,12 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - } - args->start_timeout = (unsigned int)atoi(arg); - break; -+ case OPT_DISABLE_PTY: -+ args->disable_pty = 1; -+ break; -+ case OPT_OPEN_STDIN: -+ args->open_stdin = 1; -+ break; - } - return 0; - } -@@ -381,11 +393,17 @@ int main(int argc, char *argv[]) - if (!my_args.daemonize) - c->want_daemonize(c, false); - -+ if (my_args.disable_pty) -+ c->want_disable_pty(c, true); -+ -+ if (my_args.open_stdin) -+ c->want_open_stdin(c, true); -+ - if (my_args.close_all_fds) - c->want_close_all_fds(c, true); - -- if (my_args.terminal_fifos[0] && my_args.terminal_fifos[1]) -- c->set_terminal_init_fifos(c, my_args.terminal_fifos[0], my_args.terminal_fifos[1]); -+ 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]); - - if (args == default_args) - err = c->start(c, 0, NULL) ? EXIT_SUCCESS : EXIT_FAILURE; --- -1.8.3.1 - diff --git a/0069-lxc-killall-processes-if-container-shared-pid-namesp.patch b/0069-lxc-killall-processes-if-container-shared-pid-namesp.patch deleted file mode 100644 index 2f7da6a..0000000 --- a/0069-lxc-killall-processes-if-container-shared-pid-namesp.patch +++ /dev/null @@ -1,207 +0,0 @@ -From 7a5088c289e2c9a543ba08137bffe873206962ba Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Thu, 21 Mar 2019 15:48:02 +0800 -Subject: [PATCH 069/140] lxc: killall processes if container shared pid - namespace - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 2 +- - src/lxc/start.c | 160 +++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 161 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index e513218..ab7ca35 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1056,7 +1056,7 @@ static int cgroup_rmdir(struct hierarchy **hierarchies, - - ret = recursive_destroy(h->container_full_path); - if (ret < 0) { -- ERROR("Failed to destroy \"%s\"", h->container_full_path); -+ SYSERROR("Failed to destroy \"%s\"", h->container_full_path); - return -1; - } - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index cad0d76..1c9eb0a 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -2494,6 +2494,162 @@ static void clean_resource_set_env(struct lxc_handler *handler) - /* End of environment variable setup for hooks. */ - } - -+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; -+ -+ 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); -+ *pids = realloc(*pids, sizeof(pid_t) * (*len + 1)); -+ (*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; -+ DIR *dir; -+ int ret, failed = 0; -+ char pathname[PATH_MAX]; -+ -+ dir = opendir(dirpath); -+ if (!dir && errno != ENOENT) { -+ 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) -+{ -+ char *devices_path = NULL; -+ int ret; -+ -+ devices_path = must_make_path("/sys/fs/cgroup", "devices", cg_ops->container_cgroup, NULL); -+ if (!file_exists(devices_path)) { -+ free(devices_path); -+ return 0; -+ } -+ -+ ret = _recursive_read_cgroup_procs(devices_path, pids, len); -+ free(devices_path); -+ return ret; -+} -+ -+static int set_cgroup_freezer(struct cgroup_ops *cg_ops, const char *value) -+{ -+ char *fullpath; -+ int ret; -+ -+ fullpath = must_make_path("/sys/fs/cgroup", "freezer", cg_ops->container_cgroup, "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); -+} -+ - /*isulad: do_lxcapi_clean_resource */ - int do_lxcapi_clean_resource(char *name, char *lxcpath, struct lxc_conf *conf, pid_t pid) - { -@@ -2510,6 +2666,10 @@ int do_lxcapi_clean_resource(char *name, char *lxcpath, struct lxc_conf *conf, p - } - - clean_resource_set_env(handler); -+ // if we shared pid namespace with others, should kill all processes within container cgroup -+ if (handler->conf->ns_share[LXC_NS_PID] != NULL) { -+ signal_all_processes(handler); -+ } - - char* oci_hook_args[1]; - oci_hook_args[0] = alloca(strlen(handler->lxcpath) + 1); --- -1.8.3.1 - diff --git a/0071-lxc-get-cgroup-path-according-to-cgroup-mountpoint.patch b/0071-lxc-get-cgroup-path-according-to-cgroup-mountpoint.patch deleted file mode 100644 index 8a0171b..0000000 --- a/0071-lxc-get-cgroup-path-according-to-cgroup-mountpoint.patch +++ /dev/null @@ -1,126 +0,0 @@ -From 6b5baec9fce40d498c3a9d3e8fbe08ff1e3751fd Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Thu, 21 Mar 2019 22:05:09 +0800 -Subject: [PATCH 071/140] lxc: get cgroup path according to cgroup mountpoint - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 6 ++++-- - src/lxc/cgroups/cgroup.h | 2 +- - src/lxc/commands.c | 6 +++--- - src/lxc/criu.c | 2 +- - src/lxc/start.c | 8 +++----- - 5 files changed, 12 insertions(+), 12 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 5ceb06b..62d58f9 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1852,7 +1852,7 @@ __cgfsng_ops static bool cgfsng_unfreeze(struct cgroup_ops *ops) - } - - __cgfsng_ops static const char *cgfsng_get_cgroup(struct cgroup_ops *ops, -- const char *controller) -+ const char *controller, bool skip_mount) - { - struct hierarchy *h; - -@@ -1863,7 +1863,9 @@ __cgfsng_ops static const char *cgfsng_get_cgroup(struct cgroup_ops *ops, - return NULL; - } - -- return h->container_full_path ? h->container_full_path + strlen(h->mountpoint) : NULL; -+ if (!h->container_full_path) -+ h->container_full_path = must_make_path(h->mountpoint, h->container_base_path, ops->container_cgroup, NULL); -+ return skip_mount ? h->container_full_path + strlen(h->mountpoint) : h->container_full_path; - } - - /* Given a cgroup path returned from lxc_cmd_get_cgroup_path, build a full path, -diff --git a/src/lxc/cgroups/cgroup.h b/src/lxc/cgroups/cgroup.h -index b6116f6..edbb1e3 100644 ---- a/src/lxc/cgroups/cgroup.h -+++ b/src/lxc/cgroups/cgroup.h -@@ -129,7 +129,7 @@ struct cgroup_ops { - bool (*destroy)(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, pid_t pid); -- const char *(*get_cgroup)(struct cgroup_ops *ops, const char *controller); -+ const char *(*get_cgroup)(struct cgroup_ops *ops, const char *controller, bool skip_mount); - bool (*escape)(const struct cgroup_ops *ops); - int (*num_hierarchies)(struct cgroup_ops *ops); - bool (*get_hierarchies)(struct cgroup_ops *ops, int n, char ***out); -diff --git a/src/lxc/commands.c b/src/lxc/commands.c -index f0c95df..c74b8c1 100644 ---- a/src/lxc/commands.c -+++ b/src/lxc/commands.c -@@ -481,9 +481,9 @@ static int lxc_cmd_get_cgroup_callback(int fd, struct lxc_cmd_req *req, - struct cgroup_ops *cgroup_ops = handler->cgroup_ops; - - if (req->datalen > 0) -- path = cgroup_ops->get_cgroup(cgroup_ops, req->data); -+ path = cgroup_ops->get_cgroup(cgroup_ops, req->data, true); - else -- path = cgroup_ops->get_cgroup(cgroup_ops, NULL); -+ path = cgroup_ops->get_cgroup(cgroup_ops, NULL, true); - if (!path) - return -1; - -@@ -655,7 +655,7 @@ static int lxc_cmd_stop_callback(int fd, struct lxc_cmd_req *req, - * lxc_unfreeze() would do another cmd (GET_CGROUP) which would - * deadlock us. - */ -- if (!cgroup_ops->get_cgroup(cgroup_ops, "freezer")) -+ if (!cgroup_ops->get_cgroup(cgroup_ops, "freezer", true)) - return 0; - - if (cgroup_ops->unfreeze(cgroup_ops)) -diff --git a/src/lxc/criu.c b/src/lxc/criu.c -index bb97859..5c77979 100644 ---- a/src/lxc/criu.c -+++ b/src/lxc/criu.c -@@ -332,7 +332,7 @@ static void exec_criu(struct cgroup_ops *cgroup_ops, struct lxc_conf *conf, - } else { - const char *p; - -- p = cgroup_ops->get_cgroup(cgroup_ops, controllers[0]); -+ p = cgroup_ops->get_cgroup(cgroup_ops, controllers[0], true); - if (!p) { - ERROR("failed to get cgroup path for %s", controllers[0]); - goto err; -diff --git a/src/lxc/start.c b/src/lxc/start.c -index b14e46f..9243a6d 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1032,17 +1032,15 @@ static int _recursive_read_cgroup_procs(const char *dirpath, pid_t **pids, size_ - - int get_all_pids(struct cgroup_ops *cg_ops, pid_t **pids, size_t *len) - { -- char *devices_path = NULL; -+ const char *devices_path = NULL; - int ret; - -- devices_path = must_make_path("/sys/fs/cgroup", "devices", cg_ops->container_cgroup, NULL); -+ devices_path = cg_ops->get_cgroup(cg_ops, "devices", false); - if (!file_exists(devices_path)) { -- free(devices_path); - return 0; - } - - ret = _recursive_read_cgroup_procs(devices_path, pids, len); -- free(devices_path); - return ret; - } - -@@ -1051,7 +1049,7 @@ static int set_cgroup_freezer(struct cgroup_ops *cg_ops, const char *value) - char *fullpath; - int ret; - -- fullpath = must_make_path("/sys/fs/cgroup", "freezer", cg_ops->container_cgroup, "freezer.state", NULL); -+ fullpath = must_make_path(cg_ops->get_cgroup(cg_ops, "freezer", false), "freezer.state", NULL); - ret = lxc_write_to_file(fullpath, value, strlen(value), false, 0666); - free(fullpath); - return ret; --- -1.8.3.1 - diff --git a/0072-lxc-adapt-to-docker-18.09.patch b/0072-lxc-adapt-to-docker-18.09.patch deleted file mode 100644 index 19c6284..0000000 --- a/0072-lxc-adapt-to-docker-18.09.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 15e78bbe59a574b5c41405cfdb84a496095a1662 Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Mon, 25 Mar 2019 18:03:23 +0800 -Subject: [PATCH 072/140] lxc: adapt to docker-18.09 - -1. adapt to docker-18.09 -2. fix strlcpy bug - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 8 ++++---- - src/lxc/start.c | 4 ++-- - 2 files changed, 6 insertions(+), 6 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index a6b9797..abfba04 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4382,9 +4382,9 @@ static char* generate_json_str(const char *name, const char *lxcpath, const char - ERROR("Get container %s pid failed: %s", name, strerror(errno)); - cpid = "-1"; - } -- // {"ociVersion":"","id":"xxx","pid":777,"root":"xxx","bundlePath":"xxx"} -- size = 1 + 16 + 5 + strlen(name) + 3 + 6 + strlen(cpid) + 1 -- + 7 + strlen(rootfs) + 3 + 13 + strlen(lxcpath) + 1 + strlen(name) + 3 + 1; -+ // {"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) { - ERROR("Out of memory"); -@@ -4392,7 +4392,7 @@ static char* generate_json_str(const char *name, const char *lxcpath, const char - goto out_free; - } - rc = snprintf(inmsg, size, -- "{\"ociVersion\":\"\",\"id\":\"%s\",\"pid\":%s,\"root\":\"%s\",\"bundlePath\":\"%s/%s\"}", -+ "{\"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"); -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 9243a6d..2fca4e1 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -2186,7 +2186,7 @@ static int lxc_spawn(struct lxc_handler *handler) - /* isulad: Run oci prestart hook at here */ - char* oci_hook_args[1]; - oci_hook_args[0] = alloca(strlen(lxcpath) + 1); -- (void)strlcpy(oci_hook_args[0], lxcpath, strlen(lxcpath)); -+ (void)strlcpy(oci_hook_args[0], lxcpath, strlen(lxcpath) + 1); - ret = run_lxc_hooks(name, "oci-prestart", conf, oci_hook_args); - if (ret < 0) { - ERROR("Failed to run oci prestart hooks"); -@@ -2687,7 +2687,7 @@ int do_lxcapi_clean_resource(char *name, char *lxcpath, struct lxc_conf *conf, p - - char* oci_hook_args[1]; - oci_hook_args[0] = alloca(strlen(handler->lxcpath) + 1); -- (void)strlcpy(oci_hook_args[0], handler->lxcpath, strlen(handler->lxcpath)); -+ (void)strlcpy(oci_hook_args[0], handler->lxcpath, strlen(handler->lxcpath) + 1); - - if (run_lxc_hooks(handler->name, "oci-poststop", handler->conf, oci_hook_args)) { - ERROR("Failed to run lxc.hook.post-stop for container \"%s\".", handler->name); --- -1.8.3.1 - diff --git a/0073-lxc-support-set-additional-groups.patch b/0073-lxc-support-set-additional-groups.patch deleted file mode 100644 index 9a8ef32..0000000 --- a/0073-lxc-support-set-additional-groups.patch +++ /dev/null @@ -1,247 +0,0 @@ -From d766c43da139d6e893e7d450943425e524be639a Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Mon, 25 Mar 2019 17:17:00 +0800 -Subject: [PATCH 073/140] lxc: support set additional groups - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 8 ++++--- - src/lxc/conf.c | 12 ++++++++++ - src/lxc/conf.h | 3 +++ - src/lxc/confile.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- - src/lxc/start.c | 25 ++++++++++++--------- - 5 files changed, 100 insertions(+), 14 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index c979c85..618f2f1 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -903,9 +903,6 @@ static int attach_child_main(struct attach_clone_payload *payload) - goto on_error; - } - -- if (!lxc_setgroups(0, NULL) && errno != EPERM) -- goto on_error; -- - /* Set {u,g}id. */ - if (options->uid != LXC_INVALID_UID) - new_uid = options->uid; -@@ -1017,6 +1014,11 @@ static int attach_child_main(struct attach_clone_payload *payload) - goto on_error; - } - -+ if (init_ctx->container && init_ctx->container->lxc_conf && -+ !lxc_setgroups(init_ctx->container->lxc_conf->init_groups_len, -+ init_ctx->container->lxc_conf->init_groups)) -+ goto on_error; -+ - if (!lxc_switch_uid_gid(new_uid, new_gid)) - goto on_error; - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index abfba04..58fc059 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -5184,10 +5184,21 @@ int lxc_clear_init_args(struct lxc_conf *lxc_conf) - for (i = 0; i < lxc_conf->init_argc; i++) - free(lxc_conf->init_argv[i]); - free(lxc_conf->init_argv); -+ 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_len = 0; -+ -+ return 0; -+} -+ -+ - /*isulad: clear populate devices*/ - int lxc_clear_populate_devices(struct lxc_conf *c) - { -@@ -5294,6 +5305,7 @@ void lxc_conf_free(struct lxc_conf *conf) - free(conf->cgroup_meta.controllers); - /* isulad add begin */ - 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); -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index 93cf15d..11cf596 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -418,6 +418,8 @@ struct lxc_conf { - /* 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; - -@@ -498,6 +500,7 @@ extern int lxc_clear_namespace(struct lxc_conf *c); - - /* isulad add begin */ - 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/confile.c b/src/lxc/confile.c -index 3940b32..60e6c46 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -154,6 +154,7 @@ lxc_config_define(sysctl); - lxc_config_define(proc); - /*isulad add begin*/ - lxc_config_define(init_args); -+lxc_config_define(init_groups); - lxc_config_define(populate_device); - lxc_config_define(umask); - /*isulad add end*/ -@@ -245,6 +246,7 @@ static struct lxc_config_t config_jump_table[] = { - - /*isulad add begin*/ - { "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.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, }, -@@ -2230,6 +2232,43 @@ static int set_config_init_args(const char *key, const char *value, - return 0; - } - -+/* 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, *token; -+ 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; -+ tmp = realloc(lxc_conf->init_groups, (lxc_conf->init_groups_len + 1) * sizeof(gid_t)); -+ if (!tmp) { -+ 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: set config for populate device */ - static int set_config_populate_device(const char *key, const char *value, - struct lxc_conf *lxc_conf, void *data) -@@ -3947,7 +3986,25 @@ static int get_config_init_args(const char *key, char *retv, int inlen, - - for (i = 0; i < c->init_argc; i++) { - strprint(retv, inlen, "%s", c->init_argv[i]); -- } -+ } -+ -+ return fulllen; -+} -+ -+/* 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; - } -@@ -4836,6 +4893,13 @@ static inline int clr_config_init_args(const char *key, struct lxc_conf *c, - return lxc_clear_init_args(c); - } - -+/* 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: clr config populate devices*/ - static inline int clr_config_populate_device(const char *key, struct lxc_conf *c, - void *data) -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 2fca4e1..ae92c13 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1666,6 +1666,20 @@ static int do_start(void *data) - if (lxc_setup_env_home(new_uid) < 0) - goto out_warn_father; - -+ /* If we are in a new user namespace we already dropped all groups when -+ * we switched to root in the new user namespace further above. Only -+ * drop groups if we can, so ensure that we have necessary privilege. -+ */ -+ if (lxc_list_empty(&handler->conf->id_map)) -+ #if HAVE_LIBCAP -+ if (lxc_proc_cap_is_set(CAP_SETGID, CAP_EFFECTIVE)) -+ #endif -+ /* 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; -+ } -+ - /* Avoid unnecessary syscalls. */ - if (new_uid == nsuid) - new_uid = LXC_INVALID_UID; -@@ -1676,16 +1690,7 @@ static int do_start(void *data) - if (!lxc_switch_uid_gid(new_uid, new_gid)) - goto out_warn_father; - -- /* If we are in a new user namespace we already dropped all groups when -- * we switched to root in the new user namespace further above. Only -- * drop groups if we can, so ensure that we have necessary privilege. -- */ -- if (lxc_list_empty(&handler->conf->id_map)) -- #if HAVE_LIBCAP -- if (lxc_proc_cap_is_set(CAP_SETGID, CAP_EFFECTIVE)) -- #endif -- if (!lxc_setgroups(0, NULL)) -- goto out_warn_father; -+ - - ret = lxc_ambient_caps_down(); - if (ret < 0) { --- -1.8.3.1 - diff --git a/0074-lxc-only-add-valid-fd-to-mainloop.patch b/0074-lxc-only-add-valid-fd-to-mainloop.patch deleted file mode 100644 index dc0df12..0000000 --- a/0074-lxc-only-add-valid-fd-to-mainloop.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 0a90b2cbb4e0a2e7dd3f533e4a20d9e522889ea5 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Tue, 26 Mar 2019 16:11:13 +0800 -Subject: [PATCH 074/140] lxc: only add valid fd to mainloop - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/mainloop.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/src/lxc/mainloop.c b/src/lxc/mainloop.c -index b169aa6..9603d1e 100644 ---- a/src/lxc/mainloop.c -+++ b/src/lxc/mainloop.c -@@ -85,6 +85,9 @@ int lxc_mainloop_add_handler(struct lxc_epoll_descr *descr, int fd, - struct mainloop_handler *handler; - struct lxc_list *item; - -+ if (fd < 0) -+ return 0; -+ - handler = malloc(sizeof(*handler)); - if (!handler) - return -1; --- -1.8.3.1 - diff --git a/0075-lxc-add-timeout-for-attach.patch b/0075-lxc-add-timeout-for-attach.patch deleted file mode 100644 index 14faaac..0000000 --- a/0075-lxc-add-timeout-for-attach.patch +++ /dev/null @@ -1,278 +0,0 @@ -From 2ce6149708aaa421373497cffa412d9815c7f7f7 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Wed, 3 Apr 2019 19:54:36 +0800 -Subject: [PATCH 075/140] lxc: add timeout for attach - -Signed-off-by: wujing -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/attach_options.h | 1 + - src/lxc/tools/arguments.h | 4 +++ - src/lxc/tools/lxc_attach.c | 11 +++++++ - src/lxc/tools/lxc_start.c | 13 +------- - src/lxc/utils.c | 13 ++++++++ - src/lxc/utils.h | 2 ++ - 7 files changed, 111 insertions(+), 12 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 618f2f1..79049c3 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -69,6 +69,20 @@ - #include - #endif - -+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 { -+ unsigned int timeout; -+ unsigned long long start_time; -+ pid_t pid; -+}; -+ - lxc_log_define(attach, lxc); - - /* Define default options if no options are supplied by the user. */ -@@ -1145,6 +1159,59 @@ static inline void lxc_attach_terminal_close_log(struct lxc_terminal *terminal) - terminal->log_fd = -EBADF; - } - -+/* 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(unsigned int 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) { -+ 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(const char *name, const char *lxcpath, - lxc_attach_exec_t exec_function, void *exec_payload, - lxc_attach_options_t *options, pid_t *attached_process, char **err_msg) -@@ -1481,6 +1548,13 @@ int lxc_attach(const char *name, const char *lxcpath, - - *attached_process = attached_pid; - -+ 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}; -@@ -1510,6 +1584,11 @@ int lxc_attach(const char *name, const char *lxcpath, - } - } - -+ if (g_attach_timeout_state == ATTACH_TIMEOUT && err_msg != NULL && *err_msg == NULL) { -+ *err_msg = strdup("Attach exceeded timeout"); -+ if (!(*err_msg)) -+ ERROR("Out of memory"); -+ } - close_mainloop: - if (options->attach_flags & LXC_ATTACH_TERMINAL) - lxc_mainloop_close(&descr); -diff --git a/src/lxc/attach_options.h b/src/lxc/attach_options.h -index 71c1739..5e279ba 100644 ---- a/src/lxc/attach_options.h -+++ b/src/lxc/attach_options.h -@@ -137,6 +137,7 @@ typedef struct lxc_attach_options_t { - int log_fd; - - char *init_fifo[3]; /* isulad: default fifos for the start */ -+ unsigned int timeout;/* isulad: Seconds for waiting on a container to attach/exec before it is killed*/ - } lxc_attach_options_t; - - /*! Default attach options to use */ -diff --git a/src/lxc/tools/arguments.h b/src/lxc/tools/arguments.h -index d03f8a4..2fc90ad 100644 ---- a/src/lxc/tools/arguments.h -+++ b/src/lxc/tools/arguments.h -@@ -69,6 +69,9 @@ struct lxc_arguments { - const char *exit_monitor_fifo; /* isulad: fifo used to monitor state of monitor process */ - unsigned int start_timeout; /* isulad: Seconds for waiting on a container to start before it is killed*/ - -+ /* for lxc-attach */ -+ unsigned int attach_timeout; -+ - /* for lxc-console */ - unsigned int ttynum; - char escape; -@@ -187,6 +190,7 @@ struct lxc_arguments { - #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 - - /* isulad add end*/ - -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index 674050d..2861ef4 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -62,6 +62,7 @@ static char **extra_env; - static ssize_t extra_env_size; - static char **extra_keep; - static ssize_t extra_keep_size; -+static unsigned int timeout = 0; - - static const struct option my_longopts[] = { - {"elevated-privileges", optional_argument, 0, 'e'}, -@@ -78,6 +79,7 @@ static const struct option my_longopts[] = { - {"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}, -+ {"timeout", required_argument, 0, OPT_ATTACH_TIMEOUT}, - LXC_COMMON_OPTIONS - }; - -@@ -128,6 +130,7 @@ Options :\n\ - multiple times.\n\ - -f, --rcfile=FILE\n\ - Load configuration file FILE\n\ -+ --timeout Timeout in seconds (default: 0)\n\ - ", - .options = my_longopts, - .parser = my_parser, -@@ -205,6 +208,13 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - case OPT_STDERR_FIFO: - args->terminal_fifos[2] = 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)atoi(arg); -+ break; - } - - return 0; -@@ -478,6 +488,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 183fafc..af63f58 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -49,6 +49,7 @@ - #include "config.h" - #include "confile.h" - #include "log.h" -+#include "utils.h" - - lxc_log_define(lxc_start, lxc); - -@@ -113,18 +114,6 @@ Options :\n\ - .pidfile = NULL, - }; - --static 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; --} -- - static int my_parser(struct lxc_arguments *args, int c, char *arg) - { - switch (c) { -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 480e6d0..69eb3e5 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -2069,3 +2069,16 @@ 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; -+} -+ -diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 73ffdd9..20407af 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -322,4 +322,6 @@ extern void lxc_write_error_message(int errfd, const char *format, ...); - - extern bool lxc_process_alive(pid_t pid, unsigned long long start_time); - -+extern bool is_non_negative_num(const char *s); -+ - #endif /* __LXC_UTILS_H */ --- -1.8.3.1 - diff --git a/0076-lxc-delete-unused-variable.patch b/0076-lxc-delete-unused-variable.patch deleted file mode 100644 index 5f33534..0000000 --- a/0076-lxc-delete-unused-variable.patch +++ /dev/null @@ -1,26 +0,0 @@ -From b2904bbeda12d9d1e6864717f76052c05b213ab2 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Thu, 4 Apr 2019 11:19:48 +0800 -Subject: [PATCH 076/140] lxc: delete unused variable - -Signed-off-by: wujing -Signed-off-by: LiFeng ---- - src/lxc/tools/lxc_attach.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index 2861ef4..440c0bc 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -62,7 +62,6 @@ static char **extra_env; - static ssize_t extra_env_size; - static char **extra_keep; - static ssize_t extra_keep_size; --static unsigned int timeout = 0; - - static const struct option my_longopts[] = { - {"elevated-privileges", optional_argument, 0, 'e'}, --- -1.8.3.1 - diff --git a/0077-lxc-set-negative-files.limit-to-max-and-fix-bug-of-s.patch b/0077-lxc-set-negative-files.limit-to-max-and-fix-bug-of-s.patch deleted file mode 100644 index 7684c79..0000000 --- a/0077-lxc-set-negative-files.limit-to-max-and-fix-bug-of-s.patch +++ /dev/null @@ -1,117 +0,0 @@ -From 940815cbc68a12ada2b0d9b212ded98a59590de6 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Tue, 2 Apr 2019 23:59:20 -0400 -Subject: [PATCH 077/140] lxc: set negative files.limit to max and fix bug of - setting homedir - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 19 +++++++++++++++---- - src/lxc/storage/storage.c | 5 ++--- - src/lxc/utils.c | 29 ++++++++++++++++++++--------- - 3 files changed, 37 insertions(+), 16 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 62d58f9..cc08737 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -2259,19 +2259,30 @@ static bool __cg_legacy_setup_limits(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)) { -+ 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 (cg_legacy_set_data(ops, cg->subsystem, cgvalue)) { - if (do_devices && (errno == EACCES || errno == EPERM)) { - WARN("Failed to set \"%s\" to \"%s\"", -- cg->subsystem, cg->value); -+ cg->subsystem, cgvalue); - continue; - } - WARN("Failed to set \"%s\" to \"%s\"", -- cg->subsystem, cg->value); -+ cg->subsystem, cgvalue); - goto out; - } - DEBUG("Set controller \"%s\" set to \"%s\"", -- cg->subsystem, cg->value); -+ cg->subsystem, cgvalue); - } -+ - // isulad: check cpu shares - if (strcmp(cg->subsystem, "cpu.shares") == 0) { - if (cg_legacy_get_data(ops, cg->subsystem, value, sizeof(value)) < 0) { -diff --git a/src/lxc/storage/storage.c b/src/lxc/storage/storage.c -index 88ed788..fa79762 100644 ---- a/src/lxc/storage/storage.c -+++ b/src/lxc/storage/storage.c -@@ -611,9 +611,8 @@ bool storage_destroy(struct lxc_conf *conf) - - r = storage_init(conf); - if (r == NULL) { -- ERROR("%s 's storage init failed, the storage may be deleted already", conf->name); -- ret = true; -- return ret; -+ WARN("%s 's storage init failed, the storage may be deleted already", conf->name); -+ return true; - } - - destroy_rv = r->ops->destroy(r); -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 69eb3e5..7b82d06 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -1873,20 +1873,31 @@ int lxc_setup_keyring(void) - // isulad: set env home in container - int lxc_setup_env_home(uid_t uid) - { --#define __DEFAULT_HOMEDIR__ "/" -+#define __PASSWD_FILE__ "/etc/passwd" - int ret = 0; -- char *homedir; -- struct passwd pwd, *result = NULL; -+ char *homedir = "/"; // default home dir is / -+ FILE *stream = NULL; -+ struct passwd pw, *pwbufp = NULL; - char buf[BUFSIZ]; - -- ret = getpwuid_r(uid, &pwd, buf, BUFSIZ, &result); -- if (ret || !result || !result->pw_dir) { -- WARN("User invalid, can not find user '%u'", uid); -- homedir = __DEFAULT_HOMEDIR__; -- } else { -- homedir = result->pw_dir; -+ stream = fopen_cloexec(__PASSWD_FILE__, "r"); -+ if (stream == NULL) { -+ SYSWARN("Failed to open %s: %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'"); --- -1.8.3.1 - diff --git a/0078-Run-pre-start-hook-before-chroot.patch b/0078-Run-pre-start-hook-before-chroot.patch deleted file mode 100644 index 138a07d..0000000 --- a/0078-Run-pre-start-hook-before-chroot.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 8820d8dcd7684f123a99304df532139315a1276f Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Wed, 3 Apr 2019 23:36:04 -0400 -Subject: [PATCH 078/140] Run pre-start hook before chroot - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 7 +++++++ - src/lxc/start.c | 6 ++++++ - src/lxc/sync.h | 2 ++ - 3 files changed, 15 insertions(+) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 58fc059..a9421c5 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -82,6 +82,7 @@ - #include "loop.h" - #include "path.h" - #include "utils.h" -+#include "sync.h" - - #ifdef MAJOR_IN_MKDEV - #include -@@ -4186,6 +4187,12 @@ int lxc_setup(struct lxc_handler *handler) - goto on_error; - } - -+ /* Ask father to run start host hooks and wait for him to finish. */ -+ if (lxc_sync_barrier_parent(handler, LXC_SYNC_START_HOST_HOOK)) { -+ ERROR("Failed to sync parent to start host hook"); -+ goto on_error; -+ } -+ - ret = lxc_setup_rootfs_switch_root(&lxc_conf->rootfs); - if (ret < 0) { - ERROR("Failed to pivot root into rootfs"); -diff --git a/src/lxc/start.c b/src/lxc/start.c -index ae92c13..10f922d 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -2204,6 +2204,12 @@ static int lxc_spawn(struct lxc_handler *handler) - goto out_delete_net; - } - -+ /* Tell the child to continue its initialization. We'll get -+ * LXC_SYNC_CGROUP when it is ready for us to setup cgroups. -+ */ -+ if (lxc_sync_barrier_child(handler, LXC_SYNC_POST_START_HOST_HOOK)) -+ goto out_delete_net; -+ - /* Tell the child to complete its initialization and wait for it to exec - * or return an error. (The child will never return - * LXC_SYNC_READY_START+1. It will either close the sync pipe, causing -diff --git a/src/lxc/sync.h b/src/lxc/sync.h -index 5c0fb34..787911d 100644 ---- a/src/lxc/sync.h -+++ b/src/lxc/sync.h -@@ -31,6 +31,8 @@ enum { - LXC_SYNC_POST_CONFIGURE, - LXC_SYNC_CGROUP, - LXC_SYNC_CGROUP_UNSHARE, -+ LXC_SYNC_START_HOST_HOOK, -+ LXC_SYNC_POST_START_HOST_HOOK, - LXC_SYNC_CGROUP_LIMITS, - LXC_SYNC_READY_START, - LXC_SYNC_RESTART, --- -1.8.3.1 - diff --git a/0079-inherid-env-from-parent-in-oci-hooks.patch b/0079-inherid-env-from-parent-in-oci-hooks.patch deleted file mode 100644 index ddb9332..0000000 --- a/0079-inherid-env-from-parent-in-oci-hooks.patch +++ /dev/null @@ -1,29 +0,0 @@ -From e87fd4a3b69a4c98d2c50ede559d56b43f65578a Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Thu, 4 Apr 2019 17:21:56 +0800 -Subject: [PATCH 079/140] inherid env from parent in oci hooks - -env: LD_LIBRAY_PAHT and PATH - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index a9421c5..20eb840 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4420,7 +4420,7 @@ static char **merge_ocihook_env(char **oldenvs, size_t env_len, size_t *merge_en - size_t result_len = env_len; - size_t i, j; - char *tmpenv; -- char *lxc_envs[] = {"LXC_CGNS_AWARE", "LXC_PID", "LXC_ROOTFS_MOUNT", -+ 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; - --- -1.8.3.1 - diff --git a/0080-lxc-fix-compile-error.patch b/0080-lxc-fix-compile-error.patch deleted file mode 100644 index 44ac724..0000000 --- a/0080-lxc-fix-compile-error.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 1e70c61ab75a71c99926e5f7c9e852dc81102bb9 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Mon, 8 Apr 2019 08:29:46 -0400 -Subject: [PATCH 080/140] lxc: fix compile error - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/utils.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 7b82d06..fd6075f 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -1874,7 +1874,6 @@ int lxc_setup_keyring(void) - int lxc_setup_env_home(uid_t uid) - { - #define __PASSWD_FILE__ "/etc/passwd" -- int ret = 0; - char *homedir = "/"; // default home dir is / - FILE *stream = NULL; - struct passwd pw, *pwbufp = NULL; -@@ -1882,7 +1881,7 @@ int lxc_setup_env_home(uid_t uid) - - stream = fopen_cloexec(__PASSWD_FILE__, "r"); - if (stream == NULL) { -- SYSWARN("Failed to open %s: %s", __PASSWD_FILE__); -+ SYSWARN("Failed to open %s", __PASSWD_FILE__); - goto set_env; - } - --- -1.8.3.1 - diff --git a/0081-lxc-Change-the-range-of-attach-timeout.patch b/0081-lxc-Change-the-range-of-attach-timeout.patch deleted file mode 100644 index 8e06619..0000000 --- a/0081-lxc-Change-the-range-of-attach-timeout.patch +++ /dev/null @@ -1,78 +0,0 @@ -From 5cfdce31c3afcf8d688151e71e84d056f2229a27 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Mon, 8 Apr 2019 16:42:43 +0800 -Subject: [PATCH 081/140] lxc: Change the range of attach timeout - -Signed-off-by: wujing -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 4 ++-- - src/lxc/attach_options.h | 2 +- - src/lxc/tools/arguments.h | 2 +- - src/lxc/tools/lxc_attach.c | 2 +- - 4 files changed, 5 insertions(+), 5 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 79049c3..6480eb9 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -78,7 +78,7 @@ typedef enum { - static volatile attach_timeout_t g_attach_timeout_state = ATTACH_INIT; - - struct attach_timeout_conf { -- unsigned int timeout; -+ int64_t timeout; - unsigned long long start_time; - pid_t pid; - }; -@@ -1180,7 +1180,7 @@ out: - } - - /* isulad: create attach timeout thread */ --static int create_attach_timeout_thread(unsigned int attach_timeout, pid_t pid) -+static int create_attach_timeout_thread(int64_t attach_timeout, pid_t pid) - { - int ret = 0; - pthread_t ptid; -diff --git a/src/lxc/attach_options.h b/src/lxc/attach_options.h -index 5e279ba..9744a2e 100644 ---- a/src/lxc/attach_options.h -+++ b/src/lxc/attach_options.h -@@ -137,7 +137,7 @@ typedef struct lxc_attach_options_t { - int log_fd; - - char *init_fifo[3]; /* isulad: default fifos for the start */ -- unsigned int timeout;/* isulad: Seconds for waiting on a container to attach/exec before it is killed*/ -+ int64_t timeout;/* isulad: Seconds for waiting on a container to attach/exec before it is killed*/ - } lxc_attach_options_t; - - /*! Default attach options to use */ -diff --git a/src/lxc/tools/arguments.h b/src/lxc/tools/arguments.h -index 2fc90ad..de02aeb 100644 ---- a/src/lxc/tools/arguments.h -+++ b/src/lxc/tools/arguments.h -@@ -70,7 +70,7 @@ struct lxc_arguments { - unsigned int start_timeout; /* isulad: Seconds for waiting on a container to start before it is killed*/ - - /* for lxc-attach */ -- unsigned int attach_timeout; -+ int64_t attach_timeout; - - /* for lxc-console */ - unsigned int ttynum; -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index 440c0bc..854b3a2 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -212,7 +212,7 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - ERROR("Error attach timeout parameter:%s.\n", arg); - return -1; - } -- args->attach_timeout = (unsigned int)atoi(arg); -+ args->attach_timeout = (unsigned int)atoll(arg); - break; - } - --- -1.8.3.1 - diff --git a/0082-lxc-fix-memory-leak-cause-by-setenv.patch b/0082-lxc-fix-memory-leak-cause-by-setenv.patch deleted file mode 100644 index 286737d..0000000 --- a/0082-lxc-fix-memory-leak-cause-by-setenv.patch +++ /dev/null @@ -1,150 +0,0 @@ -From ccec379d6577df3a01f11f054f37ce7e5b95088c Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Thu, 11 Apr 2019 15:27:31 +0800 -Subject: [PATCH 082/140] lxc: fix memory leak cause by setenv - -isulad will call do_lxcapi_clean_resource(), so setenv at here, will -change env of isulad. - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/start.c | 107 ++++++++++++++++++++++++++++++++++++++++---------------- - 1 file changed, 76 insertions(+), 31 deletions(-) - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 10f922d..87e07d3 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -2635,44 +2635,85 @@ on_error: - } - - /*isulad: set env for clean resources */ --static void clean_resource_set_env(struct lxc_handler *handler) -+static int clean_resource_set_env(struct lxc_handler *handler) - { - const char *name = handler->name; - struct lxc_conf *conf = handler->conf; -- char pidstr[20]; -- -- /* Start of environment variable setup for hooks. */ -- if (name && setenv("LXC_NAME", name, 1)) -- SYSERROR("Failed to set environment variable: LXC_NAME=%s.", name); -- -- if (conf->rcfile && setenv("LXC_CONFIG_FILE", conf->rcfile, 1)) -- SYSERROR("Failed to set environment variable: LXC_CONFIG_FILE=%s.", conf->rcfile); -- -- if (conf->rootfs.mount && setenv("LXC_ROOTFS_MOUNT", conf->rootfs.mount, 1)) -- SYSERROR("Failed to set environment variable: LXC_ROOTFS_MOUNT=%s.", conf->rootfs.mount); -+ char bufstr[PATH_MAX + 1]; -+ int i = 0; -+ int j = 0; -+ int len = 2; //set "LXC_PID" and "LXC_CGNS_AWARE" - -- if (conf->rootfs.path && setenv("LXC_ROOTFS_PATH", conf->rootfs.path, 1)) -- SYSERROR("Failed to set environment variable: LXC_ROOTFS_PATH=%s.", conf->rootfs.path); -- -- if (conf->console.path && setenv("LXC_CONSOLE", conf->console.path, 1)) -- SYSERROR("Failed to set environment variable: LXC_CONSOLE=%s.", conf->console.path); -- -- if (conf->console.log_path && setenv("LXC_CONSOLE_LOGPATH", conf->console.log_path, 1)) -- SYSERROR("Failed to set environment variable: LXC_CONSOLE_LOGPATH=%s.", conf->console.log_path); -- -- if (setenv("LXC_CGNS_AWARE", "1", 1)) -- SYSERROR("Failed to set environment variable LXC_CGNS_AWARE=1."); -+ 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++; -+ } - -- snprintf(pidstr, 20, "%d", handler->pid); -- if (setenv("LXC_PID", pidstr, 1)) -- SYSERROR("Failed to set environment variable: LXC_PID=%s.", pidstr); -+ 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++] = strdup(bufstr); -+ } -+ if (conf->rcfile) { -+ snprintf(bufstr, PATH_MAX + 1, "LXC_CONFIG_FILE=%s", conf->rcfile); -+ conf->ocihooks->poststop[i]->env[j++] = strdup(bufstr); -+ } -+ if (conf->rootfs.mount) { -+ snprintf(bufstr, PATH_MAX + 1, "LXC_ROOTFS_MOUNT=%s", conf->rootfs.mount); -+ conf->ocihooks->poststop[i]->env[j++] = strdup(bufstr); -+ } -+ if (conf->rootfs.path) { -+ snprintf(bufstr, PATH_MAX + 1, "LXC_ROOTFS_PATH=%s", conf->rootfs.path); -+ conf->ocihooks->poststop[i]->env[j++] = strdup(bufstr); -+ } -+ if (conf->console.path) { -+ snprintf(bufstr, PATH_MAX + 1, "LXC_CONSOLE=%s", conf->console.path); -+ conf->ocihooks->poststop[i]->env[j++] = 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++] = strdup(bufstr); -+ } -+ conf->ocihooks->poststop[i]->env[j++] = strdup("LXC_CGNS_AWARE=1"); - -- 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); -+ snprintf(bufstr, PATH_MAX + 1, "LXC_PID=%d", handler->pid); -+ conf->ocihooks->poststop[i]->env[j++] = 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++] = strdup(bufstr); -+ } -+ conf->ocihooks->poststop[i]->env_len = j; -+ /* End of environment variable setup for hooks. */ - } -- /* End of environment variable setup for hooks. */ -+ return 0; - } - - /*isulad: do_lxcapi_clean_resource */ -@@ -2690,7 +2731,11 @@ int do_lxcapi_clean_resource(char *name, char *lxcpath, struct lxc_conf *conf, p - goto out; - } - -- clean_resource_set_env(handler); -+ if (clean_resource_set_env(handler) != 0) { -+ ERROR("Failed to set env for poststop hooks"); -+ ret = -1; -+ goto out; -+ } - // if we shared pid namespace with others, should kill all processes within container cgroup - if (handler->conf->ns_share[LXC_NS_PID] != NULL) { - signal_all_processes(handler); --- -1.8.3.1 - diff --git a/0083-lxc-free-lxc-handler.patch b/0083-lxc-free-lxc-handler.patch deleted file mode 100644 index 8b35c5b..0000000 --- a/0083-lxc-free-lxc-handler.patch +++ /dev/null @@ -1,41 +0,0 @@ -From ec26a6a90167cc2a4624a4a5fc68bb9bcb56c651 Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Thu, 11 Apr 2019 20:34:51 +0800 -Subject: [PATCH 083/140] lxc: free lxc-handler - -free handler if failed - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/start.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 87e07d3..f1cd7fa 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -695,6 +695,10 @@ void lxc_zero_handler(struct lxc_handler *handler) - - void lxc_free_handler(struct lxc_handler *handler) - { -+ if (handler == NULL) { -+ return; -+ } -+ - if (handler->pinfd >= 0) - close(handler->pinfd); - -@@ -2761,8 +2765,8 @@ retry: - ret = -1; - } - -- lxc_free_handler(handler); - out: -+ lxc_free_handler(handler); - return ret; - } - --- -1.8.3.1 - diff --git a/0084-lxc-memory-leak-of-lxc_grow_array.patch b/0084-lxc-memory-leak-of-lxc_grow_array.patch deleted file mode 100644 index 42566f7..0000000 --- a/0084-lxc-memory-leak-of-lxc_grow_array.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 4e84395bebe59ac94bf9d7ee11a985c776a05fbe Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Thu, 11 Apr 2019 22:36:42 +0800 -Subject: [PATCH 084/140] lxc: memory leak of lxc_grow_array - -fix memory leak of lxc_grow_array - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/string_utils.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/lxc/string_utils.c b/src/lxc/string_utils.c -index 0d7538c..31c4340 100644 ---- a/src/lxc/string_utils.c -+++ b/src/lxc/string_utils.c -@@ -523,6 +523,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/0085-lxc-update-json-file-from-isulad.patch b/0085-lxc-update-json-file-from-isulad.patch deleted file mode 100644 index 46221d1..0000000 --- a/0085-lxc-update-json-file-from-isulad.patch +++ /dev/null @@ -1,1089 +0,0 @@ -From 1c36fa9e699c1bf892e89ba71b0052b34b55a89d Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Fri, 12 Apr 2019 06:06:12 -0400 -Subject: [PATCH 085/140] lxc: update json file from isulad - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/json/defs.c | 38 +++++----- - src/lxc/json/json_common.c | 160 +++++++++++++++++++-------------------- - src/lxc/json/json_common.h | 2 +- - src/lxc/json/logger_json_file.c | 50 ++++++------ - src/lxc/json/oci_runtime_hooks.c | 3 +- - src/lxc/json/oci_runtime_spec.c | 32 ++++---- - 6 files changed, 142 insertions(+), 143 deletions(-) - -diff --git a/src/lxc/json/defs.c b/src/lxc/json/defs.c -index 38df2f7..e7d9a09 100644 ---- a/src/lxc/json/defs.c -+++ b/src/lxc/json/defs.c -@@ -15,20 +15,20 @@ defs_hook *make_defs_hook(yajl_val tree, struct parser_context *ctx, parser_erro - ret = safe_malloc(sizeof(*ret)); - { - yajl_val val = get_val(tree, "path", yajl_t_string); -- if (val) { -+ 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 && YAJL_GET_ARRAY(tmp)) { -+ 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; - 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) { -+ if (val != NULL) { - char *str = YAJL_GET_STRING(val); - ret->args[i] = safe_strdup(str ? str : ""); - } -@@ -37,13 +37,13 @@ defs_hook *make_defs_hook(yajl_val tree, struct parser_context *ctx, parser_erro - } - { - yajl_val tmp = get_val(tree, "env", yajl_t_array); -- if (tmp && YAJL_GET_ARRAY(tmp)) { -+ 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; - 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) { -+ if (val != NULL) { - char *str = YAJL_GET_STRING(val); - ret->env[i] = safe_strdup(str ? str : ""); - } -@@ -52,7 +52,7 @@ defs_hook *make_defs_hook(yajl_val tree, struct parser_context *ctx, parser_erro - } - { - yajl_val val = get_val(tree, "timeout", yajl_t_number); -- if (val) { -+ 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) -@@ -84,14 +84,14 @@ defs_hook *make_defs_hook(yajl_val tree, struct parser_context *ctx, parser_erro - } - - void free_defs_hook(defs_hook *ptr) { -- if (!ptr) -+ if (ptr == NULL) - return; - free(ptr->path); - ptr->path = NULL; -- if (ptr->args) { -+ if (ptr->args != NULL) { - size_t i; - for (i = 0; i < ptr->args_len; i++) { -- if (ptr->args[i]) { -+ if (ptr->args[i] != NULL) { - free(ptr->args[i]); - ptr->args[i] = NULL; - } -@@ -99,10 +99,10 @@ void free_defs_hook(defs_hook *ptr) { - free(ptr->args); - ptr->args = NULL; - } -- if (ptr->env) { -+ if (ptr->env != NULL) { - size_t i; - for (i = 0; i < ptr->env_len; i++) { -- if (ptr->env[i]) { -+ if (ptr->env[i] != NULL) { - free(ptr->env[i]); - ptr->env[i] = NULL; - } -@@ -119,24 +119,24 @@ yajl_gen_status gen_defs_hook(yajl_gen g, defs_hook *ptr, struct parser_context - 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 && ptr->path)) { -+ 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 && ptr->path) { -+ 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 && ptr->args)) { -+ 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 && ptr->args) { -+ if (ptr != NULL && ptr->args != NULL) { - len = ptr->args_len; - } - if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) -@@ -155,12 +155,12 @@ yajl_gen_status gen_defs_hook(yajl_gen g, defs_hook *ptr, struct parser_context - if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) - yajl_gen_config(g, yajl_gen_beautify, 1); - } -- if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr && ptr->env)) { -+ 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 && ptr->env) { -+ if (ptr != NULL && ptr->env != NULL) { - len = ptr->env_len; - } - if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) -@@ -179,12 +179,12 @@ yajl_gen_status gen_defs_hook(yajl_gen g, defs_hook *ptr, struct parser_context - if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) - yajl_gen_config(g, yajl_gen_beautify, 1); - } -- if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr && ptr->timeout)) { -+ 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 && ptr->timeout) { -+ if (ptr != NULL && ptr->timeout) { - num = (long long int)ptr->timeout; - } - stat = reformat_int(g, num); -diff --git a/src/lxc/json/json_common.c b/src/lxc/json/json_common.c -index e339ab3..54b7b61 100755 ---- a/src/lxc/json/json_common.c -+++ b/src/lxc/json/json_common.c -@@ -111,7 +111,7 @@ int common_safe_double(const char *numstr, double *converted) { - char *err_str = NULL; - double d; - -- if (!numstr) { -+ if (numstr == NULL) { - return -EINVAL; - } - -@@ -121,7 +121,7 @@ int common_safe_double(const char *numstr, double *converted) { - return -errno; - } - -- if (!err_str || err_str == numstr || *err_str != '\0') { -+ if (err_str == NULL || err_str == numstr || *err_str != '\0') { - return -EINVAL; - } - -@@ -133,7 +133,7 @@ int common_safe_uint8(const char *numstr, uint8_t *converted) { - char *err = NULL; - unsigned long int uli; - -- if (!numstr) { -+ if (numstr == NULL) { - return -EINVAL; - } - -@@ -143,7 +143,7 @@ int common_safe_uint8(const char *numstr, uint8_t *converted) { - return -errno; - } - -- if (!err || err == numstr || *err != '\0') { -+ if (err == NULL || err == numstr || *err != '\0') { - return -EINVAL; - } - -@@ -159,7 +159,7 @@ int common_safe_uint16(const char *numstr, uint16_t *converted) { - char *err = NULL; - unsigned long int uli; - -- if (!numstr) { -+ if (numstr == NULL) { - return -EINVAL; - } - -@@ -169,7 +169,7 @@ int common_safe_uint16(const char *numstr, uint16_t *converted) { - return -errno; - } - -- if (!err || err == numstr || *err != '\0') { -+ if (err == NULL || err == numstr || *err != '\0') { - return -EINVAL; - } - -@@ -185,7 +185,7 @@ int common_safe_uint32(const char *numstr, uint32_t *converted) { - char *err = NULL; - unsigned long long int ull; - -- if (!numstr) { -+ if (numstr == NULL) { - return -EINVAL; - } - -@@ -195,7 +195,7 @@ int common_safe_uint32(const char *numstr, uint32_t *converted) { - return -errno; - } - -- if (!err || err == numstr || *err != '\0') { -+ if (err == NULL || err == numstr || *err != '\0') { - return -EINVAL; - } - -@@ -211,7 +211,7 @@ int common_safe_uint64(const char *numstr, uint64_t *converted) { - char *err = NULL; - unsigned long long int ull; - -- if (!numstr) { -+ if (numstr == NULL) { - return -EINVAL; - } - -@@ -221,7 +221,7 @@ int common_safe_uint64(const char *numstr, uint64_t *converted) { - return -errno; - } - -- if (!err || err == numstr || *err != '\0') { -+ if (err == NULL || err == numstr || *err != '\0') { - return -EINVAL; - } - -@@ -233,7 +233,7 @@ int common_safe_uint(const char *numstr, unsigned int *converted) { - char *err = NULL; - unsigned long long int ull; - -- if (!numstr) { -+ if (numstr == NULL) { - return -EINVAL; - } - -@@ -243,7 +243,7 @@ int common_safe_uint(const char *numstr, unsigned int *converted) { - return -errno; - } - -- if (!err || err == numstr || *err != '\0') { -+ if (err == NULL || err == numstr || *err != '\0') { - return -EINVAL; - } - -@@ -259,7 +259,7 @@ int common_safe_int8(const char *numstr, int8_t *converted) { - char *err = NULL; - long int li; - -- if (!numstr) { -+ if (numstr == NULL) { - return -EINVAL; - } - -@@ -269,7 +269,7 @@ int common_safe_int8(const char *numstr, int8_t *converted) { - return -errno; - } - -- if (!err || err == numstr || *err != '\0') { -+ if (err == NULL || err == numstr || *err != '\0') { - return -EINVAL; - } - -@@ -285,7 +285,7 @@ int common_safe_int16(const char *numstr, int16_t *converted) { - char *err = NULL; - long int li; - -- if (!numstr) { -+ if (numstr == NULL) { - return -EINVAL; - } - -@@ -295,7 +295,7 @@ int common_safe_int16(const char *numstr, int16_t *converted) { - return -errno; - } - -- if (!err || err == numstr || *err != '\0') { -+ if (err == NULL || err == numstr || *err != '\0') { - return -EINVAL; - } - -@@ -311,7 +311,7 @@ int common_safe_int32(const char *numstr, int32_t *converted) { - char *err = NULL; - long long int lli; - -- if (!numstr) { -+ if (numstr == NULL) { - return -EINVAL; - } - -@@ -321,7 +321,7 @@ int common_safe_int32(const char *numstr, int32_t *converted) { - return -errno; - } - -- if (!err || err == numstr || *err != '\0') { -+ if (err == NULL || err == numstr || *err != '\0') { - return -EINVAL; - } - -@@ -337,7 +337,7 @@ int common_safe_int64(const char *numstr, int64_t *converted) { - char *err = NULL; - long long int lli; - -- if (!numstr) { -+ if (numstr == NULL) { - return -EINVAL; - } - -@@ -347,7 +347,7 @@ int common_safe_int64(const char *numstr, int64_t *converted) { - return -errno; - } - -- if (!err || err == numstr || *err != '\0') { -+ if (err == NULL || err == numstr || *err != '\0') { - return -EINVAL; - } - -@@ -359,7 +359,7 @@ int common_safe_int(const char *numstr, int *converted) { - char *err = NULL; - long long int lli; - -- if (!numstr) { -+ if (numstr == NULL) { - return -EINVAL; - } - -@@ -369,7 +369,7 @@ int common_safe_int(const char *numstr, int *converted) { - return -errno; - } - -- if (!err || err == numstr || *err != '\0') { -+ if (err == NULL || err == numstr || *err != '\0') { - return -EINVAL; - } - -@@ -385,12 +385,12 @@ char *safe_strdup(const char *src) - { - char *dst = NULL; - -- if (!src) { -+ if (src == NULL) { - return NULL; - } - - dst = strdup(src); -- if (!dst) { -+ if (dst == NULL) { - abort(); - } - -@@ -402,7 +402,7 @@ yajl_gen_status gen_json_map_int_int(void *ctx, json_map_int_int *map, struct pa - yajl_gen_status stat = yajl_gen_status_ok; - yajl_gen g = (yajl_gen) ctx; - size_t len = 0, i = 0; -- if (map) { -+ if (map != NULL) { - len = map->len; - } - if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -@@ -444,7 +444,7 @@ yajl_gen_status gen_json_map_int_int(void *ctx, json_map_int_int *map, struct pa - } - - void free_json_map_int_int(json_map_int_int *map) { -- if (map) { -+ if (map != NULL) { - size_t i; - for (i = 0; i < map->len; i++) { - // No need to free key for type int -@@ -459,7 +459,7 @@ 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) { - json_map_int_int *ret = NULL; -- if (src && YAJL_GET_OBJECT(src)) { -+ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { - size_t i; - size_t len = YAJL_GET_OBJECT(src)->len; - ret = safe_malloc(sizeof(*ret)); -@@ -470,11 +470,11 @@ json_map_int_int *make_json_map_int_int(yajl_val src, struct parser_context *ctx - const char *srckey = YAJL_GET_OBJECT(src)->keys[i]; - yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; - -- if (srckey) { -+ if (srckey != NULL) { - int invalid; - invalid = common_safe_int(srckey, &(ret->keys[i])); - if (invalid) { -- if (!*err && asprintf(err, "Invalid key '%s' with type 'int': %s", srckey, strerror(-invalid)) < 0) { -+ 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); -@@ -482,10 +482,10 @@ json_map_int_int *make_json_map_int_int(yajl_val src, struct parser_context *ctx - } - } - -- if (srcval) { -+ if (srcval != NULL) { - int invalid; - if (!YAJL_IS_NUMBER(srcval)) { -- if (!*err && asprintf(err, "Invalid value with type 'int' for key '%s'", srckey) < 0) { -+ 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); -@@ -493,7 +493,7 @@ json_map_int_int *make_json_map_int_int(yajl_val src, struct parser_context *ctx - } - invalid = common_safe_int(YAJL_GET_NUMBER(srcval), &(ret->values[i])); - if (invalid) { -- if (!*err && asprintf(err, "Invalid value with type 'int' for key '%s': %s", srckey, strerror(-invalid)) < 0) { -+ 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); -@@ -506,10 +506,10 @@ json_map_int_int *make_json_map_int_int(yajl_val src, struct parser_context *ctx - } - int append_json_map_int_int(json_map_int_int *map, int key, int val) { - size_t len; -- int *keys; -- int *vals; -+ int *keys = NULL; -+ int *vals = NULL; - -- if (!map) { -+ if (map == NULL) { - return -1; - } - -@@ -548,7 +548,7 @@ yajl_gen_status gen_json_map_int_bool(void *ctx, json_map_int_bool *map, struct - yajl_gen_status stat = yajl_gen_status_ok; - yajl_gen g = (yajl_gen) ctx; - size_t len = 0, i = 0; -- if (map) { -+ if (map != NULL) { - len = map->len; - } - if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -@@ -590,7 +590,7 @@ yajl_gen_status gen_json_map_int_bool(void *ctx, json_map_int_bool *map, struct - } - - void free_json_map_int_bool(json_map_int_bool *map) { -- if (map) { -+ if (map != NULL) { - size_t i; - for (i = 0; i < map->len; i++) { - // No need to free key for type int -@@ -605,7 +605,7 @@ 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) { - json_map_int_bool *ret = NULL; -- if (src && YAJL_GET_OBJECT(src)) { -+ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { - size_t i; - size_t len = YAJL_GET_OBJECT(src)->len; - ret = safe_malloc(sizeof(*ret)); -@@ -616,11 +616,11 @@ json_map_int_bool *make_json_map_int_bool(yajl_val src, struct parser_context *c - const char *srckey = YAJL_GET_OBJECT(src)->keys[i]; - yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; - -- if (srckey) { -+ if (srckey != NULL) { - int invalid; - invalid = common_safe_int(srckey, &(ret->keys[i])); - if (invalid) { -- if (!*err && asprintf(err, "Invalid key '%s' with type 'int': %s", srckey, strerror(-invalid)) < 0) { -+ 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); -@@ -628,13 +628,13 @@ json_map_int_bool *make_json_map_int_bool(yajl_val src, struct parser_context *c - } - } - -- if (srcval) { -+ 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 && asprintf(err, "Invalid value with type 'bool' for key '%s'", srckey) < 0) { -+ 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); -@@ -647,10 +647,10 @@ json_map_int_bool *make_json_map_int_bool(yajl_val src, struct parser_context *c - } - int append_json_map_int_bool(json_map_int_bool *map, int key, bool val) { - size_t len; -- int *keys; -- bool *vals; -+ int *keys = NULL; -+ bool *vals = NULL; - -- if (!map) { -+ if (map == NULL) { - return -1; - } - -@@ -689,7 +689,7 @@ yajl_gen_status gen_json_map_int_string(void *ctx, json_map_int_string *map, str - yajl_gen_status stat = yajl_gen_status_ok; - yajl_gen g = (yajl_gen) ctx; - size_t len = 0, i = 0; -- if (map) { -+ if (map != NULL) { - len = map->len; - } - if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -@@ -731,7 +731,7 @@ yajl_gen_status gen_json_map_int_string(void *ctx, json_map_int_string *map, str - } - - void free_json_map_int_string(json_map_int_string *map) { -- if (map) { -+ if (map != NULL) { - size_t i; - for (i = 0; i < map->len; i++) { - // No need to free key for type int -@@ -747,7 +747,7 @@ 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) { - json_map_int_string *ret = NULL; -- if (src && YAJL_GET_OBJECT(src)) { -+ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { - size_t i; - size_t len = YAJL_GET_OBJECT(src)->len; - ret = safe_malloc(sizeof(*ret)); -@@ -758,11 +758,11 @@ json_map_int_string *make_json_map_int_string(yajl_val src, struct parser_contex - const char *srckey = YAJL_GET_OBJECT(src)->keys[i]; - yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; - -- if (srckey) { -+ if (srckey != NULL) { - int invalid; - invalid = common_safe_int(srckey, &(ret->keys[i])); - if (invalid) { -- if (!*err && asprintf(err, "Invalid key '%s' with type 'int': %s", srckey, strerror(-invalid)) < 0) { -+ 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); -@@ -770,9 +770,9 @@ json_map_int_string *make_json_map_int_string(yajl_val src, struct parser_contex - } - } - -- if (srcval) { -+ if (srcval != NULL) { - if (!YAJL_IS_STRING(srcval)) { -- if (!*err && asprintf(err, "Invalid value with type 'string' for key '%s'", srckey) < 0) { -+ 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); -@@ -787,10 +787,10 @@ json_map_int_string *make_json_map_int_string(yajl_val src, struct parser_contex - } - int append_json_map_int_string(json_map_int_string *map, int key, const char *val) { - size_t len; -- int *keys; -- char **vals; -+ int *keys = NULL; -+ char **vals = NULL; - -- if (!map) { -+ if (map == NULL) { - return -1; - } - -@@ -829,7 +829,7 @@ yajl_gen_status gen_json_map_string_int(void *ctx, json_map_string_int *map, str - yajl_gen_status stat = yajl_gen_status_ok; - yajl_gen g = (yajl_gen) ctx; - size_t len = 0, i = 0; -- if (map) { -+ if (map != NULL) { - len = map->len; - } - if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -@@ -862,7 +862,7 @@ yajl_gen_status gen_json_map_string_int(void *ctx, json_map_string_int *map, str - } - - void free_json_map_string_int(json_map_string_int *map) { -- if (map) { -+ if (map != NULL) { - size_t i; - for (i = 0; i < map->len; i++) { - free(map->keys[i]); -@@ -878,7 +878,7 @@ 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) { - json_map_string_int *ret = NULL; -- if (src && YAJL_GET_OBJECT(src)) { -+ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { - size_t i; - size_t len = YAJL_GET_OBJECT(src)->len; - ret = safe_malloc(sizeof(*ret)); -@@ -890,10 +890,10 @@ json_map_string_int *make_json_map_string_int(yajl_val src, struct parser_contex - yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; - ret->keys[i] = safe_strdup(srckey ? srckey : ""); - -- if (srcval) { -+ if (srcval != NULL) { - int invalid; - if (!YAJL_IS_NUMBER(srcval)) { -- if (!*err && asprintf(err, "Invalid value with type 'int' for key '%s'", srckey) < 0) { -+ 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); -@@ -901,7 +901,7 @@ json_map_string_int *make_json_map_string_int(yajl_val src, struct parser_contex - } - invalid = common_safe_int(YAJL_GET_NUMBER(srcval), &(ret->values[i])); - if (invalid) { -- if (!*err && asprintf(err, "Invalid value with type 'int' for key '%s': %s", srckey, strerror(-invalid)) < 0) { -+ 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); -@@ -914,10 +914,10 @@ json_map_string_int *make_json_map_string_int(yajl_val src, struct parser_contex - } - int append_json_map_string_int(json_map_string_int *map, const char *key, int val) { - size_t len; -- char **keys; -- int *vals; -+ char **keys = NULL; -+ int *vals = NULL; - -- if (!map) { -+ if (map == NULL) { - return -1; - } - -@@ -956,7 +956,7 @@ yajl_gen_status gen_json_map_string_bool(void *ctx, json_map_string_bool *map, s - yajl_gen_status stat = yajl_gen_status_ok; - yajl_gen g = (yajl_gen) ctx; - size_t len = 0, i = 0; -- if (map) { -+ if (map != NULL) { - len = map->len; - } - if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -@@ -989,7 +989,7 @@ yajl_gen_status gen_json_map_string_bool(void *ctx, json_map_string_bool *map, s - } - - void free_json_map_string_bool(json_map_string_bool *map) { -- if (map) { -+ if (map != NULL) { - size_t i; - for (i = 0; i < map->len; i++) { - free(map->keys[i]); -@@ -1005,7 +1005,7 @@ 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) { - json_map_string_bool *ret = NULL; -- if (src && YAJL_GET_OBJECT(src)) { -+ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { - size_t i; - size_t len = YAJL_GET_OBJECT(src)->len; - ret = safe_malloc(sizeof(*ret)); -@@ -1017,13 +1017,13 @@ json_map_string_bool *make_json_map_string_bool(yajl_val src, struct parser_cont - yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; - ret->keys[i] = safe_strdup(srckey ? srckey : ""); - -- if (srcval) { -+ 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 && asprintf(err, "Invalid value with type 'bool' for key '%s'", srckey) < 0) { -+ 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); -@@ -1036,10 +1036,10 @@ json_map_string_bool *make_json_map_string_bool(yajl_val src, struct parser_cont - } - int append_json_map_string_bool(json_map_string_bool *map, const char *key, bool val) { - size_t len; -- char **keys; -- bool *vals; -+ char **keys = NULL; -+ bool *vals = NULL; - -- if (!map) { -+ if (map == NULL) { - return -1; - } - -@@ -1078,7 +1078,7 @@ yajl_gen_status gen_json_map_string_string(void *ctx, json_map_string_string *ma - yajl_gen_status stat = yajl_gen_status_ok; - yajl_gen g = (yajl_gen) ctx; - size_t len = 0, i = 0; -- if (map) { -+ if (map != NULL) { - len = map->len; - } - if (!len && !(ptx->options & GEN_OPTIONS_SIMPLIFY)) { -@@ -1111,7 +1111,7 @@ yajl_gen_status gen_json_map_string_string(void *ctx, json_map_string_string *ma - } - - void free_json_map_string_string(json_map_string_string *map) { -- if (map) { -+ if (map != NULL) { - size_t i; - for (i = 0; i < map->len; i++) { - free(map->keys[i]); -@@ -1128,7 +1128,7 @@ 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) { - json_map_string_string *ret = NULL; -- if (src && YAJL_GET_OBJECT(src)) { -+ if (src != NULL && YAJL_GET_OBJECT(src) != NULL) { - size_t i; - size_t len = YAJL_GET_OBJECT(src)->len; - ret = safe_malloc(sizeof(*ret)); -@@ -1140,9 +1140,9 @@ json_map_string_string *make_json_map_string_string(yajl_val src, struct parser_ - yajl_val srcval = YAJL_GET_OBJECT(src)->values[i]; - ret->keys[i] = safe_strdup(srckey ? srckey : ""); - -- if (srcval) { -+ if (srcval != NULL) { - if (!YAJL_IS_STRING(srcval)) { -- if (!*err && asprintf(err, "Invalid value with type 'string' for key '%s'", srckey) < 0) { -+ 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); -@@ -1157,10 +1157,10 @@ json_map_string_string *make_json_map_string_string(yajl_val src, struct parser_ - } - int append_json_map_string_string(json_map_string_string *map, const char *key, const char *val) { - size_t len, i; -- char **keys; -- char **vals; -+ char **keys = NULL; -+ char **vals = NULL; - -- if (!map) { -+ if (map == NULL) { - return -1; - } - -diff --git a/src/lxc/json/json_common.h b/src/lxc/json/json_common.h -index eb8281c..218a837 100755 ---- a/src/lxc/json/json_common.h -+++ b/src/lxc/json/json_common.h -@@ -27,7 +27,7 @@ extern "C" { - # define GEN_OPTIONS_NOT_VALIDATE_UTF8 0x08 - - #define GEN_SET_ERROR_AND_RETURN(stat, err) { \ -- if (!*(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"); \ - } \ -diff --git a/src/lxc/json/logger_json_file.c b/src/lxc/json/logger_json_file.c -index 4d78103..6433b04 100644 ---- a/src/lxc/json/logger_json_file.c -+++ b/src/lxc/json/logger_json_file.c -@@ -15,32 +15,32 @@ logger_json_file *make_logger_json_file(yajl_val tree, struct parser_context *ct - ret = safe_malloc(sizeof(*ret)); - { - yajl_val tmp = get_val(tree, "log", yajl_t_string); -- if (tmp) { -+ if (tmp != NULL) { - char *str = YAJL_GET_STRING(tmp); - ret->log = (uint8_t *)safe_strdup(str ? str : ""); -- ret->log_len = str ? strlen(str) : 0; -+ ret->log_len = str != NULL ? strlen(str) : 0; - } - } - { - yajl_val val = get_val(tree, "stream", yajl_t_string); -- if (val) { -+ 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) { -+ 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) { -+ if (tmp != NULL) { - char *str = YAJL_GET_STRING(tmp); - ret->attrs = (uint8_t *)safe_strdup(str ? str : ""); -- ret->attrs_len = str ? strlen(str) : 0; -+ ret->attrs_len = str != NULL ? strlen(str) : 0; - } - } - -@@ -59,7 +59,7 @@ logger_json_file *make_logger_json_file(yajl_val tree, struct parser_context *ct - } - - void free_logger_json_file(logger_json_file *ptr) { -- if (!ptr) -+ if (ptr == NULL) - return; - free(ptr->log); - ptr->log = NULL; -@@ -78,13 +78,13 @@ yajl_gen_status gen_logger_json_file(yajl_gen g, logger_json_file *ptr, struct p - 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 && ptr->log && ptr->log_len)) { -+ 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 && ptr->log) { -+ if (ptr != NULL && ptr->log != NULL) { - str = (const char *)ptr->log; - len = ptr->log_len; - } -@@ -92,37 +92,37 @@ yajl_gen_status gen_logger_json_file(yajl_gen g, logger_json_file *ptr, struct p - if (yajl_gen_status_ok != stat) - GEN_SET_ERROR_AND_RETURN(stat, err); - } -- if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr && ptr->stream)) { -+ 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 && ptr->stream) { -+ 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 && ptr->time)) { -+ 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 && ptr->time) { -+ 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 && ptr->attrs && ptr->attrs_len)) { -+ 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 && ptr->attrs) { -+ if (ptr != NULL && ptr->attrs != NULL) { - str = (const char *)ptr->attrs; - len = ptr->attrs_len; - } -@@ -140,9 +140,9 @@ yajl_gen_status gen_logger_json_file(yajl_gen g, logger_json_file *ptr, struct p - logger_json_file *logger_json_file_parse_file(const char *filename, struct parser_context *ctx, parser_error *err) { - logger_json_file *ptr; - size_t filesize; -- char *content; -+ char *content = NULL; - -- if (!filename || !err) -+ if (filename == NULL || err == NULL) - return NULL; - - *err = NULL; -@@ -160,9 +160,9 @@ logger_json_file *logger_json_file_parse_file(const char *filename, struct parse - logger_json_file *logger_json_file_parse_file_stream(FILE *stream, struct parser_context *ctx, parser_error *err) { - logger_json_file *ptr; - size_t filesize; -- char *content ; -+ char *content = NULL ; - -- if (!stream || !err) -+ if (stream == NULL || err == NULL) - return NULL; - - *err = NULL; -@@ -182,11 +182,11 @@ logger_json_file *logger_json_file_parse_data(const char *jsondata, struct parse - char errbuf[1024]; - struct parser_context tmp_ctx; - -- if (!jsondata || !err) -+ if (jsondata == NULL || err == NULL) - return NULL; - - *err = NULL; -- if (!ctx) { -+ if (ctx == NULL) { - ctx = &tmp_ctx; - memset(&tmp_ctx, 0, sizeof(tmp_ctx)); - } -@@ -207,11 +207,11 @@ char *logger_json_file_generate_json(logger_json_file *ptr, struct parser_contex - char *json_buf = NULL; - size_t gen_len = 0; - -- if (!ptr || !err) -+ if (ptr == NULL || err == NULL) - return NULL; - - *err = NULL; -- if (!ctx) { -+ if (ctx == NULL) { - ctx = &tmp_ctx; - memset(&tmp_ctx, 0, sizeof(tmp_ctx)); - } -@@ -221,12 +221,12 @@ char *logger_json_file_generate_json(logger_json_file *ptr, struct parser_contex - goto out; - } - if (yajl_gen_status_ok != gen_logger_json_file(g, ptr, ctx, err)) { -- if (!*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) { -+ if (gen_buf == NULL) { - *err = safe_strdup("Error to get generated json"); - goto free_out; - } -diff --git a/src/lxc/json/oci_runtime_hooks.c b/src/lxc/json/oci_runtime_hooks.c -index 3aa134e..43ff8d7 100644 ---- a/src/lxc/json/oci_runtime_hooks.c -+++ b/src/lxc/json/oci_runtime_hooks.c -@@ -46,8 +46,7 @@ oci_runtime_spec_hooks *oci_runtime_spec_hooks_parse_file(const char *filename, - } - return NULL; - } -- oci_runtime_spec_hooks *ptr = make_oci_runtime_spec_hooks(tree, ctx, -- err); -+ 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_spec.c b/src/lxc/json/oci_runtime_spec.c -index 1f6073c..4ccb635 100644 ---- a/src/lxc/json/oci_runtime_spec.c -+++ b/src/lxc/json/oci_runtime_spec.c -@@ -15,7 +15,7 @@ oci_runtime_spec_hooks *make_oci_runtime_spec_hooks(yajl_val tree, struct parser - ret = safe_malloc(sizeof(*ret)); - { - yajl_val tmp = get_val(tree, "prestart", yajl_t_array); -- if (tmp && YAJL_GET_ARRAY(tmp)) { -+ 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)); -@@ -31,7 +31,7 @@ oci_runtime_spec_hooks *make_oci_runtime_spec_hooks(yajl_val tree, struct parser - } - { - yajl_val tmp = get_val(tree, "poststart", yajl_t_array); -- if (tmp && YAJL_GET_ARRAY(tmp)) { -+ 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)); -@@ -47,7 +47,7 @@ oci_runtime_spec_hooks *make_oci_runtime_spec_hooks(yajl_val tree, struct parser - } - { - yajl_val tmp = get_val(tree, "poststop", yajl_t_array); -- if (tmp && YAJL_GET_ARRAY(tmp)) { -+ 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)); -@@ -76,32 +76,32 @@ oci_runtime_spec_hooks *make_oci_runtime_spec_hooks(yajl_val tree, struct parser - } - - void free_oci_runtime_spec_hooks(oci_runtime_spec_hooks *ptr) { -- if (!ptr) -+ if (ptr == NULL) - return; -- if (ptr->prestart) { -+ if (ptr->prestart != NULL) { - size_t i; - for (i = 0; i < ptr->prestart_len; i++) -- if (ptr->prestart[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) { -+ if (ptr->poststart != NULL) { - size_t i; - for (i = 0; i < ptr->poststart_len; i++) -- if (ptr->poststart[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) { -+ if (ptr->poststop != NULL) { - size_t i; - for (i = 0; i < ptr->poststop_len; i++) -- if (ptr->poststop[i]) { -+ if (ptr->poststop[i] != NULL) { - free_defs_hook(ptr->poststop[i]); - ptr->poststop[i] = NULL; - } -@@ -117,12 +117,12 @@ yajl_gen_status gen_oci_runtime_spec_hooks(yajl_gen g, oci_runtime_spec_hooks *p - 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 && ptr->prestart)) { -+ 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 && ptr->prestart) { -+ if (ptr != NULL && ptr->prestart != NULL) { - len = ptr->prestart_len; - } - if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) -@@ -141,12 +141,12 @@ yajl_gen_status gen_oci_runtime_spec_hooks(yajl_gen g, oci_runtime_spec_hooks *p - if (yajl_gen_status_ok != stat) - GEN_SET_ERROR_AND_RETURN(stat, err); - } -- if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr && ptr->poststart)) { -+ 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 && ptr->poststart) { -+ if (ptr != NULL && ptr->poststart != NULL) { - len = ptr->poststart_len; - } - if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) -@@ -165,12 +165,12 @@ yajl_gen_status gen_oci_runtime_spec_hooks(yajl_gen g, oci_runtime_spec_hooks *p - if (yajl_gen_status_ok != stat) - GEN_SET_ERROR_AND_RETURN(stat, err); - } -- if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr && ptr->poststop)) { -+ 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 && ptr->poststop) { -+ if (ptr != NULL && ptr->poststop != NULL) { - len = ptr->poststop_len; - } - if (!len && !(ctx->options & GEN_OPTIONS_SIMPLIFY)) --- -1.8.3.1 - diff --git a/0087-lxc-adapt-to-spec-of-oci-hook.patch b/0087-lxc-adapt-to-spec-of-oci-hook.patch deleted file mode 100644 index f226287..0000000 --- a/0087-lxc-adapt-to-spec-of-oci-hook.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 363ac4aedbf09ade3de55bca20692cf157860f92 Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Wed, 24 Apr 2019 22:22:55 +0800 -Subject: [PATCH 087/140] lxc: adapt to spec of oci hook - -poststart failed do not cause run failed - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 8cdccf1..a1d77eb 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4782,6 +4782,7 @@ static int run_oci_hooks(const char *name, const char *lxcpath, struct lxc_conf - struct oci_hook_conf work_conf = {0}; - size_t i; - int ret = 0; -+ int nret = 0; - char *rootpath; - - if (!lc) { -@@ -4811,9 +4812,9 @@ static int run_oci_hooks(const char *name, const char *lxcpath, struct lxc_conf - case OCI_HOOK_POSTSTART: - for (i = 0; i < lc->ocihooks->poststart_len; i++) { - work_conf.ocihook = lc->ocihooks->poststart[i]; -- ret = run_ocihook_script_argv(name, "lxc", &work_conf, lxcpath, rootpath); -- if (ret != 0) -- break; -+ nret = run_ocihook_script_argv(name, "lxc", &work_conf, lxcpath, rootpath); -+ if (nret != 0) -+ WARN("running poststart hook %d failed, ContainerId: %s", i, name); - } - break; - case OCI_HOOK_POSTSTOP: --- -1.8.3.1 - diff --git a/0088-fix-lxc-build-error.patch b/0088-fix-lxc-build-error.patch deleted file mode 100644 index f94b11b..0000000 --- a/0088-fix-lxc-build-error.patch +++ /dev/null @@ -1,29 +0,0 @@ -From c0efbe3c3aafaad6842d8a28cd06635bbb5a566c Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Thu, 25 Apr 2019 10:12:16 +0800 -Subject: [PATCH 088/140] fix lxc build error - -cause by invalid print format - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index a1d77eb..14d5d80 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4814,7 +4814,7 @@ static int run_oci_hooks(const char *name, const char *lxcpath, struct lxc_conf - 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 %d failed, ContainerId: %s", i, name); -+ WARN("running poststart hook %ld failed, ContainerId: %s", i, name); - } - break; - case OCI_HOOK_POSTSTOP: --- -1.8.3.1 - diff --git a/0089-lxc-add-get-container-processes-pids-func.patch b/0089-lxc-add-get-container-processes-pids-func.patch deleted file mode 100644 index 964f7ae..0000000 --- a/0089-lxc-add-get-container-processes-pids-func.patch +++ /dev/null @@ -1,177 +0,0 @@ -From e67bd0cb9f6228f5ff95e71ae3cb1332cb1ff851 Mon Sep 17 00:00:00 2001 -From: maoweiyong -Date: Tue, 23 Apr 2019 12:12:55 +0800 -Subject: [PATCH 089/140] lxc:add get container processes pids func - -Signed-off-by: maoweiyong ---- - src/lxc/lxccontainer.c | 18 ++++++++++++ - src/lxc/lxccontainer.h | 11 ++++++++ - src/lxc/start.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/start.h | 2 ++ - 4 files changed, 107 insertions(+) - -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 8a3724c..fa13e52 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -5212,6 +5212,23 @@ static bool do_lxcapi_clean_container_resource(struct lxc_container *c, pid_t pi - - 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 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) - { -@@ -5373,6 +5390,7 @@ static struct lxc_container *do_lxc_container_new(const char *name, const char * - c->set_start_timeout = lxcapi_set_start_timeout; - c->clean_container_resource = lxcapi_clean_container_resource; - c->add_terminal_fifos = lxcapi_add_terminal_fifo; -+ c->get_container_pids = lxcapi_get_container_pids; - /* isulad add end */ - return c; - -diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h -index c3368e4..608f815 100644 ---- a/src/lxc/lxccontainer.h -+++ b/src/lxc/lxccontainer.h -@@ -947,6 +947,17 @@ struct lxc_container { - * \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); - }; - - /*! -diff --git a/src/lxc/start.c b/src/lxc/start.c -index f1cd7fa..2b0d43e 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -2638,6 +2638,55 @@ on_error: - 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) -+ 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(handler); -+ 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: set env for clean resources */ - static int clean_resource_set_env(struct lxc_handler *handler) - { -@@ -2770,3 +2819,30 @@ out: - 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; -+ int retry_count = 0; -+ int max_retry = 10; -+ 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; -+} -+ -diff --git a/src/lxc/start.h b/src/lxc/start.h -index 0298991..20e667c 100644 ---- a/src/lxc/start.h -+++ b/src/lxc/start.h -@@ -188,5 +188,7 @@ extern int resolve_clone_flags(struct lxc_handler *handler); - /*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 --- -1.8.3.1 - diff --git a/0090-lxc-remove-unused-variable.patch b/0090-lxc-remove-unused-variable.patch deleted file mode 100644 index 9ffdd59..0000000 --- a/0090-lxc-remove-unused-variable.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 9d7bdd43ca5710e625f02b2dcc7b178071f4ae2b Mon Sep 17 00:00:00 2001 -From: maoweiyong -Date: Thu, 25 Apr 2019 21:21:12 +0800 -Subject: [PATCH 090/140] lxc: remove unused variable - -Signed-off-by: maoweiyong ---- - src/lxc/start.c | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 2b0d43e..3657d4e 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -2824,8 +2824,6 @@ int do_lxcapi_get_pids(char *name, char *lxcpath, struct lxc_conf *conf, pid_t * - { - int ret = 0; - struct lxc_handler *handler = NULL; -- int retry_count = 0; -- int max_retry = 10; - struct cgroup_ops *cg_ops = NULL; - - handler = lxc_init_pids_handler(name, lxcpath, conf); --- -1.8.3.1 - diff --git a/0092-lxc-add-output-error-when-create-unified-cgroup.patch b/0092-lxc-add-output-error-when-create-unified-cgroup.patch deleted file mode 100644 index ea2a75a..0000000 --- a/0092-lxc-add-output-error-when-create-unified-cgroup.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 3e1d32785539e016dbca1e69fdb3a8bf93299238 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 29 Apr 2019 04:13:52 -0400 -Subject: [PATCH 092/140] lxc: add output error when create unified cgroup - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index b1f56b0..2bf142f 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1132,7 +1132,7 @@ __cgfsng_ops static bool cgfsng_payload_destroy(struct cgroup_ops *ops, - return true; - } - --static bool cg_unified_create_cgroup(struct hierarchy *h, char *cgname) -+static bool cg_unified_create_cgroup(struct hierarchy *h, char *cgname, int errfd) - { - size_t i, parts_len; - char **it; -@@ -1187,6 +1187,9 @@ static bool cg_unified_create_cgroup(struct hierarchy *h, char *cgname) - if (ret < 0) { - SYSERROR("Could not enable \"%s\" controllers in the " - "unified cgroup \"%s\"", add_controllers, cgroup); -+ lxc_write_error_message(errfd, "%s:%d: Could not enable \"%s\" controllers in the " -+ "unified cgroup: \"%s\"", -+ __FILE__, __LINE__, add_controllers, strerror(errno)); - goto on_error; - } - } -@@ -1260,7 +1263,7 @@ static bool create_path_for_hierarchy(struct hierarchy *h, char *cgname, int err - return false; - } - -- return cg_unified_create_cgroup(h, cgname); -+ return cg_unified_create_cgroup(h, cgname, errfd); - } - - /* isulad: create hierarchies path, if fail, return the error */ --- -1.8.3.1 - diff --git a/0093-optimize-isulad_kit-operator.patch b/0093-optimize-isulad_kit-operator.patch deleted file mode 100644 index 10d5720..0000000 --- a/0093-optimize-isulad_kit-operator.patch +++ /dev/null @@ -1,424 +0,0 @@ -From eeaf0b1638d87626655577c5b1c1e32e3b3d10a0 Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Thu, 2 May 2019 11:23:50 +0800 -Subject: [PATCH 093/140] optimize isulad_kit operator - -parse group add start container - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/Makefile.am | 2 + - src/lxc/json/container_start_generate_config.c | 245 +++++++++++++++++++++++++ - src/lxc/json/container_start_generate_config.h | 43 +++++ - src/lxc/tools/lxc_start.c | 58 ++++++ - 4 files changed, 348 insertions(+) - create mode 100644 src/lxc/json/container_start_generate_config.c - create mode 100644 src/lxc/json/container_start_generate_config.h - -diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am -index 698f8f9..4ec2081 100644 ---- a/src/lxc/Makefile.am -+++ b/src/lxc/Makefile.am -@@ -45,6 +45,7 @@ noinst_HEADERS = attach.h \ - storage/storage_utils.h \ - json/defs.h \ - json/json_common.h \ -+ json/container_start_generate_config.h \ - json/oci_runtime_hooks.h \ - json/oci_runtime_spec.h \ - json/logger_json_file.h \ -@@ -152,6 +153,7 @@ liblxc_la_SOURCES = af_unix.c af_unix.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/container_start_generate_config.c json/container_start_generate_config.h \ - json/read-file.c json/read-file.h \ - $(LSM_SOURCES) - -diff --git a/src/lxc/json/container_start_generate_config.c b/src/lxc/json/container_start_generate_config.c -new file mode 100644 -index 0000000..5ec8311 ---- /dev/null -+++ b/src/lxc/json/container_start_generate_config.c -@@ -0,0 +1,245 @@ -+// Generated from start-generate-config.json. Do not edit! -+#ifndef _GNU_SOURCE -+#define _GNU_SOURCE -+#endif -+#include -+#include "read-file.h" -+#include "container_start_generate_config.h" -+ -+container_start_generate_config *make_container_start_generate_config(yajl_val tree, struct parser_context *ctx, parser_error *err) { -+ container_start_generate_config *ret = NULL; -+ *err = 0; -+ if (tree == NULL) -+ return ret; -+ ret = safe_malloc(sizeof(*ret)); -+ { -+ yajl_val val = get_val(tree, "uid", yajl_t_number); -+ if (val != NULL) { -+ int invalid = common_safe_uint(YAJL_GET_NUMBER(val), (unsigned int *)&ret->uid); -+ if (invalid) { -+ if (asprintf(err, "Invalid value '%s' with type 'UID' for key 'uid': %s", YAJL_GET_NUMBER(val), strerror(-invalid)) < 0) -+ *err = safe_strdup("error allocating memory"); -+ free_container_start_generate_config(ret); -+ return NULL; -+ } -+ } -+ } -+ { -+ yajl_val val = get_val(tree, "gid", yajl_t_number); -+ if (val != NULL) { -+ int invalid = common_safe_uint(YAJL_GET_NUMBER(val), (unsigned int *)&ret->gid); -+ if (invalid) { -+ if (asprintf(err, "Invalid value '%s' with type 'GID' for key 'gid': %s", YAJL_GET_NUMBER(val), strerror(-invalid)) < 0) -+ *err = safe_strdup("error allocating memory"); -+ free_container_start_generate_config(ret); -+ return NULL; -+ } -+ } -+ } -+ { -+ yajl_val tmp = get_val(tree, "additionalGids", yajl_t_array); -+ if (tmp != NULL && YAJL_GET_ARRAY(tmp) != NULL && YAJL_GET_ARRAY(tmp)->len > 0) { -+ size_t i; -+ ret->additional_gids_len = YAJL_GET_ARRAY(tmp)->len; -+ ret->additional_gids = safe_malloc((YAJL_GET_ARRAY(tmp)->len + 1) * sizeof(*ret->additional_gids)); -+ for (i = 0; i < YAJL_GET_ARRAY(tmp)->len; i++) { -+ yajl_val val = YAJL_GET_ARRAY(tmp)->values[i]; -+ if (val != NULL) { -+ int invalid = common_safe_uint(YAJL_GET_NUMBER(val), (unsigned int *)&ret->additional_gids[i]); -+ if (invalid) { -+ if (asprintf(err, "Invalid value '%s' with type 'GID' for key 'additionalGids': %s", YAJL_GET_NUMBER(val), strerror(-invalid)) < 0) -+ *err = safe_strdup("error allocating memory"); -+ free_container_start_generate_config(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], "uid") && -+ strcmp(tree->u.object.keys[i], "gid") && -+ strcmp(tree->u.object.keys[i], "additionalGids")) { -+ if (ctx->stderr > 0) -+ fprintf(ctx->stderr, "WARNING: unknown key found: %s\n", tree->u.object.keys[i]); -+ } -+ } -+ return ret; -+} -+ -+void free_container_start_generate_config(container_start_generate_config *ptr) { -+ if (ptr == NULL) -+ return; -+ free(ptr->additional_gids); -+ ptr->additional_gids = NULL; -+ free(ptr); -+} -+ -+yajl_gen_status gen_container_start_generate_config(yajl_gen g, container_start_generate_config *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->uid)) { -+ long long unsigned int num = 0; -+ stat = reformat_map_key(g, "uid", strlen("uid")); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (ptr != NULL && ptr->uid) { -+ num = (long long unsigned int)ptr->uid; -+ } -+ stat = reformat_uint(g, num); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) ||(ptr != NULL && ptr->gid)) { -+ long long unsigned int num = 0; -+ stat = reformat_map_key(g, "gid", strlen("gid")); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (ptr != NULL && ptr->gid) { -+ num = (long long unsigned int)ptr->gid; -+ } -+ stat = reformat_uint(g, num); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ } -+ if ((ctx->options & GEN_OPTIONS_ALLKEYVALUE) || (ptr != NULL && ptr->additional_gids != NULL)) { -+ size_t len = 0, i; -+ stat = reformat_map_key(g, "additionalGids", strlen("additionalGids")); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ if (ptr != NULL && ptr->additional_gids != NULL) { -+ len = ptr->additional_gids_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_uint(g, ptr->additional_gids[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); -+ } -+ stat = reformat_end_map(g); -+ if (yajl_gen_status_ok != stat) -+ GEN_SET_ERROR_AND_RETURN(stat, err); -+ return yajl_gen_status_ok; -+} -+ -+ -+container_start_generate_config *container_start_generate_config_parse_file(const char *filename, struct parser_context *ctx, parser_error *err) { -+ container_start_generate_config *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 = container_start_generate_config_parse_data(content, ctx, err); -+ free(content); -+ return ptr; -+} -+ -+container_start_generate_config *container_start_generate_config_parse_file_stream(FILE *stream, struct parser_context *ctx, parser_error *err) { -+ container_start_generate_config *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 = container_start_generate_config_parse_data(content, ctx, err); -+ free(content); -+ return ptr; -+} -+ -+container_start_generate_config *container_start_generate_config_parse_data(const char *jsondata, struct parser_context *ctx, parser_error *err) { -+ container_start_generate_config *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; -+ (void)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_container_start_generate_config(tree, ctx, err); -+ yajl_tree_free(tree); -+ return ptr; -+} -+char *container_start_generate_config_generate_json(container_start_generate_config *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; -+ (void)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_container_start_generate_config(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; -+ } -+ -+ 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/container_start_generate_config.h b/src/lxc/json/container_start_generate_config.h -new file mode 100644 -index 0000000..e1dcf56 ---- /dev/null -+++ b/src/lxc/json/container_start_generate_config.h -@@ -0,0 +1,43 @@ -+// Generated from start-generate-config.json. Do not edit! -+#ifndef CONTAINER_START_GENERATE_CONFIG_SCHEMA_H -+#define CONTAINER_START_GENERATE_CONFIG_SCHEMA_H -+ -+#include -+#include -+#include "json_common.h" -+#include "defs.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+typedef struct { -+ uid_t uid; -+ -+ gid_t gid; -+ -+ gid_t *additional_gids; -+ size_t additional_gids_len; -+ -+} -+container_start_generate_config; -+ -+void free_container_start_generate_config(container_start_generate_config *ptr); -+ -+container_start_generate_config *make_container_start_generate_config(yajl_val tree, struct parser_context *ctx, parser_error *err); -+ -+yajl_gen_status gen_container_start_generate_config(yajl_gen g, container_start_generate_config *ptr, struct parser_context *ctx, parser_error *err); -+ -+container_start_generate_config *container_start_generate_config_parse_file(const char *filename, struct parser_context *ctx, parser_error *err); -+ -+container_start_generate_config *container_start_generate_config_parse_file_stream(FILE *stream, struct parser_context *ctx, parser_error *err); -+ -+container_start_generate_config *container_start_generate_config_parse_data(const char *jsondata, struct parser_context *ctx, parser_error *err); -+ -+char *container_start_generate_config_generate_json(container_start_generate_config *ptr, struct parser_context *ctx, parser_error *err); -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c -index af63f58..4069204 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -50,6 +50,7 @@ - #include "confile.h" - #include "log.h" - #include "utils.h" -+#include "container_start_generate_config.h" - - lxc_log_define(lxc_start, lxc); - -@@ -213,6 +214,57 @@ static int ensure_path(char **confpath, const char *path) - return 0; - } - -+static int set_start_extral_configs(const char *lxcpath, const char *name, struct lxc_container *c) -+{ -+#define START_GENERATE_CONFIG "start_generate_config.json" -+ char fpath[PATH_MAX] = {0}; -+ parser_error jerr = NULL; -+ int ret = -1; -+ container_start_generate_config *start_conf = NULL; -+ struct lxc_conf *lconf = c->lxc_conf; -+ size_t i = 0; -+ -+ if (sprintf(fpath, "%s/%s/%s", lxcpath, name, START_GENERATE_CONFIG) < 0) { -+ ERROR("Sprintf config path failed"); -+ return -1; -+ } -+ if (!file_exists(fpath)) { -+ return 0; -+ } -+ start_conf = container_start_generate_config_parse_file(fpath, NULL, &jerr); -+ if (start_conf == NULL) { -+ ERROR("Parse start generate config file: %s failed", fpath); -+ goto out; -+ } -+ if (start_conf->uid != 0) { -+ lconf->init_uid = start_conf->uid; -+ } -+ if (start_conf->gid != 0) { -+ lconf->init_gid = start_conf->gid; -+ } -+ if (start_conf->additional_gids != NULL && start_conf->additional_gids_len > 0) { -+ gid_t *tmp; -+ tmp = realloc(lconf->init_groups, (lconf->init_groups_len + start_conf->additional_gids_len) * sizeof(gid_t)); -+ if (tmp == NULL) { -+ ERROR("Out of memory"); -+ goto out; -+ } -+ lconf->init_groups = tmp; -+ for (; i < start_conf->additional_gids_len; i++) { -+ tmp[lconf->init_groups_len] = start_conf->additional_gids[i]; -+ lconf->init_groups_len++; -+ } -+ } -+ -+ ret = 0; -+out: -+ free(jerr); -+ if (start_conf != NULL) { -+ free_container_start_generate_config(start_conf); -+ } -+ return ret; -+} -+ - int main(int argc, char *argv[]) - { - const char *lxcpath; -@@ -358,6 +410,12 @@ int main(int argc, char *argv[]) - } - } - -+ /* isulad: load extral config for start container */ -+ if (set_start_extral_configs(lxcpath, my_args.name, c) != 0) { -+ ERROR("Failed to load extral config for container"); -+ goto out; -+ } -+ - /* isulad: fifo used to monitor state of monitor process */ - if (my_args.exit_monitor_fifo != NULL) { - c->exit_fifo = strdup(my_args.exit_monitor_fifo); --- -1.8.3.1 - diff --git a/0094-exec-load-uid-gid-and-groups.patch b/0094-exec-load-uid-gid-and-groups.patch deleted file mode 100644 index 89d3b82..0000000 --- a/0094-exec-load-uid-gid-and-groups.patch +++ /dev/null @@ -1,197 +0,0 @@ -From 64febbef5f589ae93aebb1845a78e4379d5c584b Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Tue, 7 May 2019 12:55:03 +0800 -Subject: [PATCH 094/140] exec load uid gid and groups - -exec load uid gid and groups - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/lxccontainer.c | 69 +++++++++++++++++++++++++++++++++++++++++++++-- - src/lxc/tools/lxc_start.c | 58 --------------------------------------- - 2 files changed, 67 insertions(+), 60 deletions(-) - -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index fa13e52..e0c4de3 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -74,6 +74,7 @@ - #include "terminal.h" - #include "utils.h" - #include "version.h" -+#include "container_start_generate_config.h" - - /* major()/minor() */ - #ifdef MAJOR_IN_MKDEV -@@ -5252,6 +5253,65 @@ 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 int set_start_extral_configs(struct lxc_container *c) -+{ -+#define START_GENERATE_CONFIG "start_generate_config.json" -+ char fpath[PATH_MAX] = {0}; -+ parser_error jerr = NULL; -+ int ret = -1; -+ container_start_generate_config *start_conf = NULL; -+ struct lxc_conf *lconf = c->lxc_conf; -+ size_t i = 0; -+ -+ if (lconf == NULL) { -+ c->lxc_conf = malloc(sizeof(struct lxc_conf)); -+ lconf = c->lxc_conf; -+ if (lconf == NULL) { -+ fprintf(stderr, "Out of memory\n"); -+ return -1; -+ } -+ } -+ if (sprintf(fpath, "%s/%s/%s", c->config_path, c->name, START_GENERATE_CONFIG) < 0) { -+ fprintf(stderr, "Sprintf config path failed\n"); -+ return -1; -+ } -+ if (!file_exists(fpath)) { -+ return 0; -+ } -+ start_conf = container_start_generate_config_parse_file(fpath, NULL, &jerr); -+ if (start_conf == NULL) { -+ fprintf(stderr, "Parse start generate config file: %s failed", fpath); -+ goto out; -+ } -+ if (start_conf->uid != 0) { -+ lconf->init_uid = start_conf->uid; -+ } -+ if (start_conf->gid != 0) { -+ lconf->init_gid = start_conf->gid; -+ } -+ if (start_conf->additional_gids != NULL && start_conf->additional_gids_len > 0) { -+ gid_t *tmp; -+ tmp = realloc(lconf->init_groups, (lconf->init_groups_len + start_conf->additional_gids_len) * sizeof(gid_t)); -+ if (tmp == NULL) { -+ fprintf(stderr, "Out of memory"); -+ goto out; -+ } -+ lconf->init_groups = tmp; -+ for (; i < start_conf->additional_gids_len; i++) { -+ tmp[lconf->init_groups_len] = start_conf->additional_gids[i]; -+ lconf->init_groups_len++; -+ } -+ } -+ -+ ret = 0; -+out: -+ free(jerr); -+ if (start_conf != NULL) { -+ free_container_start_generate_config(start_conf); -+ } -+ return ret; -+} -+ - static struct lxc_container *do_lxc_container_new(const char *name, const char *configpath, bool load_config) - { - struct lxc_container *c; -@@ -5309,11 +5369,16 @@ static struct lxc_container *do_lxc_container_new(const char *name, const char * - goto err; - } - -- if (load_config) { -- if (file_exists(c->configfile) && !lxcapi_load_config(c, NULL)) { -+ 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; - } -+ /* isulad: load extral config for start container */ -+ if (set_start_extral_configs(c) != 0) { -+ fprintf(stderr, "Failed to load extral config for container: %s\n", name); -+ goto err; -+ } - } - - if (ongoing_create(c) == 2) { -diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c -index 4069204..af63f58 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -50,7 +50,6 @@ - #include "confile.h" - #include "log.h" - #include "utils.h" --#include "container_start_generate_config.h" - - lxc_log_define(lxc_start, lxc); - -@@ -214,57 +213,6 @@ static int ensure_path(char **confpath, const char *path) - return 0; - } - --static int set_start_extral_configs(const char *lxcpath, const char *name, struct lxc_container *c) --{ --#define START_GENERATE_CONFIG "start_generate_config.json" -- char fpath[PATH_MAX] = {0}; -- parser_error jerr = NULL; -- int ret = -1; -- container_start_generate_config *start_conf = NULL; -- struct lxc_conf *lconf = c->lxc_conf; -- size_t i = 0; -- -- if (sprintf(fpath, "%s/%s/%s", lxcpath, name, START_GENERATE_CONFIG) < 0) { -- ERROR("Sprintf config path failed"); -- return -1; -- } -- if (!file_exists(fpath)) { -- return 0; -- } -- start_conf = container_start_generate_config_parse_file(fpath, NULL, &jerr); -- if (start_conf == NULL) { -- ERROR("Parse start generate config file: %s failed", fpath); -- goto out; -- } -- if (start_conf->uid != 0) { -- lconf->init_uid = start_conf->uid; -- } -- if (start_conf->gid != 0) { -- lconf->init_gid = start_conf->gid; -- } -- if (start_conf->additional_gids != NULL && start_conf->additional_gids_len > 0) { -- gid_t *tmp; -- tmp = realloc(lconf->init_groups, (lconf->init_groups_len + start_conf->additional_gids_len) * sizeof(gid_t)); -- if (tmp == NULL) { -- ERROR("Out of memory"); -- goto out; -- } -- lconf->init_groups = tmp; -- for (; i < start_conf->additional_gids_len; i++) { -- tmp[lconf->init_groups_len] = start_conf->additional_gids[i]; -- lconf->init_groups_len++; -- } -- } -- -- ret = 0; --out: -- free(jerr); -- if (start_conf != NULL) { -- free_container_start_generate_config(start_conf); -- } -- return ret; --} -- - int main(int argc, char *argv[]) - { - const char *lxcpath; -@@ -410,12 +358,6 @@ int main(int argc, char *argv[]) - } - } - -- /* isulad: load extral config for start container */ -- if (set_start_extral_configs(lxcpath, my_args.name, c) != 0) { -- ERROR("Failed to load extral config for container"); -- goto out; -- } -- - /* isulad: fifo used to monitor state of monitor process */ - if (my_args.exit_monitor_fifo != NULL) { - c->exit_fifo = strdup(my_args.exit_monitor_fifo); --- -1.8.3.1 - diff --git a/0096-close-inherited-fd-in-hook-process.patch b/0096-close-inherited-fd-in-hook-process.patch deleted file mode 100644 index 847beed..0000000 --- a/0096-close-inherited-fd-in-hook-process.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 69556473f1e248be4ec79ccf069c65238ee9b8c1 Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Mon, 13 May 2019 16:45:50 +0800 -Subject: [PATCH 096/140] close inherited fd in hook process - -close inherited fd in hook process - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 0f227aa..6cf86a4 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4560,6 +4560,13 @@ static struct lxc_popen_FILE *lxc_popen_ocihook(char *commandpath, char **args, - - if (child_pid == 0) { - /* child */ -+ int inherit_fds[2] = { -+ pipe_msg[0], pipe_fds[1] -+ }; -+ if (lxc_check_inherited(NULL, true, inherit_fds, 2) != 0) { -+ SYSERROR("check inherited fd failed"); -+ exit(127); -+ } - - close(pipe_msg[1]); - if (pipe_msg[0] != STDIN_FILENO) --- -1.8.3.1 - diff --git a/0097-lxc-report-error-when-fork-exec-error-for-hooks.patch b/0097-lxc-report-error-when-fork-exec-error-for-hooks.patch deleted file mode 100644 index 360670a..0000000 --- a/0097-lxc-report-error-when-fork-exec-error-for-hooks.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 5afd4ebc85644ab8e1443ad80ba9bd311fe5f056 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Wed, 15 May 2019 00:53:49 -0400 -Subject: [PATCH 097/140] lxc: report error when fork/exec error for hooks - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 21 +++++++++------------ - 1 file changed, 9 insertions(+), 12 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 6cf86a4..341fdab 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4559,21 +4559,12 @@ static struct lxc_popen_FILE *lxc_popen_ocihook(char *commandpath, char **args, - goto on_error; - - if (child_pid == 0) { -- /* child */ -- int inherit_fds[2] = { -- pipe_msg[0], pipe_fds[1] -- }; -- if (lxc_check_inherited(NULL, true, inherit_fds, 2) != 0) { -- SYSERROR("check inherited fd failed"); -- exit(127); -- } -- - 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) { -- SYSERROR("Failed to remove FD_CLOEXEC from fd."); -+ fprintf(stderr, "Failed to remove FD_CLOEXEC from fd."); - exit(127); - } - } -@@ -4600,6 +4591,11 @@ static struct lxc_popen_FILE *lxc_popen_ocihook(char *commandpath, char **args, - 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 -@@ -4615,6 +4611,7 @@ static struct lxc_popen_FILE *lxc_popen_ocihook(char *commandpath, char **args, - execvpe(commandpath, args, envs); - else - execvp(commandpath, args); -+ fprintf(stderr, "fork/exec %s: %s", commandpath, strerror(errno)); - exit(127); - } - -@@ -4764,8 +4761,8 @@ static int run_ocihook_buffer(struct oci_hook_conf *oconf, char *inmsg) - 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(conf->errfd, "%s:%d: running %s hook caused \"error running hook: exit status %d, output:%s\".", -+ ERROR("Script exited with status %d. output: %s", WEXITSTATUS(ret), output); -+ lxc_write_error_message(conf->errfd, "%s:%d: running %s hook caused \"error running hook: exit status %d, output: %s\".", - __FILE__, __LINE__, - (conf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[conf->which], - WEXITSTATUS(ret), output); --- -1.8.3.1 - diff --git a/0098-lxc-make-dev-bind-mount-from-host-tmpfs-for-system-c.patch b/0098-lxc-make-dev-bind-mount-from-host-tmpfs-for-system-c.patch deleted file mode 100644 index 20d0de6..0000000 --- a/0098-lxc-make-dev-bind-mount-from-host-tmpfs-for-system-c.patch +++ /dev/null @@ -1,67 +0,0 @@ -From 5fd25f9a207a2c401e9bae990a96ec9b9056a2df Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Wed, 15 May 2019 12:42:08 +0800 -Subject: [PATCH 098/140] lxc: make /dev bind mount from host tmpfs for system - container - -reason:make /dev bind mount from host tmpfs for system container - -Signed-off-by: zhangsong -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 24 ++++++++++++++++-------- - 1 file changed, 16 insertions(+), 8 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 341fdab..3780966 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -1122,7 +1122,7 @@ on_error: - * error, log it but don't fail yet. - */ - static int mount_autodev(const char *name, const struct lxc_rootfs *rootfs, -- const char *lxcpath) -+ const char *lxcpath, char *systemd) - { - int ret; - size_t clen; -@@ -1147,13 +1147,21 @@ static int mount_autodev(const char *name, const struct lxc_rootfs *rootfs, - goto reset_umask; - } - -- ret = safe_mount("none", path, "tmpfs", 0, "size=500000,mode=755", -+ 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, "size=500000,mode=755", - 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); -+ if (ret < 0) { -+ SYSERROR("Failed to mount tmpfs on \"%s\"", path); -+ goto reset_umask; -+ } -+ TRACE("Mounted tmpfs on \"%s\"", path); -+ } - - ret = snprintf(path, clen, "%s/dev/pts", rootfs->path ? rootfs->mount : ""); - if (ret < 0 || (size_t)ret >= clen) { -@@ -4130,7 +4138,7 @@ int lxc_setup(struct lxc_handler *handler) - } - - if (lxc_conf->autodev > 0) { -- ret = mount_autodev(name, &lxc_conf->rootfs, lxcpath); -+ ret = mount_autodev(name, &lxc_conf->rootfs, lxcpath, lxc_conf->systemd); - if (ret < 0) { - ERROR("Failed to mount \"/dev\""); - goto on_error; --- -1.8.3.1 - diff --git a/0099-terminal-do-not-close-the-master-fd-of-pty.patch b/0099-terminal-do-not-close-the-master-fd-of-pty.patch deleted file mode 100644 index a2e05f3..0000000 --- a/0099-terminal-do-not-close-the-master-fd-of-pty.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 3d4a2fd9e5db67d6771ebd3268b05d7e461d3c74 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Tue, 21 May 2019 04:53:16 -0400 -Subject: [PATCH 099/140] terminal: do not close the master fd of pty - -Signed-off-by: LiFeng ---- - src/lxc/terminal.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index dfce92e..88653b4 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -595,6 +595,10 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data, - 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) { - if (terminal->tty_state) { - lxc_terminal_signal_fini(terminal->tty_state); --- -1.8.3.1 - diff --git a/0100-start-add-check-save-pid-info-file.patch b/0100-start-add-check-save-pid-info-file.patch deleted file mode 100644 index 9aa93bc..0000000 --- a/0100-start-add-check-save-pid-info-file.patch +++ /dev/null @@ -1,139 +0,0 @@ -From 33221d0ca431710cc1f83502d4223f1848c88ae9 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Wed, 22 May 2019 23:00:17 -0400 -Subject: [PATCH 100/140] start: add check save pid info file - -Signed-off-by: LiFeng ---- - src/lxc/start.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++-------- - src/lxc/utils.c | 2 +- - src/lxc/utils.h | 1 + - 3 files changed, 64 insertions(+), 11 deletions(-) - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 3657d4e..4541793 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1850,14 +1850,10 @@ static inline int do_share_ns(void *arg) - return 0; - } - --/* isuald: save pid/ppid info */ --static int lxc_save_container_info(char *filename, pid_t pid) -+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_t p_pid = 0; -- unsigned long long start_at = 0; -- unsigned long long p_start_at = 0; - - pid_fp = fopen(filename, "w"); - if (pid_fp == NULL) { -@@ -1866,11 +1862,6 @@ static int lxc_save_container_info(char *filename, pid_t pid) - goto out; - } - -- start_at = lxc_get_process_startat(pid); -- -- p_pid = getpid(); -- p_start_at = lxc_get_process_startat(p_pid); -- - 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; -@@ -1883,6 +1874,67 @@ out: - 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 < 0) { -+ 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; -+} -+ - /* 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 -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index fd6075f..dc0e6c5 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -1909,7 +1909,7 @@ set_env: - - - /* isulad: read file to buffer */ --static int lxc_file2str(const char *filename, char ret[], int cap) -+int lxc_file2str(const char *filename, char ret[], int cap) - { - int fd, num_read; - -diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 20407af..4410ff2 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -323,5 +323,6 @@ extern void lxc_write_error_message(int errfd, const char *format, ...); - extern bool lxc_process_alive(pid_t pid, unsigned long long start_time); - - extern bool is_non_negative_num(const char *s); -+extern int lxc_file2str(const char *filename, char ret[], int cap); - - #endif /* __LXC_UTILS_H */ --- -1.8.3.1 - diff --git a/0101-lxc-fix-code-error.patch b/0101-lxc-fix-code-error.patch deleted file mode 100644 index 100a42b..0000000 --- a/0101-lxc-fix-code-error.patch +++ /dev/null @@ -1,8983 +0,0 @@ -From f0f4a3317205ff6d0d9dcad3445b9e2947a082e1 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 3 Jun 2019 05:14:46 -0400 -Subject: [PATCH 101/140] lxc: fix code error - -Signed-off-by: LiFeng ---- - src/lxc/af_unix.c | 28 +- - src/lxc/cgroups/cgfsng.c | 263 ++++++------ - src/lxc/conf.c | 575 ++++++++++++++------------ - src/lxc/conf.h | 28 +- - src/lxc/confile.c | 897 ++++++++++++++++++++-------------------- - src/lxc/confile_utils.c | 42 +- - src/lxc/json/logger_json_file.c | 422 +++++++++---------- - src/lxc/json/read-file.c | 139 +++---- - src/lxc/log.c | 48 +-- - src/lxc/lxccontainer.c | 239 ++++++----- - src/lxc/mainloop.c | 8 +- - src/lxc/path.c | 584 +++++++++++++++----------- - src/lxc/path.h | 18 +- - src/lxc/start.c | 194 ++++----- - src/lxc/storage/block.c | 3 +- - src/lxc/terminal.c | 129 +++--- - src/lxc/utils.c | 159 ++++--- - src/lxc/utils.h | 11 +- - 18 files changed, 2019 insertions(+), 1768 deletions(-) - -diff --git a/src/lxc/af_unix.c b/src/lxc/af_unix.c -index 24500a8..4c45946 100644 ---- a/src/lxc/af_unix.c -+++ b/src/lxc/af_unix.c -@@ -47,7 +47,7 @@ - lxc_log_define(af_unix, lxc); - - static ssize_t lxc_abstract_unix_set_sockaddr(struct sockaddr_un *addr, -- const char *path) -+ const char *path) - { - size_t len; - -@@ -96,7 +96,7 @@ int lxc_abstract_unix_open(const char *path, int type, int flags) - } - - ret = bind(fd, (struct sockaddr *)&addr, -- offsetof(struct sockaddr_un, sun_path) + len + 1); -+ offsetof(struct sockaddr_un, sun_path) + len + 1); - if (ret < 0) { - int saved_errno = errno; - close(fd); -@@ -141,7 +141,7 @@ int lxc_abstract_unix_connect(const char *path) - } - - ret = connect(fd, (struct sockaddr *)&addr, -- offsetof(struct sockaddr_un, sun_path) + len + 1); -+ offsetof(struct sockaddr_un, sun_path) + len + 1); - if (ret < 0) { - int saved_errno = errno; - close(fd); -@@ -153,7 +153,7 @@ int lxc_abstract_unix_connect(const char *path) - } - - int lxc_abstract_unix_send_fds(int fd, int *sendfds, int num_sendfds, -- void *data, size_t size) -+ void *data, size_t size) - { - int ret; - struct msghdr msg; -@@ -196,14 +196,14 @@ int lxc_abstract_unix_send_fds(int fd, int *sendfds, int num_sendfds, - - /* isulad: add wait timeout Microseconds*/ - int lxc_abstract_unix_recv_fds_timeout(int fd, int *recvfds, int num_recvfds, -- void *data, size_t size, unsigned int timeout) -+ void *data, size_t size, unsigned int timeout) - { - int ret; - struct msghdr msg; - struct iovec iov; - struct cmsghdr *cmsg = NULL; - char buf[1] = {0}; -- char *cmsgbuf; -+ char *cmsgbuf = NULL; - size_t cmsgbufsize = CMSG_SPACE(num_recvfds * sizeof(int)); - struct timeval out; - -@@ -229,10 +229,10 @@ int lxc_abstract_unix_recv_fds_timeout(int fd, int *recvfds, int num_recvfds, - out.tv_sec = timeout / 1000000; - out.tv_usec = timeout % 1000000; - ret = setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, -- (const void *)&out, sizeof(out)); -+ (const void *)&out, sizeof(out)); - if (ret < 0) { - ERROR("Failed to set %u timeout on containter " -- "state socket", timeout); -+ "state socket", timeout); - goto out; - } - } -@@ -245,7 +245,7 @@ int lxc_abstract_unix_recv_fds_timeout(int fd, int *recvfds, int num_recvfds, - - memset(recvfds, -1, num_recvfds * sizeof(int)); - if (cmsg && cmsg->cmsg_len == CMSG_LEN(num_recvfds * sizeof(int)) && -- cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) -+ cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) - memcpy(recvfds, CMSG_DATA(cmsg), num_recvfds * sizeof(int)); - - out: -@@ -254,7 +254,7 @@ out: - } - - int lxc_abstract_unix_recv_fds(int fd, int *recvfds, int num_recvfds, -- void *data, size_t size) -+ void *data, size_t size) - { - return lxc_abstract_unix_recv_fds_timeout(fd, recvfds, num_recvfds, data, size, 0); - } -@@ -265,7 +265,7 @@ int lxc_abstract_unix_send_credential(int fd, void *data, size_t size) - struct iovec iov; - struct cmsghdr *cmsg; - struct ucred cred = { -- .pid = lxc_raw_getpid(), .uid = getuid(), .gid = getgid(), -+ .pid = lxc_raw_getpid(), .uid = getuid(), .gid = getgid(), - }; - char cmsgbuf[CMSG_SPACE(sizeof(cred))] = {0}; - char buf[1] = {0}; -@@ -317,11 +317,11 @@ int lxc_abstract_unix_rcv_credential(int fd, void *data, size_t size) - cmsg = CMSG_FIRSTHDR(&msg); - - if (cmsg && cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred)) && -- cmsg->cmsg_level == SOL_SOCKET && -- cmsg->cmsg_type == SCM_CREDENTIALS) { -+ cmsg->cmsg_level == SOL_SOCKET && -+ cmsg->cmsg_type == SCM_CREDENTIALS) { - memcpy(&cred, CMSG_DATA(cmsg), sizeof(cred)); - if (cred.uid && -- (cred.uid != getuid() || cred.gid != getgid())) { -+ (cred.uid != getuid() || cred.gid != getgid())) { - INFO("Message denied for '%d/%d'", cred.uid, cred.gid); - errno = EACCES; - return -1; -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index eee7ed6..67c7a0e 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -149,7 +149,7 @@ static char *cg_legacy_must_prefix_named(char *entry) - * The last entry will always be NULL. - */ - static void must_append_controller(char **klist, char **nlist, char ***clist, -- char *entry) -+ char *entry) - { - int newentry; - char *copy; -@@ -190,7 +190,7 @@ struct hierarchy *get_hierarchy(struct cgroup_ops *ops, const char *controller) - if (!controller) { - /* This is the empty unified hierarchy. */ - if (ops->hierarchies[i]->controllers && -- !ops->hierarchies[i]->controllers[0]) -+ !ops->hierarchies[i]->controllers[0]) - return ops->hierarchies[i]; - - continue; -@@ -591,7 +591,7 @@ static bool cg_legacy_handle_cpuset_hierarchy(struct hierarchy *h, char *cgname) - } - - clonechildrenpath = -- must_make_path(cgpath, "cgroup.clone_children", NULL); -+ must_make_path(cgpath, "cgroup.clone_children", NULL); - /* unified hierarchy doesn't have clone_children */ - if (!file_exists(clonechildrenpath)) { - free(clonechildrenpath); -@@ -722,7 +722,7 @@ static bool all_controllers_found(struct cgroup_ops *ops) - * be /sys/fs/cgroup/controller-list - */ - static char **cg_hybrid_get_controllers(char **klist, char **nlist, char *line, -- int type) -+ int type) - { - /* The fourth field is /sys/fs/cgroup/comma-delimited-controller-list - * for legacy hierarchies. -@@ -809,7 +809,7 @@ static char **cg_unified_get_controllers(const char *file) - } - - static struct hierarchy *add_hierarchy(struct hierarchy ***h, char **clist, char *mountpoint, -- char *container_base_path, int type) -+ char *container_base_path, int type) - { - struct hierarchy *new; - int newentry; -@@ -903,7 +903,7 @@ static bool controller_in_clist(char *cgline, char *c) - * @controller. - */ - static char *cg_hybrid_get_current_cgroup(char *basecginfo, char *controller, -- int type) -+ int type) - { - char *p = basecginfo; - -@@ -1023,7 +1023,7 @@ static void lxc_cgfsng_print_hierarchies(struct cgroup_ops *ops) - } - - static void lxc_cgfsng_print_basecg_debuginfo(char *basecginfo, char **klist, -- char **nlist) -+ char **nlist) - { - int k; - char **it; -@@ -1039,7 +1039,7 @@ static void lxc_cgfsng_print_basecg_debuginfo(char *basecginfo, char **klist, - } - - static int cgroup_rmdir(struct hierarchy **hierarchies, -- const char *container_cgroup) -+ const char *container_cgroup) - { - int i; - -@@ -1085,14 +1085,14 @@ static int cgroup_rmdir_wrapper(void *data) - ret = setresgid(nsgid, nsgid, nsgid); - if (ret < 0) { - SYSERROR("Failed to setresgid(%d, %d, %d)", (int)nsgid, -- (int)nsgid, (int)nsgid); -+ (int)nsgid, (int)nsgid); - return -1; - } - - ret = setresuid(nsuid, nsuid, nsuid); - if (ret < 0) { - SYSERROR("Failed to setresuid(%d, %d, %d)", (int)nsuid, -- (int)nsuid, (int)nsuid); -+ (int)nsuid, (int)nsuid); - return -1; - } - -@@ -1107,7 +1107,7 @@ static int cgroup_rmdir_wrapper(void *data) - - /* isulad: fix return bool instead of void*/ - __cgfsng_ops static bool cgfsng_payload_destroy(struct cgroup_ops *ops, -- struct lxc_handler *handler) -+ struct lxc_handler *handler) - { - int ret; - struct generic_userns_exec_data wrap; -@@ -1121,7 +1121,7 @@ __cgfsng_ops static bool cgfsng_payload_destroy(struct cgroup_ops *ops, - - if (handler->conf && !lxc_list_empty(&handler->conf->id_map)) - ret = userns_exec_1(handler->conf, cgroup_rmdir_wrapper, &wrap, -- "cgroup_rmdir_wrapper"); -+ "cgroup_rmdir_wrapper"); - else - ret = cgroup_rmdir(ops->hierarchies, ops->container_cgroup); - if (ret < 0) { -@@ -1186,10 +1186,10 @@ static bool cg_unified_create_cgroup(struct hierarchy *h, char *cgname, int errf - free(target); - if (ret < 0) { - SYSERROR("Could not enable \"%s\" controllers in the " -- "unified cgroup \"%s\"", add_controllers, cgroup); -+ "unified cgroup \"%s\"", add_controllers, cgroup); - lxc_write_error_message(errfd, "%s:%d: Could not enable \"%s\" controllers in the " -- "unified cgroup: \"%s\"", -- __FILE__, __LINE__, add_controllers, strerror(errno)); -+ "unified cgroup: \"%s\"", -+ __FILE__, __LINE__, add_controllers, strerror(errno)); - goto on_error; - } - } -@@ -1248,7 +1248,7 @@ static bool create_path_for_hierarchy(struct hierarchy *h, char *cgname, int err - if (file_exists(h->container_full_path)) { // it must not already exist - ERROR("Cgroup path \"%s\" already exist.", h->container_full_path); - lxc_write_error_message(errfd, "%s:%d: Cgroup path \"%s\" already exist.", -- __FILE__, __LINE__, h->container_full_path); -+ __FILE__, __LINE__, h->container_full_path); - return false; - } - -@@ -1268,7 +1268,7 @@ static bool create_path_for_hierarchy(struct hierarchy *h, char *cgname, int err - - /* isulad: create hierarchies path, if fail, return the error */ - __cgfsng_ops static bool cgfsng_payload_create(struct cgroup_ops *ops, -- struct lxc_handler *handler) -+ struct lxc_handler *handler) - { - int i; - char *container_cgroup = ops->container_cgroup; -@@ -1302,7 +1302,7 @@ __cgfsng_ops static bool cgfsng_payload_enter(struct cgroup_ops *ops, pid_t pid) - char *fullpath; - - fullpath = must_make_path(ops->hierarchies[i]->container_full_path, -- "cgroup.procs", NULL); -+ "cgroup.procs", NULL); - ret = lxc_write_to_file(fullpath, pidstr, len, false, 0666); - if (ret != 0) { - SYSERROR("Failed to enter cgroup \"%s\"", fullpath); -@@ -1316,7 +1316,7 @@ __cgfsng_ops static bool cgfsng_payload_enter(struct cgroup_ops *ops, pid_t pid) - } - - static int chowmod(char *path, uid_t chown_uid, gid_t chown_gid, -- mode_t chmod_mode) -+ mode_t chmod_mode) - { - int ret; - -@@ -1353,14 +1353,14 @@ static int chown_cgroup_wrapper(void *data) - ret = setresgid(nsgid, nsgid, nsgid); - if (ret < 0) { - SYSERROR("Failed to setresgid(%d, %d, %d)", -- (int)nsgid, (int)nsgid, (int)nsgid); -+ (int)nsgid, (int)nsgid, (int)nsgid); - return -1; - } - - ret = setresuid(nsuid, nsuid, nsuid); - if (ret < 0) { - SYSERROR("Failed to setresuid(%d, %d, %d)", -- (int)nsuid, (int)nsuid, (int)nsuid); -+ (int)nsuid, (int)nsuid, (int)nsuid); - return -1; - } - -@@ -1415,7 +1415,7 @@ static int chown_cgroup_wrapper(void *data) - } - - __cgfsng_ops static bool cgfsng_chown(struct cgroup_ops *ops, -- struct lxc_conf *conf) -+ struct lxc_conf *conf) - { - struct generic_userns_exec_data wrap; - -@@ -1428,7 +1428,7 @@ __cgfsng_ops static bool cgfsng_chown(struct cgroup_ops *ops, - wrap.conf = conf; - - if (userns_exec_1(conf, chown_cgroup_wrapper, &wrap, -- "chown_cgroup_wrapper") < 0) { -+ "chown_cgroup_wrapper") < 0) { - ERROR("Error requesting cgroup chown in new user namespace"); - return false; - } -@@ -1450,8 +1450,8 @@ static bool cg_mount_needs_subdirs(int type) - * control/the/cg/path. - */ - static int cg_legacy_mount_controllers(int type, struct hierarchy *h, -- char *controllerpath, char *cgpath, -- const char *container_cgroup) -+ char *controllerpath, char *cgpath, -+ const char *container_cgroup) - { - int ret, remount_flags; - char *sourcepath; -@@ -1461,16 +1461,16 @@ static int cg_legacy_mount_controllers(int type, struct hierarchy *h, - ret = mount(controllerpath, controllerpath, "cgroup", MS_BIND, NULL); - if (ret < 0) { - SYSERROR("Failed to bind mount \"%s\" onto \"%s\"", -- controllerpath, controllerpath); -+ controllerpath, controllerpath); - return -1; - } - - remount_flags = add_required_remount_flags(controllerpath, -- controllerpath, -- flags | MS_REMOUNT); -+ controllerpath, -+ flags | MS_REMOUNT); - ret = mount(controllerpath, controllerpath, "cgroup", -- remount_flags | MS_REMOUNT | MS_BIND | MS_RDONLY, -- NULL); -+ remount_flags | MS_REMOUNT | MS_BIND | MS_RDONLY, -+ NULL); - if (ret < 0) { - SYSERROR("Failed to remount \"%s\" ro", controllerpath); - return -1; -@@ -1480,7 +1480,7 @@ static int cg_legacy_mount_controllers(int type, struct hierarchy *h, - } - - sourcepath = must_make_path(h->mountpoint, h->container_base_path, -- container_cgroup, NULL); -+ container_cgroup, NULL); - if (type == LXC_AUTO_CGROUP_RO) - flags |= MS_RDONLY; - -@@ -1494,7 +1494,7 @@ static int cg_legacy_mount_controllers(int type, struct hierarchy *h, - - if (flags & MS_RDONLY) { - remount_flags = add_required_remount_flags(sourcepath, cgpath, -- flags | MS_REMOUNT); -+ flags | MS_REMOUNT); - ret = mount(sourcepath, cgpath, "cgroup", remount_flags, NULL); - if (ret < 0) { - SYSERROR("Failed to remount \"%s\" ro", cgpath); -@@ -1516,26 +1516,26 @@ static int cg_legacy_mount_controllers(int type, struct hierarchy *h, - * cgroups for the LXC_AUTO_CGROUP_FULL option. - */ - static int __cg_mount_direct(int type, struct hierarchy *h, -- const char *controllerpath) -+ const char *controllerpath) - { -- int ret; -- char *controllers = NULL; -- char *fstype = "cgroup2"; -- unsigned long flags = 0; -+ int ret; -+ char *controllers = NULL; -+ char *fstype = "cgroup2"; -+ unsigned long flags = 0; - -- flags |= MS_NOSUID; -- flags |= MS_NOEXEC; -- flags |= MS_NODEV; -- flags |= MS_RELATIME; -+ flags |= MS_NOSUID; -+ flags |= MS_NOEXEC; -+ flags |= MS_NODEV; -+ flags |= MS_RELATIME; - -- if (type == LXC_AUTO_CGROUP_RO || type == LXC_AUTO_CGROUP_FULL_RO) -- flags |= MS_RDONLY; -+ if (type == LXC_AUTO_CGROUP_RO || type == LXC_AUTO_CGROUP_FULL_RO) -+ flags |= MS_RDONLY; - -- if (h->version != CGROUP2_SUPER_MAGIC) { -- controllers = lxc_string_join(",", (const char **)h->controllers, false); -- if (!controllers) -- return -ENOMEM; -- fstype = "cgroup"; -+ if (h->version != CGROUP2_SUPER_MAGIC) { -+ controllers = lxc_string_join(",", (const char **)h->controllers, false); -+ if (!controllers) -+ return -ENOMEM; -+ fstype = "cgroup"; - } - - ret = mount("cgroup", controllerpath, fstype, flags, controllers); -@@ -1550,13 +1550,13 @@ static int __cg_mount_direct(int type, struct hierarchy *h, - } - - static inline int cg_mount_in_cgroup_namespace(int type, struct hierarchy *h, -- const char *controllerpath) -+ const char *controllerpath) - { - return __cg_mount_direct(type, h, controllerpath); - } - - static inline int cg_mount_cgroup_full(int type, struct hierarchy *h, -- const char *controllerpath) -+ const char *controllerpath) - { - if (type < LXC_AUTO_CGROUP_FULL_RO || type > LXC_AUTO_CGROUP_FULL_MIXED) - return 0; -@@ -1565,8 +1565,8 @@ static inline int cg_mount_cgroup_full(int type, struct hierarchy *h, - } - - __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, -- struct lxc_handler *handler, -- const char *root, int type) -+ struct lxc_handler *handler, -+ const char *root, int type) - { - int i, ret; - char *tmpfspath = NULL; -@@ -1583,7 +1583,7 @@ __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 -@@ -1606,13 +1606,14 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - goto on_error; - } - ret = safe_mount(NULL, tmpfspath, "tmpfs", -- MS_NOSUID | MS_NODEV | MS_NOEXEC | MS_RELATIME, -- "size=10240k,mode=755", root); -+ 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, *path2; -+ char *controllerpath = NULL; -+ char *path2 = NULL; - struct hierarchy *h = ops->hierarchies[i]; - char *controller = strrchr(h->mountpoint, '/'); - -@@ -1676,7 +1677,7 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - } - - ret = cg_legacy_mount_controllers(type, h, controllerpath, -- path2, ops->container_cgroup); -+ path2, ops->container_cgroup); - free(controllerpath); - free(path2); - if (ret < 0) -@@ -1685,7 +1686,7 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - - // isulad: symlink subcgroup - if (merged) { -- char **mc; -+ char **mc = NULL; - for (mc = merged; *mc; mc++) { - char *token; - char *copy = must_copy_string(*mc); -@@ -1710,44 +1711,44 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - // 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); -+ 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; -- } -- } -+ // 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); -- } -+ if (systemdpath != NULL) { -+ free(systemdpath); -+ } -+ if (unifiedpath != NULL) { -+ free(unifiedpath); -+ } - lxc_free_array((void **)merged, free); - return retval; - } -@@ -1767,7 +1768,7 @@ static int recursive_count_nrtasks(char *dirname) - struct stat mystat; - - if (!strcmp(direntp->d_name, ".") || -- !strcmp(direntp->d_name, "..")) -+ !strcmp(direntp->d_name, "..")) - continue; - - path = must_make_path(dirname, direntp->d_name, NULL); -@@ -1779,7 +1780,7 @@ static int recursive_count_nrtasks(char *dirname) - goto next; - - count += recursive_count_nrtasks(path); -- next: -+next: - free(path); - } - -@@ -1821,8 +1822,8 @@ __cgfsng_ops static bool cgfsng_escape(const struct cgroup_ops *ops) - char *fullpath; - - fullpath = must_make_path(ops->hierarchies[i]->mountpoint, -- ops->hierarchies[i]->container_base_path, -- "cgroup.procs", NULL); -+ ops->hierarchies[i]->container_base_path, -+ "cgroup.procs", NULL); - ret = lxc_write_to_file(fullpath, "0", 2, false, 0666); - if (ret != 0) { - SYSERROR("Failed to escape to cgroup \"%s\"", fullpath); -@@ -1885,7 +1886,7 @@ __cgfsng_ops static bool cgfsng_unfreeze(struct cgroup_ops *ops) - } - - __cgfsng_ops static const char *cgfsng_get_cgroup(struct cgroup_ops *ops, -- const char *controller, bool skip_mount) -+ const char *controller, bool skip_mount) - { - struct hierarchy *h; - -@@ -1905,8 +1906,8 @@ __cgfsng_ops static const char *cgfsng_get_cgroup(struct cgroup_ops *ops, - * which must be freed by the caller. - */ - static inline char *build_full_cgpath_from_monitorpath(struct hierarchy *h, -- const char *inpath, -- const char *filename) -+ const char *inpath, -+ const char *filename) - { - return must_make_path(h->mountpoint, inpath, filename, NULL); - } -@@ -1921,8 +1922,8 @@ static inline char *build_full_cgpath_from_monitorpath(struct hierarchy *h, - * cgroup for the attaching process. - */ - static int __cg_unified_attach(const struct hierarchy *h, const char *name, -- const char *lxcpath, const char *pidstr, -- size_t pidstr_len, const char *controller) -+ const char *lxcpath, const char *pidstr, -+ size_t pidstr_len, const char *controller) - { - int ret; - size_t len; -@@ -1952,7 +1953,7 @@ static int __cg_unified_attach(const struct hierarchy *h, const char *name, - do { - if (idx) - ret = snprintf(full_path, len + 1, "%s/lxc-%d", -- base_path, idx); -+ base_path, idx); - else - ret = snprintf(full_path, len + 1, "%s/lxc", base_path); - if (ret < 0 || (size_t)ret >= len + 1) -@@ -1987,7 +1988,7 @@ on_error: - } - - __cgfsng_ops static bool cgfsng_attach(struct cgroup_ops *ops, const char *name, -- const char *lxcpath, pid_t pid) -+ const char *lxcpath, pid_t pid) - { - int i, len, ret; - char pidstr[INTTYPE_TO_STRLEN(pid_t)]; -@@ -2003,7 +2004,7 @@ __cgfsng_ops static bool cgfsng_attach(struct cgroup_ops *ops, const char *name, - - if (h->version == CGROUP2_SUPER_MAGIC) { - ret = __cg_unified_attach(h, name, lxcpath, pidstr, len, -- h->controllers[0]); -+ h->controllers[0]); - if (ret < 0) - return false; - -@@ -2034,8 +2035,8 @@ __cgfsng_ops static bool cgfsng_attach(struct cgroup_ops *ops, const char *name, - * commands API for the cgroup path. - */ - __cgfsng_ops static int cgfsng_get(struct cgroup_ops *ops, const char *filename, -- char *value, size_t len, const char *name, -- const char *lxcpath) -+ char *value, size_t len, const char *name, -+ const char *lxcpath) - { - int ret = -1; - size_t controller_len; -@@ -2073,8 +2074,8 @@ __cgfsng_ops static int cgfsng_get(struct cgroup_ops *ops, const char *filename, - * commands API for the cgroup path. - */ - __cgfsng_ops static int cgfsng_set(struct cgroup_ops *ops, -- const char *filename, const char *value, -- const char *name, const char *lxcpath) -+ const char *filename, const char *value, -+ const char *name, const char *lxcpath) - { - int ret = -1; - size_t controller_len; -@@ -2189,7 +2190,7 @@ out: - * we created the cgroups. - */ - static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename, -- const char *value) -+ const char *value) - { - size_t len; - char *fullpath, *p; -@@ -2228,8 +2229,8 @@ static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename, - ret = lxc_write_to_file(fullpath, value, strlen(value), false, 0666); - if (ret) { - 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)); -+ "%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; -@@ -2239,15 +2240,16 @@ static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename, - * we created the cgroups. - */ - static int cg_legacy_get_data(struct cgroup_ops *ops, const char *filename, -- char *value, size_t len) -+ char *value, size_t len) - { -- char *fullpath, *p; -- struct hierarchy *h; -+ char *fullpath = NULL; -+ char *p = NULL; -+ struct hierarchy *h = NULL; - int ret = 0; - char *controller = NULL; - - len = strlen(filename); -- controller = alloca(len + 1); -+ controller = calloc(1, len + 1); - (void)strlcpy(controller, filename, len + 1); - - p = strchr(controller, '.'); -@@ -2262,23 +2264,25 @@ static int cg_legacy_get_data(struct cgroup_ops *ops, const char *filename, - "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 bool __cg_legacy_setup_limits(struct cgroup_ops *ops, -- struct lxc_list *cgroup_settings, -- bool do_devices) -+ struct lxc_list *cgroup_settings, -+ bool do_devices) - { - struct lxc_list *iterator, *next, *sorted_cgroup_settings; - struct lxc_cgroup *cg; - bool ret = false; -- char value[21]; -+ char value[21 + 1] = { 0 }; - long long int readvalue, setvalue; - - if (lxc_list_empty(cgroup_settings)) -@@ -2318,7 +2322,7 @@ static bool __cg_legacy_setup_limits(struct cgroup_ops *ops, - - // isulad: check cpu shares - if (strcmp(cg->subsystem, "cpu.shares") == 0) { -- if (cg_legacy_get_data(ops, cg->subsystem, value, sizeof(value)) < 0) { -+ if (cg_legacy_get_data(ops, cg->subsystem, value, sizeof(value) - 1) < 0) { - SYSERROR("Error get %s", cg->subsystem); - goto out; - } -@@ -2334,14 +2338,14 @@ static bool __cg_legacy_setup_limits(struct cgroup_ops *ops, - 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); -+ "%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); -+ "%s:%d: setting cgroup config for ready process caused \"The minimum allowed cpu-shares is %s\".", -+ __FILE__, __LINE__, value); - goto out; - } - } -@@ -2359,7 +2363,7 @@ out: - } - - static bool __cg_unified_setup_limits(struct cgroup_ops *ops, -- struct lxc_list *cgroup_settings) -+ struct lxc_list *cgroup_settings) - { - struct lxc_list *iterator; - struct hierarchy *h = ops->unified; -@@ -2380,7 +2384,7 @@ static bool __cg_unified_setup_limits(struct cgroup_ops *ops, - free(fullpath); - if (ret < 0) { - SYSERROR("Failed to set \"%s\" to \"%s\"", -- cg->subsystem, cg->value); -+ cg->subsystem, cg->value); - return false; - } - TRACE("Set \"%s\" to \"%s\"", cg->subsystem, cg->value); -@@ -2391,8 +2395,8 @@ static bool __cg_unified_setup_limits(struct cgroup_ops *ops, - } - - __cgfsng_ops static bool cgfsng_setup_limits(struct cgroup_ops *ops, -- struct lxc_conf *conf, -- bool do_devices) -+ struct lxc_conf *conf, -+ bool do_devices) - { - bool bret; - -@@ -2404,7 +2408,7 @@ __cgfsng_ops static bool cgfsng_setup_limits(struct cgroup_ops *ops, - } - - static bool cgroup_use_wants_controllers(const struct cgroup_ops *ops, -- char **controllers) -+ char **controllers) - { - char **cur_ctrl, **cur_use; - -@@ -2537,8 +2541,8 @@ static bool cg_hybrid_init(struct cgroup_ops *ops) - char *cgv2_ctrl_path; - - cgv2_ctrl_path = must_make_path(mountpoint, base_cgroup, -- "cgroup.controllers", -- NULL); -+ "cgroup.controllers", -+ NULL); - - controller_list = cg_unified_get_controllers(cgv2_ctrl_path); - free(cgv2_ctrl_path); -@@ -2559,7 +2563,7 @@ static bool cg_hybrid_init(struct cgroup_ops *ops) - - continue; - -- next: -+next: - free_string_list(controller_list); - free(mountpoint); - free(base_cgroup); -@@ -2658,7 +2662,7 @@ static int cg_unified_init(struct cgroup_ops *ops) - */ - mountpoint = must_copy_string("/sys/fs/cgroup"); - subtree_path = must_make_path(mountpoint, base_cgroup, -- "cgroup.subtree_control", NULL); -+ "cgroup.subtree_control", NULL); - delegatable = cg_unified_get_controllers(subtree_path); - free(subtree_path); - if (!delegatable) -@@ -2710,8 +2714,9 @@ static bool cg_init(struct cgroup_ops *ops) - - __cgfsng_ops static bool cgfsng_data_init(struct cgroup_ops *ops, struct lxc_handler *handler) - { -- const char *cgroup_pattern; -- char *container_cgroup, *tmp; -+ const char *cgroup_pattern = NULL; -+ char *container_cgroup = NULL; -+ char *tmp = NULL; - struct lxc_conf *conf = NULL; - size_t len; - -@@ -2730,7 +2735,9 @@ __cgfsng_ops static bool cgfsng_data_init(struct cgroup_ops *ops, struct lxc_han - /* isulad: init ops->container_cgroup here instead of in cgfsng_payload_create*/ - if (conf) { - if (conf->cgroup_meta.dir) -- tmp = lxc_string_join("/", (const char *[]){conf->cgroup_meta.dir, handler->name, NULL}, false); -+ tmp = lxc_string_join("/", (const char *[]) { -+ conf->cgroup_meta.dir, handler->name, NULL -+ }, false); - else - tmp = lxc_string_replace("%n", handler->name, ops->cgroup_pattern); - if (!tmp) { -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 3780966..ec1667d 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -351,8 +351,8 @@ static int run_buffer(char *buffer) - } - - int run_script_argv(const char *name, unsigned int hook_version, -- const char *section, const char *script, -- const char *hookname, char **argv) -+ const char *section, const char *script, -+ const char *hookname, char **argv) - { - int buf_pos, i, ret; - char *buffer; -@@ -407,7 +407,7 @@ int run_script_argv(const char *name, unsigned int hook_version, - ret = setenv("LXC_HOOK_TYPE", hookname, 1); - if (ret < 0) { - SYSERROR("Failed to set environment variable: " -- "LXC_HOOK_TYPE=%s", hookname); -+ "LXC_HOOK_TYPE=%s", hookname); - goto on_error; - } - TRACE("Set environment variable: LXC_HOOK_TYPE=%s", hookname); -@@ -415,7 +415,7 @@ int run_script_argv(const char *name, unsigned int hook_version, - ret = setenv("LXC_HOOK_SECTION", section, 1); - if (ret < 0) { - SYSERROR("Failed to set environment variable: " -- "LXC_HOOK_SECTION=%s", section); -+ "LXC_HOOK_SECTION=%s", section); - goto on_error; - } - TRACE("Set environment variable: LXC_HOOK_SECTION=%s", section); -@@ -429,7 +429,7 @@ int run_script_argv(const char *name, unsigned int hook_version, - ret = setenv("LXC_NET_TYPE", argv[0], 1); - if (ret < 0) { - SYSERROR("Failed to set environment variable: " -- "LXC_NET_TYPE=%s", argv[0]); -+ "LXC_NET_TYPE=%s", argv[0]); - goto on_error; - } - TRACE("Set environment variable: LXC_NET_TYPE=%s", argv[0]); -@@ -440,7 +440,7 @@ int run_script_argv(const char *name, unsigned int hook_version, - ret = setenv("LXC_NET_PARENT", parent, 1); - if (ret < 0) { - SYSERROR("Failed to set environment " -- "variable: LXC_NET_PARENT=%s", parent); -+ "variable: LXC_NET_PARENT=%s", parent); - goto on_error; - } - TRACE("Set environment variable: LXC_NET_PARENT=%s", parent); -@@ -448,7 +448,7 @@ int run_script_argv(const char *name, unsigned int hook_version, - ret = setenv("LXC_NET_PARENT", parent, 1); - if (ret < 0) { - SYSERROR("Failed to set environment " -- "variable: LXC_NET_PARENT=%s", parent); -+ "variable: LXC_NET_PARENT=%s", parent); - goto on_error; - } - TRACE("Set environment variable: LXC_NET_PARENT=%s", parent); -@@ -458,7 +458,7 @@ int run_script_argv(const char *name, unsigned int hook_version, - ret = setenv("LXC_NET_PEER", peer, 1); - if (ret < 0) { - SYSERROR("Failed to set environment " -- "variable: LXC_NET_PEER=%s", peer); -+ "variable: LXC_NET_PEER=%s", peer); - goto on_error; - } - TRACE("Set environment variable: LXC_NET_PEER=%s", peer); -@@ -466,7 +466,7 @@ int run_script_argv(const char *name, unsigned int hook_version, - ret = setenv("LXC_NET_PARENT", parent, 1); - if (ret < 0) { - SYSERROR("Failed to set environment " -- "variable: LXC_NET_PARENT=%s", parent); -+ "variable: LXC_NET_PARENT=%s", parent); - goto on_error; - } - TRACE("Set environment variable: LXC_NET_PARENT=%s", parent); -@@ -600,7 +600,7 @@ int pin_rootfs(const char *rootfs) - * honored. - */ - unsigned long add_required_remount_flags(const char *s, const char *d, -- unsigned long flags) -+ unsigned long flags) - { - #ifdef HAVE_STATVFS - int ret; -@@ -728,10 +728,10 @@ static int lxc_mount_auto_mounts(struct lxc_conf *conf, int flags, struct lxc_ha - } - - mflags = add_required_remount_flags(source, destination, -- default_mounts[i].flags); -+ default_mounts[i].flags); - r = safe_mount(source, destination, default_mounts[i].fstype, -- mflags, default_mounts[i].options, -- conf->rootfs.path ? conf->rootfs.mount : NULL); -+ mflags, default_mounts[i].options, -+ conf->rootfs.path ? conf->rootfs.mount : NULL); - saved_errno = errno; - if (r < 0 && errno == ENOENT) { - INFO("Mount source for \"%s\" on \"%s\" does " -@@ -781,9 +781,9 @@ static int lxc_mount_auto_mounts(struct lxc_conf *conf, int flags, struct lxc_ha - cg_flags |= LXC_AUTO_CGROUP_FORCE; - - if (!handler->cgroup_ops->mount(handler->cgroup_ops, -- handler, -- conf->rootfs.path ? conf->rootfs.mount : "", -- cg_flags)) { -+ handler, -+ conf->rootfs.path ? conf->rootfs.mount : "", -+ cg_flags)) { - SYSERROR("Failed to mount \"/sys/fs/cgroup\""); - return -1; - } -@@ -832,7 +832,7 @@ static int lxc_setup_dev_symlinks(const struct lxc_rootfs *rootfs) - const struct dev_symlinks *d = &dev_symlinks[i]; - - ret = snprintf(path, sizeof(path), "%s/dev/%s", -- rootfs->path ? rootfs->mount : "", d->name); -+ rootfs->path ? rootfs->mount : "", d->name); - if (ret < 0 || ret >= PATH_MAX) - return -1; - -@@ -901,7 +901,7 @@ static int lxc_setup_ttys(struct lxc_conf *conf) - if (ttydir) { - /* create dev/lxc/tty%d" */ - ret = snprintf(lxcpath, sizeof(lxcpath), -- "/dev/%s/tty%d", ttydir, i + 1); -+ "/dev/%s/tty%d", ttydir, i + 1); - if (ret < 0 || (size_t)ret >= sizeof(lxcpath)) - return -1; - -@@ -920,14 +920,14 @@ static int lxc_setup_ttys(struct lxc_conf *conf) - ret = mount(tty->name, lxcpath, "none", MS_BIND, 0); - if (ret < 0) { - SYSWARN("Failed to bind mount \"%s\" onto \"%s\"", -- tty->name, lxcpath); -+ tty->name, lxcpath); - continue; - } - DEBUG("Bind mounted \"%s\" onto \"%s\"", tty->name, - lxcpath); - - ret = snprintf(lxcpath, sizeof(lxcpath), "%s/tty%d", -- ttydir, i + 1); -+ ttydir, i + 1); - if (ret < 0 || (size_t)ret >= sizeof(lxcpath)) - return -1; - -@@ -1122,7 +1122,7 @@ on_error: - * error, log it but don't fail yet. - */ - static int mount_autodev(const char *name, const struct lxc_rootfs *rootfs, -- const char *lxcpath, char *systemd) -+ const char *lxcpath, const char *systemd) - { - int ret; - size_t clen; -@@ -1147,21 +1147,21 @@ static int mount_autodev(const char *name, const struct lxc_rootfs *rootfs, - goto reset_umask; - } - -- 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, "size=500000,mode=755", -- 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); -- } -+ 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, "size=500000,mode=755", -+ 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); -+ } - - ret = snprintf(path, clen, "%s/dev/pts", rootfs->path ? rootfs->mount : ""); - if (ret < 0 || (size_t)ret >= clen) { -@@ -1220,7 +1220,7 @@ static int lxc_fill_autodev(const struct lxc_rootfs *rootfs) - int use_mknod = LXC_DEVNODE_MKNOD; - - ret = snprintf(path, PATH_MAX, "%s/dev", -- rootfs->path ? rootfs->mount : ""); -+ rootfs->path ? rootfs->mount : ""); - if (ret < 0 || ret >= PATH_MAX) - return -1; - -@@ -1236,7 +1236,7 @@ static int lxc_fill_autodev(const struct lxc_rootfs *rootfs) - const struct lxc_device_node *device = &lxc_devices[i]; - - ret = snprintf(path, PATH_MAX, "%s/dev/%s", -- rootfs->path ? rootfs->mount : "", device->name); -+ rootfs->path ? rootfs->mount : "", device->name); - if (ret < 0 || ret >= PATH_MAX) - return -1; - -@@ -1294,10 +1294,10 @@ static int lxc_fill_autodev(const struct lxc_rootfs *rootfs) - return -1; - - ret = safe_mount(hostpath, path, 0, MS_BIND, NULL, -- rootfs->path ? rootfs->mount : NULL); -+ rootfs->path ? rootfs->mount : NULL); - if (ret < 0) { - SYSERROR("Failed to bind mount host device node \"%s\" " -- "onto \"%s\"", hostpath, path); -+ "onto \"%s\"", hostpath, path); - return -1; - } - DEBUG("Bind mounted host device node \"%s\" onto \"%s\"", -@@ -1350,7 +1350,9 @@ static int rootfs_parent_mount_private(char *rootfs) - } - - while (getline(&line, &len, f) != -1) { -- char *target, *opts, *tmptarget; -+ char *target = NULL; -+ char *opts = NULL; -+ char *tmptarget = NULL; - target = get_field(line, 4); - if (!target) - continue; -@@ -1401,10 +1403,10 @@ static int rootfs_parent_mount_private(char *rootfs) - static int lxc_mount_rootfs(struct lxc_conf *conf) - { - int ret; -- struct lxc_storage *bdev; -+ struct lxc_storage *bdev = NULL; - struct lxc_rootfs *rootfs = &conf->rootfs; - unsigned long flags, mntflags, pflags; -- char *mntdata; -+ char *mntdata = NULL; - - if (!rootfs->path) { - ret = mount("", "/", NULL, MS_SLAVE | MS_REC, 0); -@@ -1430,7 +1432,7 @@ static int lxc_mount_rootfs(struct lxc_conf *conf) - ret = access(rootfs->mount, F_OK); - if (ret != 0) { - SYSERROR("Failed to access to \"%s\". Check it is present", -- rootfs->mount); -+ rootfs->mount); - return -1; - } - -@@ -1540,7 +1542,7 @@ static bool remount_readwrite(const char *path) - if (ret < 0) - goto on_error; - ret = mount(path, path, "", MS_BIND | MS_REMOUNT | MS_REC | \ -- MS_NOEXEC | MS_NOSUID | MS_NODEV, ""); -+ MS_NOEXEC | MS_NOSUID | MS_NODEV, ""); - if (ret < 0) - goto on_error; - } else if (errno == EBUSY) { -@@ -1601,7 +1603,7 @@ static bool remount_readonly(const char *path) - if (ret < 0) - goto on_error; - ret = mount(path, path, "", MS_BIND | MS_REMOUNT | MS_RDONLY | MS_REC | \ -- MS_NOEXEC | MS_NOSUID | MS_NODEV, ""); -+ MS_NOEXEC | MS_NOSUID | MS_NODEV, ""); - if (ret < 0) - goto on_error; - } else if (errno == EBUSY) { -@@ -1626,8 +1628,8 @@ 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; -+ if (!mask_path((char *)it->elem)) -+ return -1; - } - - return 0; -@@ -1638,8 +1640,8 @@ 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; -+ if (!remount_readonly((char *)it->elem)) -+ return -1; - } - - return 0; -@@ -1873,8 +1875,8 @@ static int lxc_setup_rootfs_switch_root(const struct lxc_rootfs *rootfs) - } - - static const struct id_map *find_mapped_nsid_entry(struct lxc_conf *conf, -- unsigned id, -- enum idtype idtype) -+ unsigned id, -+ enum idtype idtype) - { - struct lxc_list *it; - struct id_map *map; -@@ -1918,7 +1920,7 @@ static int lxc_setup_devpts(struct lxc_conf *conf) - } - - ret = snprintf(devpts_mntopts, sizeof(devpts_mntopts), "%s,max=%zu", -- default_devpts_mntopts, conf->pty_max); -+ default_devpts_mntopts, conf->pty_max); - if (ret < 0 || (size_t)ret >= sizeof(devpts_mntopts)) - return -1; - -@@ -2031,7 +2033,7 @@ static int setup_personality(int persona) - } - - static int lxc_setup_dev_console(const struct lxc_rootfs *rootfs, -- const struct lxc_terminal *console) -+ const struct lxc_terminal *console) - { - int ret; - char path[PATH_MAX]; -@@ -2069,7 +2071,7 @@ static int lxc_setup_dev_console(const struct lxc_rootfs *rootfs, - ret = fchmod(console->slave, S_IXUSR | S_IXGRP); - if (ret < 0) { - SYSERROR("Failed to set mode \"0%o\" to \"%s\"", -- S_IXUSR | S_IXGRP, console->name); -+ S_IXUSR | S_IXGRP, console->name); - return -errno; - } - -@@ -2084,8 +2086,8 @@ static int lxc_setup_dev_console(const struct lxc_rootfs *rootfs, - } - - static int lxc_setup_ttydir_console(const struct lxc_rootfs *rootfs, -- const struct lxc_terminal *console, -- char *ttydir) -+ const struct lxc_terminal *console, -+ char *ttydir) - { - int ret; - char path[PATH_MAX], lxcpath[PATH_MAX]; -@@ -2104,7 +2106,7 @@ static int lxc_setup_ttydir_console(const struct lxc_rootfs *rootfs, - SYSERROR("Failed to create \"%s\"", path); - return -errno; - } -- DEBUG("Created directory for console and tty devices at \"%s\"", path); -+ DEBUG("Created directory for console and tty devices at \"%s\"", path); - - ret = snprintf(lxcpath, sizeof(lxcpath), "%s/dev/%s/console", rootfs_path, ttydir); - if (ret < 0 || (size_t)ret >= sizeof(lxcpath)) -@@ -2140,7 +2142,7 @@ static int lxc_setup_ttydir_console(const struct lxc_rootfs *rootfs, - ret = fchmod(console->slave, S_IXUSR | S_IXGRP); - if (ret < 0) { - SYSERROR("Failed to set mode \"0%o\" to \"%s\"", -- S_IXUSR | S_IXGRP, console->name); -+ S_IXUSR | S_IXGRP, console->name); - return -errno; - } - -@@ -2166,7 +2168,7 @@ static int lxc_setup_ttydir_console(const struct lxc_rootfs *rootfs, - } - - static int lxc_setup_console(const struct lxc_rootfs *rootfs, -- const struct lxc_terminal *console, char *ttydir) -+ const struct lxc_terminal *console, char *ttydir) - { - - if (!ttydir) -@@ -2236,7 +2238,7 @@ int parse_mntopts(const char *mntopts, unsigned long *mntflags, unsigned long *p - *data = 0; - - lxc_iterate_parts(p, s, ",") -- parse_mntopt(p, mntflags, pflags, &data, size); -+ parse_mntopt(p, mntflags, pflags, &data, size); - - if (*data) - *mntdata = data; -@@ -2248,9 +2250,9 @@ int parse_mntopts(const char *mntopts, unsigned long *mntflags, unsigned long *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) -+ 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]; -@@ -2269,7 +2271,7 @@ static int mount_entry(const char *fsname, const char *target, - } - - ret = safe_mount(srcpath, target, fstype, mountflags & ~MS_REMOUNT, data, -- rootfs); -+ rootfs); - if (ret < 0) { - if (optional) { - SYSINFO("Failed to mount \"%s\" on \"%s\" (optional)", -@@ -2278,7 +2280,7 @@ static int mount_entry(const char *fsname, const char *target, - } - - SYSERROR("Failed to mount \"%s\" on \"%s\"", -- srcpath ? srcpath : "(null)", target); -+ srcpath ? srcpath : "(null)", target); - return -1; - } - -@@ -2315,7 +2317,7 @@ static int mount_entry(const char *fsname, const char *target, - */ - if (!(mountflags & MS_REMOUNT)) { - if (!(required_flags & ~mountflags) && -- rqd_flags == 0) { -+ rqd_flags == 0) { - DEBUG("Mountflags already were %lu, " - "skipping remount", mountflags); - goto skipremount; -@@ -2335,13 +2337,13 @@ static int mount_entry(const char *fsname, const char *target, - } - - SYSERROR("Failed to mount \"%s\" on \"%s\"", -- srcpath ? srcpath : "(null)", target); -+ srcpath ? srcpath : "(null)", target); - return -1; - } - } - - #ifdef HAVE_STATVFS -- skipremount: -+skipremount: - #endif - if (pflags) { - ret = mount(NULL, target, NULL, pflags, NULL); -@@ -2352,7 +2354,7 @@ static int mount_entry(const char *fsname, const char *target, - return 0; - } else { - SYSERROR("Failed to change mount propagation " -- "for \"%s\" (optional)", target); -+ "for \"%s\" (optional)", target); - return -1; - } - } -@@ -2416,10 +2418,12 @@ static int check_mount_destination(const char *rootfs, const char *dest) - "/proc/net/dev", - NULL - }; -- const char **valid, **invalid; -+ const char **valid = NULL; -+ const char **invalid = NULL; - - for(valid = valid_destinations; *valid != NULL; valid++) { -- char *fullpath, *relpath; -+ char *fullpath = NULL; -+ char *relpath = NULL; - const char *parts[3] = { - rootfs, - *valid, -@@ -2469,9 +2473,9 @@ static int check_mount_destination(const char *rootfs, const char *dest) - } - - static int mount_entry_create_dir_file(const struct mntent *mntent, -- const char *path, -- const struct lxc_rootfs *rootfs, -- const char *lxc_name, const char *lxc_path) -+ const char *path, -+ const struct lxc_rootfs *rootfs, -+ const char *lxc_name, const char *lxc_path) - { - int ret; - char *p1, *p2; -@@ -2487,7 +2491,7 @@ static int mount_entry_create_dir_file(const struct mntent *mntent, - if (ret < 0 && errno != EEXIST) { - SYSERROR("Failed to create directory \"%s\"", path); - lxc_write_error_message(rootfs->errfd, "%s:%d: mkdir %s: %s.", -- __FILE__, __LINE__, path, strerror(errno)); -+ __FILE__, __LINE__, path, strerror(errno)); - return -1; - } - } -@@ -2510,14 +2514,14 @@ static int mount_entry_create_dir_file(const struct mntent *mntent, - if (ret < 0 && errno != EEXIST) { - SYSERROR("Failed to create directory \"%s\"", path); - lxc_write_error_message(rootfs->errfd, "%s:%d: mkdir %s: %s.", -- __FILE__, __LINE__, p2, strerror(errno)); -+ __FILE__, __LINE__, p2, strerror(errno)); - return -1; - } - - ret = mknod(path, S_IFREG | 0000, 0); - if (ret < 0 && errno != EEXIST) { - lxc_write_error_message(rootfs->errfd, "%s:%d: open %s: %s.", -- __FILE__, __LINE__, path, strerror(errno)); -+ __FILE__, __LINE__, path, strerror(errno)); - return -errno; - } - -@@ -2525,7 +2529,7 @@ static int mount_entry_create_dir_file(const struct mntent *mntent, - } - - static int mount_entry_with_loop_dev(const char *src, const char *dest, const char *fstype, -- char *mnt_opts, const char *rootfs) -+ 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/ -@@ -2603,10 +2607,10 @@ retry: - /* 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, -- const char *path, -- const struct lxc_rootfs *rootfs, -- const char *lxc_name, -- const char *lxc_path) -+ const char *path, -+ const struct lxc_rootfs *rootfs, -+ const char *lxc_name, -+ const char *lxc_path) - { - int ret; - unsigned long mntflags, pflags; -@@ -2631,7 +2635,7 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - 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); -+ __FILE__, __LINE__, path, rootfs_path); - return -1; - } - dest = rpath; -@@ -2640,7 +2644,7 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - 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); -+ __FILE__, __LINE__, dest); - free(rpath); - return -1; - } -@@ -2665,14 +2669,14 @@ static inline int mount_entry_on_generic(struct mntent *mntent, - // 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); -+ mntent->mnt_opts, rootfs_path); - } else { - ret = mount_entry(mntent->mnt_fsname, dest, mntent->mnt_type, mntflags, -- pflags, mntdata, optional, dev, relative, rootfs_path); -+ 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); -+ __FILE__, __LINE__, mntent->mnt_fsname, mntent->mnt_type); - } - - free(mntdata); -@@ -2699,9 +2703,9 @@ static inline int mount_entry_on_systemfs(struct mntent *mntent) - } - - static int mount_entry_on_absolute_rootfs(struct mntent *mntent, -- const struct lxc_rootfs *rootfs, -- const char *lxc_name, -- const char *lxc_path) -+ const struct lxc_rootfs *rootfs, -+ const char *lxc_name, -+ const char *lxc_path) - { - int offset; - char *aux; -@@ -2743,9 +2747,9 @@ skipabs: - } - - static int mount_entry_on_relative_rootfs(struct mntent *mntent, -- const struct lxc_rootfs *rootfs, -- const char *lxc_name, -- const char *lxc_path) -+ const struct lxc_rootfs *rootfs, -+ const char *lxc_name, -+ const char *lxc_path) - { - int ret; - char path[PATH_MAX]; -@@ -2759,8 +2763,8 @@ static int mount_entry_on_relative_rootfs(struct mntent *mntent, - } - - static int mount_file_entries(const struct lxc_conf *conf, -- const struct lxc_rootfs *rootfs, FILE *file, -- const char *lxc_name, const char *lxc_path) -+ const struct lxc_rootfs *rootfs, FILE *file, -+ const char *lxc_name, const char *lxc_path) - { - char buf[4096]; - struct mntent mntent; -@@ -2790,10 +2794,10 @@ static int mount_file_entries(const struct lxc_conf *conf, - ret = mount_entry_on_systemfs(&mntent); - else if (mntent.mnt_dir[0] != '/') - ret = mount_entry_on_relative_rootfs(&mntent, rootfs, -- lxc_name, lxc_path); -+ lxc_name, lxc_path); - else - ret = mount_entry_on_absolute_rootfs(&mntent, rootfs, -- lxc_name, lxc_path); -+ lxc_name, lxc_path); - free(mntent.mnt_fsname); - free(mntent.mnt_dir); - if (ret < 0) -@@ -2806,8 +2810,8 @@ static int mount_file_entries(const struct lxc_conf *conf, - } - - static int setup_mount(const struct lxc_conf *conf, -- const struct lxc_rootfs *rootfs, const char *fstab, -- const char *lxc_name, const char *lxc_path) -+ const struct lxc_rootfs *rootfs, const char *fstab, -+ const char *lxc_name, const char *lxc_path) - { - FILE *f; - int ret; -@@ -2880,9 +2884,9 @@ on_error: - } - - static int setup_mount_entries(const struct lxc_conf *conf, -- const struct lxc_rootfs *rootfs, -- struct lxc_list *mount, const char *lxc_name, -- const char *lxc_path) -+ const struct lxc_rootfs *rootfs, -+ struct lxc_list *mount, const char *lxc_name, -+ const char *lxc_path) - { - int ret; - FILE *f; -@@ -2966,7 +2970,7 @@ static int setup_caps(struct lxc_list *caps) - } - - ret = prctl(PR_CAPBSET_DROP, prctl_arg(capid), prctl_arg(0), -- prctl_arg(0), prctl_arg(0)); -+ prctl_arg(0), prctl_arg(0)); - if (ret < 0) { - SYSERROR("Failed to remove %s capability", drop_entry); - return -1; -@@ -3025,7 +3029,7 @@ static int dropcaps_except(struct lxc_list *caps) - continue; - - ret = prctl(PR_CAPBSET_DROP, prctl_arg(i), prctl_arg(0), -- prctl_arg(0), prctl_arg(0)); -+ prctl_arg(0), prctl_arg(0)); - if (ret < 0) { - SYSERROR("Failed to remove capability %d", i); - return -1; -@@ -3076,8 +3080,8 @@ int setup_resource_limits(struct lxc_list *limits, pid_t pid, int errfd) - if (prlimit(pid, resid, &lim->limit, NULL) != 0) { - SYSERROR("Failed to set limit %s %lu %lu.", lim->resource, lim->limit.rlim_cur, lim->limit.rlim_max); - 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)); -+ __FILE__, __LINE__, lim->resource, -+ lim->limit.rlim_cur, lim->limit.rlim_max, strerror(errno)); - return -1; - } - -@@ -3115,10 +3119,10 @@ int setup_sysctl_parameters(struct lxc_list *sysctls) - } - - ret = lxc_write_to_file(filename, elem->value, -- strlen(elem->value), false, 0666); -+ strlen(elem->value), false, 0666); - if (ret < 0) { - SYSERROR("Failed to setup sysctl parameters %s to %s", -- elem->key, elem->value); -+ elem->key, elem->value); - return -1; - } - } -@@ -3150,7 +3154,7 @@ int setup_proc_filesystem(struct lxc_list *procs, pid_t pid) - } - - ret = lxc_write_to_file(filename, elem->value, -- strlen(elem->value), false, 0666); -+ strlen(elem->value), false, 0666); - if (ret < 0) { - ERROR("Failed to setup proc filesystem %s to %s", - elem->filename, elem->value); -@@ -3255,7 +3259,7 @@ struct lxc_conf *lxc_conf_init(void) - } - - int write_id_mapping(enum idtype idtype, pid_t pid, const char *buf, -- size_t buf_size) -+ size_t buf_size) - { - int fd, ret; - char path[PATH_MAX]; -@@ -3280,7 +3284,7 @@ int write_id_mapping(enum idtype idtype, pid_t pid, const char *buf, - close(fd); - if (ret != buflen) { - SYSERROR("Failed to write \"deny\" to " -- "\"/proc/%d/setgroups\"", pid); -+ "\"/proc/%d/setgroups\"", pid); - return -1; - } - TRACE("Wrote \"deny\" to \"/proc/%d/setgroups\"", pid); -@@ -3288,7 +3292,7 @@ int write_id_mapping(enum idtype idtype, pid_t pid, const char *buf, - } - - ret = snprintf(path, PATH_MAX, "/proc/%d/%cid_map", pid, -- idtype == ID_TYPE_UID ? 'u' : 'g'); -+ idtype == ID_TYPE_UID ? 'u' : 'g'); - if (ret < 0 || ret >= PATH_MAX) - return -E2BIG; - -@@ -3303,7 +3307,7 @@ int write_id_mapping(enum idtype idtype, pid_t pid, const char *buf, - close(fd); - if (ret != buf_size) { - SYSERROR("Failed to write %cid mapping to \"%s\"", -- idtype == ID_TYPE_UID ? 'u' : 'g', path); -+ idtype == ID_TYPE_UID ? 'u' : 'g', path); - return -1; - } - -@@ -3347,8 +3351,8 @@ static int idmaptool_on_path_and_privileged(const char *binary, cap_value_t cap) - #if HAVE_LIBCAP && LIBCAP_SUPPORTS_FILE_CAPABILITIES - /* Check if it has the CAP_SETUID capability. */ - if ((cap & CAP_SETUID) && -- lxc_file_cap_is_set(path, CAP_SETUID, CAP_EFFECTIVE) && -- lxc_file_cap_is_set(path, CAP_SETUID, CAP_PERMITTED)) { -+ lxc_file_cap_is_set(path, CAP_SETUID, CAP_EFFECTIVE) && -+ lxc_file_cap_is_set(path, CAP_SETUID, CAP_PERMITTED)) { - DEBUG("The binary \"%s\" has CAP_SETUID in its CAP_EFFECTIVE " - "and CAP_PERMITTED sets", path); - fret = 1; -@@ -3357,8 +3361,8 @@ static int idmaptool_on_path_and_privileged(const char *binary, cap_value_t cap) - - /* Check if it has the CAP_SETGID capability. */ - if ((cap & CAP_SETGID) && -- lxc_file_cap_is_set(path, CAP_SETGID, CAP_EFFECTIVE) && -- lxc_file_cap_is_set(path, CAP_SETGID, CAP_PERMITTED)) { -+ lxc_file_cap_is_set(path, CAP_SETGID, CAP_EFFECTIVE) && -+ lxc_file_cap_is_set(path, CAP_SETGID, CAP_PERMITTED)) { - DEBUG("The binary \"%s\" has CAP_SETGID in its CAP_EFFECTIVE " - "and CAP_PERMITTED sets", path); - fret = 1; -@@ -3451,10 +3455,10 @@ int lxc_map_ids(struct lxc_list *idmap, pid_t pid) - lxc_list_for_each(iterator, idmap) { - map = iterator->elem; - if (map->idtype == ID_TYPE_UID && map->range == 1 && -- map->nsid == hostuid && map->hostid == hostuid) -+ map->nsid == hostuid && map->hostid == hostuid) - continue; - if (map->idtype == ID_TYPE_GID && map->range == 1 && -- map->nsid == hostgid && map->hostid == hostgid) -+ map->nsid == hostgid && map->hostid == hostgid) - continue; - use_shadow = true; - break; -@@ -3462,7 +3466,7 @@ int lxc_map_ids(struct lxc_list *idmap, pid_t pid) - } - - for (type = ID_TYPE_UID, u_or_g = 'u'; type <= ID_TYPE_GID; -- type++, u_or_g = 'g') { -+ type++, u_or_g = 'g') { - pos = mapbuf; - - if (use_shadow) -@@ -3477,9 +3481,9 @@ int lxc_map_ids(struct lxc_list *idmap, pid_t pid) - - left = LXC_IDMAPLEN - (pos - mapbuf); - fill = snprintf(pos, left, "%s%lu %lu %lu%s", -- use_shadow ? " " : "", map->nsid, -- map->hostid, map->range, -- use_shadow ? "" : "\n"); -+ use_shadow ? " " : "", map->nsid, -+ map->hostid, map->range, -+ use_shadow ? "" : "\n"); - if (fill <= 0 || fill >= left) { - /* The kernel only takes <= 4k for writes to - * /proc//{g,u}id_map -@@ -3498,8 +3502,8 @@ int lxc_map_ids(struct lxc_list *idmap, pid_t pid) - */ - if (use_shadow) { - ret = run_command(cmd_output, sizeof(cmd_output), -- lxc_map_ids_exec_wrapper, -- (void *)mapbuf); -+ lxc_map_ids_exec_wrapper, -+ (void *)mapbuf); - if (ret < 0) { - ERROR("new%cidmap failed to write mapping \"%s\": %s", - u_or_g, cmd_output, mapbuf); -@@ -3525,7 +3529,7 @@ int lxc_map_ids(struct lxc_list *idmap, pid_t pid) - * Return true if id was found, false otherwise. - */ - bool get_mapped_rootid(struct lxc_conf *conf, enum idtype idtype, -- unsigned long *val) -+ unsigned long *val) - { - unsigned nsid; - struct id_map *map; -@@ -3609,20 +3613,22 @@ int chown_mapped_root(const char *path, struct lxc_conf *conf) - 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}; -+ "-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}; -+ "-m", map1, -+ "-m", map2, -+ "-m", map3, -+ "-m", map4, -+ "-m", map5, -+ "--", "chown", ugid, path, -+ NULL -+ }; - char cmd_output[PATH_MAX]; - - hostuid = geteuid(); -@@ -3671,8 +3677,8 @@ int chown_mapped_root(const char *path, struct lxc_conf *conf) - */ - 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) { -+ mapped_hostid(sb.st_gid, conf, ID_TYPE_GID) < 0 && -+ chown(path, -1, hostgid) < 0) { - ERROR("Failed chgrping %s", path); - return -1; - } -@@ -3700,7 +3706,7 @@ int chown_mapped_root(const char *path, struct lxc_conf *conf) - - /* "g:pathgid:rootgid+pathgid:1" */ - ret = snprintf(map4, 100, "g:%d:%d:1", (gid_t)sb.st_gid, -- rootgid + (gid_t)sb.st_gid); -+ rootgid + (gid_t)sb.st_gid); - if (ret < 0 || ret >= 100) { - ERROR("Error gid printing map string"); - return -1; -@@ -3722,12 +3728,12 @@ int chown_mapped_root(const char *path, struct lxc_conf *conf) - - if (hostgid == sb.st_gid) - ret = run_command(cmd_output, sizeof(cmd_output), -- chown_mapped_root_exec_wrapper, -- (void *)args1); -+ chown_mapped_root_exec_wrapper, -+ (void *)args1); - else - ret = run_command(cmd_output, sizeof(cmd_output), -- chown_mapped_root_exec_wrapper, -- (void *)args2); -+ chown_mapped_root_exec_wrapper, -+ (void *)args2); - if (ret < 0) - ERROR("lxc-usernsexec failed: %s", cmd_output); - -@@ -3820,7 +3826,7 @@ again: - f = fdopen(memfd, "r"); - if (!f) { - SYSERROR("Failed to open copy of \"/proc/self/mountinfo\" to mark " -- "all shared. Continuing"); -+ "all shared. Continuing"); - close(memfd); - return; - } -@@ -3918,7 +3924,7 @@ out: - * pre-mount hooks, and mounting the rootfs. - */ - int lxc_setup_rootfs_prepare_root(struct lxc_conf *conf, const char *name, -- const char *lxcpath) -+ const char *lxcpath) - { - int ret; - -@@ -3967,15 +3973,15 @@ static bool verify_start_hooks(struct lxc_conf *conf) - char *hookname = it->elem; - - ret = snprintf(path, PATH_MAX, "%s%s", -- conf->rootfs.path ? conf->rootfs.mount : "", -- hookname); -+ conf->rootfs.path ? conf->rootfs.mount : "", -+ hookname); - if (ret < 0 || ret >= PATH_MAX) - return false; - - ret = access(path, X_OK); - if (ret < 0) { - SYSERROR("Start hook \"%s\" not found in container", -- hookname); -+ hookname); - return false; - } - -@@ -3997,13 +4003,13 @@ static bool execveat_supported(void) - /* 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; -- char *pathdirname; -+ int ret = 0; -+ char *pathdirname = NULL; - char path[MAXPATHLEN]; - mode_t cmask; - mode_t file_mode = 0; -- struct lxc_populate_devs *dev_elem; -- struct lxc_list *it; -+ struct lxc_populate_devs *dev_elem = NULL; -+ struct lxc_list *it = NULL; - - INFO("Populating devices into container"); - cmask = umask(S_IXUSR | S_IXGRP | S_IXOTH); -@@ -4034,12 +4040,12 @@ static int setup_populate_devs(const struct lxc_rootfs *rootfs, struct lxc_list - } - - DEBUG("Try to mknod '%s':'%d':'%d':'%d'\n", path, -- file_mode, dev_elem->maj, dev_elem->min); -+ 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); -+ file_mode, dev_elem->maj, dev_elem->min); - - char hostpath[MAXPATHLEN]; - FILE *pathfile; -@@ -4049,16 +4055,16 @@ static int setup_populate_devs(const struct lxc_rootfs *rootfs, struct lxc_list - ret = snprintf(hostpath, MAXPATHLEN, "/dev/%s", dev_elem->name); - if (ret < 0 || ret >= MAXPATHLEN) - return -1; -- pathfile = fopen(path, "wb"); -+ pathfile = lxc_fopen(path, "wb"); - if (!pathfile) { - SYSERROR("Failed to create device mount target '%s'", path); - return -1; - } - fclose(pathfile); - if (safe_mount(hostpath, path, 0, MS_BIND, NULL, -- rootfs->path ? rootfs->mount : NULL) != 0) { -+ rootfs->path ? rootfs->mount : NULL) != 0) { - SYSERROR("Failed bind mounting device %s from host into container", -- dev_elem->name); -+ dev_elem->name); - return -1; - } - } -@@ -4077,7 +4083,7 @@ static int setup_populate_devs(const struct lxc_rootfs *rootfs, struct lxc_list - 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; -@@ -4109,7 +4115,7 @@ int lxc_setup(struct lxc_handler *handler) - if (ret < 0) { - ERROR("Failed to setup rootfs"); - lxc_write_error_message(lxc_conf->errpipe[1], "%s:%d: failed to setup rootfs %s.", -- __FILE__, __LINE__, lxc_conf->rootfs.path); -+ __FILE__, __LINE__, lxc_conf->rootfs.path); - return -1; - } - -@@ -4202,7 +4208,7 @@ int lxc_setup(struct lxc_handler *handler) - /*isulad: move mount entries here, before we do lxc_fill_autodev and populate devices */ - if (!lxc_list_empty(&lxc_conf->mount_list)) { - ret = setup_mount_entries(lxc_conf, &lxc_conf->rootfs, -- &lxc_conf->mount_list, name, lxcpath); -+ &lxc_conf->mount_list, name, lxcpath); - if (ret < 0) { - ERROR("Failed to setup mount entries"); - goto on_error; -@@ -4244,7 +4250,7 @@ int lxc_setup(struct lxc_handler *handler) - } - - ret = lxc_setup_console(&lxc_conf->rootfs, &lxc_conf->console, -- lxc_conf->ttys.dir); -+ lxc_conf->ttys.dir); - if (ret < 0) { - ERROR("Failed to setup console"); - goto on_error; -@@ -4369,11 +4375,13 @@ int lxc_drop_caps(struct lxc_conf *conf) - { - #define __DEF_CAP_TO_MASK(x) (1U << ((x) & 31)) - #if HAVE_LIBCAP -- struct lxc_list *iterator; -- char *keep_entry; -+ int ret = 0; -+ struct lxc_list *iterator = NULL; -+ char *keep_entry = NULL; - int i, capid; - int numcaps = lxc_caps_last_cap() + 1; - struct lxc_list *caps = NULL; -+ int *caplist = NULL; - - if (lxc_list_empty(&conf->keepcaps)) - return 0; -@@ -4384,7 +4392,7 @@ int lxc_drop_caps(struct lxc_conf *conf) - return -1; - - // caplist[i] is 1 if we keep capability i -- int *caplist = alloca(numcaps * sizeof(int)); -+ caplist = malloc(numcaps * sizeof(int)); - memset(caplist, 0, numcaps * sizeof(int)); - - lxc_list_for_each(iterator, caps) { -@@ -4404,9 +4412,10 @@ int lxc_drop_caps(struct lxc_conf *conf) - if (capid == -2) - continue; - -- if (capid < 0) { -+ if (capid < 0) { - ERROR("unknown capability %s", keep_entry); -- return -1; -+ ret = -1; -+ goto out; - } - - DEBUG("keep capability '%s' (%d)", keep_entry, capid); -@@ -4420,7 +4429,7 @@ int lxc_drop_caps(struct lxc_conf *conf) - 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_header, 0,sizeof(struct __user_cap_header_struct)); - memset(cap_data, 0, sizeof(struct __user_cap_data_struct) * 2); - - cap_header->pid = 0; -@@ -4435,12 +4444,16 @@ int lxc_drop_caps(struct lxc_conf *conf) - } - - if (capset(cap_header, cap_data)) { -- SYSERROR("Failed to set capabilitys"); -- return -1; -+ SYSERROR("Failed to set capabilitys"); -+ ret = -1; -+ goto out; - } - - #endif -- return 0; -+ -+out: -+ free(caplist); -+ return ret; - } - - struct oci_hook_conf { -@@ -4474,9 +4487,17 @@ static char* generate_json_str(const char *name, const char *lxcpath, const char - ERROR("Get container %s pid failed: %s", name, strerror(errno)); - cpid = "-1"; - } -+ -+ if ((SIZE_MAX - strlen(name) - strlen(cpid) - strlen(rootfs) - strlen(lxcpath) - strlen(name)) < -+ (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; -+ strlen(name) + strlen(cpid) + strlen(rootfs) + strlen(lxcpath) + 1 + strlen(name) + 1; - inmsg = malloc(size); - if (!inmsg) { - ERROR("Out of memory"); -@@ -4484,8 +4505,8 @@ static char* generate_json_str(const char *name, const char *lxcpath, const char - goto out_free; - } - rc = snprintf(inmsg, size, -- "{\"ociVersion\":\"\",\"id\":\"%s\",\"pid\":%s,\"root\":\"%s\",\"bundle\":\"%s/%s\"}", -- name, cpid, rootfs, lxcpath, name); -+ "{\"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; -@@ -4501,13 +4522,14 @@ out_free: - - static char **merge_ocihook_env(char **oldenvs, size_t env_len, size_t *merge_env_len) - { -- char **result; -+ char **result = NULL; - size_t result_len = env_len; - size_t i, j; -- char *tmpenv; -+ 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; -+ "LXC_CONFIG_FILE", "LXC_CGROUP_PATH", "LXC_ROOTFS_PATH", "LXC_NAME" -+ }; -+ char *lxcenv_buf = NULL; - - result_len += (sizeof(lxc_envs) / sizeof(char *)) + 1; - result = malloc(sizeof(char *) * result_len); -@@ -4541,8 +4563,8 @@ static char **merge_ocihook_env(char **oldenvs, size_t env_len, size_t *merge_en - return result; - } - --static struct lxc_popen_FILE *lxc_popen_ocihook(char *commandpath, char **args, int args_len, -- char **envs, int env_len, const char *instr) -+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; -@@ -4684,12 +4706,12 @@ void* wait_ocihook_timeout(void *arg) - - 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); -+ __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); -+ __FILE__, __LINE__, lxchook_names[conf->which], -+ (double)conf->timeout); - - if (kill(conf->pid, SIGKILL) && errno != ESRCH) { - ERROR("Send kill signal failed"); -@@ -4702,7 +4724,7 @@ out: - return ((void *)0); - } - --static int run_ocihook_buffer(struct oci_hook_conf *oconf, char *inmsg) -+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}; -@@ -4771,17 +4793,17 @@ static int run_ocihook_buffer(struct oci_hook_conf *oconf, char *inmsg) - } else if (WIFEXITED(ret) && WEXITSTATUS(ret) != 0) { - ERROR("Script exited with status %d. output: %s", WEXITSTATUS(ret), output); - lxc_write_error_message(conf->errfd, "%s:%d: running %s hook caused \"error running hook: exit status %d, output: %s\".", -- __FILE__, __LINE__, -- (conf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[conf->which], -- WEXITSTATUS(ret), output); -+ __FILE__, __LINE__, -+ (conf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[conf->which], -+ WEXITSTATUS(ret), output); - - goto print_hook; - } else if (WIFSIGNALED(ret)) { - ERROR("Script terminated by signal %d.", WTERMSIG(ret)); - lxc_write_error_message(conf->errfd, "%s:%d: running %s hook caused \"error running hook: Script terminated by signal %d\".", -- __FILE__, __LINE__, -- (conf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[conf->which], -- WTERMSIG(ret)); -+ __FILE__, __LINE__, -+ (conf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[conf->which], -+ WTERMSIG(ret)); - - goto print_hook; - } -@@ -4801,8 +4823,8 @@ print_hook: - 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 : "", conf->timeout); -+ buffer, err_args_msg ? err_args_msg : "", -+ err_envs_msg ? err_envs_msg : "", conf->timeout); - - free(err_args_msg); - free(err_envs_msg); -@@ -4810,8 +4832,8 @@ print_hook: - } - - static int run_ocihook_script_argv(const char *name, const char *section, -- struct oci_hook_conf *oconf, -- const char *lxcpath, const char *rootfs) -+ struct oci_hook_conf *oconf, -+ const char *lxcpath, const char *rootfs) - { - int ret; - const char *script = oconf->ocihook->path; -@@ -4845,9 +4867,13 @@ static char *get_root_path(const char *path, const char *backend) - } - - if (strcmp(backend, "aufs") == 0 || -- strcmp(backend, "overlayfs") == 0 || -- strcmp(backend, "loop") == 0) { -+ strcmp(backend, "overlayfs") == 0 || -+ strcmp(backend, "loop") == 0) { - tmp = strrchr(path, ':'); -+ if (tmp == NULL) { -+ ERROR("Out of memory"); -+ return NULL; -+ } - tmp++; - ret = strdup(tmp); - if (!ret) { -@@ -4866,13 +4892,13 @@ default_out: - return ret; - } - --static int run_oci_hooks(const char *name, const char *lxcpath, struct lxc_conf *lc, int which, int errfd) -+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; -+ char *rootpath = NULL; - - if (!lc) { - return -1; -@@ -4890,32 +4916,32 @@ static int run_oci_hooks(const char *name, const char *lxcpath, struct lxc_conf - 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 %ld 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]; -- ret = run_ocihook_script_argv(name, "lxc", &work_conf, lxcpath, rootpath); -- if (ret != 0) -- break; -- } -- break; -- default: -- ret = -1; -+ 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 %ld 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]; -+ ret = run_ocihook_script_argv(name, "lxc", &work_conf, lxcpath, rootpath); -+ if (ret != 0) -+ break; -+ } -+ break; -+ default: -+ ret = -1; - } - if (rootpath) - free(rootpath); -@@ -4923,33 +4949,12 @@ static int run_oci_hooks(const char *name, const char *lxcpath, struct lxc_conf - } - - int run_lxc_hooks(const char *name, char *hookname, struct lxc_conf *conf, -- char *argv[]) -+ char *argv[]) - { - struct lxc_list *it; - int which = -1; - -- if (strcmp(hookname, "oci-prestart") == 0) { -- which = OCI_HOOK_PRESTART; -- if (!argv || !argv[0]) { -- ERROR("oci hook require lxcpath"); -- return -1; -- } -- return run_oci_hooks(name, argv[0], conf, which, conf->errpipe[1]); -- } else if (strcmp(hookname, "oci-poststart") == 0) { -- which = OCI_HOOK_POSTSTART; -- if (!argv || !argv[0]) { -- ERROR("oci hook require lxcpath"); -- return -1; -- } -- return run_oci_hooks(name, argv[0], conf, which, conf->errpipe[1]); -- } else if (strcmp(hookname, "oci-poststop") == 0) { -- which = OCI_HOOK_POSTSTOP; -- if (!argv || !argv[0]) { -- ERROR("oci hook require lxcpath"); -- return -1; -- } -- return run_oci_hooks(name, argv[0], conf, which, conf->errpipe[1]); -- } else if (strcmp(hookname, "pre-start") == 0) -+ if (strcmp(hookname, "pre-start") == 0) - which = LXCHOOK_PRESTART; - else if (strcmp(hookname, "start-host") == 0) - which = LXCHOOK_START_HOST; -@@ -4977,7 +4982,7 @@ int run_lxc_hooks(const char *name, char *hookname, struct lxc_conf *conf, - char *hook = it->elem; - - ret = run_script_argv(name, conf->hooks_version, "lxc", hook, -- hookname, argv); -+ hookname, argv); - if (ret < 0) - return -1; - } -@@ -4985,6 +4990,39 @@ int run_lxc_hooks(const char *name, char *hookname, struct lxc_conf *conf, - return 0; - } - -+int run_oci_hooks(const char *name, char *hookname, struct lxc_conf *conf, const char *lxcpath) -+{ -+ struct lxc_list *it; -+ 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; -+} -+ -+ - int lxc_clear_config_caps(struct lxc_conf *c) - { - struct lxc_list *it, *next; -@@ -5299,7 +5337,8 @@ int lxc_clear_init_groups(struct lxc_conf *lxc_conf) - /*isulad: clear populate devices*/ - int lxc_clear_populate_devices(struct lxc_conf *c) - { -- struct lxc_list *it,*next; -+ 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; -@@ -5315,7 +5354,8 @@ int lxc_clear_populate_devices(struct lxc_conf *c) - /*isulad: clear rootfs masked paths*/ - int lxc_clear_rootfs_masked_paths(struct lxc_conf *c) - { -- struct lxc_list *it,*next; -+ struct lxc_list *it = NULL; -+ struct lxc_list *next = NULL; - - lxc_list_for_each_safe(it, &c->rootfs.maskedpaths, next) { - lxc_list_del(it); -@@ -5328,7 +5368,8 @@ int lxc_clear_rootfs_masked_paths(struct lxc_conf *c) - /*isulad: clear rootfs ro paths*/ - int lxc_clear_rootfs_ro_paths(struct lxc_conf *c) - { -- struct lxc_list *it,*next; -+ struct lxc_list *it = NULL; -+ struct lxc_list *next = NULL; - - lxc_list_for_each_safe(it, &c->rootfs.ropaths, next) { - lxc_list_del(it); -@@ -5449,7 +5490,7 @@ static int run_userns_fn(void *data) - } - - static struct id_map *mapped_nsid_add(struct lxc_conf *conf, unsigned id, -- enum idtype idtype) -+ enum idtype idtype) - { - const struct id_map *map; - struct id_map *retmap; -@@ -5467,7 +5508,7 @@ static struct id_map *mapped_nsid_add(struct lxc_conf *conf, unsigned id, - } - - static struct id_map *find_mapped_hostid_entry(struct lxc_conf *conf, -- unsigned id, enum idtype idtype) -+ unsigned id, enum idtype idtype) - { - struct id_map *map; - struct lxc_list *it; -@@ -5491,7 +5532,7 @@ static struct id_map *find_mapped_hostid_entry(struct lxc_conf *conf, - * existing one or establish a new one. - */ - static struct id_map *mapped_hostid_add(struct lxc_conf *conf, uid_t id, -- enum idtype type) -+ enum idtype type) - { - int hostid_mapped; - struct id_map *entry = NULL, *tmp = NULL; -@@ -5528,7 +5569,7 @@ struct lxc_list *get_minimal_idmap(struct lxc_conf *conf) - gid_t nsgid = (conf->root_nsgid_map != NULL) ? 0 : conf->init_gid; - struct lxc_list *idmap = NULL, *tmplist = NULL; - struct id_map *container_root_uid = NULL, *container_root_gid = NULL, -- *host_uid_map = NULL, *host_gid_map = NULL; -+ *host_uid_map = NULL, *host_gid_map = NULL; - - /* Find container root mappings. */ - container_root_uid = mapped_nsid_add(conf, nsuid, ID_TYPE_UID); -@@ -5538,7 +5579,7 @@ struct lxc_list *get_minimal_idmap(struct lxc_conf *conf) - } - euid = geteuid(); - if (euid >= container_root_uid->hostid && -- euid < (container_root_uid->hostid + container_root_uid->range)) -+ euid < (container_root_uid->hostid + container_root_uid->range)) - host_uid_map = container_root_uid; - - container_root_gid = mapped_nsid_add(conf, nsgid, ID_TYPE_GID); -@@ -5548,7 +5589,7 @@ struct lxc_list *get_minimal_idmap(struct lxc_conf *conf) - } - egid = getegid(); - if (egid >= container_root_gid->hostid && -- egid < (container_root_gid->hostid + container_root_gid->range)) -+ egid < (container_root_gid->hostid + container_root_gid->range)) - host_gid_map = container_root_gid; - - /* Check whether the {g,u}id of the user has a mapping. */ -@@ -5648,7 +5689,7 @@ on_error: - * there to start the container in the first place. - */ - int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data, -- const char *fn_name) -+ const char *fn_name) - { - pid_t pid; - int p[2]; -@@ -5686,7 +5727,7 @@ int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data, - p[0] = -1; - - if (lxc_log_get_level() == LXC_LOG_LEVEL_TRACE || -- conf->loglevel == LXC_LOG_LEVEL_TRACE) { -+ conf->loglevel == LXC_LOG_LEVEL_TRACE) { - struct id_map *map; - struct lxc_list *it; - -@@ -5729,7 +5770,7 @@ on_error: - } - - int userns_exec_full(struct lxc_conf *conf, int (*fn)(void *), void *data, -- const char *fn_name) -+ const char *fn_name) - { - pid_t pid; - uid_t euid, egid; -@@ -5741,7 +5782,7 @@ int userns_exec_full(struct lxc_conf *conf, int (*fn)(void *), void *data, - char c = '1'; - struct lxc_list *idmap = NULL, *tmplist = NULL; - struct id_map *container_root_uid = NULL, *container_root_gid = NULL, -- *host_uid_map = NULL, *host_gid_map = NULL; -+ *host_uid_map = NULL, *host_gid_map = NULL; - - if (!conf) - return -EINVAL; -@@ -5866,7 +5907,7 @@ int userns_exec_full(struct lxc_conf *conf, int (*fn)(void *), void *data, - host_gid_map = NULL; - - if (lxc_log_get_level() == LXC_LOG_LEVEL_TRACE || -- conf->loglevel == LXC_LOG_LEVEL_TRACE) { -+ conf->loglevel == LXC_LOG_LEVEL_TRACE) { - lxc_list_for_each (cur, idmap) { - map = cur->elem; - TRACE("establishing %cid mapping for \"%d\" in new " -@@ -6139,7 +6180,7 @@ struct lxc_list *sort_cgroup_settings(struct lxc_list *cgroup_settings) - /* Store the memsw_limit location */ - memsw_limit = item; - } else if (strcmp(cg->subsystem, "memory.limit_in_bytes") == 0 && -- memsw_limit != NULL) { -+ memsw_limit != NULL) { - /* lxc.cgroup.memory.memsw.limit_in_bytes is found - * before lxc.cgroup.memory.limit_in_bytes, swap these - * two items */ -diff --git a/src/lxc/conf.h b/src/lxc/conf.h -index fb3c156..26bb70f 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -70,14 +70,14 @@ typedef void * scmp_filter_ctx; - struct lxc_cgroup { - union { - /* information about a specific controller */ -- struct /* controller */ { -+ struct { /* controller */ - int version; - char *subsystem; - char *value; - }; - - /* meta information about cgroup configuration */ -- struct /* meta */ { -+ struct { /* meta */ - char *controllers; - char *dir; - }; -@@ -435,7 +435,7 @@ struct lxc_conf { - }; - - extern int write_id_mapping(enum idtype idtype, pid_t pid, const char *buf, -- size_t buf_size); -+ size_t buf_size); - - #ifdef HAVE_TLS - extern thread_local struct lxc_conf *current_config; -@@ -444,7 +444,9 @@ extern struct lxc_conf *current_config; - #endif - - extern int run_lxc_hooks(const char *name, char *hook, struct lxc_conf *conf, -- char *argv[]); -+ char *argv[]); -+extern int run_oci_hooks(const char *name, char *hookname, struct lxc_conf *conf, const char *lxcpath); -+ - extern int detect_shared_rootfs(void); - extern struct lxc_conf *lxc_conf_init(void); - extern void lxc_conf_free(struct lxc_conf *conf); -@@ -465,20 +467,20 @@ extern int lxc_clear_limits(struct lxc_conf *c, const char *key); - extern int lxc_delete_autodev(struct lxc_handler *handler); - extern void lxc_clear_includes(struct lxc_conf *conf); - extern int lxc_setup_rootfs_prepare_root(struct lxc_conf *conf, -- const char *name, const char *lxcpath); -+ const char *name, const char *lxcpath); - extern int lxc_setup(struct lxc_handler *handler); - extern int lxc_setup_parent(struct lxc_handler *handler); - extern int setup_resource_limits(struct lxc_list *limits, pid_t pid, int errfd); - extern int find_unmapped_nsid(struct lxc_conf *conf, enum idtype idtype); - extern int mapped_hostid(unsigned id, struct lxc_conf *conf, -- enum idtype idtype); -+ enum idtype idtype); - extern int chown_mapped_root(const char *path, struct lxc_conf *conf); - extern int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data, -- const char *fn_name); -+ const char *fn_name); - extern int userns_exec_full(struct lxc_conf *conf, int (*fn)(void *), -- void *data, const char *fn_name); -+ void *data, const char *fn_name); - extern int parse_mntopts(const char *mntopts, unsigned long *mntflags, -- unsigned long *pflags, char **mntdata); -+ unsigned long *pflags, 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); -@@ -486,12 +488,12 @@ extern void suggest_default_idmap(void); - extern FILE *make_anonymous_mount_file(struct lxc_list *mount); - extern struct lxc_list *sort_cgroup_settings(struct lxc_list *cgroup_settings); - extern unsigned long add_required_remount_flags(const char *s, const char *d, -- unsigned long flags); -+ unsigned long flags); - extern int run_script(const char *name, const char *section, const char *script, -- ...); -+ ...); - extern int run_script_argv(const char *name, unsigned int hook_version, -- const char *section, const char *script, -- const char *hookname, char **argsin); -+ const char *section, const char *script, -+ const char *hookname, char **argsin); - extern int in_caplist(int cap, struct lxc_list *caps); - extern int setup_sysctl_parameters(struct lxc_list *sysctls); - extern int lxc_clear_sysctls(struct lxc_conf *c, const char *key); -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 93936cc..216a688 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -270,7 +270,7 @@ struct lxc_config_t *lxc_get_config(const char *key) - } - - static int set_config_net(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - if (!lxc_config_value_empty(value)) { - ERROR("lxc.net must not have a value"); -@@ -281,7 +281,7 @@ static int set_config_net(const char *key, const char *value, - } - - static int set_config_net_type(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - -@@ -296,7 +296,7 @@ static int set_config_net_type(const char *key, const char *value, - } else if (!strcmp(value, "macvlan")) { - netdev->type = LXC_NET_MACVLAN; - lxc_macvlan_mode_to_flag(&netdev->priv.macvlan_attr.mode, -- "private"); -+ "private"); - } else if (!strcmp(value, "vlan")) { - netdev->type = LXC_NET_VLAN; - } else if (!strcmp(value, "phys")) { -@@ -314,7 +314,7 @@ static int set_config_net_type(const char *key, const char *value, - } - - static int set_config_net_flags(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - -@@ -330,7 +330,7 @@ static int set_config_net_flags(const char *key, const char *value, - } - - static int create_matched_ifnames(const char *value, struct lxc_conf *lxc_conf, -- struct lxc_netdev *netdev) -+ struct lxc_netdev *netdev) - { - struct netns_ifaddrs *ifaddr, *ifa; - int n; -@@ -339,7 +339,9 @@ static int create_matched_ifnames(const char *value, struct lxc_conf *lxc_conf, - const char *link_key = "lxc.net.link"; - const char *tmpvalue = "phys"; - -- if (netns_getifaddrs(&ifaddr, -1, &(bool){false}) < 0) { -+ if (netns_getifaddrs(&ifaddr, -1, &(bool) { -+ false -+}) < 0) { - SYSERROR("Failed to get network interfaces"); - return -1; - } -@@ -353,10 +355,10 @@ static int create_matched_ifnames(const char *value, struct lxc_conf *lxc_conf, - - if (!strncmp(value, ifa->ifa_name, strlen(value) - 1)) { - ret = set_config_net_type(type_key, tmpvalue, lxc_conf, -- netdev); -+ netdev); - if (!ret) { - ret = set_config_net_link( -- link_key, ifa->ifa_name, lxc_conf, netdev); -+ link_key, ifa->ifa_name, lxc_conf, netdev); - if (ret) { - ERROR("Failed to create matched ifnames"); - break; -@@ -375,7 +377,7 @@ static int create_matched_ifnames(const char *value, struct lxc_conf *lxc_conf, - } - - static int set_config_net_link(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - int ret = 0; -@@ -395,7 +397,7 @@ static int set_config_net_link(const char *key, const char *value, - } - - static int set_config_net_name(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - -@@ -409,7 +411,7 @@ static int set_config_net_name(const char *key, const char *value, - } - - static int set_config_net_veth_pair(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - -@@ -423,7 +425,7 @@ static int set_config_net_veth_pair(const char *key, const char *value, - } - - static int set_config_net_macvlan_mode(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - -@@ -437,7 +439,7 @@ static int set_config_net_macvlan_mode(const char *key, const char *value, - } - - static int set_config_net_hwaddr(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - char *new_value; -@@ -466,7 +468,7 @@ static int set_config_net_hwaddr(const char *key, const char *value, - } - - static int set_config_net_vlan_id(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int ret; - struct lxc_netdev *netdev = data; -@@ -485,7 +487,7 @@ static int set_config_net_vlan_id(const char *key, const char *value, - } - - static int set_config_net_mtu(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - -@@ -499,7 +501,7 @@ static int set_config_net_mtu(const char *key, const char *value, - } - - static int set_config_net_ipv4_address(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int ret; - struct lxc_netdev *netdev = data; -@@ -596,7 +598,7 @@ static int set_config_net_ipv4_address(const char *key, const char *value, - } - - static int set_config_net_ipv4_gateway(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - -@@ -634,7 +636,7 @@ static int set_config_net_ipv4_gateway(const char *key, const char *value, - } - - static int set_config_net_ipv6_address(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int ret; - struct lxc_netdev *netdev = data; -@@ -700,7 +702,7 @@ static int set_config_net_ipv6_address(const char *key, const char *value, - } - - static int set_config_net_ipv6_gateway(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - -@@ -738,7 +740,7 @@ static int set_config_net_ipv6_gateway(const char *key, const char *value, - } - - static int set_config_net_script_up(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - -@@ -752,7 +754,7 @@ static int set_config_net_script_up(const char *key, const char *value, - } - - static int set_config_net_script_down(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - -@@ -782,31 +784,31 @@ static int add_hook(struct lxc_conf *lxc_conf, int which, char *hook) - } - - static int set_config_seccomp_profile(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - return set_config_path_item(&lxc_conf->seccomp, value); - } - - static int set_config_execute_cmd(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - return set_config_path_item(&lxc_conf->execute_cmd, value); - } - - static int set_config_init_cmd(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - return set_config_path_item(&lxc_conf->init_cmd, value); - } - - static int set_config_init_cwd(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - return set_config_path_item(&lxc_conf->init_cwd, value); - } - - static int set_config_init_uid(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - unsigned int init_uid; - -@@ -824,7 +826,7 @@ static int set_config_init_uid(const char *key, const char *value, - } - - static int set_config_init_gid(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - unsigned int init_gid; - -@@ -842,7 +844,7 @@ static int set_config_init_gid(const char *key, const char *value, - } - - static int set_config_hooks(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - char *copy; - -@@ -885,7 +887,7 @@ static int set_config_hooks(const char *key, const char *value, - } - - static int set_config_hooks_version(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int ret; - unsigned int tmp; -@@ -909,7 +911,7 @@ static int set_config_hooks_version(const char *key, const char *value, - } - - static int set_config_personality(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - signed long personality = lxc_config_parse_arch(value); - -@@ -922,7 +924,7 @@ static int set_config_personality(const char *key, const char *value, - } - - static int set_config_pty_max(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int ret; - unsigned int max = 0; -@@ -947,7 +949,7 @@ static int set_config_pty_max(const char *key, const char *value, - * noticed when the callback was called. - */ - static int set_config_start(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - bool is_empty; - -@@ -986,7 +988,7 @@ static int set_config_start(const char *key, const char *value, - } - - static int set_config_monitor(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - if (lxc_config_value_empty(value)) { - lxc_conf->monitor_unshare = 0; -@@ -1000,7 +1002,7 @@ static int set_config_monitor(const char *key, const char *value, - } - - static int set_config_group(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - char *groups, *token; - struct lxc_list *grouplist; -@@ -1039,10 +1041,10 @@ static int set_config_group(const char *key, const char *value, - } - - static int set_config_environment(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_list *list_item = NULL; -- char *replaced; -+ char *replaced = NULL; - - if (lxc_config_value_empty(value)) - return lxc_clear_environment(lxc_conf); -@@ -1072,7 +1074,7 @@ on_error: - } - - static int set_config_tty_max(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int ret; - unsigned int nbtty = 0; -@@ -1092,22 +1094,22 @@ static int set_config_tty_max(const char *key, const char *value, - } - - static int set_config_tty_dir(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - return set_config_string_item_max(&lxc_conf->ttys.dir, value, -- NAME_MAX + 1); -+ NAME_MAX + 1); - } - - static int set_config_apparmor_profile(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - return set_config_string_item(&lxc_conf->lsm_aa_profile, value); - } - - static int set_config_apparmor_allow_incomplete(const char *key, -- const char *value, -- struct lxc_conf *lxc_conf, -- void *data) -+ const char *value, -+ struct lxc_conf *lxc_conf, -+ void *data) - { - if (lxc_config_value_empty(value)) { - lxc_conf->lsm_aa_allow_incomplete = 0; -@@ -1124,13 +1126,13 @@ static int set_config_apparmor_allow_incomplete(const char *key, - } - - static int set_config_selinux_context(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - return set_config_string_item(&lxc_conf->lsm_se_context, value); - } - - static int set_config_log_file(const char *key, const char *value, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int ret; - -@@ -1151,7 +1153,7 @@ static int set_config_log_file(const char *key, const char *value, - } - - static int set_config_log_level(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int newlevel; - -@@ -1176,7 +1178,7 @@ static int set_config_log_level(const char *key, const char *value, - } - - static int set_config_autodev(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - if (lxc_config_value_empty(value)) { - lxc_conf->autodev = 0; -@@ -1193,7 +1195,7 @@ static int set_config_autodev(const char *key, const char *value, - } - - static int set_config_signal_halt(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int sig_n; - -@@ -1212,7 +1214,7 @@ static int set_config_signal_halt(const char *key, const char *value, - } - - static int set_config_signal_reboot(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int sig_n; - -@@ -1231,7 +1233,7 @@ static int set_config_signal_reboot(const char *key, const char *value, - } - - static int set_config_signal_stop(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int sig_n; - -@@ -1250,7 +1252,7 @@ static int set_config_signal_stop(const char *key, const char *value, - } - - static int __set_config_cgroup_controller(const char *key, const char *value, -- struct lxc_conf *lxc_conf, int version) -+ struct lxc_conf *lxc_conf, int version) - { - const char *subkey, *token; - size_t token_len; -@@ -1317,22 +1319,22 @@ out: - } - - static int set_config_cgroup_controller(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - return __set_config_cgroup_controller(key, value, lxc_conf, -- CGROUP_SUPER_MAGIC); -+ CGROUP_SUPER_MAGIC); - } - - static int set_config_cgroup2_controller(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - return __set_config_cgroup_controller(key, value, lxc_conf, -- CGROUP2_SUPER_MAGIC); -+ CGROUP2_SUPER_MAGIC); - } - - - static int set_config_cgroup_dir(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - if (lxc_config_value_empty(value)) - return clr_config_cgroup_dir(key, lxc_conf, NULL); -@@ -1341,7 +1343,7 @@ static int set_config_cgroup_dir(const char *key, const char *value, - } - - static int set_config_prlimit(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_list *iter; - struct rlimit limit; -@@ -1434,7 +1436,7 @@ on_error: - } - - static int set_config_sysctl(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_list *iter; - char *replace_value = NULL; -@@ -1502,7 +1504,7 @@ on_error: - } - - static int set_config_proc(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - const char *subkey; - struct lxc_list *proclist = NULL; -@@ -1552,7 +1554,7 @@ on_error: - } - - static int set_config_idmaps(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - unsigned long hostid, nsid, range; - char type; -@@ -1612,7 +1614,7 @@ on_error: - } - - static int set_config_mount_fstab(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - if (lxc_config_value_empty(value)) { - clr_config_mount_fstab(key, lxc_conf, NULL); -@@ -1623,7 +1625,7 @@ static int set_config_mount_fstab(const char *key, const char *value, - } - - static int set_config_mount_auto(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - char *autos, *token; - int i; -@@ -1633,34 +1635,34 @@ static int set_config_mount_auto(const char *key, const char *value, - int mask; - int flag; - } allowed_auto_mounts[] = { -- { "proc", LXC_AUTO_PROC_MASK, LXC_AUTO_PROC_MIXED }, -- { "proc:mixed", LXC_AUTO_PROC_MASK, LXC_AUTO_PROC_MIXED }, -- { "proc:rw", LXC_AUTO_PROC_MASK, LXC_AUTO_PROC_RW }, -- { "sys", LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_MIXED }, -- { "sys:ro", LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_RO }, -- { "sys:mixed", LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_MIXED }, -- { "sys:rw", LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_RW }, -- { "cgroup", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_NOSPEC }, -- { "cgroup:mixed", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_MIXED }, -- { "cgroup:ro", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_RO }, -- { "cgroup:rw", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_RW }, -- { "cgroup:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_NOSPEC | LXC_AUTO_CGROUP_FORCE }, -- { "cgroup:mixed:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_MIXED | LXC_AUTO_CGROUP_FORCE }, -- { "cgroup:ro:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_RO | LXC_AUTO_CGROUP_FORCE }, -- { "cgroup:rw:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_RW | LXC_AUTO_CGROUP_FORCE }, -- { "cgroup-full", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_NOSPEC }, -- { "cgroup-full:mixed", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_MIXED }, -- { "cgroup-full:ro", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_RO }, -- { "cgroup-full:rw", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_RW }, -- { "cgroup-full:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_NOSPEC | LXC_AUTO_CGROUP_FORCE }, -- { "cgroup-full:mixed:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_MIXED | LXC_AUTO_CGROUP_FORCE }, -- { "cgroup-full:ro:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_RO | LXC_AUTO_CGROUP_FORCE }, -- { "cgroup-full:rw:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_RW | LXC_AUTO_CGROUP_FORCE }, -- /* For adding anything that is just a single on/off, but has no -- * options: keep mask and flag identical and just define the enum -- * value as an unused bit so far -- */ -- { NULL, 0, 0 } -+ { "proc", LXC_AUTO_PROC_MASK, LXC_AUTO_PROC_MIXED }, -+ { "proc:mixed", LXC_AUTO_PROC_MASK, LXC_AUTO_PROC_MIXED }, -+ { "proc:rw", LXC_AUTO_PROC_MASK, LXC_AUTO_PROC_RW }, -+ { "sys", LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_MIXED }, -+ { "sys:ro", LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_RO }, -+ { "sys:mixed", LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_MIXED }, -+ { "sys:rw", LXC_AUTO_SYS_MASK, LXC_AUTO_SYS_RW }, -+ { "cgroup", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_NOSPEC }, -+ { "cgroup:mixed", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_MIXED }, -+ { "cgroup:ro", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_RO }, -+ { "cgroup:rw", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_RW }, -+ { "cgroup:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_NOSPEC | LXC_AUTO_CGROUP_FORCE }, -+ { "cgroup:mixed:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_MIXED | LXC_AUTO_CGROUP_FORCE }, -+ { "cgroup:ro:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_RO | LXC_AUTO_CGROUP_FORCE }, -+ { "cgroup:rw:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_RW | LXC_AUTO_CGROUP_FORCE }, -+ { "cgroup-full", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_NOSPEC }, -+ { "cgroup-full:mixed", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_MIXED }, -+ { "cgroup-full:ro", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_RO }, -+ { "cgroup-full:rw", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_RW }, -+ { "cgroup-full:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_NOSPEC | LXC_AUTO_CGROUP_FORCE }, -+ { "cgroup-full:mixed:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_MIXED | LXC_AUTO_CGROUP_FORCE }, -+ { "cgroup-full:ro:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_RO | LXC_AUTO_CGROUP_FORCE }, -+ { "cgroup-full:rw:force", LXC_AUTO_CGROUP_MASK, LXC_AUTO_CGROUP_FULL_RW | LXC_AUTO_CGROUP_FORCE }, -+ /* For adding anything that is just a single on/off, but has no -+ * options: keep mask and flag identical and just define the enum -+ * value as an unused bit so far -+ */ -+ { NULL, 0, 0 } - }; - - if (lxc_config_value_empty(value)) { -@@ -1696,7 +1698,7 @@ on_error: - } - - static int set_config_mount(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - char *mntelem; - struct lxc_list *mntlist; -@@ -1721,7 +1723,7 @@ static int set_config_mount(const char *key, const char *value, - } - - static int set_config_cap_keep(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - char *keepcaps, *token; - struct lxc_list *keeplist; -@@ -1763,7 +1765,7 @@ on_error: - } - - static int set_config_cap_drop(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - char *dropcaps, *token; - struct lxc_list *droplist; -@@ -1793,7 +1795,7 @@ static int set_config_cap_drop(const char *key, const char *value, - lxc_list_add_tail(&lxc_conf->caps, droplist); - } - -- ret = 0; -+ ret = 0; - - on_error: - free(dropcaps); -@@ -1802,13 +1804,13 @@ on_error: - } - - static int set_config_console_path(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - return set_config_path_item(&lxc_conf->console.path, value); - } - - static int set_config_console_rotate(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - if (lxc_config_value_empty(value)) { - lxc_conf->console.log_rotate = 0; -@@ -1831,13 +1833,13 @@ static int set_config_console_rotate(const char *key, const char *value, - } - - static int set_config_console_logfile(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - return set_config_path_item(&lxc_conf->console.log_path, value); - } - - static int set_config_console_buffer_size(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int ret; - int64_t size; -@@ -1885,7 +1887,7 @@ static int set_config_console_buffer_size(const char *key, const char *value, - } - - static int set_config_console_size(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int ret; - int64_t size; -@@ -1942,7 +1944,7 @@ int append_unexp_config_line(const char *line, struct lxc_conf *conf) - linelen = strlen(line); - while (conf->unexpanded_alloced <= len + linelen + 2) { - char *tmp = realloc(conf->unexpanded_config, -- conf->unexpanded_alloced + 1024); -+ conf->unexpanded_alloced + 1024); - if (!tmp) - return -1; - -@@ -2007,7 +2009,7 @@ out: - } - - static int set_config_includefiles(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - if (lxc_config_value_empty(value)) { - clr_config_includefiles(key, lxc_conf, NULL); -@@ -2021,7 +2023,7 @@ static int set_config_includefiles(const char *key, const char *value, - } - - static int set_config_rootfs_path(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int ret; - char *dup, *tmp; -@@ -2064,13 +2066,13 @@ static int set_config_rootfs_path(const char *key, const char *value, - } - - static int set_config_rootfs_mount(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - return set_config_path_item(&lxc_conf->rootfs.mount, value); - } - - static int set_config_rootfs_options(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int ret; - unsigned long mflags = 0, pflags = 0; -@@ -2095,7 +2097,7 @@ static int set_config_rootfs_options(const char *key, const char *value, - } - - static int set_config_uts_name(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct utsname *utsname; - -@@ -2121,7 +2123,7 @@ static int set_config_uts_name(const char *key, const char *value, - } - - static int set_config_namespace_clone(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - char *ns, *token; - int cloneflag = 0; -@@ -2156,7 +2158,7 @@ static int set_config_namespace_clone(const char *key, const char *value, - } - - static int set_config_namespace_keep(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - char *ns, *token; - int cloneflag = 0; -@@ -2191,7 +2193,7 @@ static int set_config_namespace_keep(const char *key, const char *value, - } - - static int set_config_namespace_share(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int ns_idx; - const char *namespace; -@@ -2209,7 +2211,7 @@ static int set_config_namespace_share(const char *key, const char *value, - - /* 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) -+ struct lxc_conf *lxc_conf, void *data) - { - int ret = 0; - char *tmp = NULL; -@@ -2219,8 +2221,8 @@ static int set_config_init_args(const char *key, const char *value, - if (ret || !new_value) - return ret; - -- tmp = realloc(lxc_conf->init_argv, (lxc_conf->init_argc + 1) * sizeof(char *)); -- if (!tmp) { -+ if (lxc_mem_realloc((void **)&tmp, (lxc_conf->init_argc + 1) * sizeof(char *), lxc_conf->init_argv, -+ (lxc_conf->init_argc) * sizeof(char *)) != 0) { - ERROR("Out of memory"); - free(new_value); - return -1; -@@ -2236,9 +2238,10 @@ static int set_config_init_args(const char *key, const char *value, - - /* 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) -+ struct lxc_conf *lxc_conf, void *data) - { -- char *groups, *token; -+ char *groups = NULL; -+ char *token = NULL; - int ret = -1; - - if (lxc_config_value_empty(value)) -@@ -2252,9 +2255,9 @@ static int set_config_init_groups(const char *key, const char *value, - * split these caps in a single element for the list. - */ - lxc_iterate_parts(token, groups, " \t") { -- gid_t *tmp; -- tmp = realloc(lxc_conf->init_groups, (lxc_conf->init_groups_len + 1) * sizeof(gid_t)); -- if (!tmp) { -+ 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; - } -@@ -2273,93 +2276,93 @@ on_error: - - /* 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[PATH_MAX] = {0}; -- char type[3] = {0}; -- char *replace_value = NULL; -- mode_t filemode = 0; -- struct lxc_list *iter; -- 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, "%[^:]:%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 = strdup(type); -- if (!replace_value) -- return -1; -- -- 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) -- goto on_error; -- -- lxc_list_init(dev_list); -- -- dev_elem = malloc(sizeof(*dev_elem)); -- if (!dev_elem) -- goto on_error; -- memset(dev_elem, 0, sizeof(*dev_elem)); -- -- dev_elem->name = strdup(name); -- if (!dev_elem->name) -- goto on_error; -- -- dev_elem->type = strdup(type); -- if (!dev_elem->type) -- goto on_error; -- -- dev_elem->file_mode = filemode; -- dev_elem->maj = major; -- dev_elem->min = minor; -- -- lxc_list_add_elem(dev_list, dev_elem); -- -- lxc_list_add_tail(&lxc_conf->populate_devs, dev_list); -- -- return 0; -+ 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[PATH_MAX] = {0}; -+ 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, "%[^:]:%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 = strdup(type); -+ if (!replace_value) -+ return -1; -+ -+ 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) -+ goto on_error; -+ -+ lxc_list_init(dev_list); -+ -+ dev_elem = malloc(sizeof(*dev_elem)); -+ if (!dev_elem) -+ goto on_error; -+ memset(dev_elem, 0, sizeof(*dev_elem)); -+ -+ dev_elem->name = strdup(name); -+ if (!dev_elem->name) -+ goto on_error; -+ -+ dev_elem->type = strdup(type); -+ if (!dev_elem->type) -+ goto on_error; -+ -+ dev_elem->file_mode = filemode; -+ dev_elem->maj = major; -+ dev_elem->min = minor; -+ -+ 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; -+ free(dev_list); -+ if (dev_elem) { -+ free(dev_elem->name); -+ free(dev_elem->type); -+ free(dev_elem); -+ } -+ return -1; - } - - /* 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_conf *lxc_conf, void *data) - { - struct lxc_list *list_item = NULL; - -@@ -2387,7 +2390,7 @@ on_error: - - /* 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_conf *lxc_conf, void *data) - { - struct lxc_list *list_item = NULL; - -@@ -2416,7 +2419,7 @@ on_error: - - /* isulad: set config for umask */ - static int set_config_umask(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - if (lxc_config_value_empty(value)) { - ERROR("Empty umask"); -@@ -2437,7 +2440,7 @@ static int set_config_umask(const char *key, const char *value, - - /* isulad: set config for systemd */ - static int set_config_systemd(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - if (lxc_config_value_empty(value)) { - ERROR("Empty umask"); -@@ -2673,32 +2676,32 @@ signed long lxc_config_parse_arch(const char *arch) - char *name; - unsigned long per; - } pername[] = { -- { "arm", PER_LINUX32 }, -- { "armel", PER_LINUX32 }, -- { "armhf", PER_LINUX32 }, -- { "armv7l", PER_LINUX32 }, -- { "athlon", PER_LINUX32 }, -- { "i386", PER_LINUX32 }, -- { "i486", PER_LINUX32 }, -- { "i586", PER_LINUX32 }, -- { "i686", PER_LINUX32 }, -- { "linux32", PER_LINUX32 }, -- { "mips", PER_LINUX32 }, -- { "mipsel", PER_LINUX32 }, -- { "ppc", PER_LINUX32 }, -- { "powerpc", PER_LINUX32 }, -- { "x86", PER_LINUX32 }, -- { "amd64", PER_LINUX }, -- { "arm64", PER_LINUX }, -- { "linux64", PER_LINUX }, -- { "mips64", PER_LINUX }, -- { "mips64el", PER_LINUX }, -- { "ppc64", PER_LINUX }, -- { "ppc64el", PER_LINUX }, -- { "ppc64le", PER_LINUX }, -- { "powerpc64", PER_LINUX }, -- { "s390x", PER_LINUX }, -- { "x86_64", PER_LINUX }, -+ { "arm", PER_LINUX32 }, -+ { "armel", PER_LINUX32 }, -+ { "armhf", PER_LINUX32 }, -+ { "armv7l", PER_LINUX32 }, -+ { "athlon", PER_LINUX32 }, -+ { "i386", PER_LINUX32 }, -+ { "i486", PER_LINUX32 }, -+ { "i586", PER_LINUX32 }, -+ { "i686", PER_LINUX32 }, -+ { "linux32", PER_LINUX32 }, -+ { "mips", PER_LINUX32 }, -+ { "mipsel", PER_LINUX32 }, -+ { "ppc", PER_LINUX32 }, -+ { "powerpc", PER_LINUX32 }, -+ { "x86", PER_LINUX32 }, -+ { "amd64", PER_LINUX }, -+ { "arm64", PER_LINUX }, -+ { "linux64", PER_LINUX }, -+ { "mips64", PER_LINUX }, -+ { "mips64el", PER_LINUX }, -+ { "ppc64", PER_LINUX }, -+ { "ppc64el", PER_LINUX }, -+ { "ppc64le", PER_LINUX }, -+ { "powerpc64", PER_LINUX }, -+ { "s390x", PER_LINUX }, -+ { "x86_64", PER_LINUX }, - }; - size_t len = sizeof(pername) / sizeof(pername[0]); - -@@ -2769,7 +2772,7 @@ int write_config(int fd, const struct lxc_conf *conf) - } - - bool do_append_unexp_config_line(struct lxc_conf *conf, const char *key, -- const char *v) -+ const char *v) - { - int ret; - size_t len; -@@ -2793,7 +2796,7 @@ bool do_append_unexp_config_line(struct lxc_conf *conf, const char *key, - } - - void clear_unexp_config_line(struct lxc_conf *conf, const char *key, -- bool rm_subkeys) -+ bool rm_subkeys) - { - char *lend; - char *lstart = conf->unexpanded_config; -@@ -2835,8 +2838,8 @@ void clear_unexp_config_line(struct lxc_conf *conf, const char *key, - } - - bool clone_update_unexp_ovl_paths(struct lxc_conf *conf, const char *oldpath, -- const char *newpath, const char *oldname, -- const char *newname, const char *ovldir) -+ const char *newpath, const char *oldname, -+ const char *newname, const char *ovldir) - { - int ret; - char *lend, *newdir, *olddir, *p, *q; -@@ -2847,14 +2850,14 @@ bool clone_update_unexp_ovl_paths(struct lxc_conf *conf, const char *oldpath, - olddirlen = strlen(ovldir) + strlen(oldpath) + strlen(oldname) + 2; - olddir = alloca(olddirlen + 1); - ret = snprintf(olddir, olddirlen + 1, "%s=%s/%s", ovldir, oldpath, -- oldname); -+ oldname); - if (ret < 0 || ret >= olddirlen + 1) - return false; - - newdirlen = strlen(ovldir) + strlen(newpath) + strlen(newname) + 2; - newdir = alloca(newdirlen + 1); - ret = snprintf(newdir, newdirlen + 1, "%s=%s/%s", ovldir, newpath, -- newname); -+ newname); - if (ret < 0 || ret >= newdirlen + 1) - return false; - -@@ -2935,7 +2938,7 @@ bool clone_update_unexp_ovl_paths(struct lxc_conf *conf, const char *oldpath, - lend += diff; - } - -- next: -+next: - lstart = lend; - } - -@@ -2943,8 +2946,8 @@ bool clone_update_unexp_ovl_paths(struct lxc_conf *conf, const char *oldpath, - } - - bool clone_update_unexp_hooks(struct lxc_conf *conf, const char *oldpath, -- const char *newpath, const char *oldname, -- const char *newname) -+ const char *newpath, const char *oldname, -+ const char *newname) - { - int ret; - char *lend, *newdir, *olddir, *p; -@@ -3029,7 +3032,7 @@ bool clone_update_unexp_hooks(struct lxc_conf *conf, const char *oldpath, - lend += diff; - } - -- next: -+next: - lstart = lend; - } - -@@ -3117,7 +3120,7 @@ bool network_new_hwaddrs(struct lxc_conf *conf) - } - - static int set_config_ephemeral(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - if (lxc_config_value_empty(value)) { - lxc_conf->ephemeral = 0; -@@ -3134,7 +3137,7 @@ static int set_config_ephemeral(const char *key, const char *value, - } - - static int set_config_log_syslog(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int facility; - -@@ -3156,7 +3159,7 @@ static int set_config_log_syslog(const char *key, const char *value, - } - - static int set_config_no_new_privs(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - unsigned int v; - -@@ -3178,7 +3181,7 @@ static int set_config_no_new_privs(const char *key, const char *value, - - /* Callbacks to get configuration items. */ - static int get_config_personality(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int fulllen = 0; - -@@ -3206,53 +3209,53 @@ static int get_config_personality(const char *key, char *retv, int inlen, - } - - static int get_config_pty_max(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_size_t(c, retv, inlen, c->pty_max); - } - - static int get_config_tty_max(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_size_t(c, retv, inlen, c->ttys.max); - } - - /* isulad add: get umask value*/ - static int get_config_umask(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_size_t(c, retv, inlen, c->umask); - } - - /* isulad add: get systemd value*/ - static int get_config_systemd(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->systemd); - } - - static int get_config_tty_dir(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->ttys.dir); - } - - static int get_config_apparmor_profile(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->lsm_aa_profile); - } - - static int get_config_apparmor_allow_incomplete(const char *key, char *retv, -- int inlen, struct lxc_conf *c, -- void *data) -+ int inlen, struct lxc_conf *c, -+ void *data) - { - return lxc_get_conf_int(c, retv, inlen, -- c->lsm_aa_allow_incomplete); -+ c->lsm_aa_allow_incomplete); - } - - static int get_config_selinux_context(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->lsm_se_context); - } -@@ -3266,8 +3269,8 @@ static int get_config_selinux_context(const char *key, char *retv, int inlen, - * 'lxc.cgroup.subsystem.key = value' format. - */ - static int __get_config_cgroup_controller(const char *key, char *retv, -- int inlen, struct lxc_conf *c, -- int version) -+ int inlen, struct lxc_conf *c, -+ int version) - { - int len; - size_t namespaced_token_len; -@@ -3308,7 +3311,7 @@ static int __get_config_cgroup_controller(const char *key, char *retv, - continue; - - strprint(retv, inlen, "%s.%s = %s\n", global_token, -- cg->subsystem, cg->value); -+ cg->subsystem, cg->value); - } else if (strcmp(cg->subsystem, key) == 0) { - strprint(retv, inlen, "%s\n", cg->value); - } -@@ -3318,21 +3321,21 @@ static int __get_config_cgroup_controller(const char *key, char *retv, - } - - static int get_config_cgroup_controller(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return __get_config_cgroup_controller(key, retv, inlen, c, -- CGROUP_SUPER_MAGIC); -+ CGROUP_SUPER_MAGIC); - } - - static int get_config_cgroup2_controller(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return __get_config_cgroup_controller(key, retv, inlen, c, -- CGROUP2_SUPER_MAGIC); -+ CGROUP2_SUPER_MAGIC); - } - - static int get_config_cgroup_dir(const char *key, char *retv, int inlen, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int len; - int fulllen = 0; -@@ -3348,31 +3351,31 @@ static int get_config_cgroup_dir(const char *key, char *retv, int inlen, - } - - static int get_config_idmaps(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - struct lxc_list *it; - int len, listlen, ret; - int fulllen = 0; --/* "u 1000 1000000 65536" -- * -- * let's render this as -- * -- * sizeof(char) -- * + -- * sizeof(" ") -- * + -- * sizeof(uint32_t) -- * + -- * sizeof(" ") -- * + -- * sizeof(uint32_t) -- * + -- * sizeof(" ") -- * + -- * sizeof(uint32_t) -- * + -- * \0 -- */ -+ /* "u 1000 1000000 65536" -+ * -+ * let's render this as -+ * -+ * sizeof(char) -+ * + -+ * sizeof(" ") -+ * + -+ * sizeof(uint32_t) -+ * + -+ * sizeof(" ") -+ * + -+ * sizeof(uint32_t) -+ * + -+ * sizeof(" ") -+ * + -+ * sizeof(uint32_t) -+ * + -+ * \0 -+ */ - #define __LXC_IDMAP_STR_BUF (3 * INTTYPE_TO_STRLEN(uint32_t) + 3 + 1 + 1) - char buf[__LXC_IDMAP_STR_BUF]; - -@@ -3385,8 +3388,8 @@ static int get_config_idmaps(const char *key, char *retv, int inlen, - lxc_list_for_each(it, &c->id_map) { - struct id_map *map = it->elem; - ret = snprintf(buf, __LXC_IDMAP_STR_BUF, "%c %lu %lu %lu", -- (map->idtype == ID_TYPE_UID) ? 'u' : 'g', -- map->nsid, map->hostid, map->range); -+ (map->idtype == ID_TYPE_UID) ? 'u' : 'g', -+ map->nsid, map->hostid, map->range); - if (ret < 0 || ret >= __LXC_IDMAP_STR_BUF) - return -1; - -@@ -3397,7 +3400,7 @@ static int get_config_idmaps(const char *key, char *retv, int inlen, - } - - static int get_config_log_level(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - const char *v; - v = lxc_log_priority_to_string(c->loglevel); -@@ -3405,19 +3408,19 @@ static int get_config_log_level(const char *key, char *retv, int inlen, - } - - static int get_config_log_file(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->logfile); - } - - static int get_config_mount_fstab(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->fstab); - } - - static int get_config_mount_auto(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len, fulllen = 0; - const char *sep = ""; -@@ -3493,7 +3496,7 @@ static int get_config_mount_auto(const char *key, char *retv, int inlen, - } - - static int get_config_mount(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len, fulllen = 0; - struct lxc_list *it; -@@ -3511,33 +3514,33 @@ static int get_config_mount(const char *key, char *retv, int inlen, - } - - static int get_config_rootfs_path(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->rootfs.path); - } - - static int get_config_rootfs_mount(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->rootfs.mount); - } - - static int get_config_rootfs_options(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->rootfs.options); - } - - static int get_config_uts_name(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str( -- retv, inlen, -- c->utsname ? c->utsname->nodename : NULL); -+ retv, inlen, -+ c->utsname ? c->utsname->nodename : NULL); - } - - static int get_config_hooks(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - char *subkey; - int len, fulllen = 0, found = -1; -@@ -3578,13 +3581,13 @@ static int get_config_hooks(const char *key, char *retv, int inlen, - } - - static int get_config_hooks_version(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_int(c, retv, inlen, c->hooks_version); - } - - static int get_config_net(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len, fulllen = 0; - struct lxc_list *it; -@@ -3604,7 +3607,7 @@ static int get_config_net(const char *key, char *retv, int inlen, - } - - static int get_config_cap_drop(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len, fulllen = 0; - struct lxc_list *it; -@@ -3622,7 +3625,7 @@ static int get_config_cap_drop(const char *key, char *retv, int inlen, - } - - static int get_config_cap_keep(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len, fulllen = 0; - struct lxc_list *it; -@@ -3640,70 +3643,70 @@ static int get_config_cap_keep(const char *key, char *retv, int inlen, - } - - static int get_config_console_path(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->console.path); - } - - static int get_config_console_logfile(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->console.log_path); - } - - static int get_config_console_rotate(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_int(c, retv, inlen, c->console.log_rotate); - } - - - static int get_config_console_buffer_size(const char *key, char *retv, -- int inlen, struct lxc_conf *c, -- void *data) -+ int inlen, struct lxc_conf *c, -+ void *data) - { - return lxc_get_conf_uint64(c, retv, inlen, c->console.buffer_size); - } - - static int get_config_console_size(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_uint64(c, retv, inlen, c->console.log_size); - } - - - static int get_config_seccomp_profile(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->seccomp); - } - - static int get_config_autodev(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_int(c, retv, inlen, c->autodev); - } - - static int get_config_signal_halt(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_int(c, retv, inlen, c->haltsignal); - } - - static int get_config_signal_reboot(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_int(c, retv, inlen, c->rebootsignal); - } - - static int get_config_signal_stop(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_int(c, retv, inlen, c->stopsignal); - } - - static int get_config_start(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - if (strcmp(key + 10, "auto") == 0) - return lxc_get_conf_int(c, retv, inlen, c->start_auto); -@@ -3716,19 +3719,19 @@ static int get_config_start(const char *key, char *retv, int inlen, - } - - static int get_config_log_syslog(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->syslog); - } - - static int get_config_monitor(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_int(c, retv, inlen, c->monitor_unshare); - } - - static int get_config_group(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len, fulllen = 0; - struct lxc_list *it; -@@ -3746,7 +3749,7 @@ static int get_config_group(const char *key, char *retv, int inlen, - } - - static int get_config_environment(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len, fulllen = 0; - struct lxc_list *it; -@@ -3765,43 +3768,43 @@ static int get_config_environment(const char *key, char *retv, int inlen, - } - - static int get_config_execute_cmd(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->execute_cmd); - } - - static int get_config_init_cmd(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->init_cmd); - } - - static int get_config_init_cwd(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_str(retv, inlen, c->init_cwd); - } - - static int get_config_init_uid(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_int(c, retv, inlen, c->init_uid); - } - - static int get_config_init_gid(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_int(c, retv, inlen, c->init_gid); - } - - static int get_config_ephemeral(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_int(c, retv, inlen, c->ephemeral); - } - - static int get_config_no_new_privs(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_get_conf_int(c, retv, inlen, c->no_new_privs); - } -@@ -3811,7 +3814,7 @@ static int get_config_no_new_privs(const char *key, char *retv, int inlen, - * printed, in 'lxc.prlimit.resource = value' format. - */ - static int get_config_prlimit(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int fulllen = 0, len; - bool get_all = false; -@@ -3840,7 +3843,7 @@ static int get_config_prlimit(const char *key, char *retv, int inlen, - partlen = STRLITERALLEN("unlimited"); - } else { - partlen = sprintf(buf, "%" PRIu64, -- (uint64_t)lim->limit.rlim_cur); -+ (uint64_t)lim->limit.rlim_cur); - } - - if (lim->limit.rlim_cur != lim->limit.rlim_max) { -@@ -3849,12 +3852,12 @@ static int get_config_prlimit(const char *key, char *retv, int inlen, - STRLITERALLEN(":unlimited") + 1); - else - sprintf(buf + partlen, ":%" PRIu64, -- (uint64_t)lim->limit.rlim_max); -+ (uint64_t)lim->limit.rlim_max); - } - - if (get_all) { - strprint(retv, inlen, "lxc.prlimit.%s = %s\n", -- lim->resource, buf); -+ lim->resource, buf); - } else if (strcmp(lim->resource, key) == 0) { - strprint(retv, inlen, "%s", buf); - } -@@ -3868,7 +3871,7 @@ static int get_config_prlimit(const char *key, char *retv, int inlen, - * entries will be printed, in 'lxc.sysctl.key = value' format. - */ - static int get_config_sysctl(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - struct lxc_list *it; -@@ -3891,7 +3894,7 @@ static int get_config_sysctl(const char *key, char *retv, int inlen, - struct lxc_sysctl *elem = it->elem; - if (get_all) { - strprint(retv, inlen, "lxc.sysctl.%s = %s\n", elem->key, -- elem->value); -+ elem->value); - } else if (strcmp(elem->key, key) == 0) { - strprint(retv, inlen, "%s", elem->value); - } -@@ -3901,7 +3904,7 @@ static int get_config_sysctl(const char *key, char *retv, int inlen, - } - - static int get_config_proc(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - struct lxc_list *it; - int len; -@@ -3935,7 +3938,7 @@ static int get_config_proc(const char *key, char *retv, int inlen, - } - - static int get_config_namespace_clone(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int i, len; - int fulllen = 0; -@@ -3954,7 +3957,7 @@ static int get_config_namespace_clone(const char *key, char *retv, int inlen, - } - - static int get_config_namespace_keep(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int i, len; - int fulllen = 0; -@@ -3973,7 +3976,7 @@ static int get_config_namespace_keep(const char *key, char *retv, int inlen, - } - - static int get_config_namespace_share(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len, ns_idx; - const char *namespace; -@@ -3996,7 +3999,7 @@ static int get_config_namespace_share(const char *key, char *retv, int inlen, - - /* isulad: get config init args */ - static int get_config_init_args(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int i, len, fulllen = 0; - -@@ -4006,7 +4009,7 @@ static int get_config_init_args(const char *key, char *retv, int inlen, - memset(retv, 0, inlen); - - for (i = 0; i < c->init_argc; i++) { -- strprint(retv, inlen, "%s", c->init_argv[i]); -+ strprint(retv, inlen, "%s", c->init_argv[i]); - } - - return fulllen; -@@ -4014,7 +4017,7 @@ static int get_config_init_args(const char *key, char *retv, int inlen, - - /* isulad: get config init groups */ - static int get_config_init_groups(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int i, len, fulllen = 0; - -@@ -4024,7 +4027,7 @@ static int get_config_init_groups(const char *key, char *retv, int inlen, - memset(retv, 0, inlen); - - for (i = 0; i < c->init_groups_len; i++) { -- strprint(retv, inlen, "%u\n", c->init_groups[i]); -+ strprint(retv, inlen, "%u\n", c->init_groups[i]); - } - - return fulllen; -@@ -4036,10 +4039,10 @@ static int get_config_init_groups(const char *key, char *retv, int inlen, - * 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) -+ struct lxc_conf *c, void *data) - { - int len; -- struct lxc_list *it; -+ struct lxc_list *it = NULL; - int fulllen = 0; - - if (!retv) -@@ -4050,8 +4053,8 @@ static int get_config_populate_device(const char *key, char *retv, int 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); -+ elem->name, elem->type, elem->maj, -+ elem->min, elem->file_mode, elem->uid, elem->gid); - } - - return fulllen; -@@ -4059,10 +4062,10 @@ static int get_config_populate_device(const char *key, char *retv, int inlen, - - // 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) -+ struct lxc_conf *c, void *data) - { - int len, fulllen = 0; -- struct lxc_list *it; -+ struct lxc_list *it = NULL; - - if (!retv) - inlen = 0; -@@ -4078,10 +4081,10 @@ static int get_config_rootfs_masked_paths(const char *key, char *retv, int inlen - - // 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) -+ struct lxc_conf *c, void *data) - { - int len, fulllen = 0; -- struct lxc_list *it; -+ struct lxc_list *it = NULL; - - if (!retv) - inlen = 0; -@@ -4097,28 +4100,28 @@ static int get_config_rootfs_ro_paths(const char *key, char *retv, int inlen, - - /* Callbacks to clear config items. */ - static inline int clr_config_personality(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->personality = -1; - return 0; - } - - static inline int clr_config_pty_max(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->pty_max = 0; - return 0; - } - - static inline int clr_config_tty_max(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->ttys.tty = 0; - return 0; - } - - static inline int clr_config_tty_dir(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - free(c->ttys.dir); - c->ttys.dir = NULL; -@@ -4126,7 +4129,7 @@ static inline int clr_config_tty_dir(const char *key, struct lxc_conf *c, - } - - static inline int clr_config_apparmor_profile(const char *key, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - free(c->lsm_aa_profile); - c->lsm_aa_profile = NULL; -@@ -4134,15 +4137,15 @@ static inline int clr_config_apparmor_profile(const char *key, - } - - static inline int clr_config_apparmor_allow_incomplete(const char *key, -- struct lxc_conf *c, -- void *data) -+ struct lxc_conf *c, -+ void *data) - { - c->lsm_aa_allow_incomplete = 0; - return 0; - } - - static inline int clr_config_selinux_context(const char *key, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - free(c->lsm_se_context); - c->lsm_se_context = NULL; -@@ -4150,19 +4153,19 @@ static inline int clr_config_selinux_context(const char *key, - } - - static inline int clr_config_cgroup_controller(const char *key, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_clear_cgroups(c, key, CGROUP_SUPER_MAGIC); - } - - static inline int clr_config_cgroup2_controller(const char *key, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return lxc_clear_cgroups(c, key, CGROUP2_SUPER_MAGIC); - } - - static int clr_config_cgroup_dir(const char *key, struct lxc_conf *lxc_conf, -- void *data) -+ void *data) - { - if (lxc_conf->cgroup_meta.dir) { - free(lxc_conf->cgroup_meta.dir); -@@ -4173,20 +4176,20 @@ static int clr_config_cgroup_dir(const char *key, struct lxc_conf *lxc_conf, - } - - static inline int clr_config_idmaps(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - return lxc_clear_idmaps(c); - } - - static inline int clr_config_log_level(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->loglevel = LXC_LOG_LEVEL_NOTSET; - return 0; - } - - static inline int clr_config_log_file(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - free(c->logfile); - c->logfile = NULL; -@@ -4194,19 +4197,19 @@ static inline int clr_config_log_file(const char *key, struct lxc_conf *c, - } - - static inline int clr_config_mount(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - return lxc_clear_mount_entries(c); - } - - static inline int clr_config_mount_auto(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - return lxc_clear_automounts(c); - } - - static inline int clr_config_mount_fstab(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - free(c->fstab); - c->fstab = NULL; -@@ -4214,7 +4217,7 @@ static inline int clr_config_mount_fstab(const char *key, struct lxc_conf *c, - } - - static inline int clr_config_rootfs_path(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - free(c->rootfs.path); - c->rootfs.path = NULL; -@@ -4222,7 +4225,7 @@ static inline int clr_config_rootfs_path(const char *key, struct lxc_conf *c, - } - - static inline int clr_config_rootfs_mount(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - free(c->rootfs.mount); - c->rootfs.mount = NULL; -@@ -4230,7 +4233,7 @@ static inline int clr_config_rootfs_mount(const char *key, struct lxc_conf *c, - } - - static inline int clr_config_rootfs_options(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - free(c->rootfs.options); - c->rootfs.options = NULL; -@@ -4242,7 +4245,7 @@ static inline int clr_config_rootfs_options(const char *key, struct lxc_conf *c, - } - - static inline int clr_config_uts_name(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - free(c->utsname); - c->utsname = NULL; -@@ -4250,13 +4253,13 @@ static inline int clr_config_uts_name(const char *key, struct lxc_conf *c, - } - - static inline int clr_config_hooks(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - return lxc_clear_hooks(c, key); - } - - static inline int clr_config_hooks_version(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - /* default to legacy hooks version */ - c->hooks_version = 0; -@@ -4264,7 +4267,7 @@ static inline int clr_config_hooks_version(const char *key, struct lxc_conf *c, - } - - static inline int clr_config_net(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - lxc_free_networks(&c->network); - -@@ -4272,19 +4275,19 @@ static inline int clr_config_net(const char *key, struct lxc_conf *c, - } - - static inline int clr_config_cap_drop(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - return lxc_clear_config_caps(c); - } - - static inline int clr_config_cap_keep(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - return lxc_clear_config_keepcaps(c); - } - - static inline int clr_config_console_path(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - free(c->console.path); - c->console.path = NULL; -@@ -4292,7 +4295,7 @@ static inline int clr_config_console_path(const char *key, struct lxc_conf *c, - } - - static inline int clr_config_console_logfile(const char *key, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - free(c->console.log_path); - c->console.log_path = NULL; -@@ -4300,28 +4303,28 @@ static inline int clr_config_console_logfile(const char *key, - } - - static inline int clr_config_console_rotate(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->console.log_rotate = 0; - return 0; - } - - static inline int clr_config_console_buffer_size(const char *key, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - c->console.buffer_size = 0; - return 0; - } - - static inline int clr_config_console_size(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->console.log_size = 0; - return 0; - } - - static inline int clr_config_seccomp_profile(const char *key, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - free(c->seccomp); - c->seccomp = NULL; -@@ -4329,35 +4332,35 @@ static inline int clr_config_seccomp_profile(const char *key, - } - - static inline int clr_config_autodev(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->autodev = 1; - return 0; - } - - static inline int clr_config_signal_halt(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->haltsignal = 0; - return 0; - } - - static inline int clr_config_signal_reboot(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->rebootsignal = 0; - return 0; - } - - static inline int clr_config_signal_stop(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->stopsignal = 0; - return 0; - } - - static inline int clr_config_start(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - if (strcmp(key + 10, "auto") == 0) - c->start_auto = 0; -@@ -4370,7 +4373,7 @@ static inline int clr_config_start(const char *key, struct lxc_conf *c, - } - - static inline int clr_config_log_syslog(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - free(c->syslog); - c->syslog = NULL; -@@ -4378,26 +4381,26 @@ static inline int clr_config_log_syslog(const char *key, struct lxc_conf *c, - } - - static inline int clr_config_monitor(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->monitor_unshare = 0; - return 0; - } - - static inline int clr_config_group(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - return lxc_clear_groups(c); - } - - static inline int clr_config_environment(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - return lxc_clear_environment(c); - } - - static inline int clr_config_execute_cmd(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - free(c->execute_cmd); - c->execute_cmd = NULL; -@@ -4405,7 +4408,7 @@ static inline int clr_config_execute_cmd(const char *key, struct lxc_conf *c, - } - - static inline int clr_config_init_cmd(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - free(c->init_cmd); - c->init_cmd = NULL; -@@ -4413,7 +4416,7 @@ static inline int clr_config_init_cmd(const char *key, struct lxc_conf *c, - } - - static inline int clr_config_init_cwd(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - free(c->init_cwd); - c->init_cwd = NULL; -@@ -4421,74 +4424,74 @@ static inline int clr_config_init_cwd(const char *key, struct lxc_conf *c, - } - - static inline int clr_config_init_uid(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->init_uid = 0; - return 0; - } - - static inline int clr_config_init_gid(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->init_gid = 0; - return 0; - } - - static inline int clr_config_ephemeral(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->ephemeral = 0; - return 0; - } - - static inline int clr_config_no_new_privs(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->no_new_privs = false; - return 0; - } - - static inline int clr_config_prlimit(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - return lxc_clear_limits(c, key); - } - - static inline int clr_config_sysctl(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - return lxc_clear_sysctls(c, key); - } - - static inline int clr_config_proc(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - return lxc_clear_procs(c, key); - } - - static inline int clr_config_includefiles(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - lxc_clear_includes(c); - return 0; - } - - static int clr_config_namespace_clone(const char *key, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - lxc_conf->ns_clone = 0; - return 0; - } - - static int clr_config_namespace_keep(const char *key, struct lxc_conf *lxc_conf, -- void *data) -+ void *data) - { - lxc_conf->ns_keep = 0; - return 0; - } - - static int clr_config_namespace_share(const char *key, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int ns_idx; - const char *namespace; -@@ -4506,7 +4509,7 @@ static int clr_config_namespace_share(const char *key, - - /* isulad add: clear umask value */ - static inline int clr_config_umask(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - c->umask = 0027; - return 0; -@@ -4514,7 +4517,7 @@ static inline int clr_config_umask(const char *key, struct lxc_conf *c, - - /* isulad add: clear systemd value */ - static inline int clr_config_systemd(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - free(c->systemd); - c->systemd = NULL; -@@ -4522,15 +4525,15 @@ static inline int clr_config_systemd(const char *key, struct lxc_conf *c, - } - - static int get_config_includefiles(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - return -ENOSYS; - } - - static struct lxc_config_t *get_network_config_ops(const char *key, -- struct lxc_conf *lxc_conf, -- ssize_t *idx, -- char **deindexed_key) -+ struct lxc_conf *lxc_conf, -+ ssize_t *idx, -+ char **deindexed_key) - { - int ret; - unsigned int tmpidx; -@@ -4624,7 +4627,7 @@ on_error: - * rewriting the key), and call it. - */ - static int set_config_net_nic(const char *key, const char *value, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - int ret; - const char *idxstring; -@@ -4657,7 +4660,7 @@ static int set_config_net_nic(const char *key, const char *value, - } - - static int clr_config_net_nic(const char *key, struct lxc_conf *lxc_conf, -- void *data) -+ void *data) - { - int ret; - const char *idxstring; -@@ -4703,7 +4706,7 @@ static int clr_config_net_nic(const char *key, struct lxc_conf *lxc_conf, - } - - static int clr_config_net_type(const char *key, struct lxc_conf *lxc_conf, -- void *data) -+ void *data) - { - struct lxc_netdev *netdev = data; - -@@ -4716,7 +4719,7 @@ static int clr_config_net_type(const char *key, struct lxc_conf *lxc_conf, - } - - static int clr_config_net_name(const char *key, struct lxc_conf *lxc_conf, -- void *data) -+ void *data) - { - struct lxc_netdev *netdev = data; - -@@ -4729,7 +4732,7 @@ static int clr_config_net_name(const char *key, struct lxc_conf *lxc_conf, - } - - static int clr_config_net_flags(const char *key, struct lxc_conf *lxc_conf, -- void *data) -+ void *data) - { - struct lxc_netdev *netdev = data; - -@@ -4742,7 +4745,7 @@ static int clr_config_net_flags(const char *key, struct lxc_conf *lxc_conf, - } - - static int clr_config_net_link(const char *key, struct lxc_conf *lxc_conf, -- void *data) -+ void *data) - { - struct lxc_netdev *netdev = data; - -@@ -4755,7 +4758,7 @@ static int clr_config_net_link(const char *key, struct lxc_conf *lxc_conf, - } - - static int clr_config_net_macvlan_mode(const char *key, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - -@@ -4771,7 +4774,7 @@ static int clr_config_net_macvlan_mode(const char *key, - } - - static int clr_config_net_veth_pair(const char *key, struct lxc_conf *lxc_conf, -- void *data) -+ void *data) - { - struct lxc_netdev *netdev = data; - -@@ -4784,7 +4787,7 @@ static int clr_config_net_veth_pair(const char *key, struct lxc_conf *lxc_conf, - } - - static int clr_config_net_script_up(const char *key, struct lxc_conf *lxc_conf, -- void *data) -+ void *data) - { - struct lxc_netdev *netdev = data; - -@@ -4798,7 +4801,7 @@ static int clr_config_net_script_up(const char *key, struct lxc_conf *lxc_conf, - } - - static int clr_config_net_script_down(const char *key, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - -@@ -4812,7 +4815,7 @@ static int clr_config_net_script_down(const char *key, - } - - static int clr_config_net_hwaddr(const char *key, struct lxc_conf *lxc_conf, -- void *data) -+ void *data) - { - struct lxc_netdev *netdev = data; - -@@ -4826,7 +4829,7 @@ static int clr_config_net_hwaddr(const char *key, struct lxc_conf *lxc_conf, - } - - static int clr_config_net_mtu(const char *key, struct lxc_conf *lxc_conf, -- void *data) -+ void *data) - { - struct lxc_netdev *netdev = data; - -@@ -4840,7 +4843,7 @@ static int clr_config_net_mtu(const char *key, struct lxc_conf *lxc_conf, - } - - static int clr_config_net_vlan_id(const char *key, struct lxc_conf *lxc_conf, -- void *data) -+ void *data) - { - struct lxc_netdev *netdev = data; - -@@ -4853,7 +4856,7 @@ static int clr_config_net_vlan_id(const char *key, struct lxc_conf *lxc_conf, - } - - static int clr_config_net_ipv4_gateway(const char *key, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - -@@ -4867,7 +4870,7 @@ static int clr_config_net_ipv4_gateway(const char *key, - } - - static int clr_config_net_ipv4_address(const char *key, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - struct lxc_list *cur, *next; -@@ -4885,7 +4888,7 @@ static int clr_config_net_ipv4_address(const char *key, - } - - static int clr_config_net_ipv6_gateway(const char *key, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - -@@ -4899,7 +4902,7 @@ static int clr_config_net_ipv6_gateway(const char *key, - } - - static int clr_config_net_ipv6_address(const char *key, -- struct lxc_conf *lxc_conf, void *data) -+ struct lxc_conf *lxc_conf, void *data) - { - struct lxc_netdev *netdev = data; - struct lxc_list *cur, *next; -@@ -4918,41 +4921,41 @@ static int clr_config_net_ipv6_address(const char *key, - - /* isulad: clr config init args*/ - static inline int clr_config_init_args(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - return lxc_clear_init_args(c); - } - - /* isulad: clr config init args*/ - static inline int clr_config_init_groups(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - return lxc_clear_init_groups(c); - } - - /* isulad: clr config populate devices*/ - static inline int clr_config_populate_device(const char *key, struct lxc_conf *c, -- void *data) -+ void *data) - { - return lxc_clear_populate_devices(c); - } - - /* isulad: clr config rootfs masked paths */ - static inline int clr_config_rootfs_masked_paths(const char *key, struct lxc_conf *c, -- void *data) -+ 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) -+ void *data) - { - return lxc_clear_rootfs_ro_paths(c); - } - - static int get_config_net_nic(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int ret; - const char *idxstring; -@@ -4982,7 +4985,7 @@ static int get_config_net_nic(const char *key, char *retv, int inlen, - } - - static int get_config_net_type(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - int fulllen = 0; -@@ -5002,7 +5005,7 @@ static int get_config_net_type(const char *key, char *retv, int inlen, - } - - static int get_config_net_flags(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - int fulllen = 0; -@@ -5023,7 +5026,7 @@ static int get_config_net_flags(const char *key, char *retv, int inlen, - } - - static int get_config_net_link(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - int fulllen = 0; -@@ -5044,7 +5047,7 @@ static int get_config_net_link(const char *key, char *retv, int inlen, - } - - static int get_config_net_name(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - int fulllen = 0; -@@ -5065,7 +5068,7 @@ static int get_config_net_name(const char *key, char *retv, int inlen, - } - - static int get_config_net_macvlan_mode(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - int fulllen = 0; -@@ -5107,7 +5110,7 @@ static int get_config_net_macvlan_mode(const char *key, char *retv, int inlen, - } - - static int get_config_net_veth_pair(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - int fulllen = 0; -@@ -5125,15 +5128,15 @@ static int get_config_net_veth_pair(const char *key, char *retv, int inlen, - return 0; - - strprint(retv, inlen, "%s", -- netdev->priv.veth_attr.pair[0] != '\0' -- ? netdev->priv.veth_attr.pair -- : netdev->priv.veth_attr.veth1); -+ netdev->priv.veth_attr.pair[0] != '\0' -+ ? netdev->priv.veth_attr.pair -+ : netdev->priv.veth_attr.veth1); - - return fulllen; - } - - static int get_config_net_script_up(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - int fulllen = 0; -@@ -5154,7 +5157,7 @@ static int get_config_net_script_up(const char *key, char *retv, int inlen, - } - - static int get_config_net_script_down(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - int fulllen = 0; -@@ -5175,7 +5178,7 @@ static int get_config_net_script_down(const char *key, char *retv, int inlen, - } - - static int get_config_net_hwaddr(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - int fulllen = 0; -@@ -5196,7 +5199,7 @@ static int get_config_net_hwaddr(const char *key, char *retv, int inlen, - } - - static int get_config_net_mtu(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - int fulllen = 0; -@@ -5217,7 +5220,7 @@ static int get_config_net_mtu(const char *key, char *retv, int inlen, - } - - static int get_config_net_vlan_id(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - int fulllen = 0; -@@ -5240,7 +5243,7 @@ static int get_config_net_vlan_id(const char *key, char *retv, int inlen, - } - - static int get_config_net_ipv4_gateway(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - char buf[INET_ADDRSTRLEN]; -@@ -5266,7 +5269,7 @@ static int get_config_net_ipv4_gateway(const char *key, char *retv, int inlen, - } - - static int get_config_net_ipv4_address(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - size_t listlen; -@@ -5289,14 +5292,14 @@ static int get_config_net_ipv4_address(const char *key, char *retv, int inlen, - struct lxc_inetdev *i = it->elem; - inet_ntop(AF_INET, &i->addr, buf, sizeof(buf)); - strprint(retv, inlen, "%s/%u%s", buf, i->prefix, -- (listlen-- > 1) ? "\n" : ""); -+ (listlen-- > 1) ? "\n" : ""); - } - - return fulllen; - } - - static int get_config_net_ipv6_gateway(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - char buf[INET6_ADDRSTRLEN]; -@@ -5322,7 +5325,7 @@ static int get_config_net_ipv6_gateway(const char *key, char *retv, int inlen, - } - - static int get_config_net_ipv6_address(const char *key, char *retv, int inlen, -- struct lxc_conf *c, void *data) -+ struct lxc_conf *c, void *data) - { - int len; - size_t listlen; -@@ -5345,7 +5348,7 @@ static int get_config_net_ipv6_address(const char *key, char *retv, int inlen, - struct lxc_inet6dev *i = it->elem; - inet_ntop(AF_INET6, &i->addr, buf, sizeof(buf)); - strprint(retv, inlen, "%s/%u%s", buf, i->prefix, -- (listlen-- > 1) ? "\n" : ""); -+ (listlen-- > 1) ? "\n" : ""); - } - - return fulllen; -@@ -5375,7 +5378,7 @@ int lxc_list_config_items(char *retv, int inlen) - } - - int lxc_list_subkeys(struct lxc_conf *conf, const char *key, char *retv, -- int inlen) -+ int inlen) - { - int len; - int fulllen = 0; -diff --git a/src/lxc/confile_utils.c b/src/lxc/confile_utils.c -index 9049ce8..8c5208f 100644 ---- a/src/lxc/confile_utils.c -+++ b/src/lxc/confile_utils.c -@@ -46,7 +46,7 @@ - lxc_log_define(confile_utils, lxc); - - int parse_idmaps(const char *idmap, char *type, unsigned long *nsid, -- unsigned long *hostid, unsigned long *range) -+ unsigned long *hostid, unsigned long *range) - { - int ret = -1; - unsigned long tmp_hostid, tmp_nsid, tmp_range; -@@ -223,7 +223,7 @@ struct lxc_netdev *lxc_network_add(struct lxc_list *networks, int idx, bool tail - * allocates a new one if it couldn't be found. - */ - struct lxc_netdev *lxc_get_netdev_by_idx(struct lxc_conf *conf, -- unsigned int idx, bool allocate) -+ unsigned int idx, bool allocate) - { - struct lxc_netdev *netdev = NULL; - struct lxc_list *networks = &conf->network; -@@ -252,7 +252,7 @@ void lxc_log_configured_netdevs(const struct lxc_conf *conf) - struct lxc_list *it = (struct lxc_list *)&conf->network;; - - if ((conf->loglevel != LXC_LOG_LEVEL_TRACE) && -- (lxc_log_get_level() != LXC_LOG_LEVEL_TRACE)) -+ (lxc_log_get_level() != LXC_LOG_LEVEL_TRACE)) - return; - - if (lxc_list_empty(it)) { -@@ -294,7 +294,7 @@ void lxc_log_configured_netdevs(const struct lxc_conf *conf) - char *mode; - - mode = lxc_macvlan_flag_to_mode( -- netdev->priv.macvlan_attr.mode); -+ netdev->priv.macvlan_attr.mode); - TRACE("macvlan mode: %s", - mode ? mode : "(invalid mode)"); - } -@@ -348,14 +348,14 @@ void lxc_log_configured_netdevs(const struct lxc_conf *conf) - - if (netdev->ipv4_gateway) { - inet_ntop(AF_INET, netdev->ipv4_gateway, -- bufinet4, sizeof(bufinet4)); -+ bufinet4, sizeof(bufinet4)); - TRACE("ipv4 gateway: %s", bufinet4); - } - - lxc_list_for_each_safe(cur, &netdev->ipv4, next) { - inet4dev = cur->elem; - inet_ntop(AF_INET, &inet4dev->addr, bufinet4, -- sizeof(bufinet4)); -+ sizeof(bufinet4)); - TRACE("ipv4 addr: %s", bufinet4); - } - -@@ -364,14 +364,14 @@ void lxc_log_configured_netdevs(const struct lxc_conf *conf) - - if (netdev->ipv6_gateway) { - inet_ntop(AF_INET6, netdev->ipv6_gateway, -- bufinet6, sizeof(bufinet6)); -+ bufinet6, sizeof(bufinet6)); - TRACE("ipv6 gateway: %s", bufinet6); - } - - lxc_list_for_each_safe(cur, &netdev->ipv6, next) { - inet6dev = cur->elem; - inet_ntop(AF_INET6, &inet6dev->addr, bufinet6, -- sizeof(bufinet6)); -+ sizeof(bufinet6)); - TRACE("ipv6 addr: %s", bufinet6); - } - } -@@ -448,10 +448,10 @@ static struct lxc_macvlan_mode { - char *name; - int mode; - } macvlan_mode[] = { -- { "private", MACVLAN_MODE_PRIVATE }, -- { "vepa", MACVLAN_MODE_VEPA }, -- { "bridge", MACVLAN_MODE_BRIDGE }, -- { "passthru", MACVLAN_MODE_PASSTHRU }, -+ { "private", MACVLAN_MODE_PRIVATE }, -+ { "vepa", MACVLAN_MODE_VEPA }, -+ { "bridge", MACVLAN_MODE_BRIDGE }, -+ { "passthru", MACVLAN_MODE_PASSTHRU }, - }; - - int lxc_macvlan_mode_to_flag(int *mode, const char *value) -@@ -595,7 +595,7 @@ bool lxc_config_net_hwaddr(const char *line) - return true; - - if (sscanf(line, "lxc.net.%u.%6s", &index, tmp) == 2 || -- sscanf(line, "lxc.network.%u.%6s", &index, tmp) == 2) -+ sscanf(line, "lxc.network.%u.%6s", &index, tmp) == 2) - return strncmp(tmp, "hwaddr", 6) == 0; - - return false; -@@ -644,13 +644,13 @@ bool new_hwaddr(char *hwaddr) - seed = randseed(false); - - ret = snprintf(hwaddr, 18, "00:16:3e:%02x:%02x:%02x", rand_r(&seed) % 255, -- rand_r(&seed) % 255, rand_r(&seed) % 255); -+ rand_r(&seed) % 255, rand_r(&seed) % 255); - #else - - (void)randseed(true); - - ret = snprintf(hwaddr, 18, "00:16:3e:%02x:%02x:%02x", rand() % 255, -- rand() % 255, rand() % 255); -+ rand() % 255, rand() % 255); - #endif - if (ret < 0 || ret >= 18) { - SYSERROR("Failed to call snprintf()"); -@@ -740,7 +740,7 @@ bool parse_limit_value(const char **value, rlim_t *res) - } - - static int lxc_container_name_to_pid(const char *lxcname_or_pid, -- const char *lxcpath) -+ const char *lxcpath) - { - int ret; - signed long int pid; -@@ -784,16 +784,18 @@ static int lxc_container_name_to_pid(const char *lxcname_or_pid, - } - - int lxc_inherit_namespace(const char *lxcname_or_pid, const char *lxcpath, -- const char *namespace) -+ const char *namespace) - { -- int fd, pid; -- char *dup, *lastslash; -+ int fd = -1; -+ int pid = -1; -+ char *dup = NULL; -+ char *lastslash = NULL; - - /* isulad: add support share namespace by path. - * e.g. "lxc.namespace.share.net = /proc/PID/ns/net or /var/run/netns/net" - */ - if (file_exists(lxcname_or_pid) && !dir_exists(lxcname_or_pid)) { -- fd = open(lxcname_or_pid, O_RDONLY | O_CLOEXEC); -+ fd = lxc_open(lxcname_or_pid, O_RDONLY | O_CLOEXEC, 0); - if (fd < 0) - return -EINVAL; - -diff --git a/src/lxc/json/logger_json_file.c b/src/lxc/json/logger_json_file.c -index 6433b04..409ea11 100644 ---- a/src/lxc/json/logger_json_file.c -+++ b/src/lxc/json/logger_json_file.c -@@ -8,236 +8,236 @@ - #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; -+ 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); -+ 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; -+ 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; -- 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 *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; -- 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 *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; -- 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; -+ 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; -- } -- -- json_buf = safe_malloc(gen_len + 1); -- memcpy(json_buf, gen_buf, gen_len); -- json_buf[gen_len] = '\0'; -+ 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; -+ } -+ -+ json_buf = safe_malloc(gen_len + 1); -+ memcpy(json_buf, gen_buf, gen_len); -+ json_buf[gen_len] = '\0'; - - free_out: -- yajl_gen_clear(g); -- yajl_gen_free(g); -+ yajl_gen_clear(g); -+ yajl_gen_free(g); - out: -- return json_buf; -+ return json_buf; - } -diff --git a/src/lxc/json/read-file.c b/src/lxc/json/read-file.c -index ad0eda1..70e73e5 100644 ---- a/src/lxc/json/read-file.c -+++ b/src/lxc/json/read-file.c -@@ -16,79 +16,80 @@ - - 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; -- } -+ 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; -+ 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, tmperrno; -- FILE *fp; -- -- 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; -+ 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/log.c b/src/lxc/log.c -index 91fb7ef..e598a5f 100644 ---- a/src/lxc/log.c -+++ b/src/lxc/log.c -@@ -157,7 +157,7 @@ static int isulad_open_fifo(const char *file_path) - #define LOG_FIFO_SIZE (1024 * 1024) - int fd = -1; - -- fd = lxc_unpriv(open(file_path, O_RDWR | O_NONBLOCK | O_CLOEXEC, 0640)); -+ fd = lxc_unpriv(lxc_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; -@@ -174,7 +174,7 @@ static int isulad_open_fifo(const char *file_path) - - /*---------------------------------------------------------------------------*/ - static int log_append_syslog(const struct lxc_log_appender *appender, -- struct lxc_log_event *event) -+ struct lxc_log_event *event) - { - char *msg; - const char *log_container_name; -@@ -189,7 +189,7 @@ static int log_append_syslog(const struct lxc_log_appender *appender, - return 0; - - syslog(lxc_log_priority_to_syslog(event->priority), -- "%s%s %s - %s:%s:%d - %s" , -+ "%s%s %s - %s:%s:%d - %s", - log_container_name ? log_container_name : "", - log_container_name ? ":" : "", - event->category, -@@ -203,7 +203,7 @@ static int log_append_syslog(const struct lxc_log_appender *appender, - - /*---------------------------------------------------------------------------*/ - static int log_append_stderr(const struct lxc_log_appender *appender, -- struct lxc_log_event *event) -+ struct lxc_log_event *event) - { - const char *log_container_name; - -@@ -227,7 +227,7 @@ static int log_append_stderr(const struct lxc_log_appender *appender, - static int lxc_unix_epoch_to_utc(char *buf, size_t bufsize, const struct timespec *time) - { - int64_t epoch_to_days, z, era, doe, yoe, year, doy, mp, day, month, -- d_in_s, hours, h_in_s, minutes, seconds; -+ d_in_s, hours, h_in_s, minutes, seconds; - char nanosec[INTTYPE_TO_STRLEN(int64_t)]; - int ret; - -@@ -313,9 +313,9 @@ static int lxc_unix_epoch_to_utc(char *buf, size_t bufsize, const struct timespe - * digit precision. - */ - ret = snprintf(buf, bufsize, -- "%" PRId64 "%02" PRId64 "%02" PRId64 "%02" PRId64 -- "%02" PRId64 "%02" PRId64 ".%.3s", -- year, month, day, hours, minutes, seconds, nanosec); -+ "%" PRId64 "%02" PRId64 "%02" PRId64 "%02" PRId64 -+ "%02" PRId64 "%02" PRId64 ".%.3s", -+ year, month, day, hours, minutes, seconds, nanosec); - if (ret < 0 || (size_t)ret >= bufsize) - return -1; - -@@ -343,15 +343,15 @@ static int lxc_unix_epoch_to_utc(char *buf, size_t bufsize, const struct timespe - * to make it pretty. Pretty might cost you thread-safety. - */ - static int log_append_logfile(const struct lxc_log_appender *appender, -- struct lxc_log_event *event) -+ struct lxc_log_event *event) - { - char buffer[LXC_LOG_BUFFER_SIZE]; - char date_time[LXC_LOG_TIME_SIZE]; - int n; - ssize_t ret; - int fd_to_use = -1; -- const char *log_container_name; -- const char *isulad_prefix; -+ const char *log_container_name = NULL; -+ const char *isulad_prefix = NULL; - size_t isulad_len = 0; - - #ifndef NO_LXC_CONF -@@ -377,13 +377,13 @@ static int log_append_logfile(const struct lxc_log_appender *appender, - } - isulad_prefix = log_container_name ? (log_container_name + isulad_len) : log_prefix; - n = snprintf(buffer, sizeof(buffer), -- "%15s %s %-8s %s - %s:%s:%d - ", -- isulad_prefix, -- date_time, -- lxc_log_priority_to_string(event->priority), -- event->category, -- event->locinfo->file, event->locinfo->func, -- event->locinfo->line); -+ "%15s %s %-8s %s - %s:%s:%d - ", -+ isulad_prefix, -+ date_time, -+ lxc_log_priority_to_string(event->priority), -+ event->category, -+ event->locinfo->file, event->locinfo->func, -+ event->locinfo->line); - if (n < 0) - return n; - -@@ -405,7 +405,7 @@ static int log_append_logfile(const struct lxc_log_appender *appender, - - #if HAVE_DLOG - static int log_append_dlog(const struct lxc_log_appender *appender, -- struct lxc_log_event *event) -+ struct lxc_log_event *event) - { - char *msg = lxc_log_get_va_msg(event); - const char *log_container_name = lxc_log_get_container_name(); -@@ -643,10 +643,10 @@ static int __lxc_log_set_file(const char *fname, int create_dirs) - */ - if (create_dirs) - #endif -- if (build_dir(fname)) { -- SYSERROR("Failed to create dir for log file \"%s\"", fname); -- return -1; -- } -+ if (build_dir(fname)) { -+ SYSERROR("Failed to create dir for log file \"%s\"", fname); -+ return -1; -+ } - - if (isulad_use_log_fifo_flag) { - lxc_log_fd = isulad_open_fifo(fname); -@@ -685,7 +685,7 @@ int lxc_log_init(struct lxc_log *log) - { - int ret; - int lxc_priority = LXC_LOG_LEVEL_ERROR; -- const char *tmp_log_fname; -+ const char *tmp_log_fname = NULL; - - if (!log) - return -1; -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index e0c4de3..e32f524 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -111,7 +111,7 @@ static const char *lxcapi_get_config_path(struct lxc_container *c); - #define do_lxcapi_get_config_path(c) lxcapi_get_config_path(c) - static bool do_lxcapi_set_config_item(struct lxc_container *c, const char *key, const char *v); - static bool container_destroy(struct lxc_container *c, -- struct lxc_storage *storage); -+ struct lxc_storage *storage); - static bool get_snappath_dir(struct lxc_container *c, char *snappath); - static bool lxcapi_snapshot_destroy_all(struct lxc_container *c); - static bool do_lxcapi_save_config(struct lxc_container *c, const char *alt_file); -@@ -551,7 +551,7 @@ static int do_lxcapi_console_getfd(struct lxc_container *c, int *ttynum, int *ma - WRAP_API_2(int, lxcapi_console_getfd, int *, int *) - - static int lxcapi_console(struct lxc_container *c, int ttynum, int stdinfd, -- int stdoutfd, int stderrfd, int escape) -+ int stdoutfd, int stderrfd, int escape) - { - int ret; - -@@ -619,7 +619,7 @@ static bool load_config_locked(struct lxc_container *c, const char *fname) - static bool load_ocihooks_locked(struct lxc_container *c) - { - parser_error err = NULL; -- oci_runtime_spec_hooks *hooks; -+ oci_runtime_spec_hooks *hooks = NULL; - - if (!c->lxc_conf) - c->lxc_conf = lxc_conf_init(); -@@ -755,7 +755,7 @@ static bool do_lxcapi_want_close_all_fds(struct lxc_container *c, bool state) - WRAP_API_1(bool, lxcapi_want_close_all_fds, bool) - - static bool do_lxcapi_wait(struct lxc_container *c, const char *state, -- int timeout) -+ int timeout) - { - int ret; - -@@ -833,7 +833,7 @@ static char **split_init_cmd(const char *incmd) - - argv[0] = NULL; - lxc_iterate_parts(p, copy, " ") -- push_arg(&argv, p, &nargs); -+ push_arg(&argv, p, &nargs); - - if (nargs == 0) { - free(argv); -@@ -1116,7 +1116,7 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - keepfds[2] = handler->state_socket_pair[1]; - keepfds[4] = conf->errpipe[1]; - ret = lxc_check_inherited(conf, true, keepfds, -- sizeof(keepfds) / sizeof(keepfds[0])); -+ sizeof(keepfds) / sizeof(keepfds[0])); - if (ret < 0) - _exit(EXIT_FAILURE); - -@@ -1176,7 +1176,7 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - - /* isulad: open exit fifo */ - if (c->exit_fifo) { -- conf->exit_fd = open(c->exit_fifo, O_WRONLY | O_NONBLOCK | O_CLOEXEC); -+ 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)); - ret = 1; -@@ -1226,7 +1226,7 @@ reboot: - if (c->daemonize) - keepfds[4] = conf->errpipe[1]; - ret = lxc_check_inherited(conf, c->daemonize, keepfds, -- sizeof(keepfds) / sizeof(keepfds[0])); -+ sizeof(keepfds) / sizeof(keepfds[0])); - if (ret < 0) { - lxc_free_handler(handler); - ret = 1; -@@ -1235,12 +1235,12 @@ reboot: - - if (useinit) { - ret = lxc_execute(c->name, argv, 1, handler, c->config_path, -- c->daemonize, &c->error_num, c->start_timeout); -+ c->daemonize, &c->error_num, c->start_timeout); - } else { - handler->disable_pty = c->disable_pty; - handler->open_stdin = c->open_stdin; - ret = lxc_start(c->name, argv, handler, c->config_path, -- c->daemonize, &c->error_num, c->start_timeout); -+ c->daemonize, &c->error_num, c->start_timeout); - } - - if (conf->reboot == REBOOT_REQ) { -@@ -1269,7 +1269,7 @@ on_error: - } - - static bool lxcapi_start(struct lxc_container *c, int useinit, -- char *const argv[]) -+ char *const argv[]) - { - bool ret; - -@@ -1390,8 +1390,8 @@ static bool create_container_dir(struct lxc_container *c) - * storage_create(), it returns a mounted bdev on success, NULL on error. - */ - static struct lxc_storage *do_storage_create(struct lxc_container *c, -- const char *type, -- struct bdev_specs *specs) -+ const char *type, -+ struct bdev_specs *specs) - { - int ret; - size_t len; -@@ -1400,7 +1400,7 @@ static struct lxc_storage *do_storage_create(struct lxc_container *c, - - /* rootfs.path or lxcpath/lxcname/rootfs */ - if (c->lxc_conf->rootfs.path && -- (access(c->lxc_conf->rootfs.path, F_OK) == 0)) { -+ (access(c->lxc_conf->rootfs.path, F_OK) == 0)) { - const char *rpath = c->lxc_conf->rootfs.path; - len = strlen(rpath) + 1; - dest = alloca(len); -@@ -1454,7 +1454,7 @@ static char *lxcbasename(char *path) - } - - static bool create_run_template(struct lxc_container *c, char *tpath, -- bool need_null_stdfds, char *const argv[]) -+ bool need_null_stdfds, char *const argv[]) - { - int ret; - pid_t pid; -@@ -1515,7 +1515,7 @@ static bool create_run_template(struct lxc_container *c, char *tpath, - } - - if (strcmp(bdev->type, "overlay") == 0 || -- strcmp(bdev->type, "overlayfs") == 0) { -+ strcmp(bdev->type, "overlayfs") == 0) { - /* If we create an overlay container we need to - * rsync the contents into - * //rootfs. -@@ -1535,7 +1535,9 @@ static bool create_run_template(struct lxc_container *c, char *tpath, - */ - char *src; - -- src = ovl_get_rootfs(bdev->src, &(size_t){0}); -+ src = ovl_get_rootfs(bdev->src, &(size_t) { -+ 0 -+ }); - if (!src) { - ERROR("Failed to get rootfs"); - _exit(EXIT_FAILURE); -@@ -1654,8 +1656,8 @@ static bool create_run_template(struct lxc_container *c, char *tpath, - _exit(EXIT_FAILURE); - - ret = snprintf(n2[n2args - 1], 200, "%c:%lu:%lu:%lu", -- map->idtype == ID_TYPE_UID ? 'u' : 'g', -- map->nsid, map->hostid, map->range); -+ map->idtype == ID_TYPE_UID ? 'u' : 'g', -+ map->nsid, map->hostid, map->range); - if (ret < 0 || ret >= 200) - _exit(EXIT_FAILURE); - } -@@ -1682,7 +1684,7 @@ static bool create_run_template(struct lxc_container *c, char *tpath, - } - - ret = snprintf(n2[n2args - 1], 200, "u:%d:%d:1", -- hostuid_mapped, geteuid()); -+ hostuid_mapped, geteuid()); - if (ret < 0 || ret >= 200) - _exit(EXIT_FAILURE); - } -@@ -1709,7 +1711,7 @@ static bool create_run_template(struct lxc_container *c, char *tpath, - } - - ret = snprintf(n2[n2args - 1], 200, "g:%d:%d:1", -- hostgid_mapped, getegid()); -+ hostgid_mapped, getegid()); - if (ret < 0 || ret >= 200) - _exit(EXIT_FAILURE); - } -@@ -1915,8 +1917,8 @@ static void lxcapi_clear_config(struct lxc_container *c) - * arguments, you can just pass NULL. - */ - static bool do_lxcapi_create(struct lxc_container *c, const char *t, -- const char *bdevtype, struct bdev_specs *specs, -- int flags, char *const argv[]) -+ const char *bdevtype, struct bdev_specs *specs, -+ int flags, char *const argv[]) - { - int partial_fd; - mode_t mask; -@@ -1940,7 +1942,7 @@ static bool do_lxcapi_create(struct lxc_container *c, const char *t, - * existing container. Return an error, but do NOT delete the container. - */ - if (do_lxcapi_is_defined(c) && c->lxc_conf && c->lxc_conf->rootfs.path && -- access(c->lxc_conf->rootfs.path, F_OK) == 0 && tpath) { -+ access(c->lxc_conf->rootfs.path, F_OK) == 0 && tpath) { - ERROR("Container \"%s\" already exists in \"%s\"", c->name, - c->config_path); - goto free_tpath; -@@ -2072,8 +2074,8 @@ free_tpath: - } - - static bool lxcapi_create(struct lxc_container *c, const char *t, -- const char *bdevtype, struct bdev_specs *specs, -- int flags, char *const argv[]) -+ const char *bdevtype, struct bdev_specs *specs, -+ int flags, char *const argv[]) - { - bool ret; - -@@ -2140,7 +2142,7 @@ static bool do_lxcapi_reboot2(struct lxc_container *c, int timeout) - if (timeout != 0) { - states[RUNNING] = 2; - ret = lxc_cmd_add_state_client(c->name, c->config_path, states, -- &state_client_fd); -+ &state_client_fd); - if (ret < 0) - return false; - -@@ -2209,7 +2211,7 @@ static bool do_lxcapi_shutdown(struct lxc_container *c, int timeout) - if (timeout != 0) { - states[STOPPED] = 1; - ret = lxc_cmd_add_state_client(c->name, c->config_path, states, -- &state_client_fd); -+ &state_client_fd); - if (ret < 0) - return false; - -@@ -2252,7 +2254,7 @@ static bool do_lxcapi_shutdown(struct lxc_container *c, int timeout) - WRAP_API_1(bool, lxcapi_shutdown, int) - - static bool lxcapi_createl(struct lxc_container *c, const char *t, -- const char *bdevtype, struct bdev_specs *specs, int flags, ...) -+ const char *bdevtype, struct bdev_specs *specs, int flags, ...) - { - bool bret = false; - char **args = NULL; -@@ -2300,7 +2302,9 @@ static void do_clear_unexp_config_line(struct lxc_conf *conf, const char *key) - const char *idx; - - idx = key + 8; -- ret = lxc_safe_uint(idx, &(unsigned int){0}); -+ ret = lxc_safe_uint(idx, &(unsigned int) { -+ 0 -+ }); - if (!ret) - return clear_unexp_config_line(conf, key, true); - } -@@ -2312,7 +2316,7 @@ static void do_clear_unexp_config_line(struct lxc_conf *conf, const char *key) - } - - static bool do_lxcapi_clear_config_item(struct lxc_container *c, -- const char *key) -+ const char *key) - { - int ret = 1; - struct lxc_config_t *config; -@@ -2344,7 +2348,7 @@ static inline bool enter_net_ns(struct lxc_container *c) - pid_t pid = do_lxcapi_init_pid(c); - - if ((geteuid() != 0 || (c->lxc_conf && !lxc_list_empty(&c->lxc_conf->id_map))) && -- (access("/proc/self/ns/user", F_OK) == 0)) -+ (access("/proc/self/ns/user", F_OK) == 0)) - if (!switch_to_ns(pid, "user")) - return false; - -@@ -2359,7 +2363,7 @@ static inline int string_cmp(char **first, char **second) - - /* Used by qsort and bsearch functions for comparing container names. */ - static inline int container_cmp(struct lxc_container **first, -- struct lxc_container **second) -+ struct lxc_container **second) - { - return strcmp((*first)->name, (*second)->name); - } -@@ -2385,7 +2389,7 @@ static bool add_to_array(char ***names, char *cname, int pos) - } - - static bool add_to_clist(struct lxc_container ***list, struct lxc_container *c, -- int pos, bool sort) -+ int pos, bool sort) - { - struct lxc_container **newlist = realloc(*list, (pos + 1) * sizeof(struct lxc_container *)); - if (!newlist) { -@@ -2459,14 +2463,16 @@ static char **do_lxcapi_get_interfaces(struct lxc_container *c) - } - - /* Grab the list of interfaces */ -- if (netns_getifaddrs(&interfaceArray, -1, &(bool){false})) { -+ if (netns_getifaddrs(&interfaceArray, -1, &(bool) { -+ false -+ })) { - SYSERROR("Failed to get interfaces list"); - goto out; - } - - /* Iterate through the interfaces */ - for (tempIfAddr = interfaceArray; tempIfAddr != NULL; -- tempIfAddr = tempIfAddr->ifa_next) { -+ tempIfAddr = tempIfAddr->ifa_next) { - nbytes = lxc_write_nointr(pipefd[1], tempIfAddr->ifa_name, IFNAMSIZ); - if (nbytes < 0) - goto out; -@@ -2476,7 +2482,7 @@ static char **do_lxcapi_get_interfaces(struct lxc_container *c) - - ret = 0; - -- out: -+out: - if (interfaceArray) - netns_freeifaddrs(interfaceArray); - -@@ -2521,7 +2527,7 @@ static char **do_lxcapi_get_interfaces(struct lxc_container *c) - WRAP_API(char **, lxcapi_get_interfaces) - - static char **do_lxcapi_get_ips(struct lxc_container *c, const char *interface, -- const char *family, int scope) -+ const char *family, int scope) - { - int i, ret; - pid_t pid; -@@ -2561,14 +2567,16 @@ static char **do_lxcapi_get_ips(struct lxc_container *c, const char *interface, - } - - /* Grab the list of interfaces */ -- if (netns_getifaddrs(&interfaceArray, -1, &(bool){false})) { -+ if (netns_getifaddrs(&interfaceArray, -1, &(bool) { -+ false -+ })) { - SYSERROR("Failed to get interfaces list"); - goto out; - } - - /* Iterate through the interfaces */ - for (tempIfAddr = interfaceArray; tempIfAddr; -- tempIfAddr = tempIfAddr->ifa_next) { -+ tempIfAddr = tempIfAddr->ifa_next) { - if (tempIfAddr->ifa_addr == NULL) - continue; - -@@ -2598,15 +2606,15 @@ static char **do_lxcapi_get_ips(struct lxc_container *c, const char *interface, - continue; - - address = (char *)inet_ntop(tempIfAddr->ifa_addr->sa_family, -- tempAddrPtr, addressOutputBuffer, -- sizeof(addressOutputBuffer)); -+ tempAddrPtr, addressOutputBuffer, -+ sizeof(addressOutputBuffer)); - if (!address) - continue; - - nbytes = lxc_write_nointr(pipefd[1], address, INET6_ADDRSTRLEN); - if (nbytes != INET6_ADDRSTRLEN) { - SYSERROR("Failed to send ipv6 address \"%s\"", -- address); -+ address); - goto out; - } - -@@ -2615,7 +2623,7 @@ static char **do_lxcapi_get_ips(struct lxc_container *c, const char *interface, - - ret = 0; - -- out: -+out: - if (interfaceArray) - netns_freeifaddrs(interfaceArray); - -@@ -2766,7 +2774,7 @@ static bool do_lxcapi_save_config(struct lxc_container *c, const char *alt_file) - return false; - - fd = open(alt_file, O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, -- S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); -+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); - if (fd < 0) - goto on_error; - -@@ -2926,7 +2934,7 @@ void mod_all_rdeps(struct lxc_container *c, bool inc) - int ret; - - ret = snprintf(path, PATH_MAX, "%s/%s/lxc_rdepends", -- c->config_path, c->name); -+ c->config_path, c->name); - if (ret < 0 || ret >= PATH_MAX) { - ERROR("Path name too long"); - return; -@@ -2947,13 +2955,13 @@ void mod_all_rdeps(struct lxc_container *c, bool inc) - - if ((p = lxc_container_new(lxcname, lxcpath)) == NULL) { - ERROR("Unable to find dependent container %s:%s", -- lxcpath, lxcname); -+ lxcpath, lxcname); - continue; - } - - if (!mod_rdep(p, c, inc)) - ERROR("Failed to update snapshots file for %s:%s", -- lxcpath, lxcname); -+ lxcpath, lxcname); - - lxc_container_put(p); - } -@@ -2973,7 +2981,7 @@ static bool has_fs_snapshots(struct lxc_container *c) - bool bret = false; - - ret = snprintf(path, PATH_MAX, "%s/%s/lxc_snapshots", c->config_path, -- c->name); -+ c->name); - if (ret < 0 || ret > PATH_MAX) - goto out; - -@@ -3033,7 +3041,7 @@ static bool do_destroy_container(struct lxc_conf *conf) { - - if (am_guest_unpriv()) { - ret = userns_exec_full(conf, storage_destroy_wrapper, conf, -- "storage_destroy_wrapper"); -+ "storage_destroy_wrapper"); - if (ret < 0) - return false; - -@@ -3056,7 +3064,7 @@ static int lxc_unlink_exec_wrapper(void *data) - } - - static bool container_destroy(struct lxc_container *c, -- struct lxc_storage *storage) -+ struct lxc_storage *storage) - { - const char *p1; - size_t len; -@@ -3154,15 +3162,15 @@ static bool container_destroy(struct lxc_container *c, - * cannot be removed when restoring from a snapshot. - */ - if (storage && (!strcmp(storage->type, "overlay") || -- !strcmp(storage->type, "overlayfs")) && -- (storage->flags & LXC_STORAGE_INTERNAL_OVERLAY_RESTORE)) { -+ !strcmp(storage->type, "overlayfs")) && -+ (storage->flags & LXC_STORAGE_INTERNAL_OVERLAY_RESTORE)) { - ret = snprintf(path, len, "%s/%s/config", p1, c->name); - if (ret < 0 || (size_t)ret >= len) - goto out; - - if (am_guest_unpriv()) - ret = userns_exec_1(conf, lxc_unlink_exec_wrapper, path, -- "lxc_unlink_exec_wrapper"); -+ "lxc_unlink_exec_wrapper"); - else - ret = unlink(path); - if (ret < 0) { -@@ -3182,7 +3190,7 @@ static bool container_destroy(struct lxc_container *c, - - if (am_guest_unpriv()) - ret = userns_exec_full(conf, lxc_rmdir_onedev_wrapper, path, -- "lxc_rmdir_onedev_wrapper"); -+ "lxc_rmdir_onedev_wrapper"); - else - ret = lxc_rmdir_onedev(path, "snaps"); - if (ret < 0) { -@@ -3245,7 +3253,7 @@ static bool do_lxcapi_destroy_with_snapshots(struct lxc_container *c) - WRAP_API(bool, lxcapi_destroy_with_snapshots) - - int lxc_set_config_item_locked(struct lxc_conf *conf, const char *key, -- const char *v) -+ const char *v) - { - int ret; - struct lxc_config_t *config; -@@ -3270,7 +3278,7 @@ int lxc_set_config_item_locked(struct lxc_conf *conf, const char *key, - } - - static bool do_set_config_item_locked(struct lxc_container *c, const char *key, -- const char *v) -+ const char *v) - { - int ret; - -@@ -3360,7 +3368,7 @@ static bool set_config_filename(struct lxc_container *c) - static bool set_oci_hook_config_filename(struct lxc_container *c) - { - #define OCI_HOOK_JSON_FILE_NAME "ocihooks.json" -- char *newpath; -+ char *newpath = NULL; - int len, ret; - - if (!c->config_path) -@@ -3466,7 +3474,7 @@ static int do_lxcapi_get_cgroup_item(struct lxc_container *c, const char *subsys - return -1; - - ret = cgroup_ops->get(cgroup_ops, subsys, retv, inlen, c->name, -- c->config_path); -+ c->config_path); - - cgroup_exit(cgroup_ops); - -@@ -3578,7 +3586,7 @@ static int copyhooks(struct lxc_container *oldc, struct lxc_container *c) - - /* copy the script, and change the entry in confile */ - ret = snprintf(tmppath, PATH_MAX, "%s/%s/%s", -- c->config_path, c->name, fname+1); -+ c->config_path, c->name, fname+1); - if (ret < 0 || ret >= PATH_MAX) - return -1; - -@@ -3597,7 +3605,7 @@ static int copyhooks(struct lxc_container *oldc, struct lxc_container *c) - } - - if (!clone_update_unexp_hooks(c->lxc_conf, oldc->config_path, -- c->config_path, oldc->name, c->name)) { -+ c->config_path, oldc->name, c->name)) { - ERROR("Error saving new hooks in clone"); - return -1; - } -@@ -3623,7 +3631,7 @@ static int copy_fstab(struct lxc_container *oldc, struct lxc_container *c) - return -1; - - ret = snprintf(newpath, PATH_MAX, "%s/%s%s", -- c->config_path, c->name, p); -+ c->config_path, c->name, p); - if (ret < 0 || ret >= PATH_MAX) { - ERROR("error printing new path for %s", oldpath); - return -1; -@@ -3661,14 +3669,14 @@ static void copy_rdepends(struct lxc_container *c, struct lxc_container *c0) - int ret; - - ret = snprintf(path0, PATH_MAX, "%s/%s/lxc_rdepends", c0->config_path, -- c0->name); -+ c0->name); - if (ret < 0 || ret >= PATH_MAX) { - WARN("Error copying reverse dependencies"); - return; - } - - ret = snprintf(path1, PATH_MAX, "%s/%s/lxc_rdepends", c->config_path, -- c->name); -+ c->name); - if (ret < 0 || ret >= PATH_MAX) { - WARN("Error copying reverse dependencies"); - return; -@@ -3688,7 +3696,7 @@ static bool add_rdepends(struct lxc_container *c, struct lxc_container *c0) - bool bret; - - ret = snprintf(path, PATH_MAX, "%s/%s/lxc_rdepends", c->config_path, -- c->name); -+ c->name); - if (ret < 0 || ret >= PATH_MAX) - return false; - -@@ -3714,7 +3722,7 @@ static bool add_rdepends(struct lxc_container *c, struct lxc_container *c0) - * Currently we only do this for btrfs. - */ - bool should_default_to_snapshot(struct lxc_container *c0, -- struct lxc_container *c1) -+ struct lxc_container *c1) - { - int ret; - size_t l0 = strlen(c0->config_path) + strlen(c0->name) + 2; -@@ -3741,8 +3749,8 @@ bool should_default_to_snapshot(struct lxc_container *c0, - } - - static int copy_storage(struct lxc_container *c0, struct lxc_container *c, -- const char *newtype, int flags, const char *bdevdata, -- uint64_t newsize) -+ const char *newtype, int flags, const char *bdevdata, -+ uint64_t newsize) - { - struct lxc_storage *bdev; - bool need_rdep; -@@ -3751,7 +3759,7 @@ static int copy_storage(struct lxc_container *c0, struct lxc_container *c, - flags |= LXC_CLONE_SNAPSHOT; - - bdev = storage_copy(c0, c->name, c->config_path, newtype, flags, -- bdevdata, newsize, &need_rdep); -+ bdevdata, newsize, &need_rdep); - if (!bdev) { - ERROR("Error copying storage."); - return -1; -@@ -3770,7 +3778,7 @@ static int copy_storage(struct lxc_container *c0, struct lxc_container *c, - /* Append a new lxc.rootfs.path entry to the unexpanded config. */ - clear_unexp_config_line(c->lxc_conf, "lxc.rootfs.path", false); - if (!do_append_unexp_config_line(c->lxc_conf, "lxc.rootfs.path", -- c->lxc_conf->rootfs.path)) { -+ c->lxc_conf->rootfs.path)) { - ERROR("Error saving new rootfs to cloned config."); - return -1; - } -@@ -3940,9 +3948,9 @@ static int create_file_dirname(char *path, struct lxc_conf *conf) - } - - static struct lxc_container *do_lxcapi_clone(struct lxc_container *c, const char *newname, -- const char *lxcpath, int flags, -- const char *bdevtype, const char *bdevdata, uint64_t newsize, -- char **hookargs) -+ const char *lxcpath, int flags, -+ const char *bdevtype, const char *bdevdata, uint64_t newsize, -+ char **hookargs) - { - char newpath[PATH_MAX]; - int fd, ret; -@@ -3995,7 +4003,7 @@ static struct lxc_container *do_lxcapi_clone(struct lxc_container *c, const char - } - - fd = open(newpath, O_WRONLY | O_CREAT | O_CLOEXEC, -- S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); -+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); - if (fd < 0) { - SYSERROR("Failed to open \"%s\"", newpath); - goto out; -@@ -4033,7 +4041,7 @@ static struct lxc_container *do_lxcapi_clone(struct lxc_container *c, const char - * snapshot. - */ - if (errno != ENOENT && -- !(flags & LXC_STORAGE_INTERNAL_OVERLAY_RESTORE)) { -+ !(flags & LXC_STORAGE_INTERNAL_OVERLAY_RESTORE)) { - SYSERROR("Failed to create directory \"%s\"", newpath); - goto out; - } -@@ -4049,7 +4057,7 @@ static struct lxc_container *do_lxcapi_clone(struct lxc_container *c, const char - c2 = lxc_container_new(newname, lxcpath); - if (!c2) { - ERROR("clone: failed to create new container (%s %s)", newname, -- lxcpath); -+ lxcpath); - goto out; - } - -@@ -4122,7 +4130,7 @@ static struct lxc_container *do_lxcapi_clone(struct lxc_container *c, const char - - if (am_guest_unpriv()) - ret = userns_exec_full(c->lxc_conf, clone_update_rootfs_wrapper, -- &data, "clone_update_rootfs_wrapper"); -+ &data, "clone_update_rootfs_wrapper"); - else - ret = clone_update_rootfs(&data); - if (ret < 0) -@@ -4145,9 +4153,9 @@ out: - } - - static struct lxc_container *lxcapi_clone(struct lxc_container *c, const char *newname, -- const char *lxcpath, int flags, -- const char *bdevtype, const char *bdevdata, uint64_t newsize, -- char **hookargs) -+ const char *lxcpath, int flags, -+ const char *bdevtype, const char *bdevdata, uint64_t newsize, -+ char **hookargs) - { - struct lxc_container * ret; - -@@ -4331,7 +4339,7 @@ static int do_lxcapi_snapshot(struct lxc_container *c, const char *commentfile) - * created in the original container - */ - flags = LXC_CLONE_SNAPSHOT | LXC_CLONE_KEEPMACADDR | LXC_CLONE_KEEPNAME | -- LXC_CLONE_KEEPBDEVTYPE | LXC_CLONE_MAYBE_SNAPSHOT; -+ LXC_CLONE_KEEPBDEVTYPE | LXC_CLONE_MAYBE_SNAPSHOT; - if (storage_is_dir(c->lxc_conf)) { - ERROR("Snapshot of directory-backed container requested"); - ERROR("Making a copy-clone. If you do want snapshots, then"); -@@ -4601,7 +4609,7 @@ static bool do_lxcapi_snapshot_restore(struct lxc_container *c, const char *snap - flags |= LXC_STORAGE_INTERNAL_OVERLAY_RESTORE; - - rest = lxcapi_clone(snap, newname, c->config_path, flags, bdev->type, -- NULL, 0, NULL); -+ NULL, 0, NULL); - storage_put(bdev); - if (rest && lxcapi_is_defined(rest)) - b = true; -@@ -4714,7 +4722,7 @@ static bool do_lxcapi_may_control(struct lxc_container *c) - WRAP_API(bool, lxcapi_may_control) - - static bool do_add_remove_node(pid_t init_pid, const char *path, bool add, -- struct stat *st) -+ struct stat *st) - { - int ret; - char *tmp; -@@ -4865,8 +4873,8 @@ static bool do_lxcapi_remove_device_node(struct lxc_container *c, const char *sr - WRAP_API_2(bool, lxcapi_remove_device_node, const char *, const char *) - - static bool do_lxcapi_attach_interface(struct lxc_container *c, -- const char *ifname, -- const char *dst_ifname) -+ const char *ifname, -+ const char *dst_ifname) - { - pid_t init_pid; - int ret = 0; -@@ -4904,8 +4912,8 @@ err: - WRAP_API_2(bool, lxcapi_attach_interface, const char *, const char *) - - static bool do_lxcapi_detach_interface(struct lxc_container *c, -- const char *ifname, -- const char *dst_ifname) -+ const char *ifname, -+ const char *dst_ifname) - { - int ret; - pid_t pid, pid_outside; -@@ -4980,7 +4988,7 @@ static bool do_lxcapi_detach_interface(struct lxc_container *c, - WRAP_API_2(bool, lxcapi_detach_interface, const char *, const char *) - - static int do_lxcapi_migrate(struct lxc_container *c, unsigned int cmd, -- struct migrate_opts *opts, unsigned int size) -+ struct migrate_opts *opts, unsigned int size) - { - int ret = -1; - struct migrate_opts *valid_opts = opts; -@@ -5125,7 +5133,7 @@ out: - /* 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; -+ struct lxc_conf *conf = NULL; - - if (!c || !c->lxc_conf) - return false; -@@ -5160,7 +5168,7 @@ WRAP_API_3(bool, lxcapi_set_terminal_default_fifos, 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; -+ struct lxc_conf *conf = NULL; - - if (!c || !c->lxc_conf || !info_file) - return false; -@@ -5263,16 +5271,16 @@ static int set_start_extral_configs(struct lxc_container *c) - struct lxc_conf *lconf = c->lxc_conf; - size_t i = 0; - -- if (lconf == NULL) { -- c->lxc_conf = malloc(sizeof(struct lxc_conf)); -- lconf = c->lxc_conf; -- if (lconf == NULL) { -- fprintf(stderr, "Out of memory\n"); -- return -1; -- } -- } -+ if (lconf == NULL) { -+ c->lxc_conf = malloc(sizeof(struct lxc_conf)); -+ lconf = c->lxc_conf; -+ if (lconf == NULL) { -+ fprintf(stderr, "Out of memory\n"); -+ return -1; -+ } -+ } - if (sprintf(fpath, "%s/%s/%s", c->config_path, c->name, START_GENERATE_CONFIG) < 0) { -- fprintf(stderr, "Sprintf config path failed\n"); -+ fprintf(stderr, "Sprintf config path failed\n"); - return -1; - } - if (!file_exists(fpath)) { -@@ -5290,9 +5298,10 @@ static int set_start_extral_configs(struct lxc_container *c) - lconf->init_gid = start_conf->gid; - } - if (start_conf->additional_gids != NULL && start_conf->additional_gids_len > 0) { -- gid_t *tmp; -- tmp = realloc(lconf->init_groups, (lconf->init_groups_len + start_conf->additional_gids_len) * sizeof(gid_t)); -- if (tmp == NULL) { -+ gid_t *tmp = NULL; -+ ret = lxc_mem_realloc((void **)&tmp, (lconf->init_groups_len + start_conf->additional_gids_len) * sizeof(gid_t), -+ lconf->init_groups, (lconf->init_groups_len) * sizeof(gid_t)); -+ if (ret != 0) { - fprintf(stderr, "Out of memory"); - goto out; - } -@@ -5314,8 +5323,9 @@ out: - - static struct lxc_container *do_lxc_container_new(const char *name, const char *configpath, bool load_config) - { -- struct lxc_container *c; -+ struct lxc_container *c = NULL; - size_t len; -+ const char *tmp = NULL; - - if (!name) - return NULL; -@@ -5327,10 +5337,17 @@ static struct lxc_container *do_lxc_container_new(const char *name, const char * - } - memset(c, 0, sizeof(*c)); - -- if (configpath) -+ if (configpath) { - c->config_path = strdup(configpath); -- else -- c->config_path = strdup(lxc_global_config_value("lxc.lxcpath")); -+ } -+ else { -+ tmp = lxc_global_config_value("lxc.lxcpath"); -+ if (tmp == NULL) { -+ fprintf(stderr, "Failed to get lxc path for %s\n", name); -+ goto err; -+ } -+ c->config_path = strdup(tmp); -+ } - if (!c->config_path) { - fprintf(stderr, "Failed to allocate memory for %s\n", name); - goto err; -@@ -5534,7 +5551,7 @@ int list_defined_containers(const char *lxcpath, char ***names, struct lxc_conta - c = lxc_container_new(direntp->d_name, lxcpath); - if (!c) { - INFO("Container %s:%s has a config but could not be loaded", -- lxcpath, direntp->d_name); -+ lxcpath, direntp->d_name); - - if (names) - if(!remove_from_array(names, direntp->d_name, cfound--)) -@@ -5545,7 +5562,7 @@ int list_defined_containers(const char *lxcpath, char ***names, struct lxc_conta - - if (!do_lxcapi_is_defined(c)) { - INFO("Container %s:%s has a config but is not defined", -- lxcpath, direntp->d_name); -+ lxcpath, direntp->d_name); - - if (names) - if(!remove_from_array(names, direntp->d_name, cfound--)) -@@ -5584,7 +5601,7 @@ free_bad: - } - - int list_active_containers(const char *lxcpath, char ***nret, -- struct lxc_container ***cret) -+ struct lxc_container ***cret) - { - int i, ret = -1, cret_cnt = 0, ct_name_cnt = 0; - int lxcpath_len; -@@ -5680,7 +5697,7 @@ int list_active_containers(const char *lxcpath, char ***nret, - c = lxc_container_new(p, lxcpath); - if (!c) { - INFO("Container %s:%s is running but could not be loaded", -- lxcpath, p); -+ lxcpath, p); - - remove_from_array(&ct_name, p, ct_name_cnt--); - if (is_hashed) -@@ -5741,7 +5758,7 @@ out: - } - - int list_all_containers(const char *lxcpath, char ***nret, -- struct lxc_container ***cret) -+ struct lxc_container ***cret) - { - int i, ret, active_cnt, ct_cnt, ct_list_cnt; - char **active_name; -diff --git a/src/lxc/mainloop.c b/src/lxc/mainloop.c -index 9603d1e..a127a13 100644 ---- a/src/lxc/mainloop.c -+++ b/src/lxc/mainloop.c -@@ -65,7 +65,7 @@ int lxc_mainloop(struct lxc_epoll_descr *descr, int timeout_ms) - * mainloop. - */ - ret = handler->callback(handler->fd, events[i].events, -- handler->data, descr); -+ handler->data, descr); - if (ret == LXC_MAINLOOP_CLOSE) - return 0; - } -@@ -79,11 +79,11 @@ int lxc_mainloop(struct lxc_epoll_descr *descr, int timeout_ms) - } - - int lxc_mainloop_add_handler(struct lxc_epoll_descr *descr, int fd, -- lxc_mainloop_callback_t callback, void *data) -+ lxc_mainloop_callback_t callback, void *data) - { - struct epoll_event ev; -- struct mainloop_handler *handler; -- struct lxc_list *item; -+ struct mainloop_handler *handler = NULL; -+ struct lxc_list *item = NULL; - - if (fd < 0) - return 0; -diff --git a/src/lxc/path.c b/src/lxc/path.c -index e917dcb..45ab4c3 100644 ---- a/src/lxc/path.c -+++ b/src/lxc/path.c -@@ -10,6 +10,7 @@ - - #include "path.h" - #include "log.h" -+#include "utils.h" - - lxc_log_define(lxc_path_ui, lxc); - -@@ -29,6 +30,10 @@ bool specify_current_dir(const char *path) - } - - bname = basename(basec); -+ if (bname == NULL) { -+ ERROR("Out of memory"); -+ return false; -+ } - res = !strcmp(bname, "."); - free(basec); - return res; -@@ -45,11 +50,15 @@ bool has_traling_path_separator(const char *path) - // 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) -+ 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) { -@@ -66,7 +75,7 @@ char *preserve_trailing_dot_or_separator(const char *cleanedpath, - } - - if (!has_traling_path_separator(respath) && -- has_traling_path_separator(originalpath)) -+ has_traling_path_separator(originalpath)) - strcat(respath, "/"); - - return respath; -@@ -107,160 +116,373 @@ bool filepath_split(const char *path, char **dir, char **base) - return true; - } - --/* -- * 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 *resolved) -+ -+static bool do_clean_path_continue(const char *endpos, const char *stpos, const char *respath, char **dst) - { -- char *rpath, *dest; -- const char *start, *end, *rpath_limit; -+ 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; -+} - -- if (path == NULL || path[0] == '\0') -- return NULL; -+int do_clean_path(const char *respath, const char *limit_respath, -+ const char *stpos, char **dst) -+{ -+ char *dest = *dst; -+ const char *endpos = NULL; -+ errno_t ret; - -- if (resolved == NULL) { -- rpath = malloc(PATH_MAX); -- if (rpath == NULL) { -- ERROR("Out of memory"); -- return NULL; -+ for (endpos = stpos; *stpos; stpos = endpos) { -+ while (ISSLASH(*stpos)) { -+ ++stpos; - } -- } else { -- rpath = resolved; -+ -+ 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'; - } -- rpath_limit = rpath + PATH_MAX; -+ *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; -+ errno_t ret; -+ -+ 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(rpath, PATH_MAX)) { -+ if (!getcwd(respath, PATH_MAX)) { - ERROR("Failed to getcwd"); -- rpath[0] = '\0'; -+ respath[0] = '\0'; - goto error; - } -- dest = strchr(rpath, '\0'); -- start = path; -+ dest = strchr(respath, '\0'); -+ if (dest == NULL) { -+ ERROR("Failed to get the end of respath"); -+ goto error; -+ } -+ strcat(respath, path); -+ stpos = path; - } else { -- dest = rpath; -+ dest = respath; - *dest++ = '/'; -- start = path; -+ stpos = path; - } - -- for (end = start; *start; start = end) { -- /* Skip sequence of multiple path-separators. */ -- while (ISSLASH(*start)) -- ++start; -+ if (do_clean_path(respath, limit_respath, stpos, &dest)) { -+ goto error; -+ } - -- /* Find end of path component. */ -- for (end = start; *end && !ISSLASH(*end); ++end) -- /* Nothing. */; -+ if (dest > respath + 1 && ISSLASH(dest[-1])) { -+ --dest; -+ } -+ *dest = '\0'; - -- if (end - start == 0) { -- break; -- } else if (end - start == 1 && start[0] == '.') { -- /* nothing */; -- } else if (end - start == 2 && start[0] == '.' && start[1] == '.') { -- /* Back up to previous component, ignore if at root already. */ -- if (dest > rpath + 1) -- for (--dest; dest > rpath && !ISSLASH(dest[-1]); --dest) -- continue; -- } else { -- size_t new_size; -- -- if (!ISSLASH(dest[-1])) -- *dest++ = '/'; -- -- if (dest + (end - start) >= rpath_limit) { -- long long dest_offset = dest - rpath; -- char *new_rpath; -- -- if (resolved) { -- printf("Path is to long"); -- if (dest > rpath + 1) -- dest--; -- *dest = '\0'; -- goto error; -- } -- -- new_size = rpath_limit - rpath; -- if (end - start + 1 > PATH_MAX) -- new_size += end - start + 1; -- else -- new_size += PATH_MAX; -- new_rpath = (char *) realloc(rpath, new_size); -- if (new_rpath == NULL) { -- ERROR("Out of memory"); -- goto error; -- } -- rpath = new_rpath; -- rpath_limit = rpath + new_size; -- -- dest = rpath + dest_offset; -+ 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; -+} - -- memcpy(dest, start, end - start); -- dest += end - start; -- *dest = '\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; -+ errno_t rc = EOK; -+ 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; - } - } -- if (dest > rpath + 1 && ISSLASH(dest[-1])) -- --dest; -- *dest = '\0'; - -- return rpath; -+ len = strlen(*end); -+ if (len >= PATH_MAX - n) { -+ ERROR("Path is too long"); -+ goto out; -+ } - --error: -- if (resolved == NULL) -- free(rpath); -- return NULL; -+ 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; - } - --// evalSymlinksInScope will evaluate symlinks in `path` within a scope `root` and return --// a result guaranteed to be contained within the scope `root`, at the time of the call. --// Symlinks in `root` are not evaluated and left as-is. --// Errors encountered while attempting to evaluate symlinks in path will be returned. --// Non-existing paths are valid and do not constitute an error. --// `path` has to contain `root` as a prefix, or else an error will be returned. --// Trying to break out from `root` does not constitute an error. --// --// Example: --// If /foo/bar -> /outside, --// FollowSymlinkInScope("/foo/bar", "/foo") == "/foo/outside" instead of "/oustide" --char *eval_symlinks_in_scope(const char *fullpath, const char *rootpath) -+static bool do_eval_symlinks_in_scope_is_symlink(const char *path) - { -- char resroot[PATH_MAX] = {0}, *root = NULL; -- char *rpath, *dest, *prefix, *extra_buf = NULL; -- const char *start, *end, *rpath_limit; -+ 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; -+ errno_t rc = EOK; -+ 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; -+ errno_t rc = EOK; - -- if (!fullpath || !rootpath) -+ if (fullpath == NULL || rootpath == NULL) { - return NULL; -+ } - -- root = cleanpath(rootpath, resroot); -- if (!root) { -+ root = cleanpath(rootpath, resroot, sizeof(resroot)); -+ if (root == NULL) { - ERROR("Failed to get cleaned path"); - return NULL; - } - -- if (!strcmp(fullpath, root)) -+ if (!strcmp(fullpath, root)) { - return strdup(fullpath); -+ } - -- if (!strstr(fullpath, root)) { -+ if (strstr(fullpath, root) == NULL) { - ERROR("Path '%s' is not in '%s'", fullpath, root); - return NULL; - } - -- rpath = malloc(PATH_MAX); -+ rpath = lxc_common_calloc_s(PATH_MAX); - if (rpath == NULL) { - ERROR("Out of memory"); -- goto error; -- return NULL; -+ goto out; - } - rpath_limit = rpath + PATH_MAX; - - prefix = root; -- prefix_len = strlen(prefix); -- if (!strcmp(prefix, "/")) -+ prefix_len = (size_t)strlen(prefix); -+ if (!strcmp(prefix, "/")) { - prefix_len = 0; -+ } - - dest = rpath; - if (prefix_len) { -@@ -268,133 +490,19 @@ char *eval_symlinks_in_scope(const char *fullpath, const char *rootpath) - dest += prefix_len; - } - *dest++ = '/'; -- start = fullpath + prefix_len; - -- for (end = start; *start; start = end) { -- struct stat st; -- int n; -- -- /* Skip sequence of multiple path-separators. */ -- while (ISSLASH(*start)) -- ++start; -- -- /* Find end of path component. */ -- for (end = start; *end && !ISSLASH(*end); ++end) -- /* Nothing. */; -- -- if (end - start == 0) { -- break; -- } else if (end - start == 1 && start[0] == '.') { -- /* nothing */; -- } else if (end - start == 2 && start[0] == '.' && start[1] == '.') { -- /* Back up to previous component, ignore if at root already. */ -- if (dest > rpath + prefix_len + 1) -- for (--dest; dest > rpath && !ISSLASH(dest[-1]); --dest) -- continue; -- } else { -- size_t new_size; -- -- if (!ISSLASH(dest[-1])) -- *dest++ = '/'; -- -- if (dest + (end - start) >= rpath_limit) { -- long long dest_offset = dest - rpath; -- char *new_rpath; -- -- new_size = rpath_limit - rpath; -- if (end - start + 1 > PATH_MAX) -- new_size += end - start + 1; -- else -- new_size += PATH_MAX; -- new_rpath = (char *) realloc(rpath, new_size); -- if (new_rpath == NULL) { -- ERROR("Out of memory"); -- goto error; -- } -- rpath = new_rpath; -- rpath_limit = rpath + new_size; -- -- dest = rpath + dest_offset; -- } -- -- memcpy(dest, start, end - start); -- dest += end - start; -- *dest = '\0'; -- -- if (lstat(rpath, &st) < 0) { -- // if rpath does not exist, accept it -- continue; -- } -- -- if (S_ISLNK(st.st_mode)) { -- char *buf; -- size_t len; -- -- if (++num_links > MAXSYMLINKS) { -- ERROR("Too many links in '%s'", fullpath); -- goto error; -- } -- -- buf = malloc(PATH_MAX); -- if (!buf) { -- ERROR("Out of memory"); -- goto error; -- } -- -- n = readlink(rpath, buf, PATH_MAX - 1); -- if (n < 0) { -- free(buf); -- goto error; -- } -- buf[n] = '\0'; -- -- if (!extra_buf) { -- extra_buf = malloc(PATH_MAX); -- if (!extra_buf) { -- ERROR("Out of memory"); -- free(buf); -- goto error; -- } -- } -- -- len = strlen(end); -- if ((long int)(n + len) >= PATH_MAX) { -- free(buf); -- ERROR("Path is too long"); -- goto error; -- } -- -- /* Careful here, end may be a pointer into extra_buf... */ -- memmove(&extra_buf[n], end, len + 1); -- fullpath = end = memcpy(extra_buf, buf, n); -- -- if (IS_ABSOLUTE_FILE_NAME(buf)) { -- if (prefix_len) -- memcpy(rpath, prefix, prefix_len); -- dest = rpath + prefix_len; -- *dest++ = '/'; /* It's an absolute symlink */ -- } else { -- /* Back up to previous component, ignore if at root -- already: */ -- if (dest > rpath + prefix_len + 1) -- for (--dest; dest > rpath && !ISSLASH(dest[-1]); --dest) -- continue; -- } -- } -- } -+ 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])) -+ -+ if (dest > rpath + prefix_len + 1 && ISSLASH(dest[-1])) { - --dest; -+ } - *dest = '\0'; -- -- if (extra_buf) -- free(extra_buf); -- - return rpath; - --error: -- if (extra_buf) -- free(extra_buf); -+out: - free(rpath); - return NULL; - } -@@ -406,13 +514,13 @@ 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); -+ full = cleanpath(fullpath, resfull, PATH_MAX); - if (!full) { - ERROR("Failed to get cleaned path"); - return NULL; - } - -- root = cleanpath(rootpath, resroot); -+ root = cleanpath(rootpath, resroot, PATH_MAX); - if (!root) { - ERROR("Failed to get cleaned path"); - return NULL; -@@ -430,7 +538,7 @@ char *follow_symlink_in_scope(const char *fullpath, const char *rootpath) - // 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 **scopepath) - { - char resolved[PATH_MAX] = {0}, *cleanedpath = NULL; - char *fullpath = NULL; -@@ -441,7 +549,7 @@ int get_resource_path(const char *rootpath, const char *path, - - *scopepath = NULL; - -- cleanedpath = cleanpath(path, resolved); -+ cleanedpath = cleanpath(path, resolved, PATH_MAX); - if (!cleanedpath) { - ERROR("Failed to get cleaned path"); - return -1; -@@ -475,13 +583,13 @@ char *path_relative(const char *basepath, const char *targpath) - 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); -+ base = cleanpath(basepath, resbase, PATH_MAX); - if (!base) { - ERROR("Failed to get cleaned path"); - return NULL; - } - -- targ = cleanpath(targpath, restarg); -+ targ = cleanpath(targpath, restarg, PATH_MAX); - if (!targ) { - ERROR("Failed to get cleaned path"); - return NULL; -@@ -512,7 +620,7 @@ char *path_relative(const char *basepath, const char *targpath) - // Base elements left. Must go up before going down. - int seps = 0, i; - size_t ncopyed = 0, seps_size; -- char *buf; -+ char *buf = NULL; - - for (bi = b0; bi < bl; bi++) { - if (ISSLASH(base[bi])) -@@ -543,4 +651,4 @@ char *path_relative(const char *basepath, const char *targpath) - } - - return strdup(targ + t0); --} -\ No newline at end of file -+} -diff --git a/src/lxc/path.h b/src/lxc/path.h -index e3a04cc..5100941 100644 ---- a/src/lxc/path.h -+++ b/src/lxc/path.h -@@ -13,7 +13,7 @@ bool has_traling_path_separator(const char *path); - // 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); -+ const char *originalpath); - - - // Split splits path immediately following the final Separator, -@@ -27,20 +27,8 @@ 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 *resolved); -+char *cleanpath(const char *path, char *realpath, size_t realpath_len); - --// evalSymlinksInScope will evaluate symlinks in `path` within a scope `root` and return --// a result guaranteed to be contained within the scope `root`, at the time of the call. --// Symlinks in `root` are not evaluated and left as-is. --// Errors encountered while attempting to evaluate symlinks in path will be returned. --// Non-existing paths are valid and do not constitute an error. --// `path` has to contain `root` as a prefix, or else an error will be returned. --// Trying to break out from `root` does not constitute an error. --// --// Example: --// If /foo/bar -> /outside, --// FollowSymlinkInScope("/foo/bar", "/foo") == "/foo/outside" instead of "/oustide" --char *eval_symlinks_in_scope(const char *fullpath, const char *rootpath); - - // FollowSymlinkInScope is a wrapper around evalSymlinksInScope that returns an - // absolute path. This function handles paths in a platform-agnostic manner. -@@ -55,7 +43,7 @@ char *follow_symlink_in_scope(const char *fullpath, const char *rootpath); - // 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 **scopepath); - - // Rel returns a relative path that is lexically equivalent to targpath when - // joined to basepath with an intervening separator. That is, -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 4541793..ccdd844 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -93,7 +93,7 @@ extern void mod_all_rdeps(struct lxc_container *c, bool inc); - static bool do_destroy_container(struct lxc_handler *handler); - static int lxc_rmdir_onedev_wrapper(void *data); - static void lxc_destroy_container_on_signal(struct lxc_handler *handler, -- const char *name); -+ const char *name); - - /* isulad: start timeout thread */ - typedef enum { -@@ -136,8 +136,8 @@ static void print_top_failing_dir(const char *path) - ret = access(copy, X_OK); - if (ret != 0) { - SYSERROR("Could not access %s. Please grant it x " -- "access, or add an ACL for the container " -- "root", copy); -+ "access, or add an ACL for the container " -+ "root", copy); - return; - } - *p = saved; -@@ -180,7 +180,7 @@ static int lxc_try_preserve_ns(const int pid, const char *ns) - * Return true on success, false on failure. - */ - static bool lxc_try_preserve_namespaces(struct lxc_handler *handler, -- int ns_clone_flags, pid_t pid) -+ int ns_clone_flags, pid_t pid) - { - int i; - -@@ -243,8 +243,8 @@ static bool match_dlog_fds(struct dirent *direntp) - } - - if (strcmp(link, "/dev/log_main") == 0 || -- strcmp(link, "/dev/log_system") == 0 || -- strcmp(link, "/dev/log_radio") == 0) -+ strcmp(link, "/dev/log_system") == 0 || -+ strcmp(link, "/dev/log_radio") == 0) - return true; - - return false; -@@ -252,7 +252,7 @@ static bool match_dlog_fds(struct dirent *direntp) - #endif - - int lxc_check_inherited(struct lxc_conf *conf, bool closeall, -- int *fds_to_ignore, size_t len_fds) -+ int *fds_to_ignore, size_t len_fds) - { - int fd, fddir; - size_t i; -@@ -293,7 +293,7 @@ restart: - break; - - if (fd == fddir || fd == lxc_log_fd || -- (i < len_fds && fd == fds_to_ignore[i])) -+ (i < len_fds && fd == fds_to_ignore[i])) - continue; - - /* Keep state clients that wait on reboots. */ -@@ -377,7 +377,7 @@ static int setup_signal_fd(sigset_t *oldmask) - } - - static int signal_handler(int fd, uint32_t events, void *data, -- struct lxc_epoll_descr *descr) -+ struct lxc_epoll_descr *descr) - { - int ret; - siginfo_t info; -@@ -427,14 +427,14 @@ static int signal_handler(int fd, uint32_t events, void *data, - kill(hdlr->pid, SIGTERM); - INFO("Killing %d since terminal hung up", hdlr->pid); - return hdlr->init_died ? LXC_MAINLOOP_CLOSE -- : LXC_MAINLOOP_CONTINUE; -+ : LXC_MAINLOOP_CONTINUE; - } - - if (siginfo.ssi_signo != SIGCHLD) { - kill(hdlr->pid, siginfo.ssi_signo); - INFO("Forwarded signal %d to pid %d", siginfo.ssi_signo, hdlr->pid); - return hdlr->init_died ? LXC_MAINLOOP_CLOSE -- : LXC_MAINLOOP_CONTINUE; -+ : LXC_MAINLOOP_CONTINUE; - } - - /* More robustness, protect ourself from a SIGCHLD sent -@@ -444,19 +444,19 @@ static int signal_handler(int fd, uint32_t events, void *data, - NOTICE("Received %d from pid %d instead of container init %d", - siginfo.ssi_signo, siginfo.ssi_pid, hdlr->pid); - return hdlr->init_died ? LXC_MAINLOOP_CLOSE -- : LXC_MAINLOOP_CONTINUE; -+ : LXC_MAINLOOP_CONTINUE; - } - - if (siginfo.ssi_code == CLD_STOPPED) { - INFO("Container init process was stopped"); - return hdlr->init_died ? LXC_MAINLOOP_CLOSE -- : LXC_MAINLOOP_CONTINUE; -+ : LXC_MAINLOOP_CONTINUE; - } - - if (siginfo.ssi_code == CLD_CONTINUED) { - INFO("Container init process was continued"); - return hdlr->init_died ? LXC_MAINLOOP_CLOSE -- : LXC_MAINLOOP_CONTINUE; -+ : LXC_MAINLOOP_CONTINUE; - } - - DEBUG("Container init process %d exited", hdlr->pid); -@@ -465,7 +465,7 @@ static int signal_handler(int fd, uint32_t events, void *data, - } - - int lxc_serve_state_clients(const char *name, struct lxc_handler *handler, -- lxc_state_t state) -+ lxc_state_t state) - { - size_t retlen; - ssize_t ret; -@@ -516,14 +516,14 @@ int lxc_serve_state_clients(const char *name, struct lxc_handler *handler, - } - - static int lxc_serve_state_socket_pair(const char *name, -- struct lxc_handler *handler, -- lxc_state_t state) -+ struct lxc_handler *handler, -+ lxc_state_t state) - { - ssize_t ret; - - if (!handler->daemonize || -- handler->state_socket_pair[1] < 0 || -- state == STARTING) -+ handler->state_socket_pair[1] < 0 || -+ state == STARTING) - return 0; - - /* Close read end of the socket pair. */ -@@ -532,7 +532,9 @@ static int lxc_serve_state_socket_pair(const char *name, - - again: - ret = lxc_abstract_unix_send_credential(handler->state_socket_pair[1], -- &(int){state}, sizeof(int)); -+ &(int) { -+ state -+ }, sizeof(int)); - if (ret < 0) { - SYSERROR("Failed to send state to %d", handler->state_socket_pair[1]); - -@@ -558,7 +560,7 @@ again: - } - - int lxc_set_state(const char *name, struct lxc_handler *handler, -- lxc_state_t state) -+ lxc_state_t state) - { - int ret; - -@@ -587,7 +589,7 @@ int lxc_poll(const char *name, struct lxc_handler *handler) - struct lxc_epoll_descr descr, descr_console; - - if (handler->conf->console.path && -- strcmp(handler->conf->console.path, "none") == 0) -+ strcmp(handler->conf->console.path, "none") == 0) - has_console = false; - - ret = lxc_mainloop_open(&descr); -@@ -726,7 +728,7 @@ void lxc_free_handler(struct lxc_handler *handler) - } - - struct lxc_handler *lxc_init_handler(const char *name, struct lxc_conf *conf, -- const char *lxcpath, bool daemonize) -+ const char *lxcpath, bool daemonize) - { - int i, ret; - struct lxc_handler *handler; -@@ -764,7 +766,7 @@ struct lxc_handler *lxc_init_handler(const char *name, struct lxc_conf *conf, - * again currently so don't open another socketpair(). - */ - ret = socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, -- handler->state_socket_pair); -+ handler->state_socket_pair); - if (ret < 0) { - ERROR("Failed to create anonymous pair of unix sockets"); - goto on_error; -@@ -829,49 +831,49 @@ int lxc_init(const char *name, struct lxc_handler *handler) - ret = setenv("LXC_CONFIG_FILE", conf->rcfile, 1); - if (ret < 0) - SYSERROR("Failed to set environment variable: " -- "LXC_CONFIG_FILE=%s", conf->rcfile); -+ "LXC_CONFIG_FILE=%s", conf->rcfile); - } - - if (conf->rootfs.mount) { - ret = setenv("LXC_ROOTFS_MOUNT", conf->rootfs.mount, 1); - if (ret < 0) - SYSERROR("Failed to set environment variable: " -- "LXC_ROOTFS_MOUNT=%s", conf->rootfs.mount); -+ "LXC_ROOTFS_MOUNT=%s", conf->rootfs.mount); - } - - if (conf->rootfs.path) { - ret = setenv("LXC_ROOTFS_PATH", conf->rootfs.path, 1); - if (ret < 0) - SYSERROR("Failed to set environment variable: " -- "LXC_ROOTFS_PATH=%s", conf->rootfs.path); -+ "LXC_ROOTFS_PATH=%s", conf->rootfs.path); - } - - if (conf->console.path) { - ret = setenv("LXC_CONSOLE", conf->console.path, 1); - if (ret < 0) - SYSERROR("Failed to set environment variable: " -- "LXC_CONSOLE=%s", conf->console.path); -+ "LXC_CONSOLE=%s", conf->console.path); - } - - if (conf->console.log_path) { - ret = setenv("LXC_CONSOLE_LOGPATH", conf->console.log_path, 1); - if (ret < 0) - SYSERROR("Failed to set environment variable: " -- "LXC_CONSOLE_LOGPATH=%s", conf->console.log_path); -+ "LXC_CONSOLE_LOGPATH=%s", conf->console.log_path); - } - - if (cgns_supported()) { - ret = setenv("LXC_CGNS_AWARE", "1", 1); - if (ret < 0) - SYSERROR("Failed to set environment variable " -- "LXC_CGNS_AWARE=1"); -+ "LXC_CGNS_AWARE=1"); - } - - loglevel = lxc_log_priority_to_string(lxc_log_get_level()); - ret = setenv("LXC_LOG_LEVEL", loglevel, 1); - if (ret < 0) - SYSERROR("Set environment variable LXC_LOG_LEVEL=%s", -- loglevel); -+ loglevel); - - if (conf->hooks_version == 0) - ret = setenv("LXC_HOOK_VERSION", "0", 1); -@@ -959,6 +961,7 @@ 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) -@@ -968,7 +971,16 @@ static int _read_procs_file(const char *path, pid_t **pids, size_t *len) - pid_t pid; - trim_line(line); - pid = (pid_t)atoll(line); -- *pids = realloc(*pids, sizeof(pid_t) * (*len + 1)); -+ 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)++; - } -@@ -980,8 +992,8 @@ static int _read_procs_file(const char *path, pid_t **pids, size_t *len) - - static int _recursive_read_cgroup_procs(const char *dirpath, pid_t **pids, size_t *len) - { -- struct dirent *direntp; -- DIR *dir; -+ struct dirent *direntp = NULL; -+ DIR *dir = NULL; - int ret, failed = 0; - char pathname[PATH_MAX]; - -@@ -996,7 +1008,7 @@ static int _recursive_read_cgroup_procs(const char *dirpath, pid_t **pids, size_ - int rc; - - if (!strcmp(direntp->d_name, ".") || -- !strcmp(direntp->d_name, "..")) -+ !strcmp(direntp->d_name, "..")) - continue; - - rc = snprintf(pathname, PATH_MAX, "%s/%s", dirpath, direntp->d_name); -@@ -1122,11 +1134,11 @@ void lxc_fini(const char *name, struct lxc_handler *handler) - - if (handler->conf->hooks_version == 0) - ret = asprintf(&namespaces[namespace_count], -- "%s:/proc/%d/fd/%d", ns_info[i].proc_name, -- self, handler->nsfd[i]); -+ "%s:/proc/%d/fd/%d", ns_info[i].proc_name, -+ self, handler->nsfd[i]); - else - ret = asprintf(&namespaces[namespace_count], -- "/proc/%d/fd/%d", self, handler->nsfd[i]); -+ "/proc/%d/fd/%d", self, handler->nsfd[i]); - if (ret == -1) { - SYSERROR("Failed to allocate memory"); - break; -@@ -1140,7 +1152,7 @@ void lxc_fini(const char *name, struct lxc_handler *handler) - ret = setenv(ns_info[i].env_name, namespaces[namespace_count], 1); - if (ret < 0) - SYSERROR("Failed to set environment variable %s=%s", -- ns_info[i].env_name, namespaces[namespace_count]); -+ ns_info[i].env_name, namespaces[namespace_count]); - else - TRACE("Set environment variable %s=%s", - ns_info[i].env_name, namespaces[namespace_count]); -@@ -1153,14 +1165,14 @@ void lxc_fini(const char *name, struct lxc_handler *handler) - ret = setenv("LXC_TARGET", "reboot", 1); - if (ret < 0) - SYSERROR("Failed to set environment variable: " -- "LXC_TARGET=reboot"); -+ "LXC_TARGET=reboot"); - } - - if (handler->conf->reboot == REBOOT_NONE) { - ret = setenv("LXC_TARGET", "stop", 1); - if (ret < 0) - SYSERROR("Failed to set environment variable: " -- "LXC_TARGET=stop"); -+ "LXC_TARGET=stop"); - } - - if (handler->conf->hooks_version == 0) -@@ -1252,7 +1264,7 @@ retry: - - /* Keep state clients that want to be notified about reboots. */ - if ((handler->conf->reboot > REBOOT_NONE) && -- (client->states[RUNNING] == 2)) -+ (client->states[RUNNING] == 2)) - continue; - - /* close state client socket */ -@@ -1287,7 +1299,8 @@ void lxc_abort(const char *name, struct lxc_handler *handler) - - static int do_start(void *data) - { -- int ret, i; -+ int ret = 0; -+ int i; - char path[PATH_MAX]; - uid_t new_uid; - gid_t new_gid; -@@ -1351,7 +1364,7 @@ static int do_start(void *data) - * https://github.com/lxc/lxd/issues/1978. - */ - if ((handler->ns_clone_flags & (CLONE_NEWNET | CLONE_NEWUSER)) == -- (CLONE_NEWNET | CLONE_NEWUSER)) { -+ (CLONE_NEWNET | CLONE_NEWUSER)) { - ret = unshare(CLONE_NEWNET); - if (ret < 0) { - SYSERROR("Failed to unshare CLONE_NEWNET"); -@@ -1390,11 +1403,11 @@ static int do_start(void *data) - * user namespace. - */ - if (!lxc_setgroups(0, NULL) && -- (handler->am_root || errno != EPERM)) -+ (handler->am_root || errno != EPERM)) - goto out_warn_father; - - ret = prctl(PR_SET_DUMPABLE, prctl_arg(1), prctl_arg(0), -- prctl_arg(0), prctl_arg(0)); -+ prctl_arg(0), prctl_arg(0)); - if (ret < 0) - goto out_warn_father; - -@@ -1413,7 +1426,7 @@ static int do_start(void *data) - } - - ret = snprintf(path, sizeof(path), "%s/dev/null", -- handler->conf->rootfs.mount); -+ handler->conf->rootfs.mount); - if (ret < 0 || ret >= sizeof(path)) - goto out_warn_father; - -@@ -1474,7 +1487,7 @@ static int do_start(void *data) - ret = putenv((char *)iterator->elem); - if (ret < 0) { - SYSERROR("Failed to set environment variable: %s", -- (char *)iterator->elem); -+ (char *)iterator->elem); - goto out_warn_father; - } - } -@@ -1498,10 +1511,10 @@ static int do_start(void *data) - */ - if (handler->conf->no_new_privs) { - ret = prctl(PR_SET_NO_NEW_PRIVS, prctl_arg(1), prctl_arg(0), -- prctl_arg(0), prctl_arg(0)); -+ prctl_arg(0), prctl_arg(0)); - if (ret < 0) { - SYSERROR("Could not set PR_SET_NO_NEW_PRIVS to block " -- "execve() gainable privileges"); -+ "execve() gainable privileges"); - goto out_warn_father; - } - DEBUG("Set PR_SET_NO_NEW_PRIVS to block execve() gainable " -@@ -1550,25 +1563,25 @@ static int do_start(void *data) - * setup on its console ie. the pty allocated in lxc_terminal_setup() so - * make sure that that pty is stdin,stdout,stderr. - */ -- setsid(); -- if (!handler->disable_pty && handler->conf->console.slave >= 0) { -+ setsid(); -+ 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) { -+ 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; -- } -- } -+ } -+ } - - /* If we mounted a temporary proc, then unmount it now. */ - tmp_proc_unmount(handler->conf); -@@ -1611,7 +1624,7 @@ static int do_start(void *data) - 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)); -+ __FILE__, __LINE__, strerror(errno)); - goto out_warn_father; - } - if (chdir(handler->conf->init_cwd)) { -@@ -1636,7 +1649,7 @@ static int do_start(void *data) - ret = putenv((char *)iterator->elem); - if (ret < 0) { - SYSERROR("Failed to set environment variable: %s", -- (char *)iterator->elem); -+ (char *)iterator->elem); - goto out_warn_father; - } - } -@@ -1675,9 +1688,9 @@ static int do_start(void *data) - * drop groups if we can, so ensure that we have necessary privilege. - */ - if (lxc_list_empty(&handler->conf->id_map)) -- #if HAVE_LIBCAP -+#if HAVE_LIBCAP - if (lxc_proc_cap_is_set(CAP_SETGID, CAP_EFFECTIVE)) -- #endif -+#endif - /* 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"); -@@ -1834,7 +1847,7 @@ static inline int do_share_ns(void *arg) - * setns() will fail here. - */ - SYSERROR("Failed to inherit %s namespace", -- ns_info[i].proc_name); -+ ns_info[i].proc_name); - return -1; - } - -@@ -1855,7 +1868,7 @@ static int lxc_write_container_info(char *filename, pid_t pid, pid_t p_pid, unsi - FILE *pid_fp = NULL; - int ret = 0; - -- pid_fp = fopen(filename, "w"); -+ pid_fp = lxc_fopen(filename, "w"); - if (pid_fp == NULL) { - SYSERROR("Failed to create pidfile '%s'",filename); - ret = -1; -@@ -1898,7 +1911,7 @@ static int lxc_check_container_info(char *filename, pid_t pid, pid_t p_pid, unsi - } - - if (pid != saved_pid || p_pid != saved_ppid -- || start_at != saved_start_time || p_start_at != saved_pstart_time) { -+ || start_at != saved_start_time || p_start_at != saved_pstart_time) { - ERROR("Check container info failed"); - ret = -1; - goto out; -@@ -1973,7 +1986,7 @@ static int lxc_spawn(struct lxc_handler *handler) - return -1; - - ret = socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, -- handler->data_sock); -+ handler->data_sock); - if (ret < 0) { - lxc_sync_fini(handler); - return -1; -@@ -2044,7 +2057,7 @@ static int lxc_spawn(struct lxc_handler *handler) - pid_t attacher_pid; - - attacher_pid = lxc_clone(do_share_ns, handler, -- CLONE_VFORK | CLONE_VM | CLONE_FILES); -+ CLONE_VFORK | CLONE_VM | CLONE_FILES); - if (attacher_pid < 0) { - SYSERROR(LXC_CLONE_ERROR); - goto out_delete_net; -@@ -2057,7 +2070,7 @@ static int lxc_spawn(struct lxc_handler *handler) - } - } else { - handler->pid = lxc_raw_clone_cb(do_start, handler, -- handler->ns_on_clone_flags); -+ handler->ns_on_clone_flags); - } - if (handler->pid < 0) { - SYSERROR(LXC_CLONE_ERROR); -@@ -2108,7 +2121,7 @@ static int lxc_spawn(struct lxc_handler *handler) - */ - if (wants_to_map_ids) { - if (!handler->conf->ns_share[LXC_NS_USER] && -- (handler->conf->ns_keep & CLONE_NEWUSER) == 0) { -+ (handler->conf->ns_keep & CLONE_NEWUSER) == 0) { - ret = lxc_map_ids(id_map, handler->pid); - if (ret < 0) { - ERROR("Failed to set up id mapping."); -@@ -2157,16 +2170,16 @@ static int lxc_spawn(struct lxc_handler *handler) - /* Create the network configuration. */ - if (handler->ns_clone_flags & CLONE_NEWNET) { - ret = lxc_network_move_created_netdev_priv(handler->lxcpath, -- handler->name, -- &conf->network, -- handler->pid); -+ handler->name, -+ &conf->network, -+ handler->pid); - if (ret < 0) { - ERROR("Failed to create the configured network"); - goto out_delete_net; - } - - ret = lxc_create_network_unpriv(handler->lxcpath, handler->name, -- &conf->network, handler->pid, conf->hooks_version); -+ &conf->network, handler->pid, conf->hooks_version); - if (ret < 0) { - ERROR("Failed to create the configured network"); - goto out_delete_net; -@@ -2245,10 +2258,7 @@ static int lxc_spawn(struct lxc_handler *handler) - } - - /* isulad: Run oci prestart hook at here */ -- char* oci_hook_args[1]; -- oci_hook_args[0] = alloca(strlen(lxcpath) + 1); -- (void)strlcpy(oci_hook_args[0], lxcpath, strlen(lxcpath) + 1); -- ret = run_lxc_hooks(name, "oci-prestart", conf, oci_hook_args); -+ ret = run_oci_hooks(name, "oci-prestart", conf, lxcpath); - if (ret < 0) { - ERROR("Failed to run oci prestart hooks"); - goto out_delete_net; -@@ -2302,7 +2312,7 @@ static int lxc_spawn(struct lxc_handler *handler) - goto out_abort; - - /* isulad: Run oci prestart hook at here */ -- ret = run_lxc_hooks(name, "oci-poststart", conf, oci_hook_args); -+ ret = run_oci_hooks(name, "oci-poststart", conf, lxcpath); - if (ret < 0) { - ERROR("Failed to run oci poststart hooks"); - goto out_abort; -@@ -2402,8 +2412,8 @@ out: - #define ExitSignalOffset 128 - - int __lxc_start(const char *name, struct lxc_handler *handler, -- struct lxc_operations* ops, void *data, const char *lxcpath, -- bool daemonize, int *error_num, unsigned int start_timeout) -+ struct lxc_operations* ops, void *data, const char *lxcpath, -+ bool daemonize, int *error_num, unsigned int start_timeout) - { - int ret, status, exit_code; - struct lxc_conf *conf = handler->conf; -@@ -2560,7 +2570,7 @@ static struct lxc_operations start_ops = { - }; - - int lxc_start(const char *name, char *const argv[], struct lxc_handler *handler, -- const char *lxcpath, bool daemonize, int *error_num, unsigned int start_timeout) -+ const char *lxcpath, bool daemonize, int *error_num, unsigned int start_timeout) - { - struct start_args start_arg = { - .argv = argv, -@@ -2571,7 +2581,7 @@ int lxc_start(const char *name, char *const argv[], struct lxc_handler *handler, - } - - static void lxc_destroy_container_on_signal(struct lxc_handler *handler, -- const char *name) -+ const char *name) - { - char destroy[PATH_MAX]; - struct lxc_container *c; -@@ -2607,7 +2617,7 @@ static void lxc_destroy_container_on_signal(struct lxc_handler *handler, - - if (!handler->am_root) - ret = userns_exec_full(handler->conf, lxc_rmdir_onedev_wrapper, -- destroy, "lxc_rmdir_onedev_wrapper"); -+ destroy, "lxc_rmdir_onedev_wrapper"); - else - ret = lxc_rmdir_onedev(destroy, NULL); - -@@ -2630,7 +2640,7 @@ static bool do_destroy_container(struct lxc_handler *handler) - - if (!handler->am_root) { - ret = userns_exec_full(handler->conf, storage_destroy_wrapper, -- handler->conf, "storage_destroy_wrapper"); -+ handler->conf, "storage_destroy_wrapper"); - if (ret < 0) - return false; - -@@ -2846,11 +2856,7 @@ int do_lxcapi_clean_resource(char *name, char *lxcpath, struct lxc_conf *conf, p - signal_all_processes(handler); - } - -- char* oci_hook_args[1]; -- oci_hook_args[0] = alloca(strlen(handler->lxcpath) + 1); -- (void)strlcpy(oci_hook_args[0], handler->lxcpath, strlen(handler->lxcpath) + 1); -- -- if (run_lxc_hooks(handler->name, "oci-poststop", handler->conf, oci_hook_args)) { -+ 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; - } -diff --git a/src/lxc/storage/block.c b/src/lxc/storage/block.c -index eb75e70..8998923 100644 ---- a/src/lxc/storage/block.c -+++ b/src/lxc/storage/block.c -@@ -62,7 +62,8 @@ bool blk_detect(const char *path) - - int blk_mount(struct lxc_storage *bdev) - { -- const char *src; -+ const char *src = NULL; -+ - if (strcmp(bdev->type, "blk")) - return -22; - -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 88653b4..802bf39 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -113,7 +113,7 @@ void lxc_terminal_sigwinch(int sig) - } - - int lxc_terminal_signalfd_cb(int fd, uint32_t events, void *cbdata, -- struct lxc_epoll_descr *descr) -+ struct lxc_epoll_descr *descr) - { - ssize_t ret; - struct signalfd_siginfo siginfo; -@@ -300,7 +300,7 @@ static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) - } - - static int lxc_terminal_rotate_write_data(struct lxc_terminal *terminal, const char *buf, -- int bytes_read) -+ int bytes_read) - { - int ret; - struct stat st; -@@ -310,7 +310,7 @@ static int lxc_terminal_rotate_write_data(struct lxc_terminal *terminal, const c - 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 -+ * file at which point we simply ignore whether the log is supposed to - * be rotated or not. - */ - if (terminal->log_size <= 0) -@@ -397,48 +397,49 @@ static int lxc_terminal_rotate_write_data(struct lxc_terminal *terminal, const c - - /* get time buffer */ - static bool get_time_buffer(struct timespec *timestamp, char *timebuffer, -- size_t maxsize) -+ size_t maxsize) - { -- struct tm tm_utc = { 0 }; -- int32_t nanos = 0; -- time_t seconds; -+ struct tm tm_utc = { 0 }; -+ int32_t nanos = 0; -+ time_t seconds; - -- if (!timebuffer || !maxsize) { -- return false; -- } -+ 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); -+ 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; -- sprintf(timebuffer + strlen(timebuffer), ".%09dZ", nanos); -+ nanos = (int32_t)timestamp->tv_nsec; -+ sprintf(timebuffer + strlen(timebuffer), ".%09dZ", nanos); - -- return true; -+ return true; - } - - /* get now time buffer */ - static bool get_now_time_buffer(char *timebuffer, size_t maxsize) - { -- int err = 0; -- struct timespec ts; -+ int err = 0; -+ struct timespec ts; - -- err = clock_gettime(CLOCK_REALTIME, &ts); -- if (err != 0) { -- ERROR("failed to get time"); -- return false; -- } -+ err = clock_gettime(CLOCK_REALTIME, &ts); -+ if (err != 0) { -+ ERROR("failed to get time"); -+ return false; -+ } - -- return get_time_buffer(&ts, timebuffer, maxsize); -+ return get_time_buffer(&ts, timebuffer, maxsize); - } - - static ssize_t lxc_logger_write(struct lxc_terminal *terminal, const char *type, const char *buf, -- int bytes_read) -+ int bytes_read) - { - logger_json_file *msg = NULL; - ssize_t ret = -1; - size_t len; -- char *json = NULL, timebuffer[64]; -+ char *json = NULL; -+ char timebuffer[64] = { 0 }; - parser_error err = NULL; - struct parser_context ctx = { GEN_OPTIONS_SIMPLIFY | GEN_OPTIONS_NOT_VALIDATE_UTF8, stderr }; - -@@ -473,7 +474,7 @@ cleanup: - } - - static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, const char *type, char *buf, -- int bytes_read) -+ int bytes_read) - { - #define __BUF_CACHE_SIZE (16 * LXC_TERMINAL_BUFFER_SIZE) - static char cache[__BUF_CACHE_SIZE]; -@@ -541,9 +542,10 @@ static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, const char - } - - /* isulad: forward data to all fifos */ --static void lxc_forward_data_to_fifo(struct lxc_list *list, bool is_err, char *buf, int r) -+static void lxc_forward_data_to_fifo(struct lxc_list *list, bool is_err, const char *buf, int r) - { -- struct lxc_list *it,*next; -+ struct lxc_list *it = NULL; -+ struct lxc_list *next = NULL; - struct lxc_fifos_fd *elem = NULL; - - lxc_list_for_each_safe(it, list, next) { -@@ -563,7 +565,8 @@ static void lxc_forward_data_to_fifo(struct lxc_list *list, bool is_err, char *b - /* isulad: judge the fd whether is fifo */ - static bool lxc_terminal_is_fifo(int fd, struct lxc_list *list) - { -- struct lxc_list *it,*next; -+ struct lxc_list *it = NULL; -+ struct lxc_list *next = NULL; - struct lxc_fifos_fd *elem = NULL; - - lxc_list_for_each_safe(it, list, next) { -@@ -576,7 +579,7 @@ static bool lxc_terminal_is_fifo(int fd, struct lxc_list *list) - } - - int lxc_terminal_io_cb(int fd, uint32_t events, void *data, -- struct lxc_epoll_descr *descr) -+ struct lxc_epoll_descr *descr) - { - struct lxc_terminal *terminal = data; - char buf[2 * LXC_TERMINAL_BUFFER_SIZE]; -@@ -684,7 +687,7 @@ static int lxc_terminal_mainloop_add_peer(struct lxc_terminal *terminal) - - if (terminal->peer >= 0) { - ret = lxc_mainloop_add_handler(terminal->descr, terminal->peer, -- lxc_terminal_io_cb, terminal); -+ lxc_terminal_io_cb, terminal); - if (ret < 0) { - WARN("Failed to add terminal peer handler to mainloop"); - return -1; -@@ -695,7 +698,7 @@ static int lxc_terminal_mainloop_add_peer(struct lxc_terminal *terminal) - return 0; - - ret = lxc_mainloop_add_handler(terminal->descr, terminal->tty_state->sigfd, -- lxc_terminal_signalfd_cb, terminal->tty_state); -+ lxc_terminal_signalfd_cb, terminal->tty_state); - if (ret < 0) { - WARN("Failed to add signal handler to mainloop"); - return -1; -@@ -712,7 +715,7 @@ static int lxc_terminal_mainloop_add_pipes(struct lxc_terminal *terminal) - // 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); -+ lxc_terminal_io_cb, terminal); - if (ret) { - ERROR("pipe fd %d not added to mainloop", terminal->pipes[0][1]); - return -1; -@@ -721,7 +724,7 @@ static int lxc_terminal_mainloop_add_pipes(struct lxc_terminal *terminal) - // 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); -+ lxc_terminal_io_cb, terminal); - if (ret) { - ERROR("pipe fd %d not added to mainloop", terminal->pipes[1][0]); - return -1; -@@ -730,7 +733,7 @@ static int lxc_terminal_mainloop_add_pipes(struct lxc_terminal *terminal) - // 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); -+ lxc_terminal_io_cb, terminal); - if (ret) { - ERROR("pipe fd %d not added to mainloop", terminal->pipes[2][0]); - return -1; -@@ -743,14 +746,15 @@ static int lxc_terminal_mainloop_add_pipes(struct lxc_terminal *terminal) - static int lxc_terminal_mainloop_add_fifo(struct lxc_terminal *terminal) - { - int ret = 0; -- struct lxc_list *it,*next; -+ 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); -+ lxc_terminal_io_cb, terminal); - if (ret) { - ERROR("console fifo %s not added to mainloop", elem->in_fifo); - return -1; -@@ -761,7 +765,7 @@ static int lxc_terminal_mainloop_add_fifo(struct lxc_terminal *terminal) - } - - int lxc_terminal_mainloop_add(struct lxc_epoll_descr *descr, -- struct lxc_terminal *terminal) -+ struct lxc_terminal *terminal) - { - int ret; - -@@ -796,7 +800,7 @@ int lxc_terminal_mainloop_add(struct lxc_epoll_descr *descr, - } - - ret = lxc_mainloop_add_handler(descr, terminal->master, -- lxc_terminal_io_cb, terminal); -+ lxc_terminal_io_cb, terminal); - if (ret < 0) { - ERROR("Failed to add handler for terminal master fd %d to " - "mainloop", terminal->master); -@@ -879,7 +883,7 @@ static void lxc_terminal_peer_proxy_free(struct lxc_terminal *terminal) - } - - static int lxc_terminal_peer_proxy_alloc(struct lxc_terminal *terminal, -- int sockfd) -+ int sockfd) - { - int ret; - struct termios oldtermio; -@@ -904,14 +908,14 @@ static int lxc_terminal_peer_proxy_alloc(struct lxc_terminal *terminal, - * that the real terminal master will send to / recv from. - */ - ret = openpty(&terminal->proxy.master, &terminal->proxy.slave, NULL, -- NULL, NULL); -+ NULL, NULL); - if (ret < 0) { - SYSERROR("Failed to open proxy terminal"); - return -1; - } - - ret = ttyname_r(terminal->proxy.slave, terminal->proxy.name, -- sizeof(terminal->proxy.name)); -+ sizeof(terminal->proxy.name)); - if (ret < 0) { - SYSERROR("Failed to retrieve name of proxy terminal slave"); - goto on_error; -@@ -1253,7 +1257,7 @@ static int terminal_fifo_open(const char *fifo_path, int flags) - { - int fd = -1; - -- fd = open(fifo_path, flags); -+ fd = lxc_open(fifo_path, flags, 0); - if (fd < 0) { - WARN("Failed to open fifo %s to send message: %s.", fifo_path, - strerror(errno)); -@@ -1491,15 +1495,17 @@ int lxc_terminal_set_stdfds(int fd) - return 0; - - for (i = 0; i < 3; i++) -- if (!__terminal_dup2(fd, (int[]){STDIN_FILENO, STDOUT_FILENO, -- STDERR_FILENO}[i])) -- return -1; -+ if (!__terminal_dup2(fd, (int[]) { -+ STDIN_FILENO, STDOUT_FILENO, -+ STDERR_FILENO -+ }[i])) -+ return -1; - - return 0; - } - - int lxc_terminal_stdin_cb(int fd, uint32_t events, void *cbdata, -- struct lxc_epoll_descr *descr) -+ struct lxc_epoll_descr *descr) - { - int ret; - char c; -@@ -1533,7 +1539,7 @@ int lxc_terminal_stdin_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) -+ struct lxc_epoll_descr *descr) - { - int r, w; - char buf[LXC_TERMINAL_BUFFER_SIZE]; -@@ -1559,8 +1565,8 @@ int lxc_terminal_getfd(struct lxc_container *c, int *ttynum, int *masterfd) - } - - int lxc_console(struct lxc_container *c, int ttynum, -- int stdinfd, int stdoutfd, int stderrfd, -- int escape) -+ int stdinfd, int stdoutfd, int stderrfd, -+ int escape) - { - int masterfd, ret, ttyfd; - struct lxc_epoll_descr descr; -@@ -1602,7 +1608,7 @@ int lxc_console(struct lxc_container *c, int ttynum, - - if (ts->sigfd != -1) { - ret = lxc_mainloop_add_handler(&descr, ts->sigfd, -- lxc_terminal_signalfd_cb, ts); -+ lxc_terminal_signalfd_cb, ts); - if (ret < 0) { - ERROR("Failed to add signal handler to mainloop"); - goto close_mainloop; -@@ -1610,14 +1616,14 @@ int lxc_console(struct lxc_container *c, int ttynum, - } - - ret = lxc_mainloop_add_handler(&descr, ts->stdinfd, -- lxc_terminal_stdin_cb, ts); -+ lxc_terminal_stdin_cb, ts); - if (ret < 0) { - ERROR("Failed to add stdin handler"); - goto close_mainloop; - } - - ret = lxc_mainloop_add_handler(&descr, ts->masterfd, -- lxc_terminal_master_cb, ts); -+ lxc_terminal_master_cb, ts); - if (ret < 0) { - ERROR("Failed to add master handler"); - goto close_mainloop; -@@ -1625,11 +1631,11 @@ int lxc_console(struct lxc_container *c, int ttynum, - - if (ts->escape >= 1) { - fprintf(stderr, -- "\n" -- "Connected to tty %1$d\n" -- "Type to exit the console, " -- " to enter Ctrl+%2$c itself\n", -- ttynum, 'a' + escape - 1); -+ "\n" -+ "Connected to tty %1$d\n" -+ "Type to exit the console, " -+ " to enter Ctrl+%2$c itself\n", -+ ttynum, 'a' + escape - 1); - } - - if (istty) { -@@ -1729,7 +1735,8 @@ void lxc_terminal_init(struct lxc_terminal *terminal) - /* isulad: if fd == -1, means delete all the fifos*/ - int lxc_terminal_delete_fifo(int fd, struct lxc_list *list) - { -- struct lxc_list *it,*next; -+ struct lxc_list *it = NULL; -+ struct lxc_list *next = NULL; - struct lxc_fifos_fd *elem = NULL; - - lxc_list_for_each_safe(it, list, next) { -@@ -1837,7 +1844,7 @@ int lxc_terminal_add_fifos(struct lxc_conf *conf, const char *fifonames) - } - - if (lxc_mainloop_add_handler(terminal->descr, fifofd_in, -- lxc_terminal_io_cb, terminal)) { -+ lxc_terminal_io_cb, terminal)) { - ERROR("console fifo not added to mainloop"); - lxc_terminal_delete_fifo(fifofd_in, &terminal->fifos); - ret = -1; -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index dc0e6c5..9ce2473 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -56,6 +56,7 @@ - #include "raw_syscalls.h" - #include "syscall_wrappers.h" - #include "utils.h" -+#include "path.h" - - #ifndef HAVE_STRLCPY - #include "include/strlcpy.h" -@@ -81,7 +82,7 @@ lxc_log_define(utils, lxc); - extern bool btrfs_try_remove_subvol(const char *path); - - static int _recursive_rmdir(const char *dirname, dev_t pdev, -- const char *exclude, int level, bool onedev) -+ const char *exclude, int level, bool onedev) - { - struct dirent *direntp; - DIR *dir; -@@ -101,7 +102,7 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev, - int rc; - - if (!strcmp(direntp->d_name, ".") || -- !strcmp(direntp->d_name, "..")) -+ !strcmp(direntp->d_name, "..")) - continue; - - rc = snprintf(pathname, PATH_MAX, "%s/%s", dirname, direntp->d_name); -@@ -155,8 +156,8 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev, - } else { - if (unlink(pathname) < 0) { - if (saved_errno == 0) { -- saved_errno = errno; -- } -+ saved_errno = errno; -+ } - SYSERROR("Failed to delete \"%s\"", pathname); - failed=1; - } -@@ -186,7 +187,7 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev, - static bool is_native_overlayfs(const char *path) - { - if (has_fs_type(path, OVERLAY_SUPER_MAGIC) || -- has_fs_type(path, OVERLAYFS_SUPER_MAGIC)) -+ has_fs_type(path, OVERLAYFS_SUPER_MAGIC)) - return true; - - return false; -@@ -650,7 +651,7 @@ uint64_t fnv_64a_buf(void *buf, size_t len, uint64_t hval) - * multiply by the 64 bit FNV magic prime mod 2^64 - */ - hval += (hval << 1) + (hval << 4) + (hval << 5) + -- (hval << 7) + (hval << 8) + (hval << 40); -+ (hval << 7) + (hval << 8) + (hval << 40); - } - - return hval; -@@ -792,7 +793,7 @@ char *on_path(const char *cmd, const char *rootfs) - lxc_iterate_parts (entry, path, ":") { - if (rootfs) - ret = snprintf(cmdpath, PATH_MAX, "%s/%s/%s", rootfs, -- entry, cmd); -+ entry, cmd); - else - ret = snprintf(cmdpath, PATH_MAX, "%s/%s", entry, cmd); - if (ret < 0 || ret >= PATH_MAX) -@@ -820,7 +821,7 @@ char *choose_init(const char *rootfs) - { - char *retv = NULL; - const char *empty = "", -- *tmp; -+ *tmp; - int ret, env_set = 0; - - if (!getenv("PATH")) { -@@ -1141,7 +1142,7 @@ out: - * setup before executing the container's init - */ - int safe_mount(const char *src, const char *dest, const char *fstype, -- unsigned long flags, const void *data, const char *rootfs) -+ unsigned long flags, const void *data, const char *rootfs) - { - int destfd, ret, saved_errno; - /* Only needs enough for /proc/self/fd/. */ -@@ -1368,7 +1369,7 @@ out: - int lxc_preserve_ns(const int pid, const char *ns) - { - int ret; --/* 5 /proc + 21 /int_as_str + 3 /ns + 20 /NS_NAME + 1 \0 */ -+ /* 5 /proc + 21 /int_as_str + 3 /ns + 20 /NS_NAME + 1 \0 */ - #define __NS_PATH_LEN 50 - char path[__NS_PATH_LEN]; - -@@ -1377,8 +1378,8 @@ int lxc_preserve_ns(const int pid, const char *ns) - * string. - */ - ret = snprintf(path, __NS_PATH_LEN, "/proc/%d/ns%s%s", pid, -- !ns || strcmp(ns, "") == 0 ? "" : "/", -- !ns || strcmp(ns, "") == 0 ? "" : ns); -+ !ns || strcmp(ns, "") == 0 ? "" : "/", -+ !ns || strcmp(ns, "") == 0 ? "" : ns); - if (ret < 0 || (size_t)ret >= __NS_PATH_LEN) { - errno = EFBIG; - return -1; -@@ -1452,7 +1453,7 @@ static int lxc_get_unused_loop_dev_legacy(char *loop_name) - ret = ioctl(fd, LOOP_GET_STATUS64, &lo64); - if (ret < 0) { - if (ioctl(fd, LOOP_GET_STATUS64, &lo64) == 0 || -- errno != ENXIO) { -+ errno != ENXIO) { - close(fd); - fd = -1; - continue; -@@ -1726,7 +1727,7 @@ int lxc_set_death_signal(int signal, pid_t parent) - //pid_t ppid; - - ret = prctl(PR_SET_PDEATHSIG, prctl_arg(signal), prctl_arg(0), -- prctl_arg(0), prctl_arg(0)); -+ prctl_arg(0), prctl_arg(0)); - - /* Check whether we have been orphaned. */ - /* isulad: delete this check, ppid will not be 0 if we shared host pid */ -@@ -1770,7 +1771,7 @@ int fd_nonblock(int fd) - { - long flags; - -- flags = fcntl(fd, F_GETFL); -+ flags = fcntl(fd, F_GETFL); - - return fcntl(fd, F_SETFL, flags | O_NONBLOCK); - } -@@ -1797,7 +1798,7 @@ int recursive_destroy(char *dirname) - struct stat mystat; - - if (!strcmp(direntp->d_name, ".") || -- !strcmp(direntp->d_name, "..")) -+ !strcmp(direntp->d_name, "..")) - continue; - - pathname = must_make_path(dirname, direntp->d_name, NULL); -@@ -1818,7 +1819,7 @@ int recursive_destroy(char *dirname) - if (ret < 0) - r = -1; - -- next: -+next: - free(pathname); - } - -@@ -1850,7 +1851,7 @@ int lxc_setup_keyring(void) - * information leaks. - */ - keyring = keyctl(KEYCTL_JOIN_SESSION_KEYRING, prctl_arg(0), -- prctl_arg(0), prctl_arg(0), prctl_arg(0)); -+ prctl_arg(0), prctl_arg(0), prctl_arg(0)); - if (keyring < 0) { - switch (errno) { - case ENOSYS: -@@ -1913,7 +1914,7 @@ int lxc_file2str(const char *filename, char ret[], int cap) - { - int fd, num_read; - -- if ((fd = open(filename, O_RDONLY | O_CLOEXEC)) == -1) -+ 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; -@@ -1929,7 +1930,7 @@ int lxc_file2str(const char *filename, char ret[], int cap) - * 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(char *S) -+static proc_t *lxc_stat2proc(const char *S) - { - int num; - proc_t *P = NULL; -@@ -1956,33 +1957,33 @@ static proc_t *lxc_stat2proc(char *S) - 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 */ -- ); -+ "%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 (P->tty == 0) - P->tty = -1; /* the old notty val, update elsewhere bef. moving to 0 */ -@@ -2092,3 +2093,67 @@ bool is_non_negative_num(const char *s) - return true; - } - -+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; -+ int nret = 0; -+ 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; -+} -+ -+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, flags | O_CLOEXEC, mode); -+ } else { -+ return open(rpath, 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/utils.h b/src/lxc/utils.h -index 4410ff2..2406ee1 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -229,8 +229,8 @@ 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); -+ unsigned long flags, const void *data, -+ const char *rootfs); - extern int lxc_mount_proc_if_needed(const char *rootfs); - extern int open_devnull(void); - extern int set_stdfds(int fd); -@@ -269,7 +269,7 @@ extern int lxc_unstack_mountpoint(const char *path, bool lazy); - * @param[in] args Arguments to be passed to child_fn. - */ - extern int run_command(char *buf, size_t buf_size, int (*child_fn)(void *), -- void *args); -+ void *args); - - /* Concatenate all passed-in strings into one path. Do not fail. If any piece - * is not prefixed with '/', add a '/'. -@@ -324,5 +324,8 @@ extern bool lxc_process_alive(pid_t pid, unsigned long long start_time); - - extern bool is_non_negative_num(const char *s); - extern int lxc_file2str(const char *filename, char ret[], int cap); -- -+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 int lxc_open(const char *filename, int flags, mode_t mode); -+extern FILE *lxc_fopen(const char *filename, const char *mode); - #endif /* __LXC_UTILS_H */ --- -1.8.3.1 - diff --git a/0102-lxc-fix-compile-warnings.patch b/0102-lxc-fix-compile-warnings.patch deleted file mode 100644 index 88e0d74..0000000 --- a/0102-lxc-fix-compile-warnings.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 1615cf43284c6e91c2b0ea0826ce7dba7ab216f0 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 3 Jun 2019 06:19:07 -0400 -Subject: [PATCH 102/140] lxc: fix compile warnings - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 1 - - src/lxc/path.c | 5 ----- - src/lxc/utils.c | 2 +- - 3 files changed, 1 insertion(+), 7 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index ec1667d..e7df336 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4992,7 +4992,6 @@ int run_lxc_hooks(const char *name, char *hookname, struct lxc_conf *conf, - - int run_oci_hooks(const char *name, char *hookname, struct lxc_conf *conf, const char *lxcpath) - { -- struct lxc_list *it; - int which = -1; - - if (strcmp(hookname, "oci-prestart") == 0) { -diff --git a/src/lxc/path.c b/src/lxc/path.c -index 45ab4c3..92692de 100644 ---- a/src/lxc/path.c -+++ b/src/lxc/path.c -@@ -141,7 +141,6 @@ int do_clean_path(const char *respath, const char *limit_respath, - { - char *dest = *dst; - const char *endpos = NULL; -- errno_t ret; - - for (endpos = stpos; *stpos; stpos = endpos) { - while (ISSLASH(*stpos)) { -@@ -184,7 +183,6 @@ char *cleanpath(const char *path, char *realpath, size_t realpath_len) - char *dest = NULL; - const char *stpos = NULL; - const char *limit_respath = NULL; -- errno_t ret; - - if (path == NULL || path[0] == '\0' || \ - realpath == NULL || (realpath_len < PATH_MAX)) { -@@ -293,7 +291,6 @@ static int do_get_symlinks(const char **fullpath, const char *prefix, size_t pre - { - char *buf = NULL; - size_t len; -- errno_t rc = EOK; - ssize_t n; - int ret = -1; - -@@ -398,7 +395,6 @@ static int do_eval_symlinks_in_scope(const char *fullpath, const char *prefix, - const char *start = NULL; - const char *end = NULL; - char *extra_buf = NULL; -- errno_t rc = EOK; - int nret = 0; - int num_links = 0; - -@@ -450,7 +446,6 @@ static char *eval_symlinks_in_scope(const char *fullpath, const char *rootpath) - char *prefix = NULL; - const char *rpath_limit = NULL; - size_t prefix_len; -- errno_t rc = EOK; - - if (fullpath == NULL || rootpath == NULL) { - return NULL; -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 9ce2473..e674947 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -2106,7 +2106,7 @@ void *lxc_common_calloc_s(size_t size) - int lxc_mem_realloc(void **newptr, size_t newsize, void *oldptr, size_t oldsize) - { - void *tmp = NULL; -- int nret = 0; -+ - if (newsize == 0) { - goto err_out; - } --- -1.8.3.1 - diff --git a/0103-lxc-fix-code-error-in-conf.c.patch b/0103-lxc-fix-code-error-in-conf.c.patch deleted file mode 100644 index 82f64d3..0000000 --- a/0103-lxc-fix-code-error-in-conf.c.patch +++ /dev/null @@ -1,109 +0,0 @@ -From ae19c33cf486d719210ebe624ab8873369bb3170 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 3 Jun 2019 11:14:22 -0400 -Subject: [PATCH 103/140] lxc: fix code error in conf.c - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 21 ++++++++++++++++----- - src/lxc/conf.h | 2 +- - 2 files changed, 17 insertions(+), 6 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index e7df336..127ef77 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -2446,7 +2446,8 @@ static int check_mount_destination(const char *rootfs, const char *dest) - } - - for(invalid = invalid_destinations; *invalid != NULL; invalid++) { -- char *fullpath, *relpath; -+ char *fullpath = NULL; -+ char *relpath = NULL; - const char *parts[3] = { - rootfs, - *invalid, -@@ -2588,6 +2589,8 @@ retry: - max_retry--; - DEBUG("mount entry with loop dev failed, retry mount." - "retry count left %d", max_retry); -+ if (loop.lofd != -1) -+ close(loop.lofd); - goto retry; - } - } -@@ -2799,7 +2802,9 @@ static int mount_file_entries(const struct lxc_conf *conf, - ret = mount_entry_on_absolute_rootfs(&mntent, rootfs, - lxc_name, lxc_path); - free(mntent.mnt_fsname); -+ mntent.mnt_fsname = NULL; - free(mntent.mnt_dir); -+ mntent.mnt_dir = NULL; - if (ret < 0) - return -1; - } -@@ -4378,8 +4383,9 @@ int lxc_drop_caps(struct lxc_conf *conf) - int ret = 0; - struct lxc_list *iterator = NULL; - char *keep_entry = NULL; -- int i, capid; -- int numcaps = lxc_caps_last_cap() + 1; -+ size_t i = 0; -+ int capid; -+ size_t numcaps = (size_t)lxc_caps_last_cap() + 1; - struct lxc_list *caps = NULL; - int *caplist = NULL; - -@@ -4545,6 +4551,10 @@ static char **merge_ocihook_env(char **oldenvs, size_t env_len, size_t *merge_en - for(j = 0; j < (sizeof(lxc_envs) / sizeof(char *)); j++) { - 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; -+ } - lxcenv_buf = malloc(strlen(tmpenv) + 1 + strlen(lxc_envs[j]) + 1); - if (!lxcenv_buf) { - lxc_free_array((void **)result, free); -@@ -4837,7 +4847,7 @@ static int run_ocihook_script_argv(const char *name, const char *section, - { - int ret; - const char *script = oconf->ocihook->path; -- char *inmsg; -+ char *inmsg = NULL; - - INFO("Executing script \"%s\" for container \"%s\", config section \"%s\".", - script, name, section); -@@ -4990,7 +5000,7 @@ int run_lxc_hooks(const char *name, char *hookname, struct lxc_conf *conf, - return 0; - } - --int run_oci_hooks(const char *name, char *hookname, struct lxc_conf *conf, const char *lxcpath) -+int run_oci_hooks(const char *name, const char *hookname, struct lxc_conf *conf, const char *lxcpath) - { - int which = -1; - -@@ -5327,6 +5337,7 @@ int lxc_clear_init_args(struct lxc_conf *lxc_conf) - 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 26bb70f..e4bfc48 100644 ---- a/src/lxc/conf.h -+++ b/src/lxc/conf.h -@@ -445,7 +445,7 @@ extern struct lxc_conf *current_config; - - extern int run_lxc_hooks(const char *name, char *hook, struct lxc_conf *conf, - char *argv[]); --extern int run_oci_hooks(const char *name, char *hookname, struct lxc_conf *conf, const char *lxcpath); -+extern int run_oci_hooks(const char *name, const char *hookname, struct lxc_conf *conf, const char *lxcpath); - - extern int detect_shared_rootfs(void); - extern struct lxc_conf *lxc_conf_init(void); --- -1.8.3.1 - diff --git a/0104-lxc-fix-code-error.patch b/0104-lxc-fix-code-error.patch deleted file mode 100644 index b460072..0000000 --- a/0104-lxc-fix-code-error.patch +++ /dev/null @@ -1,179 +0,0 @@ -From 1f2f95d5cc90ecd7d3d8c8a6aab5381cda0483b5 Mon Sep 17 00:00:00 2001 -From: tanyifeng -Date: Mon, 3 Jun 2019 11:27:34 -0400 -Subject: [PATCH 104/140] lxc: fix code error - -Signed-off-by: tanyifeng -Signed-off-by: LiFeng ---- - src/lxc/af_unix.c | 8 +++++++- - src/lxc/cgroups/cgfsng.c | 10 +++++++++- - src/lxc/lxccontainer.c | 2 ++ - src/lxc/path.c | 1 + - src/lxc/terminal.c | 16 ++++++++-------- - src/lxc/utils.c | 8 ++++---- - 6 files changed, 31 insertions(+), 14 deletions(-) - -diff --git a/src/lxc/af_unix.c b/src/lxc/af_unix.c -index 4c45946..1fc8ab0 100644 ---- a/src/lxc/af_unix.c -+++ b/src/lxc/af_unix.c -@@ -204,12 +204,18 @@ int lxc_abstract_unix_recv_fds_timeout(int fd, int *recvfds, int num_recvfds, - struct cmsghdr *cmsg = NULL; - char buf[1] = {0}; - char *cmsgbuf = NULL; -- size_t cmsgbufsize = CMSG_SPACE(num_recvfds * sizeof(int)); -+ size_t cmsgbufsize = 0; - struct timeval out; - - memset(&msg, 0, sizeof(msg)); - memset(&iov, 0, sizeof(iov)); - -+ if (num_recvfds <= 0 || (SIZE_MAX / sizeof(int) < num_recvfds)) { -+ errno = EINVAL; -+ return -1; -+ } -+ -+ cmsgbufsize = CMSG_SPACE((num_recvfds * sizeof(int))); - cmsgbuf = malloc(cmsgbufsize); - if (!cmsgbuf) { - errno = ENOMEM; -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 67c7a0e..46f13f4 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1688,7 +1688,7 @@ __cgfsng_ops static bool cgfsng_mount(struct cgroup_ops *ops, - if (merged) { - char **mc = NULL; - for (mc = merged; *mc; mc++) { -- char *token; -+ char *token = NULL; - char *copy = must_copy_string(*mc); - lxc_iterate_parts(token, copy, ",") { - int mret; -@@ -2249,7 +2249,15 @@ static int cg_legacy_get_data(struct cgroup_ops *ops, const char *filename, - 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, '.'); -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index e32f524..72417ed 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -1208,6 +1208,7 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - reboot: - if (conf->reboot == REBOOT_INIT) { - /* initialize handler */ -+ lxc_free_handler(handler); - handler = lxc_init_handler(c->name, conf, c->config_path, c->daemonize); - if (!handler) { - ret = 1; -@@ -1248,6 +1249,7 @@ reboot: - conf->reboot = REBOOT_INIT; - goto reboot; - } -+ lxc_free_handler(handler); - - on_error: - if (c->pidfile) { -diff --git a/src/lxc/path.c b/src/lxc/path.c -index 92692de..36d5e0b 100644 ---- a/src/lxc/path.c -+++ b/src/lxc/path.c -@@ -31,6 +31,7 @@ bool specify_current_dir(const char *path) - - bname = basename(basec); - if (bname == NULL) { -+ free(basec); - ERROR("Out of memory"); - return false; - } -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 802bf39..a8a0dc9 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -231,7 +231,7 @@ static int lxc_terminal_truncate_log_file(struct lxc_terminal *terminal) - } - - /* -- * isuald: support mult-logfiles -+ * isulad: support mult-logfiles - * */ - static int lxc_terminal_rename_old_log_file(struct lxc_terminal *terminal) - { -@@ -242,10 +242,10 @@ static int lxc_terminal_rename_old_log_file(struct lxc_terminal *terminal) - - for (i = terminal->log_rotate - 1; i > 1; i--) { - ret = sprintf(tmp, "%s.%u", terminal->log_path, i); -- if (ret < 0) -+ if (ret < 0) { - return -EFBIG; -- if (rename_fname) -- free(rename_fname); -+ } -+ free(rename_fname); - rename_fname = strdup(tmp); - ret = sprintf(tmp, "%s.%u", terminal->log_path, (i - 1)); - if (ret < 0) { -@@ -253,13 +253,13 @@ static int lxc_terminal_rename_old_log_file(struct lxc_terminal *terminal) - return -EFBIG; - } - ret = lxc_unpriv(rename(tmp, rename_fname)); -- if (ret < 0 && errno != ENOENT) -+ if (ret < 0 && errno != ENOENT) { -+ free(rename_fname); - return ret; -+ } - } - -- if (rename_fname) -- free(rename_fname); -- -+ free(rename_fname); - return 0; - } - -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index e674947..9db762f 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -1769,11 +1769,11 @@ int fd_cloexec(int fd, bool cloexec) - /* isulad: fd_nonblock */ - int fd_nonblock(int fd) - { -- long flags; -+ int flags; - - flags = fcntl(fd, F_GETFL); - -- return fcntl(fd, F_SETFL, flags | O_NONBLOCK); -+ return fcntl(fd, F_SETFL, (int)((unsigned int)flags | O_NONBLOCK)); - } - - int recursive_destroy(char *dirname) -@@ -2140,9 +2140,9 @@ int lxc_open(const char *filename, int flags, mode_t mode) - return -1; - } - if (mode) { -- return open(rpath, flags | O_CLOEXEC, mode); -+ return open(rpath, (int)((unsigned int)flags | O_CLOEXEC), mode); - } else { -- return open(rpath, flags | O_CLOEXEC); -+ return open(rpath, (int)((unsigned int)flags | O_CLOEXEC)); - } - } - --- -1.8.3.1 - diff --git a/0105-lxc-fix-code-error-warnings.patch b/0105-lxc-fix-code-error-warnings.patch deleted file mode 100644 index 542aa71..0000000 --- a/0105-lxc-fix-code-error-warnings.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 3e73fc4707851601f3538502e8364a1550da2741 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 3 Jun 2019 23:02:50 -0400 -Subject: [PATCH 105/140] lxc: fix code error warnings - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 5 ++++- - src/lxc/lxccontainer.c | 3 +-- - src/lxc/start.c | 2 +- - 3 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 127ef77..8311723 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -5325,9 +5325,12 @@ int lxc_clear_init_args(struct lxc_conf *lxc_conf) - { - 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; -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 72417ed..a09e066 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -1180,6 +1180,7 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - if (conf->exit_fd < 0) { - ERROR("Failed to open exit fifo %s: %s.", c->exit_fifo, strerror(errno)); - ret = 1; -+ lxc_free_handler(handler); - goto on_error; - } - } -@@ -1208,7 +1209,6 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - reboot: - if (conf->reboot == REBOOT_INIT) { - /* initialize handler */ -- lxc_free_handler(handler); - handler = lxc_init_handler(c->name, conf, c->config_path, c->daemonize); - if (!handler) { - ret = 1; -@@ -1249,7 +1249,6 @@ reboot: - conf->reboot = REBOOT_INIT; - goto reboot; - } -- lxc_free_handler(handler); - - on_error: - if (c->pidfile) { -diff --git a/src/lxc/start.c b/src/lxc/start.c -index ccdd844..2380581 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -2421,7 +2421,7 @@ int __lxc_start(const char *name, struct lxc_handler *handler, - ret = lxc_init(name, handler); - if (ret < 0) { - ERROR("Failed to initialize container \"%s\"", name); -- return -1; -+ goto out_fini_nonet; - } - handler->ops = ops; - handler->data = data; --- -1.8.3.1 - diff --git a/0106-set-timeout-to-1s-for-cmds-send-to-lxc-monitor.patch b/0106-set-timeout-to-1s-for-cmds-send-to-lxc-monitor.patch deleted file mode 100644 index 8768382..0000000 --- a/0106-set-timeout-to-1s-for-cmds-send-to-lxc-monitor.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 307920aff38a933a7df5245917933a35f9cf7a15 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 6 Jun 2019 22:48:38 -0400 -Subject: [PATCH 106/140] set timeout to 1s for cmds send to [lxc monitor] - -Signed-off-by: LiFeng ---- - src/lxc/commands.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/lxc/commands.c b/src/lxc/commands.c -index c74b8c1..0802a16 100644 ---- a/src/lxc/commands.c -+++ b/src/lxc/commands.c -@@ -127,10 +127,10 @@ static int lxc_cmd_rsp_recv(int sock, struct lxc_cmd_rr *cmd) - int ret, rspfd; - struct lxc_cmd_rsp *rsp = &cmd->rsp; - -- /*isulad: add timeout 200ms to avoid long block due to [lxc monitor] error*/ -- ret = lxc_abstract_unix_recv_fds_timeout(sock, &rspfd, 1, rsp, sizeof(*rsp), 200 * 1000); -+ /*isulad: add timeout 1s to avoid long block due to [lxc monitor] error*/ -+ ret = lxc_abstract_unix_recv_fds_timeout(sock, &rspfd, 1, rsp, sizeof(*rsp), 1000 * 1000); - if (ret < 0) { -- SYSWARN("Failed to receive response for command \"%s\"", -+ SYSERROR("Failed to receive response for command \"%s\"", - lxc_cmd_str(cmd->req.cmd)); - - if (errno == ECONNRESET || errno == EAGAIN || errno == EWOULDBLOCK) { --- -1.8.3.1 - diff --git a/0107-add-log-for-failure-of-rename-file.patch b/0107-add-log-for-failure-of-rename-file.patch deleted file mode 100644 index de0c29f..0000000 --- a/0107-add-log-for-failure-of-rename-file.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 819a1a3a4badd6f794cc161199eb2446a2325cdf Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Mon, 17 Jun 2019 20:17:37 +0800 -Subject: [PATCH 107/140] add log for failure of rename file - -1. add log message of rename operator -2. if rename console file failed, reopen terminal fd - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/terminal.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index a8a0dc9..778a0ab 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -293,8 +293,9 @@ static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) - close(terminal->log_fd); - terminal->log_fd = -1; - ret = lxc_unpriv(rename(terminal->log_path, tmp)); -- if (ret < 0) -- return ret; -+ if (ret < 0) { -+ SYSERROR("Rename container log file failed"); -+ } - - return lxc_terminal_create_log_file(terminal); - } --- -1.8.3.1 - diff --git a/0108-check-calloc-input-valid.patch b/0108-check-calloc-input-valid.patch deleted file mode 100644 index 27a62f3..0000000 --- a/0108-check-calloc-input-valid.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 68336a66df175c8f59e49ded276f95073326bfcd Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Tue, 18 Jun 2019 23:16:09 +0800 -Subject: [PATCH 108/140] check calloc input valid - -check calloc input valid - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/terminal.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 778a0ab..6b117de 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -444,8 +444,11 @@ static ssize_t lxc_logger_write(struct lxc_terminal *terminal, const char *type, - 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) { -+ if (msg == NULL) { - return -errno; - } - msg->log = calloc(bytes_read, 1); --- -1.8.3.1 - diff --git a/0109-add-secure-compile-flags-to-lxc.patch b/0109-add-secure-compile-flags-to-lxc.patch deleted file mode 100644 index 9982169..0000000 --- a/0109-add-secure-compile-flags-to-lxc.patch +++ /dev/null @@ -1,104 +0,0 @@ -From d723e8b3a179e8f469242c9dc9eaab9383d2ee3b Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Thu, 20 Jun 2019 17:46:40 +0800 -Subject: [PATCH 109/140] add secure compile flags to lxc - -add secure compile flags to lxc - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - configure.ac | 25 +++++++++++++++++++------ - src/lxc/Makefile.am | 5 +++++ - 2 files changed, 24 insertions(+), 6 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 4da52a2..a714779 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -44,6 +44,7 @@ AM_INIT_AUTOMAKE([-Wall -Werror -Wno-portability subdir-objects]) - AC_CANONICAL_HOST - AM_PROG_CC_C_O - AC_GNU_SOURCE -+CFLAGS=`echo "${CFLAGS#\-g}"` - - # Test if we have a new enough compiler. - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -@@ -192,6 +193,11 @@ AC_ARG_ENABLE([werror], - [do not treat warnings as errors])], - [], [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], - [AC_HELP_STRING([--enable-rpath], [set rpath in executables [default=no]])], -@@ -200,8 +206,8 @@ AM_CONDITIONAL([ENABLE_RPATH], [test "x$enable_rpath" = "xyes"]) - - # Documentation (manpages) - AC_ARG_ENABLE([doc], -- [AC_HELP_STRING([--enable-doc], [make man pages [default=auto]])], -- [], [enable_doc=auto]) -+ [AC_HELP_STRING([--enable-doc], [make man pages [default=no]])], -+ [], [enable_doc=no]) - - if test "x$enable_doc" = "xyes" -o "x$enable_doc" = "xauto"; then - db2xman="" -@@ -692,18 +698,25 @@ AX_CHECK_COMPILE_FLAG([-Wstrict-prototypes], [CFLAGS="$CFLAGS -Wstrict-prototype - AX_CHECK_COMPILE_FLAG([-fno-strict-aliasing], [CFLAGS="$CFLAGS -fno-strict-aliasing"],,[-Werror]) - AX_CHECK_COMPILE_FLAG([-fstack-clash-protection], [CFLAGS="$CFLAGS -fstack-clash-protection"],,[-Werror]) - AX_CHECK_COMPILE_FLAG([-fstack-protector-strong], [CFLAGS="$CFLAGS -fstack-protector-strong"],,[-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_LINK_FLAG([-z relro], [LDLAGS="$LDLAGS -z relro"],,[]) --AX_CHECK_LINK_FLAG([-z now], [LDLAGS="$LDLAGS -z now"],,[]) - --CFLAGS="$CFLAGS -Wvla -std=gnu11" -+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"],,[]) -+ -+LDFLAGS="$LDFLAGS -fPIE -pie" -+ -+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], - [AC_HELP_STRING([--enable-thread-safety], [enforce thread-safety otherwise fail the build [default=yes]])], - [], [enable_thread_safety=yes]) -diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am -index 4ec2081..b24fcfd 100644 ---- a/src/lxc/Makefile.am -+++ b/src/lxc/Makefile.am -@@ -233,12 +233,17 @@ endif - - # build the shared library - liblxc_la_CFLAGS = -fPIC \ -+ -fPIE -pie \ - -DPIC \ -+ -D_FORTIFY_SOURCE=2 -Wall \ - $(AM_CFLAGS) \ - -pthread - - liblxc_la_LDFLAGS = -pthread \ - -Wl,-no-undefined \ -+ -Wl,-z,relro \ -+ -Wl,-z,now \ -+ -Wl,-z,noexecstack \ - -Wl,-soname,liblxc.so.$(firstword $(subst ., ,@LXC_ABI@)) \ - -version-info @LXC_ABI_MAJOR@ @YAJL_LIBS@ - --- -1.8.3.1 - diff --git a/0110-add-doc-for-lxc.patch b/0110-add-doc-for-lxc.patch deleted file mode 100644 index c1ca60b..0000000 --- a/0110-add-doc-for-lxc.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 3e92134299a675e474074415b68be3755be24c9b Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Fri, 21 Jun 2019 17:20:43 +0800 -Subject: [PATCH 110/140] add doc for lxc - -add doc for lxc - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - configure.ac | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/configure.ac b/configure.ac -index a714779..5963fab 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -206,8 +206,8 @@ AM_CONDITIONAL([ENABLE_RPATH], [test "x$enable_rpath" = "xyes"]) - - # Documentation (manpages) - AC_ARG_ENABLE([doc], -- [AC_HELP_STRING([--enable-doc], [make man pages [default=no]])], -- [], [enable_doc=no]) -+ [AC_HELP_STRING([--enable-doc], [make man pages [default=auto]])], -+ [], [enable_doc=auto]) - - if test "x$enable_doc" = "xyes" -o "x$enable_doc" = "xauto"; then - db2xman="" --- -1.8.3.1 - diff --git a/0111-lxc-use-safe_strdup-instead-of-strdup.patch b/0111-lxc-use-safe_strdup-instead-of-strdup.patch deleted file mode 100644 index 257e8b9..0000000 --- a/0111-lxc-use-safe_strdup-instead-of-strdup.patch +++ /dev/null @@ -1,752 +0,0 @@ -From b1ff42de6d5a507d66e9fe091a18d003f3022fbb Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Wed, 3 Jul 2019 23:41:15 -0400 -Subject: [PATCH 111/140] lxc: use safe_strdup instead of strdup - -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 14 +++++--------- - src/lxc/conf.c | 32 +++++++++---------------------- - src/lxc/confile.c | 32 +++++++++---------------------- - src/lxc/json/defs.c | 1 - - src/lxc/json/json_common.c | 41 ++++++++++++---------------------------- - src/lxc/json/json_common.h | 4 +--- - src/lxc/json/logger_json_file.c | 1 - - src/lxc/json/oci_runtime_hooks.c | 4 ++-- - src/lxc/json/oci_runtime_spec.c | 1 - - src/lxc/lxccontainer.c | 16 +++++++--------- - src/lxc/path.c | 20 +++++--------------- - src/lxc/start.c | 18 +++++++++--------- - src/lxc/terminal.c | 18 +++++++----------- - src/lxc/tools/lxc_attach.c | 4 ++-- - src/lxc/tools/lxc_start.c | 2 +- - src/lxc/utils.c | 16 ++++++++++++++++ - src/lxc/utils.h | 2 ++ - 17 files changed, 87 insertions(+), 139 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 6480eb9..d7b16e3 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -1070,15 +1070,15 @@ static int lxc_attach_terminal(struct lxc_conf *conf, - /* 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] = strdup(options->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] = strdup(options->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] = strdup(options->init_fifo[2]); -+ terminal->init_fifo[2] = safe_strdup(options->init_fifo[2]); - } - - ret = lxc_terminal_create(terminal); -@@ -1562,9 +1562,7 @@ int lxc_attach(const char *name, const char *lxcpath, - size_read = read(conf->errpipe[0], errbuf, BUFSIZ); - if (size_read > 0) { - if (err_msg) -- *err_msg = strdup(errbuf); -- if (!(*err_msg)) -- ERROR("Out of memory"); -+ *err_msg = safe_strdup(errbuf); - goto close_mainloop; - } - -@@ -1585,9 +1583,7 @@ int lxc_attach(const char *name, const char *lxcpath, - } - - if (g_attach_timeout_state == ATTACH_TIMEOUT && err_msg != NULL && *err_msg == NULL) { -- *err_msg = strdup("Attach exceeded timeout"); -- if (!(*err_msg)) -- ERROR("Out of memory"); -+ *err_msg = safe_strdup("Attach exceeded timeout"); - } - close_mainloop: - if (options->attach_flags & LXC_ATTACH_TERMINAL) -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 8311723..1dfdaf3 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -1356,9 +1356,7 @@ static int rootfs_parent_mount_private(char *rootfs) - target = get_field(line, 4); - if (!target) - continue; -- tmptarget = strdup(target); -- if (!tmptarget) -- continue; -+ tmptarget = safe_strdup(target); - null_endofword(tmptarget); - if (!strstr(rootfs, tmptarget)) { - free(tmptarget); -@@ -1376,9 +1374,7 @@ static int rootfs_parent_mount_private(char *rootfs) - continue; - null_endofword(opts); - free(options); -- options = strdup(opts); -- if (!options) -- continue; -+ options = safe_strdup(opts); - } - - if (!parent || !options) { -@@ -1417,7 +1413,7 @@ static int lxc_mount_rootfs(struct lxc_conf *conf) - - // isulad: bind mount / to rootfs.mount. then we can do pivot root even if we use / as root. - if (!access(rootfs->mount, F_OK)) { -- rootfs->path = strdup("/"); -+ rootfs->path = safe_strdup("/"); - if (mount("/", rootfs->mount, NULL, MS_BIND, 0)) { - SYSERROR("Failed to mount / to %s.", rootfs->mount); - return -1; -@@ -2225,9 +2221,7 @@ int parse_mntopts(const char *mntopts, unsigned long *mntflags, unsigned long *p - if (!mntopts) - return 0; - -- s = strdup(mntopts); -- if (!s) -- return -1; -+ s = safe_strdup(mntopts); - - size = strlen(s) + 1; - data = malloc(size); -@@ -4026,7 +4020,7 @@ static int setup_populate_devs(const struct lxc_rootfs *rootfs, struct lxc_list - return -1; - - /* create any missing directories */ -- pathdirname = strdup(path); -+ pathdirname = safe_strdup(path); - pathdirname = dirname(pathdirname); - ret = mkdir_p(pathdirname, 0750); - free(pathdirname); -@@ -4545,7 +4539,7 @@ static char **merge_ocihook_env(char **oldenvs, size_t env_len, size_t *merge_en - - for(i = 0; i < env_len; i++) { - if (oldenvs[i]) -- result[i] = strdup(oldenvs[i]); -+ result[i] = safe_strdup(oldenvs[i]); - } - - for(j = 0; j < (sizeof(lxc_envs) / sizeof(char *)); j++) { -@@ -4869,7 +4863,7 @@ static char *get_root_path(const char *path, const char *backend) - char *tmp = NULL; - - if (!path) { -- ret = strdup("/"); -+ ret = safe_strdup("/"); - return ret; - } - if (!backend) { -@@ -4885,20 +4879,12 @@ static char *get_root_path(const char *path, const char *backend) - return NULL; - } - tmp++; -- ret = strdup(tmp); -- if (!ret) { -- ERROR("Out of memory"); -- return NULL; -- } -+ ret = safe_strdup(tmp); - return ret; - } - - default_out: -- ret = strdup(path); -- if (!ret) { -- ERROR("Out of memory"); -- return NULL; -- } -+ ret = safe_strdup(path); - return ret; - } - -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 216a688..8262d1e 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -1011,9 +1011,7 @@ static int set_config_group(const char *key, const char *value, - if (lxc_config_value_empty(value)) - return lxc_clear_groups(lxc_conf); - -- groups = strdup(value); -- if (!groups) -- return -1; -+ groups = safe_strdup(value); - - /* In case several groups are specified in a single line split these - * groups in a single element for the list. -@@ -2281,7 +2279,7 @@ static int set_config_populate_device(const char *key, const char *value, - int ret = 0, major = 0, minor = 0; - uid_t uid = (uid_t)-1; - gid_t gid = (gid_t)-1; -- char name[PATH_MAX] = {0}; -+ char name[4096] = {0}; /* MAX dev path name */ - char type[3] = {0}; - char *replace_value = NULL; - mode_t filemode = 0; -@@ -2295,7 +2293,7 @@ static int set_config_populate_device(const char *key, const char *value, - /* 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, "%[^:]:%2[^:]:%i:%i:%i:%u:%u", name, type, &major, &minor, &filemode, &uid, &gid); -+ ret = sscanf(value, "%4095[^:]:%2[^:]:%i:%i:%i:%u:%u", name, type, &major, &minor, &filemode, &uid, &gid); - if (ret != 7) - return -1; - -@@ -2306,9 +2304,7 @@ static int set_config_populate_device(const char *key, const char *value, - if (strcmp(name, dev_elem->name) != 0) - continue; - -- replace_value = strdup(type); -- if (!replace_value) -- return -1; -+ replace_value = safe_strdup(type); - - free(dev_elem->type); - dev_elem->type = replace_value; -@@ -2332,13 +2328,9 @@ static int set_config_populate_device(const char *key, const char *value, - goto on_error; - memset(dev_elem, 0, sizeof(*dev_elem)); - -- dev_elem->name = strdup(name); -- if (!dev_elem->name) -- goto on_error; -+ dev_elem->name = safe_strdup(name); - -- dev_elem->type = strdup(type); -- if (!dev_elem->type) -- goto on_error; -+ dev_elem->type = safe_strdup(type); - - dev_elem->file_mode = filemode; - dev_elem->maj = major; -@@ -2373,10 +2365,7 @@ static int set_config_rootfs_masked_paths(const char *key, const char *value, - if (!list_item) - goto on_error; - -- list_item->elem = strdup(value); -- -- if (!list_item->elem) -- goto on_error; -+ list_item->elem = safe_strdup(value); - - lxc_list_add_tail(&lxc_conf->rootfs.maskedpaths, list_item); - -@@ -2401,10 +2390,7 @@ static int set_config_rootfs_ro_paths(const char *key, const char *value, - if (!list_item) - goto on_error; - -- list_item->elem = strdup(value); -- -- if (!list_item->elem) -- goto on_error; -+ list_item->elem = safe_strdup(value); - - lxc_list_add_tail(&lxc_conf->rootfs.ropaths, list_item); - -@@ -2446,7 +2432,7 @@ static int set_config_systemd(const char *key, const char *value, - ERROR("Empty umask"); - return -1; - } -- lxc_conf->systemd = strdup(value); -+ lxc_conf->systemd = safe_strdup(value); - return 0; - } - -diff --git a/src/lxc/json/defs.c b/src/lxc/json/defs.c -index e7d9a09..8a052a8 100644 ---- a/src/lxc/json/defs.c -+++ b/src/lxc/json/defs.c -@@ -4,7 +4,6 @@ - #endif - #include - #include --#include "securec.h" - #include "defs.h" - - defs_hook *make_defs_hook(yajl_val tree, struct parser_context *ctx, parser_error *err) { -diff --git a/src/lxc/json/json_common.c b/src/lxc/json/json_common.c -index 54b7b61..bea9b14 100755 ---- a/src/lxc/json/json_common.c -+++ b/src/lxc/json/json_common.c -@@ -381,23 +381,6 @@ int common_safe_int(const char *numstr, int *converted) { - return 0; - } - --char *safe_strdup(const char *src) --{ -- char *dst = NULL; -- -- if (src == NULL) { -- return NULL; -- } -- -- dst = strdup(src); -- if (dst == NULL) { -- abort(); -- } -- -- return dst; --} -- -- - 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; -@@ -522,12 +505,12 @@ int append_json_map_int_int(json_map_int_int *map, int key, int val) { - vals = safe_malloc(len * sizeof(int)); - - if (map->len) { -- if (memcpy(keys, map->keys, map->len * sizeof(int)) != EOK) { -+ if (memcpy(keys, map->keys, map->len * sizeof(int)) != NULL) { - free(keys); - free(vals); - return -1; - } -- if (memcpy(vals, map->values, map->len * sizeof(int)) != EOK) { -+ if (memcpy(vals, map->values, map->len * sizeof(int)) != NULL) { - free(keys); - free(vals); - return -1; -@@ -663,12 +646,12 @@ int append_json_map_int_bool(json_map_int_bool *map, int key, bool val) { - vals = safe_malloc(len * sizeof(bool)); - - if (map->len) { -- if (memcpy(keys, map->keys, map->len * sizeof(int)) != EOK) { -+ if (memcpy(keys, map->keys, map->len * sizeof(int)) != NULL) { - free(keys); - free(vals); - return -1; - } -- if (memcpy(vals, map->values, map->len * sizeof(bool)) != EOK) { -+ if (memcpy(vals, map->values, map->len * sizeof(bool)) != NULL) { - free(keys); - free(vals); - return -1; -@@ -803,12 +786,12 @@ int append_json_map_int_string(json_map_int_string *map, int key, const char *va - vals = safe_malloc(len * sizeof(char *)); - - if (map->len) { -- if (memcpy(keys, map->keys, map->len * sizeof(int)) != EOK) { -+ if (memcpy(keys, map->keys, map->len * sizeof(int)) != NULL) { - free(keys); - free(vals); - return -1; - } -- if (memcpy(vals, map->values, map->len * sizeof(char *)) != EOK) { -+ if (memcpy(vals, map->values, map->len * sizeof(char *)) != NULL) { - free(keys); - free(vals); - return -1; -@@ -930,12 +913,12 @@ int append_json_map_string_int(json_map_string_int *map, const char *key, int va - vals = safe_malloc(len * sizeof(int)); - - if (map->len) { -- if (memcpy(keys, map->keys, map->len * sizeof(char *)) != EOK) { -+ if (memcpy(keys, map->keys, map->len * sizeof(char *)) != NULL) { - free(keys); - free(vals); - return -1; - } -- if (memcpy(vals, map->values, map->len * sizeof(int)) != EOK) { -+ if (memcpy(vals, map->values, map->len * sizeof(int)) != NULL) { - free(keys); - free(vals); - return -1; -@@ -1052,12 +1035,12 @@ int append_json_map_string_bool(json_map_string_bool *map, const char *key, bool - vals = safe_malloc(len * sizeof(bool)); - - if (map->len) { -- if (memcpy(keys, map->keys, map->len * sizeof(char *)) != EOK) { -+ if (memcpy(keys, map->keys, map->len * sizeof(char *)) != NULL) { - free(keys); - free(vals); - return -1; - } -- if (memcpy(vals, map->values, map->len * sizeof(bool)) != EOK) { -+ if (memcpy(vals, map->values, map->len * sizeof(bool)) != NULL) { - free(keys); - free(vals); - return -1; -@@ -1181,12 +1164,12 @@ int append_json_map_string_string(json_map_string_string *map, const char *key, - vals = safe_malloc(len * sizeof(char *)); - - if (map->len) { -- if (memcpy(keys, map->keys, map->len * sizeof(char *)) != EOK) { -+ if (memcpy(keys, map->keys, map->len * sizeof(char *)) != NULL) { - free(keys); - free(vals); - return -1; - } -- if (memcpy(vals, map->values, map->len * sizeof(char *)) != EOK) { -+ if (memcpy(vals, map->values, map->len * sizeof(char *)) != NULL) { - free(keys); - free(vals); - return -1; -diff --git a/src/lxc/json/json_common.h b/src/lxc/json/json_common.h -index 218a837..60aa5fd 100755 ---- a/src/lxc/json/json_common.h -+++ b/src/lxc/json/json_common.h -@@ -9,7 +9,7 @@ - #include - #include - #include --#include "securec.h" -+#include "utils.h" - - #ifdef __cplusplus - extern "C" { -@@ -94,8 +94,6 @@ int common_safe_int64(const char *numstr, int64_t *converted); - - int common_safe_int(const char *numstr, int *converted); - --char *safe_strdup(const char *src); -- - typedef struct { - int *keys; - int *values; -diff --git a/src/lxc/json/logger_json_file.c b/src/lxc/json/logger_json_file.c -index 409ea11..842d35b 100644 ---- a/src/lxc/json/logger_json_file.c -+++ b/src/lxc/json/logger_json_file.c -@@ -4,7 +4,6 @@ - #endif - #include - #include --#include "securec.h" - #include "logger_json_file.h" - - logger_json_file *make_logger_json_file(yajl_val tree, struct parser_context *ctx, parser_error *err) { -diff --git a/src/lxc/json/oci_runtime_hooks.c b/src/lxc/json/oci_runtime_hooks.c -index 43ff8d7..41ddb67 100644 ---- a/src/lxc/json/oci_runtime_hooks.c -+++ b/src/lxc/json/oci_runtime_hooks.c -@@ -34,7 +34,7 @@ oci_runtime_spec_hooks *oci_runtime_spec_hooks_parse_file(const char *filename, - char errbuf[PARSE_ERR_BUFFER_SIZE]; - if (content == NULL) { - if (asprintf(err, "cannot read the file: %s", filename) < 0) { -- *err = strdup("error allocating memory"); -+ *err = safe_strdup("error allocating memory"); - } - return NULL; - } -@@ -42,7 +42,7 @@ oci_runtime_spec_hooks *oci_runtime_spec_hooks_parse_file(const char *filename, - free(content); - if (tree == NULL) { - if (asprintf(err, "cannot parse the file: %s", errbuf) < 0) { -- *err = strdup("error allocating memory"); -+ *err = safe_strdup("error allocating memory"); - } - return NULL; - } -diff --git a/src/lxc/json/oci_runtime_spec.c b/src/lxc/json/oci_runtime_spec.c -index 4ccb635..fd342de 100644 ---- a/src/lxc/json/oci_runtime_spec.c -+++ b/src/lxc/json/oci_runtime_spec.c -@@ -4,7 +4,6 @@ - #endif - #include - #include --#include "securec.h" - #include "oci_runtime_spec.h" - - oci_runtime_spec_hooks *make_oci_runtime_spec_hooks(yajl_val tree, struct parser_context *ctx, parser_error *err) { -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index a09e066..ede4c88 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -1055,9 +1055,7 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a - if (!started) { - size_read = read(conf->errpipe[0], errbuf, BUFSIZ); - if (size_read > 0) { -- conf->errmsg = strdup(errbuf); -- if (!conf->errmsg) -- ERROR("Out of memory"); -+ conf->errmsg = safe_strdup(errbuf); - } - } - close(conf->errpipe[0]); -@@ -3199,7 +3197,7 @@ static bool container_destroy(struct lxc_container *c, - ERROR("Failed to destroy directory \"%s\" for \"%s\"", path, - c->name); - sprintf(msg, "Failed to destroy directory \"%s\": %s", path, errno ? strerror(errno) : "error"); -- c->error_string = strdup(msg); -+ c->error_string = safe_strdup(msg); - goto out; - } - INFO("Destroyed directory \"%s\" for \"%s\"", path, c->name); -@@ -5147,17 +5145,17 @@ static bool do_lxcapi_set_terminal_default_fifos(struct lxc_container *c, const - if (in) { - if (conf->console.init_fifo[0]) - free(conf->console.init_fifo[0]); -- conf->console.init_fifo[0] = strdup(in); -+ 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] = strdup(out); -+ 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] = strdup(err); -+ conf->console.init_fifo[2] = safe_strdup(err); - } - - container_mem_unlock(c); -@@ -5181,7 +5179,7 @@ static bool do_lxcapi_set_container_info_file(struct lxc_container *c, const cha - conf = c->lxc_conf; - if (conf->container_info_file) - free(conf->container_info_file); -- conf->container_info_file = strdup(info_file); -+ conf->container_info_file = safe_strdup(info_file); - - container_mem_unlock(c); - return true; -@@ -5347,7 +5345,7 @@ static struct lxc_container *do_lxc_container_new(const char *name, const char * - fprintf(stderr, "Failed to get lxc path for %s\n", name); - goto err; - } -- c->config_path = strdup(tmp); -+ c->config_path = safe_strdup(tmp); - } - if (!c->config_path) { - fprintf(stderr, "Failed to allocate memory for %s\n", name); -diff --git a/src/lxc/path.c b/src/lxc/path.c -index 36d5e0b..c545887 100644 ---- a/src/lxc/path.c -+++ b/src/lxc/path.c -@@ -23,11 +23,7 @@ bool specify_current_dir(const char *path) - char *basec = NULL, *bname = NULL; - bool res = false; - -- basec = strdup(path); -- if (!basec) { -- ERROR("Out of memory"); -- return false; -- } -+ basec = safe_strdup(path); - - bname = basename(basec); - if (bname == NULL) { -@@ -106,13 +102,7 @@ bool filepath_split(const char *path, char **dir, char **base) - memcpy(*dir, path, i + 1); - *(*dir + i + 1) = '\0'; - -- *base = strdup(path + i + 1); -- if (!*base) { -- ERROR("Out of memory"); -- free(*dir); -- *dir = NULL; -- return false; -- } -+ *base = safe_strdup(path + i + 1); - - return true; - } -@@ -459,7 +449,7 @@ static char *eval_symlinks_in_scope(const char *fullpath, const char *rootpath) - } - - if (!strcmp(fullpath, root)) { -- return strdup(fullpath); -+ return safe_strdup(fullpath); - } - - if (strstr(fullpath, root) == NULL) { -@@ -592,7 +582,7 @@ char *path_relative(const char *basepath, const char *targpath) - } - - if (strcmp(base, targ) == 0) -- return strdup("."); -+ return safe_strdup("."); - - bl = strlen(base); - tl = strlen(targ); -@@ -646,5 +636,5 @@ char *path_relative(const char *basepath, const char *targpath) - return buf; - } - -- return strdup(targ + t0); -+ return safe_strdup(targ + t0); - } -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 2380581..d6c706e 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -2795,35 +2795,35 @@ static int clean_resource_set_env(struct lxc_handler *handler) - /* Start of environment variable setup for hooks. */ - if (name) { - snprintf(bufstr, PATH_MAX + 1, "LXC_NAME=%s", name); -- conf->ocihooks->poststop[i]->env[j++] = strdup(bufstr); -+ 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++] = strdup(bufstr); -+ 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++] = strdup(bufstr); -+ 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++] = strdup(bufstr); -+ 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++] = strdup(bufstr); -+ 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++] = strdup(bufstr); -+ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); - } -- conf->ocihooks->poststop[i]->env[j++] = strdup("LXC_CGNS_AWARE=1"); -+ 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++] = strdup(bufstr); -+ 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++] = strdup(bufstr); -+ conf->ocihooks->poststop[i]->env[j++] = safe_strdup(bufstr); - } - conf->ocihooks->poststop[i]->env_len = j; - /* End of environment variable setup for hooks. */ -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 6b117de..970db69 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -246,7 +246,7 @@ static int lxc_terminal_rename_old_log_file(struct lxc_terminal *terminal) - return -EFBIG; - } - free(rename_fname); -- rename_fname = strdup(tmp); -+ rename_fname = safe_strdup(tmp); - ret = sprintf(tmp, "%s.%u", terminal->log_path, (i - 1)); - if (ret < 0) { - free(rename_fname); -@@ -457,10 +457,10 @@ static ssize_t lxc_logger_write(struct lxc_terminal *terminal, const char *type, - } - memcpy(msg->log, buf, bytes_read); - msg->log_len = bytes_read; -- msg->stream = type ? strdup(type) : strdup("stdout"); -+ msg->stream = type ? safe_strdup(type) : safe_strdup("stdout"); - - get_now_time_buffer(timebuffer, sizeof(timebuffer)); -- msg->time = strdup(timebuffer); -+ msg->time = safe_strdup(timebuffer); - - json = logger_json_file_generate_json(msg, &ctx, &err); - if (!json) { -@@ -1324,9 +1324,9 @@ static int lxc_terminal_set_fifo(struct lxc_terminal *console, const char *in, c - } - memset(fifo_elem, 0, sizeof(*fifo_elem)); - -- fifo_elem->in_fifo = strdup(in ? in : ""); -- fifo_elem->out_fifo = strdup(out ? out : ""); -- fifo_elem->err_fifo = strdup(err ? err : ""); -+ 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; -@@ -1810,11 +1810,7 @@ int lxc_terminal_add_fifos(struct lxc_conf *conf, const char *fifonames) - char *tmp = NULL, *saveptr = NULL, *in = NULL, *out = NULL, *err = NULL; - const char *none_fifo_name = "none"; - -- tmp = strdup(fifonames); -- if (!tmp) { -- ret = -1; -- goto free_out; -- } -+ tmp = safe_strdup(fifonames); - - in = strtok_r(tmp, "&&&&", &saveptr); - if (!in) { -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index 854b3a2..7d51ad7 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -309,7 +309,7 @@ static int do_attach_foreground(struct lxc_container *c, lxc_attach_command_t *c - } - out: - if (c->lxc_conf->errmsg) -- *errmsg = strdup(c->lxc_conf->errmsg); -+ *errmsg = safe_strdup(c->lxc_conf->errmsg); - return wexit; - } - -@@ -353,7 +353,7 @@ static int do_attach_background(struct lxc_container *c, lxc_attach_command_t *c - msgpipe[1] = -1; - size_read = read(msgpipe[0], msgbuf, BUFSIZ); - if (size_read > 0) { -- *errmsg = strdup(msgbuf); -+ *errmsg = safe_strdup(msgbuf); - ret = -1; - } - -diff --git a/src/lxc/tools/lxc_start.c b/src/lxc/tools/lxc_start.c -index af63f58..e48e5b3 100644 ---- a/src/lxc/tools/lxc_start.c -+++ b/src/lxc/tools/lxc_start.c -@@ -360,7 +360,7 @@ int main(int argc, char *argv[]) - - /* isulad: fifo used to monitor state of monitor process */ - if (my_args.exit_monitor_fifo != NULL) { -- c->exit_fifo = strdup(my_args.exit_monitor_fifo); -+ c->exit_fifo = safe_strdup(my_args.exit_monitor_fifo); - } - - /* isulad: add start timeout */ -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 9db762f..e6e8905 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -2157,3 +2157,19 @@ FILE *lxc_fopen(const char *filename, const char *mode) - return fopen_cloexec(rpath, mode); - } - -+char *safe_strdup(const char *src) -+{ -+ char *dst = NULL; -+ -+ if (src == NULL) { -+ return NULL; -+ } -+ -+ dst = strdup(src); -+ if (dst == NULL) { -+ abort(); -+ } -+ -+ return dst; -+} -+ -diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 2406ee1..0b33f69 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -328,4 +328,6 @@ extern int lxc_mem_realloc(void **newptr, size_t newsize, void *oldptr, size_t o - extern void *lxc_common_calloc_s(size_t size); - extern int lxc_open(const char *filename, int flags, mode_t mode); - extern FILE *lxc_fopen(const char *filename, const char *mode); -+extern char *safe_strdup(const char *src); -+ - #endif /* __LXC_UTILS_H */ --- -1.8.3.1 - diff --git a/0112-fix-secure-errors.patch b/0112-fix-secure-errors.patch deleted file mode 100644 index 617cd16..0000000 --- a/0112-fix-secure-errors.patch +++ /dev/null @@ -1,278 +0,0 @@ -From 57d1ff71ce9c6d456e2fcaa8ca1229419d184ea9 Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Thu, 4 Jul 2019 11:08:26 +0800 -Subject: [PATCH 112/140] fix secure errors - -1. use snprintf replace sprintf -2. use malloc replace alloca - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 6 ++++-- - src/lxc/confile.c | 38 ++++++++++++++++++++++++-------------- - src/lxc/json/json_common.c | 12 ++++++------ - src/lxc/lxccontainer.c | 8 ++++++-- - src/lxc/terminal.c | 31 ++++++++++++++++++++++++------- - 5 files changed, 64 insertions(+), 31 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 1dfdaf3..996d267 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4543,18 +4543,20 @@ static char **merge_ocihook_env(char **oldenvs, size_t env_len, size_t *merge_en - } - - 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; - } -- lxcenv_buf = malloc(strlen(tmpenv) + 1 + strlen(lxc_envs[j]) + 1); -+ env_buf_len = ((strlen(tmpenv) + 1) + strlen(lxc_envs[j])) + 1; -+ lxcenv_buf = malloc(env_buf_len); - if (!lxcenv_buf) { - lxc_free_array((void **)result, free); - return NULL; - } -- if (sprintf(lxcenv_buf, "%s=%s", lxc_envs[j], tmpenv) < 0) { -+ if (snprintf(lxcenv_buf, env_buf_len, "%s=%s", lxc_envs[j], tmpenv) < 0) { - free(lxcenv_buf); - continue; - } -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 8262d1e..8a082d5 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -3802,9 +3802,11 @@ static int get_config_no_new_privs(const char *key, char *retv, int inlen, - static int get_config_prlimit(const char *key, char *retv, int inlen, - struct lxc_conf *c, void *data) - { -- int fulllen = 0, len; -+ int fulllen = 0; -+ int len = 0; - bool get_all = false; -- struct lxc_list *it; -+ struct lxc_list *it = NULL; -+ int nret = 0; - - if (!retv) - inlen = 0; -@@ -3818,32 +3820,40 @@ static int get_config_prlimit(const char *key, char *retv, int inlen, - else - return -1; - -+#define MAX_LIMIT_BUF_LEN ((INTTYPE_TO_STRLEN(uint64_t) * 2) + 2) - lxc_list_for_each(it, &c->limits) { - /* 2 colon separated 64 bit integers or the word 'unlimited' */ -- char buf[INTTYPE_TO_STRLEN(uint64_t) * 2 + 2]; -+ char buf[MAX_LIMIT_BUF_LEN] = { 0 }; - int partlen; - struct lxc_limit *lim = it->elem; - - if (lim->limit.rlim_cur == RLIM_INFINITY) { -- memcpy(buf, "unlimited", STRLITERALLEN("unlimited") + 1); -+ if (memcpy(buf, "unlimited", STRLITERALLEN("unlimited") + 1) == NULL) { -+ return -1; -+ } - partlen = STRLITERALLEN("unlimited"); - } else { -- partlen = sprintf(buf, "%" PRIu64, -- (uint64_t)lim->limit.rlim_cur); -+ partlen = snprintf(buf, MAX_LIMIT_BUF_LEN, "%" PRIu64, (uint64_t)lim->limit.rlim_cur); -+ if (partlen < 0) { -+ return -1; -+ } - } - - if (lim->limit.rlim_cur != lim->limit.rlim_max) { -- if (lim->limit.rlim_max == RLIM_INFINITY) -- memcpy(buf + partlen, ":unlimited", -- STRLITERALLEN(":unlimited") + 1); -- else -- sprintf(buf + partlen, ":%" PRIu64, -- (uint64_t)lim->limit.rlim_max); -+ if (lim->limit.rlim_max == RLIM_INFINITY) { -+ if (memcpy(buf + partlen, ":unlimited", STRLITERALLEN(":unlimited") + 1) == NULL) { -+ return -1; -+ } -+ } else { -+ nret = snprintf(buf + partlen, (MAX_LIMIT_BUF_LEN - partlen), ":%" PRIu64, (uint64_t)lim->limit.rlim_max); -+ if (nret < 0) { -+ return -1; -+ } -+ } - } - - if (get_all) { -- strprint(retv, inlen, "lxc.prlimit.%s = %s\n", -- lim->resource, buf); -+ strprint(retv, inlen, "lxc.prlimit.%s = %s\n", lim->resource, buf); - } else if (strcmp(lim->resource, key) == 0) { - strprint(retv, inlen, "%s", buf); - } -diff --git a/src/lxc/json/json_common.c b/src/lxc/json/json_common.c -index bea9b14..5da1e6d 100755 ---- a/src/lxc/json/json_common.c -+++ b/src/lxc/json/json_common.c -@@ -16,7 +16,7 @@ yajl_gen_status reformat_uint(void *ctx, long long unsigned int num) { - char numstr[MAX_NUM_STR_LEN]; - int ret; - -- ret = sprintf(numstr, "%llu", num); -+ ret = snprintf(numstr, MAX_NUM_STR_LEN, "%llu", num); - if (ret < 0) { - return yajl_gen_in_error_state; - } -@@ -27,7 +27,7 @@ yajl_gen_status reformat_int(void *ctx, long long int num) { - char numstr[MAX_NUM_STR_LEN]; - int ret; - -- ret = sprintf(numstr, "%lld", num); -+ ret = snprintf(numstr, MAX_NUM_STR_LEN, "%lld", num); - if (ret < 0) { - return yajl_gen_in_error_state; - } -@@ -399,7 +399,7 @@ yajl_gen_status gen_json_map_int_int(void *ctx, json_map_int_int *map, struct pa - for (i = 0; i < len; i++) { - char numstr[MAX_NUM_STR_LEN]; - int nret; -- nret = sprintf(numstr, "%lld", (long long int)map->keys[i]); -+ nret = snprintf(numstr, MAX_NUM_STR_LEN, "%lld", (long long int)map->keys[i]); - if (nret < 0) { - if (!*err && asprintf(err, "Error to print string") < 0) { - *(err) = safe_strdup("error allocating memory"); -@@ -545,7 +545,7 @@ yajl_gen_status gen_json_map_int_bool(void *ctx, json_map_int_bool *map, struct - for (i = 0; i < len; i++) { - char numstr[MAX_NUM_STR_LEN]; - int nret; -- nret = sprintf(numstr, "%lld", (long long int)map->keys[i]); -+ nret = snprintf(numstr, MAX_NUM_STR_LEN, "%lld", (long long int)map->keys[i]); - if (nret < 0) { - if (!*err && asprintf(err, "Error to print string") < 0) { - *(err) = safe_strdup("error allocating memory"); -@@ -686,7 +686,7 @@ yajl_gen_status gen_json_map_int_string(void *ctx, json_map_int_string *map, str - for (i = 0; i < len; i++) { - char numstr[MAX_NUM_STR_LEN]; - int nret; -- nret = sprintf(numstr, "%lld", (long long int)map->keys[i]); -+ nret = snprintf(numstr, MAX_NUM_STR_LEN, "%lld", (long long int)map->keys[i]); - if (nret < 0) { - if (!*err && asprintf(err, "Error to print string") < 0) { - *(err) = safe_strdup("error allocating memory"); -@@ -1184,4 +1184,4 @@ int append_json_map_string_string(json_map_string_string *map, const char *key, - - map->len++; - return 0; --} -\ No newline at end of file -+} -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index ede4c88..3b2c5af 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -3196,7 +3196,11 @@ static bool container_destroy(struct lxc_container *c, - char msg[BUFSIZ] = { 0 }; - ERROR("Failed to destroy directory \"%s\" for \"%s\"", path, - c->name); -- sprintf(msg, "Failed to destroy directory \"%s\": %s", path, errno ? strerror(errno) : "error"); -+ ret = snprintf(msg, BUFSIZ, "Failed to destroy directory \"%s\": %s", path, errno ? strerror(errno) : "error"); -+ if (ret < 0) { -+ ERROR("Sprintf failed"); -+ goto out; -+ } - c->error_string = safe_strdup(msg); - goto out; - } -@@ -5278,7 +5282,7 @@ static int set_start_extral_configs(struct lxc_container *c) - return -1; - } - } -- if (sprintf(fpath, "%s/%s/%s", c->config_path, c->name, START_GENERATE_CONFIG) < 0) { -+ if (snprintf(fpath, PATH_MAX, "%s/%s/%s", c->config_path, c->name, START_GENERATE_CONFIG) < 0) { - fprintf(stderr, "Sprintf config path failed\n"); - return -1; - } -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 970db69..b9b65c6 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -241,13 +241,13 @@ static int lxc_terminal_rename_old_log_file(struct lxc_terminal *terminal) - char *rename_fname = NULL; - - for (i = terminal->log_rotate - 1; i > 1; i--) { -- ret = sprintf(tmp, "%s.%u", terminal->log_path, i); -+ ret = snprintf(tmp, PATH_MAX, "%s.%u", terminal->log_path, i); - if (ret < 0) { - return -EFBIG; - } - free(rename_fname); - rename_fname = safe_strdup(tmp); -- ret = sprintf(tmp, "%s.%u", terminal->log_path, (i - 1)); -+ ret = snprintf(tmp, PATH_MAX, "%s.%u", terminal->log_path, (i - 1)); - if (ret < 0) { - free(rename_fname); - return -EFBIG; -@@ -284,11 +284,21 @@ static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) - } - - len = strlen(terminal->log_path) + sizeof(".1"); -- tmp = alloca(len); -+ tmp = malloc(len); -+ if (tmp == NULL) { -+ ERROR("Out of memory"); -+ return -1; -+ } -+ if (memset(tmp, 0, len) != NULL) { -+ ERROR("Memset failed"); -+ goto free_out; -+ } - - ret = snprintf(tmp, len, "%s.1", terminal->log_path); -- if (ret < 0 || (size_t)ret >= len) -- return -EFBIG; -+ if (ret < 0 || (size_t)ret >= len) { -+ ret = -EFBIG; -+ goto free_out; -+ } - - close(terminal->log_fd); - terminal->log_fd = -1; -@@ -297,7 +307,10 @@ static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) - SYSERROR("Rename container log file failed"); - } - -- return lxc_terminal_create_log_file(terminal); -+ ret = lxc_terminal_create_log_file(terminal); -+free_out: -+ free(tmp); -+ return ret; - } - - static int lxc_terminal_rotate_write_data(struct lxc_terminal *terminal, const char *buf, -@@ -403,6 +416,7 @@ static bool get_time_buffer(struct timespec *timestamp, char *timebuffer, - struct tm tm_utc = { 0 }; - int32_t nanos = 0; - time_t seconds; -+ size_t len = 0; - - if (!timebuffer || !maxsize) { - return false; -@@ -413,7 +427,10 @@ static bool get_time_buffer(struct timespec *timestamp, char *timebuffer, - strftime(timebuffer, maxsize, "%Y-%m-%dT%H:%M:%S", &tm_utc); - - nanos = (int32_t)timestamp->tv_nsec; -- sprintf(timebuffer + strlen(timebuffer), ".%09dZ", nanos); -+ len = strlen(timebuffer); -+ if (snprintf(timebuffer + len, (maxsize - len), ".%09dZ", nanos) < 0) { -+ return false; -+ } - - return true; - } --- -1.8.3.1 - diff --git a/0113-Malloc-parameter-check-and-judgment.patch b/0113-Malloc-parameter-check-and-judgment.patch deleted file mode 100644 index 12fbfa3..0000000 --- a/0113-Malloc-parameter-check-and-judgment.patch +++ /dev/null @@ -1,575 +0,0 @@ -From 3b2dff6c4d17c6adeba8304f30334e93db611233 Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Thu, 4 Jul 2019 12:08:17 +0800 -Subject: [PATCH 113/140] Malloc parameter check and judgment - -Signed-off-by: wujing -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 2 +- - src/lxc/commands.c | 9 ++- - src/lxc/conf.c | 20 ++++-- - src/lxc/confile.c | 8 +-- - src/lxc/json/container_start_generate_config.c | 12 +++- - src/lxc/json/defs.c | 8 +++ - src/lxc/json/json_common.c | 97 +++++++++----------------- - src/lxc/json/logger_json_file.c | 6 +- - src/lxc/lxccontainer.c | 12 +++- - src/lxc/path.c | 8 ++- - src/lxc/start.c | 6 +- - src/lxc/terminal.c | 2 +- - src/lxc/utils.c | 4 +- - 13 files changed, 104 insertions(+), 90 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index d7b16e3..ac4bd39 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -1188,7 +1188,7 @@ static int create_attach_timeout_thread(int64_t attach_timeout, pid_t pid) - struct attach_timeout_conf *timeout_conf = NULL; - - timeout_conf = malloc(sizeof(struct attach_timeout_conf)); -- if (!timeout_conf) { -+ if (timeout_conf == NULL) { - ERROR("Failed to malloc attach timeout conf"); - ret = -1; - goto out; -diff --git a/src/lxc/commands.c b/src/lxc/commands.c -index 0802a16..fa02a4b 100644 ---- a/src/lxc/commands.c -+++ b/src/lxc/commands.c -@@ -1075,11 +1075,16 @@ int lxc_cmd_set_terminal_fifos(const char *name, const char *lxcpath, const char - 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) -+ 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) - return -1; -- snprintf(tmp, len, "%s%s%s%s%s", cmd_in_fifo, split, cmd_out_fifo, split, cmd_err_fifo); - - struct lxc_cmd_rr cmd = { - .req = { -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 996d267..3ecccbd 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4393,7 +4393,11 @@ int lxc_drop_caps(struct lxc_conf *conf) - - // caplist[i] is 1 if we keep capability i - caplist = malloc(numcaps * sizeof(int)); -- memset(caplist, 0, 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) { - -@@ -4488,8 +4492,8 @@ static char* generate_json_str(const char *name, const char *lxcpath, const char - cpid = "-1"; - } - -- if ((SIZE_MAX - strlen(name) - strlen(cpid) - strlen(rootfs) - strlen(lxcpath) - strlen(name)) < -- (strlen("{\"ociVersion\":\"\",\"id\":\"\",\"pid\":,\"root\":\"\",\"bundle\":\"\"}") + 1 + 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; -@@ -4499,7 +4503,7 @@ static char* generate_json_str(const char *name, const char *lxcpath, const char - size = strlen("{\"ociVersion\":\"\",\"id\":\"\",\"pid\":,\"root\":\"\",\"bundle\":\"\"}") + - strlen(name) + strlen(cpid) + strlen(rootfs) + strlen(lxcpath) + 1 + strlen(name) + 1; - inmsg = malloc(size); -- if (!inmsg) { -+ if (inmsg == NULL) { - ERROR("Out of memory"); - ret = -1; - goto out_free; -@@ -4531,9 +4535,11 @@ static char **merge_ocihook_env(char **oldenvs, size_t env_len, size_t *merge_en - }; - 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) -+ if (result == NULL) - return NULL; - memset(result, 0, sizeof(char *) * result_len); - -@@ -4552,7 +4558,7 @@ static char **merge_ocihook_env(char **oldenvs, size_t env_len, size_t *merge_en - } - env_buf_len = ((strlen(tmpenv) + 1) + strlen(lxc_envs[j])) + 1; - lxcenv_buf = malloc(env_buf_len); -- if (!lxcenv_buf) { -+ if (lxcenv_buf == NULL) { - lxc_free_array((void **)result, free); - return NULL; - } -@@ -4759,7 +4765,7 @@ static int run_ocihook_buffer(struct oci_hook_conf *oconf, const char *inmsg) - } - - conf = malloc(sizeof(struct wait_conf)); -- if (!conf) { -+ if (conf == NULL) { - SYSERROR("Failed to malloc."); - goto on_error; - } -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 8a082d5..a75e023 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -2318,13 +2318,13 @@ static int set_config_populate_device(const char *key, const char *value, - - /* allocate list element */ - dev_list = malloc(sizeof(*dev_list)); -- if (!dev_list) -+ if (dev_list == NULL) - goto on_error; - - lxc_list_init(dev_list); - - dev_elem = malloc(sizeof(*dev_elem)); -- if (!dev_elem) -+ if (dev_elem == NULL) - goto on_error; - memset(dev_elem, 0, sizeof(*dev_elem)); - -@@ -2362,7 +2362,7 @@ static int set_config_rootfs_masked_paths(const char *key, const char *value, - return lxc_clear_rootfs_masked_paths(lxc_conf); - - list_item = malloc(sizeof(*list_item)); -- if (!list_item) -+ if (list_item == NULL) - goto on_error; - - list_item->elem = safe_strdup(value); -@@ -2387,7 +2387,7 @@ static int set_config_rootfs_ro_paths(const char *key, const char *value, - return lxc_clear_rootfs_ro_paths(lxc_conf); - - list_item = malloc(sizeof(*list_item)); -- if (!list_item) -+ if (list_item == NULL) - goto on_error; - - list_item->elem = safe_strdup(value); -diff --git a/src/lxc/json/container_start_generate_config.c b/src/lxc/json/container_start_generate_config.c -index 5ec8311..3748973 100644 ---- a/src/lxc/json/container_start_generate_config.c -+++ b/src/lxc/json/container_start_generate_config.c -@@ -41,6 +41,11 @@ container_start_generate_config *make_container_start_generate_config(yajl_val t - if (tmp != NULL && YAJL_GET_ARRAY(tmp) != NULL && YAJL_GET_ARRAY(tmp)->len > 0) { - size_t i; - ret->additional_gids_len = YAJL_GET_ARRAY(tmp)->len; -+ if (YAJL_GET_ARRAY(tmp)->len > SIZE_MAX / sizeof(*ret->additional_gids) - 1) { -+ *err = safe_strdup("invalid additional gids size"); -+ free_container_start_generate_config(ret); -+ return NULL; -+ } - ret->additional_gids = safe_malloc((YAJL_GET_ARRAY(tmp)->len + 1) * sizeof(*ret->additional_gids)); - for (i = 0; i < YAJL_GET_ARRAY(tmp)->len; i++) { - yajl_val val = YAJL_GET_ARRAY(tmp)->values[i]; -@@ -233,8 +238,13 @@ char *container_start_generate_config_generate_json(container_start_generate_con - 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); -+ (void)memcpy(json_buf, gen_buf, gen_len); - json_buf[gen_len] = '\0'; - - free_out: -diff --git a/src/lxc/json/defs.c b/src/lxc/json/defs.c -index 8a052a8..4bf569a 100644 ---- a/src/lxc/json/defs.c -+++ b/src/lxc/json/defs.c -@@ -24,6 +24,10 @@ defs_hook *make_defs_hook(yajl_val tree, struct parser_context *ctx, parser_erro - 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]; -@@ -39,6 +43,10 @@ defs_hook *make_defs_hook(yajl_val tree, struct parser_context *ctx, parser_erro - 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]; -diff --git a/src/lxc/json/json_common.c b/src/lxc/json/json_common.c -index 5da1e6d..ed2fe83 100755 ---- a/src/lxc/json/json_common.c -+++ b/src/lxc/json/json_common.c -@@ -445,6 +445,9 @@ json_map_int_int *make_json_map_int_int(yajl_val src, struct parser_context *ctx - 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)); -@@ -505,16 +508,8 @@ int append_json_map_int_int(json_map_int_int *map, int key, int val) { - vals = safe_malloc(len * sizeof(int)); - - if (map->len) { -- if (memcpy(keys, map->keys, map->len * sizeof(int)) != NULL) { -- free(keys); -- free(vals); -- return -1; -- } -- if (memcpy(vals, map->values, map->len * sizeof(int)) != NULL) { -- free(keys); -- free(vals); -- return -1; -- } -+ (void)memcpy(keys, map->keys, map->len * sizeof(int)); -+ (void)memcpy(vals, map->values, map->len * sizeof(int)); - } - free(map->keys); - map->keys = keys; -@@ -591,6 +586,9 @@ json_map_int_bool *make_json_map_int_bool(yajl_val src, struct parser_context *c - 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)); -@@ -646,16 +644,8 @@ int append_json_map_int_bool(json_map_int_bool *map, int key, bool val) { - vals = safe_malloc(len * sizeof(bool)); - - if (map->len) { -- if (memcpy(keys, map->keys, map->len * sizeof(int)) != NULL) { -- free(keys); -- free(vals); -- return -1; -- } -- if (memcpy(vals, map->values, map->len * sizeof(bool)) != NULL) { -- free(keys); -- free(vals); -- return -1; -- } -+ (void)memcpy(keys, map->keys, map->len * sizeof(int)); -+ (void)memcpy(vals, map->values, map->len * sizeof(bool)); - } - free(map->keys); - map->keys = keys; -@@ -733,6 +723,9 @@ json_map_int_string *make_json_map_int_string(yajl_val src, struct parser_contex - 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)); -@@ -786,16 +779,8 @@ int append_json_map_int_string(json_map_int_string *map, int key, const char *va - vals = safe_malloc(len * sizeof(char *)); - - if (map->len) { -- if (memcpy(keys, map->keys, map->len * sizeof(int)) != NULL) { -- free(keys); -- free(vals); -- return -1; -- } -- if (memcpy(vals, map->values, map->len * sizeof(char *)) != NULL) { -- free(keys); -- free(vals); -- return -1; -- } -+ (void)memcpy(keys, map->keys, map->len * sizeof(int)); -+ (void)memcpy(vals, map->values, map->len * sizeof(char *)); - } - free(map->keys); - map->keys = keys; -@@ -864,6 +849,9 @@ json_map_string_int *make_json_map_string_int(yajl_val src, struct parser_contex - 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 *)); -@@ -913,16 +901,8 @@ int append_json_map_string_int(json_map_string_int *map, const char *key, int va - vals = safe_malloc(len * sizeof(int)); - - if (map->len) { -- if (memcpy(keys, map->keys, map->len * sizeof(char *)) != NULL) { -- free(keys); -- free(vals); -- return -1; -- } -- if (memcpy(vals, map->values, map->len * sizeof(int)) != NULL) { -- free(keys); -- free(vals); -- return -1; -- } -+ (void)memcpy(keys, map->keys, map->len * sizeof(char *)); -+ (void)memcpy(vals, map->values, map->len * sizeof(int)); - } - free(map->keys); - map->keys = keys; -@@ -991,6 +971,9 @@ json_map_string_bool *make_json_map_string_bool(yajl_val src, struct parser_cont - 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 *)); -@@ -1017,6 +1000,7 @@ json_map_string_bool *make_json_map_string_bool(yajl_val src, struct parser_cont - } - return ret; - } -+ - int append_json_map_string_bool(json_map_string_bool *map, const char *key, bool val) { - size_t len; - char **keys = NULL; -@@ -1035,16 +1019,8 @@ int append_json_map_string_bool(json_map_string_bool *map, const char *key, bool - vals = safe_malloc(len * sizeof(bool)); - - if (map->len) { -- if (memcpy(keys, map->keys, map->len * sizeof(char *)) != NULL) { -- free(keys); -- free(vals); -- return -1; -- } -- if (memcpy(vals, map->values, map->len * sizeof(bool)) != NULL) { -- free(keys); -- free(vals); -- return -1; -- } -+ (void)memcpy(keys, map->keys, map->len * sizeof(char *)); -+ (void)memcpy(vals, map->values, map->len * sizeof(bool)); - } - free(map->keys); - map->keys = keys; -@@ -1114,6 +1090,9 @@ json_map_string_string *make_json_map_string_string(yajl_val src, struct parser_ - 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 *)); -@@ -1149,9 +1128,9 @@ int append_json_map_string_string(json_map_string_string *map, const char *key, - - 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; -+ free(map->values[i]); -+ map->values[i] = safe_strdup(val ? val : ""); -+ return 0; - } - } - -@@ -1164,16 +1143,8 @@ int append_json_map_string_string(json_map_string_string *map, const char *key, - vals = safe_malloc(len * sizeof(char *)); - - if (map->len) { -- if (memcpy(keys, map->keys, map->len * sizeof(char *)) != NULL) { -- free(keys); -- free(vals); -- return -1; -- } -- if (memcpy(vals, map->values, map->len * sizeof(char *)) != NULL) { -- free(keys); -- free(vals); -- return -1; -- } -+ (void)memcpy(keys, map->keys, map->len * sizeof(char *)); -+ (void)memcpy(vals, map->values, map->len * sizeof(char *)); - } - free(map->keys); - map->keys = keys; -diff --git a/src/lxc/json/logger_json_file.c b/src/lxc/json/logger_json_file.c -index 842d35b..6abeef4 100644 ---- a/src/lxc/json/logger_json_file.c -+++ b/src/lxc/json/logger_json_file.c -@@ -230,8 +230,12 @@ char *logger_json_file_generate_json(logger_json_file *ptr, struct parser_contex - goto free_out; - } - -+ if (gen_len == SIZE_MAX) { -+ *err = safe_strdup("Invalid buffer length"); -+ goto free_out; -+ } - json_buf = safe_malloc(gen_len + 1); -- memcpy(json_buf, gen_buf, gen_len); -+ (void)memcpy(json_buf, gen_buf, gen_len); - json_buf[gen_len] = '\0'; - - free_out: -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 3b2c5af..5a72483 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -928,6 +928,9 @@ static char **use_init_args(char **init_argv, size_t init_args) - - do { - argv = malloc(sizeof(char *)); -+ if (argv == NULL) { -+ return NULL; -+ } - } while (!argv); - - argv[0] = NULL; -@@ -3378,9 +3381,12 @@ static bool set_oci_hook_config_filename(struct lxc_container *c) - 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) -+ if (newpath == NULL) - return false; - - ret = snprintf(newpath, len, "%s/%s/%s", c->config_path, c->name, OCI_HOOK_JSON_FILE_NAME); -@@ -5276,11 +5282,11 @@ static int set_start_extral_configs(struct lxc_container *c) - - if (lconf == NULL) { - c->lxc_conf = malloc(sizeof(struct lxc_conf)); -- lconf = c->lxc_conf; -- if (lconf == NULL) { -+ if (c->lxc_conf == NULL) { - fprintf(stderr, "Out of memory\n"); - return -1; - } -+ lconf = c->lxc_conf; - } - if (snprintf(fpath, PATH_MAX, "%s/%s/%s", c->config_path, c->name, START_GENERATE_CONFIG) < 0) { - fprintf(stderr, "Sprintf config path failed\n"); -diff --git a/src/lxc/path.c b/src/lxc/path.c -index c545887..df285f5 100644 ---- a/src/lxc/path.c -+++ b/src/lxc/path.c -@@ -58,7 +58,7 @@ char *preserve_trailing_dot_or_separator(const char *cleanedpath, - - len = strlen(cleanedpath) + 3; - respath = malloc(len); -- if (!respath) { -+ if (respath == NULL) { - ERROR("Out of memory"); - return NULL; - } -@@ -90,12 +90,16 @@ bool filepath_split(const char *path, char **dir, char **base) - 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) { -+ if (*dir == NULL) { - ERROR("Out of memory"); - return false; - } -diff --git a/src/lxc/start.c b/src/lxc/start.c -index d6c706e..00d478c 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -2383,7 +2383,7 @@ static int create_start_timeout_thread(struct lxc_conf *conf, unsigned int start - } - - timeout_conf = malloc(sizeof(struct start_timeout_conf)); -- if (!timeout_conf) { -+ if (timeout_conf == NULL) { - ERROR("Failed to malloc start timeout conf"); - ret = -1; - goto out; -@@ -2657,7 +2657,7 @@ static struct lxc_handler *lxc_init_clean_handler(char *name, char *lxcpath, str - struct lxc_handler *handler; - - handler = malloc(sizeof(*handler)); -- if (!handler) -+ if (handler == NULL) - return NULL; - - memset(handler, 0, sizeof(*handler)); -@@ -2707,7 +2707,7 @@ static struct lxc_handler *lxc_init_pids_handler(char *name, char *lxcpath, stru - struct lxc_handler *handler; - - handler = malloc(sizeof(*handler)); -- if (!handler) -+ if (handler == NULL) - return NULL; - - memset(handler, 0, sizeof(*handler)); -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index b9b65c6..1fee651 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -1330,7 +1330,7 @@ static int lxc_terminal_set_fifo(struct lxc_terminal *console, const char *in, c - } - - fifo_elem = malloc(sizeof(*fifo_elem)); -- if (!fifo_elem) { -+ if (fifo_elem == NULL) { - if (fifofd_in >= 0) - close(fifofd_in); - if (fifofd_out >= 0) -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index e6e8905..656df4a 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -1945,9 +1945,9 @@ static proc_t *lxc_stat2proc(const char *S) - *tmp = '\0'; /* replace trailing ')' with NUL */ - - P = malloc(sizeof(proc_t)); -- if (!P) -+ if (P == NULL) - return NULL; -- memset(P, 0x00, sizeof(proc_t)); -+ (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 */ --- -1.8.3.1 - diff --git a/0114-lxc-fix-code-errors.patch b/0114-lxc-fix-code-errors.patch deleted file mode 100644 index 9e062df..0000000 --- a/0114-lxc-fix-code-errors.patch +++ /dev/null @@ -1,155 +0,0 @@ -From b51181f15bab3db7e4391b8eccad047221947baa Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 4 Jul 2019 05:10:00 -0400 -Subject: [PATCH 114/140] lxc: fix code errors - -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 14 +++++--------- - src/lxc/conf.c | 11 ++++++----- - src/lxc/confile.c | 8 ++------ - src/lxc/terminal.c | 6 ++---- - 4 files changed, 15 insertions(+), 24 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index ac4bd39..1f14eb4 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -841,7 +841,7 @@ static int attach_child_main(struct attach_clone_payload *payload) - } - - /* isulad: set workdir */ -- if (init_ctx && init_ctx->container && init_ctx->container->lxc_conf && init_ctx->container->lxc_conf->init_cwd) { -+ 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 */ -@@ -933,8 +933,7 @@ static int attach_child_main(struct attach_clone_payload *payload) - goto on_error; - } - -- if ((init_ctx->container && init_ctx->container->lxc_conf && -- init_ctx->container->lxc_conf->no_new_privs) || -+ if ((init_ctx->container->lxc_conf->no_new_privs) || - (options->attach_flags & LXC_ATTACH_NO_NEW_PRIVS)) { - ret = prctl(PR_SET_NO_NEW_PRIVS, prctl_arg(1), prctl_arg(0), - prctl_arg(0), prctl_arg(0)); -@@ -958,8 +957,7 @@ static int attach_child_main(struct attach_clone_payload *payload) - TRACE("Set %s LSM label to \"%s\"", lsm_name(), init_ctx->lsm_label); - } - -- if (init_ctx->container && init_ctx->container->lxc_conf && -- init_ctx->container->lxc_conf->seccomp) { -+ if (init_ctx->container->lxc_conf->seccomp) { - ret = lxc_seccomp_load(init_ctx->container->lxc_conf); - if (ret < 0) - goto on_error; -@@ -1028,8 +1026,7 @@ static int attach_child_main(struct attach_clone_payload *payload) - goto on_error; - } - -- if (init_ctx->container && init_ctx->container->lxc_conf && -- !lxc_setgroups(init_ctx->container->lxc_conf->init_groups_len, -+ if (!lxc_setgroups(init_ctx->container->lxc_conf->init_groups_len, - init_ctx->container->lxc_conf->init_groups)) - goto on_error; - -@@ -1041,8 +1038,7 @@ static int attach_child_main(struct attach_clone_payload *payload) - goto on_error; - } - -- if (init_ctx->container && init_ctx->container->lxc_conf && -- lxc_drop_caps(init_ctx->container->lxc_conf) != 0) { -+ if (lxc_drop_caps(init_ctx->container->lxc_conf) != 0) { - ERROR("Failed to drop caps."); - goto on_error; - } -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 3ecccbd..e22e13e 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4790,6 +4790,7 @@ static int run_ocihook_buffer(struct oci_hook_conf *oconf, const char *inmsg) - err = pthread_create(&ptid, &attr, wait_ocihook_timeout, conf); - if (err != 0) { - ERROR("Create wait timeout thread failed"); -+ free(conf); - goto on_error; - } - -@@ -4804,17 +4805,17 @@ static int run_ocihook_buffer(struct oci_hook_conf *oconf, const char *inmsg) - 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(conf->errfd, "%s:%d: running %s hook caused \"error running hook: exit status %d, output: %s\".", -+ lxc_write_error_message(oconf->errfd, "%s:%d: running %s hook caused \"error running hook: exit status %d, output: %s\".", - __FILE__, __LINE__, -- (conf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[conf->which], -+ (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(conf->errfd, "%s:%d: running %s hook caused \"error running hook: Script terminated by signal %d\".", -+ lxc_write_error_message(oconf->errfd, "%s:%d: running %s hook caused \"error running hook: Script terminated by signal %d\".", - __FILE__, __LINE__, -- (conf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[conf->which], -+ (oconf->which >= NUM_LXC_HOOKS) ? "invalid type" : lxchook_names[oconf->which], - WTERMSIG(ret)); - - goto print_hook; -@@ -4836,7 +4837,7 @@ print_hook: - 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 : "", conf->timeout); -+ err_envs_msg ? err_envs_msg : "", oconf->ocihook->timeout); - - free(err_args_msg); - free(err_envs_msg); -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index a75e023..0537ebc 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -3828,9 +3828,7 @@ static int get_config_prlimit(const char *key, char *retv, int inlen, - struct lxc_limit *lim = it->elem; - - if (lim->limit.rlim_cur == RLIM_INFINITY) { -- if (memcpy(buf, "unlimited", STRLITERALLEN("unlimited") + 1) == NULL) { -- return -1; -- } -+ (void)memcpy(buf, "unlimited", STRLITERALLEN("unlimited") + 1); - partlen = STRLITERALLEN("unlimited"); - } else { - partlen = snprintf(buf, MAX_LIMIT_BUF_LEN, "%" PRIu64, (uint64_t)lim->limit.rlim_cur); -@@ -3841,9 +3839,7 @@ static int get_config_prlimit(const char *key, char *retv, int inlen, - - if (lim->limit.rlim_cur != lim->limit.rlim_max) { - if (lim->limit.rlim_max == RLIM_INFINITY) { -- if (memcpy(buf + partlen, ":unlimited", STRLITERALLEN(":unlimited") + 1) == NULL) { -- return -1; -- } -+ (void)memcpy(buf + partlen, ":unlimited", STRLITERALLEN(":unlimited") + 1); - } else { - nret = snprintf(buf + partlen, (MAX_LIMIT_BUF_LEN - partlen), ":%" PRIu64, (uint64_t)lim->limit.rlim_max); - if (nret < 0) { -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 1fee651..32c69a4 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -289,10 +289,8 @@ static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) - ERROR("Out of memory"); - return -1; - } -- if (memset(tmp, 0, len) != NULL) { -- ERROR("Memset failed"); -- goto free_out; -- } -+ -+ (void)memset(tmp, 0, len); - - ret = snprintf(tmp, len, "%s.1", terminal->log_path); - if (ret < 0 || (size_t)ret >= len) { --- -1.8.3.1 - diff --git a/0115-fix-compile-error-on-ubuntu.patch b/0115-fix-compile-error-on-ubuntu.patch deleted file mode 100644 index 39387ff..0000000 --- a/0115-fix-compile-error-on-ubuntu.patch +++ /dev/null @@ -1,371 +0,0 @@ -From 4a03b0c529c8e2cf915c2b374a47e62b48c2d4db Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Thu, 11 Jul 2019 17:42:00 +0800 -Subject: [PATCH 115/140] fix compile error on ubuntu - -fix compile error on ubuntu - -Signed-off-by: liuhao -Signed-off-by: LiFeng ---- - configure.ac | 1 - - src/lxc/Makefile.am | 10 ++++-- - src/lxc/conf.c | 2 +- - src/lxc/confile.c | 2 +- - src/lxc/isulad_utils.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/isulad_utils.h | 13 ++++++++ - src/lxc/path.c | 2 +- - src/lxc/utils.c | 82 +---------------------------------------------- - src/lxc/utils.h | 6 +--- - 9 files changed, 113 insertions(+), 92 deletions(-) - create mode 100644 src/lxc/isulad_utils.c - create mode 100644 src/lxc/isulad_utils.h - -diff --git a/configure.ac b/configure.ac -index 5963fab..dc85f74 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -706,7 +706,6 @@ 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"],,[]) - --LDFLAGS="$LDFLAGS -fPIE -pie" - - CFLAGS="$CFLAGS -Wvla -std=gnu11 -D_FORTIFY_SOURCE=2 -Wall -fPIC -fPIE -pie" - if test "x$enable_werror" = "xyes"; then -diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am -index b24fcfd..27240cc 100644 ---- a/src/lxc/Makefile.am -+++ b/src/lxc/Makefile.am -@@ -50,6 +50,7 @@ noinst_HEADERS = attach.h \ - json/oci_runtime_spec.h \ - json/logger_json_file.h \ - json/read-file.h \ -+ isulad_utils.h \ - utils.h - - if IS_BIONIC -@@ -146,6 +147,7 @@ liblxc_la_SOURCES = af_unix.c af_unix.h \ - sync.c sync.h \ - syscall_wrappers.h \ - terminal.c \ -+ isulad_utils.c isulad_utils.h \ - utils.c utils.h \ - version.h \ - json/json_common.c json/json_common.h \ -@@ -232,14 +234,14 @@ AM_CFLAGS += -DUSE_CONFIGPATH_LOGS - endif - - # build the shared library --liblxc_la_CFLAGS = -fPIC \ -- -fPIE -pie \ -+liblxc_la_CFLAGS = \ - -DPIC \ - -D_FORTIFY_SOURCE=2 -Wall \ - $(AM_CFLAGS) \ - -pthread - - liblxc_la_LDFLAGS = -pthread \ -+ -fPIC \ - -Wl,-no-undefined \ - -Wl,-z,relro \ - -Wl,-z,now \ -@@ -375,6 +377,7 @@ lxc_monitord_SOURCES = cmd/lxc_monitord.c \ - mainloop.c mainloop.h \ - monitor.c monitor.h \ - raw_syscalls.c raw_syscalls.h \ -+ isulad_utils.c isulad_utils.h \ - utils.c utils.h - lxc_user_nic_SOURCES = cmd/lxc_user_nic.c \ - ../include/netns_ifaddrs.c ../include/netns_ifaddrs.h \ -@@ -391,6 +394,7 @@ lxc_usernsexec_SOURCES = cmd/lxc_usernsexec.c \ - file_utils.c file_utils.h \ - string_utils.c string_utils.h \ - syscall_wrappers.h \ -+ isulad_utils.c isulad_utils.h \ - utils.c utils.h - endif - -@@ -411,6 +415,8 @@ init_lxc_static_SOURCES = cmd/lxc_init.c \ - initutils.c initutils.h \ - file_utils.c file_utils.h \ - log.c log.h \ -+ path.c path.h \ -+ isulad_utils.c isulad_utils.h \ - macro.h \ - namespace.c namespace.h \ - string_utils.c string_utils.h -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index e22e13e..d9a7aae 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4934,7 +4934,7 @@ static int do_run_oci_hooks(const char *name, const char *lxcpath, struct lxc_co - 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 %ld failed, ContainerId: %s", i, name); -+ WARN("running poststart hook %zu failed, ContainerId: %s", i, name); - } - break; - case OCI_HOOK_POSTSTOP: -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 0537ebc..01fc944 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -2212,7 +2212,7 @@ 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; -+ void *tmp = NULL; - char *new_value = NULL; - - ret = set_config_string_item(&new_value, value); -diff --git a/src/lxc/isulad_utils.c b/src/lxc/isulad_utils.c -new file mode 100644 -index 0000000..66516a8 ---- /dev/null -+++ b/src/lxc/isulad_utils.c -@@ -0,0 +1,87 @@ -+#include -+#include -+ -+#include "isulad_utils.h" -+#include "log.h" -+#include "path.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..852d956 ---- /dev/null -+++ b/src/lxc/isulad_utils.h -@@ -0,0 +1,13 @@ -+#ifndef __LXC_MEM_UTILS_H -+#define __LXC_MEM_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 -index df285f5..7a5dce9 100644 ---- a/src/lxc/path.c -+++ b/src/lxc/path.c -@@ -10,7 +10,7 @@ - - #include "path.h" - #include "log.h" --#include "utils.h" -+#include "isulad_utils.h" - - lxc_log_define(lxc_path_ui, lxc); - -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 656df4a..1d2e9ee 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -57,6 +57,7 @@ - #include "syscall_wrappers.h" - #include "utils.h" - #include "path.h" -+#include "isulad_utils.h" - - #ifndef HAVE_STRLCPY - #include "include/strlcpy.h" -@@ -2092,84 +2093,3 @@ bool is_non_negative_num(const char *s) - } - return true; - } -- --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; --} -- --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); --} -- --char *safe_strdup(const char *src) --{ -- char *dst = NULL; -- -- if (src == NULL) { -- return NULL; -- } -- -- dst = strdup(src); -- if (dst == NULL) { -- abort(); -- } -- -- return dst; --} -- -diff --git a/src/lxc/utils.h b/src/lxc/utils.h -index 0b33f69..1c9bf41 100644 ---- a/src/lxc/utils.h -+++ b/src/lxc/utils.h -@@ -42,6 +42,7 @@ - #include "macro.h" - #include "raw_syscalls.h" - #include "string_utils.h" -+#include "isulad_utils.h" - - /* isulad: replace space with SPACE_MAGIC_STR */ - #define SPACE_MAGIC_STR "[#)" -@@ -324,10 +325,5 @@ extern bool lxc_process_alive(pid_t pid, unsigned long long start_time); - - extern bool is_non_negative_num(const char *s); - extern int lxc_file2str(const char *filename, char ret[], int cap); --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 int lxc_open(const char *filename, int flags, mode_t mode); --extern FILE *lxc_fopen(const char *filename, const char *mode); --extern char *safe_strdup(const char *src); - - #endif /* __LXC_UTILS_H */ --- -1.8.3.1 - diff --git a/0116-lxc-set-base-cgroup-path-to.patch b/0116-lxc-set-base-cgroup-path-to.patch deleted file mode 100644 index 6a4cde4..0000000 --- a/0116-lxc-set-base-cgroup-path-to.patch +++ /dev/null @@ -1,34 +0,0 @@ -From c12b2a69ceb8fcd13cd2210897a3dc4d1e695189 Mon Sep 17 00:00:00 2001 -From: liuhao -Date: Wed, 19 Jun 2019 16:48:50 +0800 -Subject: [PATCH 116/140] lxc: set base cgroup path to '/' - -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. - -Signed-off-by: zhangsong -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 46f13f4..7c92abe 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -2545,6 +2545,9 @@ static bool cg_hybrid_init(struct cgroup_ops *ops) - if (!writeable) - goto next; - */ -+ if (strlen(base_cgroup) > 1 && base_cgroup[0] == '/') { -+ base_cgroup[1] = '\0'; -+ } - if (type == CGROUP2_SUPER_MAGIC) { - char *cgv2_ctrl_path; - --- -1.8.3.1 - diff --git a/0117-pupulate-device-with-dir-mode-750-and-set-uid-gid.patch b/0117-pupulate-device-with-dir-mode-750-and-set-uid-gid.patch deleted file mode 100644 index 5165b7d..0000000 --- a/0117-pupulate-device-with-dir-mode-750-and-set-uid-gid.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 86c8493bcd073a1b4fdc2cabde005811771bc282 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Wed, 31 Jul 2019 05:24:11 -0400 -Subject: [PATCH 117/140] pupulate device with dir mode 750 and set uid/gid - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 3 --- - src/lxc/confile.c | 2 ++ - 2 files changed, 2 insertions(+), 3 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index d9a7aae..0b10a2d 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4005,13 +4005,11 @@ static int setup_populate_devs(const struct lxc_rootfs *rootfs, struct lxc_list - int ret = 0; - char *pathdirname = NULL; - char path[MAXPATHLEN]; -- mode_t cmask; - mode_t file_mode = 0; - struct lxc_populate_devs *dev_elem = NULL; - struct lxc_list *it = NULL; - - INFO("Populating devices into container"); -- cmask = umask(S_IXUSR | S_IXGRP | S_IXOTH); - lxc_list_for_each(it, devs) { - dev_elem = it->elem; - -@@ -4072,7 +4070,6 @@ static int setup_populate_devs(const struct lxc_rootfs *rootfs, struct lxc_list - return -1; - } - } -- umask(cmask); - - INFO("Populated devices into container /dev"); - return 0; -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 01fc944..3a02e09 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -2335,6 +2335,8 @@ static int set_config_populate_device(const char *key, const char *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; - - lxc_list_add_elem(dev_list, dev_elem); - --- -1.8.3.1 - diff --git a/0118-fix-sscanf-return-value-check.patch b/0118-fix-sscanf-return-value-check.patch deleted file mode 100644 index 126f094..0000000 --- a/0118-fix-sscanf-return-value-check.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 8a9eddf2b23d4fc3541670e1257e5e1619aba0a6 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 2 Sep 2019 06:24:07 -0400 -Subject: [PATCH 118/140] fix sscanf return value check - -Signed-off-by: LiFeng ---- - src/lxc/start.c | 2 +- - src/lxc/utils.c | 10 +++++++--- - 2 files changed, 8 insertions(+), 4 deletions(-) - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 00d478c..c1e0d5d 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1904,7 +1904,7 @@ static int lxc_check_container_info(char *filename, pid_t pid, pid_t p_pid, unsi - } - - num = sscanf(sbuf, "%d %Lu %d %Lu", &saved_pid, &saved_start_time, &saved_ppid, &saved_pstart_time); -- if (num < 0) { -+ if (num != 4) { - SYSERROR("Call sscanf error"); - ret = -1; - goto out; -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 1d2e9ee..c83c7a3 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -1952,8 +1952,8 @@ static proc_t *lxc_stat2proc(const char *S) - - /* parse these two strings separately, skipping the leading "(". */ - num = sscanf(S, "%d (%15c", &P->pid, P->cmd); /* comm[16] in kernel */ -- if (num < 0 && errno) { -- ERROR("Call sscanf error: %s", strerror(errno)); -+ if (num != 2) { -+ ERROR("Call sscanf error: %s", errno ? strerror(errno) : ""); - free(P); - return NULL; - } -@@ -1985,7 +1985,11 @@ static proc_t *lxc_stat2proc(const char *S) - &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; --- -1.8.3.1 - diff --git a/0119-remove-unuse-binary.patch b/0119-remove-unuse-binary.patch deleted file mode 100644 index 85588b6..0000000 --- a/0119-remove-unuse-binary.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 77c1a8421731f152a36a53147c7b66bd0e9f040f Mon Sep 17 00:00:00 2001 -From: LiuHao -Date: Wed, 4 Sep 2019 18:01:39 +0800 -Subject: [PATCH 119/140] remove unuse binary - -Signed-off-by: LiuHao ---- - hooks/Makefile.am | 11 ----------- - 1 file changed, 11 deletions(-) - -diff --git a/hooks/Makefile.am b/hooks/Makefile.am -index 5ae73d7..f55c4a9 100644 ---- a/hooks/Makefile.am -+++ b/hooks/Makefile.am -@@ -10,15 +10,4 @@ hooks_SCRIPTS = \ - squid-deb-proxy-client \ - nvidia - --binhooks_PROGRAMS = \ -- unmount-namespace -- --unmount_namespace_SOURCES = \ -- unmount-namespace.c -- --if IS_BIONIC --unmount_namespace_SOURCES += \ -- ../src/include/lxcmntent.c ../src/include/lxcmntent.h --endif -- - EXTRA_DIST=$(hooks_SCRIPTS) --- -1.8.3.1 - diff --git a/0120-remove-unuse-unmount-namespace.patch b/0120-remove-unuse-unmount-namespace.patch deleted file mode 100644 index 33ea319..0000000 --- a/0120-remove-unuse-unmount-namespace.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 15dfe27d172680e3abe25af07a9477ca75f8e1d4 Mon Sep 17 00:00:00 2001 -From: LiuHao -Date: Thu, 5 Sep 2019 11:48:57 +0800 -Subject: [PATCH 120/140] remove unuse unmount-namespace - -Signed-off-by: LiuHao ---- - lxc.spec.in | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/lxc.spec.in b/lxc.spec.in -index 7fcd811..2ca12fe 100644 ---- a/lxc.spec.in -+++ b/lxc.spec.in -@@ -259,7 +259,6 @@ fi - %{_libdir}/*.a - %{_libdir}/%{name} - %{_localstatedir}/* --%{_libexecdir}/%{name}/hooks/unmount-namespace - %{_libexecdir}/%{name}/lxc-apparmor-load - %{_libexecdir}/%{name}/lxc-monitord - %attr(4111,root,root) %{_libexecdir}/%{name}/lxc-user-nic --- -1.8.3.1 - diff --git a/0121-optimize-log-when-root-path-is-invalid.patch b/0121-optimize-log-when-root-path-is-invalid.patch deleted file mode 100644 index d61cc5f..0000000 --- a/0121-optimize-log-when-root-path-is-invalid.patch +++ /dev/null @@ -1,26 +0,0 @@ -From d4b8e904b6730f3eefa96878eca9e42219437c11 Mon Sep 17 00:00:00 2001 -From: TanYifeng -Date: Sat, 21 Sep 2019 06:19:25 -0400 -Subject: [PATCH 121/140] optimize log when root path is invalid - -Signed-off-by: TanYifeng ---- - src/lxc/conf.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 0b10a2d..5fd65e7 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4881,7 +4881,7 @@ static char *get_root_path(const char *path, const char *backend) - strcmp(backend, "loop") == 0) { - tmp = strrchr(path, ':'); - if (tmp == NULL) { -- ERROR("Out of memory"); -+ ERROR("Invalid root path format"); - return NULL; - } - tmp++; --- -1.8.3.1 - diff --git a/0122-lxc-fix-code-reivew-errors.patch b/0122-lxc-fix-code-reivew-errors.patch deleted file mode 100644 index 4e9b50b..0000000 --- a/0122-lxc-fix-code-reivew-errors.patch +++ /dev/null @@ -1,210 +0,0 @@ -From cb3044f47a1823994ee8133055ca6662cbe56838 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Thu, 26 Sep 2019 07:47:19 -0400 -Subject: [PATCH 122/140] lxc: fix code reivew errors - -Signed-off-by: LiFeng ---- - src/lxc/commands.c | 2 +- - src/lxc/commands_utils.c | 2 +- - src/lxc/confile.c | 4 ++-- - src/lxc/json/json_common.c | 15 +++++---------- - src/lxc/lxccontainer.c | 6 ++++-- - src/lxc/terminal.c | 8 +++++--- - src/lxc/utils.c | 2 +- - 7 files changed, 19 insertions(+), 20 deletions(-) - -diff --git a/src/lxc/commands.c b/src/lxc/commands.c -index fa02a4b..7d6cf6f 100644 ---- a/src/lxc/commands.c -+++ b/src/lxc/commands.c -@@ -1083,7 +1083,7 @@ int lxc_cmd_set_terminal_fifos(const char *name, const char *lxcpath, const char - 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) -+ if (ret < 0 || ret >= len) - return -1; - - struct lxc_cmd_rr cmd = { -diff --git a/src/lxc/commands_utils.c b/src/lxc/commands_utils.c -index f48f118..56ecce7 100644 ---- a/src/lxc/commands_utils.c -+++ b/src/lxc/commands_utils.c -@@ -144,7 +144,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 || ret >= len) { - ERROR("Failed to create abstract socket name"); - return -1; - } -diff --git a/src/lxc/confile.c b/src/lxc/confile.c -index 3a02e09..3eaae4a 100644 ---- a/src/lxc/confile.c -+++ b/src/lxc/confile.c -@@ -3834,7 +3834,7 @@ static int get_config_prlimit(const char *key, char *retv, int inlen, - partlen = STRLITERALLEN("unlimited"); - } else { - partlen = snprintf(buf, MAX_LIMIT_BUF_LEN, "%" PRIu64, (uint64_t)lim->limit.rlim_cur); -- if (partlen < 0) { -+ if (partlen < 0 || partlen >= MAX_LIMIT_BUF_LEN) { - return -1; - } - } -@@ -3844,7 +3844,7 @@ static int get_config_prlimit(const char *key, char *retv, int inlen, - (void)memcpy(buf + partlen, ":unlimited", STRLITERALLEN(":unlimited") + 1); - } else { - nret = snprintf(buf + partlen, (MAX_LIMIT_BUF_LEN - partlen), ":%" PRIu64, (uint64_t)lim->limit.rlim_max); -- if (nret < 0) { -+ if (nret < 0 || nret >= (MAX_LIMIT_BUF_LEN - partlen)) { - return -1; - } - } -diff --git a/src/lxc/json/json_common.c b/src/lxc/json/json_common.c -index ed2fe83..ec20c59 100755 ---- a/src/lxc/json/json_common.c -+++ b/src/lxc/json/json_common.c -@@ -17,7 +17,7 @@ yajl_gen_status reformat_uint(void *ctx, long long unsigned int num) { - int ret; - - ret = snprintf(numstr, MAX_NUM_STR_LEN, "%llu", num); -- if (ret < 0) { -+ if (ret < 0 || ret >= MAX_NUM_STR_LEN) { - return yajl_gen_in_error_state; - } - return reformat_number(ctx, (const char *)numstr, strlen(numstr)); -@@ -28,7 +28,7 @@ yajl_gen_status reformat_int(void *ctx, long long int num) { - int ret; - - ret = snprintf(numstr, MAX_NUM_STR_LEN, "%lld", num); -- if (ret < 0) { -+ if (ret < 0 || ret >= MAX_NUM_STR_LEN) { - return yajl_gen_in_error_state; - } - return reformat_number(ctx, (const char *)numstr, strlen(numstr)); -@@ -400,7 +400,7 @@ yajl_gen_status gen_json_map_int_int(void *ctx, json_map_int_int *map, struct pa - 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) { -+ if (nret < 0 || nret >= MAX_NUM_STR_LEN) { - if (!*err && asprintf(err, "Error to print string") < 0) { - *(err) = safe_strdup("error allocating memory"); - } -@@ -541,7 +541,7 @@ yajl_gen_status gen_json_map_int_bool(void *ctx, json_map_int_bool *map, struct - 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) { -+ if (nret < 0 || nret >= MAX_NUM_STR_LEN) { - if (!*err && asprintf(err, "Error to print string") < 0) { - *(err) = safe_strdup("error allocating memory"); - } -@@ -569,11 +569,6 @@ yajl_gen_status gen_json_map_int_bool(void *ctx, json_map_int_bool *map, struct - - void free_json_map_int_bool(json_map_int_bool *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 bool -- } - free(map->keys); - map->keys = NULL; - free(map->values); -@@ -677,7 +672,7 @@ yajl_gen_status gen_json_map_int_string(void *ctx, json_map_int_string *map, str - 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) { -+ if (nret < 0 || nret >= MAX_NUM_STR_LEN) { - if (!*err && asprintf(err, "Error to print string") < 0) { - *(err) = safe_strdup("error allocating memory"); - } -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 5a72483..9f9cbfc 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -3200,7 +3200,7 @@ static bool container_destroy(struct lxc_container *c, - ERROR("Failed to destroy directory \"%s\" for \"%s\"", path, - c->name); - ret = snprintf(msg, BUFSIZ, "Failed to destroy directory \"%s\": %s", path, errno ? strerror(errno) : "error"); -- if (ret < 0) { -+ if (ret < 0 || ret >= BUFSIZ) { - ERROR("Sprintf failed"); - goto out; - } -@@ -5276,6 +5276,7 @@ static int set_start_extral_configs(struct lxc_container *c) - char fpath[PATH_MAX] = {0}; - parser_error jerr = NULL; - int ret = -1; -+ int nret = 0; - container_start_generate_config *start_conf = NULL; - struct lxc_conf *lconf = c->lxc_conf; - size_t i = 0; -@@ -5288,7 +5289,8 @@ static int set_start_extral_configs(struct lxc_container *c) - } - lconf = c->lxc_conf; - } -- if (snprintf(fpath, PATH_MAX, "%s/%s/%s", c->config_path, c->name, START_GENERATE_CONFIG) < 0) { -+ nret = snprintf(fpath, PATH_MAX, "%s/%s/%s", c->config_path, c->name, START_GENERATE_CONFIG); -+ if (nret < 0 || nret >= PATH_MAX) { - fprintf(stderr, "Sprintf config path failed\n"); - return -1; - } -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index 32c69a4..e81f57e 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -242,13 +242,13 @@ static int lxc_terminal_rename_old_log_file(struct lxc_terminal *terminal) - - for (i = terminal->log_rotate - 1; i > 1; i--) { - ret = snprintf(tmp, PATH_MAX, "%s.%u", terminal->log_path, i); -- if (ret < 0) { -+ if (ret < 0 || ret >= PATH_MAX) { - 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) { -+ if (ret < 0 || ret >= PATH_MAX) { - free(rename_fname); - return -EFBIG; - } -@@ -415,6 +415,7 @@ static bool get_time_buffer(struct timespec *timestamp, char *timebuffer, - int32_t nanos = 0; - time_t seconds; - size_t len = 0; -+ int ret = 0; - - if (!timebuffer || !maxsize) { - return false; -@@ -426,7 +427,8 @@ static bool get_time_buffer(struct timespec *timestamp, char *timebuffer, - - nanos = (int32_t)timestamp->tv_nsec; - len = strlen(timebuffer); -- if (snprintf(timebuffer + len, (maxsize - len), ".%09dZ", nanos) < 0) { -+ ret = snprintf(timebuffer + len, (maxsize - len), ".%09dZ", nanos); -+ if (ret < 0 || ret >= (maxsize - len)) { - return false; - } - -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index c83c7a3..31bcac7 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -2041,7 +2041,7 @@ void lxc_write_error_message(int errfd, const char *format, ...) - va_start(argp, format); - ret = vsnprintf(errbuf, BUFSIZ, format, argp); - va_end(argp); -- if (ret < 0) -+ if (ret < 0 || ret >= BUFSIZ) - SYSERROR("Failed to call vsnprintf"); - sret = write(errfd, errbuf, strlen(errbuf)); - if (sret < 0) --- -1.8.3.1 - diff --git a/0123-in-accordance-with-hook-spec-in-oci.patch b/0123-in-accordance-with-hook-spec-in-oci.patch deleted file mode 100644 index 0bfd9c7..0000000 --- a/0123-in-accordance-with-hook-spec-in-oci.patch +++ /dev/null @@ -1,81 +0,0 @@ -From b6c3d8631ce628d2f71b4c2ff699c0bdeaed97a8 Mon Sep 17 00:00:00 2001 -From: LiuHao -Date: Mon, 25 Nov 2019 21:15:40 +0800 -Subject: [PATCH 123/140] in accordance with hook spec in oci - -Signed-off-by: LiuHao ---- - src/lxc/cgroups/cgfsng.c | 4 ++-- - src/lxc/conf.c | 6 +++--- - src/lxc/start.c | 14 ++++---------- - 3 files changed, 9 insertions(+), 15 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 7c92abe..87b49b0 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -2013,8 +2013,8 @@ __cgfsng_ops static bool cgfsng_attach(struct cgroup_ops *ops, const char *name, - - path = lxc_cmd_get_cgroup_path(name, lxcpath, h->controllers[0]); - /* not running */ -- if (!path) -- continue; -+ if (path == NULL) -+ return false; - - fullpath = build_full_cgpath_from_monitorpath(h, path, "cgroup.procs"); - free(path); -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index 5fd65e7..21ec340 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4937,9 +4937,9 @@ static int do_run_oci_hooks(const char *name, const char *lxcpath, struct lxc_co - case OCI_HOOK_POSTSTOP: - for (i = 0; i < lc->ocihooks->poststop_len; i++) { - work_conf.ocihook = lc->ocihooks->poststop[i]; -- ret = run_ocihook_script_argv(name, "lxc", &work_conf, lxcpath, rootpath); -- if (ret != 0) -- break; -+ 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: -diff --git a/src/lxc/start.c b/src/lxc/start.c -index c1e0d5d..7246283 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1185,14 +1185,11 @@ void lxc_fini(const char *name, struct lxc_handler *handler) - while (namespace_count--) - free(namespaces[namespace_count]); - -- // if we shared pid namespace with others, should kill all processes within container cgroup -- if (handler->conf->ns_share[LXC_NS_PID] != NULL) { -- TRACE("Trying to kill all subprocess"); -- signal_all_processes(handler); -- TRACE("Finished kill all subprocess"); -- } - retry: - if (!cgroup_ops->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++; -@@ -2851,10 +2848,7 @@ int do_lxcapi_clean_resource(char *name, char *lxcpath, struct lxc_conf *conf, p - ret = -1; - goto out; - } -- // if we shared pid namespace with others, should kill all processes within container cgroup -- if (handler->conf->ns_share[LXC_NS_PID] != NULL) { -- signal_all_processes(handler); -- } -+ signal_all_processes(handler); - - 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); --- -1.8.3.1 - diff --git a/0124-lxc-close-maincmd-fd-before-destroy-cgroup.patch b/0124-lxc-close-maincmd-fd-before-destroy-cgroup.patch deleted file mode 100644 index 170e7ef..0000000 --- a/0124-lxc-close-maincmd-fd-before-destroy-cgroup.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 3478e45d5a8f25e0da6581004a6dc309cc47608d Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Wed, 27 Nov 2019 22:33:46 -0500 -Subject: [PATCH 124/140] lxc: close maincmd fd before destroy cgroup - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 6 ++++-- - src/lxc/start.c | 33 ++++++++++++++++++--------------- - 2 files changed, 22 insertions(+), 17 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 87b49b0..c96285e 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -2013,8 +2013,10 @@ __cgfsng_ops static bool cgfsng_attach(struct cgroup_ops *ops, const char *name, - - path = lxc_cmd_get_cgroup_path(name, lxcpath, h->controllers[0]); - /* not running */ -- if (path == NULL) -- return false; -+ if (path == NULL) { -+ ERROR("Failed to attach %d to cgroup of %s", (int)pid, name); -+ return false; -+ } - - fullpath = build_full_cgpath_from_monitorpath(h, path, "cgroup.procs"); - free(path); -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 7246283..63be4e3 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -1185,19 +1185,6 @@ void lxc_fini(const char *name, struct lxc_handler *handler) - while (namespace_count--) - free(namespaces[namespace_count]); - --retry: -- if (!cgroup_ops->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); -- } -- - 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 -@@ -1208,13 +1195,27 @@ retry: - lxc_abstract_unix_close(handler->conf->maincmd_fd); - handler->conf->maincmd_fd = -1; - TRACE("Closed command socket"); -+ } - -+retry: -+ if (!cgroup_ops->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); -+ } -+ -+ 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); - -- - /* isuald: write exit code to exit fifo */ - if (handler->conf->exit_fd >= 0) { - ret = write(handler->conf->exit_fd, &handler->exit_code, sizeof(int)); -@@ -2848,7 +2849,6 @@ int do_lxcapi_clean_resource(char *name, char *lxcpath, struct lxc_conf *conf, p - ret = -1; - goto out; - } -- signal_all_processes(handler); - - 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); -@@ -2857,6 +2857,9 @@ int do_lxcapi_clean_resource(char *name, char *lxcpath, struct lxc_conf *conf, p - - retry: - if (!handler->cgroup_ops->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++; --- -1.8.3.1 - diff --git a/0125-lxc-fix-strcat-bug-in-cleanpath.patch b/0125-lxc-fix-strcat-bug-in-cleanpath.patch deleted file mode 100644 index d28d50f..0000000 --- a/0125-lxc-fix-strcat-bug-in-cleanpath.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 6693cc04916b6f270c3a5e0316700350a18eb4c2 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Fri, 29 Nov 2019 22:16:05 -0500 -Subject: [PATCH 125/140] lxc: fix strcat bug in cleanpath - -Signed-off-by: LiFeng ---- - src/lxc/path.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/lxc/path.c b/src/lxc/path.c -index 7a5dce9..083893e 100644 ---- a/src/lxc/path.c -+++ b/src/lxc/path.c -@@ -200,6 +200,10 @@ char *cleanpath(const char *path, char *realpath, size_t realpath_len) - 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 { --- -1.8.3.1 - diff --git a/0126-add-user-option-for-lxc-attach.patch b/0126-add-user-option-for-lxc-attach.patch deleted file mode 100644 index dedcec8..0000000 --- a/0126-add-user-option-for-lxc-attach.patch +++ /dev/null @@ -1,134 +0,0 @@ -From 60006b967762c1d57ca41981388bf685773e3e17 Mon Sep 17 00:00:00 2001 -From: wujing -Date: Wed, 30 Oct 2019 18:41:02 +0800 -Subject: [PATCH 126/140] add user option for lxc-attach - -Signed-off-by: wujing ---- - src/lxc/tools/lxc_attach.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 75 insertions(+) - -diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c -index 7d51ad7..0d40155 100644 ---- a/src/lxc/tools/lxc_attach.c -+++ b/src/lxc/tools/lxc_attach.c -@@ -62,6 +62,8 @@ static char **extra_env; - static ssize_t extra_env_size; - static char **extra_keep; - static ssize_t extra_keep_size; -+static uid_t custom_uid = (uid_t)-1; -+static gid_t custom_gid = (gid_t)-1; - - static const struct option my_longopts[] = { - {"elevated-privileges", optional_argument, 0, 'e'}, -@@ -75,6 +77,7 @@ static const struct option my_longopts[] = { - {"set-var", required_argument, 0, 'v'}, - {"pty-log", required_argument, 0, 'L'}, - {"rcfile", required_argument, 0, 'f'}, -+ {"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,6 +133,7 @@ Options :\n\ - -f, --rcfile=FILE\n\ - Load configuration file FILE\n\ - --timeout Timeout in seconds (default: 0)\n\ -+ -u, --user User ID (format: UID[:GID])\n\ - ", - .options = my_longopts, - .parser = my_parser, -@@ -141,6 +145,69 @@ Options :\n\ - // isulad: send '128 + signal' if container is killed by signal. - #define ExitSignalOffset 128 - -+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(uid_t *user_id, gid_t *group_id, const char *username) -+{ -+ 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; -+} -+ - static int my_parser(struct lxc_arguments *args, int c, char *arg) - { - int ret; -@@ -198,6 +265,12 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) - case 'f': - args->rcfile = arg; - break; -+ case 'u': -+ if (get_attach_uid_gid(&custom_uid, &custom_gid, arg) != 0) { -+ ERROR("Failed to get attach user U/GID"); -+ return -1; -+ } -+ break; - case OPT_INPUT_FIFO: - args->terminal_fifos[0] = arg; - break; -@@ -488,6 +561,8 @@ int main(int argc, char *argv[]) - attach_options.extra_env_vars = extra_env; - attach_options.extra_keep_env = extra_keep; - attach_options.timeout = my_args.attach_timeout; -+ attach_options.uid = custom_uid; -+ attach_options.gid = custom_gid; - - if (my_args.argc > 0) { - command.program = my_args.argv[0]; --- -1.8.3.1 - diff --git a/0127-log-only-write-size-begin-if-buffer-is-full.patch b/0127-log-only-write-size-begin-if-buffer-is-full.patch deleted file mode 100644 index bf1da30..0000000 --- a/0127-log-only-write-size-begin-if-buffer-is-full.patch +++ /dev/null @@ -1,26 +0,0 @@ -From de46120969e9d164bb2d4926c16414daafa86063 Mon Sep 17 00:00:00 2001 -From: TanYifeng -Date: Tue, 3 Dec 2019 22:43:25 -0500 -Subject: [PATCH 127/140] log: only write (size - begin) if buffer is full - -Signed-off-by: TanYifeng ---- - src/lxc/terminal.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index e81f57e..b547013 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -538,7 +538,7 @@ static int lxc_terminal_write_log_file(struct lxc_terminal *terminal, const char - * noting that it's a partial log line. */ - if (buf == NULL || (begin == 0 && size == __BUF_CACHE_SIZE)) { - if (begin < size) { -- ret = lxc_logger_write(terminal, type, cache + begin, index - begin + 1); -+ ret = lxc_logger_write(terminal, type, cache + begin, size - begin); - if (ret < 0) { - WARN("Failed to log msg"); - } --- -1.8.3.1 - diff --git a/0129-cgfsng-add-retry-for-enter-cgroup.patch b/0129-cgfsng-add-retry-for-enter-cgroup.patch deleted file mode 100644 index e1a6ee6..0000000 --- a/0129-cgfsng-add-retry-for-enter-cgroup.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 3a7ab52bf9def26650df4f47ade319a441a4dca7 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Tue, 10 Dec 2019 05:40:20 -0500 -Subject: [PATCH 129/140] cgfsng: add retry for enter cgroup - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 25 +++++++++++++++++++++++++ - 1 file changed, 25 insertions(+) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index c96285e..50bdc77 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1300,11 +1300,23 @@ __cgfsng_ops static bool cgfsng_payload_enter(struct cgroup_ops *ops, pid_t 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 (errno == ENOENT) { -+ if (retry_count < max_retry) { -+ SYSERROR("Failed to enter cgroup \"%s\" with retry count:%d", fullpath, retry_count); -+ (void)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; -@@ -2201,6 +2213,8 @@ static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename, - struct hierarchy *h; - int ret = 0; - char *controller = NULL; -+ int retry_count = 0; -+ int max_retry = 10; - - len = strlen(filename); - controller = alloca(len + 1); -@@ -2228,8 +2242,19 @@ static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename, - } - - fullpath = must_make_path(h->container_full_path, filename, NULL); -+ -+retry: - ret = lxc_write_to_file(fullpath, value, strlen(value), false, 0666); - if (ret) { -+ if (errno == ENOENT) { -+ if (retry_count < max_retry) { -+ SYSERROR("setting cgroup config for ready process caused \"failed to write %s to %s\".", value, fullpath); -+ (void)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)); --- -1.8.3.1 - diff --git a/0130-fix-snprintf-create-abstract-socket-name-bug.patch b/0130-fix-snprintf-create-abstract-socket-name-bug.patch deleted file mode 100644 index a28e1f5..0000000 --- a/0130-fix-snprintf-create-abstract-socket-name-bug.patch +++ /dev/null @@ -1,26 +0,0 @@ -From c315e6e595e6e5796c148c52ae18b8ba9b053e08 Mon Sep 17 00:00:00 2001 -From: wujing -Date: Tue, 17 Dec 2019 21:24:24 +0800 -Subject: [PATCH 130/140] fix snprintf create abstract socket name bug - -Signed-off-by: wujing ---- - src/lxc/commands_utils.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/lxc/commands_utils.c b/src/lxc/commands_utils.c -index 56ecce7..f48f118 100644 ---- a/src/lxc/commands_utils.c -+++ b/src/lxc/commands_utils.c -@@ -144,7 +144,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 || ret >= len) { -+ if (ret < 0) { - ERROR("Failed to create abstract socket name"); - return -1; - } --- -1.8.3.1 - diff --git a/0131-fix-commands-and-terminal-memory-leak-bug.patch b/0131-fix-commands-and-terminal-memory-leak-bug.patch deleted file mode 100644 index dfcf9f1..0000000 --- a/0131-fix-commands-and-terminal-memory-leak-bug.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 720f6f1c128eaac5c37153cdc30f09e4b18785aa Mon Sep 17 00:00:00 2001 -From: wujing -Date: Wed, 18 Dec 2019 15:44:19 +0800 -Subject: [PATCH 131/140] fix commands and terminal memory leak bug - -Signed-off-by: wujing ---- - src/lxc/commands.c | 5 ++++- - src/lxc/terminal.c | 1 + - 2 files changed, 5 insertions(+), 1 deletion(-) - -diff --git a/src/lxc/commands.c b/src/lxc/commands.c -index 7d6cf6f..b70564f 100644 ---- a/src/lxc/commands.c -+++ b/src/lxc/commands.c -@@ -1083,8 +1083,11 @@ int lxc_cmd_set_terminal_fifos(const char *name, const char *lxcpath, const char - 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) -+ if (ret < 0 || ret >= len) { -+ ERROR("Failed to snprintf in fifo of command"); -+ free(tmp); - return -1; -+ } - - struct lxc_cmd_rr cmd = { - .req = { -diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c -index b547013..bccc23d 100644 ---- a/src/lxc/terminal.c -+++ b/src/lxc/terminal.c -@@ -243,6 +243,7 @@ static int lxc_terminal_rename_old_log_file(struct lxc_terminal *terminal) - 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); --- -1.8.3.1 - diff --git a/0132-lxc-fix-bug-in-cgroup-parent.patch b/0132-lxc-fix-bug-in-cgroup-parent.patch deleted file mode 100644 index 29afe33..0000000 --- a/0132-lxc-fix-bug-in-cgroup-parent.patch +++ /dev/null @@ -1,169 +0,0 @@ -From 293ee3f82a8236de0a3b66c818b957f0a71c30d7 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Wed, 18 Dec 2019 06:00:58 -0500 -Subject: [PATCH 132/140] lxc: fix bug in cgroup-parent - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 78 ++++++++++++++++++++++++++++-------------------- - 1 file changed, 46 insertions(+), 32 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 50bdc77..2f86a66 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -557,45 +557,24 @@ on_error: - return false; - } - --/* Initialize the cpuset hierarchy in first directory of @gname and set -- * cgroup.clone_children so that children inherit settings. Since the -- * h->base_path is populated by init or ourselves, we know it is already -- * initialized. -- */ --static bool cg_legacy_handle_cpuset_hierarchy(struct hierarchy *h, char *cgname) -+static bool build_sub_cpuset_cgroup_dir(char *cgpath) - { - int ret; - char v; -- char *cgpath, *clonechildrenpath, *slash; -- -- if (!string_in_list(h->controllers, "cpuset")) -- return true; -- -- if (*cgname == '/') -- cgname++; -- slash = strchr(cgname, '/'); -- if (slash) -- *slash = '\0'; -- -- cgpath = must_make_path(h->mountpoint, h->container_base_path, cgname, NULL); -- if (slash) -- *slash = '/'; -+ char *clonechildrenpath = NULL; - - ret = mkdir_p(cgpath, 0755); - if (ret < 0) { - if (errno != EEXIST) { - SYSERROR("Failed to create directory \"%s\"", cgpath); -- free(cgpath); - return false; - } - } - -- clonechildrenpath = -- must_make_path(cgpath, "cgroup.clone_children", NULL); -+ clonechildrenpath = must_make_path(cgpath, "cgroup.clone_children", NULL); - /* unified hierarchy doesn't have clone_children */ - if (!file_exists(clonechildrenpath)) { - free(clonechildrenpath); -- free(cgpath); - return true; - } - -@@ -603,7 +582,6 @@ static bool cg_legacy_handle_cpuset_hierarchy(struct hierarchy *h, char *cgname) - if (ret < 0) { - SYSERROR("Failed to read file \"%s\"", clonechildrenpath); - free(clonechildrenpath); -- free(cgpath); - return false; - } - -@@ -611,7 +589,6 @@ static bool cg_legacy_handle_cpuset_hierarchy(struct hierarchy *h, char *cgname) - if (!cg_legacy_filter_and_set_cpus(cgpath, v == '1')) { - SYSERROR("Failed to remove isolated cpus"); - free(clonechildrenpath); -- free(cgpath); - return false; - } - -@@ -619,18 +596,15 @@ static bool cg_legacy_handle_cpuset_hierarchy(struct hierarchy *h, char *cgname) - if (v == '1') { - DEBUG("\"cgroup.clone_children\" was already set to \"1\""); - free(clonechildrenpath); -- free(cgpath); - return true; - } - - /* copy parent's settings */ - if (!copy_parent_file(cgpath, "cpuset.mems")) { - SYSERROR("Failed to copy \"cpuset.mems\" settings"); -- free(cgpath); - free(clonechildrenpath); - return false; - } -- free(cgpath); - - ret = lxc_write_to_file(clonechildrenpath, "1", 1, false, 0666); - if (ret < 0) { -@@ -641,6 +615,48 @@ static bool cg_legacy_handle_cpuset_hierarchy(struct hierarchy *h, char *cgname) - } - free(clonechildrenpath); - return true; -+ -+} -+ -+/* Initialize the cpuset hierarchy in first directory of @gname and set -+ * cgroup.clone_children so that children inherit settings. Since the -+ * h->base_path is populated by init or ourselves, we know it is already -+ * initialized. -+ */ -+static bool 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, '/'); -+ } -+ } else { -+ 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; - } - - /* Given two null-terminated lists of strings, return true if any string is in -@@ -1207,9 +1223,7 @@ static int mkdir_eexist_on_last(const char *dir, mode_t mode) - { - const char *tmp = dir; - const char *orig = dir; -- size_t orig_len; - -- orig_len = strlen(dir); - do { - int ret; - size_t cur_len; -@@ -1226,7 +1240,7 @@ static int mkdir_eexist_on_last(const char *dir, mode_t mode) - - ret = mkdir(makeme, mode); - if (ret < 0) { -- if ((errno != EEXIST) || (orig_len == cur_len)) { -+ if (errno != EEXIST) { - SYSERROR("Failed to create directory \"%s\"", makeme); - free(makeme); - return -1; --- -1.8.3.1 - diff --git a/0133-lxc-fix-bug-in-cgfsng.patch b/0133-lxc-fix-bug-in-cgfsng.patch deleted file mode 100644 index 21810a0..0000000 --- a/0133-lxc-fix-bug-in-cgfsng.patch +++ /dev/null @@ -1,179 +0,0 @@ -From 8b3ba34aad74f1bf204095a479c9d28436de2627 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Wed, 18 Dec 2019 09:01:25 -0500 -Subject: [PATCH 133/140] lxc: fix bug in cgfsng - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 100 +++++++++++++++++++++++------------------------ - 1 file changed, 50 insertions(+), 50 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 2f86a66..5908c31 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -387,14 +387,8 @@ static bool cg_legacy_filter_and_set_cpus(char *path, bool am_initialized) - char *cpulist = NULL, *isolcpus = NULL, *posscpus = NULL; - uint32_t *isolmask = NULL, *possmask = NULL; - bool bret = false, flipped_bit = false; -+ bool need_read_parent = false; - -- lastslash = strrchr(path, '/'); -- if (!lastslash) { -- ERROR("Failed to detect \"/\" in \"%s\"", path); -- return bret; -- } -- oldv = *lastslash; -- *lastslash = '\0'; - fpath = must_make_path(path, "cpuset.cpus", NULL); - posscpus = read_file(fpath); - if (!posscpus) { -@@ -402,6 +396,25 @@ static bool cg_legacy_filter_and_set_cpus(char *path, bool am_initialized) - goto on_error; - } - -+ if (strcmp(posscpus, "\n") == 0) { -+ need_read_parent = true; -+ free(fpath); -+ free(posscpus); -+ lastslash = strrchr(path, '/'); -+ if (!lastslash) { -+ ERROR("Failed to detect \"/\" in \"%s\"", path); -+ return bret; -+ } -+ oldv = *lastslash; -+ *lastslash = '\0'; -+ fpath = must_make_path(path, "cpuset.cpus", NULL); -+ posscpus = read_file(fpath); -+ if (!posscpus) { -+ SYSERROR("Failed to read file \"%s\"", fpath); -+ goto on_error; -+ } -+ } -+ - /* Get maximum number of cpus found in possible cpuset. */ - maxposs = get_max_cpus(posscpus); - if (maxposs < 0 || maxposs >= INT_MAX - 1) -@@ -489,7 +502,9 @@ static bool cg_legacy_filter_and_set_cpus(char *path, bool am_initialized) - } - - copy_parent: -- *lastslash = oldv; -+ if (need_read_parent) { -+ *lastslash = oldv; -+ } - free(fpath); - fpath = must_make_path(path, "cpuset.cpus", NULL); - ret = lxc_write_to_file(fpath, cpulist, strlen(cpulist), false, 0666); -@@ -522,6 +537,25 @@ static bool copy_parent_file(char *path, char *file) - char *fpath, *lastslash, oldv; - int len = 0; - char *value = NULL; -+ char *current = NULL; -+ -+ 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) { -@@ -560,8 +594,6 @@ on_error: - static bool build_sub_cpuset_cgroup_dir(char *cgpath) - { - int ret; -- char v; -- char *clonechildrenpath = NULL; - - ret = mkdir_p(cgpath, 0755); - if (ret < 0) { -@@ -571,51 +603,19 @@ static bool build_sub_cpuset_cgroup_dir(char *cgpath) - } - } - -- clonechildrenpath = must_make_path(cgpath, "cgroup.clone_children", NULL); -- /* unified hierarchy doesn't have clone_children */ -- if (!file_exists(clonechildrenpath)) { -- free(clonechildrenpath); -- return true; -- } -- -- ret = lxc_read_from_file(clonechildrenpath, &v, 1); -- if (ret < 0) { -- SYSERROR("Failed to read file \"%s\"", clonechildrenpath); -- free(clonechildrenpath); -- return false; -- } -- - /* Make sure any isolated cpus are removed from cpuset.cpus. */ -- if (!cg_legacy_filter_and_set_cpus(cgpath, v == '1')) { -+ if (!cg_legacy_filter_and_set_cpus(cgpath, false)) { - SYSERROR("Failed to remove isolated cpus"); -- free(clonechildrenpath); - return false; - } - -- /* Already set for us by someone else. */ -- if (v == '1') { -- DEBUG("\"cgroup.clone_children\" was already set to \"1\""); -- free(clonechildrenpath); -- return true; -- } -- - /* copy parent's settings */ - if (!copy_parent_file(cgpath, "cpuset.mems")) { - SYSERROR("Failed to copy \"cpuset.mems\" settings"); -- free(clonechildrenpath); - return false; - } - -- ret = lxc_write_to_file(clonechildrenpath, "1", 1, false, 0666); -- if (ret < 0) { -- /* Set clone_children so children inherit our settings */ -- SYSERROR("Failed to write 1 to \"%s\"", clonechildrenpath); -- free(clonechildrenpath); -- return false; -- } -- free(clonechildrenpath); - return true; -- - } - - /* Initialize the cpuset hierarchy in first directory of @gname and set -@@ -647,13 +647,13 @@ static bool cg_legacy_handle_cpuset_hierarchy(struct hierarchy *h, char *cgname) - } - slash = strchr(slash + 1, '/'); - } -- } else { -- 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; -- } -+ } -+ -+ 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; --- -1.8.3.1 - diff --git a/0134-lxc-do-cpuset-same-as-runc.patch b/0134-lxc-do-cpuset-same-as-runc.patch deleted file mode 100644 index f68e923..0000000 --- a/0134-lxc-do-cpuset-same-as-runc.patch +++ /dev/null @@ -1,319 +0,0 @@ -From 646b70518ca8f512372996888f3c8b47577b59d5 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Wed, 18 Dec 2019 22:37:08 -0500 -Subject: [PATCH 134/140] lxc: do cpuset same as runc - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 288 +---------------------------------------------- - 1 file changed, 3 insertions(+), 285 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 5908c31..79fc5d3 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -248,288 +248,6 @@ static char *read_file(const char *fnam) - return buf; - } - --/* Taken over modified from the kernel sources. */ --#define NBITS 32 /* bits in uint32_t */ --#define DIV_ROUND_UP(n, d) (((n) + (d)-1) / (d)) --#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, NBITS) -- --static void set_bit(unsigned bit, uint32_t *bitarr) --{ -- bitarr[bit / NBITS] |= (1 << (bit % NBITS)); --} -- --static void clear_bit(unsigned bit, uint32_t *bitarr) --{ -- bitarr[bit / NBITS] &= ~(1 << (bit % NBITS)); --} -- --static bool is_set(unsigned bit, uint32_t *bitarr) --{ -- return (bitarr[bit / NBITS] & (1 << (bit % NBITS))) != 0; --} -- --/* Create cpumask from cpulist aka turn: -- * -- * 0,2-3 -- * -- * into bit array -- * -- * 1 0 1 1 -- */ --static uint32_t *lxc_cpumask(char *buf, size_t nbits) --{ -- char *token; -- size_t arrlen; -- uint32_t *bitarr; -- -- arrlen = BITS_TO_LONGS(nbits); -- bitarr = calloc(arrlen, sizeof(uint32_t)); -- if (!bitarr) -- return NULL; -- -- lxc_iterate_parts(token, buf, ",") { -- errno = 0; -- unsigned end, start; -- char *range; -- -- start = strtoul(token, NULL, 0); -- end = start; -- range = strchr(token, '-'); -- if (range) -- end = strtoul(range + 1, NULL, 0); -- -- if (!(start <= end)) { -- free(bitarr); -- return NULL; -- } -- -- if (end >= nbits) { -- free(bitarr); -- return NULL; -- } -- -- while (start <= end) -- set_bit(start++, bitarr); -- } -- -- return bitarr; --} -- --/* Turn cpumask into simple, comma-separated cpulist. */ --static char *lxc_cpumask_to_cpulist(uint32_t *bitarr, size_t nbits) --{ -- int ret; -- size_t i; -- char **cpulist = NULL; -- char numstr[INTTYPE_TO_STRLEN(size_t)] = {0}; -- -- for (i = 0; i <= nbits; i++) { -- if (!is_set(i, bitarr)) -- continue; -- -- ret = snprintf(numstr, sizeof(numstr), "%zu", i); -- if (ret < 0 || (size_t)ret >= sizeof(numstr)) { -- lxc_free_array((void **)cpulist, free); -- return NULL; -- } -- -- ret = lxc_append_string(&cpulist, numstr); -- if (ret < 0) { -- lxc_free_array((void **)cpulist, free); -- return NULL; -- } -- } -- -- if (!cpulist) -- return NULL; -- -- return lxc_string_join(",", (const char **)cpulist, false); --} -- --static ssize_t get_max_cpus(char *cpulist) --{ -- char *c1, *c2; -- char *maxcpus = cpulist; -- size_t cpus = 0; -- -- c1 = strrchr(maxcpus, ','); -- if (c1) -- c1++; -- -- c2 = strrchr(maxcpus, '-'); -- if (c2) -- c2++; -- -- if (!c1 && !c2) -- c1 = maxcpus; -- else if (c1 > c2) -- c2 = c1; -- else if (c1 < c2) -- c1 = c2; -- else if (!c1 && c2) -- c1 = c2; -- -- errno = 0; -- cpus = strtoul(c1, NULL, 0); -- if (errno != 0) -- return -1; -- -- return cpus; --} -- --#define __ISOL_CPUS "/sys/devices/system/cpu/isolated" --static bool cg_legacy_filter_and_set_cpus(char *path, bool am_initialized) --{ -- int ret; -- ssize_t i; -- char *lastslash, *fpath, oldv; -- ssize_t maxisol = 0, maxposs = 0; -- char *cpulist = NULL, *isolcpus = NULL, *posscpus = NULL; -- uint32_t *isolmask = NULL, *possmask = NULL; -- bool bret = false, flipped_bit = false; -- bool need_read_parent = false; -- -- fpath = must_make_path(path, "cpuset.cpus", NULL); -- posscpus = read_file(fpath); -- if (!posscpus) { -- SYSERROR("Failed to read file \"%s\"", fpath); -- goto on_error; -- } -- -- if (strcmp(posscpus, "\n") == 0) { -- need_read_parent = true; -- free(fpath); -- free(posscpus); -- lastslash = strrchr(path, '/'); -- if (!lastslash) { -- ERROR("Failed to detect \"/\" in \"%s\"", path); -- return bret; -- } -- oldv = *lastslash; -- *lastslash = '\0'; -- fpath = must_make_path(path, "cpuset.cpus", NULL); -- posscpus = read_file(fpath); -- if (!posscpus) { -- SYSERROR("Failed to read file \"%s\"", fpath); -- goto on_error; -- } -- } -- -- /* Get maximum number of cpus found in possible cpuset. */ -- maxposs = get_max_cpus(posscpus); -- if (maxposs < 0 || maxposs >= INT_MAX - 1) -- goto on_error; -- -- if (!file_exists(__ISOL_CPUS)) { -- /* This system doesn't expose isolated cpus. */ -- DEBUG("The path \""__ISOL_CPUS"\" to read isolated cpus from does not exist"); -- cpulist = posscpus; -- /* No isolated cpus but we weren't already initialized by -- * someone. We should simply copy the parents cpuset.cpus -- * values. -- */ -- if (!am_initialized) { -- DEBUG("Copying cpu settings of parent cgroup"); -- goto copy_parent; -- } -- /* No isolated cpus but we were already initialized by someone. -- * Nothing more to do for us. -- */ -- goto on_success; -- } -- -- isolcpus = read_file(__ISOL_CPUS); -- if (!isolcpus) { -- SYSERROR("Failed to read file \""__ISOL_CPUS"\""); -- goto on_error; -- } -- if (!isdigit(isolcpus[0])) { -- TRACE("No isolated cpus detected"); -- cpulist = posscpus; -- /* No isolated cpus but we weren't already initialized by -- * someone. We should simply copy the parents cpuset.cpus -- * values. -- */ -- if (!am_initialized) { -- DEBUG("Copying cpu settings of parent cgroup"); -- goto copy_parent; -- } -- /* No isolated cpus but we were already initialized by someone. -- * Nothing more to do for us. -- */ -- goto on_success; -- } -- -- /* Get maximum number of cpus found in isolated cpuset. */ -- maxisol = get_max_cpus(isolcpus); -- if (maxisol < 0 || maxisol >= INT_MAX - 1) -- goto on_error; -- -- if (maxposs < maxisol) -- maxposs = maxisol; -- maxposs++; -- -- possmask = lxc_cpumask(posscpus, maxposs); -- if (!possmask) { -- ERROR("Failed to create cpumask for possible cpus"); -- goto on_error; -- } -- -- isolmask = lxc_cpumask(isolcpus, maxposs); -- if (!isolmask) { -- ERROR("Failed to create cpumask for isolated cpus"); -- goto on_error; -- } -- -- for (i = 0; i <= maxposs; i++) { -- if (!is_set(i, isolmask) || !is_set(i, possmask)) -- continue; -- -- flipped_bit = true; -- clear_bit(i, possmask); -- } -- -- if (!flipped_bit) { -- DEBUG("No isolated cpus present in cpuset"); -- goto on_success; -- } -- DEBUG("Removed isolated cpus from cpuset"); -- -- cpulist = lxc_cpumask_to_cpulist(possmask, maxposs); -- if (!cpulist) { -- ERROR("Failed to create cpu list"); -- goto on_error; -- } -- --copy_parent: -- if (need_read_parent) { -- *lastslash = oldv; -- } -- free(fpath); -- fpath = must_make_path(path, "cpuset.cpus", NULL); -- ret = lxc_write_to_file(fpath, cpulist, strlen(cpulist), false, 0666); -- if (ret < 0) { -- SYSERROR("Failed to write cpu list to \"%s\"", fpath); -- goto on_error; -- } -- --on_success: -- bret = true; -- --on_error: -- free(fpath); -- -- free(isolcpus); -- free(isolmask); -- -- if (posscpus != cpulist) -- free(posscpus); -- free(possmask); -- -- free(cpulist); -- return bret; --} -- - /* Copy contents of parent(@path)/@file to @path/@file */ - static bool copy_parent_file(char *path, char *file) - { -@@ -603,9 +321,9 @@ static bool build_sub_cpuset_cgroup_dir(char *cgpath) - } - } - -- /* Make sure any isolated cpus are removed from cpuset.cpus. */ -- if (!cg_legacy_filter_and_set_cpus(cgpath, false)) { -- SYSERROR("Failed to remove isolated cpus"); -+ /* copy parent's settings */ -+ if (!copy_parent_file(cgpath, "cpuset.cpus")) { -+ SYSERROR("Failed to copy \"cpuset.cpus\" settings"); - return false; - } - --- -1.8.3.1 - diff --git a/0135-lxc-fix-code-warnings-for-cgfsng.c.patch b/0135-lxc-fix-code-warnings-for-cgfsng.c.patch deleted file mode 100644 index 8c00226..0000000 --- a/0135-lxc-fix-code-warnings-for-cgfsng.c.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 5d7175b7d6ac7340c779c0102955f2099fc7b7e9 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 23 Dec 2019 03:20:14 -0500 -Subject: [PATCH 135/140] lxc: fix code warnings for cgfsng.c - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 79fc5d3..9f0bb69 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -252,10 +252,12 @@ static char *read_file(const char *fnam) - static bool copy_parent_file(char *path, char *file) - { - int ret; -- char *fpath, *lastslash, oldv; - 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); -@@ -276,13 +278,14 @@ static bool copy_parent_file(char *path, char *file) - free(current); - - lastslash = strrchr(path, '/'); -- if (!lastslash) { -+ 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; -@@ -293,7 +296,6 @@ static bool copy_parent_file(char *path, char *file) - goto on_error; - free(fpath); - -- *lastslash = oldv; - fpath = must_make_path(path, file, NULL); - ret = lxc_write_to_file(fpath, value, len, false, 0666); - if (ret < 0) --- -1.8.3.1 - diff --git a/0136-lxc-fix-retry-bug-in-cgroup.patch b/0136-lxc-fix-retry-bug-in-cgroup.patch deleted file mode 100644 index 22c9d1c..0000000 --- a/0136-lxc-fix-retry-bug-in-cgroup.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 8f8184392cd877ae05e6f02529135b1900424812 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Sat, 28 Dec 2019 20:12:57 -0500 -Subject: [PATCH 136/140] lxc: fix retry bug in cgroup - -Signed-off-by: LiFeng ---- - src/lxc/cgroups/cgfsng.c | 34 +++++++++++++++++----------------- - 1 file changed, 17 insertions(+), 17 deletions(-) - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index 9f0bb69..ed08f10 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1025,6 +1025,7 @@ __cgfsng_ops static bool cgfsng_payload_create(struct cgroup_ops *ops, - __cgfsng_ops static bool cgfsng_payload_enter(struct cgroup_ops *ops, pid_t pid) - { - int len; -+ char *container_cgroup = ops->container_cgroup; - char pidstr[INTTYPE_TO_STRLEN(pid_t)]; - - len = snprintf(pidstr, sizeof(pidstr), "%d", pid); -@@ -1042,14 +1043,13 @@ __cgfsng_ops static bool cgfsng_payload_enter(struct cgroup_ops *ops, pid_t pid) - retry: - ret = lxc_write_to_file(fullpath, pidstr, len, false, 0666); - if (ret != 0) { -- if (errno == ENOENT) { -- if (retry_count < max_retry) { -- SYSERROR("Failed to enter cgroup \"%s\" with retry count:%d", fullpath, retry_count); -- (void)mkdir_eexist_on_last(ops->hierarchies[i]->container_full_path, 0755); -- usleep(100 * 1000); /* 100 millisecond */ -- retry_count++; -- goto retry; -- } -+ if (retry_count < max_retry) { -+ SYSERROR("Failed to enter cgroup \"%s\" with retry count:%d", fullpath, retry_count); -+ (void)cg_legacy_handle_cpuset_hierarchy(ops->hierarchies[i], container_cgroup); -+ (void)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); -@@ -1949,6 +1949,7 @@ static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename, - char *controller = NULL; - int retry_count = 0; - int max_retry = 10; -+ char *container_cgroup = ops->container_cgroup; - - len = strlen(filename); - controller = alloca(len + 1); -@@ -1979,15 +1980,14 @@ static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename, - - retry: - ret = lxc_write_to_file(fullpath, value, strlen(value), false, 0666); -- if (ret) { -- if (errno == ENOENT) { -- if (retry_count < max_retry) { -- SYSERROR("setting cgroup config for ready process caused \"failed to write %s to %s\".", value, fullpath); -- (void)mkdir_eexist_on_last(h->container_full_path, 0755); -- usleep(100 * 1000); /* 100 millisecond */ -- retry_count++; -- goto retry; -- } -+ 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)cg_legacy_handle_cpuset_hierarchy(h, container_cgroup); -+ (void)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\".", --- -1.8.3.1 - diff --git a/0137-lxc-fix-bug-in-read-proc.patch b/0137-lxc-fix-bug-in-read-proc.patch deleted file mode 100644 index 5f23daf..0000000 --- a/0137-lxc-fix-bug-in-read-proc.patch +++ /dev/null @@ -1,43 +0,0 @@ -From e80ccf614ff53e8fa6afe894bd167873b410adc4 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Mon, 30 Dec 2019 04:50:28 -0500 -Subject: [PATCH 137/140] lxc: fix bug in read proc - -Signed-off-by: LiFeng ---- - src/lxc/start.c | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index 63be4e3..c9bae65 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -998,7 +998,7 @@ static int _recursive_read_cgroup_procs(const char *dirpath, pid_t **pids, size_ - char pathname[PATH_MAX]; - - dir = opendir(dirpath); -- if (!dir && errno != ENOENT) { -+ if (dir == NULL) { - WARN("Failed to open \"%s\"", dirpath); - return 0; - } -@@ -1049,15 +1049,13 @@ static int _recursive_read_cgroup_procs(const char *dirpath, pid_t **pids, size_ - int get_all_pids(struct cgroup_ops *cg_ops, pid_t **pids, size_t *len) - { - const char *devices_path = NULL; -- int ret; - - devices_path = cg_ops->get_cgroup(cg_ops, "devices", false); - if (!file_exists(devices_path)) { - return 0; - } - -- ret = _recursive_read_cgroup_procs(devices_path, pids, len); -- return ret; -+ return _recursive_read_cgroup_procs(devices_path, pids, len); - } - - static int set_cgroup_freezer(struct cgroup_ops *cg_ops, const char *value) --- -1.8.3.1 - diff --git a/0139-lxc-fix-get-cgroup-path-by-config-instead-of-cmd.patch b/0139-lxc-fix-get-cgroup-path-by-config-instead-of-cmd.patch deleted file mode 100644 index f90d66e..0000000 --- a/0139-lxc-fix-get-cgroup-path-by-config-instead-of-cmd.patch +++ /dev/null @@ -1,318 +0,0 @@ -From ee58496252e6b6874cbd09191fc8bec5216c95be Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Wed, 15 Jan 2020 03:55:27 -0500 -Subject: [PATCH 139/140] lxc: fix get cgroup path by config instead of cmd - -Signed-off-by: LiFeng ---- - src/lxc/attach.c | 2 +- - src/lxc/cgroups/cgfsng.c | 26 +++++++++++++------------- - src/lxc/cgroups/cgroup.c | 6 +++--- - src/lxc/cgroups/cgroup.h | 4 ++-- - src/lxc/criu.c | 4 ++-- - src/lxc/freezer.c | 12 ++++++------ - src/lxc/lxc.h | 4 ++-- - src/lxc/lxccontainer.c | 8 ++++---- - src/lxc/start.c | 6 +++--- - src/tests/cgpath.c | 2 +- - 10 files changed, 37 insertions(+), 37 deletions(-) - -diff --git a/src/lxc/attach.c b/src/lxc/attach.c -index 03a7646..2061b96 100644 ---- a/src/lxc/attach.c -+++ b/src/lxc/attach.c -@@ -1477,7 +1477,7 @@ int lxc_attach(const char *name, const char *lxcpath, const char *suffix, - if (options->attach_flags & LXC_ATTACH_MOVE_TO_CGROUP) { - struct cgroup_ops *cgroup_ops; - -- cgroup_ops = cgroup_init(NULL); -+ cgroup_ops = cgroup_init(conf); - if (!cgroup_ops) - goto on_error; - -diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c -index ed08f10..ae15449 100644 ---- a/src/lxc/cgroups/cgfsng.c -+++ b/src/lxc/cgroups/cgfsng.c -@@ -1799,10 +1799,12 @@ __cgfsng_ops static int cgfsng_get(struct cgroup_ops *ops, const char *filename, - if (p) - *p = '\0'; - -- path = lxc_cmd_get_cgroup_path(name, lxcpath, controller); -- /* not running */ -- if (!path) -+ const char *ori_path = ops->get_cgroup(ops, controller, true); -+ 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) { -@@ -1838,10 +1840,12 @@ __cgfsng_ops static int cgfsng_set(struct cgroup_ops *ops, - if (p) - *p = '\0'; - -- path = lxc_cmd_get_cgroup_path(name, lxcpath, controller); -- /* not running */ -- if (!path) -+ const char *ori_path = ops->get_cgroup(ops, controller, true); -+ 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) { -@@ -2484,17 +2488,13 @@ static bool cg_init(struct cgroup_ops *ops) - return cg_hybrid_init(ops); - } - --__cgfsng_ops static bool cgfsng_data_init(struct cgroup_ops *ops, struct lxc_handler *handler) -+__cgfsng_ops static bool cgfsng_data_init(struct cgroup_ops *ops, struct lxc_conf *conf) - { - const char *cgroup_pattern = NULL; - char *container_cgroup = NULL; - char *tmp = NULL; -- struct lxc_conf *conf = NULL; - size_t len; - -- if (handler) -- conf = handler->conf; -- - /* copy system-wide cgroup information */ - cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern"); - if (!cgroup_pattern) { -@@ -2508,10 +2508,10 @@ __cgfsng_ops static bool cgfsng_data_init(struct cgroup_ops *ops, struct lxc_han - if (conf) { - if (conf->cgroup_meta.dir) - tmp = lxc_string_join("/", (const char *[]) { -- conf->cgroup_meta.dir, handler->name, NULL -+ conf->cgroup_meta.dir, conf->name, NULL - }, false); - else -- tmp = lxc_string_replace("%n", handler->name, ops->cgroup_pattern); -+ tmp = lxc_string_replace("%n", conf->name, ops->cgroup_pattern); - if (!tmp) { - ERROR("Failed expanding cgroup name pattern"); - return false; -diff --git a/src/lxc/cgroups/cgroup.c b/src/lxc/cgroups/cgroup.c -index 8d559be..bca00d5 100644 ---- a/src/lxc/cgroups/cgroup.c -+++ b/src/lxc/cgroups/cgroup.c -@@ -40,17 +40,17 @@ lxc_log_define(cgroup, lxc); - - extern struct cgroup_ops *cgfsng_ops_init(int errfd); - --struct cgroup_ops *cgroup_init(struct lxc_handler *handler) -+struct cgroup_ops *cgroup_init(struct lxc_conf *conf) - { - struct cgroup_ops *cgroup_ops; - -- cgroup_ops = cgfsng_ops_init(handler ? handler->conf->errpipe[1] : -1); -+ cgroup_ops = cgfsng_ops_init(conf ? conf->errpipe[1] : -1); - if (!cgroup_ops) { - ERROR("Failed to initialize cgroup driver"); - return NULL; - } - -- if (!cgroup_ops->data_init(cgroup_ops, handler)) -+ if (!cgroup_ops->data_init(cgroup_ops, conf)) - return NULL; - - TRACE("Initialized cgroup driver %s", cgroup_ops->driver); -diff --git a/src/lxc/cgroups/cgroup.h b/src/lxc/cgroups/cgroup.h -index edbb1e3..935b4d3 100644 ---- a/src/lxc/cgroups/cgroup.h -+++ b/src/lxc/cgroups/cgroup.h -@@ -125,7 +125,7 @@ struct cgroup_ops { - */ - cgroup_layout_t cgroup_layout; - -- bool (*data_init)(struct cgroup_ops *ops, struct lxc_handler *handler); -+ bool (*data_init)(struct cgroup_ops *ops, struct lxc_conf *conf); - bool (*destroy)(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, pid_t pid); -@@ -148,7 +148,7 @@ struct cgroup_ops { - int (*nrtasks)(struct cgroup_ops *ops); - }; - --extern struct cgroup_ops *cgroup_init(struct lxc_handler *handler); -+extern struct cgroup_ops *cgroup_init(struct lxc_conf *conf); - extern void cgroup_exit(struct cgroup_ops *ops); - - extern void prune_init_scope(char *cg); -diff --git a/src/lxc/criu.c b/src/lxc/criu.c -index 5c77979..700a3e4 100644 ---- a/src/lxc/criu.c -+++ b/src/lxc/criu.c -@@ -970,7 +970,7 @@ static void do_restore(struct lxc_container *c, int status_pipe, struct migrate_ - if (lxc_init(c->name, handler) < 0) - goto out; - -- cgroup_ops = cgroup_init(NULL); -+ cgroup_ops = cgroup_init(c->lxc_conf); - if (!cgroup_ops) - goto out_fini_handler; - handler->cgroup_ops = cgroup_ops; -@@ -1270,7 +1270,7 @@ static bool do_dump(struct lxc_container *c, char *mode, struct migrate_opts *op - - close(criuout[0]); - -- cgroup_ops = cgroup_init(NULL); -+ cgroup_ops = cgroup_init(c->lxc_conf); - if (!cgroup_ops) { - ERROR("failed to cgroup_init()"); - _exit(EXIT_FAILURE); -diff --git a/src/lxc/freezer.c b/src/lxc/freezer.c -index fc3622a..d5fad75 100644 ---- a/src/lxc/freezer.c -+++ b/src/lxc/freezer.c -@@ -45,7 +45,7 @@ - - lxc_log_define(freezer, lxc); - --static int do_freeze_thaw(bool freeze, const char *name, const char *lxcpath) -+static int do_freeze_thaw(bool freeze, struct lxc_conf *conf, const char *name, const char *lxcpath) - { - int ret; - char v[100]; -@@ -54,7 +54,7 @@ static int do_freeze_thaw(bool freeze, const char *name, const char *lxcpath) - size_t state_len = 6; - lxc_state_t new_state = freeze ? FROZEN : THAWED; - -- cgroup_ops = cgroup_init(NULL); -+ cgroup_ops = cgroup_init(conf); - if (!cgroup_ops) - return -1; - -@@ -88,14 +88,14 @@ static int do_freeze_thaw(bool freeze, const char *name, const char *lxcpath) - } - } - --int lxc_freeze(const char *name, const char *lxcpath) -+int lxc_freeze(struct lxc_conf *conf, const char *name, const char *lxcpath) - { - lxc_cmd_serve_state_clients(name, lxcpath, FREEZING); - lxc_monitor_send_state(name, FREEZING, lxcpath); -- return do_freeze_thaw(true, name, lxcpath); -+ return do_freeze_thaw(true, conf, name, lxcpath); - } - --int lxc_unfreeze(const char *name, const char *lxcpath) -+int lxc_unfreeze(struct lxc_conf *conf, const char *name, const char *lxcpath) - { -- return do_freeze_thaw(false, name, lxcpath); -+ return do_freeze_thaw(false, conf, name, lxcpath); - } -diff --git a/src/lxc/lxc.h b/src/lxc/lxc.h -index 5df5080..bd0d373 100644 ---- a/src/lxc/lxc.h -+++ b/src/lxc/lxc.h -@@ -82,14 +82,14 @@ extern int lxc_monitor_close(int fd); - * @name : the container name - * Returns 0 on success, < 0 otherwise - */ --extern int lxc_freeze(const char *name, const char *lxcpath); -+extern int lxc_freeze(struct lxc_conf *conf, const char *name, const char *lxcpath); - - /* - * Unfreeze all previously frozen tasks. - * @name : the name of the container - * Return 0 on success, < 0 otherwise - */ --extern int lxc_unfreeze(const char *name, const char *lxcpath); -+extern int lxc_unfreeze(struct lxc_conf *conf, const char *name, const char *lxcpath); - - /* - * Retrieve the container state -diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c -index 7ef57f0..e5a82f3 100644 ---- a/src/lxc/lxccontainer.c -+++ b/src/lxc/lxccontainer.c -@@ -516,7 +516,7 @@ static bool do_lxcapi_freeze(struct lxc_container *c) - if (!c) - return false; - -- ret = lxc_freeze(c->name, c->config_path); -+ ret = lxc_freeze(c->lxc_conf, c->name, c->config_path); - if (ret < 0) - return false; - -@@ -532,7 +532,7 @@ static bool do_lxcapi_unfreeze(struct lxc_container *c) - if (!c) - return false; - -- ret = lxc_unfreeze(c->name, c->config_path); -+ ret = lxc_unfreeze(c->lxc_conf, c->name, c->config_path); - if (ret < 0) - return false; - -@@ -3455,7 +3455,7 @@ static bool do_lxcapi_set_cgroup_item(struct lxc_container *c, const char *subsy - if (is_stopped(c)) - return false; - -- cgroup_ops = cgroup_init(NULL); -+ cgroup_ops = cgroup_init(c->lxc_conf); - if (!cgroup_ops) - return false; - -@@ -3479,7 +3479,7 @@ static int do_lxcapi_get_cgroup_item(struct lxc_container *c, const char *subsys - if (is_stopped(c)) - return -1; - -- cgroup_ops = cgroup_init(NULL); -+ cgroup_ops = cgroup_init(c->lxc_conf); - if (!cgroup_ops) - return -1; - -diff --git a/src/lxc/start.c b/src/lxc/start.c -index c9bae65..0af2e92 100644 ---- a/src/lxc/start.c -+++ b/src/lxc/start.c -@@ -919,7 +919,7 @@ int lxc_init(const char *name, struct lxc_handler *handler) - } - TRACE("Chowned console"); - -- handler->cgroup_ops = cgroup_init(handler); -+ handler->cgroup_ops = cgroup_init(conf); - if (!handler->cgroup_ops) { - ERROR("Failed to initialize cgroup driver"); - goto out_delete_terminal; -@@ -2680,7 +2680,7 @@ static struct lxc_handler *lxc_init_clean_handler(char *name, char *lxcpath, str - handler->name = name; - handler->exit_code = -1; /* isulad: record exit code of container */ - -- handler->cgroup_ops = cgroup_init(handler); -+ handler->cgroup_ops = cgroup_init(conf); - if (!handler->cgroup_ops) { - ERROR("Failed to initialize cgroup driver"); - goto on_error; -@@ -2729,7 +2729,7 @@ static struct lxc_handler *lxc_init_pids_handler(char *name, char *lxcpath, stru - handler->name = name; - handler->exit_code = -1; /* isulad: record exit code of container */ - -- handler->cgroup_ops = cgroup_init(handler); -+ handler->cgroup_ops = cgroup_init(conf); - if (!handler->cgroup_ops) { - ERROR("Failed to initialize cgroup driver"); - goto on_error; -diff --git a/src/tests/cgpath.c b/src/tests/cgpath.c -index fa8d476..8f4c19f 100644 ---- a/src/tests/cgpath.c -+++ b/src/tests/cgpath.c -@@ -80,7 +80,7 @@ static int test_running_container(const char *lxcpath, - goto err3; - } - -- cgroup_ops = cgroup_init(NULL); -+ cgroup_ops = cgroup_init(c->lxc_conf); - if (!cgroup_ops) - goto err3; - --- -1.8.3.1 - diff --git a/0140-lxc-remove-umask-when-populate-devices.patch b/0140-lxc-remove-umask-when-populate-devices.patch deleted file mode 100644 index 6d3efdc..0000000 --- a/0140-lxc-remove-umask-when-populate-devices.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 22613294ae751f47409cfac03a7fd28cf9222031 Mon Sep 17 00:00:00 2001 -From: LiFeng -Date: Fri, 28 Feb 2020 22:59:05 -0500 -Subject: [PATCH 140/140] lxc: remove umask when populate devices - -Signed-off-by: LiFeng ---- - src/lxc/conf.c | 38 ++++++++++++++++++++++++++------------ - 1 file changed, 26 insertions(+), 12 deletions(-) - -diff --git a/src/lxc/conf.c b/src/lxc/conf.c -index b66e7bc..65b33ea 100644 ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -4008,23 +4008,28 @@ static int setup_populate_devs(const struct lxc_rootfs *rootfs, struct lxc_list - 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) { - dev_elem = it->elem; - - ret = snprintf(path, MAXPATHLEN, "%s/%s", rootfs->path ? rootfs->mount : "", dev_elem->name); -- if (ret < 0 || ret >= MAXPATHLEN) -- return -1; -+ 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, 0750); -+ ret = mkdir_p(pathdirname, 0755); - free(pathdirname); - if (ret < 0) { - WARN("Failed to create target directory"); -- return -1; -+ ret = -1; -+ goto reset_umask; - } - - if (!strcmp(dev_elem->type, "c")) { -@@ -4033,7 +4038,8 @@ static int setup_populate_devs(const struct lxc_rootfs *rootfs, struct lxc_list - file_mode = dev_elem->file_mode | S_IFBLK; - } else { - ERROR("Failed to parse devices type '%s'", dev_elem->type); -- return -1; -+ ret = -1; -+ goto reset_umask; - } - - DEBUG("Try to mknod '%s':'%d':'%d':'%d'\n", path, -@@ -4045,34 +4051,42 @@ static int setup_populate_devs(const struct lxc_rootfs *rootfs, struct lxc_list - file_mode, dev_elem->maj, dev_elem->min); - - char hostpath[MAXPATHLEN]; -- FILE *pathfile; -+ 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) -- return -1; -+ 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); -- return -1; -+ 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); -- return -1; -+ ret = -1; -+ goto reset_umask; - } - } - if (chown(path, dev_elem->uid, dev_elem->gid) < 0) { - ERROR("Error chowning %s", path); -- return -1; -+ ret = -1; -+ goto reset_umask; - } - } - -+reset_umask: -+ (void)umask(cur_mask); -+ - INFO("Populated devices into container /dev"); -- return 0; -+ return ret; - } - - // isulad: setup rootfs mountopts --- -1.8.3.1 - diff --git a/apply-patches b/apply-patches index 074071d..bae161f 100755 --- a/apply-patches +++ b/apply-patches @@ -16,9 +16,9 @@ set -ex -pkg=lxc-3.0.3 +pkg=lxc-4.0.1 cwd=$PWD -src=$cwd/lxc-3.0.3 +src=$cwd/lxc-4.0.1 tar -xzvf $pkg.tar.gz diff --git a/lxc-3.0.3.tar.gz b/lxc-3.0.3.tar.gz deleted file mode 100644 index 46ba17b1315fe4ca36638e8246030bb858396114..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1263371 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

cf0y=O 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

nV8XinE=;eK(%P(iMFFZ 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%0AKqJE(3qz3mF5tUsLFJ5-^_@1Lx4s7aYb* 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%0Ds+7Oo6N6Igh{j1kp96 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 z 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⪙^k%jOEx@k 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

T@E|k?LmRfEeb#h8};Mg+OO5A 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

E$!3qJ$AdU9t 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

@>$=@;?mvSU_1yp91(~+U z!4dC+c4u&oUXJU>UYUu>!Y#j*v+Uczac z$Vf(txHCRzBJwYMXbIT9!0W;1a4J#V;717Y>&2I-J^~WhL8s0*xER2n$hE7gy&GMt zCwjiuMbp|moVbx#fM+ZM(4|MBOdsU{m}v@E^03$<^tm$6W;L7%A|GgC>tbf6j@Lt- z7!n8I`v>(`$2*G}@E8Vd&t0v8?xh`nDE&{v0cEVxwxY8e(SIb6k5;|8!FL!IIUe!* zj#5NnUBF>u3_g_A&Z8JXDi}4RQRzPd1{=DtaGJmBuWP5>K@Ydi(f0qo+&S9jf?M0o z-S+YJ7LfMztHYy%=WTS2Za>`w8nU~2`~phl?2v`U%KM6BCw@4-{b7yy2-HlaN`nwM z?xE8vdt77ThlWS#m%rkZ)i1w%BH}MGYKm%WRloewc|*4rLIQt8mFeo}3j84Qw!J=A zIp;?mtsKgI3ilS4gNZ6SW%hx4MhlD@%(Sxf#&QT|*;;Bi@n|TetW?6H)^viZ6po@7 z#cY>Me~PD5D)#8THY3AV8e!YWmNrO&`H1gK@4f7_yslMFp^P*;$Q=ro)60{cUAS?! zpKSu;ar}BQZ-eISWGXi=w#?~4ckiCpLEMOQ%uPlpi4^OXAb!I;oE&>T8sw7=goLRLhUN2zgp#gzjSxE{Hx@92IKaq#=uLb{ z`k$UZ628~Dq>o14g~V}(ZwLMrcJiO_AM4?h{(-a}Bu$aJ1*<3WOC%8ofSeI*mEaus z(AC#9af<&#!_4=F>fY;6{N;Dw;dE{vJgdOCg!iOEsq)UlP%PkYi{d?WXhW<#5g#h5 zBv!{2!(Cab?oQ7G-tJi#0+Abz&w4=zdCq6Ktqh~!oj3Bafb7zTCpk?&`}*rrO)C$^ zGhj1EIKMD9m4L0!kqfY71K-I0c;QD&kAx?mcpEE9@9dApk&^CU59IZ#`3XC9w=O+z z{!ghs@wy0JD%=2gAIZf~D*+F<6z!5TFVgErUEno@Uq9rp+4F;PJ@GnkG5;b?3f?OC z%L2AxY(e0bk+DPd8Bhk3+1-$qstVnujtQ#cpmWarLS?BX>gT;t2tVOAl%F};!gW3f z>+se=DUXU?U53MGLScHJ6o-RYXCIOJus6O41`|Hbl%;A|uEZmLmn#RqD|hJx=P0Xwn?Lxhy5x&{CbjbS~zJQf__M6|O5sL&K== z!Y>=uT&C92gu&tz)OnPt^Qdf{y`nmMnL2wV>oj#~upEW6v{BIXhS@R;%Di|}+csNH zC3-A8N6Ds2&INni!k)wv!Rkj&e-mL?y{03I7T|7=6=T%F3iaajnmbMoxM;pDIl!FXLRlf1O+A-|W$l@>-dQu19LVH1 zI^LC(B6_I-Ohgin`Q!;6fr|mo+jC$_c25q}6)B6Wq6zsWEeh~s<35UKG8|TlH?X~FNu!Tjqf#-h3S2j4;+j1l#NqJ} z_ZDZu^BSm=@fsi^SE%P2HP*B)cHj_T@%JGErUSiA1Gu&&S=Sf#S+cg%1P927wCuGanCQ9R{3(`)aSeIjR)xDFsMxR zE32j-SF-L~$quR-Pb!l<$EwDY%5-1MN?DJ1Yts$rxJa-^veGlqUppFusL=P5{aisM z**JnLgX9_D===ehgpu@|1I3|(8B>wCQDKeo#yNg>V8}uCcanf~b1Go2al=|^ex_!f z*~$t!Z2>_a#3V>5e-`AzMnvJT+E}I9mHLM+@ODw3Qt~2ct+0CXnMpU{-)~VS!5@V zBFo%{)5=;+MnzT-r!u8w@`uhgYg^lrHl+xn8#LPJjr!;;p)7DQ1tsD38+jKOe%HRe zNa>VB6=Tr=d9;zis%zgPt{G(R4l-eoN0(5w+E1?K#}FJgNG1v)O*SdAyAlZjjYfDRQ^tK7IXl#n9zh zzEp-nS~~JIUu-vj+}Q_KDmYL4L}Ydwn@0ndS332jodDCWd#@KO`E4iz2TnegFKWQ# zPtui>v!F#Yw5K3Y$${A1c~#5QOY}g(uO<(br98&9#|=O>2Z~^j^&u%jVuKwRv0ugE zPP0+Tjlq&e%i#K<;hAZr4YImz4TQR8dR|%!$XQe~_5@*Gm>W*j{PT~N%Dvhm*kCiI zFmzc;>HMXu)3j2Qq{wJW63w}XqW>c)`fIFq%$UveQRUJ$G(J2}*3f0#I8@eV&*fSb ze~0x@ccyYrVMGgzI)?%^_=&n2#F>yQEY*V^MysDSfa+*Pq53X<7d@&iP5VrR(D(iR z8EOxW3gFxHDq&^mx`F}K<>{&@eg*-$RnS{@KDAOfeWI+{n&CL5cDOuF^I}iaVn3iy ztOn5FXblmm^^G4lD${l_$P)J4pujL`Kve4W;v~;rqF?{lJbV9ZU3YVQZp(V}7C5<@ z?AHYU)MMbTG+#74amAH3dE)$G&h( zSs_kOU%y7q_T3_MRJ9s36xJ*8NBA;GxV@+n>=Ya(NkLbdh;tk|qVHYNmqEeV?kRTfDkB`xoDH7@U1S7wn`4{=PTwaBm(o@!srQgyzk8@VPF| z@b7!`?|bvV@7_Gfy*7_Nopl`F{~Qdu7`}%HuXM%yrSH$9=9K&Ms5$HXdDP6mKch~` z`!iF)XTCq(*rPA@wt)e9Pd|1}w)ced4;b{&sfpE_EAtxo99-?wSm z+mx@;Be+R{LU-Z(C3oqJcWB{dXeWlA2zkM{p{twt(9W9s^A=G#{$xbLptD{){gMBX|aNCIt6)cn$mq}lyNe9yxsTvc%%z(P7*UysI ziB}pvBYP+QvO%3yjd4UHH%QToaFl2`iH8DmEQHj6I4&VaXp(Wuu4CJ-WFWSWwj~;5 zlqviy)gmmUA9+2&iFJ+7aBcU)K^-R5N94)6-vxouQ){78l_Q%oqTxxD35?e!P8@ia ziay0WP`%6bj2}GxpRJdB_q-`E`R}-YkNZOQGJD?Si<)Y(CeFQH>@ONyKo+50Ab;Ob z9kiE5x00-+w6U`PpulfvZIWqK->Ac`yS%l#i#^QYjT4qwmeGu>W;1f8K$gu;fqVgi zRIi6@YR(kMA~Xf^_YGM(H3hmAIR)^yjEe>yQ=SWJ{OW_u_>Z@@Qe#IZ@6zwQm2R-- z<6iHku3%B|1OOi2(r_)L|sIL2C=?DjByf;Kw5;$XMhw(Zcf|aGvYM>>+))GO%p!|i^ zMU{Y4kT+a?V8l}EJ?U_@zMr$FKrpg@cT#yGZo$yDptlAom1> zpud-WgQWo3R)Ul4JOdUS{&^zkH@pg>_=(u>Vv zL*0?(YSL`gs6Opq#ie4@{J~TL?Xe$-Y1LIMH>xgUXVMS)Co^SSP2aoTSdqVXfOL-F zFOWUEU9milqvh-2#iQl3V6aS!AIk$bx)~ylHIN*lw&>+5GlL?@CZ37pQ~jk)*EIrD zvL;gYPmej%2RY}o*k2$FjxkM~Dr`}E_a%Z&Z9>{XYSU6==>pwStGQUcjkjSO0ap41ap1u9^EY89SG{nN?{ z@e)L!f&n6U#y(;m^%>p?!HkK~OVt_}9Zon1#gyvHGTB zBaK;g)i07qa2##AkepKUqvYj;9Y8Ce5CFIfR3YOdgQ?T_?UpMYKLxJAWzTU&mfxTbq+6g*cJ<7VQ+J1cjK#- zCt^H6y$$}kNDhzJ!Dvx@pHK!Q6?%)nVp91H`d2}W>8B(UC@7_b-&F7M_Z9pnJ9slu zyF-N?ma;3-=WY9Gb8DxGv#@#G+}UC9D+YslbvuFy6K-pDWz~H{zRH`6=pl~H7uPbv46k zTEh)s6+`N^s4YNf_d$~>(7ky!iTDxa??6*yTvry1l(ru)>jC_ZZrC6)U8Rp};jH9n zs+ybo2m3qC&E58kgX5E2ZBC2tnEnUXu>o3DAQmxSB0nf*d)_PWnp(d|)9B1Dv zVDQb^MBA-}*2l2}OZBBX4SPu}8u10(o{lasOJRIMXEY|ZuMdaBWL$IF+@J-M1L3Fm z6_&etxR!PG$EG?r7gxbR^=PKL`P1UsssGxXT$7<+VrdXu&)yh(RM3)kvFAi1nK6CF zS>}fCeWC{-FMg)^%^yK(imBo8fEBh~#FHGwL_vfzz$4Og)G4P~j~6R<8?FKLnE9-l zUtNZm$}eWAgEB9f=;wV_OM-0p7N3D?&`o|P>VxV-V4;J-Gzx?TO$szGw?r6qg8`xh z5_P8fFrRm1EfX0ubLuHtq0d3yrgdZjc{BH{v5V{)tNASz?;@*MdKcL*&0UmwQ(_kt zEWF8J6!Q@O@9+Qq-2Zylo%+MZO5@=&b3n`N7SV_=@2?G%tiO8n=>M&JwYu`v+A929 z`TFt73O!$4TY2==*I)m?)rSusJ^p(2;o}u3hx(PT|DX7en#dLYPyhT6`EULUsffEo z=eVr{RLhI)t(_B5mr3f7z+dMN`D71(mC1IYHvh3G)*6o*Um+$n=QNPb_k!OO;MY3!0IeA^LRiFp z^e!ORrg`ymg!Y30_TV{ODIjL-d86Nhi?@C-65n0GqaQ8?1iFh{a8GUd>)cy@3kHpSuQ(aBEpG3I2XPXvz2i^!;vIA4WH$_@!kfhg$|ubt$Om&;J2x-lgq8MwM;<$99I zm8|b4U7)_x#E+C8D;imppJe2-orPY?UhzDnHb63_t}?h^hC^wsfn`<@7Ob_R9GG~l zc1~U#ygU(``@e{vH;;~BBmVM)wE3tcqfLr6k#G(bt33=of{*XAb%i*Vrw96vqsZT4 z=d?-DpVtS`z8CY5e}T!7ItB7oi2RNZJY*LZ3=iP+t!vvW80tgLsX$iI16VV`&zuJ-iF2KFL!4#6bu36h6(55;sUdB+YA^%9;z(|h91K~E76~V37(OB%# z)ZuSDM&6|~Qcn8G^qzNOC+zn*L)E}if-?CkNt!vw_`M3 zQvM+wvp;=lcJle0u?GM>mM*UOVym^<1HC-*o)`Y$T@Zx>43p5k zLLPy!+Bg!8wysRo;`4N9CW(`17T&Vzex(bA70yA-PEHeURyp;ASx0wK%wxf<$)i!v zXMRlverPjvVt=;0AfckC+;@s~!%4uvy9-K{RWm|b7;;ZK5hlKPDy`rbmCDx3&E4ka z@%F|l&{9Ib6zY*+QnB~rG4wc?36j7!N<6rS5uGkgG_duI*wkTk50Gnv_fm8j#`5^fUs)4fo z3`R^=L*iY=d=SJI!?egnW|KYo=)n5H#MCc@t7~*OT>OdFT^Jo)8gS3HpYI+#WzPv^ zb!Q9s0&_}S+$ zBl4c^;i>A4$;!)Z5$lOppiGJ0RcS}t&k@`zYLjz?zkz?p-np;;#)X7ua2&8M40WM@ zUV^wHcAM?Z-Cg|AJo)92{%#)ZVo(zPx(Dn6lsaZNJWdy@_5z2Sw47G;eU)pc&CtpM ziIESQEVI$7%HNCv>RprItau};Qt%`-zLulwYPG6Vc}qTdBIq}xbjy)7m@|^p(3D>o zZ}E%sz+o>M;XgcLUfHi82kN&bo84vV_lgF)W(s5@|a+Sy~|9wq=S3V@&BZn_!Lt=rNisSa~&hZIH zW0J8(oZ>XTu1uBE(?dDtWM4>AB>U~zZt%ca4#NQphKa``@kZ_3tW0D(0 zmS;H9$*Bn~7G5uVd}LFP z$*)!Vn8}xUPTeWeQeXd|y{+L3<=id1VmMXP$3~rIXd|Zy6s=4?1QDj#;TFXW!vu`hsjn^U9AX)%BI^EXyoW(s84 zVybuA<5oP>1*MO>^{f6RclRWFC%?;1axJMut%FdWdm_s*`6WspHtrZ~m=+%$@%=xP zstb z(GcE3zm=Y??|TE%hoVr+I0$h`nh~`E1&M%N0#}0$j&cu_hjhN8+*gN_?%!iQRP7`V+W3 z`$0u-X(=&VZyi(007)7r<=bz6GkoUR8Qg9XDSY~9;+G5PD)YXQC3dU&PDtV<5Yjss zjLt<8Dv=J6P;m$A@?=&NZJQzS6}1nTc3mcWcAP;XTzLHh1a3t*@(pp?(3#}(&ZRAVtS7?G;( zt?v&-FAU!*MY}e)B=k1Bf%0ydO5WYc!3?U;l@$0hMrkZ9to^#WvN%JeMmkm_nGq{c zLthS@oI7{VSUYUcvzCy=ic03b6OIZcb8^oW-45$kEK?=Z2R^72p^<+#$!nw(IhBFo z)95LN7-@n^@kTRJR2^vlK8K`Gg)`EW0=Dx%j@019lqEMl7q4;x?D_&o6ll01On}9@ z`#1ghoBm9rKXlYC@LwnY80M28g2$LhZvGVeKZYL-hkistkVZ*h4`gIN$#PG`EJwE= ztFRELDX~JJg;JX4vu1hCWqZAz%mgoO9qi#l&{4!72WYaBNMy+vmDP+TO%7yIEV7PG zM-%8kVUG1VQk2LuD-+4U-#pxKfWXw1!5>3UHyla)zKmM~^_&)t$*-ty%csw*r_bcm z-Tn6QhSM8}dMux?3xRYWpa(y0?Hs|Awbd1qE6dP|^M)E(#zvMeCQJ+}+ej_Veijr^hFA(0{x#o7 ziT4GW(YTm|v+3P%H*jyY<+C<@i-SFV-8lUf2D{W+ehs7j$L*wkNH28k%GJX)Bd!e1 zpFmT{>d56#aY#6V7(FUz)yP)}yN-8^RSwPne%$efes?ihWuh9JXlS~DR&Xf^zzqqD z1T4T|(VMohHEw7P;lCyL_x9om>`C`C;~_oB#Xu9 z2|0_X2+UV|`tSt;_mlG*Dl-f&wjmw#Qu-}PUQ_%HpW3oUpN zJgmCr+0o0(xvOGQ@xj;2|7f);%NO+MSAMou)z!#S|5&E?EjV$q%zTmR#+1{{hc&3#2(Hqe zVCbq~Oa4kcgqzB0B;QHvr1{#qn}b0x3eaqxIFz_Y3I!ByO7DUWq6^!!!(LPLj{B0R z%E<2oY2*;PicU!6wID~STb96y(nOBCxEI5@A*-58Ahu|1B;tDIk(ZWseZK43b^K zje<8Fd0>)`R4KLzb2W_K;+=-=!cK#wY=}*a^9_*^M#W=I`;wuH8AACIzs6v#hG$1I znXr@d9Ze)hhlVA^(MOq+0>6a zhZ|piJ*R8>`s>`9JW{C+eF?&YTSGd2HWGwT$HR%i7YS%v-UtmC(t5B@tk#bUl9ZT!2Cq7xJ3(^1s>qVoCF@R8&qNx|7NF6%m z{3CQz8!kBzNX6!RG_@gg=;_Mq52Ct6>U5Xu#^&q1%j&ozD@h&I_xks`vksgms^00% zI?mD48)MKlpcI2Z)~A?!t8b*YuTmA5?qnR(i#SYXlU#j$Li|=`aOjxh@pnH8mG7TY z^{cg{THw^v9=t+<cA^a*KQuNsmn2 zyu*;$8IU84+7mVCclRnt;QLSI!s z-~v)s;YwoMEwBvJ6v$dN@Rw8} z6FInJ#8<(iC}H}had0OVl)l3D^Ulu^af+P8hQ35F&)k*rdPHi?Tpg((G#&?%G;fHG zrEmsEKH;nn{XtiH*8w|Ir?dum(CRD?qZ~Yh>xR?Znwkw6J^~$VccU9jvM9X-@Ch)3 z8kq+FhU@DLI1Tv(9WS8$3wGUb;n=#=Qx^!V?@H?j8sKU)g+CrSG#PQ}}1$GU;8jxE`7X~8VwmZ6G8}e$AK3g?(iUwBhMgxMQ z&6on+iQ#Z@oT`@5&CrisihDw8?yBe55m!+0br*m5J#uM<5vW>8S5F;2_eLOE!^Mxx zJh|W^TqjdE^kR_xVNYt#w~V4ReJ1F$WLV@7qNkw^v)$Gn2{QfyJ4H(|3iVL!j>+{w zCSVNP2u&0oF~?TlJqD+NdFuuJU_`N=5;l-rVG+E4#5aVSopq~u0(B>&1j{O_okk@y z*&EoCX$q+viKB!EFFD6cxg^m=&{^Z?49>-^Pa&}pBqsX|28-f2Mgs&La`)2N4;DO< zYUHdTcLDtU=%yfz0=7aDIU(>bTA-MG(ou7n9BVBb}~=+LkaPx~RN9YTtQ zB0ujD$YjX7MNE-;!5IZ9OP!A7?b9-rWYH`kQ^I5-s&RPc-)KI7_ap5_i3^0UlgKa( zi(nmvmNaXmvWYm(!W$XmVQ*~-17^5r^AW}FlH*o|1U{Z3jLCrG)(eSd<$KsMpRYIm zxi~{-;1Qm48PyR04hbF}!I;V%7AT0s4KgdvJ8J zeY8g#@8$7!dvpJIr%jKK^L6$V38yPaBI0T=r5$ff`Cm`~qM@Dx5db=d%oV!LUl86R zQU)J6`m>}Sg=$9Q5S$jIqw|E&H2K|z26&2AqM0ovj+@ z{0-?p!C_-0LB$JEUq1rG3&az=e5&V&5PfDUs7q zFh(AlIVF!EQ6qIY4*N9|U(^RS6p;ccQb_sp5pR1=>Eb=~B?rz6HRchD%>i8I?AeT5 zEIEwG`pM`<^)wRSaF5yNpEi%+f4eUWJ=gIrQbnN{)Gmz=l>SVHrH-UaHCETCP#Dh7 z8f|;TfjB@K;Kt-FLgC%K6V!MZR?eUc22IDy0i?(mn?C{BKiUD2 z_TX^CxuHZl>G!YTRya63Hea(`_h3UxZ_w2%@;MkqVRzhNr8o`ZVPn<6vNAiFcmkiU zuDxz7iCZYV!v8A80DJW617>#Wa2IZ@|4sEe3txo+71-U(XAFnTCU#;|iACaVsv?yV zH4!Zi@O#u2PCg7hh|Ea=`gQh&QY1%sHA+s?LIl8MSZ78G*mOX*Bjmw zas6P!5ofr1~xX3Gap(vTrtFNOOYEJ&{nnxg zR9{n3P^=NTQIct+#JcK}pIHyp{|Qq;rP;{pMHk5Gj^IjhsxkwUv1%>Rs@kQMle)E- zpQL$SsL4IZTfgxj_^ssXC3gvaH1^A0DK%~3K!F#Cr1Eu7bP5X8gLFOGX@kFqHX1@a zL+2qDmX+#1GYq9(!>|i)K*y!d&*ZDRQX@H31>MJ_l}PqrRaJt>?^Ej$4r|y={~=VR z;49<<_&!91s8;>SQVYaiNIM-F38appt0U@RQhHF9%ylI5QU(NskU8MpnDXl`dZ zLH2s0vTHzdstXGs3p{}TEiO*Glr+0B@lMi>=8`U&gK0Fw9Qy|Lu(|}@%b`TG*QU0` z4`hC@>58(T6bDqA3#3XLYednN9QlXdJ1o3I_Ode10BWqtg;%;BdYfuUBJ77MWiLdxNHTst0*uazuL(bbWV!$Nk@4-9%S#`sYi4lQk`M)@A7)U5@p!tG@@z`X>YKvBXsg$1 zkzGy=Gp~c@*ORPei6``{YEC`GU%rA$Qd*$=Imy$onA9xitK|Ad7Tu-uW1Me&gbGQy z3)}k4aVwaTRUJIp1fQSH!^7?UEwO*FzqNDJKH5Iq-E3~}ZSSAV7A;H&N&Vqi=H69J z0PVz96yVxGN)TSRs~WawE#+R&y8>mlv^YM>MmQp>zf9E~ivE@qhZiVg5txCXf^kove_J?uj46QF~F|_Z`Yop6j(j+gg~l0fj{WL{-Z32#ESuo;a^CrNeb!)9dyYX zLS_hqdb(qDqw_{~TqgshAp@7UBkj#K^`I7QRq~|SJbIqb%%BS(7O?UN1Ahs(6UlXk~52JmYoLC(K|v*CNa=;EkPP{MpY;CCi}ePWV#RxVA|WO zVrT!^&a26tnY@BE%T<=Elje99fN+Xx+U*gY{JLG`Hp5v%aF3(w7G9}TfjJ=6(ZbD8 z%`+ycZ9-pfR96wkBRC%=k1=T>`Cd?o1hxQo<3@Uwsm!`?iZ&k_RDfZVhMu%JB?+P) z4~RXdfC|zC0P(mOU7EXd)L|;2EDa9-j%EP)t5WSds+4*`8g^A4$d3FKwcL&!mX_F> zsKu0-1D?SU;CaG<$YQs`;6k!a_Rbr#4mrnW9sDS%C%&!f#%^yf^!Fd^6O~kEE{yXg ziAYXW?8di^TXB2gz5&k35%Xx7W}rHP$-^m`_*6vizsul_xXSq7)~qs84emOHMi-m~&e8y=$xkzsxFFDCn;}6u_o$H%|_Z zeyI~!*~GnU`LeQ_9X)h3D3V>5<%}dZuWEG?hp8Z(ZrbcQ_rm>v!m8Awr zI`uOJwv!zg6*=Yv zw5Ni9H2~mX+evFe?*@@S(F@S1BSw_lK*gQHKKMevtWs#S0X3E)u<9CH zz`!zGsMDvL$Hb6K#0XS(gJ%S!C0n1S_=>zRJ9I1=1(3!rBj${ZF?zw7wIdCAEGVET zfj`HI)KIvn%tBm~;GI9H3Dsd0_n{Rm90KW$%sEYscGAs+We{lGqt$OHyQfA62LveBG^&ha5E) z$qk^R`JINNcnIh%I;O{{tj59}L`!C(it>}w$QIQYpzMSSYz|Wz%2Qy(V8K_C5~K!F zNDk&@4qCiLrOO}L?9u8L`L z!d-TSL!o1iT`GUHRl5d-#-qMuOG!2Xs|;7fm;hiuecy78QGvzr5IsxqrX`jf4m+@` zy&GKxa#`9*gjZiHAK2nLAVWyk@T$Rk9QI1mk1Lti#_PWGfZe|!mJH_|Q62DZsdH5H znSbfM3&L@vCU1FpdC8pgmxD0|oKw0!uADIa+3eZDm zkfb5S+MbBRgX5i7Xvgv+#J^Ot;4Uw_Mm_RYRK7!^Nf~MxAV`|=IV}R7LTR4jltL!c ziV@qQ32fo=@!nH%V7(%ahT2B)OE%6#Q3){Tj5petxQVPCznn8K*0gNSFr(IoM}Ci! zwep9slgK!oa};uqES-ks;$xWWe<~?U)1dYe>^UZ9N#Nth=jXJ|8B9!uLL#)w&lpFC z^Xy3-?YxEJjD44cnJ1gp7)b?5u2D?E_3*vUrI1v@iFZ))prpg(0EWTJ($+U+BGheK zSVW6xEyKs2WWNlpcl7fV1y5ciG+T;`5;f1z1dtYl*zPV}j~M*#kN%lr;g*S=E$(%O zqa*f4cyR~j+SmS>bT=?%p=;als6rj0awkR@nPgvSh0pH=U63~2Oxl47R5v*)8VOEV zhF@v$o^82~NJf3mG3c?jJQ@Z6kjjUk0Sj;IRxSOg*OzoF>i_#sX z*dAYBs0o)=6T!s*4Rxr&PrfpIi5d;NxiS|r>W48442T^Li21mg%Ggz>-Cz^e!xlP56jVOdreDIWMD&~DMx-3ZHTNkH+-|Md z_@cwyQ4mY~DRe>^b(d{oMkgKKap@rf5M5}DOcEHXO=T5IFfC*qC=JR;7fLMSGZF`0 zVHiKj%mpVGV&`KWr9TQ~6;}p22y(Zq)mk^FIFc7WD@Biwnke;d9iPCD63$Mh8Of?C z<4kL?6?|l6Q)pG7)*6+Z{!F&+<+WHSRB+ymf^SE?;EXg16ZU0sy=%qwo*_)kZ`@`Wm7uYCT2Uq z@N*Id(!?!Q4NLey&^L^N=IxxKtrPmPl-rpE+K^`=-Je9Db0*a7pt$Eum@lXFIHyQ~ zc}!5=HqY`vlg@;7#{}i3+L}-6Hk~k0Q>MW>WrcU?v>8x~k~0PK;svGE;+Szl4w0gS z#C%h{=@(^ZuCZLa2-E7wEPL+Wv1&;#h_zZD-^~JMprVB7EA%q$aNaf+pGo3JD7i!* zOH2YBDb(pHkj=^j70HBMJcX7|I4tS5mM1iptb>y^Eax_1@2w15mV4DHt}IiRrDerg zwsHyXDAJ7AJMZk8R0avR;i_Co#{JnS7{qisk)E^$&RU5Ty6YMRCY;3NerkrQfPiH= z7mi)iG1uEaZSEqUI6bm(XCQMWYY?%K28X;!;xkhrbq#^aCTU8!lK8+-8-bc*2*^NJ z#ctlX=NPk)Sv6pz`9Mtys*>hqZMwFE!+=;Xs*^{WS~4@us97dgo~<3xiS0?XDF*bJ}XP-e8)< z*Vg4ZOC7SF)7Db!pLQ)}r>(e5%FWcAxi_hX($|p4&FfT|+_SLPO<}{C-UX;=rkq?Y zph0ioe~yb_zeYhTNf+53PBu@r7pkj^;_ztur-ka;qR4qwe$>RzDT7T6TA?Mxizy@I=e@-&44RncI;=6w_Gx z$cFd4#0+I8_pK!f6HJtNGs|=WMP5k+J3^a7KsgKp7+K_c9zovVRx)6m2{jB=K9^82 z=62|z`SuL@_|_lc7$P){8@4hGpO!#lu~M@Tiplv6>djSfNKd=#5WW7RHQ)NR^$(!i z3$4Z0`__lnZR<(vyVm!uf41C~XwAJ|x?O_*nTpd1+q*T1khh#%J4%{2LcobOxw1}V zi!{~(D*K?MSO_G8v`85@7~vwpo*~S@6x@Jn#Z_71F^(O9nAxfZ)8}`gvLm^v(D5>i zIBu(&)8QmK_nLim-z;2jJWhHw0`0_V&<9))Ou-6FlVJBwR3`gF47_PWUojC>7 zDS*bL_UMD<)>~X{9`{8!m?ZhKRXt?lQVEW+Nw)^#sxqDX=Nsgi#%ruv)~0VEipg4y8~v zVdFBisl?oxHx|zr?~t*c*h*cUyxSx$kM{nSXU^yz0gD-i8s1sFJ+|3(fkDUITs)YX zYEY(kaTP|2%=SY6-HIjEAL~DSo_9RV{r8}N>^#UPMHoY7HqdfJ&VTrv3d6b?4;kVq zTNoa5)y8`$-NL_Hj+3dH9@7^~)*ENZ$?eP%mHi!aBwg35Hy==}a(>@Hxep$+;E8JG zR-_)!yiPSfkCT=Qn-Munb}LG(SJ8?+s244mIc}jwE}z)r)(bttP}fku3Xj?Ny~O9;dN#kYnsC;#lI#DO*}b6|blJ_Fv#cIfMl7BR&OC+4I-~#irAm^p3HrR6QTZlLn(Aq*8 zrqLVeSX72G!(xk#JH}vab66&m{H_$W393JC}C>4=q~Z<%jz#564@I!=UF(q z6g+jmNH|ZbBqtRJi{)O7Q^JYh!o=${K~6{gPo7~ag~?O!@_p{}c|1`cX8-O>q?b8? zp{1shwKQwV&DBsiO_}Dk8u+0VPZodqYjyR@FCF;@rb?@>wW{#sjft-IQI)1Dl-es> zSVb@jzCW6KTjCUhu-n_O4qulDv6ktP6Av7W{fWlD#M_d5K2*zTLI*YSU*fPF^otHq zAi)jDA4yO*Uw$Ej4HeWIhc;p#$qR>%zv?Yx`N>cuYFt;QL)4RjPKr08G)Fr86`Mj< z0`|~a-CcJ-Oh9(5X_kYlF;O0EXQm?hnm9DcxFxi}DXa>4#hZ0=u6db;DD5>0_tQWs zRJn+v8*^OK0!QBK*Nac+4>e*ZjS2lBXUnvEVaMzFGwz)KybZ*0xGZ+RL-vJ-tt?Yx znYS{3az1*u*)DGH^O+6FENhTad!HD)kiFw3-0&aD?n6xHD+gJbqfe%8&gA3RJNM2;*bBW)_o z2UP!kv;MD@`nPS;U`0MgkAZV3LxoM@up1Ku}+~!uMy&U>GX@Fi-{RDGgKP~P~S{$y!>lxfof|lF1K5& z%dUKU`m0gza(ns0RhCbAYb}Z5#^l*46k24yqlwO{<$P6PsZ?di#}mgUXH-3(?4znm z{o@~omny-aWc?^Ixq(W8R!ts?%1$&5#wOeP{Xp7i5F6Q%DKIvwyUop$?dJzazm%JU zkDUVXGZ&$>TU1CVG(Qh|Fibp9X1*!ay_$y5Hx%iV^E3cqHK~kC=|M>dVyUQ?1R<3! z78RK}S*Kz_e$ zFaYWuBx@imyy0;8ta=D96In!^bCx)*?q%jB-8-Wi>SxtV#g({;7g3NnjOgr&pSF)y z@t?JcW;++li~3KlTG$JJz}dP@T$Xv|w}i+T{yWU&6tiTD%c63c5_EkO#NmMOCuKHL zmD}DMQ4}186~|(=@mPF^|29@+HemJqQR9(EuO8Kh4?SrLl+d}9C4wMxJ3ikM5-;FP zn^#FH?x7=;>J|A>jbfISyJI*zXn$0(CXE$xu@A!$T%+Ewfhn|byd09$rR66-F1!w{ zoS4LPUFqZ%n79C)zbcfdK=dEAWe3_kEfU@gXNB9aSF7+eNaLdWW!xIz|6BvONjWv$ z3SLFHx9e}kYHf9ZKi6t&^z&iuA^m(*dqh7U*B;Z)uWDb>&#!A=)6Z{e-_Xx*Yu^rV zM=1y>?jX9$h~~?qqY3#xBuoJ^w|M2#C%Cxy8F2}LN(D$lyUdeiQm6DTHnBuWwJTZM zfXy+qF{DP@>?}gj`S0*ohfyIh-nz?wD^)G_y_tOtYnUgH{Ui0e1@Dke)K zIf>QZ-pIqbi>zak)Cw(ccrULrqbBp$Qg-Az!^IJgzAo_iA{)6b7QAk^eu-JqT?Q?z zBXcjGkW(F84gDcn>yp3f5?Xp)IIAnm+=|?o8(*&9)W2L=>*GJ&2K@8l2}ahQG#$GN z`t|p4fVh70?e?GxBltorp9OsoUA^@m`j*ztlG@Aji>hKC_pbtv==`|Mb1wR@sl^cxb#3s zg0?7gYcm|)L}&pN3(ZA(TE}jPXBaVY9G;J^aHl>)-+zzu0`CkujY^WJd>8>?xp~6LY(b2pFZZ^OnlCo@Pd1B9vvPWZ#Q&WBE>?a`?#)i69WMZaAnTM z3>5;0bD5OUT_Bwdc>u$f>BNymiWOwe^Zl3NIbRLp5Pi2hVi&0JASOaQ#3!%{GA|K+ zP&}P}K#@jjr#w_m$oep=A=I(JDU~C+>Wd72M{0QaW$wU}@oDDd5>vFR`-c)SocS_I zlX5lrdFSNC!OIh|x&Mp!dGqK9R^XQ>I=Y=!2WwL464c_c-S;kQMs@<3V|c>UYD+=a zAE6F_hWraGro410P6rd>1t{fvwDG2|7(!!^<1a~KR`y~E_&lo7w*KyNG#aiiFJE0< zH7*9@Mi^Zz_qdLD`FrZjVUI$gL3YC%2q-08w36bYt2wEQ(U1=3@dsH+!_3Jg6K=gE zfMF~9mYH&kg5?n`P9^H%Jir`&tP^AjW12gh-!No@`Li%GqRcT(lx!2fBR>NUuS4leSzhPAP*fBDYG}v&W%O2G z9)-(zr@$y1#Ur4vSo@)`-)y7JaxJ1oP5@I;7R2wMClk=%EqR6s|Nrzcj>PMr2 z2`_Q{Mv8QjaL6NGUgzg>O5A!~_Qq9|8@2(46V{USyEHlQm@{7E^~YL_8_BkfI8K*b zh~$OOen&E&EuwRo={FUsWP->SpWH^(Bbk7;8xy&T+C{8#x1Us7OlrV9q zlYqj=h_`XAq;bT-g)*NUrHxg|=P@HJ32y4fQ{CrYYd%SOZ;={`qe_`4UaYAJm8u0- zCxN%r5@tvR<-Rhf5O0?x&#%^SC}A~;(4}us<42BH+6@XPHtB$LiXz+}y1yA$O6PJ_ zryqF`g*c|zngl5uX@Z8$!Ph-1#ys;W;bbL^r&mOES%{OCoFaBR}t;1+~{pc7bk2!A(KIl@5ul7`fhL5|z@1LRDlciW?7aVd?rp=|DjrHNg#OU~oR?Njo z0&cd&rl}!R!|nilMJ0aGb;EZMPqCu7V+=(vT}}npmR#xGR?o0Z@Q(EUh=Tv<-Kg3UQj?59 z@ykMM1vCqdek6EXD%W?kH&9cT*c7dt`j0=1X-Q$@5*uhOt^VF2K`coJKq;l!2ZK+e zYt6Tt-4t>!RIrgY{+_H&eyO*Qh$>vEi3US}4e3+(*d z2-{7SCt{#K(5prPs)Tw+CJ53GNWwvL@xq)Ynn&_frt|?^IG5-&Dy(V13D|H>P=DCc zK#)Qa9m^+3u4Mz7EzC@BQt}t50?^lHxg7P=liDVkOw@IU@fHLtM86Sa8{={cR6@jj zHxsQxf07QuVgMnamq_*q7tJFLcb9>7fda$-tA=U{WtA^Of+Ew|)LHbCQXlaPSS_98 zXD|1g?a8h>@Mg>J^gNYeUVp-b7h9qs$h!tvL%b5$@2K0Qwv3OEG)fJg?#1N5Na?(! zO1IA`c_6x0nHlG@ExkB6__2+DmUKfplD^TYQBwY4U6Y96diz(2|k&g#*T9R>}ZXP{*;qjFMD$L^~^Is># zl;DPHl0_VZm;?&1PUzB=M;5SAbR!LG9YQY5=hjFk!uWxxh%gY&Q!_is`64n3N=N5U zcz%?asArhY&!Ff4LI1EMwoM6QxtmW+6POHLIJ^@)HnU6^S%k#-Z$WovXQw603|vGLJ|v^#P}uVR1e zm|nYi3%hQ+gCxP4)l^Asnb%LWmx0|Ro#7llKynARAX&gONKQd(c~CY74xcr&SA#U` zL)~HdnQXX{7_$IJEPb9+rp_%u)mlee*5%zW1L80Hz?c%o?~Pu1t+4atCsN$QZpE=o z4@pQ;eHn5(9w->`t|44tMEQ5vy5DW9_S;AZzLyi~)?^%1*V0$%$SG8#4p^$8vq^nI z)eFsq1m@rzGRH5QP1F>R5L{JF5Vq|~q92L317LiW{#scZVIoYx2yA+Cmnn1-8^&>4 z`D@56*y{zqOPwdqstns>rnu*yqg`MWjyso024z|vIm3}mqQxC1mP*3)@qnbGwi23I z?XsIP;0e*c(fY@s%wR*$-zVWq23ed>o?=AINI_reYoCwaHA571FePlwtr zU4;?ZQ3Yy!F%m0ui5e*`VIW3!z4kP*I^V>HQhF0~W945?mk}-RvDk0K| z{uRYl5Q1qv|7#eDlXtwb{YbCOeNC+~NjT4TMy8zICXZX0xg*D87L(Q9#$nbNry4IO zCQ*3SNNAs2*SV;gqf{Q%jgqS;`cuq5O2kXs_|lDAv{m+p+}ga^=xa402FQ2jdWa@^E)Xo`J*WtZo3Z_9 zGK)X}V+6Q`OOR4Q#=$$k;h3$Lx?<$8thvaHm}>nc9J`kNZiMLF1MULZZ-mViq?OVj zFhriMj^;}QIX^PWm;7DN?RbEj%zmJ${uZ=>?vrlRP&Q$*PQZgR5Kd^yTN%{ z&5&=s&ce~9>b1^WS~yC4{R_LaZs#AI;<}o^k~Dax*R!DeJ?-$kiqHB6Vm1Pj>wnL)dUpE=fKXO zu9Tdq&`T&c?2!G#i1|a^I6Ab9!ePDVzw>(vBhPZ~NK{dX|JS?nZemTdVwM=~bE*VB zS(}akS%~}#FX~bN6Mj^+hQ*jEiy9Zwep`Ix42^@Fze*~4xA@MSP+j(_OdrXlb2*2Q z_h2bXbGZld~sT1*)1}F)D<_PEep}t3R2>V6ORuem2x6_yTbx9#1_<{bU_8PYI0 zNQ6#M&<_?AlK?z(1UkQ~REY@NapbmsjpDT4X&WvjQ@C~uTtbX+Ir240zzs)~pOSDj z3cgJNf8ffC6F!!TdZ&}aM4T}NcQr~nXx-Ijhl0} zwg)zxYWhDjux`SBncOR~oqozGv3i*{+TO9#i_hvlCl8k>HWEI=T0#Ne54tmYSutzk}RUVsC(A9Oc)-2o)u@!JZhg<1t5JLZi?Oy1AJi7`gIsx^I>I9#2u}rpueU zU65mCjE(7XjSF4>nbP?YRsg~eHB$LmGW-sOTxYqUTxQy-Oj4(02AD6$e#}lwH&ND@ zkT;#{sjNLufyGyO`_u@oD7i}~@~`|Z<5*Ntx6tq-tW^Wa$%>XcmG#<69n}$L~%yF2>O;8_AP_iB8MOD^pGCRV7$~ zK+LyI?ifhQ+7<@I!Ya%OQgf0G@-XK?hC8JOJ9(H1_p2>huR_~;M}GYC43WT2!dO4|r6mi_qT zXlH*4(7w)$ndaI#N-&Q#&jhGZuoc1V%cL2yWfh_3Zn)$E*r+5a^U@HWlA!~BV1YqA zuQ$Bqv*pecQ#JS4gJKOj> zfuk!a>R>#H8?hV7JFzp3(;S|5B>Ond5!&XD38fN79^d{t4+Krqw&h>N z$?!>%x%fk6?y@px75>c?-!WDeMS-UpO!KVPps;&3hGoov26RD?6#?o3m6)W{`YxUPlrvmNmWIA$msSZc5lc{wD53;h2m%}EbI17i3X?&$!=OV(lLD;{*xIL&gcpS`0^vBsZd}Ox>YU2vt;|`W|mS z9R7oK_FKl^Kde)|*oITFQZMFIoCESY1)x{0hXpP`DIBD#>vshIFjhcVpifp)$s#by zRFqwXshFw-Afi07>>#Yjz<5e%pwbz=ka3;1XDhi@tLOteT99W&I(&4;5yO_G9PAQ5 zp@~Q(;uJHz)TN4c2HcViY{)^%o>H%O2q-6IhLB(s9TP++AzcN~BP9Vy1{iwQjc)3Q zOJHUTl`2`8Z6?+TbqwIgPC++>vSai>1Da(kI`iV7lNv)2mylgbe8G#vW! zbD}d?ppxgLqNl)41zG=@Fg%h^RIqftJ08Lm4r7kK8_DQT*e$@E;#q>TK!_xR&W%Kn z3Cyt*3cVf3$MsAM;nSawyo-&K&FAJC;AjgLT?X)b7XrR1fO;`eSkibOMi;C+aRnGK zQ;=XLK-t^{wMIk9sGoJ*{uZE2jWmsj-zdG$;aHo;?;as#K7o$1QlV|Fyj;-}N_wej zFs^lNU+naJZ(yMS(YBsKS6UA;=ok90s4Lk-l>SPqEGntbn z3ns2z@^4)bHwAavqK~lQ-db)}gui2;Jd*m>_)>j19@tIF1xVUswB>>7iEpk$Mcoz0 zczACl4Iv;&zP|8%Lx`VM?6^b(qPRJ}n`#x;AcihEY+#(u*;&N+*z|?VFDW4dI%AEE z5^_q>GrLhCSfGp;Yqh{>9Sk&39Fh$+NZqbfsM~zPSqlT_0&#Q+sgpm!uCl&|b336^ zxJon0xUdxo$7G)XlfWdW;WCUzb%^$Z-A0ktweXCKRjXLo9NY&9i*nc*?j>?e% zvkGhW9sE+4XHsFSe&47Vq691r+DJ&3kcZ|PFUx`m=c>?RY45RW3#&?Cg!5{+@JCo4 zzAsX%^uo1J96bG>?dC~+l7$D&jvy_@WH>j<%cCsZMlW<3{{313O#v4(qVf{p5u-bq zQp$pG9I*Y3c)8Vr?_1U7MimQOkCrRpT2H=^kMM0TT&~c_5)y558y#0HAn2mfk}gsW$x^AslbfxcS|V#6xy$K1*!0wzvZW7D<&2uz z7y%E3$X&0@Jm(~aLAGHnbXZYZF}pUo!#P#C@olSd`fKC$QuP)Fa;vqkY3sMmY?jNb za*y_KyLrr6go4}z1G)WyX3waEfvVd$Ia*4z^r%1+HOz)l9zn` zj8ORO4sezfOF_v6>^ZC?4lfcZ(;PKky)tGK*n5e=YM|O1)g~j3{5EAg>YQ)5zs`e@ zJTIPZKi}EM^K^1>uTGHT~04Dhj}2sv(9Xf zQ!zsu)CEG4KwFYO{2ANXQjKU4R0t5vp5|qpbVwza1|fbzaT&>w-;t0zGqDqR<~rp& zky~8(KINKN3pZq8|zu`DWSsra|=)Ey7p4)kmSf?cSGln9i>4cLh?65VCXQ%gZ8eGELkL>I$c=T7A9~#( zToM7@aqe7@oBLk$mN|sNkqOakY8*XdROkWw{Al|Sj#x62j!CS9!P2jN|BqFbBak)( z?yL<*?J;Bg_#PHj<#x;vX4tz=eFX-MTb5mAi8qE;`Ew0>jTjOt-WN9eyAWnQaS{jz z1~MT*Q_IiEs6exg+As7$*9pw2IaWks9wp$mtS4N7dgL>jD5F;e6h*uSl*1p!>sU~3 zM<2KI8+CVJV%Vy+SyPw58~T*r~zl*wEqb9UndG>qE98jNsw!;Q;MO36kN^Xe4><5Tu8P< z2}M%30ZbpP6spEh7eU5R@daKF)Pv-qbv+~>|FnH{ymPQ`eWQ%5sZc$gGW_>xCGp6O zFsGjQ?z{HxNqhU?Sw#!z>v#dM-8hJOP%{0Uc1O`Xqv~EwrVjJXY7*0lj(~@@cJ_Bp zP}^YWjo^y(BQ?zpvkC(ZKk}8rsza$k8?cCEuHlvB$}$}@E0Z9~S}!2H3lF_T)C^dg z_^&usNnO_J{`oVe&#pCf_dapztcc8!s+m>G`7JrANu~CI{HR$i?x|TT^eQvTl5?Jf zdK-SqdppN_nY!nkwctm9`q7o^>i#1Yf)< zsEBSa9QuQeXJ58G()N|h!@gMl#?fJC&rHy8C_0rIB%Rl)C{fqy=|89e6%_xh?gdK))Os>w7@XZU~L$BYFZ|dYGL&WG<%S`V+ z603wAMsDdh`ejfY=WkwB#n1I>{cQgKN{7JN4;%-G;@^foR)RWWU3`QRv|dt%Qb9Tz(ZuS2pUl7CS5 zyS#tZZA14M$anZdUl)tk+~oD8NrC~81PF|yFKp_(_IA%M1gHQuYs)$~*Z*1r7jgj^Q=mG;lPU97%-l_$tI2!E2JJ{=cBGq1U^@yp%*14B z$uOTCyCavUpINF&BX~^3NY8DyVo5f42miQ#{Exyu8HPq$9@f*Kc}BKisce)cenr%K zNYShXmfEBoi6eopP=`}FwI{eA>ttHi5}2byYzvOHtiUnSSCQ>J;RENzaoF>sAYMzd zzoIXZbU=g8(FaaDp>-~TWq80oj}7?ipYYel>Q|2*uO&O!XB+Rjs^p^6(G@`P--BMy zTSmwJHvC1E1l^6t-+ukgH_EEnxw*Is220{rEcIdKuIRVn)x$OVrQ<`5^jj?ZPJe{( zbI~ADY)GT*V*_$vm#*w8^-vWK*N9x+Q9DX zbQql|S4TBh3@WzBR+X@U%l|%ENNfAk9$h!-L!JfA4DCkGg)a(xDD2?(yyDu^Atz2g z&tJ)*ARYOL_Z@q2<4JxSz>2WN4V{yn1le@Ui(qGncno8#m{_W#Zacn={Oi$1%c=5j zctqls@$tccG9R!Gku`BK2T>cz(WNxauCR@iNlpXra3M#}hN_ijL`h_6%bO{cXoRcZ zldK@FY}>%`Q~qp(S|V1z|HoRz6i!kYC0QicCg(#^fHI~-nnzPmPc%RSjcrRCG+@X7 z4QgAyFmkIFIZ^A;7v@^!;KfRw(r!GEh6OFGkt@jbJFbX!Pq^fAFR%>lFRGYsu|rO3 zW-6|HFT&gwh6YQe;g-{c#6~+HSLP}4gv?Y1yk6%m=AFpT$56>f4Yo(BF@rM!XELY^ z{@X*F5>5YnPMJ#Iy9hcP?w4PFxwrXzr>VVa;DO68+pyh@0^6^)?Lw7|M-H4M?K1$k zQ|B^xhk)P7Ga!C}*V|a3wkgf}ZXovkG@FrrYS_UF$~*WG%0oZEY-+{yo3KCNlfiSW@;}AA0J~1dT>zB zpfZf@F^B$aXO}$Ll1Lx7(eqq00ET_1rOz~e-%to$>DicZE})tTv!Qyd*-XA_&e@Im zAOEnNJbm%#H-2G-E{F;9nwgyO02ADNx;auHB(Zj+;R&MH9&^MptdbKK$|xGRnSd(z z5y?F4RE>!lPGpLEIKnl~r_5nSvE0*~k)hKI5lkK0s3f2KrLCEM$VBU3Ri72=T zun7tQQ{g=!C4Qr1Avi;@uzlY{H=-IjWI?sG_*ZnSJu&bv;7)tztF(((!wq!x1s5tJUIaGA^hSwk&bbaw#?``F1SBQpwhlHy2QH zj8v{l<X&Xpx8&;hg zpxx=f|2GV1Ma1A3(red+n*)a6Dy~(1Xl0Bl?19b3s}AtPWsK*7N6XdscBAtB2dFW= zly&B=#Ozc9Z^A$QbQB*6O=UO`>UJU>Amz0gFut=rU z=E2_H=Kj`kgIRbKO54r7Et~}cu&pseOKkFZm;^atd0m(@PkY@uX0ncLXcdFW*P;P@ z^F<}w??QhCRN%FP^Oz7(o)8F$`-iLJY!D6>bwjIZ1eAEFP*WsdjuJr2sltzzV-=JQ zSnyz|?2@k2q_=ab@7L<@Rnj~I6N>TNY)Bnvn#gasNa&qO6&QrRs3XAo$Vb&&f?m;DQ8nj!Mrdx+ zQx3FW#t9eG(VqOy>$nbJQN)vJ3^yfAud)BDr_CwCTp549?-UK?|uD;i=sj zP|7av;(}7LoBCi19mdO-R6H21;k|?FfoMFh2E0P7kSi}ny?*BsBt5tX0*?cd$eirx zD}rPcmDNgWei3}EKOC_fDdE92@`1!tLbgObM0rwHhhzp@Wp8!qUoIm>xq=4Ul34%4 z32rs2Nz@naMW-VOFex=Lg~Z5GIqSK=Z(>8{!)Ol`O=D@Bn@!esb`^Xpaext_&QzOC zy58o@97bF^`3_r+F4Wc5O)~sI3IBTNA(YICcJ?p-8Fm$%~W=ztirrH!JTn zGjMNu?B(y(RP33l@Jr(PrbO&XO#`uAW|*71JhcaI^>-H|rKiMtaal0>-s<`mD(euxuQ zkpqXAa<$EU{E3%?RU*NI3 z@&+UQrH*9&T|HqpmLxTxp;RO7nN+P2^P_`n;}M?tfNrwbSGj26uFvZPevG8=960DM zM@q^p$YV?{L7~1ROypd@_^ojRYpky^;eyOrv5KkNYtBmRI3B3f?m;2z;OK9xU}v^# zqU?>=Eb(o_Mb1$c@y1#zIomk}+fZe)jjQwRN>5Y$tblCo>7qT~%G{ zsk8phD6P?}W~<6qoX~4-WjJRl-as&`34>G(K-i=Eth}3sDKT&1g)(|~ghANT9bdU>V9csNJ$dru$^N5+@Mu+M-n4<38)#nU(Bp?slE+WZfa4UnxFKr@zd(kX z1$iUHb7;r-wVFA^aMQtE`55<_@T5z@78p*;%|pjVrW#10yLe01n@cDcbGvu{X; zlp`!==Z^4)-&sBJB8+lKKQgwYX-ZJuBh?mP3W%LWlPtZY*Ujo0>#C+{Pe@z4TTD7V ziEhWGT^q?W^pKe^&{1u4+p_cR8VcvCAi}fw&uli4QS~Q-j4+OGG`Tj4&(L0<=a_kS z;g9EJmz|I+0Nh3$5RI9Mp$&wtye*N9r7fd$%|$P_z#=485KBr@1bSx>eB^LW-N6s+ z-2XRP4f1o4#*?MrvmWi6f*tNvfcWs28VDJ`vKPBu@AbaqUuf&^FN1rw z=4TufeRV5f@Q-mie3SLi6D1#|=ty*1dlg=y>vzlAa)~)YT%f`38uhDjYKtpy2Wm?T zwl<*^Ez_qHT1#e$KYp?O7=IB#S&^w+&4E$Q=3bqzqtnU=*>|wPkT%6 z4dAy5;QqVDmbJ!5F5<>6Zg=hD9;G|QZ`ESXv}+TSrGPhU&u0+~XZ@vEzprIzGOn-w z+TTrT5AHBaMOYU3#kVq=6<$u5!!9|5`Ib`yAh!JiD7a&45l5OL4$PK8iKUkz8SeX@SB%Kx(*oACr*SMjoC1 z{nTfv4=jn_{M!8Dd|UXiRjj2*$^gw2mf; zu%UJw27*m<$7Ki1DaF)IGgxA0Y|E(vGCcQdzIeG)paF7(4#+1N36b>@q>InhMa?+* z$AJB>3%QYN2_@aFMH;7p4>1`DPK1GX$Odi_3gWxfNk{wxH((c~uFaLxp+-f-Up8}947Y&Z%(!%Zh5`8xaU>)&d>IWU7M zD%FSQq?X5YE_M=YR&P)v&49$VUYXGWH&KJ~v&oxmP(xp>EHhYm81L5c?^Q|z`UNG) zz3&Slqq*^{A$c*I_E1vK_iFk3`p*0M{rAQT!`lPi4KMWh>$qm8>=Pxro!A%ZU&oX= zWhbuWG{R*$p3_yJ{lFvk_zX@*^8Nn7U-9S3;nU;f$;lC3y^lB!J}>PSsd;85s|?kJ zDaYz+t2JK`O*&tSrKP1Cv7-{{ee~S08_PHB#!}zW)DrPot(UzEoT|cR?`yNJI2oHE z+!O@|t+K@{4)J46GD0Pl9y%r($1?MYCK)tByqUZf`L9v;s3USNaLqP|(Fd`I@WXHp zTds{_rSi)RpkSrY5W|QDEJCI`_DHyIeI7Fp#23S07Bq2QpM=L$?ry{In9+U|`w-p5 z#n}``acA$iMZEEmDOkss9Pj_f-&q%Ww?SenK&Oo0*ePYE-B0R36OJSGY;D6adl}{w zS4>hfJlZtAWvVUB22JWU`Xama=jm&p5kyJtMB2fYlY>_Me#`h3w`z5-!{`#;GOz(< z1G1nIA*N!XH5ZVkyt%S1;(nz_FWja|81ymX`{~A>-qH%I<81ksEH>eKEtjx{jL)t8VABPix}YcFB? zVpFzKI$X|Tmus1q3!=UkaZ!H2glMzklK#gp zpx=wnx`e3wVoy)2-Biog4SUQcH7H$k^<1Q{dVmygoUv%L$ki(BYGx!yPoMDHm+pjD z+Ist%did%$Ty<|Y%Lvu*?b?e@YQf@?|GF3=4rNjKtn4NUA)H>Atwf#TM!6elw4MHq zk9ow-^ATsg+(zmq7o zE0Xc`wuh(o{T(PjPvdeTu*BLr!3C0iRKf(G;TMxte}?W->#?zhknJoITlJoLZZA0plVNJ5RqidmPz~avILS!hAcm-FGWaAd^{#12 zc&#G34U)}svh^0V#72pXV1?uwE{4z1Xo>d{jt6PdKoT1HiG!)im|fg9NMpCe=M;~@ zZe&Y7$JzZm(h6*%tSiQ^VK<^ma+@H)lop4;jBhy_T&91UCjzAJbA;&|N@C~+S8s?C zn>Q1NWMW1%lI%;ThH(t>TjT7e^eZ`f)=~h*&4dctM#uq?CzLtcDMk*?*h4_V_lEOc zco+=o6ozIv>YlQ~oS-UaOM{ux+H^7;!`Esy9<6xn1P_Z7=OLr%Kt9lfwJ3aLplP;w z5-|WQRO)o9VdHz%@?NiDCkU$)I1eXWxVY~memLwU)9XS{i<_=A)YT-!DUgns2F|zc zexmZtqff=pm*2u70;eJ?f<)6#f4?wutH=eU-JUX^QU{N?%Y zqo7$aTX$2?1XH-23p>fKCvP(21WI`bS9*c+^kJgogeK2u3Iw15ZDa(MEB+No#2;90 zPF;ttIV`@>dC;H_Hy(5v57ZHTJh0x8lnXGEIv81p@hk{;7@-Zj@V~gUN%Jzlp6=`| ziECda3iZUL? z5=EJRDnGxDEYg9`e2UP7yL47|f2*w;wdp#_vi7umx4inFyyaGC>G+N))6)4n?yd?t zarloZ=ssS16L$E2%?@4eC;#~q`qoj=%Nah}Zv^>uL3wE{iDo|IfiLD5?bybTsM>vWwo7oV?;N znm-T6gUL;vJUl*zeFLQ%20Z$&8FU46I^2%?tXsuw$562M@bHJ;Q+%ard?~jkZ zKiNO|d$-x$#73k7bQsZqOr>AtSG9H1k%mG9Wl`*<2g8Xe6bw{TI=jRmtKy4N_%Otq zm^%<>tXkDzZlW0&!fk;i`DnTTQ5=tv&-(a!ugV>kuexpkIaa$XM>gR4W*C1dZ%r+to_g>x#{m zg{5E};9Cl!60f1(ckA*y?&p5LpH1haJ(o3XI{-U~1ZBobxJ&H`!5i5-M36SniCZw0 zijXZVm_bpt zCRO(~?|2fg^jy)Sn%?BlK7;c@04mvAj#ImwP*^i7?~|Ilv1+t4Ddmat84bZ=m@2`- zH7AUX4%v|6($CRwhQMK{`=4?D{Ir@1b}4g#+g)($FBgorn_3`y1TJ1&c5sA0_ghHXldA-#Y^)+aw{e9XYviFQwn`ns2>g} zk-=6+|wR z2H-{i;D^)U#dSV;X|OoAI_V%qlxO&PE-3t`hlIqpZQyEVj(}K-cET-II?EVY-UHh zGE^ku#O*Fed}>A$O^YzOKd~Qqkl4oYjmDIOyRW#Fg^jQwV7e{+Ey)soL%tX8Zrkes zG}ps1_4q%!Fz9A`5Mcu?2PmurkknOJcFZm*hJG}aoeWm;*CoQGnB;X8AGD5`h#0>o zOifcOxZR*iK|9Dv#~ZRd5j2J{ZN!bNEN{6cQ>W0^0QAsiICT=N;Y>r5^Z9MCUpW-+ zxuH845BI$8*Hkgq2*E&{1l`D1d@oqCjTbNfbK{q-cOM@7`P;wL8u-6T@`ugl`&acB zFB@(X40g!Lqm!EKf4=Z__nELk0bdn>E22OM_;2BJYAcgrP%mrSm=c4LTF(E$2%e=R z^ewa$&2Pbi4;@4-W3pXHlhvwE(|vxD*!{vGr9^bG>n0*A)|8AtWc)!CK`<{GrA6~k zbKbc#X5)->S;+D3(WJrQ<^S>m)!!M+z%WwLtGTq2&8+%lZ0wS#;A#+ZQf-!{qZ&aX zk_3`l6f!>1gg_?rYJNKv`PF7q?M-qeEH-he$y=&vODCMBl#`b#;WXz=;KU>J&z(`| zEl#M`vLU$$kU@C7UvPrhDbBQH{JhTQSCc_4z;jSM$3AmCKGDMKR-7VG{FxBI$dVr0 z89qoy{l!S}m`(Z_;YV21*SQ>CSkPTWPO56p%vbTwr^~$^od=Upwcnfg;}e`!JTwLx z%`m<1IWo49fB8#iYx~PDA0+vg-Oh_&Ixn~CUw+wm)xnJj(wbhelm2UFb#1F1d>HOX z=c6jYXBljID4J{XE~mL*=8h)>(uaW*vmx=oz%EG|nG4O>0qtcPi~KWjNL)p-(r7}U z>-2Rd4B+@Ru}kTj$q>`IAS^7yz>?1!UZ1feYdh}G>jG|qQ2{4)H1@E%@i_7rJ)jW> za-O4=e@=(g7reSn74a42(+$L@l8;c!bU(zQhm$XTMxws7(_X?f(>28#mhI84Zf$KP zhbJdbPFhZH2wa3S1k0_E?^a(SAgnFpfvHqE0Bk^$zqWilpq#%VPp4ysjhjloP*f?+ zZYA3tFCyp3tJ?fb4tOl<))iH@Z$i*1=ZU~A4d)u-Qw6#{^G}v{rW)^0np zl#Q5_=E){)&GtW`Cf2>xcF`w>8mIugr zD&Ml$(WMNZr~3WXZ!6^T?8OWMzw*x(W>``XpjR)w#1o^(z}!@wk3yve`YBlYrvu#OT zr!Ao>$d>5Fr2D3VDFYB_kf%)V@zw3s3Mr!5r0^OzN=gOhaG14l6vSRSM@0vLK-HK& z$F3XaSLbHDEF;DMQNyd9*tU``nUq;b(No&N%8*vNjuN@yEARb&&6<-&)xO!1S41a?wV!H*g~6PBTU5E@Oc7PGITDW=_DWG zx7!0kmO(wGcOP*%5NOxCgyNE~TQ+_LGwy!Z7|tmiS4{9)Lgu4Xej_=R z)v`oG_+DTr)~=tt|pKB%pEu_X3l`6wRjU$@D>Zj=A=+vJmOio0GE zpY@(tClyP1&KhgYs)Z_2c|^b3X?!*wO*Ah;T;qb!epse3smjk6H4YU=Eon}lMP!4C z2*pS<^bg!MXA7J@J2*HzJw>k|nh#Rj%4ASKl!jwpuz*nt79EA^?{>aI=vT_JVqa5} z#)*iON(%Nd80N68Zxbp)`B^c*S2TH8SuQ?BbY!IePN!?CG?+9Y-bAjhZVm%2weSzFv&x!|6yC9}k)9KqdYGFf!aBhV4|L9@ni}Fc*e3{7g}{ zmRK09vA~h*WQ4yj|b^&(C~7C8FIk^@pc>1j*4soIwvMG z{P`{G5)}g=mIIu;zHP%IYUYdcd_J5n=34bYcRQJb*dGIC5_l}dS+53$doI(0LZe9| zdRQeN`$rO9sjW%nlNSgE|B^`Vz6SFW`NI>VePfS)8Y1!ysnV)XIH7|PW+6}Xd?w-) z>d&^x)k(!<)3}{-zn^FFakoG`6D@RgG82?sAl=-TMiphWoGCV1W92R}X!%N|EFx|q zLCm>LiNZOS;SL_>BO==BkvN#<6sQq^-$I6K~thdWr$1- z?{(nJog*cSKM23-vEucgm#kT z83<2=pwVsv|J;Ui(9krTLz0b>e=JBg9TS!TqC?+!KA$@I(MgtR_{dq7+R4%5)3g2K zW9JTr%`ER+9Ouc*o1&naGF0Bu$P{+iTh^+Rm>i14d!ALrVU}h}8ff768vSX*BO5-p ziZnzS)WYuYfy#(o6Q_~UEmINv0$rQKw{6%I$#6YMx-uIV`DGG%Rl}gPEZd!Zq;~#oHM#N!a;xPl|{^ zqP)83!M#mY@MM^#xFxBkjnTdw%Aa)K4NyUq!+@^OCnGvcqj?W%jV3AFZ9RF8jb(39 zN!8Ysze05V5ySSf_)E{#8~8{LDnCo9D6f&I%%|_B!}@@AV3u=uifz;a{Yst++y+v-l=cwPD~~*zBdZ%)>4V!|et$3;(M7<^NjXZ% zV-|N3#s;!-WSl%X-M*h}j$vdM7o>L>OXkHVr&-< zPK6qP3uC4*Nh;t5&d-TBQO&b)E|XM{-k0BA&>dF*iFb{fY|A_RnV0N=6<>HCQ5MA-b?*5O5FJDH#r`tv+!=lhbOD{;7XGA@5r=)A;9yZs$ z$x>vDzBiQ5qXqIV6i6}ov>w$BS&Duf*`YW^` z*y6~x$dwbLOj*B0E<}wS9Qe(cMuH}Sz9a*Xec;FD!9lZHMchOt6GriAnO{P29CPqL zMbk8z%q>%>`T*rOXz5lOFabSe=HeqvthxHMf`st{(GSTc0!O#e8Kn(uv+C4Xx_evl zHBq6?oP%We-P>xwLrQpzOUDV9QhOjmeoxbNnohXKSppRx$nfueR4W=4v`s4|=0NM~XU zoTX!~3(dem)2MSPhOd@=9>-4K7YAV52WIl~ScaSK|8(q&(Eppv7G*YyBxa+iehwSOR?|01xe*t`@tbrsgtI-(BzB0@I}Kw! zYj`dCF;M6bHL#I9CX7>5|749f zNLGPPkyS1=(x2=wq=+r#)NaIvhX!YK1V9P}e;5m;@p4gX>8`O);_Ct+sIf!3=^;IP zFMV%3LCdH}5&rooKExg^@{^f-J*nU^7{8X(B zf?&@2TdlctGi{p>(8e2J1Ug=KovlYt9v+&vX68CuLbSS@FMdg0Zgrbbbo*h(Q4FGB z?e0+HyW0(g-e$}AU#jRM;Gtyb^c7Gt^u-dC467ydZhWhZCBi3`?(2cVU<5%|h*5jj zSS!)=nE0xn;A42&M5jSY{$zN4oehSmgPk*(sYz0tB&fI(?Py~i*x$Qbt@zQ4+@l7) zZW!>>gk2JJD-CCRUi74VQ;8h#8BN)RqPFPexA|;>SQ>SS8g~4?gEBU5ej_;`)Em)6 zTfH|1WsPoqs*Xwn;PyK5;Stc%^WI{drxzJHFPrg(@tQhfWB}}dnHC3)*Qiq`SvpWl zg?pjErw1g!?om)QKI&0U_dWHOVKbV}0k(DedN}1V83v|AB?YZ}zSjIH<61)g8R$}G zy;H(q(@p{O!*;QN{b8aZbt_)VYVQN5dSQ4K&?FH zw*WU_(q^MjU`b_yFRo}+H9Td#XXyEU^PxTybn4{N}Ox;5W{c3Iio$TxiVE*mMm!TCpx=nuqw zl>WLiuvG(h*sl`va9WfPrKKR!YWh-Bd&4pd;>C>Lw?5VedM<9QOC>^ut7L5)B@D z=42~46Akve*HM&=e9ya;V(?4;&C%W>bb}EiAix1=CT53iHQDJIaWAsmm?wwg@nvrX zdnFiK4$>0773R{_9(UE=3;{6-NHxQxpgo)oN;5LLb6d&;R5+c&9&z1759IqugNhxn zQebH(!rr>)Kho2(DhB)Q6GtKBEC}+)Hvb=?vDi(q3C(JT3kj6J2ENY*$v2mPwBW`u zqx27lN)qDx8N_To6rV)jVvV&sF~3*u+yrO7E8;c$5}fGBNv?3js+c^2c0+G@jU5E0 zkg$sk6)Adl1`)(-bbcc_5vQ@n_vv~sFLWUjDkOol?l-!YCMssY3RMh*A zf299B+yC(}IX>v^A0Ok7gR{RsrN0lJ93StW(XWqSm{97}h$z}i9V;%tJHlhC^B2AX ziua*g1ECRq@z&q|BSm4Y+?o&6CMAFKb+6>Rf=_{4%nI)>hBa4$@-80CE=)>Sph|sF z+2gr(MTCyy@kEI!x@PUwsTqWA8m&qsOFVY9i1pa@r5zCt3&M^(FO_u&Gem!bV=sTC zgX`fK3gr%v9^(8Vik}EOHK#8gfj9egz{82gg2>k>&K8Oo_pp)2{kgRbB@G#Tw@?7= z27@zSFbrYH=EB?6{C~wB5pJi*FRC8Lh>YBH>5cE5>+(<_emz$ysTOR0D?D9hZ!NBY zQ$f`gKs>TR52F-%qv0I=5V%t9RiQE5uC;s{B=My2vfHeCAKC8iY+pX`xS&}5C}|;0 zqsoM2s6;JrZiie-=7ro0&l$`Irpu9TRTGA=9pd|F8>i$fc0O1qyodfg839a5J{M@x z>e&W1y3QNm{CZ0Ks|3hmObh(|YIz?kZq{{YiV~gS_KV{anC3m6*~CsfKdDh$Dy4m! z)VUYi@S{CS@#*y&JTLxpssv(!9SL;f-N~a5Gt8w!C2R383vcH!0m1I(`a6_Pxp`h8MVM!VY7y5g( z!D^aDt-*XwtY0+VpkH*+!af^mcc>I~g>EwXP}ggsON>|;!y@tncTyD;LcdHm6SFh9 zAoVrasWxo!5LpUztYIcOyCuIqbQwY`)toeF9UD;d>tYDEA1r5t75S|Dflp}rv;0%@ z+B`M_>lNJm!2M-D^7n3SjV&pplNbqlUaJ;~fvVf}%N$vTru!Lu8<&k(Yw@FG2aij1 z@0`b+So~2?LP+-dHWF=1Z2PUmC=10&5p67TO_2@GZ%Z|bbY2#cIWB?%NJcS@(`%?x zPQ!1E5Re9o86z!-0~xAZCg?APUJndnDoq<#HZ$$(@Za<$lm#Om4Gq6iBg&T6oJJDu zE|Y}eWLz4)N_~REc-I~|RqoIqnZD({0dZ-7KKDJ|hZKI>!xc4s;}?747Q)Ok;U0IF z)b3KWq1okayY6)?(-6yhvNYP4l`~41!U$Aqmd+rBYOX zgQefSNVcEHg(zrTEM{@!_Uul?^Y3FMV~5L)qCiJC*{ zR1Y?HnysWi8)fhdJN)1PH~$Y>?#Cdh)NE5z47Kmn6sUFUZeNKtp7>1`GzOpl29ULi z$4An}5pH3LY$YYiL@PD76=W-YvD}aZ6Dd9u2$emRaFYCrrqDq2vgmHTQ6?8AsRDhZ zhuWBAGc#Vlt|!Cev!)L*MPa8mt8L{uGi4VviSgT0We|-E5 z`imD$BRAH_K+2U3EpYH~lWlR0t!A?O;6VaEE>d8m;a9UAJRMF9<#*^q`bJQNr2Bpt z0!`IkEsiZ@I4OcI-ccju)$n3o(7U+JxwRZ)pJlq(`yR=#Z#Oi-1qFWz&%MH^ELTrQ z*<=_*W0!^Wwol2Na4jv#REtMlcdOgDUJyw9b{!kwi*C1@Y`^SJySV6DtUuk`byd3V z3)&blh+rq|I2ELOg0 zJ2TzBXp&4*xAVMLWHJ+Kj^7?+m{HQkATONIKU}piy$1nPEig1j9ZD?c(()^ z{i6#X##_RX7_Y!Z&(`onw3y-<@MSct?+9o5?m6_EzzgWTFP!LHsIRIIuwoW5UXBas zM&NxSW$q~`dRBS13QN}=v=$%!pn zhWJN(ViR8pI4sNeM45)@pJK2n(_Q{EO8DGK9kaC?#ZWA$>AsDBX{}7_TIxdMG*c@> zb~;6pMV!1zl9i8AV2VuagVRbhKUJdv0z^ZHXK$UdWDu@R)%R=hz7>RscAQN*(2wD^ z5lU~YWAwMT23V9V=lF~Bj2%@1US}C|P? zQKUP0V4|*pgZXurC|yK5&R}tUeajZ+{DH&TDbjd-12+8SJlPS~mxxOccHXfGnBI9Z z2j9Um6?zW?`?LKLt=TX3+y9Za|M_y4pEQf`_^!{EbQaZ6zJ0vHF#J|NE9otHq-dlZ z5+n7%u)YzDbmL^@D5|$2OxRt$5{!{hd=aFXwLKD)Kova_IH1ECtS%Pw#Z0vv@=Vf| z_zz2F+S-pr&FnJdouz(ms36SV&ebzPVqF+YLWO8uN*w^0izb zOFH$iZIX51^;S*Q#7T`$cZCES4|}dqS3e`=>7W^Qk%(dDj*VkWXrIfYj?*>&0Nkl( zg{skxEpg-HBnC^I&Xd~w9ukSI)UtPUbz7d+*iAS=$;WyPi8|BIqlEc z?S_RV3@V}Hk0GJdeGZqr5p_{#FhWgE*;fejL*`<;(?NAnvMF16blcKoV6)dWh)fbt zF?t|0n@=#efWVV*GQe??-C_Wzbwp)m)ma->Rhe~JmXMBq?5d}%vh_-a2$IRU^q`21 z#WIE+S5!0%y4xLB8bo$+D4=jbxnux6vw7Rd-eWXl70yWEku|dggKck&^!b

gAY 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 z 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%0A%{ACl0!H#wQvJ4-p7}kz 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ŧ%9q&~N;-;%jqm4FI^+YqO#0+~y#K{!`3CQ|*dC8;Z`^VY?I^Q;irK)K zS48T^0(I{{YCP0uY7~Aeg$vzYAs@n=*V{p`rtnXRnOx|zEU8J-^n?FsJh;-lw`xrl zIX_k@u|-X=x@*mFD?6q;a+D?Z8lvbFNIaXsJ!oRw-PVwIIgOuNaX{uDb)H2+elbF3qCWpCJ! zQ~*<2R2x)nGbdSJaUV*dMRv-ZbFzfSE^4VVRl}m29Kwl?WAnDi3f!?F%UVrVXVV9b z4Z}5C_~l;cPoFoO%jNMFa8>iATu=^*+8*Gxp+`PbE|g}ehiYb~OQrKKNljAI{lK=U zM{|-n?QTfs5xa(aZ2(WK$0C0@*F@1Fg$*gI!^J4MSITmgh4YI z3EMQo6*LT<+aaCwA8kMD4HvPR9mR=yy|`lixMI0J9bygByD>+pV>qL%cU^UO{c}o3 zvdWu~Wgu1x+pfLUj&6G0b?pHsuvSuP9_=4Fr`+siN|G`5ksS2ztka zU&exI(XEeM!h_2cmrcp`-R5hS4c8E7ChDO zQurGh@X^ry_BVQ6q95TV@C-*&Kc1r2Yxn83Ih9X%^L>sR%S7HnYrkCJu84j8>m{O+ zmB!-lf$9Ye$8CRg^~pN74>yE+5IdJ?H0mZXmM0`+hwK%rQ-84l0U=q`#WE{-3We(SQxCo?Um0*u1|m8kU`N>* z|I)U}JEM~rppuEqECssI)Dn!IHArJ`Q?y7uDCB4IRbPRcAXB2uPCVwJk=dZy0eXpGeHeI; zPp{~}l_){Hb0v-31@2SBVi=$}vB%XNa-zV<&%RNd!N7nR&pP?z33S+e(u%A^zrvMx zeP*wh4*bOhgjV6=#m#${JXumDZ-}bLh(`L6FTR;<`47D z_il8;OGYE$L7dwwgpxFsAL|um0T3f{wiXq=i8;lQ@92bzjs$xL~Gb*$sR?m<1&+ z=j}zP#JvK%h>U&K%jFpw()H@mfCOa{LsR|YR8T=&;1V7c`AK!SNf{mH0g?AreVaAjw>kYkZG{j zNKOrmxxccoe&>q)g-3OrCE}Sh5q$>U{s@=^Wt6d0dgngziH}$9yku@psV9n(SJG<* z5db!vbjVv8-(Y%*q_0L5U)dz6_5O+QybPD3vkb(vPv^H3RlSWz7!gf%8t80_iJJr% zSYHtiDFb;UCs(A*7aTZ~wSoeG@8CS^?us91Ug~*P@N311Y04TvS*9dm|2PO1<)kML zz>Ouf(P%j}$M}8`l`avtU%y6Q3)K#BdKZJySJ9v-*TH9|2on)QJ^f-rXSysr=6uo4 zb`T2?!YvB)1=SSifrs!X6+5Eso68IEN(HfNFCyXsVgCa;0r#28UtsrHk!@jm>l2XG$jS zjAke={b9ZN-Uo)EQoFZ7t5}Wa`fry&R^4WO^o$kKZm#ZZwyO zw5_}LiPnY?pXv#taIq=F1{pFcNzMt3=naqNH&FKI*w2qBRwaH0hDyrmMHqpi?d~Gq1s*Tsz#IE#N;T58OM>?U%oWxYuc(g4P`talY=Bt87{X4(o3r); zG&Uezwzffc7a@_kkHKP|u-U7~g($pXy$A$VD*F@XVMlqj@>IpoVTzq}a;g@9$VO6V zg}pio{nhw_*os-I%$g{72m(HOp zI7~(pYAnO~yP~`+pJDqXgImYeoq22}ohBR0AK_%dw393@a=Zb?rHGG&t`pADjT?={ z-><*7sEURX52B9UShn#CV21D36N6lhiHsRC`)#Bj;`P~v`Df7Fr3M_>U;j}O*P`jC zvHSe>=G%WHLz?8lAsTM;!HO#|nfNl+Skf1bykOrVe80(Jg*#u~r-ARJ6&X+MT)wgc z+P>k1%-~XqO$UTpd=RlP4F|Lg{qD)P!H`eqY^1YX$a%5NRzN@#i>jXyF#vmNO*0Ih zuGl^8M7Ok0Tp$UVc!YwS3@%2vv)4PB%Y@ZjzKH)W)vEZPpi=46$E04XyI)bQ061AKSa;a_lBx8r*~ zY)#1Zc;h~Xb@bpjduTl+h=N%P#*o@<{_`^4<~KppdDLAg3PVvcN{VSK?HIo`ZOUHprqOmI z@x^LdoOI&TCBsjZG1%c~5z+~8(L#%zb#7i2h66fv1eqhZiMiJuj zpR|_*oGS{Y_f#aXks>L#=V!tx6qHaz!ilBd`fw0H45si6m|~=HotZ%z3^k2;UGg;` zCR_bc7LA-KWAE)tKHcosbUlxSxV{6csK0Ep^@WX;7ELTG8YwAiZ$$i96tmc^C7Mu2 zG`1ZhTQOD|I^Y>L6DzX{vz=DA+p~f;25n`Q;0{bnk=3_ZoU30(rY=(CbEgRRILV;p zQXXSov3#>R+CD^FTKKEeD$X-@Q!2dJ^$Z!C^<6SIV|kY4%kV!XGqg%EBqL6|ab=N+IaMXeWd!6IuW zXjUhLScEb5>7u8C>j)zz?{#@I1+Wx9gOY=jWNb}XhNmlXM2M)8;310af)-ry#L2M{ zuit1>Mv)1MVXY#0s=R=35KaXGZI5uWgiEhWq#0W(S5?sV?s8B;|xlpW@y6qT0tNvz{@x6?Qz;P$~XGVFdi_%S_;6>Es*o&-~dt)b$jE$W zLI8wRI~w-h3GT7RgaG->$9&fk!d=h}AqOG;V5Sj<_m5aF9vfveBGi6UJi1>}yiY%F zy7l+IL+YmZV!heXy!g&#LRfz1GKKhY_y-0EUSCKwA~W>3itY zzQWCFDQU9bt)iZ`bbf2jHqF-I#YfGD3}|i1hr}=z7BM%Ps=I%;_TU?`w%>THigO8; zm-%jQbMZ>Ta3h1%kbDjfZnEJvp)OX|Y#v)-lDHQ~Dpu9ch=)3N=y1m{PDCVJTmXLP zLiR@y8T1~J^1RfysEsk|zi^BO5uzs1 zkFbBdA#V)!7qX^_>0p8+kpA!M!qIIGry^`9reryzxUc1~Tu3s9F<+ui z+D&3tZ_hXWwCXr3G^xKFf`%CYd7{khnSY_V{X(W#!h}5dPgn!_W}mmO`{e=kLRWf$ zVTW*kW?Q|fZ7UcpLAu%t5(GY$F|;w|S8@dm%!1u)&gy8SHqsO0qKF=>a}=;FPna*{ z1CGZY2Rb&jV?i_sa#lMb$}ktPq^p5Dv81R%sTffZlSz-(8y91qm>dl}!C={uT~pB= zd9^_hSOG!)y`+PkCXN`nA{GkeyerZ=o=onM-dO&&`RNU^7`q?!8ml)@9uVW+|G7@c z86YrRz0$ZHH)c1`dAT6fO;N=Elu$ykxCgpMlS4DzWVQAz@I{O zrTJ2R2E!CMim>9YJVj9Om}nd%%81wMeR%>H zIq2K!VCZ^T{a_uMI!YS4bumgV-peyS>J7!(%qu^BdBFULer&+~TBPzb`d?7)9H)32 zkXPYjvjzvK13MrU6`;}{Dt?zd+%`F=dL=eTN+4R5!T7vD!>j}O0HxXU3^e%cPNtU4 zR%rDdbS@%h*o4BP8-I8ghi?4$D#*buzPn?I@GNi8b2}h!ScVy3gcXc`Epci!Me`$; zTLc@NPE-*%+EW}oZGo8ygc(VHck5*TO|YqOv61*m++s+_K~<)}DfDw=f`9d5N!*m7 zw)><(1}b-^ab$2syGcJ!q1Zf2%9rgW)t*pIvGej!&MD$uiQabeT4Hs?m3KT}@p|E9 ze7aB9=9AS@Ry1X4YcDU&U#D_LMr=~yv7#(``xRcascHQE4e_&fB*5Nz@Gvq41xlLI=lvL*!myCr=@H6Z$`jud)gY!?hQqi^fm%EMnb>dA4 zqMPl0w^uvn&q`1a5^91|0J)^JpyBi`9G>3#zpRQN)dmtWw(B%q=}s$CF`Iq(a7&~x z_<@U#AfBT8rg~kHh(OaxS5mRS(!|hA{!(DomhQEfAKuq@`iAT#n8R8wMSj+bT}3(H z&-F_t7RW;O>llEV(7*stM396;%5VCsmHgCHP_f^mFC*Zg{Wc~mhrvV*IyCDI zIH@`+mAzc6luI_;Y19nSQprfszqT;p2`#11IMMIzAJ$fv2bv!*qY;m-E747nv7%O5 z&p#SDJDqdR;rM}UhfdP8l#J7-ST9;NZ(hNAhFqWnG!#&MK6JIOXx4vUe6k&VC0Z(L zJ9kLsqF$3BCj1senYstIL{gn}ZG+STi}YZHEfVc%W^1z#dP6)Cql4`NwAO035V5w} zEHNGvWiO%O6kJX@u1}JG9^M;}sJHULEtp2bcl66((EG@Ol!EBkC_8J{tR9~o7fJsMdey*E>q=&y^F(o}TH zNmEvMM;K|eW1Cx}o#daJo$`sPN~u?<&}7|_4orpv+=%VcwHq*+uX3a_ zC=5c?wtL=vu@Z1fHDx6FGdjkYJDZ6l zzNLP3FGCdZTjU^TlcshZXYE(V;&41@ieqnOo1!qh|%0GyWM*sg<{(6h(tQUy+L#pIalJ1#mdN$6$2f^Qal%vXji|B z=6;B3p46gDxGMiPPu^sy72m<@t`}81PPtWbluImR#EIJRC2n0`e;V$mz!o`=47;e^bL@_U| zPKRCr?qiCK^)|z4wBY`V%_^DRIp)R%Tu6aj`06do*@e$gm=VmBbL7a`#Ahu0=zw?b z6h&U#DT-_@{%oAb5@IN*rz^;#9$iBVo<`aso&^WPN7o}-4`tTss3BRQBrFbeonGr? z9q^;HZY*FwMy~tCLi2!MwimkFi~tO0i`N0 zWW}}X+0p9h#3KQXj)-G|LjwGR!;Oy&pE`Hu7iZ25A3Z*L0&z$E@q7W)u}sHo!GOXf z5fLfZ9gMp1u&#>ElC9TcpM9d$AS#Wdje%tU1vD_Lj0-mOvZuAh>``1EC$zavmjo;m zj_+zcMe&ICuBUJS^iS3bg}*jk!-_m6C@|BEV@PlcY($R{QZ@($#T;I)ty`Ix5Yeby zZE*Ik{`rnF8^ip8;C#d&d#!?tIj^ERkhbefTK$DMUa45fIX!fa%? zw7eNF+MBe+9@wKMeKzs@6a7aztXBd0jr69Nylx}o&cJw(uUZSBG7nm;fUEF{w+kll zy!V?LDtJE7jO6v|@I0kCCNsnx5-*eY+om)%WJpg-Q!@Y}QB_9rWo@nLi-lyQ3ueFV zlr{{Cy0uC^b?$7k<`faGsYZBG&l`{GYu{Z*jqJ{KN{da|nkM>2DRmo^eDvIM5Fxs= z88ncE59X(C{5U=n)lI)gI4n`|?C9#|r%R|W*16?J6nWmVi)3lMwJM`gl9)4hx1skd z5*D(-txv_L9irgT%eR@pFkSHr!suH65QMP%)(M;>Y?&+>H#3K1H=wH}3=#bo^2eIc z)OS~#-!D+e-ck!+?^8HqH>@Hjv5Kg=m1J>xQkrsnSZ$S)q#^y)>C7_ji%(-YW7@L< zW5l@eOuFoZ$6*kH6l@UQmF&_>jbXLLm;@6`fSUHhh+rMo%H@))I8(6{zvvkOEv|J# zCxXIc1_7?1YmO>Y^1>3dF^hE(`*xIaFD6U8TP4{|DAkx#VbBDkr?mxb?jDVe2cIHz z^xJNnSZ_k&O-v&qZD#os!+z;3Ojf=n+{{66u)<`Tw;7`$L4PI&zWC1yx8j=>m8i4! zU>Q*!O^L&Kn_KriUA>!@d^?oy7@h5;2A)KyTTsKJlkn7a@z`W;Ss_oFu`OujFAum8 zUu|8^3E>r^lWGs5R27zem8Hs=_BoZ9S)5IiTO$o(M4(BZMW~`6G*PXR`)c{H+?pWW zNs$>EQc+?86)#7=PXUPPYj_A?K%t=fM;fyf`(nO>7-!{fso!nhsUu@j#Z!q#(vo=w z{#FIfr`eXG@wqCnj~RJVj$@oJ-@Dvg{HP^_j-+K`)zqa`0_0eZ;P4>a?dtOSEyS5s z{wW>63ljC?#+^Cht_JAOZ80j_ZmfEdB}hz~=uwjw;y7rnRk!kjY|6C3xb!}0ugNk! z`UN=hLo1p!F8O%9C@-P;$cCnhY+)S?i#VL>5lc+v9J`EQWasi1^0}I?eHNB6DbsEU z$*NE$iomZ0@je5U0CHQYLWx@?3Ur4}4x`0_c?c$U-bxERI}Wo@+Z%2s$-_q$zB73q zI<0GFhLg;FVJj0p?sp4*3`gkadD$=}+|<3n;t%lJIA)>cCpSVcXyJ*fIrh58IN9E+ zj$T!^C8nrcjokmbVnG4(+=1+!Gpl3nl;pNZjB#e)0|`c|W+NfZ+JR$t^@eCcE8}1Vb^OKtE)g zU=~qh@e!haG9pj&_D6PZ{QZ=)h^M@nBE~fdQ&2;RS)bsDTE9lwQZUF4h=fk77V!lR zzI|pRii56rRA=*7G_I<3P%-70Eb6n`8J5n1XJD6irM?Rae6TydULqq9VcW*f!>)}V zgd>7T(?NCvC4mklexy>Gs`xV`7Z#^9k8~47yhEJH3X2sn;3qx@60gUxZk{U#>kh;} z+B&^uyC9HGtK?x-X$oPG64P%xMMA1XTa3Y^NGU{vha~kX{AzcXJj~@^>HQ9>KcoXT z-gZi;sLRL;Ne@~<0@V0xI|!*KII7!PQYf@a1H>j>iB}fD(k;t0Xa=v!GILXSBd!mH zM};RArf{no=Ft*(Zn=xp@Ury28aq2CAU*sJF=0{?-8$1e5fQ>!K=B^ZD)zfs{zkB~ zu_L%P6~%PQ7R5@%4F0Q#Y?1_DX=WVLVvFOsZrhH6-w_ShoNDmU5dIh%w8b799}PBt zlH-ii39VNQsD_lp;_O@afckc~YsJKnAcEQT2CcW1;OU3f(6WhLP<>DDImg249$2lg zS{?sx*8TwI;uieb$#7@@Ydcnk25RN9li_2vnDAv;7i(&Yp0vq(&5|x!v^*YA#h$pn zM!CYi<;#`Y3r;u{^*pg?k3Ces)?$>LHB7}2kOpfZfg02%Nzvj`2~K2}p0_L!|9Ht6 zs=gb|YD?>v{oG8gP|f4+X)!{Z>MakwY#jqNV6{;wmC8c{QDUkFg+fTl*htDm)`^{r zzesuK(58ZNpl}Fn-?8qb138jA)%F()mt0$}gE~PTTL%FHL_j_;qwp(i2gED~#6)0+ zsR{x%#iv~>x3Jap(oMLjoN8}u4{FU!D(4r`V1+LEbYw@uH)UeD!t91-7`=1G3<=yUB^44sVWCA3;99t*9u3DQLi24vKl zL?yR5f4A|V&NU)7Kie(Y4vrijP=IC&bvTj*@4}TRS~C~7(nf@%kXZ2PQsdv2u!fQg zdmf#!)G7wQmKQtL>P=M$7FB9-$ON~p$J1vd$1mw-8`Fc3pHSx%&Owu_g=ME44{eGWVE z@_@P)Gibo;X(o)WmWDu((-BqxYZDY_Eom~WO-^FwBMbZDD-(f3y=x#ylQ2IL4xM!H zdW!o|7N12#z00&+15<*R196tt{%nD9=+GqvOW>*rusNQQmGGj`w8GlX{qc9T)YBfx+=y_E%iX4^J%aH(2RkUbW( z4O+Eb(5z(Xf5RkeW%(=;ysyTgaB2iZJysi?*zGJZju5tN@Rq9LaISuFmt3x2KI+uk zGvPF(fUiZr4C8Pl$}rL0Wz0WeZCp$}p59$R8fIG=I3WSGWa#P&vZtb9rluisyo#S@ z+E?(~p`W|pL&v59vNK_OxuA+&Mn9+1%b-#zRnP}k%@<-3%-vm7T!4a@YgPRL-8yy$ zM2wkyRq7ecdXu$k4TEycP*bg1_9|G2*}X6$AYlNj>QhxLFm7=5nv0L8aZ^-qUIb@7 zaele{MZ7VQ-s=j76svYVSXsZk6fZo`BG@lhrh`K(`J>ofPi0YmdL6Mb@bNoeP&H5t z#Prthpkp@)pU8k|s2N$lzy3L)q)NFoDz4gzyQ{Wy)YdOu zdi~XoSO(n4mef zOD;)MdF@H0u92`r8#6yqrOHO*vj~=zA+XcH&!OWl7nFlyF4XllB~u{qagS+ca4cV} zT~dfk3jba#CIpF_R4bJVTgm3uM+pdW39C0zuHg*gf70SM5^R}DK8|g5F0cBpF*9bg zf%I)U7jM%*p(;f@6*9?0U6^OzmM+2mT3T&9xTyO2uB+UBN8aKxUlx^^3M8N;EP!t|BlpPHp3Avnl{r}Z&))%;5-Ob zjR28cD;+pdhylZX!CgJ6RZk&f`t1Pwr)u6)tv@LiBFK`OQKK1w;$naWI(TrV&r+%# z8&d(1_(TtShkLO4?_~ax!}yfj`1r}AXOE3oHfC+#wBUh({hymD)wt$s8ID;@rlez;e?e%zcg=-3RVB8cO3A+A zGJJ2QRKe&ZiqL>H*4MZa7F)SG5kk2(uy+yUNKBW8=5kUMBgA++b;A0peMvXcg^ef< zq`OOWPc*0KN8N~dva&>b?i9>+YMNQn3W~W=$85aZu@%*B1L%^hrHtON(`+M3zka)4 zp6H*LDq3d)NZD3Mlc=NlFqR?U`4{~PNFP{Pt@Q^iyI4YIh`m|G;iINZZAVs~#9{N7 z6)9SDo$AEWf%0gci_TIYVM6?r>?YMNe!~fXO)gh!X^OWWH*Y>hUg0OvT&y01TW~1J z8D^QY-H

My6&SxU+&P;zpL2%gSYv6ID7~#+@m?qoy`18)Zk1(004gi*80M{0#Oa z?yZt#uJWsiFVVqORHf*&egbFNhE6JySURJ=Ru-5@i+XpVh<2ND+~G)|0?2i*vHZEB z3Epo=V~eskZ2W24+1&DYNQzNST5j)t;tvJ1# zbrUrKv)kLe`%&}3HxVv#^NQr~a{x7k59$sfe`LL*uhXSV%IJyaxOTdbJhK}Q6y6NO zAREKEd=U@xLQvg4&JmS5q}HSgIvn>o+;9vX@#IOLA>Ro+X|iy_Y9&9x{ya>C%U4uw zF6S1@^TFgKdUq}Wc}<}^N=L8y~0sTx_eO0hZ(6B(N@*x3Li0-U9p zfTHFUJWCl~3H%v3@3UC_$yi$)U`)I9OyV{}i!>?*@DrU?YAl{VF_F&&n9`uy%J~@1 z+d+}*l#Mgzgl*|E>?;ggm{G;!NO#9L|N64G{@MMthmWm_>l|upI3Nqgj$CY4Bjd+b zu;4n{A+9HzHWc!rTTqPOmZU#D<#Ob6?N`(hzFS(KuUqBB^ckIPQ6+7G_&8<9QsIo$ z8KcCRWqSI(>*&a`ZRF%qpI>!ABsZJfFe;YY$$~$H0^~lgS0sr(OFWK%q%vlnw$HI= zLqP(FFj}Butq$ce;VX|y29x>eaQ3ZQWN;%yJEA{XrSMQ`tyTv9lnabnOdeL=*Cp;j zvgd^*2a47Ot=ZlLRrV@p&|_uI0oJeXz-KR!+vrKSaSgaONNTtq`+Bv=*e41l3#>vt zx(DR`(3GLv5G&}{Z+`LZ`X^U_%E{xO=;APEka$Y9ND5NMr|**3h_P)HnnDsdemmmx zfR8;|Y<_W#9Uf%g`+knhc@O45r%cL?^0=&?gdOPFWO}3>#T(?qdaAEh3o3fv@NT@^ z_fu75&y29259uhlR7C<%muOrcup+RHYOHF$y%wvUj4QFxUT>og+tsP^YNW$+mM#Lq zHFsks@QV^-u1!=)r9^bQ?98s-Cr8PEK)L!W2=ZN z#lb;g;z;OWDX}?~FRCtp_C!))u{JY~rxC~Kz|$3Y5(ayz_3x63V_=Mq?xLbrBYo z3lIgtKT4&0j{b}0i==SY7Bu$;FK6ft(jmQ{^xuhE1>-ic`W(wZoFrJ(i$9oQDMr>A z!xmIFBCy0N?J1E=taaz&60G;vP?SQ8kk_N%=*gJOQPi4Mpchf1Rm~f{UA;hm0jSk| zMEXefLXjAiMqh*PkN8-d&%F(O)gL5NBm61|yex2azHB`_j@px46>N-jzk*G#pp!Q5 z5cDMz!XPFk?d-$5tROINeT}b zD#PR8_9`{9JP#WJbNa2RhRtCkfSJPI=*hZINwpZ_g9s0EcIW~7x@hZITghW8r_J+i zz4`gI=Dj+%8}By7FTBU|LNCRkBT3F$z0tUHOTR{gqvMA1)?$?2p42V!-Jg-#p+voi zx;Gw}g~r2LPn1qJm7NeGef3vr1LMKs??Do|er6RXaLz?RON!ko_8#!)N@>*dPiO62DfwXyu&0D}1b zZoL}a^fipXFP6N0-7gQQXSS{d(7C*0-Y`FQ4vAQkAUhd^QIx|}+E_$SKp|{{p%{+Y zN%A!b)A$F8g?EJ$l0vRBTyTo(D^{O=r)B3;r_Y@k89R64mQ+g~C|`_S|_&?*+h4pew$v|#nL^?Bmzy^}_-%K&pg#nDhtwI9K@`bUpOGS^wstoAdQ z4BVb6oH9Yad4)QXfV!17wv zV9LpZ`Di#~z6g?BUZVHmG%Ms_Tv9`TuEChk!vqk>EJi2w_Hnn%aK;6d3qf?K{zRn| zhI;0roi_k@Nvocxc#;Bzs*64gC}PTD&L%R+Tl@Z+ za!r3f2U4EIUN*jBBosQM#cg9123JQxucO&#Yy!n|-=Ro4Td;n;c!d6+>+2spZalh% zRmZP#@heF*v@GOSuvcHVU5fhZeP^oJ6ZEK#5(3A1k;_Kp6ObRp^kqH6G>6?3l2c)o zgpW@`2Ew-7W^8gg+}^p|eD4GL;Idf`qj}*oC<9&NqF&NH*Jzfo>@kTJCSDVksH->Y zN)%Jp8qC1B_m%D3Ua)n*gpaqhpK11)#KD;#(~+121CGaOv2?B&Ts()|F){r`9jVrp zWa#d;!3Sq_DfIvqMB2Sc+njttR(yJ(F(%V6OEE~D`2HXvY2e`i3@S_YUM*PNw4LiJ zC5Ak;$~_*lpVT~E&CstS-)dlXNi+DmvxyYREPnMC7$VpQ~U_@56tTA&M}m*fxQwF7oMoqIVUBpv8l@D<;$3h3TQSqVIlc>l?<8 zLtnV)Q{A2lIa;vtNshg-ILM1c>M+a<5xSm%gxNxGadjGgOijaZGdSF&2_d5mJ`Gbs z59xRKrOqsG2J{bALC#~<1Vd-bd*9(v#3)(lpG9+ldMP17&&noJSx1XWrZ?wsqNgKV z7U^~$8bBQUExEyDputVBvr)TtYd|tRgk+Niom1~Wf&-Y*7w2H-8vsTs2V(lv!5fjY z*=YQn#cu%zMAm2YC>aT%-w$qpRN$EY8;f@_gMIzo>x~b@&iLsc(N>^S0bH|vY|b-D zla7S&I(!x$+~@t@LV-%G(Tkvn?*CTgMyDzpH#z@^)^)-r8Oa0`~S!!GEhJI8q&dw722D+1kFT_9PHq zJ|`l0C(uPA*rOkPxxQ&qpbyFr$4O(;=+-vzF^0$m;VF=Yc z;cMUpNr^{Y|N zl(7tL7>I(*;`cE=1-mS9OFtz&UZYHil0^nC!I{vm@Ac2$-GBfQZH;0F*}E4K-r+fVbKobJ%m0aBcHC&?Opwc(?iG zV}i5Qrxvd5Cm)fS{GH3|x4t29QBE>azgX(WWxjJ?Q5(|0<)y~gKNw^FhTS)kiZtQO z9O1pov}D{`YN1#5L(C9DEIpXAP(y>0gT}8+)iBUez2q?|1uHZ0O9*DKf4B{c9jZ|ugy>>>RM|uT;elM{0y?q_OK1NInCWoAo9KgJn z6ve&7jmwpQD==)J&EZ@w&*m004_S0H2+x&NUFNcsq=h}mQ0^Dw*O=*(bz#dP_~mwsiXB$+6ckE%oe)u_0XnSXWSo2!Bb@ok4qaoCxRI4cxNGyGU1glZ0{D-F&!=jYHi z>bxz{5_lIKBrM1gKa8{&Q~BabDoc$z{9E}f(XFrWr*GUahkAWEQdQgT!$yeCp%ZVT zjBwMmkiY^hc+SOCtTZ*|&9cFS*hv$eu;Hc+@3Y9r0L@|?#>3UPn77G!Vm=pbEz0XK zisujCWTl|oI~1c~W38s6&?$xFuCb(Z!S(rQZFH-?7BHW0D2B7{W-rGU*siK&YgGyJ zU<{H;G~2oSdZr43reDcn^8G6r0bcgi*ylS~NL2?`U%5cCIyZmZRjxxyVy)*ytq)<0Tk-kn2t4pzgM zla9mYg{z*Z0jS!&{Y?U&=a&^!8Xg_i3-{@TIR&nE^L=eta^AwTL@sbAM3?+}shhOW zmB!-lfzL~focn>*)g46cAt@El1TqY7U)q^S_9Yc=>lU*%77ycykEf?ptFvK->=UH| zro^Z$85Tin<&D=dfEIzn{4n2q?}q4(&HA@wV9?v0qi!4=RJT5F>==sJNm;x6{M~KK z&e)da-Co?@wB@xW(@AHUYgJil8zo7^LrmNtFFrbuBnVdFE^*O&(1-KoT7jf(%XDSh z0Hqq$N3>m09u+1$6elXPWeO6sQ~~ceQIJmG!xKo=f~7H8Ib6VmCJU5FW!u<5-NlS4 zVvJ73wGd4sWq*o#*(VuX!L0UM=rVESe?ZKUqJt`OF`iHsPS>E>T9q-@4Hbzm*;0AAj4X*2ovjf@rBK`Vm0o z3b0k}d`5;Z1JeiiSL_-5;09)#eOPyF{`BExkW??n)5dz^%gVJ5F_x>3OoVslqfQT! zbV2I=@|tp+a~(6C0Chl$zpjZY$k$8ToWZqa9`WS)g9XEZAtKIJ!c$*!1>B<Z)6`m^Q<3vPA<6c>@F;$5pX_hQI$DiQ4^!Pbny&x2JZ%YQcOOF(m`+;DtcDl=+!G|D>iP zs#)kc`JHX$Gr+J+bS9t0oK9+r5KE-()@!>OTo6{3c#<-Xx|A`g_9jJ~wys+W4|W?l zN@)jr@ol}WyEcdmW6R+JSD77m%a@PgTc}cy9+rQ6He=*pSKr zFpe`b;tFh%a;Zp3m-<5)1@0S|gy327*A_5!9}isWh&V;47e3Zjl-MtE{JBvaR(T&R zJvwk|^yom*DQ>0@>#PY{G4W&C%fjN1ncb@8&xHx7k>*I5D>|DYf8MT`HdCw)nLbSB z1_t*#1>!7Rr>>M_2GLz4k>A;*Nt;`n-U;lLlt1#8G?qW7t-cl8iKi_5iSG&u4QqTV zGoF16XgRZeHX50dZ==o^?~1lEQ?1g(`^jDfveJI?mw535jgBRWRBk+(!fF3uq4C9{ z0}SjahhC!ot^w%V)1F&u4j8Q&h=WldQQq4~NTx_Mabi8O7tk5+d(rA;eY{aMqE zK|`qaZ-Sj~gLzal=(u&%;nSP25ydzAU%Q=?{7E~vMhW&g1Qo@Ps*0$=MNEa(8yB%z zT%7APkZbKcZG~_hE0sQI!(2zJT9Mrp#mYp0myRjqohvB6e-^2@iwySRcg@8GMrR@B z##&2)pcexKXXKF&xN2`*@EbLj32;)*q)98gw{0_;T7$mT#6C0Ro? z@IoA)DOs%~?l}^mWJes5h^=i~w&PXhD(YlIar$z|59MgPeY@Zn@|;RiDA-8Oj7>$6 zZv-wkQ7ibB3^l;vZuoM7dan^vM<;}8GL5}r#EMDk?cNsOu280R)Pkn&;ho%D7< zzE#MIn76Qg=SoJsWb8Mo;9Dks1IZbM(RQ<`-76&OEiA5ocHc@S++O#zikR896CIU1 zXf#$A){uAUY zn%Q(7&PmobU1=5G4ddBc+TP*>XkrpcnZsf-mfRjia*BmkB6XE2Ic~a8n!waNzo@N* zzKLy4=kCZOHAFof9{P24hB%ZuxdBRT83z_gq%y1}!ECNVthg3MWBD5_bjCGNk*!z) zAj8rmq27H7YGSL8v&Aj;-2x^XFVs^a+HB^(5ZN`8&)lv# zbMn~s^2x|P!3Z1`5f<}w<+-ruiL=L!Y1PL})`XcXbCn9saIeWeFiV#TO*rht_{|xV zDlwhle?!S7U|0~7?x>*#NGnnq1G=gB8mCsS@8Gn1Fpt@R5hoXg2O7&LYpqzk_PuNA z2b~58il!-(-4ssEx~_`C{@e6O?$l#e8F4L3w`$n3(ld|+?GJeV%ll}vUR*WU2{IJN zU)$MqK06y|+qqz;)Gpgf8D^cp7vm1I=TC3SmQ%gK1JeG06F@=uC5}Uf$gC5xihQDj zUhWhuS5yCWC^Na$WFDp$E0h zrf6MuXS?xFwtXeXhEKmfGWO)xQ73QO%h-cgdl+mz0ftnaU$rVaYA}+$rxJ|A#)-Y+ z@%8p=uXCnSmR|DmxnpGCS!ofds~Jh;0VJ=u$>f9Z#rAQO&FJ0So~w5Ur94hD6+1sk%sfxT;JJ6_Dnf22)bgG*}1EyAxfhyuLPX+0pIY&TV5mZH|eV z76^hBK*#;!Y)ES(s<%`gni$hK&BG@|V8f2b{V)qFNbVoGx8d zv653$ipYDIpCL~(84z)|N$_;HReD^1 zrI%vD_GaP5y%e~FfQo$rek1h~+&55$Q^PB%M-Gc+;jmhFv;D;UOl4s&yB^|uXlhor zwM5`{1}Qd?A~rWX3iHMyMDFfxMAydv&R?c-O*na~`eTBb{w0|LAQkVdm2u)4NsLdO9KSHBoXYl(7%M6{8_H%F^I?1386bc{B zXa&!=FPr@_+?goULeS1LVmR_W#0;+}4?9;@ zn$hWpKyKrh_Ca~TcosyR)!shukXNlxz~~_SNe^bc{oWyN09`H_?|HZbl2IO?dIA0h z>8hCV4!~c;X)@l6@aIG&PdR@X@1T0yF9fQJ)sNwcNx$kBvPv>k`;!szc^+iLi6IOo z>wwowpXf7%;^^$4i&Elqyo6O4D}fvw?x`KuCzuOTVu8I;Vio)Bn@F~Z9`|FC4{kGY zF5bkOiFSkLmH%koxz1Vy?iY&Hylsa9-MOL|Gv+!-my#+JVjjeU6@7Xjdrw`nO)r;P zDZNT5!%|p&O5o(Oj)Z666p+%(MztL|H=OK*RQ`uD3Lmb}xp@_M#$^k>N}IUj^RnT> zh6cO&B7;?N>@=a{Ph+@+NC-Yh0?A!eQ~CX3P`y~HoTq(RnZz(f5JllOskZ!dABDzI z2{)!=zPwi`IFh^Xq6#p{gW^I9*qUs63FO3r?c!waI+?OQzXq47KyZE82*|ba|G&LA ze~;?A5=HZ?>aRG#b|kq=rHLUC;Fb^qs|^xY5_WuTU-ePdk#s^;oys{?67q0A94l@T zlN)@4W0HVFUYywOre7;qapSL@_rCAl{|1Tw;jLkhXQ)9)K$22-Or2>DYp=cbn%5u= z)cT4%Pp|Y_H>nC4C4t6O7wMwy6k#`2RR1SG*4YJyG2va_N-`kbdreNGGZk59^m-pD zHJ#haW*{9Sa7P*X_;uJdFtS!OMiLM0Uh@md1RW?i3eiT?IaI80j2?976kNCh0H&d! zmJ7}_Rjmc$U5^ysrHD5by~X1TJ2Q@X^Jvv&$IL8l28?MNQE$`^Y&=Xfzai4<=7noi zP-WqJ%qh8E1xt9Mj=4M}{v8(oj^wEk`aLS{9Txu{iT!&lEpC99Qm-VBjCgXm@uU09 z{lpK8R+Bd?UB(KW-M%mKyy~8)pu$Zm6Akp0&jC@*C#3<~b&9`XFNEFO*N`6sB7n5F zCFI(Kn)A3E8BK|JqEQdH;w!o;a_BipL2XIKyyIQfhGe-#(Hy7ZhL;feMZQN}Q(R%G zcHM(U1}viF(9JAlOWw8|9T`&g9muNYbB(~7p5m>1{NUM3nTas?xAJmmBR%gbCBV;Fu{ z`}g3_%m^dWJ4km@orXTaE(*U%MS|oYL>f{aM;fd7D7v;sUEh*db~hf&0>2onJCxEA zxenI{#?-Hhs&!F+YRqDy9Ev17BC?h)RnQ@3RHiVEy%zf6a2Y;0npOkCq!JIlzJ{oP ztltNp?);G)jvs7o_U&$8?SFb!m#Fe%S=|XO(2I~x5Mjf*y`qs2P1II~#fulHaWES; zY-7%0Ex#j4xY)+x;__WhMCfy}m|K{!8Yye+C`gT#XKR=^4!A`4mf%0grQ8hdXW=-R zEc(f#0Wds%JqQbpYP1T3@v)%7G`owv>4iaR_^Y&Ki7}PTWOPxy&Xd^c!iUL!GZ9Dc z^odu(MzzWn;x-(W`YhHO1wQl_k|Fob{)%$*)$$wW$<-cNx& zje4`fI=m;u`nO=wuRH@`g&(3^Q`q zbab{7JtQCR1i#J2OcI_d#996JE}_t7(#oV_tLZHu=II5nVB{`mIsl;o#&D_r_fm~CLf{ztP7a%nbxMvD9ZXKY7J4EJS>V0bXJGD z31kF0t{RAv8ZHHwnLt}u59EuKZXA{3s3V`Ps?-eVAE`WnDAIm;g zgDS8zCLtC~j+na72+t%yNk3K)(+UM)uBsyAxwPX24(@G$QfKad-~MvjY24!^pEo&dPT9+tZ@{e zUm1GlgcNv890F1fwthT3Sv!viG2A>XYlc?_a0nulKffguQJ%g2isVz-F%g zJE`eQcK+j=2V2+eY$uqe>i(8=ETs_Ebl1$?U)|by?|R%Jo0Cscygz5m+ugh`&Jjva z8H2>bU;k|97q`s}%2+h(qia}*O~wzIpHQ9Oe}_ZJX=f3QiYbYXQgQ>dks^b%FSZ+* z+C@o+Hd|^wPI^F{+(PEAOG95KGJZskNXj2H11TvrHVd5Sy~SdpkTXp|H7SjXukgSk z(3+rTe@UTwyzxb;W%}UA2ckkR9OLd^(gqj3{>WVUY$6)82bS5rbSe%-9`6PS*{I8jxKKbta ztMlh(&o0hS&AmJ|cXIf9BZZ;DNa65^8bGqs{jnIU%VECMSMgI^tN^2K z0vXb@?5#VVYz!rgDv96gd9l?bK`^Z)$|=o z38z@-z6Jub%rCFfv+&GzKD!R*269d!5rMePCf7t)oLgga_v@P?8%%aVj;4&#jPRa9 zpLN4ese{BpDO54?fIUG?N}}8{+*9fVkaXx?t_LVL|tsPjnv zQpBKSl=q1f5~M|qdQ_myHz%FS28!i)!H-}~fD}>Q(~~qW^EMWFkKjHQs?c}Ke)SUE z1W1{8Mf*5t^Y-dGkcSW+9CpVJe{byYDE{}@_r{i%&A0s8+TjAeh%7B8Y9A?#7LE*# z92P%EjvR@-e$;qKp@qbo-{J0DWiR0{u$9>3UVqMS5$2~W9Gvs&)04zZOgL?hNgZ=zZH$9}pJf4YCG zjPh(4l*K{_ITj6OQtEC^urrq%s5P`1d23!Mf__y`RPV-!<^dcl`y3;lcZxN@k9q@y92KbW4&dY^b-qFu z#KNtb?6!Qp2{HcV_QM-QM!&g>3Hk7rAZL)J9uFzGZVF0JV7_Xl@$?_jZk%{!>TN~z^+Lq^nyr#x{?zLn&s?MqymrcO)@PlTOhY9vgMS^`D zBl_~syPy1y4sAk!b~l+|($EWRotU7s_5q{G>@OdSb|gm<)!pKyyiu~l-k6vi}f;J(2Iq#Aktu zc~h@RoPz)p6nQE`iFWw&ZRNdw5R1c=Rx4QE57WWJRSk;4Fy zW^aK+JACxJ1$cXSoy2UR&LW%-djA@f1jyqA~Fx6evRrZ&hK_qH}l?~1W zL$|6ZU4}t^350xL(!^4jHCIofPxshhrCJ{px2xuVai!6$WQm>Okt9>;ICib2vM*;DLlwZ(xm5BU`Mf_q3q_c8X7grGy z%~F78<)~KEw0g?tIvjwmo7CnYzPpcuP^AC}>5S3U;_OTWDURA_=YTei(I382Ua6Y|`i;EXd%cV35-IuX@Ex%*q!Kqy@kF zD1D%!;OODQ-x@kPJalwq82%kPc4TOX?!(`aqa!2V8Xg@zcI4>j=;)ErZw(C}K6Yf} zTh3nDpEDP z6RqkfwKF(~c`*p*3?|(qsqwf7!OqFVP{3Hro*H2yn=$RYJlv0J{ z%=H9Iy6#L(M1&g|q#BeCJ)gs}o3BhSyf}Mt!I_wO)p=!NZf;^`;nm}0MhM`kwIz_-WmkL)22VLi+DA0T)74@j?;IJ1SKR6)kWrlZI=l=Gobi{T@iXNB z^ADT~qB_2Qe!>|V86F-Q7#Hzgq=cXr}aUi*H*o`}{;agKP3%FW> zAwk>a!qj=^(D+irFPDIGA0LEAi};La@}U=UZ(!>dvvUGk#5m~}P5>ah7sfH!+S#d@ zskw=Tsm0UqpYaoe^yI{#d{Z($6lzGXY;y9PbM;YiC9AC!M!WHKf0^M z7h@D^kTf01L2guoTI5H1ip5Gv-qZq$SvAL;wsKz*{H*;gvx#O8&H2{TqD-IA_U&$d zy7RB?d6~B!VN&*!vn=J*p?$r00HV#u>2 zF*iG|B_*mQ;r9`9*Uo~v>1@Ge9hAe4Co9ibjw0li4-}UIyX&5j8aK-mB(@ftDL}XS zx2m$xqTSwRvjOZa_uFlel-#v7&K-P?Zn?p+?db`2Y`B#R-a9TGPMG)ijPc3&t$?=J7W=5+dN2tQBA}W7U3l~ zTmktYfSq#kQ0V>e&v_EZSM3!ZXzX>5?RuB~ue=&(x4Ek-z zzdbqzLf3E0LyK@I6wPYUD)zySd`O9V&`}Q-V@x8(BdYG3udpl$l^!>S`CZ=o@$P&7DH2uLd$(sV ziiA{6LW(NE;v8Bj6i)l@N)@;t;OmeaU{LYrP02w!%ei2OO}bp^Vj20eHgsbx7IYzF zA(0)W#pZw^yIag8DsoIm7~r`?njs)0st$*D83w|Bh4`gg23lR(uy6?W{HsQEYU11| zM`mEEnQ0vpabsy{@;z2@oJKgk74gv=?<6M4c((-kFzR=5p-)blEH!564Efnr3T^(~ z_UHa``1eUH*#!rm^lP^!4YxUw} zs}}|+#AV>Ms#ky8uNB{J)T1|&IPf+Mv!f9TOxs8OZwr5=_BFuqYF@CDBU{fSzp}AL zOvt<`x4fk$6kls)0}%Zdo2rG1I5uJuc!dh@RvV*4fw;v0gm%wJY;ZFx2?A3q+pkA^ z-(=;5)9x_sl+v57o3Ytx&~=N&AS{W5iplzRhRR+BVaud|+WSl>)|I*i7!#E_FeT-Q zN_He?O&POeZ>r??qT9Sxqt6GzBj2MuzbOXS`4NuIq205=o>C6ovUPzsn#0A{@WW3>}@7 zS(H%cH3K*rIXRo|bHpeWLNE6$x1y^8QKlfwNmc-Ag&4t{qa$ks%cYEO(?f&Nl3yLf zFApV6K!~KoFxVM0oA3z&vI-Mgl+tZQF3efk#d=b;ZMV#lx>T6+>h7H@r2Lc1+G^_A z?LIaWRQool650>A(9k0qq2?O#EFh>A7DbE-&O{V@x=QM1{+6VodVM30NQarbs6uK` zEH*+?Hm_2(A0h35R0!mI1F&A#VT_j-l_edtTPQWzLQx#s_d7q^+WFVJs-Q}e_>0e| zejcLf&epBn_im$N_GdTnP(iGTS(RXtRGWcPP6%u^vfojXA8d}Cd_TN}$waTm3O?Ir zvujs&Ke&@p$dy|$6vC)2h8blf2iy-6RT_Ss5jIW_BY*LD-e(*WY60Ct0V`;d2#mVg zeC!AnMh0SowSBT)cZ;ixFs27_9jhq-35)!dDu{pTedq_1&i7aap_19;IzhFEKfjB_ z2G;J^+dIFwl|VRgIDQV#m>G$y{)uh*%gx>QZ%{UFc1eZ_P$jglekE&#>%7^RGZrp3 zugh{%@mzLX5{jy*ZDS?md)FMJV&H)wOAV0)_-)$BZOICcgiVvo1c@@%iUCsTOj}s2 z%}kfh^l46``FjF?lX}WYw{1QcOSpm;rca-Nv78hZYsz&&`QGk`x?J~Uk{PptK>vX) z2ze-k#pHT45pEx8No4lM3`W#Ui%IW@bZ#O8xF~B&%#ma_mm5_wZ@L^uO-i^uZdA&6 zPubHjEjAWPWxfu%yr2HTt^h$E1-~HEU!2jjb3yjlrTLlwCnb#&CnQ`(rawZ8Whg{T ztn2hifrtfZ*waIpX<1d1;PXW@f~Y3Ff2au~v+amSpMT z9zH;J`gAXvlb6|~b2>F|qHST9HM&6JXCKiSBa5@?2erwH#K#N_$YZGk?a#jKHCHA< z6qy%S~np;jsMWww|r1*Qs5LtjaD*N^IqWggBWp zLtFHrI!vbMBTo5;n_Gb6A`Z+h|8h_$d(KAL0c5{B(KPN8-pVrpyU)N_S=zZC>;*#{ zSxtG(9<0*#dN4t0q8x{~l)#a80y3OlB@R)nGBTAjH49F?#3%MI!mfZ&4kh*jyw?B)5+ zGed`u9OwT^Rf(+&Cu1@(SeYNjz?X%$39NnZ-QD+p=Im_!hBN|1dhn>y1>iTivfU@D zP6=iq$HKfH{F{{e+C7G}%UWwKJV>Y4KF1`j4?p_+!GGNpPPno@6W0!KIs_ysefI!B zAwk1PVmYx7YEKB$QPr!rXE569X0fVN^3I^NkDMt|SE$5-l!AD+vUeEldl066lNdjj zl}hx=AJdk?HvMWtlxA`OOWYOhI}(Kc3Nm?4uwE54w}scaXwnu%gwKPj%4B(=!^uE} zrj(?IuQqCfC1~4WQW81q0oEIVfq0j_Vxy(&c`Jz7<{-8zG>4c`&(h45nO@S8w>a-` z-mWda!R_~(>pP#^#KiKb8~Efpl7I(aZX&6`LVl1{cb;D>K7pNAb*3*&KE7@D#E=$e*&ePQ^g1_SH$MRi zdvRg@F;iDX?Xdb5+3R#%j#pPn(<#%hv($*ysdi@Pf#_~v#U{TlY2(JayYb|32tn8; zy@M$;DKYDq8X4VXy#ZCY#-=rtGUKyYMQnfwu|=uLGxmVAe}!Qra9S=kqK$(KAn{ey zhf&K~V4rplD>#OeqYOurC9plVN6RoYbN2|HqeycNf?(U?T|AIW=m2#**Zp{eN8I2q zLocj?UQG=+9QTDN{LL-1UY2x1cn^&#yT9H}8W}&k2I8EfE3$TjHM+qX-C&KUFaDz- zV$D!kIr#ja!-tO?N#_4N+Rgv@l*WG~vx6S)W(Vztesn`W{$8_#n#V<}0FEPj58z02 z({>n#u410z3Xt&1w2DGohVl-AH}>7TeL?3fi8~{6;zry~%41b!(C0NiH+yR0+#)7r z95=G-J1R@3e*b?CibROW2M{m7;MO1E{%%xjp}z*VR+JyT4p>idcaA|5Rc`GKF{=cm zv-9<4?%_|re(=?`q~8h&JS4!kKdrQmav4>+Ggm0XX(duVnyB9(dt>B8jp8bvLAI+g z(49+-nuFy!INtyepb(3VExE-@CA5K2o2?R$SAkMXUaJ0#?A zMWU@g?S6b?=NEE;l&$}YVS|f#{513SZC&ZjsxOR_g$anE#p+O{m)=z}V!Dz*72>tT ze4`#O{15xp+B8!PjenY|M`%`{*S@u|s&lL23C~47U13ZRSssw#z{QSh@Y9O%$~+?R z0`uEqNq4TZ@|zadZZ0lkr%BoAc}gDz+5*WJWe(iO1azu;BbWghouTzE)>bWaQ~{aD z4DTm%tBK9Ee-Lk@(r}wa70+_1!)8?#4`!o@I!HhPAIq{&qTv>(B)*PEBBfTr>c(7E zQWTggOXU3F&+qPh_MZ;MPJD8G_v3A+Z};X^XDq$fCq{M7y?p+FDaumGTPu{; zDuuPjbCR4ECkM>T0l}qF@kEJQWE@+swKym6>zyyZ+4;lgs%j)zd!B;rr2vY-M~k%} zC_i?%V$Tlt+&NJ7r~3@hN7@Ge{mlI1*amMdM+Gh(_ZSxp=Eg-;J6bFC6))4{BUdfU zKQyl$XjqU_EBL`$G%4MuzV5J$;9iGP(7_%o;dU~zBL_M%OMUay3~K-jz*oKcz7Oef zmLBZZb?Dk8_qG0CP}|tQ^lvTfe@BK#4v)t3za2i>&Hwh)+yBsvlAZ)^ay7)$+pRjM zLbrj9ohZs%g(Yzd2nmv+rQmWQzyvZ~n_$-_*tH3E)4{zUkDvoBH7MI}zs4YW`N7eTkPz7`R9YKCP*`DBMTe`+hKQ)nhov(HY5xxF{fEFv9#9~4{C-6<*lcT zi*I%|w3=uxIW%#zv*u1=b7+b~6P&QjS*_a7I!yOw=C^P4@=N&gCE(2&Ce2?yEnh}% zxYf(&<;xYf*fQxJr96ouVB2jt(4E&BRloj5XFwQ$b1t~#zyspZo7NWj+uaM?*3-Hd z7-Swc=hard3ZBZ{ozvYp-JSEdy>sgLa=lVpj`nqrb+T=`NdEM*N<6wb%BSST5a6lF z4{NWy2*6>ND;AU7a(RP8)gq@)ZC33vR}HFq5BH;RfGL+iYE6m<5muOS1n{EN(SQtV zCj7)Q*p^|-!RL7!1-Ey)x85$HYO%)D9 zKscTK35u%bafO};f<17!h@3YCBYQA{1)!Y#xe|gsUG4#<+X~_hyUSJPAU~|z!9YJ zR&g%6i~c;NVJW*CdD>)XKi$_Il)6boe4KuCg`(Qgdn^$mcOAV0L{?w=0Nr)S8^@|~ zBvP$V0*gdKAM)pMc7BgOJ~D@os;Y$H?jL-#5FVb|v9=NHigzHFyh^ z#IVh*QL^kAC3w7kCu=%32ybm-B4Z=uQ97*>^mUW${`8yc@$&4{^v-YZTHj*IQ1qzb ztWxRdg>Qa+GuF#Z^WuuprSQ1Aea*x$z%HGzBuS(kCr+yrrCJahrZ-CLC#m|Cxg+rO zuW!^yd7ap_#+JodqGDH!ZaK2|2xs>U!VPvcF2#IPsWtDiSE-?T6T`%r0ECUQZ~>6} z$5_6bvDHeV4bpt!XpC7^{&16W%Zf}6fTnpGHYOm%oMm@@f|;xTcvpDFalX6+`s)eW zYjqQPyKg$RWqEb0Rd{7p=*%s4XdoUtzFc-!EN?;563SzXT9Tm7J{hn9S$LEkzg?;% z=}cJ-8LL8wK)Q3w%&vKrlg_YlyrJ(on-cs`Hnr@FT*6e^P9`0e745L{T(sJ#V>XNe z0V9_PrB47udb>kc(Df2bk}K|E5~AeSr(<8cHeZzqHyajNu%ovW{7l&4kw`jkm@jot zlXV@EZrGS$543I%lv>7hFE}%^3sYm9=t(cSF*Y{YL@C|i_VJeB$QMBrbR4g`)fG7M zDsG8v7Sh(EPsJs4CXedhwl-bUHL-H*u{&tWPQ=|x+@DRTWnM}VAdYOE%CsV0H;(~w zJHNjB!5wPP^o`#Ah|*TJgR44iG$(d}L2u=C?NiQe&gBOMTiI;-M&_ob$j7}J2@dgy z|6)56SdufwAp2$@%1kwu^6LHU zwY!T+Ew23-ABr%8oiAY-{^AfT^6w(?BBpP~L=GKM(w2n7F3VdD94XzxvlSl=m}|b9 z0>haE6$zmMIHKrd$$%-a z_R-agJW}dG@9HUU#d+)g}*wRD|H6 ziKY(>9VV(W(KCChh;1ohvQAzqOJ2$W5nGI5UX5W`{k*z4f>-9Y8RfS|({iA-cMj39 zlEP#p%Os162gH(LZcJ2Be0CKCehmMSY}VDdD4xiE6(?%)Y?B45=tCh+E1?)$QJrDW z4{v_7`@wCB{(WSU-kR1i2YO!!mNEg78c^0~5>v%yzPiEbm8iZ_V&X=riDdAWENlJo zU93`a@2cVfYz0UQh>&u$HF?)-tJNEwQg9`cZ^sgYx7dG#Ti38=Kt|40SyQNaGYQ;F zY*-xN&d*_h-;k1tlM)jmYmRjH_Fu5p464F@{Y6VcYk{p(%FZkscDMVBE$o!T>{@l& zS)c1EecD;uJ0F3bHs#c$Fb#s{_RfEx0y3Z0D6yruy>F#0XMCKbZTy;Q4`7_)_7#~f zz7-Ns^1RzSpZpn9L32kq+O4}R7vlW)1&;vH8GLGcwzn>iLg|eSX64XtkH<&VARkP5 zR^|wURm2)?X4@joL!->3n7Vd2Rbs%Ge&7}BTviGd63q^$N=k-eEG-%2^YznO8g^zQv zRjMQ%8iiD>P^q4jBzbL4ua@u3{=0|iQQOU@$076wFul3Fv`0G~kA056%d+Vqnq?@7 zXt4x(AHbxdymsGcJ*^f&e~FMkRW+)$`kGU_3R{KMNTwaI0}G(lVBB1jZPLp~pP8{# zmMtmEau+jc>}=h{I%T%fRGXrSEwJB*YN*)UFFv)$ypfmZ@qILU)Lb8mV!l0BY zb_>Sy$SPT9HPyU)UBT&FFiP>DR7wK=QnKVP|B->B`U6ojs}0>)p}#p=nF!Fj$enz< zSt&a+t$CkW(%?!9EuJcUu=B}>AoYnn0ybjxA2epA)!RHUv@!~C3PkWDOOb)mh=_Go zGb#3(sL-ET!82aG({8K1LY|2lo^c${s^{4TegjTht?es*+a*FRYG+|~pU@wqSQw17 zIikQL3+4TQu%Alf@4gfkrRE;Fu&Btsu`M2%B}S9p3x8F6vx0k*m2%c-=@#m~J7o4c z-M_l96%PWL1B1<=x*3`2+hHsT4Y+U!Ra{0zY4KS>xnVVjYz#hnOB}`^z^P;SodPC* zQ3^o~GJB&YlmhuQy@~`|eDB)ZRPj4$J36t8vjLOb(S>%8te9HR)-5D;X2LP&R?CG! zmDwlcY?A_NopQ)Vf1?B)X&BTJbO?5p^!%@FdumT>&D6KO^GIS5t}9k;Lc1OycJ{ROo~ z8;J_;P!-2i7Z70}O>C+59DbN>O$tJJuAyNSd8B-QHq13YtVWV&sc1>&0c4(r+&%3X zD_5;TT575E%2(vbuxC#Kqxr|?Q;oIhNA( zafzx(+s5{yVxcG-YHxY04)@uWv{NgYTx`GA&I%8G%xl+~D3I{1O>>^L)vSgiZL`(f zZ0&t%yHi?zlkoyZnck+4X+_Oo#3!&B&reJ`ZmASv9q^}YKjP4k`+NTysc9bDR&1}t zQ0@BQ?STxlSrnIF3#9-K}5Rg zB>M4EzIF%|ej}wO<*W(A69b!u)DDP_3~;=-XYIAqiI47u(e z=1^vpLtigUqqje=N|55WGQ12KtG-@pv$wzCOkJ*rZt4J<1>PB&essq-2h9Vmg~3Yb zR&?b+5G$3&=WxN$7HQaH9-6t?*@ZLni|1!A&McVF_o{1t7;xQfRl^${j3XU3$F@q& zB&7v7v+R02SPwQcX`Q^1Iii$;0NAp0YZjuOQry}Tz;X!FXBW>*pPMqqpHE@{8;&zt znVC4B{5&X^+WdTeE~N>H3>Ne;$Csa^rgh-u_t2Pyiaa=x0rR2L=|UNrhi#^%Ye zv}Eud#ul{Rc}TnPAo>y6W69F=~#ZPk`mA!k4=q#s>oZ95sK_Q9tQKl&y$fi`bE zXbVP4^7ZD;2lqZlI*Bv62Xy$FGx}ibmQ9idi$nubkqA$ z#@Qu?(quD|IB$(iyS}MGL4VG}8=FEa{>kU~(cztYS9d?VFJF`;fkjK?izQ-$%~PSh z{rd1%H&I)_RqRuvE;B+Mw+*ePUSMc|y$ndl_`$YWMq8YY6u6>H0n#f$dFEefYo7vG z@`y4SUIEEwV!MpLZ{}E#Y$9c|QZw2`F&kEiLMs|jA^>mehOW!p&i+Njc(C;@{6E3@ z-skPP_N3Go-N$69DY*$bC2Ar=;kc2Wuv^Trn>h9Fr~c!Wu$(MSID(%<026h<#D?SU%Lrky9r;PToFiSiCScBB|b+d zZfzrTYpbNK#}cXYsYO3BM&&p!i#;}eVPf*7iL+CSFHg&&U$>4@=E>0)I<`GyhDaI873&iMk=ON z2A&z~+QBaOfLQs}$S+AHfNN-bg;sJgcdcSs?foe!<~2?2Ke z)bz~h>A7*rTJK%x7T3za>tpB6;F4b*Tymq; zL^e3R(g>c1{|oh{C>o>8fBP@2rv6IG${+m{f1x>f^VZIXH?gAE<}K&pN83AJZi`oi zdO@l)NJmOy*_Ye9pZq~MmQiCLzt4^3ot^(c;f)Gs-lU8tMqULHORWUMKiX!Uth4)* zo2GjnxBAiM&L<$u{p*i+?tBdbG0g*2y0=*F1CdD?pdUA|+X?kZM0&uHy5@W9R6la- z*6y!ww6#4JER|>7E3Q@p5J~7Lc8hg5m&g$db&a(KF$YB8wN?vc!77~Co?8(l;u2O7 zDO0AmS{SVPn70adNa#ht3lu#>AJ|(cKPe?+7&KP2UJ=Xmt#Fw>_Y&@pponGwGY=1J zVA-B%#E*iq*fvIUNNA!OW}8b%O>H6zMt5DkLlHQCyt{Mt#~|Co3!m<6UMIE67dKFy zLsqz*KYk<7>fx_$?J&CBy9UxdUa$>elVecLGOh7qgMBcwg3ul9Zr~EJwyz-WW5^$1{U@6^8s3CIy=%WpdYUiq?ELXBYi}Zk!X@qOjLB|lzyxv$Qpy75iekb^{3s_5G^a0p;{8NW*l`9{;O4u# zAOCv{y#O^tWkInHOoWsg)mSLA)E#LoH?ij7!w<=MK34sgv#i7$K`rHn=<;CcCSfF~ z>{W^`Mq*h)Rb$S*F9e>!P$gm9JMyqGhSw6P33IoY1t<(Cvd$+=sJNH-94-6Hp5wWZ z@5wcjh90IXs9*QWAP|J8I|t@zP0I-efsn1sTmz2dkyVM3S)xxlyb8*xQs6eI+$|vYmnF<9oo$`i0Jkg&g!3VH=o8%)9 z`9u~@l~R!#lr+b@85)~8qkZ(&@nB$^#QtRz5g?e z^A9&ByyeDDB^Ky<%3l2VH?kYSuZ`3sSH zqQr*lJEi_aeum*FA_GJTQOx{_E==gZ|J4^92j5XpXZ)m}^M2UyLyrxMsNend4fG=* z55l(3{0!_3y)vb}tdiZ6!rWqXTeKl4vCUqowW26#o`+{@Yt9jKDZM9{? zxF}OvBufBbcos7{36PrAW&iLujJs7;FAJ@bBD@(4T5>|vRbQaQDtDOnSx+Y8&~%bY1!c-1_wbT?FCnQ!84s~oiq0F{qnk}o(j zl695!b)&`-vntkWsMdKCi+DGCX%cvMub$e?JfAz07cRn9Euz_;{5qPoHm4aZwDO0M zeoD{JdlgKd8Rx^OMl>E)b}4QR6NUwjB*NIn27F-kdkW4`Zh=OJUrO4^CTkO|O zDj-IwlfSqyuSEpw$@GQEj3*Z(;U`oNgyc)vvRMXoTj+3yaG6oyOAlx+1>=$BSh1J672AXkSzs%hz`-PLvNa1KqdI%0AwFJetPuDlO+qWdt22r(vy}!jLr4L&m`1fYi1GCHsPkCbYUxn9FKF=D+9~x zaLV_X+XAvqtT>7tl0=bnJ*eqI^&qChAQ@>1^;o2s7t^=YPK8_#lGvV|t*wVYzx(jo zb#ad2#YdmxIWt-q9uiI?#PacR$nI}IGczDU&T`^VlF?M3Qr2cXj;`p_i_SlxJz|Cl znMUnH9y_j*ejKR)!6V|`yC4(Gz%C_beX*?)HZiqlt&(CuF(Gp2npU$Y)rQIz#*R{G8X?d9yyLBmk^7$sh)nFaO zq!3LDWO6UD9~p|}#TAx7!n|l{po~TWAgWC1OV|oZWE?lB%e$|FNalvc)eT`}8ie-; zmm@I_z#7Z7GOq6+;R2ZH8#j;_{sp>4nl34^C{h*m2A?Dsxm}2mFQ(=6uiC;v{q`=( z!x``pS^ou0EQHzp_-;Nnd&Ctn3KUlE{}~zb-)(Usb1_L%q6Z%D|N0;ud)k)+&L}z} zJtkSLK^j2XOf=?Se%O{!Fkw4FV^sB$5YS1vg0Uz;MXT|YZ4uq(^D$Z7P_k&ua>7Qn zitT{7?$?{^L{5t>pQ_ zRZn`V-`V--nktq-9&TEOW=AdZhr^8e>uDD$|5!c~kNw-Br<-E<=_k_UoxT!~bg1K|a&12inx zeeqN7AI!`>apKel z-V`4N>!yeHpjR)NkfW@y`sr#=F@3DtAgLCiU`-*=xle$soI27m3^=lCWOE{fioXwRsIMSe??~=XWuq2e4z}Ow`?fZq`2e40`(u zJG4q=sWh-=lgRkNY$Q%pieX+YQp0}v=iOU(q^(2RilxASVA{Sa1E<6sfu$lns2yyR zv87e1jb@bF0=#mDSIX<1O=2j1a}C4_k}lr6jWu2rt0Am(hUsma!iLgfn;E8(GZFUe zUwoRkIpKV}gn*y{qSMc>0lS2!kFX+r_LJCbnvwu$7Kp}S7vi8$P2jl=5n zq%{+*#$GJ@OYwoBKSS&mPAYaQf+@vsZ6xO1h{B$nJqFmwJp|v_h}GGiI_y%)CouMm z5A4RA>;~=IKwp#up7B8w?OhtfDT?+)Q2-pFVgda6Sf*A!fnh~-#0A!EDVOURgeg0; zzXtKOL40M9F^(QpQJ*Ig-8w_g5PShYv%bJbDPO>vWqpB{|74-AMs4L|fwh6}ZS;kUJG;acrg_^o#+ zzKHu0{^i|>t;=WYDRW{9A7_MZp)VX}b-5ypW=6*6?oP?vDQ#IoO}&ED_arn5DS|+TT0t?)2D{Nz zlhAZ_O%h(NomND0Weq(TlBuqtLLt#!k4zK`eO~OFp(e9&wq6JYTd+k;zEU)46K1WRK;?LYo^5|EWsQga1__!5m>AAE}LPAs$h z>J}SJwjX?b?H}=S=e_HyDjQO=PnA+)Tc{16*=~qN zGbH${LVHSQkC`_xM;b;1NQ2$`=7-XsT!giMc8yL-6pUnJ#yk@FS14&xu z?EL&AZP=kL5KDcq^VJo?D{Zo+xcx+;T9XYTy@fInp$3k99F2WTEoB%Z?tJ**Kfj4f z)K8Rj*t~%-A&w~iz{&}ugB+KESZ)-78lqESJk0*R+dKdIW58#CzGY90+qzY$*tEP# z6v-kUsLaxauD{1PBSdK|?f;JvZo+<+Pdl)IUFgw?QP2^b`Idq%Ut4ygx@u3GBZ(!# zW2Q$p>0S0kVUbwX@p^!cAqCS&eM3&C_8Rx)77mS}IyQku#s(xy`d-3#Eig7y)Tc)dAIUQX!UBBE2J*u0Q z1iR4a`)>*)VlNytb6W8pz-jXON60!fStP>g?W=&z4}Wz-g7wKkHQ|{`a<=>)TG+pLooE?am&*cAS^99}i@X?QJnH z45ytri?T9hb028&_1n#d_IC53y`0v#6Yq(KHg|DmhDL@L6Q^dyINSQV#n7sOB0Bpt zvA5fXn!qKR%L)6vHdd@1bZ`dJ{&H`;@j{C;N}o$@ol}O`h6fbU(56SxLgEw>jZls` zCK_)11VV8jFDr9k-Ope-c~G&?fYIt6N_0zB;;N#L?t3!OxF;4EY^P?zRt;5tB4oJ7 zh!;MRh!;j6+Px*5*kftt(oZ76H?p(3oZYSayT98K{B+z5 z_k>~65wcOWA3Q_`ozq+bo>SdPIkKk@!;d&KpT6Cn!8QROFvvx^;WzALV+k<8Mvr!9&RZe)}+<-M2AzNpIB zsubtW)^DhaHt;Ph1X&hx-n(R>{_!o+0sOy-)XRD@A7ch!A_FR8DS70{Tw6l$)}t0e zvNA5BGnmj!C(O8#P8bmwGFVE~*KEG#y4P61hlI9>Sp3tLoY#J@e3G~}BQQPYLH06v zQn4WL#jr<_hMq)H)mTbZcKfXcm?r@9dXOzP5Mr0Ly+u@Q&k{SCq1P0# zgXobNJ28clj;*^`9owv)?$S<8Py&N)6msb~S8XwxkD3?@iW$KHY@d+o| zTKgm?GcQHdLHG%>q;;?Uuab%!Zkr-G;0|WL*wEf_(&n1t z&00|2uDZCCh&+|dlC^!@7oMZ&KnZC9?Ti5#@+F5|pB{}`vGx0i%-%po~d zcOYy4%~F*n9cq={nueJ-%+x-Olr{Xo{6`IpU02_+`z|NEmF|soJq}m-W~#XM7z8Zm z)yN_L{tT6f)K@r|3r7wS{oF7|5IIyP7Ysj1IbwCS9-}zdC11Gxu}7UU6&ZG-T#^W+ zt4pLRHtCc#Xs2hC8W3mq(F83sXUTSc%ObqJWNWfo8p5MKfPx7oCyADp|nX- z*PgjlgJ_0r6$zAg*`*Vdbc_*KP^AX67Emra_?JxS$wIm+^396+iBXST1;V z%=XYI*Il2}{QGq}0om^!D_#i)0nXLxm89y;GpgbCA=@irXt`Eqlt?1dUm*1~H@6;y z7y#i{V`hS;GbCP1L{B)w(tizAOrc?h2$E;I`Q1o58{J|-vqdCplQkQ>srWZ@V2BNN zCzd)($cgFknX-8rjY=nOHy~?gIuC!dNoks6GO@H}NK>&jK8noOr;I3Hga5#J@W(At zk24bvqNJx$u=u8BW#nUBSG!X#(AW8Ses3^Fa18I)nX(P;Y&m@tnd^8uMGe2sDVGS} zY|bs6!};|MSQ88z{^U9XrRi98;Hwjp8i*T~^+uWKG#hlx=_K~K1G37)kG`hzrN8#C5U~sRQ=g&toL2QxeCOKpWToJHg12o^8scHlBJqu zW*%}Np?AN!ssh&4Q`qi6=6|Qnb(NC(RW>AKygQDCB8kL}QuK^FpM7w5=gz0`{^V5D z_WhWgOwfA}bvS~TBvMZ$)fIjC@($~q?=ptQ=d(Y{u=lOTsi&Ml=VEo4e`e~jG4soV zds~D24_bx*obBwm`Jm#}{fZ|smD9en*#gLk3_8|i-}K~#lirLkM+a`?1AY)J$qZBE z9=2fQZ*HO^5p&Ew8iZt8gYA+Wmrv@MMwJBRMy*cUjl7gd9iH87quOrAaP~GxwUo(= zz)=E6)2Ev|pS|ns{Nhh0KM>zRX0FGy^MQ86M}(<5YX(9*~~ z!dj@KIb-;u*V|twy8)%Dcl!L|(VW7gPCfPM*iM z0g-fX+05m$ERx2VF9_9!NZ*`}Kew$Mvqs*hc*7~l4V^@G!zOik_fC|~0;A4eo$-uU z7I8|~Kw@UkJD&^ZVM_J{Bfa@)rq63rqnps#x^Q;Vp=~BmW@5JLhGazH<631pcIyc% z9aokkvoxA|)=nS zT1pn#*?8z+bW`j@!v{4ht#Ok6Co|qtcn@p zq_S)Ygmli-waiJ|)m{hw3AaC|F~q_anC4aGd5NdvuZOZBq^%ArogY(CJ7daBGQ0n)V|ZVP=4WNp9`j`Ga(a zvVv?L$5idOj*ia7^Fh_G2Vqlh6XHugxQZ;%XYY1!;<5A^30B?U(d!{*L=suY>YOvq zWXX+G5fV2k^&kxu4@u=hNFuZg?ow z>Czgqjamjtq6$M!FSOK4!r#+ZH}Svd>h>-X<-}WKe-x~f=(3Wm8{6ecXxh! z7t2Sa9etZIG*jyNEYA=?vT5D2=Z$7BiQt$w znm5F8CaqtZI^DK|2)C1PlQN^+FlCnT*Dy*%T)ioBs^R%99gC#QpwXMoa~;PZSn%uv z{jUXzopSMbx@MgZX(w+F4~B=P(6gYNLIn?iU-6kNHFD8LwYVC>4t!G-eBokgHe=uj z((YA73Hcs<_Ao0uJI5{|CiAKtqxeV=pK2La@)*%7GPSFmxWky8q1Rt_p!;=-RS+uq zC17Px$pJ%3Qv~T?K3KPBrZ$l-u`Cy*B}VVs!!?pXHrjDlN}`;$(P%}l%VHrI+5&dgoD@!j}UJl6rzdh zdPMZvP>RM=xeJ?|8d%$6Vj>>1?wdwayYye4f$W+w`4oQ7F(__qE;`2mI|8bVaBRYK z_-u+p0AOA7LaM?bf?cQxs7pCzOTw)wJs@4`RhKs4tdsC1A8$d|&5{P_ECi%E{l=k8 z1jgKL*P+|nMDMm!5QzfjI1%e#SVBf(Mh4$IO^PhE%hbdR0vNt!Du973>Y=mZ)g`WJ z^ibt*L|rRnJz}W_-9*5m{z%3^0*_QGYvVlDI?PKyQo&|X-mFqU6|#Xts=JpRDq~@k zrnB441B=3fK&-zK(n9t*M_p{*a)~2$&MbG;7 zH$b#E47o8Ib zd6R3PimfV5Yxh24CO?k@CHv!-S03E^OT11EfN}TECJ&f1lJQ#x{lMrc=}=2=r`HsT zE#Y@WVf*7P)^nm!UkzA|f9DDi!ITv}?N)uS?40x71b7F|39ka=|Ai9WEtL80IGXJX z%i)PZewr~ZorwW2u>Y4lucldXq$O@$3hvs|8zk;?LD4N^B2^!~4Wcn*ue`Bbv{C`$ z0RI^XDt^80u8h_B5+wA{ysiM3T=C!Z2Hbi*^p}98kH)HgnHm^y%j@n&H1NYlP`6$X z-}==OjBEhNPHk+&x>a)P?pU20;c$_GQc!H*M6h*!R|I1Ylj8XD^4<1l6{KZtYG)74Lt?u6w{zIZZ3Ojjp5O84dQZOieRtva% z1;4rveGI|h(Zh$oHFR`%=;+8W{5y2)$j}ho9~v4N9vwOIt>MwpV@HmTj*cD~{npU% z=;31{-*Wz{0LhaXQvd#y{Lz`0gGC<`mA}o@cuS!hZsc-(ll^eJwh{U(t957k)OolH zYXxUyXy{lT|NGrsj%ji4H7#Mn`=Twe#WbX=7!2|cP* zLi7#Iqj1Cx24Rk5Rdk^jrP;{K*9$8uxa{oAMHokfl`CaE(hH5HvR}-d^NU_J;=~Pj z2UQVLP(lArXI>1#IfHr?(zPC!1*qhSJyIB!J&E@6C{y*hqRb%Yj_D`q26M!O`WR2l zTu)Hd^t>ii?bIOoQauNomVF2<|bwqUOle-{ed&#cCh{s zX&l@zbgNicayfT?YHspHcz@#5^ttJUS8>>9rWa z&Rv+DpDH-cyyr={=2GD*;Xpc;3MSepd4Npi2xk1MuHQtNl0&cP`D;R_QQPQX&Ct_T z>Q6KjkBji8yt5wqY%oZyW=^kW-kGiz3whvM;T5-f36S5J$HeT=z!`rT8b4DG0+3iw z1wakq_45-BkgDOKf#K1iVdvuf1S}$a7;(O3@-ur0X6#mTfJgI<>dKPqIj;hfd?MnD z!bU*oAGsC0Qvlupwg8@jz*U@{om_bJ!jvOf4S@QobJLT~I8bFcg2$cL@U5wt1zauU zI)bXG59-XnI=?V=-Z?bB)bPutk{^x_@(YXN4Wi_SUeMnQHY@E*c(jPmKi~<0l5`$%#Svrex0V@hE!{rXC{izo93Ck$0J&Pn!+v7vGu=d@<&5mb ztT)$UjM1$c6%Aanz8kQ>kss;F6e}fp^M&+0B4+rDe8UY_K->sm@0>godOtk$0*G$V zK1jnw51G;zuwxv7zH?#_K1yu>5DFT2rPT{zs~76_5YT-FNLFW~xYX)}fogz3Qf<73 z+Hm7F0HO_Q76;4)X)d3f_Jr|IOY_8+`Cd&YSm)G+%)6o!jLITvKWupD`NsWGZ`hZS8c;9_K=2~2a-TAb zLgcSh-Ev{oEt`g`KG7>>ahRVzd*PM2eqDsmYQLBBpgJnN9xV*G2RU%)=n(V{FPBov ztLb8VXu-%!K^$3%dL!gCxryi|)D+UNB%JYEo#{~bmp4!5$PwD1sTjMKc6#p|!6Ke1sNJGqQQT zj~gVF)D?-Di85~l5GyvBd)oOCCVS5(4F@VlAB~T{zOj4n->uv{G?k-6yW12qwENN3 z>=sfCxm?ojk9Qw#Zc7V>)Y`^cp)NRyw;foi^uF;tGU+JX1YU&3T%#6YAr?+YavE!g zi1F2xhu3~AK!QrakFUqm24>=L_81VG6Vc|)){Jf8?N=Bf{h&+^Nk^i($eRyB^MPze zKfYu<=74N<`TD@?>I73aWpzfu`pNo|#H19tSZ;v1GtnWcknGMJCV-=aObr$#p&$y% zLn6MFmOY*3KpZPY=AE1Ec){fR6_FQ35Ky#i`eiRUsJgQ-eSQiA8FO&5WA>`AxR?D( zqvE(+B?J#3U>P)VSI#Vnf*LTYTG`mqT#b*!yq?C;I&o8QbUVo3%T*( zUYRq{a_(N#ERY#Q%oflfKQJJUVL4lJWe{(kAR|cK6JNzsS?Utajx(oNEzw?_#VS}I z+KDCOf`+821U_-n2&;~U9t_hM-ibkbw(UaT5C}WKM*FoyD>2t+>UFtQ02}ZCmnI-8DbRO!Ap5sPgsaJMVsM z=Yr$&+W|!1{ebcb;jyRpSvE_=ex52vK{`K#3BN>`_U&!7(=?e6wJmpMQxxHyw>K<_ z(YQVCky+%#vt$x<9VYX?O3Y}S0*nJ98mlLUPs^;HvXi{WH(1&#{v7y-+x7-irgD18 zD6asV-p_8Jr}xh{Fz<^tyQJjL*pmb z+`$gX+nWreT(-L>z}1!M9AK@QZ9?`fpQpMDawv9IY$IxCbf@`xxBG|gOK8aVT0lp?$^H6 zE!NTETl&=DrzK63PWGE;B74z`jK{zKGdw=9bFvQL6-q8!^QD+2Tl4iuEAR@gqG(uY zMnv9g1Tmp&&Gd~-VKJIB83}n@W{%_ZuCjBIW>=BODw5^F)hZBToiTN-h-(gP4*HkB=R{&4N8%-+$dAVaZzlk-Syy5SfDksKPY5o2{j6MVJte@2W6gcSrDu_#8P9iMe0~8 zigir~`pbLdX7tnj0a<*X$2NL%g}d*rR0HUwNc$WUL4N+o`+Ola>H0ES5D#wo(sR3$ zwUa+=S?DC`g5BA2H*ejl)8TOHZ&}T(HgMR8fYdUmvJzmz_H6 z0A0I^b^|X>z1rFLQL7hftzPh3y)fVEg%=;6D_7f|T(QJzhyNC=C(gZa6Lc zZc@^##nbd&yFvn=&aFm>D>R|W1ag^iI_()+Tbfu~$ls=DC>5#2JhaTIr(0sGRHABm z@)3k~^TvhHuh!!wbe&7y21aXD;-*H!K4P^Z5=vr@y{c0InaHO+V1C6Tm#i9ff{37= zVGk#TIkl_bgw;WF1j^CNx?q2(u`E`1t>4Vamr6ELw z2tfv)16=TbYEaP*UpV-gj&Uirrk3lVQl6#dY<#@nt0DMme(A{o4?6A)bfVZx7Tg@C z4{NIZ{u^g3)r_8S0OLUYn^+2y8tZ=|i{RrT__gTCEW-2!$1Rn@SgELXRs+5SSns}n z?dibfc}WVQCr1jf)nW{cGeKR5dMG#v!>C&=dLr>K+siotwa#PU7K`ZXX0;^VsdyDE zbc+`DMzxHE72MdPvR~m;%NQY!4$dy$vRV^G`mh>MQ)a~qptt(5nrpDcJ%oPB+`q^z zf>H43A*B5E)-JulJr>^}VwV{P6uhKlpM}^Ml!R z74`i;{exf#RPn&PNQUn0d~pL^l>T@ZQ%_@l3Cx)Or~6zK!Ybw|)2E~3k^YGN8-Du} z@>=@rLl{)tE7=~7^s}MPGRuaxWRK%x*TdL!hJ+c_W|Wc>z4CNpbHWMQDvgRl!RGIG zZ(rld?*8oa78UKDB2*VO)uj{1Cs&@>!Sf;>Jk?-ewE-jd-}DY#^vFJWka~sgdLAfy zRgH%VcU3qopxKzNx2y#YyQx?Udmt_{v&WC_?tF5MYnT6pJVky2du`i!c=IDOPu)$c z3Jj&HxOOG63vJgt)APTBZtT#DN5Y#lD`e6LY3cQjw{%>gl#Rk+`D(ms%!znsE%7#% z2Y=rXavsx3#xul22hDK>bH_AIeCxD6ln!Qpn{etC=8Wfi4;EbLsBGkLUSGwM@|4wz z(!NEk4i|%I3Riwdf_CTb{oPNl?|v)_iDIfWnZi94=prHf(*SzPh*+c(vkENiP+`rh zuNF}0v2RO3^p1INY@9SI4E12SJq(UhJl%|h@8*7kur-<4KVOHWosaz)QmlQ=T^+if z4o|VCL#q9Mf78FTwEqu}4#n;NqeDl!_W#Fc|JSzv|L+U5_m4QUp<66_1v9bBI=wJe zUGb{Ui4t8EJiHnY_~owMziapJ+Wq%v_kSww_6MAkrQ?(=vWA6L&S`21VnS;j zrQ!>x-{gWKIi(VB)JnAXafYn{t}}sfeq|Y-AHvb)QGp=%$u%I@bGsGj+0H7OA=_}F z*#s@!yo*%|;aDAE`C{CwCpJ(eoeog|hwOyLTVl-=c0l`vgM`bJd0)lHn{8$u_gHHig@o8_1k7aivRj_Vg z=fmqe_paLQi2io3-rC)~#c@10cCK9CFaMP`69w!+VO&Cmak~`#z;wwIRx%Bw3^G^{ z_BD@g$*ZqpIaVOe_z%;@n0XV4sG&(7m8~?_pJ0`ZFSa@G8F!OZOzFfAu-!iReD~I- zwOyL4e@8L5%|0n~_w0+(<_UXX%Q}w(h*hct0?pa;i?s$y8zj}a)f^@{OW45Sq^ZGXhO@G~ zQHY~sZ?(6D*@9Gcd1vy%MQs4gr&Vz~EjU^W5*T*}b%EsULb82s_Bol#5dDFEOT+)^QK zDaCCb*q)i=9td3}@)%r*l_U=_HsYtg?a}8(Mb3f;(rj(j1>#9D6x0Ushs4{dZ?Up< z(Mp>qnjyLzIek8C%rfjVOnAZWcgubl)%#l@w0SDh(YbZw!T$KKe$!N-y+1e0Pf<18ea4H@kPP^glM!T5CJn zzM9c6E2uoahb6_Yw1JBWOpM{-X~D;v71Qa+r6O)5kMP-=Clq4kmO;gHSx6CQ?S|vL zEHhMqFX@C&1e6P+N2R#Z?HZ4Nfzi2&xwYSa1BA3Kf$>b|Zdl1+2?ULo^(y6~zhWkpVjw>x(Rx0r4O!$j6an*Xl2%DDYE9RAD7CTI>2=*j! zIA?g2k>8aN!%aoVV=3)o*`Y)Pe!4ZP8-m{r!SDWcZvW>Kbl+S6n%n<}j*T2i)PFg4 zbf|0pf2{Ri#G=P@0gMa{AC4si=;i|G`UG@+0uIh6fW_5EO9x=Jv3J)3YGx0<1(F-p z&IK6`226C?;ZTPY9IEYUkm75Q@Ha4eGh7Zb+zwJTg`743K;VdEqn5DQL@|e-7`Z@+ z-#043-rq8mCh@T(91=2I60+P9(#qTlNW@eSnI?a`j7rvPmS}`(pC*04Rl_ur_7vXzQ4sj?+zG&kpF>VTVSf-|iaDfWwU z(rA%oyl85~Xll-Ag3#vQIf;N#qgG@6G2&Mt^Mkl$!OkA|o9jYj(*}+t?Y3DO<7~}w z)4+oLS}>+rPtB73H#%)7M1kx-(j7-7j)Vo=>-xprPhvatsl} zmM*Ck31CqrU7xg1u@2p6hptlTZ%h9J!eY zHw_#z@e$QB!cwgXl+dm#?IA|XF3EGE6YSaf{pSyVdOrhyIxe@@fg64Me)MUDblStG zM<}0z?!(Zk1FhoHp_i37WMgaOI8$zMmEJ4DOsVJw9G5+q8i2f!;OrTQJnX41#P{ z+*bG}usiVmQczz#4!Cu>F2qah7T@em*@+0Sh!Q~{^i!r@9y-C z^$TB{2Y3LRjwoo3nH8>h5RvaYxCe$jMakUodwYl@zrw>2+5Z#ETPZMaa-lUCgMO2ven3`^n^T?@DjYf3# zC*&7N-lR$jaGV_y@u44ST=s?kVHLS&>10i~*#L$W*Ax+I1^xwIX~l~Gr(JYfBy8Sr z2EBT5FanuCyeO~n1Ih9-s>v$W@LdDZP&6BHHWhM+tUE)=qL8f$jWLQD$x+EEjo>I1 z<~L2ZHu_*&yrKQmcIhp0W3wFXjS24l>WVo(u>l@_e3h%fNsa5yy&Jo?D2oexlgBwy z$Ur>tC4W5xXpN=OHn#*yq?MCvy7oGcp+$p}%#s-;LP{s6j&>7l10z4Yx?Dr}iOUB! z)pD2w7HDzEnNB-XI)fzx^V%llZ7@kciac4FMPG(2oRE^h%6 zkf8*YRAiJwT`D;vqpLJUZrqalf9JP%cm9JCS~c7BJY5l&2rETC^+c!4aFEu;08_N( zZC1?LduFNx23h*;1z7%?yN+xR$kDKAg={8>030Pj9c3im29ey*C^F@GVr5^o4|a-2 zXAgT*>*dX5r_1YEkStosUtab?4r=nKj;I^Us6M#lR|lh28(BIXi}Rglh7KP&&i{3& z$t5>h&9%4c= zM>{smSHojGD7a3dFAob|ah_e)HQv)Vn_y%k4I4fJ%qiHcDF@ec_r&(X2g5-6=6#CZ z$ovjrS_}O(7|{yAHCXdF*BbXJ;hpOtjf{1yFyv6Fha_p87o~_rXFX-DLC||)wCdNW zvVC!tSE@*QD-5Y91t!A`y^3&npCXb7Wa(w31^*zzxPiaJV;$Fmqp@$KsMU89?WWC>8G38qILIBH4xC5vNHBGkLo^n$$M?jWL>Zwl! zorkd^QGf8&H4(4@3x>HacRsp?BFe|t^M-)H111QW^^8SO!N>3Gy3}&LZ;Ex5f%jit zd2sJ98DR*I!Q0=q5eTcSVJT=k3tiVR+cnH~|JwBb=P;%O4RoP#v!8a=e1aL}!~Lg+)eItZ1HsY{fE({9+aQ_F zo<`Ge9FWcmy7~j*i#(ZETsrN_ly_}H#Od=2D?poii?s$OkidU>`?b+HUjKndA_E2B zQHVK_0?tJfHI_uE3b!hn5pDPO%LEd_#_E>16C;qgTv#l5a=zj?(O@sx{_%z zSHV1pDG%;lfxA{V5UzrHw*leUkrM{qd-zFIhYP;3Ww;&3OVkZzvsOH(TALmh&X zZRp=?)s8eUWzwpBgbbfDz-9yM<*!sFgKy4zFR;?FFR0{{box=D*4oDU*b4&n=oDsx zLWx2vC2tMbt*C(SrY=%?;AD?Fx@jGxr9`wQynoOKE;})q;nHy9#?ICa)^#UK&-CmU z(k3TwoYc;tq5SBf&LALh5dcsN1DJOdgpo5u7OPQ-qNzS6F-WMYr0A>h;LC5E(S+&c z1c=X-GMv*Ym=OaM9SE}!J7 z3cTsi_>f!n(wnbD%+8W*=?a0ALTU zljB%i?Eg>( z3qe#38c}%z4xZpmj!YmGw%K%|Vez9?lvZLyqVVeOolR6ZH0^^t$OtzmThBLJJ3mXu zA*|TCX`xYjv0I%fAO1S!KAj~c*-a4$H6>8z_yRmk_`}5V^PAbrpCLVJg=tKVY~DI4 z)Ze>Jfk~Kg{aunaDe-Zkxp?}!?cGoAW~F)Vil<%iwCnEI{cA`5KQr;)3iZqN{T7Xz z$p525iTp3aM~-#n|HtwNLQK#=Dz_R0=p;XuJ8A#HF)$T|L5Mpa|8hAGFEQq!>^bGY zW&7x=ivT)->6Z-kkCsQP8|WUDd$i_zK-FbK%qs2M2x~hd_>=W zpot(f9x^UfUHD~Zun~oWM4~865?&&;RmCl?mE9^Oz1OimhjKaNeY|TlI_9)98w{R- z3;b@Va0GTs6pW!}0$B-=(yQ_VVSOXQ>&yf&>*A^i7D2Bdkg(u!fGU-VYP9Ytm=5H) zv>Ke!Vlm^g{m6viIm*A?B&2=s0dfn=D<*-XCU;l9bA_0I<#LfKJ;3&0YZED z2Cm>DbvE|BqhpBA*TXx4kaO!16HY|a&H2+|y#dC52~P5j9I0i*yTTYCGj{TTL~2A^(sQJw4WH-MU6=#M z-WQTH^&2Q01!L3xbd`tI=1 znDhMsL03QbOnps$PyB5R%9t05VnE)tX;P%5X~Dl( za!z2=i?~150r8=UMW6^T+(Te{?D-gl%su%{b><^Q_&pRWCD!l<(*2C5$6(@CqPnTzK;Y-Rw>Kr+ACFT>$tw-S0Q-sLA{w`<#MXJTVJ zTTZmW8?S`{&TLzhmfz#HO!}iXO@6RnPU?FsnLT`vwdGfXb;|t4XH<=tL=e55KAF&s z)KG&ZZ*4HDmyiwdqiQcEJgnC@`kR`}hDGi^Q8wfc6olaHeoEF-J2a)w=l~65&^Fn? z&@1zr2v-rw)%qXJ0@ik7N<|R&>h7MX)Dcw68xFT>?ub5MABb-?v+xM>wRuaB)E33U zxe~aeqDMN|1WsRjBS2qf?B@12{reJr(0T``Q|G|;fnFdnZ@oY*;r-y=mW=%DjNt4q z61M?Hbt*pwI7&r#yMSbO>^&jwlL4k;T^<84MPKa$^Z)ws&hM|;rC*+YkS^z8BFk>I zxN(3$y@&#*L%rlh(e!~O7ZW?f*;8w@h&aMXop*0OxOWY6cHPBXSa>RJ-ISq|U)|cd z^9S_X;lf)_1dL}C7zdaSZihEMFnCWQ$L7eq$t7kAgJl7FiYkhb2@yIH8h7eaERY?6 zKX!{nuST}WYDuM@UG}|liOd%SE>gR^KJfa$s#mTxUsdbe!vUCUd1vRNYYyzAonL+` z*4(VGwn^?eKluiBPhY;@PED+~m)$$_F;@L_QFx0vCCWIwyLso~d$-LjUFtbS_WtT4 zAd@OT8_Wo2*)mDv<3z(1L_?OM+L5dtI|7QK*@i*NJ}XU5OP&s8PvRoBSMg8@SaCP- z-I^OA8L0p+`j`-~?pM4PbXw9}%sRLG$@LV`MWm6SfOf*Nwor_m%x>Su)X>=8$9FML z?Y*l;%I#$Cx5s>Zwks+htmuQIu+LRmTb23T5yN!K-kMjIF_01ECoH;lc~CQHHmaTx zAJ}v+ngbqR8qHgrGQb4g!zju=9$$ZljQq~O{tK;k^JXX)ph?B9{+mdLE}b2p0yJq` z6>?yBg7^SEHqapNU9N>*#2yK}+W{f66(B;#Z#C!ESa~0hB<0X>>P?*5aFDsqh1vP( z??b-;vXWP_T1pP8;7r%azCy}iz{eFIZ3c*UrIOD9+zJJ)wv>(GGK{Y1*Ma9`HwU>A zc#!g1C{Q=Y;cTev{OgZ*?tD$0DQD08z!siltUGFS?z}6rTi*HT!GGQYG{+1VAKb=Q z5Yr#t{D`iu2teVv_{kr#-iDr0X#|b(;TuOYH8nG{rgXps5>5Hx?Sz~Aus04mgLmgz zC|)wnjJMoLtqSp~Qn|J^Fz=L=HqcYbC(|C}*CV4D+#-37_0KzgZS64efAHfdB6vul z0ND}Q!reYj18vf&lvcm|2_axC?1NDgnE&_QefZujF$m<>Xb_ljx#F}jaqQS< zeU(}!p;SUmVJD&PyebKW6!FwX9sqjH=K>MTwKsurN9w2H-H*356MS$H@F~F&T^IMR zi~HY^|IfPX*Z0u_s73zQ;nBmRasQvgN4oi6yZ%32|DUe^PuKtF@5BEG&zytw08;I@ z?E{2g5GK1)Q&ThqaFQ#M&OfPvpF#kju--4PpftGi(X|I(Uqe}O=h~GA_qPtx=Z9y0 z@cCW`qLjRa(Nph)VuOcPJ!)^+Mf9+D*+;1~&*TXHpNTZJAx5aPO=Wni*n^0xb#=y1 z!mJoFp~b;MCY8byKE{@~yyqYPBIKyuTbmC*+IFzU2dn-cn@dak{uB|K12|1z8#uLZ zIR<0v+!yuZIU)%`!OkbfpYw=h9mLr=5lAE&jo=u@GmPJAt^-3$&j+9G{Bb*#b|i{6 zW`%>x4^V=>0t3Q!AKtugS$lRrzAN?Iy#x6aYk9@ZeO=#I zaP?$wfW<+z#QVGCMLx!TF`BWi9uDy0s@E#I|2N9^(u%H==I_t9sF>NU2V0bqQ;ubK z`>Lrv{~OIUNt;K86-Lh7#hIDunX{d#o{+*u>|53=8tCP~v&3rIYlWRAlybCYNK#c> zySKkdS-AtqJsAUr9KhT23$qt4Or7rC2e4onVcDEO?R|ulEOo28kk!WINwhyO{QJvN z+09nc%~sM?<#tuMPlf(Bs=75mllo)H|2ceYcxX70|MT#0SO5ET>VGGJs#SfYIjBKP zR|4Br8_jx+NX2x?#;y*ys{{VK*8z7`z(NHqkDY^516zHxtqPtOU%@`sF=>gk{)QSj zE4GZps-J$k^WKkl-}_I&Jd;Pr&X<4Q{mu1*R0Hdox1kC~4Gng=ca<;)Cl;|G$-vr< z<-n-5uN!{)=En_{prMinbUWCHDJsQi20BZi`n1mT95zI*J*`%Jk~Fug!Ma%W$oXrW zFA)8K5Y`pXuRW}5Dr9D8aNc^#`1t12pJz9@7D728ob%ux&Wc2klg@aCR$Y7_wJ?Vy z`)Nu@$pMpSXt4-8u?Y<}7LAenc z*Bx1M%T||Q#j;ueY=NG}?ys&;fp_@u59npupNnfdverQ!LFg5ZRgVHxT?6kbL1jCp z8|<)EDNtmFBKF6rx%JfoaJM0+gsK)j%2?L=Bji?3AOWWX6jd&mvkFDW6NBouO6O%2 zV9}oyhmDu1te}YL@k1apa$1V()ic)Z>BjK&A+vKme;RQ5Xa|eKgVd4nrNoNq<&2Nw zALMaNSmy|Z2VjMq;ldEyD`UR84dxaiF+It|;|xI9@=}W=8C-=re25z_%}e|Cb`}Qg-2R5j z7w+Esx1D=ecR#ytPrv;Il;Frl4(y7Panq3O;*X@%BuK^Lp~TWU6yPNyWA0*N?)K2c z(tC2B^iE(~S3|sKwh{#u6-} zWMpGJPK(8I(v2Fte8_oFn*?8!VKiKc#wPFMDKT;GoFJJP2B5eGZdslPVz@v%est3ySuh-QQ0E<+SD^u!?d<2moXac5dp~y#MT;v@Ho=!QL3T^D zHR07(eE5MN?_@q9a_lFpDE3dGr|LxL=oIW^cuG4!Yza4xBeu|yNCE~GJ^bkN2mf{R z@q#!65KDomGy2dGsOLl%NwSc4Dl+e?v)lj*0My!MEhXVzU-gTt91mw|6+58k>7;@s z3x+rFDS!M)KKYz$+M;*OuQqq@Y(D(tsyH2Xf4!YFgG$?}kRxOz-rF~K{^R~*T31sj z?TFN$&_hXI%2$wlGs^I)>6N57Ar}LyYq2mxp}-ZPh(>(j%f73nD-17GV^)%=A1SmE z8JcyuXHSR^T4$$EA0d&W?;e^i$+RIf$1wC2AIC>;1Topj5L(oWhV?#vOeujVIT}%| zhO+YlAt9EaVARMid1bFI^GK_{%o7uVRtuuY2S!5Gh<76{Ki^me2_#ta!m_)uOf~A? zgnyRY;w58)bw;-Ib|9xGDR(DC591u&)C)L}Ts{(HViA{eBPObxQ_<VPuG`0>h5kK_ej9XLwDQ?FvUi^i z-G1Bt8k3gEinta+Oqg-f@`#FkHgd4ZuLCEHeYdvaSZsS6pm_wlm^9k;^#Buzfv9GX zY3p^-3`&}uCE0%5dh!{jCX|SD24%j7BFV_kS66nvl0w(ck8bY#B(?sihS!LiwE?k= z*%0)SgRz8#gl;LOim*NR6R=(N%98Aw?&sP@MIV^vB_X>@8Cx4ljqg>ZudINJlvyPp zzjNcp&Yhn;eE$wA2yfqPHYk#Kc@-_Sk+lM?AT{AExe*6D+AvxnYD@_f>n1Ew--fSX zKvT}n4n?pL0!S~0pRkyP)vcsXrnm}Q3qJPXkV5MX9LVclxokA#Vgm4b=&GEJm%I%U z*iaKfwVJY4O?)6Ihh97Um9-?CXfbOsgsYZ_;=+{FKfd+w#OpE_=NF$^aTa@B-34SP+Jg|TIWs&C%6@e#lbF>C9U-Tu z&P-f9x3D-lJ9B3G?6}z)EcG&#zLS5AYAy8F;Q5N}uHe>F*YST27Gx2u%f-QrF=s7k z+mN@+%Ppov%XDjV_v@RShcS`UYv=3Dhd=%L!B^K3x+P1$)8QOjblVXooMy&Ml+NQy z7O)VPnGZu=9C1Jdv{Hx@5W6vReTu+kY0kpZ3fo+O=?_!Tx>uf@e3r^Os0OoH2(1;* z8jnSBVVlbJ#!PJ2cQ@~oil0sS_jt>Hw7K)iO;RRq-3KsdBu32yz&=mE<>b?+Zn+Z; z>T|dCIXs`jGteO%JNi35fzy}~%Dv0nwuMItF6c^|1J2sRElEZ*dXX}}{iGEOtRjtb(;~|Ohq`-pXU#1)fW@YIr*LWu zB4(!a3xZ3H8u?;z$~feruzn{QA@JI(lkGIlrl)P=IKPTKtT?@uN7T=S6VLAZ*Wl_; zyC2`!`Nb{cSbnheEBy4q*8iqJ`Ax+>-7y?|9)X#9QbbnNM)|v>u$|6*pUG<{LCUC4 znLt4viR;$=-QR857LdrVSQ277IGO;X4FEKWs7RT7e$PYc{N!t~F#9*M&M@Y24Ql{M zYgqN_`#vOrvIcUskFo7o>=L?PVYN$YfSViay7s!qX0NmDKe0WrkEW4q`wu)jax8BD z85%m=wf{Vhzh|6tFP|TC)-Y4A$5jqY=NZe%DndI^VX5S;70PRs!rF>+5{t3ta-tE~ zpH-)ZWwYCC0Y6xz4^%_{{mlHBGZ&yY3-F5i^*5KJLWsB3n-|cpKb{wzJAnU@*Z)b! zau$z&CDlqv{+3!1j~DqdHs;lf2_aoH3RJcl_c|&vIMqb>x=<5u(@X}Rs}lTVofBDS zf?6`a!iEo^PCJPE&tro{(E$2B(eXGcJ062{I6XjaMuX@6dQrNf%`IWAC8Oz z4ceFOH#Y#|YqaQ8HKoYMxvVVcS0lgV5w^+vjRzTQPa{6ioU0sE{7S1A!d5S|mx8f* z8<$$wIu0%Y32WmukX|nBQ|Pl{hi_(m&t5m!(o4W|MtP@L_FO8hxZ0=#wGP&+MC)-* z((Wq@mej(aNVP>I%2^C5kkL~clJm?<(w>twdVbjOu*wGaN4;TR3D0vpt0EA60kKnN zQHcDNs#``sSu;{w7U?DKa(?>kg;(YHhNOVHlwvAf5wHPCj)9#zFAX z^tp4C;uWS*B;JAw48rk=U@yQyD3=88GcuU#g-eh*0Dip*{HJFY`o%F750sC=-*%^v z2_bvXuyR6%P!K6l7kTqRXg+|?^^;4+6IvU975Q|Y2 ztS-z^!K6w^m%WG?8+RGGBJr6FZ%~;Kb3NR2zUdYfJcVCDk_}A@n3Xj=L84C0??I zh>NN!v18)GG-_ke9({>&xs#2ONDELs1e3_qfRk>v#OPAyR#y=DN}S-qb(UOcL|DKn zBkuvg=9N5xhiFu1I53a$;f5r_B0h~b5CV;fdmqz)yn!4*-d5cZCf0-a(N6$F!g~O7 ztLHP)g)4Htr*z>uJGf{^F*PF5F3yh&cgwSBkHl|}>5Qk42_n<_Bj+z3>Lg2XPttD^ zQxQjvA~GWwe5-1VAAFt9;f_Z>QFXj91pEw&#YPx%L~z-2vR3k-XE3rS*rz3g=43Js zDt}~dXd&M2!z^0F`(+AQD&6+el4Sb{) zJs5nXaYb8vGORu_3TZFyg|_u4#r~790U5m+R-g<^5dVP`8*)moHEe z8Bo&nwV9=|nhHX;K$N&mkEB|}Q1&I>8BG5^D{Wu)`XzG4Q9`~(tp;4W$1pFXw>6mF zSW+}aCqCbe+gk~xcnG#C@dItkM>wXLa6L@XOn9a~UMbg|S=ijdT z?~{@?lky*O0gu)HZ{*16k%a%>=tx)odwlX=s|+urU74>d^L1suzf0#neDffk`&9eQ zo%>jr!6ZD)yEkeS^HB z@~)WvFov6j)k?)BzX?v}TLI?Qua!OWs3IS@8g+tepq^n5Cxy6FbA3Au|6t6sX&~3- z=l2h!|I~=;V#;w}OW_pqBxYK}nb!Q$W0@!P^JHe}<1Brw$MG0uIeo!#OQn!}fS=5C z=Oy|^j}3jXkz!00r1MuJ%P2gIu*?vaBae_p!j>*!taI5Z1s+@G-C_}aFRhluI~5Q3 z&JA+kYE(hA#T4)MqcTYEln*=d>f~qa@-15($Q?z<4mLYIh%X1`9SH1(-H+8=gJq2& zbQk9SMOp{UjDe2Y>@2H&wIz(h0OY2Ms2X5H+X(#Q9t)S?-vTwi=vNn)HqeRoWQ^Hp zR6q)|kA!&s_$GYA&gi_W_)}({QyycRdf7TvgpuaM`QZ`kz+$${r_Xs|7+d<|Mvyz`$wGF&@E!FR3or| zonDx#u7EIqqC{5(53j}pez~jn@9O>kF7^ITrQZI4WAfVz$p;qSuLq_~spXD?RM)o* zzZdc5t6sUKJ{*_@Q~+3_Hr?t>F+UIi_Y*574tJJ1Z6@@P;&@L?#cs#D3H3;ny22!h zqJp>9kQx|F99k<;=mpNBHCT1zH!AUc8Eqega5^BNDHh=;MfEUkXbE7}E{kSJHC<>n zK}!h)M@t1MznQsORXKN2MN(I46g;)COj`kDc~n*P{;(Iv_``-@m$!ndb_#-#=A^P~ z1AW};*gA%zBihh0<{DDFXhKxh!&mfY%A~=dBZa#o&?Zv7F$kYFV@C-!D(!B#{Zh6} zSkd0Nf-({i;Ln3u^6Kjz9KNty@E^wEn7(tt$SDSRJ}O&zbal#}O&D#Goc#jiJoaZN zWJAQL$ky zQE>6};A~zDFK;!6={^!_XxM`_*d9Pd${U3^0`yjUpUBdOxb*6n*sryn;|8tFc?KP^ z(wZP-BYx`JCP6nUa^4bP`D&{!Y%6j!qBe-a%T&_*EmqGgT8U0XGqhtPr_TojDg!=X z1Us7zm;ErR_df;|W>bCTKBy}(n~|i2!*VlM+E~8C;++=9m)@0mreL@Zd<-+G$`jmK zY%;cJ?ukGW%|}r-Q*x$rn^JNE=VV!mj;u-P7Nndq-85q%k~D;EN7E?in29U}qJzA( zPIs=g0Dw z>n4Eh>WaI%;;xVQBk7vU(Lt)3MeEHq%@hn8Q$0|=9ORvYswlyu!b=ZG?~Frjt#%%6 zspNG@r_l1Xsq!O9yfgF&Yc#kTs;eFIu zqAL`t51Dq?i1Dd<1(mPWS;zFXgC%cmFshgEX!WCNFM7w<>l^(~#P3kihy4Nq*Pp;V zhupG>7JU)AMFFQI>5Zc(O8=8_yHs><|EDizm|h3)G0sqt?ERmj%!vNP=ctaG{hy;~ z`pM5x9hLh(N73{XpW|{KHl$lEZtUMAFCv@oP@{RFj^d(~N+^B?F6B}g5GIma%zK<4i5OT!zu-&oG~pv!eHJDS3KuM{6@_994WO!4>iml z?n%K)$nB0$y08H|vx-e7LRMsHm>g4sX01$O1Cy&E0u$)NsnBhRNd30ntEg5|u3ARN4a)(z$FiVuGy{68Gnk2C-8=m;>FiTuBZhr9g$W3B(vw)>}+ z4v@)8_W?~&t0WXENQw-dN>^g&N(^0Z(7y?9P+Y(R6*Xl0Eo2PDBcK<`tu2w^^h}6#^4Ls5cFJg0Zpy8@J_pJ@t|gCP~LjVxcFvgL#v7Al0y?WJ8SL~ zHn-$biC#2qxGS+i+Rr*noJ;}JRksFYsov`4m+<9Fz+E#;n!kKnzKr~AtC!Eqmn&|u z)w}2L-Q_3(#yb`@jdxyaRQ>uJ9XheXITKt`HrA+_v+CdOUf{N#*1fz zRP64Y?#}7%oWJdzQ^%L}MX4_g{QFEIe zYFMCgxs*I5m+ezq(oq_2Om3`h_ajG-)f_-JO!D+mJVIp;18d$s>OkPJk?v^;9e_}W z4gzKosY=m~cCW)M6ezoI@FVcFf_9Aa-Sr{Id?#8GBJjJ!8WOiZd@WbQ7c0QHR;DUcG-Ghio%VGk69 zb=Yf|3!v!@ZCz$>dlw?mj zp&sR$0M^vQU;{%1s!p`psF#BEYJq@}OJtWy00Yz0MXYp#u9skvlzjx%ODSKUj_0Ma z305ZDY*=K$j^0x6Ght`C$Wr$-S=S-vfOTQ^KFSa977&dlt>)EK3A`nOwSZp(!-5w?WMbL3$R&)9Kz z&398)Z6>j5Av6H{iawS^ORb$mtRkjEuQuOulg1h)S2S&9;`73##a+QD0yGoG#ksD? zw;C0mp-FRv;xoRsS(aup>%#(?nB~FA7p;zguw5 zQyM1j)t(5D&Zw~@^qkaQT0+P8#F%;^jO9_M8k7+g+!oaw(%~FS8>D)50jjNsZ2(6s ziv*$WO~&1%1O^Ro#JOnt#1|3e%ir*bCPCiywqJ0?@VHC#pgH`iZpi3nQ~@Ik@j@mtt%HA(}l{l$byb zJ9(0@oks>T3An6_42>y-IJO|eyduMZ0eN+E1h34kGsd>m3OJ_Xy4m~R#`pPE~>C*hLQqy2Go$jeN=GXYh6 zry`AdZ1wTu4C-XPz^p0yc0*R3S^_ zN%OST&|j35v|3WOijswx4YaEYBI(3OZy_tBDAzj$%6lsrE)5WS@e?d{K27?NK#Ajn zz4VH@reR3}GqORF#FB$JZMBg^A7Sk;x=@*EXjp0n+CnKhlC&`CguXx;;Ik zC#*zm05)ajzcX|Pe_zy5s^iL4fdhIOv zy@Js6lJjFP@L0VE!es5mfd44arDo{}sPgm;W6gm~(6Zqk3@uv)A|Oj1rWk!|yH7XWrQJJ7d&QDCrv<;69Ez%-v z+6`htzjSg+$PTuej+;_BpT01oB12BaL)b-GT8nXaONY|}wqGCv?}gXT$vEyd^RX?%ydhsQ?Pi2Gpao-j65wmB_j=mT`^?S$y_XXJO@4I%=&s^8om8_ znR0=?m4;%Z@O{11W-o{=Qv7ICUisc)Jctm#7P4cY5#d^5c^ZtEb(Ep3XFz5 zIwa4{&MuspUpzm1ac04Uz8UrK%)W0z}s+g-@9`=HDGJOFdgGSKrRU#`Jqz{#V6=79s`%N;-Qyp zi2k2!O5-Arn7lZbRxUJi-cFxaSb+`STdXy(oFD$v+pnw7#U(=?iJ{O4vDRn6wJW2> zk`NfVRnd%S8>MJ2=XXN7xl6dJYfJNzH)VTao>lWq7B$YEqcR&PGvRS3z(Z@@kLc(W zwG5kj%Qy~JUgV>v`QoVhiqgc$LQsbb17m{8`dTj{64a}5$e0R-j#k-0=4$x54mF*l zaP+D|2RBz zq?eU&;`O~IU`?A!CbsW=^t=r)uTK>DD^+={o0Hnpd|K-pQxp^XoJXn0NT9@M35URP z5XdNp0=}CHFAXg-F|AuJ2kTx*er_0l3J90|S@7g&4T9<%8p@9zYB6NFlBjtK0~lxo zf`cZs8~Ugj<0z69gnj-D?r%Cs{@ zBplF7#Ke*sL7tlc3MC~_POsb&#YvNwNIk8!0(YDY zzhwU=o`NwZ>Bigsz~~m{kPu5Mb4ZA-xQr(TDSK*|=mJxLdu}NbX`THlsR;#e+v}4~ zQQ#y{W;Q}1$O%cn#1O9Gv52nc1D~>c;OWt3m*iTQ^==dB!pQ-H0)%K#LKJwx^+UO2 z%$tbGr|kmNj&o*^FesO?7kLC`Zyy2<1wq#~P}SPmpzA@K5NWYPCSY>7=8e#ch;wLb z%fRGTh(W;3!VST~k^fhlSb^*vY_kSOjx%q<4J{#iB7#60HQ>xVx00SbJf<`f@3i=8EVmDq#>WCYM!IuBlcksh{fUxq!Z7T4xtWF?hnuSV(VYFj=oI zU3b+~Q@L+2Tg{77mj?y0g8+hcKZZ{UEVXob&5$-lqqiq7yJpGjyXotnxPH&p|D?zt z```oCO8;}@XhQ!pdbC^rsq6pM)dF?3Ku^6E$UH$+PzsV!CncAMosthb~^Y3!@O#%q~40ro2D8?n#v!huaTpveX+ z$OPGwwglt`C1X}fBLqR}JwE<9p-s(v6UznPko1H^o@MXcd5JZuWB0f0;F})n4KIJ=S zCKe{n=}+?d$>iMhg7Lum3J%Vh)Q@5#u)ms_h0}2=^}FerGqYKrot`>%@vJc`)3rtX zt6lHnVVYi@!sgg*Mu1Elnt0aNqg)RziQpbA1SKJfimQu^sdNH+%gg8z7SIQ|9-6Rd ziax^pnRQ^S!h^$7mDt%vPmWZ3B(h|9%uqtJWgmsq=ADouS$Ni5L+dz~H zf$Krmt$Kiac_1wAJ2f+X?9%l%@-82sYkpX7xMlxMr30rb?@>?|Ux_3j@Jihm+PrK( zE;$U&-<0egSh-pV>`~R?d`ryK`h@f$hF(GwZW*)XZLl6U5v3^_@uj<&x8?_p2=ir# z$n73uvHLLX8~L}%AXFMO(l7d4Ko~Q{Mx^@S9RKWwjoA_~H#%|| z;TpQx%Q?tw7kg0cJ>z64_wrJyOo99*+t5tT_mGTeTXr}&iTB-lw`xFIWE;l|u zwXk@8;-x8A=9f{9cTPIvQCLLpqnuk=T=b*Gm1<*=u;!%mmh(FB709l6QQaAM)9HP- z55FeKu)p^>yA{07$;sVv1gnb|z<DVo}KCMb-wc* z^Wo&hxzp2gP1*wKAu*<9AOC%aCW*6K6b|@{2ytOAff?hgOX9Mrx z+P^NCv48A$jvrT7&-XiCaW!xbHEVnfz9)&U%vl`Aq({IZ)sFl-#63&du{SxEULAUN z$a&#ABgf4)yvu-;!(x11agvTrT^w zeKDNqw_u)Z!T8)*1_4mjz6r_aUw{3z*PYjU-T)x#IV?pdUw_@4RIICiuAwe-+39^Q zdcE4~95NcW!TGj>Qpcfa@Y!dVBK+TL_#X%V16>Xdt{nPjwU8QAj4aUWCBL>dXE2M3{N`s^LiC+uN(6Jhi0v-Wh4 zqtq|Z9Jc{HmjeTo-2ie48|1CnXi+NitGFrNIc~3m=tZr-$>-l57}>L#*{03TrZqboZ?>F#r`)vJa$2)xv)O^yN>isR zZ}ew3^4dQwWIondmAL@VK5K1n7?0em*pRaX!tAA#_DVrj5I2Dp;w#1pP3cPE2GAq8 z+h=uivU*%>@GO$m->)0NoMkHk>aP;*Txz48+NBi~-r$^p@1N}xzxxNrFHB6nG;tQr zBX~n(f0i%l%h-Eme@VW>Kae5Hvia8hh2H2dsvvcPs&Mk^h;nlI+g}EvF8cu5KhWO^3vM{|uHeOL@I1?CND2P1-Y%G74^yx1JI^)MBM9Vn5vG^lKLZ z-A+$kn3_2~H8VLqHQ&$uYxL;Pot_5#o18s=es+f1lYJW!kLbmCvp-k4Bz79S93^*N zDJSy385<90CcXCiF(I>%_y;Q)ebFo?Eb98iKco-BovnX$MmKXQyV2M&K&e2i{3}A=wW;!JfvM-*p^p znOIim+41AXOV~O0?beN!-FmENxRHFE>=zzTxB8Mgn4i5kH%VZm71fu7VQv)Y`iv!D8gq8#NdT<0r8mC;yoNs*qMPjJ?s@1^B;}-hV!Bw*udb zY1H(nHO|98msO+B)-?b5_WuCxQFlD}_S*&rOkct4rtCo7GJnLxS+FZ!$Wkl8Z5z>MQaia#8$Tjiow_3D7*&afBp66-+p88b@=KgOYs1PSET0`VG@lSdN0Gb43%$BhUg{sMk^dE2Cr(^X?^X4^iVm&)=A3xOV z3_6A9UmqO&c7#9Re}llr=3no_yZwW&{g1&nfN{*fKAi6rjR7@$<)wb7_tezc=^2m* zNNfGtp~9gzVBCieIq#@@&ptbX_l%1}xPzY^mWTkdU*A9cLsh&eXKk!$zn0eCa!BHV z&qwk`lgAzTxifU!?w7{$j%WZVI*tqdt`NU`Hv9nP=T_mKY!!aK;k?sJi()Q`1SH7G z-<~<%{6Ep)>(xOAu*O(`-li{7ca5r?I}K$KHECiyyrnttfj3Fq!#AW9`u5xK0zLdT z93}V|zB;578gO$t?Pe%%9#?RpmIT@D11=PYjmf<6GvN6KmT>{8Z|6||Axj~^t5+=b zn_ba2@)IQ_zGH4)aUjB0JUunPfI63F`{v*jJU>PIGN+hdzA5-nY@qJ0tav2`7QMlT z=RBV0f=c7h1(4VIB*d$8)AJYj^Oh$$Us zFt6;w)Z7fclKO19I@#=zXl77LRbLSRjXKAIxPq;TbDc_=BaA*G2^A{JU`8Dwy z?p{290U$;<`R90UYVyU|MS>Im5_e|Q9r@0Jy0ZXx&dyB{oahH!e}4+liEhxZ@!T2t z#ubQBWpK8f;Ja$XJqvXYRQ7F2sE} zG3I7*nIu(D-sLx~ux$CF9jndnotr%cBCOe*af{!%I1l7;deVByyl204`c(X#)2H|i zq1}>?#ijLZ@zlipRO|)17kg`pX-fQ_{g$31&9oim@qrG94MQ|uPLbAC~C82XBzNJ=e#<6TqR%FoO@@WxALjh(Bn z%qNTb2ua+u-jnn%c556pn`frKPmkyq+*x=L+08}fsPvWbM9G#siQMk-2>NTi#_Xk-z0#gZs2@ z2)jG$r0J=?MlWW#5g|UA~mhinWG*0vGarV0;j$x7WOC zDG2owz7|jASk$U&1JtcFEef|me0*Mj)i|^D+@=hIQSz7bu zJM?QjhvuinS_rc1Wm2B%OE!gQ69^eb6oB-Vcp|_fe~Y_;emRhDYS0*$@T^`bi@}MX z<2lRhHm)6a3kSjD&H)p$;s<;M9J-O+})aeW0(P|Gj7R2Skt84FHO?s)+MrmS&p+17gLa_r_HHHaM2i!_7SD3$e22SFs`LSH8 zHfYSru=hyamt}40&-IKiQ@I>g)&8S!u;>w{f!@@QdRfojBTV*ik6c!ISjR>xxtL`L z)okp`gbF9%bCi=xzvEW0sPuB^!9FsYaoCkZc|$FuU4?ya$gOASI6Ky`PXIZpkmjx@ z;ri2~T?Klir$7(s4}0}c1;}`yQrpz;3=FJP8%~NpY4341yGeawq7~}5t)_DF$5@7f zFK%X&`3wQ~8xgFaSgL>2>+-zyie8;PuZ#qwZYmDISc}8~^*aT7usFd6`zbs-u6!jn zmb}H#V-F3l#!Bzr+5G z@!tEgY{#mDxc&LjdPr+=ESJOJ;POThn7HbIF!GP(dIne{|9qhw)el$GL2ZT6=o8}=laUD`F zfjy42PXKgSlA<6r{6s zQri{>4;>fIeroVQ+4(C$H=VZyYABOaKiQ6Y)>kn=3AtlO*ihsM6cj869c7+r4U+Wl zTEgd9Jjukcb2(+RG7-eY2<58th&Vx`JNeI{kh>g+$^UqPM^~jB0SmBx3&0$coF@3OqiJ1 zf(1bA*oi48*xw+7!SDHsa+Q&0p*A%#JGR7?0>Y0&ys zKo)n2n7(*^$lOxq*w7Gk3-X*( zT&)Bpr|}Qr`eo;>cbwOctG?Cb?CB}$D?la<-!O0I+lIY2KDc5H;9Q$aHed``7`W{t zQb#)NxH{*w2^I2}twa?ItDT$*S~uMuu;A!aEx zg!xo=>m(L7hk9LTY|ZEP>0iJARHKeL_+Pp&evIWvd5Sb(IS{0QevIXEF{+`7mFClp zm#|ag!XjE~5HZ4J+~MJwS5^z=aJ5^j{=gW%b;I}o(8IW@m6r9_aAAGS*XG-i@p5Fp z8(FWaLo127V@?8>(-u1AB^x)KtSw|+U3v#;&v5?ND3{#=e=C1IpsgD?@WkT5Wh zEb{;}5vG77*E}yB>$rgzF1$E9^D3Qk;-nK*-y~=m`J3)Cnw3kiwShoFNI5eSlPly{a@O81O!;swujTC^|@?=1w0TYx5h?%a{`d=7x$MJhPTC zT)XIbB@7QQ%*;-GA6+oUa(@;1AKc2p=YN2|Bi;JnPwG!eTPG8CHPf(mQkd1c1+)I9 z>wk&;&x^gUTcg?jA31g;w*N;)h7Wi5|Ks>0DNU6LaVm`n&pu$T@-l@;&{$c;JSFll ztJLZnh1@h{!jtth;24DC5_1_-on5ZtOSmMn*kUnWjLBKU5+eK(Iypo&tiBRd%Nx#` z&j}ty8fH-%6vRIf5-yUb`B zRjRYnt6~b^)b0`Gf+FR|bL%p(DvpV!lL);zF{qxwHcPz!KL-mkHO6H=dKoR}@Mxheln*D+p#3$;vGDlv3tNrrkvli!}IY z^_`NHoib`VrPgvnq#@)WM5#LKt3E;#Xt!Q2%36-#LtRkw5>RQypE3(S?GYAYofor< zggrV)YDRr9nfP62T((ei|3K2T64pp-oUDgI8Tgl=Q9EdKEUsWL1=x)H4}Ppd;==C4 zXGpRr-vOMp+$XI977P?7I7&kiuhKS+=W3Pcg~}M1XA{609PU(e&uqs`*8MbKxBxF8 zA?8lpe-NMHoba3gUXfH)osbfsGqhIV@?a20@HASHEC2lhXIZ!=+l6LYWBdfRu^kQP(D~7U^fnSv(FHCBqaOqXXYOV zlD)Yc6;SPTa1e%xkYejG12<8~G0xs%0a!EJe-TTJSe3t1_ z2A**q-8Arw)2VR)r~b(H0b>mx!9wtiv%fZiXQ)gfB{FBev4kb{Xk7#0)C`M<#YX_u zopp~;T)Mj9@UW-|%nKUAlNqo{`JUBTL%jy+8t2a_Ip?yY}Z_DVtM zzT>=b(iuLC{@r*pT=mLy>zKR~!Dto*PV&nm!$Y~}R?5K=fZCeJaPB$aKYY{-!3Y+` z2*gub(^F{Mm}7tKNIn^8z}pc*frmuuWE@DlL(N&uj@j+zo&)yIU(W6xJBBS(oxeCg zMP1_$)ph#x(>s)1J%{lN=^z@)0ue2mYyfv1x?CV4pbR*OsrGS~z`u3B;w_Ti2*+JU zx)yrqSqL-2*qLfnaibqfw+JHR10V%h_<*jAfD@#s1Ego{$2F+=L{_N3zQ|+h58S8k zmirT{al#osVlT!CSPMBn&ed-XcwhkU4TyUKRCrcS&zSn$h4W6;^GXrdQyg3ZsxTOm zv&bCJbc|;3GOx-QP64(#29ZYO8C>@-`GXgz3%|PZ+^9R_0?)s4 zw&9l$W?uBnOi-QSI*?+>1ieF-4`D1C{G+e~$Fc~+aO^vnmZ$LCTk`2UF`UAh%JkK+ zf*TA0-~y|iQ*a>;E~j7y%Ou+y8!8N&&A$WBzO5cU_m*s*9w2RcCwFn~+?a$2;e}yu z0+{6H;WR6H&0ZNS1?$yv;Fh96=mCcN&cJhT$*m;^2NQp%PbGKdp&OC{q4I8hqa#5<)FDw)17^~hjEtbSIc(V_aX)Lm*u) z1;M3}?;na0&Qjn}EvuRrmN$^ka_hxaN4|a;3DZ2CVd&jOLAY@G0OgT-OEfHxtK3^7*1_W`UDQj~Y1r2((LiTBCf ztx7K82tj}JyGIB8Blw@A-#tnb`2Kf~E*?G1Q*c87`E&kdcyyU>r;O3+K%Y*6(5AwT zz_#GO=~V@&o_mW4ddaEdT?Mg3e`-nkO66dsU-bhAf-C?chU6{-}lNT-$@G4#fT^WG~ zlIB>v%k3kJwdCbQ^;e)SvZS(Q^`j4FlzZYbyxa&WsGO5PNrs%LRqhfh-^$XnM?x2N z&6;1L=rxay=I5D$<*kuuGdxhjI)VcRgkfbaOrk3Gm4qb86Y%a5Dxl$WEKLlcJ)~ZM zWh)(05XDK<1I&4aQdy$0|+yT-Yi)c!ii9t!WUDgqn4xr*2$2Ew*IeJEZHT=_f z8PrJsr{<6{dgDD~*b3i!WVaclJ#UaGYpy&TbF#es6SH0QTx9MTzPL_uw1P&!pmQZ- zGD^zCvof}jp$EjCYa{Z5Vod9c-}Qd_K05wv#zI6^YYiDWpy72({`oFhJw!j}j}KWV)|@&D!>5%|CC zPz7_R_xVEE?G=Il96b2eJ5KNMUg(*Eol^UyB?J0A#cVA}g-9(V&jF04^Brde{=4GU zQJ)>6t9DtDHxTn+G2j^$gmj~5y<~kKD=XrN`0z33xGJ%i;6p8jZ}7Bzc%CXd4bDB0K%my777KKQRp?QWeGFvDFrzo%@9UrD}*Z~3w++sO$-d3|Z^go{ECJ(`@JmQ`nN+$d91}%x4OcL8e>X$&<7O{ZS*Uw&cPjD6|>3H-h?)2vOWdc zMgg4yH0>HXc=AvPn&?O(AW9}lgxER;IZ}yQk6~i?*Y%MI4u=bUc|rl~1(7PPpTLRw zNexSA#4Tf%D!7?onhb|7%=t=z_{(LWPxKVGBtsJ#VSBj(kL2@|Y^4|;p}fk=1tSpf z>kkHhgq!)Ek2z z^#ACl85DP#ET$@bmn{{7WYfjT|{rkpCM}&t93Gdr5yYG&pjYADw=2^1>o) zKpcjAI+9nvj+n2VpZGpDKY9pef3Yg8KT!$U*8*aO^;GdoSQnS5nGH52cK&>XQmB2E!d)Ry$K_upe&FLy+3i% z0fsNboL?2Qq$3e2>LIG*9G;{R$bt4ceS*q3Zn53~3F=vi2>s9+^kHEm4j7p4Wz_I9 ztKX|YGmInX<-IKj23RjB7=l>BWcK{T^b8^Ap&ZgkbvibxxrAcCKJlH{kq@WRnE2RX zVUbQeYM@+_oGZ7T^*Hw&ai^s7LsNF&Kpy!Q`VR?t?hj~a@e6S7u>T`Gi zqk2ZCntf+bO5BA~tLKC6QdAFNSx9*Ah%`{VintJ&=#ghjv|6eXFbXz`f1cBTAc@tqVLnN%{; zWD>48&pBKaqM#7FRh1HWajQC4vex# zA(PI4GYtI5&;S~A$hY>bx}DO)_GLsgOE2ogu@zXe^^6>?-qu{SP;f!l&%D8EVYQ0fair;QQsDD zg44r9jvE~j56+1T%}UL8manfNNE6&A02?V;oCzJXU=#_&hXK_j0TZrqJ$bw zGRUd{;k<>12BJ=*PR^Ow-#l=r{{#&C$dSGFH|OEnmMENseLzLC6O9#Tlzf@mU({i0 zavJa*v(ce7Tbh|sVo5lclAjW~m#%u4h>4Vya5GvRpgUuThH&kn^X23B{{snZVQ%`= z#f9mavyapNZ|K;uqw)Cv;o*^yuK(ZT_#?X)k|WaT1ne~>JRoudP5z|0i(duFxaieL zK`q-u;|%N#2N(q=ChC#UFR*GiS93RzCZaJbAYGg5EPLw|$Fc&OhCIfHVY>;lRmtNd zCCfp%9ISJQRe;ruoT$Em8Pyv|EAXQc_=r5cIY>)bO`^ta%v5d z%754ZDT7-WmEDrYS-u|mE5PFCa=A(FcOLs4%O#*gnm+{~4hk!mH^j&z!-m5aL~9-e z$9XYW2cCo!Hlde8BPv4%xRzzOQ!RQCX$(=vgKF?by-czPoW7H@r(qW_&M%yMb*fM) ziP2>B<*cAPi?m2CqZ1tYG6^fE_yWD(U^#kD3s-bHk_JVZmO*ZBfX5z2^&Do15iKHa zL=hRgNo7+H0?K?@uSH{ngX`<-1z|#E*OB5Nro|hi)4rbG0ltvS&Erzi$pr@yKtl7Es!%QyC65w zZvn`5>c!z1PceNpY&^lcRxdGhG!SW?edta~#@YS?twW<0!T!MPg&2zhe76O4`Yk3F z5O?qjY8)l2iGy|(W-)j~3M3>Qd8fv{C1j%{Ga)S2sv9|OuBg1Sg%KIv!RFB57z!Y< z5>l?ak0uO8CWR=Jp?4WuMTehiZ(TV0(7K|_Ah0kFo3@wGgJTI8NHr?&GBDR_76h_kLLXMM zAHsuSAXr{L#L25luu=skIPwWn1@!Si{RykDlYvPD&#Fk)zBFenY7+K?FNTF{OIJMT;z-@8~?qtESk;=~#0hO#?RQiY(5R0e+&DO`g7 zcneRn9fI=V%PEt+jj+rP4ZvADV%BP30Qo73epD-5L?H-abW16tgZV5mHL79yiqKp0 zgGR*M0?sNg#h4|JLhq^F%7$~P8mt3Op_!3l)ZmoY2SXM8Tf(3Qd#-K|RX8|OD|*Vt zbma_Pb)FaypxZPwq-Z=8^VCH2^2j9F65x66Nr5RsD}NeL`x@0UZlY-iNh7-1)$79F zi3UY2$OAEP820BK@)Xkx6JL~K2FeKMtCGlU2get5S)tr=q%C37D-0+Kc(GxgYG0Kc zK*hX+D~|CS#eNgmsQOhjz^}vp?klBZ2A%#C$O0Q1jjEzkfZ|3kr$aBJt+e5mX$b6Q z30tiQtT_68#Rr4|4%7<=WbivKdYl1( zfJK+o$NH#`wO+KH%VLxSGq+6c)5urjd(#rf1SgSq^oNxVMg95#ER1(DdoZpksm$Sw zL7x`%-s3cbW~fgIM-_3*v_@WQ&OzqJ?u)SS!Wx>|N&rdnvLF)n17!Qq=;tyej@%8j zEl}I@#Ny+a2bMO*oH=&I_$NmnO()nrW4t8qAoKbH=ek1TSPGEj0KT!coP&SRr3OYi zFn|!j<6vD525pwgH_^i*$8FJJ30ssS{GGli2*Zs$V5U=xyhbUgZZP&> zp0j&PP%$+{(7vw2wl_}cyJ{&oMlf8D?CU-z&3*Zu4Mb^p45-M{W%_pkfc{p*KTY~Y}>Z&WMbR4ZR?J0+qONiZJU#1&dl?E>-5iBRo%PxzEG=c6GTG+ z{d+(_uXKFAk1lA79gJ9i!_d{O6@A%k3~JzZoM9l`|^)QHDArT zeH4KzRr=LBiI!6ajtd6;9%1lFeLnx*d&zE(C;KO92!PLbR`=-nhkc&sfMo07d>%6! z0|z^P>o?A?B&`~)I)3E%-r7GHI)7>qDRv3)+x`?+bhv*hrq=qWtn__!zZ_hC_(!hp zZ2C6fi7zrfnE7G0uN2kQ{ZXj1`9pB^x%B_kJq#7SKsjE1V`b*W3aT386VQ^DRbOND930SW>{hb#=Wfk zBq&$PfFK0Rl34F5PSFM|L?MBcJ^4tlJAF7mjP3yuD6~E?WMSKnTSWedns-{#ZDiNi zW9t)`9F%J3{IWlL0j1I71UWOJj$Ncyb^5DQ9^M`D`h9e(RV|%svBjv@4xC+2#8hrW zo{R?JE%YxzeuJk+)A3@JW5hQS-!9}o*^5^i?6!Y2v3OF5)MLG4VD9l^{zl1zU{0AI zjyG0`(uDe69O=Y-yQh8dc81F{GeSoA+!uahiFgoAw)c#rP$;+ZC*cns|DJvw{jQrl zy{PQc5-My%<`bN5+vkNL6-}3&N4+%Y`CY%fv14`1Y7I|Rw>N4|OogoA(faCd0b5-w zfXae3C(8B1ZU2Md`nF5p2Dj}M0Wo*P$;~*rOhHUh{=``8*IPB|jtay>A@cN?v7-ND z^Jo%!gq%!742%E*f3w!+@7qk3dr@35j+(A%plS4Yp2*SYjyt$xiTG1yF-81-pmds1DZop+`Re6Rwv&=bR0UDiQS zuLjEakR&IUOax!<@{u!P%7FpHSKrG!+qSQL+uy^0Lyf}P+YzN~bRptNL+C@4TJ0SOEBHq9*CzVI;CVFbXPUq z4X?zR*_m|g_v`1V+b!~C&C_cZg{_Tug^Eo-tg~pcpx)6} zlcp}_cXTQ4>_x6^+8%yUP=QcQV0ig<(3|PSBZ(3+jI1I41o_GoZ@e9If+O%anK7t> zU=D)(+~hS;J{j8!&Hy3~hzGj|H)P?uGdC19pvYzv#q{>;*DIB9OZZJw#3O7u(o=9| z*V09Mr=VR!Fihrn>3zr~O0p=m00L^bK!j9n!AXD!^;{22ZjL~o!2`JhO6FhUmLM%( z+7vnnu$vGzTtsjE;#Bq7%KXZaQ~2jnn2{-Glc0frd`B@7ji zF+f?-RRNieC4PlU0Xw}?Z&{(MrRtrm`#6^)f1Jjqh>V4H;Tc@xXn3VNPCudEuPt)d z_Q|bv#3~p$8_Be)75oD?eQhtWa5|$LJ*IkTwRFm=kg_njP^p|;G%~;vJmoc@ac>Y0qES#_em_cp8{Q9OydlGv`Y_l`4ZTMT{CsOinCl(>t=(O2 zkJAA7(TRN7b-otiX;hibB!{B@sS_nEp0~<`xRB5Ol=FZEw0yqA<~Q-=a4U9~s%9}G z+35{Aq9V!|b|TG$I3-m!QBq6J>OLS?JqCm^uz4zOq(F|uR*%Q#*-|)e-9@!?P|FUa zjl0~Tgg~td(489m%gW3j8jOT7ig5i`aXQl=9tJ3>d0nda`(-_#K@4Q&kJ?w$8+irylf}t@8r4 z7Pb;g+eAwvlWkBeBuX^VHuM)OSz_F|T5uK#`G#Ed^6zq8Yi{uN+9J1}^X`2H9Jy1h zUIP=znpUWjdLf~_pqUjn_o`(pJBmB4uU0K>$XfxMo?Rwt7wG#nKZ#&xI=Z?K&-j?A zfMqb6v-$4~04OXgLdrlWLFmA6Ox*f6IMYaewRj*XTd1Wfl6-&`Wm!BUnq$5w)DQX9 z_3`%s-t4ipte@nbWWSx!sL6QN*zVTQa7{55!{vU7k-{1slhzrK5_vbGv>_t8z3#Yg z?%pO9lbo`v|izC-`FX9zMH@uCt!7q*EMc4Z`{Z zQBUg=o<>{(%GEm{QcUwx9bwiycW}B7IhP(snZO~_Vs?8X=;G}Lc~qy0Q)vRwb&1&L z$Y^xXw1GSXD<8m{==BqQn!kvl71q;|Tz=H1Tt%5xqN#nSt>lK>;D0f3q`N7Yx+xTD zsNi21U0cCJA>3kYC=eOMW*tYXWI{0xN7z*R3hKdVEWoN}>~n|ApQn2xDQB?tUEl|;yFT_}?@0t%!|&4&?oCid{9rfcR;1*@LcnVg83wZ^^rhgd$ zqe8oT5T8t}+OQ~Pp(gokN4l-}=TSZ7DcBT8V!c^I(5y)U+lJ?ximM8JkcFmn3{E(FU` z8eWqVW3W!03R3d5E)jB7X;6Rrt^-seF1Tz=~(@n*ZaM`L+hKcU?B!IFQ8+@$xE=oyx*d~x!J0*1E!Mj#O7NFtD z+mv0W(7FNu?6?@3?PKw1pVJh)YW+nytL&oiljUrDO*{vlUD%mFTQb<&b$K*N@#lj> zn0W{7Q=(9G3gxBa1ujyZfGrWSllDsKDMOEZgovnA`i(7tSxM(+_|uL{`2)ZE%x_c` z5OX}xg15OZMe_2etx^@{Msf@#&^M~;1=ppMMxmU0#UJ&H-v98-`(TeLv#+Q;Y<}UF zR4DPyxlg?cJk=m>gK?KC0Nz1Hz}k5WtJzG$$9#UKnhS|=EITTcbru}JM)@wsVy@11 zoTB|qH<5@n(eBOa2_W}7c}41xxO73Ln|?IAYS%E0=G(z%&3U1-@lu*DD;gJp68%uH zVc$Bvfyl8_)*>_#T3np>IV@@*1<$Q8eo9&X-e!vu+n#ZHZG<>v97ZFPZa_@I3;af2}~okn1r@ECZCnzwnfx#-+ED&bGs!_7f0x$bA$kafg&_+g@4`wZq4@w}%d|b4oq@yPcQ#c)16# z+p$3DnTOK?gVG5l!5HY`kkgydVR5cFCIOgZr<_6pCAJ`+hLizhuO_%0EZjS3nekl8r#!J5U&hf( zA~evo zvdJAkm%5Ckcf)+V2S{)Iz0@DRYVgEITTXw#qi0}+7e^fX0Oy+Mp$XkzsuK*aCg zP1s7^vknqo6|zkuOSd9C{4+hke6EWMn7sePPEav4~u4J zspM+nkF%b|z0~RuSAa#VpLvp$s711}{Hu$9iEDH{o6pDx+R1KlihrE-LgX_nx#0BE zC+hFZiUd|Np41$^)?V&(ZiEO0G!9x2r@Ikb)|RJrL~)6@eu2?4PQWFb!?*w@M<4HH z^?w%7Y#-K_^}ugbmCP}GD#1~A!-9!%e+|8^bX%~NrQ~<1Cwa`B@3!4gnfS`vO zHK-UVj^}1oxq9cm8_Eo!n94R|izcO`{UA=Y)6U`9IO__JfKlcF(^gK+6TNmZ9f$}w zO-E&ygSn5$IXoOPzHgd*iC)?NeRI>Lf78m;Mt4&HgLb7nncrYctD>;D$+s0a^WKhS z;C~d=Q}Anh9;}M~Tnl-(cYhcxNJE-|R0wJl1RYxk^{aD_W|a917h!*el@)vkhAjk@{SZ`~UHk=?{FFy+757xdgw+Y(=HTdpuBK~H zU_05DUMuX}HO}E4xX;Jw%<*n$Nzn0+goLy$*7u8{tSlEK7+08iSR5(ImIZDF4TWcg zffbjC(&sV=^lLaZv3LiGvNNPBjhRl3NdFcA>X{M=YpbPUUC=EDUDm^?QG%)uW>u$o ztYJAXmR9hzbCcFNWK`uDP|~Wc%oi!IIYpI@&I4~5GIW>Tnm!SEF2 zqDxc~gX9#RS`ZEBUnbuli)Y*w6J96B%JoaQnR4z(&I!$fV!Veb@=TzvC1ki-Jtzih z{-CWYJ;x4YYTUc`Lw6>}9D>7>e}G7l5ezX3@Z*RN8S@57Z1X%5SIcnMnfMe4nj+66 zwi~kN2OJmgy?pZl^BI5iPY`9llJ26Zn6;z4{jyXIc}jN)e4oBq4kz3W)q!*7|xMjZUlU_03_tA06-k z)LR^Dl#6HkvCoyjM*cm~rr8VV>5tyN1p5b=}vGLP@8BZG!d zQfA1Zb25QFQJFDy>zsJ$0&Gq330J6Mp~BrNr*pn!qI3(IFtIYELhWT&^{YztEKhDQ z(8Dc-6H?cbV)d}@){Wp@gJPA}zf2t$ul1E5#-CE0e)oMH|KaKW(TG`_#s}8>tY_}$VI3b zz*H6=6qFKE)_Ch&iE$HNyH?IZE{&CDu~l2IN>8;&dNOUv318|1zvgPf_F@1@2^=l2 zo5S0bkK_`vyKVO%7jhH$%{#9En@v84t9xE$>H|UE??NgIp z{DJrcJ5ypU;O(;VNZ?h_WWsjNf`c0{~8M?LR zUomWNRCtgy9#Z>;n7h>}+rAANT?TR=_e;ga(uOD=6A9pHQ=TDmL&)_iIpp!daY#l{ zJ*No5C4s7{OqXKY&@Sdnk_j~uFaEw91B&8(;DG4cBrpU$=lpTJhRTh#VEZ(Q2Cm!A zXLov*H7ywT8I$i77KU$|t{Y~AI$N)EUrJt?GHgirvgr@`aT{8XQ&wqzlbqyRys46& z@~a}fYI9ZQU|WBe057udm+l|qF3Kc00$;7<)D$PXXBPL|LL4p}PoMAs; z<>hg6m-{0d^w<7y*4R#L`uTZnZ)H_g)umt&kdMzcR^-K5@px#XI5j_H=IZBQCigI$ z?MgAE;$RsMS#Gqpf~Y@c(`vK`L=0n0)o&#JnSldLHSTdf{ONv?VPWy5i*eJRc#ml4 zO>9xzRp|TYpzT_ME!;j~1;3br8R#C#NCF3fiB;zi=QYYaw$cD=M+vPWrS^f>RwW>3dcyPNEw z_ZL$yX&57)w%Ua=q*o`RX$>nrU&j`#RkQ1>o*mf@ZoA*BFFVjOrj8PyW3T!(QMWTo z$_FT%GKrCqTlWq;9dIPgr)By((Bbtd0}Q)i;zq|$X-N_-&rwjnb)Q^+?jnXQUIMzE z2f=;u_4?V5v*=)Jk_>sWk-K62krTg`N#P7}xouUI51*rIQ8Q;cs)hjG4uu6;zd`4S zEp*Q~(FEzBLntdmaLh_EbT}lXstDY=`Tee*d<_W3T}6U-CR{-r#!mO&`$`a2zIPUj z%KmVN&LETN6eFSleRT@bwODw~zOq7g{nnl%oEun~<9R^R4xuLrnt+d|xQZsJdxWqL zbRN^5$!p8KZbocFa0_77caP#ex49%GQ{9Q?h&tjJEY8c#xx(WwnkIfZKX>ky;^Pj) zTOj2ZSRYfrx^lt%WO}Z6jqP^BR(#~P2x+-2sK;YcPh6ETSonF5k>Sr=EbtmSVC=2m4-`@)YSGq5u8 z>G-ipy+TZwVnE4{EI1=177QYKVbgOP!EgUZjQ6vAxY85@&(DrYP8wF0BMXxR;KiyRFKnJ zP4K-u|CY}JpaLZcgQE>M<;fd(ZI)?w@tF6GSULA8HW+7+(galz(|ec$v-Rb(20H79CBtQ7g@J_p{Eu-t;tynrQrOb854TM=Z~zx%c(-zF1^j z#+-C!BHAEKi$lhhk(UmmH-_-T&^QU^-$Ia>K6EpTCkcfNQ7LUL_ z2dKb`qb*Zl0A`J6B8OLicavw0sOtl_8tU73ev4;|XXy6s&E@v4tf(mO?*Y`K)!CsN z5pxhOHiwuc8y7FT2=5IB4MYonzcfIM^8B5O6)v;qYsqtYcYejnTEDOAWFQ&$ zCY#XBZYXc-MKP(8*UFA*;Q+^H9RP263A|rAiN3emGj#I(Xlr-Bqg+h><^hv4s{anE ze|P$3V(xw`hJZ~4oOr?+vr&;9*39q{l6#$s)i zIC|gk;ZnI+TU7Mr(M1`_T%gC@s2DN%KvR*z{Z19yNWd$w=?P4N@Hx%0CCR1DyIkvc zI)c78BVP^9ozlqO7Uv0H;n&}_$s}1Xb+Cf9hm_2SrOf{`a50BGCJL-hZ|hp5gqy8W z6dFu&;t@k0M^&pDl|qTC_@%7uw>(wKNwQKT0z&!m)j^=NYtv1OVPf`Z)1(TE-KGSC zUvNvxWmwKlu?!SESMFe;zP}++hg6ewVnu_m8oAQw&HKl5KTf4RMYC-7RravR$0pT} zWLp#N*^O?s{rzUoM#zw_cc$s1$ifdx{q&z&1gPC6NY7+7;|%BT{)x${QX7wDf`_?N z*>;(1tvm{^t=ZeMrHqKpuc)iI#dx4NqOOEm**3uXQYN=h0s@}XeF39U_dVNnayqTPIrHnrM@FA{ENg0sX$pC4- z2iJ2~U(V(T3pC+ttChZ8xY8M7_OHm4OHYquJ}Y**m)YX`2V3Djgt*rCL&gw=jv7!& zZy3m&MPEYvPimq&mXzU7z-ox^HRe5#7Gkw=9GB#}+g@`%SGUD$+q-(L;af=fq8sM@ zt+s*k5R-trxU$!H!EP;g+s_Fo^f+*wgu~l{$gbWWOa~yVh&tetyA=FJEq~{xCnMrz?|7 zLJ51Wikz)D`g7hcNLp*V%lCC80=2Wm{XtOMVr{t%D(8oUN`$PA6Z>xaugPHiSe{P3 zEm=7d3$!!!W$Z1Bw%nVF-IoD;2cVVB{rO1G&5zZ@jZFXb^)iZO+{^VKLnTz)oI=Bj zz`2^Vjt=1%T*Rq)%zzmQpOxzfvE{TIj=9mLW6Ok(!TOE*ZDPx3^lIwT;j zSi_Zk*O;Ze_7{}{4#Kx63;VY5zg>1A-kiCxp6)p?UxcM0K41liNSSXQCB8Uw4~i9h zbOZgO>3bS>+3Glu@Ohw0IqsKkIpHW8r6}bKvrmCr)W0PqT(2kAaKy`(mP&cNQl}E& zq$e$GG{uzCk&=9d!ATvNqDU+!Mrc1ZR`DDk<1IPwqffFYhzp2I^84u7g{V$Gi6-zB z+30awdD8qKQ|eTmz)HfBUOYA=4#nk_YejfC)|@$bVypc`(Awk?7|u3GJQ5}(UpJh@ z9wZpr?Ieic@q6^)%4`YAp5U5-Sqfl=Z1VB_aLk_I%?aCbhy)H@b+S}_UCtu~&K?kP zhb+a(%4t@#6YY&%Jd3+9FIK#Yfb>Zo`5#6>mFYtUA_{wNnsy}u3p}q0^~?2mcE))S zKL$t{htBoA%aO`=Ar~Y4;e&nnd)n*6&^2YBWmBQB$@SwhAjJFm#?8|`AB7j_@XV|k912+HKBwo zN=h5rOqwFGhX2w8W6WZwzKGPW?b=5cTH0i6gtUy2jTv!Uv;SRfn3MVpy@7sh5vY*Z zvrOgLI45jx3=vEYd&&`15r7;xsMY!OyC}>r$xh;k4-#6(5NIfxsB)HBNUB(zAIN|s zu#~&^Ot=d+Ip}aO{!R@?*#u<`7YxR2J&=0WZBdth9d7@bsW~Yz0<5?8NndIVF&@F) zX{de%!wKFeWK^z$fQu)o@Wj$`zBx_Oxx$a6QfKIolPn|7U33eue*p0-F5H$UrqEzZ zDlJRBHK~O$CPs>2lW1`wno%sEJr@UiI^ve|w;y6``R6540#IJ8c zwsUjX&h>i|ZRboI72<&D+NHuNm=Dt%^$>ycC5`LFOP5b1-3x^AF``060;t}z(DHUX zEK=g|D457!Qm!nd@U@H3E(Ly?VaX$O>m{aE z^QJY$X=-1I>vbOP7YRBN{&@&f4+Z7zt)hOi4AeVuy~sM012%a{!*B&zs3Xehp|V+} zg@&vs*Lw_N6N%*fBFy?s1?KX^PLgSNeGpxWXOaj}+r$a2$d=23Zd(RN7i43>CeZ~d zb2JvEcsg(sbM5n3r84rGIW@er@YN+?H}i78L~r;lGWwg{WH_<6k{B$wfn6WdddP^2?fgdkJkrq2Z ztL9x^t2n?o)g(ff5IZA`G2=VLVA2-u(lZj>!KzA!Md;^LNw$M^-4`R?;~4%+3Kv4( zso4#wCFRk`qD3|XP5Ra5kL7vTreU;GXiu0It;F7g895Zsg#O0YEWEK+q^0Fr#&ai% z0_SE}f>gFevF*|@*c!B#%bp|(NoqmQHu%p;UI~4lhcC+xpp8|fSdBdE&<*Y$u`RO` z27Ma;R#rf=#h{M?a7U<%`p!LB6eFCMIKyelU(qWm-)-=>=aslT%a^`YS_?SsU!pH! zC)2K?#Q0qsp4?xTJr|t`QT_&)ew9)=_9S~fb?l*yOmzj7HR9Q%f5oKKQWAsW zy;U_CbRp*sv(80X0QKk^!>F%5RT)z_tJHHf{D;FK4$!eei&yF0IEj!o%oWA6;8>`d zRIU5L>i_Qje3@C*nS>Fyk}*&33`Y=5v`WPXqhyLRSWCFF%}$-gUJVzyUyl}FaC*iz|rc$*`&iZy_-VE_!8~8qJX{2 zR@+L3HS_!w>qoBL(NmnHF4yg7LcussG&ty1dQGE$r*F3;cf zc=puv+n7?4Um4R#sX<)|GL}k-CyUWNNiW>3s<`!{Sdf~{`fqtz_uq=$NH=W`Pt91R z=!mrn7U0@@5|3<1xEj$W{l4g4XJC>%N%B*w+O#ut!lw@)8T~v-^Otri!7r%t^gpmK zlmzF`7ldJXv@#*0x*J?E1Sv5E8}du&dvmUUT!&hv)cS$Q)Du62{SP0PGPXzn@iAHYr_7m4q&(PWt$lC@-V; zZQhGAQ2`b3P6p`^tvEKK+#lZV`gFL5sK1+@ZDJ!T$xT&~1rwr6de<3NoU6M!%dcuu zSyOd?HT(x~ykBB08+FB9KT1rExVp44lF&Q@{3S8?I$;~E! z78N-wUhS)GU)P<3z3TY?bl~q_`xA<^NY|Apfs6mG!jn5~KgtdQFsw9r{?jH`!bd2Q z+rn+LIeF>gv%eQF#d~|2O*sYVuYm3DcRL5K7S>=yfL;2oc4ukNBGqF zBu#UKd7&w~xYW#4K}u#WQ_``?P>DABcV-+$ZJ`vLz*a%5oYBGIbYh;Ohui#gP*apC z>Lfiti;%`!`ou#`R@Nk%Vpv^B_MF0$Eg=d7G?MSXof$XHmK@PG4T`J>ng34(&s&{4 zl3T?)eP{paWy6b@+9Pq5P{Tj*bqOwfdie}||4xVCX93*&r>8|`$t|^%bl-o$4B94i zVX4`jUBV!u*|fW@9;-?{@*e^G8lxxmza7K3?4S|5Yc`eR+Sn7373$T3q@A1oY3cJ7 z$UMPPaHe&a?gUmmZBF#j|C0ROd5Fr@iJ4gBpZH?-H#)VsLgyr@XUfT?Ifvzz_O)zM z<)jqs|7ZgZ^?zv6Rrwx;ShDTGRad8~$zGUi7WG!Cc`{iMmF6V^2mGhS)#exx-}w~l z*9wz5kXCxt;cI967+hw7=V_1SmqSa*TBBOR|K~uX8;q@_4oWyJ|KEUIWX7-xS&PQT z$(Z&2;eQ&k=bz5uAK6!zmGZA^7pZH;wNU;?EnC@w|ETrXdGJ}3ot?Hcy0WE*|Ek9S zd}voqDUGCGs*!EtAD91DBmcu-Na1`$dzx-JyTah%-xx$qb5YHVhE--&%zqWQ+sAnQ zmbR?2r_6T=9NRt^)80B&4*V0h>2nS^R_>mmXgC<_nJSCye3kR-F0g!klQy$rjM}k_ zRM9x;6Lh|0QQ8;f{yVyBKpZ-Zx*FL5) zddGHp=J8Hq&OfQBfq&iTrRzQUZS-Y>zl?9Hxk{RL>8hHwG47;!dsDTHDc|rvlU@?> z*^?cyI*LL2$+gq|H}eBn4D$b1Y8(6+gG_Q#iKL+l&f-Bma3yblk!C%dM)hgKba6?| zlnY9+b1&DTpaiT309dyDcnSsQDT^tX;sU& zdWtITY5MIhEws|k78S|`*u=Hv=@=C*Lr3-Q#A1(%Vq;d-xZGm$Zm)W{S2p7b#uj62 zFOd7%FVa;YA(0X-%UYcrp7)n46Z<>+P4F;NWCe_d#7O~BD(4jzzm7HVKP6EST zrRoYv?U<=cuS+k5M-SH)LTI?ww`Agn)}f}Zs@`eN2g>hEOSmGp&h@qpjqrjULGPX6 zONQn(k_imbO11noR*RM59T;la22;(DqI%lQH6&(B*03b*Nk~PU{+EbB1vfjZNtbB# zH$cr3rGK%glvFBh3Hs)2eu}o1(hBMd7b`ixBN|C{v^wpL-iWlEO-X(6(^Bzw6Dm>@ zDLSl74pC7su`9d{29!yfcykE%)>u0I)-!IBbTPCM^UF9|am0s-yLOXYb$z{Pg46cT zjySxqqtIzgM0YVo5T#zL)>UGc%t@gjJSQ7XUa_pDhB{s^SVXRp3KSVBl>270KAV;c zaNp^cx07))wgB$)yskTCFk1OIm&d+8Kf>;t2;QKBNH;xU4h=|pMe|9| zun!6i7{bP(bdP*<@65UFA#L(+@T?ejJ`HvoHnoVXDGnIuqIdBDrrbREm8cMFpmj$F zXZdEGDla%t2ipv(QM@dK?ks2h4o-QxIbi5&D|5l2{9Y3ksa!vvqd1{$Ms0qpYkmU< zOpc=G4r;#56IdUbz@Ef{{t^=HsR|~n0zFrpy8ZY_s>0WtDthpr0b~5!Om^Kj5*EgP z`;twWkACKH>y{-jYEHqufU*vOP^naZIa{_0 zv>W*Jo(RVx;}iR!o>$JNKo9R$67D5fbl!fLv}+eLw@hLsX_l{!4@!Fb)YE^9En9?X zPdo48W-YHYt8a>Hj%KdIy`XN~&oo|diGotqI_Q`;4wg>Ll!?q%D+~>$JOowg(KjI( zbTMTc1l?)Md;m?(G6URXpdz%L(r0ZTBtuxc1%<`@99ka77PSmp8*h{~DoNRrc}dR) zjuu|%RMx069_SBy4v?k7b_%!@hzBx&WQ#T@YZFzGT`@e{PZyDEA4)_|YUsC}JWUPw zNY(?DdPh^Iw?&vna<+(pd6!gNGg^UmY=kW36MuyBM#A?v;5O-4{e3 zn(^StJ_uCwg*OQR;a?xr_K>I0jnm54fkgTfQE;7)%!C&ie9_W=mTUZ-6SzwBN;SSS zEIsN{7fA~0>X?BI-*WI?ZOdg3YE{*6(0+IQ4vxtzFnK;ItT8>PIsW1)@ z_H#SYd5rZUKe{yUI6B~5H`VSV!nHa^jj<{HR(WjHBNTmSu05y{8aT`^16+hiIyOB^ zwa*Q)8sbd3xA<-xp$a9jn~P=|L?A(Vks4^ni{HPD;qD^K*PcD?O9O`?!pP}??nZhl zkiZSA+A@S6D&`+#hjSfK83KzUa&33s&batjlZ{2Q#~?J(R8fsM|8xq0nH-0CLVQdU zkq1Ze!czs)HTFfJDbXd?oRt&uNK4-aF^U_?_nbLE8Y&-SlB<3IFLX{IV>0tE>r=0Y z=`>6DCRMKx699OU7!PDV2VSK zZcgCuO)g#8R@d-vLVm63mr(DdC7bD6Mey025KeTNr-@tWx)E>}ESQ*;co6Xk_{@pSMkE68mQRtrG>VBo?NS9 z)KEz_wxHVfd~{zytRzs7N9ZO<<_BAL%Sg*yd8{7kb5J4M_GE}k|> z9e?wua{mWOykdSW^&LkVCpBfNvPXz~3+WH_9tjZa5Z(Mz+)obcWzIY9eL=TLCL*Ql z#=RLUG#hTXk(Cq{-=_SSPo~OJ;zdd!&hM@HiZuMAqP^Y8;JhqaZ(Pzmv}?Ru8wz@D7Kqmyajl(#kMd0SWU>je=k&_s0o zhIg^wO<1-8b54?j^3s-Vq=;p@xO`o}yJLjOa!s(oaJ7eY`Td}cMlY>Mb#JzeRS7Ek zacIKN=bE8~$;?KmrYVV^wI}}C)cYF9p9k=I=|wIalt@8IbyQn85@jr&}C z#epN|kK34>SgE>x8b7pTpY^%(%|dkmgXPH%>Cg=BlP)<2hvTuqqK{UX2Sk zJ<~)qZo8)bix(u*Kz$ftBJ_@HquoPehq;vsyf~h{Ux^5N3;d1X^ z`>|b>Sh~Ptc->!aH$BM$0B&o)^6eeq=B_5!mrs*1Q<0R?@Q-%kIHtg%WqkRgw9y1O z;KK<99Bqm@y-2X^w1gPsU+QjHW(QSASlG~*H&W84@nwpQLo|zq99s#qlKz&}$1?H? zI-Jph8Z$hx95>}v8+fklGF0JK)0x0Xx$y8n1_D389Heh7c57h_FchD?V9F{B^u+|G zw(!iKB7i;DIltf6&uPxJ6?QN-w40*%Q!#xWs__`)Bco9z5Vur2F31wFzJxw;^5+b6 z4m6fb>62Q@4U>919jClOO=5(t4_S=9qq--9V&CAS#uLAvI!F?u39m|d*!@wMIeH&P z#~%T=29s#(J*4qFE6s0=*U6~nN~(}y1uW8MTOKY zHo14A?fF&J zcT4B!@4Nu)Cj0KkLQFAsspIgyihPx+!vgJRk! zAp+syISB~VEly|PBqen|Wqm})cGb-Eo{}SohoT)qC`74i-YQDQwSZ=M-Lb6y+;WK zjdYEqDu+fcs$}{x>dW_|8Hs%GN#jhm76wxogGMtX-%AQ@>551;ENhyMgE|0>AN{0l3RKAa zBDm>53K%S8ycuo~9%$fi<8GUrmUkygvwb;-nvwfocjjYC?Gv9^mTS^w%Tchzo)HO= zO!$)LpjCCVJ0=)S8jM{CGXaVR;~SG?c=-mmP!Y4`W8O2|x#|1r_y;v{awPtv9tI(n zizk&BI_g{t;-L7u682;9yT+-SBv#I3T1ztC?XROK?~5cZ_c;s=ciBseW`fGa37`e) zw3B!`eU%wudT?c`8bK>mlu-t+q}8@Co+g-wKg5o%d-57vp%Y>V9*_}(S$oU)@!yYQ z1Gw#QN}*w;0|{MZO;bk7%Qg(mL9tjIzV8# zf<7_Q1*-RIh^OsBkI2xvBd)rEU#9ZFEtXy(emWgJcijc+K;OV0?$v}x9^Rnlcn^t$ zuf=L6bbp6DXc$M9bx`Y{b=w%|tfrxTYF8{<)tNaqnLDKGMoN2>iu_R0AL3TC-&5%w zu}{fx2?Lo@37832GRE}C)d>#$yfHE&Mu#^#j?rpu$%HPf0wZ*g1}(WX+MCL!SKTtg zR{DyUClJ>(6=Sy($*=xJEc9R}ihopcyLWrUSWHs00o&PMA`3C?9PFQ!ye_Lx2nEMFW$838uiz z+JG`dPBpCFviv7IOG2(QrLOW;?avSegX#&TtL|=BVHJa!L@b94i*q3EyI?#rAP7dA z0kzlqe0vTscMJCqPJle<;jDukyCQSBvlvXom^LH;Bk?u=ZsvAYi}Ke2@0G3}K9zAd zC*CnN7H(l}`FhDV4pg9Ux;A&SgJm{MV&7 zMuakR`ws@7J-?;0sD2)2#qB@%HA?wa0(+$S*aDVwnR1A9z(!vIT+t?HsIaiCgw?LM z=M|~?);~GD>eU}pni;Z+uowR5H6m%~i3trp&`1ogfZ2ZmELO7g{pEyJdM}`id)9yJ zL6@7v8_}(PDc^55xNCkj2svg|XVh;7;K@fW9jSfcqMN9O@Z68^m)hW#}fJrbZ9SPE9rzn2>c?VAS%NS9aAA6I8PXYYU8s2|8$ zQ^o2T(a_J9Gt??X%pQsINI`&RF?m&noRF?ERGZ&&?v0Pl-jgbroSC*dWrn*0_ye^^ z6aZ{uv5y!;l={cPMWLkF`m4#Pcnl0VbF6J?$%%Y*D>@2aB2~n>^YqT1%dXhTcKK?l z&bcZ<NPm?(|XUE}1rvJ+x@$hOLj~Q-v)_q49!hQ4>>Srd9t$ufM42`^=f9*jcr1 zdBw;|Ak@yc*FG?KUm(k4*mja!v!T4U)}nJYMj}ndE>!u|+{9iSR{DXi;Ql*DJJlsF zj#sykvHnC7#d%eGcEyeik$2E zWYonoEAPV7NJ|j#mSQWFq~^i%RB0DUQ^pGA_l#Bebt0GKFN0V$Ku@r>UHRo+Q3jD1CMtr zwfpu_C#Jk@j?+L|#%Ly>aA=k?>lda8$?SJ`)UB4KS*TVq+mMx1DB&8Jz7 z;KIkz*I7|cXR$CwDrd1a6<)>S_vlU2(H0h*YcQMmDMANxy5VeqM%&`cSA(y~%X=@E z`~FZz?3OU_Yd~QwooQ2-p7#S@Wp>0aBMk?X}l* z<~2M|3oaE@mQ^trsbGmSK?`yRE*ley$_{T?SbtkKaKK+d(95tdhH!|@UfZ9bASssU)%Bffzo+Uf zyUoG!(h#I`sB~z*`^+B8EMXk1`n_G?SoFgz??1t+4I_Fn2GFI6v#mU=4$~pKiANXf z0x3u1$3^u;Kdg#Tq}2!3Nv#5-@JwaeWc>(ko1NY()0i^AD^BQs8n8t30~=lYnbBPx z{$T_lnxjVekwC_3#jIw}Db5V$h7->-EWlt{R7knQ{_#4%IIV~scb^{#k8i4hVu96N zS)BnG#$_m^Z7HH**x2)vEPC6$ycO$7*KkTEYcr|Tn41431#9FkX9Hsm#ASJS8H*^` z`IAJ@f1X@Ep>nh~-+KI*KSBi?KuA|K&)aAu8I{Pu3#1wtC4e9%RfPRhvwOr}02#0{ zG4~X5K7m+TOBmcPd1Y6WijbJjvyd&2Qa&C$pf9N|PLfrcP-&1wmT@h_3AS}E1481r zvA(gxh16%06Y*ac(RI#ZM)&lzzhsIev@jA5G#)0aWDV5b>o|0zQl~I4B>QT5fK1Su zsWT*yITi|55#sVsVtYnX6!z?w61sS|SkRn8#j_A&Ui4RcxE2{aK)m>e#m&6V9g;k~ zSZ~{phwZ{CnJS-y_uBedsEWzfeN3dO0CcDHb7*{?6ZRp9W?_nh@8bm>bZ^`^-O4{KVS7*C>0Mv_Xe+=?8qb$zqj&4; z*+MEV&6lr*8ztpdG!oG#(n<+cY2cMQSyyZ>o&Xx&Svs1S@80_FVD8cW&tj%G&-LhT znE}!hYA&{SbjFvR`#PJOn)Z)|TRRLYUX7sobXeBxmz zi2UK?j>p z;#YE}b{d4V|sQU~LS;4e4oU;f`tvQDJ=pcMyLh zg(p(kks4HyD&XdeecAU#a!6v*r+dO)-~4coP7y4h#Km+gWLI8{!RSH1rM&pE=S9ZuphBD85+SVlzJ%y*Fvi7nEYjp!r>yR~id zQU+>SCRd=-p({qhw*6^hB<$PYPHaS-LNO72hzW;2o^V$UY_V2X*uu!-1HKfANW2q& zv!TW={HY_od3$M;@oYfXWJKC6F_2qp#+~QAC0dS9%et8);)e&0v326;p8j^A-`c^* z`?jsWh2ftp4g-3WDGqb5@%~J47?EFe4U&+1rAoc7x+NMQx$IteR>i9|~`%|i*HD`eSNT*~vyDTl0 zP!n38+lSZ-Nu|h!V^hHXhQ7L~{hp`{bHn>1)J8d zJ}F2eRXg{4xS{Z|PB9c-N9uxq;%ps`O_HzcO@|%D&FwxvY|2}}J8)}MT3uZ(&T-{Z z+Vh#sx-Xjr$=hTTgZDIOWQDq#!>}_A0ZXLSaD{B-al8ATGzy{c53pQ1eGmPOLbs3z zp-((%k6#f#9ao>f5Nm5eYKaS+^MN1s(6c;W9UaN*stGPs%G-wd znx2b+hlG>(i_36?oN4nD(!l`7pdWN5OcOd7Z4)Y9DQzmJ zeVF}t>;v7f+YeQL??sV6p5PlyU%P#Jw%u&EQ9V-{7FE!jT!%Get)lW|;=lFDV-o6e zlBo!yhN2)54+U_&I6)eCZdo5$48YtnVSx2XHw-=j+#bN04iSzV#Uo|+f_`A1HJiqj ztsW-smpU1JbJSLXAad)SpK9Uk-2?O*r$-yy~enf!NbCXb!64HnnXR z&rQUnnH=Q+?O-pBj1;hC1c$4mEAfgZy==D_hU162PbyyLo0Ub+h z<3a&4fgW&tJ^N@VJMaQ2FqG3H2T2J0Po}MI=00Sct!R_{Qw~K*x53@Eq$ULLAN zd8Jma*HtJv$_Ol#o3H9))|L9o3Y@?BrBpA8)vxqxgAV7JyD<{5Nz zZrM*$nCy}xV6K=uwmXr=ZVIu2EOE)?g!$T({CDyrg4t9|nBv7Af+l~KWiLjja280l z@CO+u0G+Dnm>FbU*OQiF=yfHc^NfCrN9w8MfYeJ;a8Lf_Agr^6wi*Q9Y?g-!`@ zT(W|?^eo%G0r?*EP?u-|kF{KGZ$bgDEa?^+74m?xMPWsrNFduB<3d2}z2RFGN6YaO zh=p-wVN{R8KXVG($gA5oKUf0;3qgexIem_v!W>&YX}fpa_a-QvOW5*}@gBMjCIZk9 zuUGU7oKmJ7G;3ILV^EQi`r03_bMpIu3aXb_=J#x`Ivu_lhF3#fW^9)kFIFb9%S4Nn zd25$>JEu&JyrrK9!@4XmqSA@fIbiI(>}i^y*r_fA{Fl-gEI=MjoPQb?eoDg8|B}s8 z-5{9NH#WT3r!=tX@Bk6t`q%Xfe-hn9bI`jqng_}pk*}8<9Zv^0pXn$LLWbQ@BDO2MN*ES#yWp6@=z@IQML`wIuh4%v zg^)!+TX=o($26R3>NLXb21zq?Raghxsgm-O-Wm$w81o*wBNvRxA9h{LA;>~ zO-7!o0Jqk}I%Aeh=h)ia(2WI-;m@V>QENWl%h{m->O=Zt&yD;%E}M|CDjst65By4D zktmz{q#ooi|41noJj>a9Zzfhh>L>M3iaE2<0hwFHvK7V``WJWp0!hm2OFpU>>&2G* zS1i^q@~;!Y%Jo>uk)^~n6+T){z0p^)&KMz$r**;vePKoU@oW zjI)VJ(n~IXwqGuQtHZPlMzr3DQLAT)#?h&q#1l$-OMm?FxhYDX0J%={sJz^obn|vC zWh=%9QgTXpH1J*`I?@}>;C1KyHC8v9^FajN0J`O;X%TE-oQBB85I0BHG@j0Q)sc*FWr{djjz$S=gy;|u1~s&XM#Wn+Ze!>& zp6{Jxpb&HL!e#$1ryShmVmw8P0}{m+IC7&X%Uua1=M8lB2!z*6y%4uc5{h8tzn-`n z2eI31IQ(70{G+a+93q-VB3@A?w_^4+8H)4u3g90p&aO$~4jUKFT~zN_)O2IN6$~1J0&I1AaD(*2o09=Sy3DL9&cb8u@l0^4|^`LjjvZwm1zWgYlD_M z{@E0|!0WWB)+Jg(&$>iA*nyCFR5w64WBv-l(olu10h@;)i zr4%WoA{l8nnx4ZJiD7ng?3!N9dFFCWELeq7G#{)+h^1m2A|%-yqCJo9T;^Y=t&BLZ zG0m9-jE{NQ{vonZG`Q~2#v?#+$7xq|-IC3o13e47$Tt&^U@~Q8s%!^SdM2#7$es;5 zFepsOQu$pR)_AWG+2FyLz+u4a}%CUoBC2xh5s%W51@Q;$_tm z&R8`<^s??7KNSjPY7DV|j7O?$q6N94SXJj+*$+P9inT{#?HjpqGoz%lG>WFLK+R>4 zbOgOtw1$ECU{h)}m$PS&ReK_Fbm|I=;RJF492~0_F_X2u1G^q7O8M8Qn_bJz7z3DJ zYlp7eA4IvHm%eCJ&Sg}qQu-^77il}XGYNHmumEZ4j?xp8p*q?qv4RP=U-Md$vpASD zU?^NjGUYD7e%U!W-8(w8fXS4*06RT90Zzw)#R+!-_4N6(lbz$ElQRpNPP+@h=O_CX zD0s`;LbQFKPYPr?O;;|F-=}ynsO3buXA{LF(`WWsg90yl>^Y{zz~%-X$p z3L=@DC&(#(WCE7RvkStmX=l3@FylJ`&&upK*J@j>Zf90PpgQj?R=%`cC9wcBwkgp5 zLi5)JcDqW1_Zr7R_cm6ejJ{04X6jZqV>#D#PJhyI@)@rhHrQl*=LKp=7K&E}`-`Tq zvK$V*+-g+y`B=hwo`sB-e{21Xyj+^7|DFBs5Su@$3I!S@WO|ve&~_X zD6J~#95hy8`k85=f={INx@!WEPpJTN)e>J?IeoqGZt*^ms_6#K5r^m=U3H5aS^db& zjF$IuYoyq2g&##;+Bl$95_CVi@3~VSBYhj`Ly?_8AY0J&;VjvY^5#}ve8X4QfM~Sk z8uEctOcX6P!ON^ND*ekwC@G-Wa1m zwSYoYCbH(6IT@w7(XPe1v1tzGssA89(9vWGc|<~m2_|fdE8yU@#I1&5b_pJbAFNdN z*DL*16E`P)+;jr1(NAs$@G7kf@!cQ3ZNpGe`49NT$~*M0Ox{@;5h$P2(tuJ2VqkUd^sM@n zC!1R-nC2)H!{k!#mg+H*dNJvODvP8Kf>40~aH{M~QB4hu=3AP&@pL$cDBcIGa$G_i zZhWRUlq{u!qNIoEG|7``IPclbIe-@ISV{9zv0EzU1?2D%uf!=5jTA9lS{B`)hn8l; z4vToNFmydh))eCi2SnP8km8f$_$33meI=CuuZ30LYsw<4ie-_hkj04(qT%H=H=@hy z#@=i8E>VT)(i>j*UAA^fjQhsoGq@lyoW-T|DaS zP@?OMcFZki7JV-;hacpij`8k0Wji#NPb{giS){y0{_!jTKNbt5Hw)PSwL#DYzPh?s zvlbH%Dk8GLHGUG7U1#cDe_j;Q?o^HR*uCWC3l6cxEah~Bc1U<}2;8c?fAojZ6b<;i z4$Oepxv3cj>J~S-BEd!x8!aO-#MZYS=)d4Nar;WGm5mG84v@!&hl9~L90VMiisQ=6 zY1thia`WToA#@0GHM z>r@o&*<`se&Dbmns-U9xC14gPD4Bw+bcNd&!)Zfup>Ar9gkry<`8kR{tw3e`&t*3x z6KlmYB+^672R^BNJbuA~5yGWh#6ErQT%#@1f~=r)d^EaQ!Mo?RDeS1KZF$O1 zVE`R56P%WPQPd%^Zf#$gnySVbBxJQ3UP$eaD~q-;T#>5RVR;v9>MIrkuPNi0m7o+UDTT!I%DBE_n2h-(WW?D@wz)`9k< zjNA1NwV}B^lr)eaH-~P&OS#+YA*b3T%V5njPHdbrj)mCpIg6$Fan{Lr7eWCpJ%x8f#9X zf{97nJHPDgVqdM^SdK?V=-yCn6Q4$;Uf9K(ABJt?3}Z%jJ+{;gUWmcgNlp zT0{UhC#}-7mGam}xD<2v^ z!0v$_nEKLpl2-Vh4yV!7>kHe?O$#I27`iutndGRq_Jm5&FJ;J+n3$R_jqs*4YypXj zZFm?Qdj>T4yf7>nxEY`*9PeyMIjdbVPDR7A>``eLU0t>BG7p6Y?Y1`x^!8R(o4kpB5v27an^h5HLK~sot4zXd)8Wx6f3fnS zx95|+7b2c}3)5mrgW$qL5KU8&bQi|2kvI>-$$3BQyot!GTR$9)Zcwt?i6qF!LRGVjTriwfI1lzc4AQo>D?8xzqN~V;qCnWzB{16P-iZu*;5>^% z@XLv8z_fE7FABUDUwcfY?AQiyF%GA2n1KSlULGJFoz~ZJU9u~_7^F+mFHr_g{TqD| ziubYuZ#W4$0HPLefIN>Q^&9#?4WOXq7=eV;y>U1&1%dn_Ejgk1J#n0rs;iQMs*eNU z5s<}X6`I-|Pw<|2db(Y;&{2Y)bE3~G7C+&eJ!0?h^lWQ?Uu_Wa)4wc#w?qG5ak2&! z?sVV?%2vxGKg6j3;w{jYVlwvVC?lf27hUod2kBJ$(h*-Rr!8BM6dL`>T3x({Klr!) zveSH3M|lP6p3zFj7ef&AoBre`o28|INWn)Kt<$d@^tfE)=#)RpDbt^+8EVO)(vgvE z;CLLJ?yk{xdfGe^N84xOQEip=ZeS{5&_mcvaZ6)Ag$iM0;cZR#4Kd+00$}C+aWFCD zDVj`sD5Vf%pi>gYIk`hb{YgjofvX4y_(H9ms1xF&0=8+aRPG`!Sz16^f=x)1mMpmz z!_?A-Ug2MT#Wtwqb-Ejk2GPYFu)=bPfJRZK8bVm0+G^MV>nBXzhVFKRs>ae4%v-=z zGK8n{8+1+IU$niWEA%mRul7pvS0!D+UeFO{0%_x&ModqCI+nFntD1dq8_hZtN#De{ zi|ZHk7GS&<1E;*CY&&ST|G_C{eZ+D z73}9iT{TN;$(oIxgg^=-M8RaG%IeuuXAXVLsAxNEVk}TqSCLQ}YvN$V$m_fz&rv48 z2-k=Mf#r-d@gS1r+1|TLN4bE#i*UOF*3<0+m4OWbw}Dz>fXtDU51R1*+sjH7pAi@2 zS?MaGBr1TYjb051vDS}aylwvT9KEH`CSG_4Cz2|3=>xKBdlZFo_$IQhX*zv8zflQv z*A~e!kY>ELfnP0`;EvkICr8gtwhoBhh@~}(g?BRP1Ds-#Wlx(Yd&g%^QBIm$a(nA+ z%PEHmb}95__2ltmD13K+d~^hMlsqs*hBx#V@W+=~*5Nlb{|rZbujgAQWtut`BOqpy z$NKXq>`x~?9Z|3@`w&j}DUicMjbYYoBge+xIqU_%%}bRPKxY77!=q-u*C^(S%+?Ww zmN7Gcdurud%dJA|t5y*eaWLyE$uz}gc4Mw0F2H zHeXd7IZDt$1lkJ`pd(Yv7El`x7lCwPh?$A>g)*b;RqOs})=* z<3^T$Vd?+EY;=RJI?)4jW!1Mpb+QJvWji&Y;?E0_fZzf^`Wmdw^Zo z>xrQs5IG^=?zl_Q8S_e72Y5)kcZzt9za+&!gb?&9=I8~#TMTeh-LrK>k zlddI_Rn)jDlO9COEAayM-Et{B72*5Jod zPSp)Z**64wLkSoXloEY!7?}>6=R_jxQy2$e8%PIn9Gp+p=je+Z+pW;}srf_sT0)%t z(DzS-`bdg-0n=zzFo8o7kkTHY0xQ5Wr6c-7wp@s;@y`l-t$+?zi$hKt< zDynEE&wd&3A7z}d5LKKknSuVN*?+AO5!&Pztp11y`8rxx7#NW@3_@noh}i#I2l z_HNUhR^h8y(V6Yp=9ZwtycY611!PvAYUv1>mb{KC*OlvHMY(7~iq*qI2h6B6E~e8) zqZrkJktn>XfAv-UVl%35Qo%~0UN7b{T5M~AXS7mjg%@;1`Paxy>|BpLQtQz71Tu1q z=80Ib1|X`7t=FBddk2M_EOKB*^Yj|dYzKR%r+bIboP-jb$ zW0F7``Bvc_QT-2iL1l{7WpHf_@oY=SQp%;2l4X?k2_qI+M&SCCBSXct@9BI&f)>?k z5LNr=LkgH4_-kFo4cf8-3~SjiMYOZ!SdQFXqEZ(ngrapXG6_Q@io!%4pQ~W8I2cr` zz~ygGvN=NDZ=UVjQ8Q&ld(O-yX3?GN^s?zi^VW1Dq2>=L)(VCm-D1!kX2i@c5?R>0 zRmjgGy%+J6G}Ibt00mXy^GtzMMVK)U8~sn=mH!s@C{>hwj!6!Jg56*OhHl1NSb2kj zyDcibR9QubU6xraKvZG2f#QN~k;{TN7mk%P${hI(p0g2FhD+e7Gz6QoZ_;}Uv6{x**9cH`oVHNkOoTb&vjD#u*i z$r^+IzosZ@k5oDaegb-tERW-67UB)h&BBM<%kU(+#C8gu`q!v(>(08EK9N($&6`JI z?o3cVMfzcN{{g6o1ud19*n{on{!CZ0>54OIpBOQ5mQQ+{bMsN;PU_SKcaoaa_P0M* ziQ3fc>QBq*+xVd@1$)ljkuBxf%ubEY+_mJ;b>BidRM5Ha(}X_ zR6BTVF6f7qGVZ3zVI+Nvt8$Ir?x*|IYt1J7dVag2RyV@{ zGdvz(ldZ(eOLs=(^ecC{3S9FDz2ZLJt-GxEzv9;286!jGU{3P)xO!LgC%z9@>3sDb zSIqLR-iQJI8R8%Kk150Kv$_Our_;GC`-$<>TfhGN0DLq+N#&m*y}@5U^UK-%GLMqN ztxtwk#%2}VX6CYI{q{?j&?2^MW!gtRZHrhZ5F_~Fj~x)+BLL*PgRP%;swj;7fO|wF zfThEv(jpNcGYdOQ7-`D2lbJ&Qz=LxMvaaqsic$UR`lt?+C#t{v-HLNiZ&ScaE2N|~ z+X#T5)ps@eM@?_If3MeI(g8i;(!{2C=(U zm<ZL7Rt0(bYtLR@U($|yqBeoyux2mEoLM4S6SppX zv+uIn=xYwIs=DE%QM0bFoDXdd8k!1RJCRhYT}M3Ps6|!0hKT5z^a2>Cp?wMQj&rs- zXPa^+IZ=*lN;%OVVE@%G0fr!pbkDQVt$grO!}!T%*8HxnCMa5ZEFs_XzjpAi56k$;sf1R5Pln%I3wB~Qm z=!EmDBS%}2d5z$vDm}Zj=V9 zlo7y*Nk%AW6#Lg50Iclui)5e=Shsk{0~7AR3Ux5Qw226jhy)=$gR`VpsRfX_83w}G zYVIF3xAtMfkx$h;QEy8R<%5R`a$dhmA8cFR5BU$!x~=DDN2q~`Fyvzz5NWfmi%14V zJ!TZa#?Gqvr=6|sof8R%Uos%Ec`_Bm`t}ZYkK{Isk12()YK#t-Co6?rSRv;=>X}nK z$SZHm5%5}GU(UUK-Je**Ve16|ELe5i&gly zR>RLf+z-myV+n;=#5TH2T#=%rQqlG}h(e>DR5D>M0%(Faz5u>@1y!a-A&l*LpTiBF zZ5@m57$XRmNZ-~c1#(iy%mbi2tMTF>vO4)lh6tC@Xs^7RNJ!k@Iyl=pp_(%%<~NLy z2wQw4l`YX^jSRr4EmvsOuu)whoAc#@br|Us$oD1 z@8GuzokhbA8j>Q^(htKCNp&#ht)MW-7$f&G?6Nah8PFF8NywQHQ=l+?GIT=?Z|H3s zmG*G$Hi|H7m=);Gwdjn3knE|8Y+*ma5KdM*fENsrhshTT@QN~?B5f}KKc4d%@)f0z z$YpU1o97GG8H&6c$L)fW5z`*0V%6vA;FaecZ5V1Rf*fsnM?Y_pBKDQ9;|!y4P^ucy z!XRi~6io*s(rAJjQ8yQLp-F`l<*J=vgaOfjk_ir5DZGmd3K0C3V^b2ij_Z+r8UbTG{oX9uCJ08?Ra-7;SQSZS~vrZ^`w9>1;QWr(0ZO^9SnU;| zD5DDbS&l57{eZ1OFf?jz60*k!ADD~)n+FSGfcKivIc?I9ts%yRW2hpNhLZ!7hK@kc z-W=i52-<`xygbnGpbN`tg9$6pRhVLop@2>e05_uA(4W-b2L4rTbUFGl=r+E2y#7Nj zC%tP-@IC{wRTVz{QxarE1Za?@oQ|GZI{j%^T|#jD0O$$jAu%ueP66CwHcpdSWm?pzPWm zeMV|UtSrA+cla(&Z{c#(*FH{rWjL{lrK*qZoDfeHP689oohU(#Rt7D?E|7nU5#t%x zJHokJM3}f+LS|Y?0lK?DT1r*th_DehlT;6vPyc4aZ0%Q9S9)WQ!rtVHBOOWL^&g-u zdxSTd6f1`s+5ME)UxaMZl@7+i%2E5&bOG%NWzgPKrPAz)%BlI`)i?I5NF_9N)Hs(s zs3hqPGYohL8;@^lnI{lqV{_%xyqFr%olY$$UF77m-0eiu;p4byK)ipS?Q01unB&67 zZtESyJ#3dL*{8|PXqGK!B5&4R7-hVpmO_V1x5-?oQLtWemY$83O!R`yFJgsX&zKK( zru2FNnCUY^<>iRrP;Aob!06&~Pr5-)%$*)BCxIU=Eu$)T?V}gLuq$L(?(%Uz5pN54aa!NOj$Ms=R|wufj>C+#}(Uv zTv;t+voS_<5V5BV!?_pA=!FU+SdOH>S+tHIZG~t<))@l&m*st;>4Y3gl?B;4w0$TE zUFfx(2bEymT#0%WFR3;+S?}X61cTJO7NZyOtXbp&^WE>-92PJFu@-Oa{v5x$cwy*` z`aFM0nmXiiy!C=K5KZ9ny>q<1chX=Xl6?X8q3e%OU(vY9lZPAEcb-Z_ z5d#OWez+@lb!$URDIF%1fEP~Bx4wg)3C$r6#8oqEHSE*|Z-BiP%wOBrG3>iXp54eJ zg#4&vM?WYCaGptA+7N$8VsmavBfp%dcM2!dKzqy6Z9bjjnHl9a{ooCshH5!JN7Pg| z@}{k*oWpjb-J4j#%cEMNLB{KeMj=O@X#5u<-4FO4&`vf)yB%?5u3dYS}wNM)X0fBGRWw?IZ-P%9hX%v^O+fmXY_s_Q3b4&)s{U)U*`RNqwO_NfUulfe(Cw2^goPFsoCfDI=l=FP3t~rX zKjEam&f+wV%oCg=Xw^KTaYq{Q>5&B0=?Akg%^(kYaIJiwNyR+FQXH>OiawY%lG4`P z9CWy=DQODbus{6iMxyd2p~Mce&dOrVyz8?}Ea->i zwmjbhv3#F7zRzTQKF9Z&;rr-DPu#goS~8P3+>I7|UiveZzEJk4?J>C!hK*tv{@)=8 zmeg<7B5sJhj{g8i=2@wPM1*mQjwL?<5JKzAo*VL;la+y+mahZn3r z$jaH1%Zl~^sT4kjO73Kw z%R51ur=r-8W)m;P z{!N~nFAb@nW_Eps0yKN0oAk)G_?8<2$LZ+iE6!;s*(NhqDbV0jGwyx#0&b7t5nE3AjjkI zEmA|W>kG)%hHVbm_(d83QH{0SUG@>H#ZIJi4wh0d3In$80B&27IELB~&G<#Dz7^G9 zMD-6HrCe%Uy~6^N@r}~vll2x17^peVnuht6l>+C^D}U#C_ILi8e_E)uNg1fmjh4(V zy`nhZ%qK!L3&8(OJd#lwE=|6C6vK5 z6}95lK}L&^kc#Ens@KZl20zBk7$9iUg>1^Esq3TJN|$UfwZMOE^^c+hRM>4<)0RGV zqU;)pLSi0d@N29u3nF8dW}B91$S@uxP52;*tZJFG@UChbZ>twl`z2Q|V@xwEdkxT| zp34QpNp9c)-mU;WMY@f6!!eYgs@w-<6OJ>8M*D42HKl!!Nt8*9<&o%Z5`;&(cl5W` zJ^k$f9$^a>=cGi4Mv>zi+sJh&4C|oH0IMN$q80QbF!nFdbeAD=R5$iqFAdbXfp;eOW-^HtPyYBpV!9W z*E4DImRX5;JYZ0YR&vapA)z%R4iQGJoG!n!_ZzLg1;nm)-3fa=dYW`2`t8!+QTLp` zBU0hR`MLbLpx=QvqF>lKxRlBl^564+tB|-*qadQG8cicAUv%s8CfJ9iB5CC$X=I$z z+jI7}BkxYtR?VbL~*7 zQo|`$TRh;$3VZmx3RG}=c729A`&54C#m>%)Gl4NJitHo6)5hpE+eH8}hx%yevGTrxQugQJosin$g+>N_PA) z1_JEgaQu{7Zi$XDiWt<&SV6*-ErYVvhlL4oXJ=87PI60(q?;zBv7N2)+P@x+?NQ$l z#h1U=UX@!bty-)KYj$+({H-1QY2_2mzo^>J52jF&H!O zZa8vWmq(FZ2JdUy1n3k>qrPxqM6x!y0ufG@dVyY@N+6Dc^ zXT*Q}L*y-Eq zok_}(RJvj{<+5;=j*8q@9cMB1wz9sVQ^X*~&k2Q;v&9{UUJ@G2ZLcTJfzJ}J?ZZZqPHH--NKw^ZOBXIhv2x}2`@o)^1AFuqXRZYNPKR9F zxL~BqEENEjC3DT2i>qK*p8oJO+fTa3A>bJi4Q-q{lVHd`1?Z$ ztCp4Z>-W*58-%sXA7bLG-M#%CQSJe8>A|vv#JmQLBBqMSU*$`HUQ)i*%jwM>s7rU+fdUr(SUzT;*BJUb1V)>~U!ylnyFB`@ zA;}iSkHCU9Q-2@P6~ID5Yr{)~08JHMr58+%e3Kp)()FhOdDs0I;$xDj>!B^y>Zw$v zC}-erHs08UKbgt-VBJ;3a2}OatsBr8YomeZ>~pDeSCJ&f3~Jz}3Yj)y|g zvG3}mIGxSH*tB796k-+K%fp-tDg(ijnPSmE+zc_hoM+9ZJxus2H7v1on?1cW3h(%V z?%uR(IrWi$@8bro*_4WGk*F?m-gOJi)GzLI+81|rj!NC^w6BPOwtIc=f+yHck&d+7 zT=HBHYX=`YgdDegl~rp0Ocv~xi^*=gg(a#3dAXWD$sX7%KQV*JiOnrJ^Ro2cG%fd~ zWPf#evG^?AgPQ6w%OIrA_n6GgrHAn#x{46Ggb@(XA;MM-F(Pd0dB*zMZfqulm!f*K z?&xm2q{KL5SQKJ9xZ9uIUAqsU&QjNOqBNAn-szEOe*4`#laU!k=aKo&x8L2F(7RyB zmRZdu+w45FAl(~Zpd>v-xE@W$Q{cq$?6!%Z4nkI}C3B##-w&^dFN6vs;uE7u*oUr? z4eLqsRD4tW2Zm1>cSycii)8H*?D-Ur*{B_Ijb}nByca9waVJ9QeMziXIm;DcH3wgz zWN9;pZ$XEAzKXIhRz~oFV?oNa@`#URR8z1C#81<`(aYc!l0F9p28^NyXvsxMy~z41 z8fXO-iAw~HlOn9jSgk4m;Yfi^OIE|n>=+f$H@rwpj1Or8(fM9ErVU;lE zUxh^xM3lVo*t>zI{>Mi(CXBzq!&t;Hh8W_&V@2hwaR4V*2Hj|^s#pvZNA(iAfUxk= z2g+d;G721CJYyetF(6ikQSULXcdqv(0~C#hSQS5tHL)S8Yk;SS1$$2q;QaN3+Pby( zf`%b=+IcbqjE+9)dpL{(uQLwC2&NNS=Z^^=U}ngwVuG<<85PndoN0y(owR#&v~pd- z8Kbse_d8E?+h5{GuY^sqI#iL1k;t3a%ny}p}&f z4F)n)#46n%;`7VZR|3US&gV7r83!hl5tEWJq!Mg!SN)^!4KMm{`wgJ%ur*i-9?T=J zi&k!_x&`c7b;}dg?ecv);U+s&=!Pdn{j zw)Uk+H?=Af8(#B%at8&!A%{8hyGczy=M(Y~EIx#O-LbamPzR`r*B1L^YLiiurMbIE z8G*aCC2c5YGP*K{Y8eSYV+MptB+&kB@rZ@CaerrLw14Z)-A`UK9d=vxJrq%tMi_S3u#= zL@i`3S7wyL3Wu_#&~sSJ4V!pL)nVx%CovmR>_waCpdH{Ax+c~)l`9px;mh!R&r2tP z)Yh_Cx3((F`Tgw*esur$zzb+QM`fH~ZIE_b9CuI{y3c45NDono@n!j;{v`eG; zl+C^j$*>cl=>p8ieF9fo?Z^mI9m^3Hp(OLf6pzpyL&&Dx5^u@YL7VOnZjzNmXB>>k zEflViy%z^N8+hJA6QOa4hvN_$&p6&}%4|=k$^{djpNL$*8=f6tEyG$GGjofVVMBGm z!@~(#AxS7(q7N1L<0|m#1A%vEY?Q=tEhz||4#-CVFb8d9?8wy>hCBqOr^1jtwws|g z7>g;+-^jNLE0b{4mVu?~iv5G+W|JcZFz-09;@)tUg7mxjx89a>=(E2g-39SNQQuJ# z(6~!X7URI512Z5Z6sVpVn^|_Dtj!AuxGog=T{J4?htH(}E|(#CjFR}#0y>4=~J2ntz8?$cNslk_h2Y9j+Bb{jy^ zJIT8n$6sb0aSpz&^u(o69vq`N_A3DkhvKK>>hl-Wwu??j#wf>qDcKZHdcD!68(mS{ zhT~jSZ<5980VJRrR3!2v>CeE91V0qp`I@AvW9y6qqXelGWI3L=ESlj6#Q`+V6a}6~ zRaF|=gUCAT6u>x;#Hl#ujhiojJs5$$hw*w$pm%IhXXMUjycwNtvSGja(m5T)gX8Od z7CzYM$X1lxXc<^uHl4?0LRQ`p$5@`A#y~LiMx%bvkwJL%azJ5F6x07F7{vLUji*l@ z7bBFYVH5U%j>yxJfN3E%ML7_#8V4xh5eyQb_`M!B0OMoP8Y15mEP_FJ9I#Z*Ypjow zy8%3&j>#3E=`LFoQ2QJZ1Ld!fhmIgPlfnoALzmO6(ag2p81km=?vOSaBL|X>*T@8+ zdySeW)gdXLESFm=FTLu2wyOWLTK(=-xm79^>aDf(aJdo&$8SPOp*IqJj3ZDZ0WtQy7fmoH(}`at=VsMRo6 zDB-lUO>)eg{(zXRHI{1~?W0O@`QnjyEWQy>^jxawzspY4u1Pd07J_2!5+nVl0>vgi zC-Rqfss;8UfMW6t60uy@`np!*1C<71qI-$@c`&R;mo=whaI)h)qFgT~E26BDuhu7n zcUF+654@#wxTp_KM~*}LQ(i|1%h}#YDZUa8da>GJd#hqKWX&q}GWteGD9(4i=yDKE zx@6hFFr=^@*j_wxs`%K_*5PzIJRXOl`SsV9O(TX?V?Rl3T_pisLe+iR4uO>`R#X&t zg|U*%6IKhc)sMmoW8dCz;`b#C6?+1$pgNgr2www5RussSs@A>dp?ykhKk* zQzSvWsnLV1FgX*8<9Hm$mZ2|A@KloaM+WmJJJZluuEh(yLAnd5Bbk$iS|=vE3|HBR z(J3(*j8Z?H!8cu4hFR4-gklfy$mnz~M$c_wh!cq0xr(5`&-CvC82&g(k2m-S5sT=Z zUHr)%itCZPML{cMe^y7!OTD(xu$sI74ndykeOUJq~Rf&#N{;4Qo6 zR#X=^xL$G?#chF&smJKd;#86~I7fK=IMu5mC$6D5z zS82;EdbGKFc;)#uWJnc2`-DHA@b=Fv(u9Rl_+S;S)anQr3Mj7$=xRLZlZRbch zbw577o8XaY=r*(abl8dX$((uuX9$uNouj*%5l~o3JIUP&WC+-owy2__1V0E2EZZfI zfL^}}mugvn_f+xGvd@vKsRrNZF3reZ}|vU=U2A z+T{;8BHw#aDhL(-4=9QL5-g-)Eg*~nN^f7>>@#Xe27|qzEAh3_N|Gm z_lR-u(0_4OK|vdgE#RdRE|8b&vAW;WWs4DND?!uv1`zit8K{Eu!Ylw1pWX~7-Zg88 z<+0J^3JZ-%$q9(Q>!>}{-xIG1792|3bPK<8d~(!m@9plu z_K6~Fv=ip#hay4Xl%qGnXoQS$tmg`kd<`Zy zjHP$9?Eaf8m)y5 z;B9jEtM7_YT`L?pyA(Q1rX315Ues_>zHsS&6P79}F&=Im>{R#nPR|hhT|?`{vQV7G z>(Rwyyz0Au*c}y_iKgTN|LS|qy9MS^=T$Y7Zrnbs&WVkqN~Ff}vB0>_36;+?Y$7@h zuyeA>k>4ks4dwYdh}eTO^CNCyryf?NGsvYHz4wOCVLoN21C&%hNp4z*0~>cxbKm6`K_cU@im z5W5n2N?}Au{}SjJDuAL+WiX)&!8bmvMs!-OD5eK2)C4b9)p=+x+NCT-Y)C`5G-rv% zm&Mv@d1d|gwbc??HjxGr@jS4S{6WMUB~a|4ykj&`;@qCEttO(yCBm54j(7m`gf%~o zuPSA!A$w9tt|MKScx0azXGYeF?E$e-bYg_f3_?T%v!irkbsVC(B->##98>1_gwpr1BIyw_+-G zV&r|tWh-|6-h9Q*LX3qR6V6@uJ8=*@e+~2w3Jr1tPLsAk3*W!p{aXq4!y^qDG9rHa?D$U}2Gm*aev z-c)YUu~!z8L=kQ=q~ zy80Lf_Zzg-#4#PR*Ods-k0#T5gV8Z(Sp;*^Q4vqNt4t3Z6FAu(E|>yA@CWtX8eJ-;(v-( z_Oqks$Hy|eRrE(u+$sXUwSq5I0f0(k10j_3tz5Fc7T?FMWYilJbr$lsvQqqaTDEZ_ zTa?j@MY=&9cn_oWc-86wdk|H=a$X#rpyLQ!QVt^hy+NV&w~&f(fM<_1E62 z_)xYIu;=6e*yi`%EzpwiW)k6Ddm=+vPn1{jrc2S1j-*;&dpxxtM6nsM$dE(YO{;z^ymp+v147t~~&xfPxJ-XPU6 zVD5f=mDQgN#wwO0>HIXC)>yz4^3VnLPdi)NJ13`N4FLXNmN(Ney0_mu*?S?rsXc-x z@MI_eG{L$~`B759NQEoS<#Cp1XQHWU<*!?XSjiR{r%-%2i&i6vwx>mtXiWjEUjDT8 z%T9XlU@Lqr*3?p?sbwwboQy)4=r$}9IFU7m~bh>;wOx>$(CzepX+&RzGIpNpk$qpuuyvvwz*KdZOQH0?Z3`f&9b&WNbQYS zv+NU6*Xl<*CCwbL&N|$7esCz|Pw~-8tAgJlkuYE?D|(>u`JLAe(Ms&~+R@cK^ao zTEx)5Qig%X*7-pen{3vzX0!bZa1k)nxLdC%5BQ=i)>h#ku;Vfb2;$L+`e2fex6YbB z?eF}uv)^u)4BY1a*5R`lIUM=_iw|<|ifDy8r{k?d+ z`j1tTI=Z!f&ouz+P2#)La6G=LU|6BC6DDmEh9c~DVH`(jWbTXU=wj@lt?oo~?H_@( zkZzh*>anRv?8^fX3~TRpfs^wFbeO0NYvc0HI}DmD+hk@GSVbt&mzOD{tL|$R97k|e zoTc(DeH;F|b#l0O_-sS$GiW2s=!7G5T+;8eX6@Bw0DT`xBkC4b-g=#-!FGSB>zl?+ zA^fAGe_LJ^HHz!C$F(O#nL76022Qf`uRlSAV=tM~dlDzrqDvgor(Wkx)c2yxpoiv> z6HmKmm2Pd=?K0YALMnP^!G^=AFH8TbRkDTYYIYst!>}`eb~HVYCXHfLZ>_w{zb>>| zuUe>JPYoUlg(KQ*YptpOf?Ot&E@!d^`>ll?MzS2P7aTon?R6LB9@MYibS23b0+6 zC74W=pY5*S_iorihwk0bukld$QO6r$?n|5-T`_uy(LJ^6Eb1OZix6U4m9g4n{uS!# z_s$K2s+8f8s*=;Gr;Jxnz9rGO5OUFQwhN3c!ujN@Tk2B>46fZc+_49fE>I_~A`r@9E z#6K+E9jkJ70Zz}@`eEO^OHBi9?j_9WQD$&eHfT)0`|c0xxDqLM1@EjXHcp9fUTg0Xr4wJe;5g_N=&bp=)}s3F zFY5LD{kf*z0xI9Vxhmhg_gDEYdgtX%(dd2es+0xPzIPq9@7-By-@EB*-@E@e)xLWV ztoFV8Kx*H+i>rO_-cRj&H&yL>_f~4(yD^R2U03aU_wTLty}OXww;U6mt-lYevHR!f ze5Yer+T#10upGM|OXqv{b~@j^kE-*{)5?3&1L}P5&eQqcb#=aXlRDqKO6NOfgN>6x zxp7=_DgP9qRhkRcDhk!A7sF{4h7dg+kT*t4BwBcfInd6%-S1K~XD5~^(L2lmOR`b0 zvTkyDn6Cx^kvVA3urk>}Og-uQ z9yfb3_DByE%8kc?cj3zm&x-UYJ{?7<>q-!E+S3^f-D{3_lN=GH!V93$C0wz!y7o=+ zwG(e_K^U@-bVAD=Gfa%^%@zk{_0FTPKb`nA57M*q%T}xY3U3~N+~7x}>xgWM-=8#! z^_RcbU*Uh{daKr|)r*>rH@#sv3_4yP!$2Yvh>)>;$nW*Lw&OSKiWCN`2IhgGMW($N zeTlarU)I08D880uct4L9&@6Dipxc*EaoY+!z*4MM1w+=EkG?b@pys@)*a+_|BDv28 zj{WV10%N-c&gT`{>=AQCjyo#6LPvlqKD+4l#y)zEWv%CDGSZE(mYD`vcHsq)4lE&| zMn3xU*Urc3$^}s#s4vo8hHS5C>7~|GK?q~6Jk-jz%9s^?x8;hgWWPISnQ|s)d1}`z zcc~Qh%@?ZJWOOQLM~sDc{fQ>```ZuTq+{PY&I4@PjDub@VL{5iey31#J-+V8!>T6-X-}!`K@jddr!B zeigf7?9uLsmxub0QPGgd)A(qFiwV7`lW%*vxE^Adh@J$+uGeKi>grqL^!O=pOZ1gb zLRT_=1C*;9q|otjMs#tn%B!=G(`z^jy=8{_dvi&sh%YQ=JQbm8N0F}3p6+fJVSO*D z4f>1tvNH_ik_yZrbOBta3zg7b$?bq+39ON*8k@xZZ9L!m6Md{VF}-vIJL#*9cXZ~< za#+>@?u4-JYn)wSq2|&@=&> zQ8Ei=2929pE-9~)(}q3C3W?3o1(;$<;8~Bn6bXnSC&R+(-|4) zP{|jP-ziX^I&a?Jqz}D0pGz0cVoy>M$DdyAD?J9bKKR6|Cioiyk%NSb}TL-aY zI4I58E*ArmiC0Jt4iE0Rk0K2@Jg^TQvuRY#rEG@>4JdAryx{=#a;cjQl3Jji8+wcD z1=k;jgLu_$hP>q|oMLp5RtTLb>Z69e$PqZmucsmZ2BxAW-7n22*)7=cgU~?x{tB2C&YE|ml!L;iAfG* zDV?u?(PJutXE#J###n()OKVtYt4r=ZF>evih--foai52yHx%J;F{3aFCUk05VeHgl z4?`_%AQS-=ZN$Pqi2T#MioAe%RNS=TKu1%MI*I1Q5>Vs@<)V=zf{imv>@XmXQV;^QEpXFH@oYD@B%i%4|tb=wq4 z#0a1UzyguuR-lDTv0SEd{795?N%2E!+Nw_pYgHL3W~2+MB8)Oo?WMAvh3WU6>^&6% zq?Mz9#!|#A#TT-w5h~2%SC)aT<0H2mpAwB5#bbiRTZS6pDhI>Ju6UH^?^e}ZIdf~t zqA_BqLFGRHB_o-qIm(d_G1@H|l9Kdu^c%&SqEFHZTPIUgLKLWSI1mn15h3;y+DCTt zcaXI1qQPUH9DbTf^j901K#+zfhs-mRFi+*pYfY zX|6SKHk@ls`${2gv@)|^Jd6mmWKZl0hhiH9*RLU8#2cT6Byi|(i z&QZL?XX=$ry;4T*(;`~2<(Jj;+#(orw<}i*ky7qkov$CAq-Ax{kTn%kEoRlWmi^K346x=R%<3}5%-0jW$`2L70K;y%{iV}-kCx#hCdPi5A zlW{QW`;)mAes=*#e(aqtp^Qz7(CqPXM=_^v@y%epR$GIpMmK|VY(Q0pUYK)WBhh&C zXm?lNS|&KKB+R@U(KAtW!~HJ%!!1_0vBAfV#5&<4N4%?snBfry5DrgFgF6fLNXB7H z-T-U~eT(?xp4XY>wSG>?Eb-lN(AIhGwksv!H1c@jV(}Muo{Y=Ffv?RF$(@gi#_U+} z3h5(@3%2qtHE=vwlKildZYxg%QqqO;*2jD-xM|7q;GhkQnF7zN@$f*jTCIGF6*4BL zv;qsHX3xi4We-6(o!q^VY^P(j#Q}r9gcuCYJzcXGf&cQyL$6;eJ5y7Pl``wpm3<~A z{oquwds^-p_da$HA%b03h9n`Lg>XH0cONGGA%>78tGxw$l~}o*#kPOg=1sgmY)6** z52lk~nF`)xKfZ}OmK1rJbkCi)BDW9O)c7`>_^kKjWtP2AxM=S>7)%GE?+-5~q$=F8 z1H7uhvC$oA<)Yx{5Y9!xWKq%RCPD?oc4yFS1B|;`!v&-jOF??b61TDSw7H$rx<9tC z7lVCw!>If3i_u7{lpGDk_P?GTA6H~_b3`;cIrYOUF&&Y@%H&3zd)@vGtW}>ae?wUG z0|Y8$v@Qg-f`T(?)vcrZ`qv%bC;9q1I<+{z!6=hDmizg%*HZ_HsZvkssz6}jxiKEc zD9Ae)l}ldJV?ZooNI1keV<64~c0&S^p`4UPVjmhsQQT3!K2d?e&t=5;)LCh)t*?Lk z?WWWTUH_S+^XEw8#=*tqMCs4K@5OMc$MpFSU4-F1=1_;XPgK|N5B4$ zS+OGF!tnCEndw~r=E<9q>c-v>xG)d!1(@n$#Bt$9)8S-8NEE@*VVVO_B#^PsQK(^M zsiB0q5Bcg#$EX&gzBhp*@*vs}->!YPE>^;!I6SMb|6G4@T$;52Ft?2f1G1ksvwjd9 zo~eLzLz+_PDFr^ln7CwYfQ}DwcA-(y72YlC^9I3%7e;oKTbOioDkq}*Cc3myj<5<2 zDAO^ZSwDd3vr&Zusq3Mo_Dv~Hp*^v`10$Du!wPvOWP;-l*28FuH=!+5-CzB4Al0OR+gZ=V3GToJ&kp@W$T(8c}W4Ptk1 zIz~DYQ|-DI^$72Fq2ZlLKSfz9-lNxcemo<;0hX@@v<5P^z&U*J75En;BdVcT7QvcC5CF~=G7#$5`A7ihgJ zt3P6;59olsFU{K5zI*ay^;@e2VYF^xpKq@vdp!f$I6AG*T@eo8o(8-js1s zZNR8DZ+nnu4ckwb@HMfgc4M{Y1|1n<6X}6neS`w#KB{!HYZ=;+(cJCa?{mmUEWbh3Qx zR0pLX1gd*fTYvjac_xyru0LK~wF=!tPy(eko$#BtPv{Af9@o~VR|@;yFbQb9CTo(d zlV|ONtrw#1PdenMv)<{|y7g!>9r}(FmgKFe1e9Nd9?=m(l~7Wps9r0-ToSM9_2PmA z>CyT>o_w1as+mLddgTJT1|3sfMKyjgt6!;b^4bZGzO8{BgCpJASK{$v3k}XfMDU(u z&I|bqU-!l3qW=x3=F8`=nJc&(>qoZs7E%o&Ehr;T`=}3-6johr4^v+Wbm-SJCB% z54zcVJ?E_8Ne^D+E2$cwm5E=3cRYkaA8r)$%FHSamj)F(qmnX6AT=v5y?#&eiCzbJ z)>wAdH&LKizoZCz0yL)PSY^E9_P%)S58o;mC#gf@SS!9p=ZD&v3%O8AFNDr-;--pU zeWl7$)ocG?BoFY4YOTI54xU;wZkgx_dnyBkoB`T3zP`^CBVXE=QCXSuX0%g$hZ#)zDT6R|jSk=N|6w(Cdjmkjz_asK~9BnvfHX@!0R6V*2?FoE-b!7&3jUm166Y zF*ow`c>Qp{QG_~MtB+UV&)RyCzZ~wbpB~FEYv14p%7XtDS;ZV(g)OVT#9HQpM&GaK zM=lO{42{Q+_+Qb|Tfc{%xb*NR6-}iSk+m`Lz6kFHrM)D|6uilNXMqcY$`Y4O!Zzk2 zB~irGySn4fvh)-s>$;X3X-sykT*y~+q=aVxGo^Qp^kz2551#Bjr(!A0clBsp7dDnX zP?Zw4m2MB4i)KTo_J=4XxC&5Y21FakxF`>U>)Tg`?(NfS(nkhnfD?WC6GxdVe(-@F z!Y=+NjcgQp(k+WMG^~gSx+@`ylxF9i36fC3z zyz>QK98ktSnwE_(@;)BM%wa9QGIIPL~R3}|I(dsJ{o zwQ;4EORqW$P5ulTJFg)#Xso?(98`8;7Sijw4=Ou=vQasa?LMeXx`zAP${qzUZS40$ z&oL~S7h`a4`7C7ZciWu1jYbFeQ5A6^HHy`7@ji+HF1U=TNM@q`+3iTpDHnj1f>@qM zX9anY2X>F_4uuUT?_|$w)Rc*U2T`L4)8GKD0^`IQ94Z;+Br00#Pv85dT;GjgX~eJb zZ0r9o5{^CC3xsKq^8MwWv*fKu65w2T(8052Q{dm-{jF!Ga6k(=n35=5_0cPHMu%ha zqdN_n+YOh0UdR|@wr+CVoDeD{z2>{j z!xI%(m3ws}aid2mq5;F0a((4{9aqR&TDy}tEKzyeq0%{{K%E1Bav65-b57*LzjqOI=n!8l9Be(?YqpyQ z+r?ZW2M#RzGRS4OrcsnG9g4YSap+^vi;%QD*kzU9VdYkBq=3;}@OD<|+c_5a0D|rp zcwBDuNOf?C;A0VQYl^5WX@4PH)T(@xPqhiNMl$9UmQ^9AI`VQ(xds4=h{6=0g2f4G z77-M@v%~N#1O{8})QVpf?hivo7j7jDoV-1xvV8A(ej^4R>qm3=AL1;igc)`5^5xjS z@ULIJa!c9{UP-7Rm5XVd&|Dv{eXut`%0}U^8!6q`f;;C*BZ^#S3fk1V&D-n%Y)_eV`YAe` zxu?Iv+gMUnf{Ci-lIL_UxPJM#`rRwbDN!m$syg|uCwJ~k^~hTkiMqkd$KTAY$)2~J z{ax{L6`DtX%GGn=B3~ZtzdC&?R-#J}wV7Ea^uBuo%p{Zmc%@?I(xh87RDK{qXmvj| zr&*%)=n~-7QQf>2N%u@SDc2|w_e)Yhczv`EwC+6U@})8>Pv}TXN+$-9O9zcxcnp5O z{`QGLSBoed4Fg>uzMvns|daIa8iM2`- zd$3Q;#OFe1O1g2uv*f_PN5xqbVdAgj`WzxIqx1BCb(v+b8<~=^F1m zWJPsSyqOLsL7&kWHS+sD(dB7O;b`t0uI$1nK`Y+N*1X@Qq1x@=l;YLB%^twY9aPBL3u@)psV2I5aW94(dZk=? z!JFwVvFdU(yyz zlzx0!fnsHGyj4BfJ8d$b(yGzV;+-3L>#OZ2k7e)r85+EI=$34j-KtXRGFhaRiPlMU zM>LdX1hhgWtv}vt3N{vq#Q8XU157ax`901k9@VZZ#8v}6xw^a&?^`vG7>@VtQP9B` zq(gIvKY1r>t8Eh-h|a;kUTFb}Aiz>VQSSiiBn5DMApLJRv_z8-u&P|rD`9_IT^v7J ze_zhSUy(22K+%{q9<3uzNX?QVXBo!w96nl?8J;}G?@t~(pPxK7Agtse+Qe0cBeRS3n%un29QjaLphO}mHwRTw>asAG*0d@gpTi4*n(m-Db6nIlbk zI0?xK;vd87TjGH-B7@S>3au3LJN|k>TzH-T7#NV8w|k?(Y%J4g5k|d7WM&uj9?Rcv zZaKK)?yXPRYGL29lw~BtCN_@2%ybxBU%}3S&&ZuUKiqqv4Qa~Cj^=jNJ=TUek1R4w z49Q!6*hRAlvK|j7;TZaKtKIN!Vgqqtl@Y&4pV5o$=jmKx`L)?Ghn;ch7M!87Uh@B# z`ol?S#^FmZ{^Grdh}fMOLnP!WkefCP9;R9O#hPWcBR`jMam6;O#eqM7t?v%gFzVc) zki{cSM!nlD5oH;Qn zouW~clwCo?!~jq zpMt%A|Le`q{r$ng@Gv|Y9slwF#wXF~oJ;z@kD$NQ z?f3EZLG+g-tWV8D?Ee1Q(b4`xc!*_4=^kSFTf^k~tVb}zL#!UHEPVWQT*S(z7Lv`+ z&Bl&9xQJD#6L%47(*HXBrBv*n=&4kVoJWD~L2y1z`r-`3!})fdL2KNBkC*sNcjo$b zRU`Mw5u4bO%4&IT5rnz3Yu5}Sl=%9m>o4iLWByvzbbi)f%J$i6qm;oTTYt%=Co!TQ z(_hjv0SjD}lZz?$018ZS2n#!bH}TP5jP^c7Uc_&q$FvBPOrL&qT8C`y-Z&g!i{IeO zo$a*dLA8{VlIkQ28GS5^$yG?PqJ50P6;l_8QuQS^sa)6Z;P${#a46IWYZmB>G; z&SB|HP?-q!aBHhqettPYRI5j^|f)04&&!JM%8P%GpWy64YAU_?KOEBJL1>Bs zHRG_W)(+?UOl9UBan*QzijhlVBt|9X=HSF#&$B5+$NuoA2PkpKPiAZq%;g?)aY{d* za5GQ13abc}bSx6|Z3SPv@dx?XCX4h&XZ#_TyKewqsk=ND|J>c%-%*AgbBJqtp{#SL zH*R};{d%8sr-8x&k#%?oI21;;OHmcyf8X9}?i}rk9}+P+>Sc0FXtLKZnkK2J^FgtcGLg%!mm3Sp8djEeXWi?+Kes{S8LY-DK@RCi}c8q4G; zQlVkb3;O8T9nSgZ;RQf7?rdtgB{znLJtfW{=a&91gSljlmfFh<=6lswNhEo`oazYlQ#T`WqKb;g6Tqr{u^ad597UqAbny?`svxp-b2{b6P#4`oW3+vj?avFHe;?vDjfqq z86KURS%^10HwzzbPj@7`#E6Yf{p)VIQ!srZr;eL9kHXxUpnQt-!|MKno%6G4i9OhE z?$2~(-hp3^+9yU#oaK|==G=S~x$DV4oyf$#{pq*ZvS#;iFQ@Nw#L?8Vy@fyuYwVkA zn_@U*Ja%g>M;;b1m)Q7tY~|P+qDu8c@Rbbe6WbV0whs6Ao<6{yz<^S>1OC*|c|LCf z*_(hKs|-Z^WOfAE&_bf^xtVBj`z=5rO^jlhKGl)+7FpWI8xC+a z2|7w*3KShawdI>~k?h=p6d(hvPW)ld$XH+m!w?JsR=+O`buI^CS3G(ASQRiCr$Z-e zZuS)`jpi$JLCOM(QO;S140yt3qoI^`{S0cI@oQHh|*9);Wa=8WlkY7+EQ49yQJ1|97 zog;6I^L}_B*he{oE$FdgGvFDV)2(66icXGZmR`TjJ#3GH(VcFS$ti{(v3sz{8|sjl z$~$2=enVapWjtG$y`F!CD@eNFBcFpW0mcn>&*y$T?*omvt_kt$C0$C(P;XF5Mfm0% zKYsCr*et!`S@sa^;d`g=MX1^wb;iLt4jT*-cUDa&dQ3s~_hx`kjpECv&F!6MC#Pqx ziU{fiy$OzRl*u`PEG0XnnCec)CkKkav2YM6YIu{Nj=V{u*jjnn-m3nOSN+c`^+1-^ ztx}OGJgQ#HL8!{L(b1kJ5s_0o2-2c=+I{v)x?fpHA>0(jK=RM_PS1W-gA>%3?cQu(EBRm>hQ4Qj^7uQ7j&5 zR+dGaGQ>wSR!I!}?&0a#^H)y%E+Up!KDwS{UIin{4+j-qdq^PzjF>xt1&^V0UDTB- z_JG;dUyNpb89k!)Mok*))XL#@%BUK;Y_I`PNzsj^`^BXt-Pws~;)}5UBLd zU@+pV3kkl>1C}ggm4NaYEl{C@#5M;N7TAOcH$f}J@%))g3~q9C(mP9h5$q*u4uwbV zU5TV? zjj`HBrhiibDAJE6x!Sw%hZtoZV_S|x*a20k`=o(9~>3=?sdCxwv1+Wm8VeVjQ82hxYdyj*=lJ2%muM% z-_t;}zG|&Wq`u=Y5b;Dq9zHGNupmk}15;akWC+O_RQe#PMetDuY9`4rV|A+$Pm&RL z(0`&hb)tE)zl*{s;z#HZE+`0EE*wGM$Bmp7DonCC%(~#7CG)%{+aFQ9ZoONrthGKA zVSAg5#kDA6$j#zw49Lg9t2!i0BTvvHcb`2Q-_V=_r%Z%{CKUr{k0aEpk~^*rFfGMt z$j6O)*9bJ97x{LcPj69#_u^s%DGTk~~qJOEyx zkE=>)gZ4Ho0c`6`azEDI(hIah*XzXew8dh5QjaI${ zod_Dy^gNo3SEAv|^;ebkQVh=7&4>UXBG=!I#stF`QLhLrB$j?8}Q2+eleM?LG~*3*8BIZaUDmQl06*Y z$nIM7a_!as)_;Hb&mUi@f$3E+k^XGP+d|oic*u$<>jWnApEQ{Y!h|63z|yljv>IMf zU`pe6i?ZaCp82v?iOZJP$}gA1tJX?le`uBP1O8XG>M1ZuEHEK2)C-c-NrsmWigOm} ztj~BtgXR_MKrAkX({_In*1JVXFInV6p&WcZwv!`fEQSJ!$i#j|Vu9&xN=HrjTwE=; zoMYYi9}@bts3E_9)<%W)fVtp$}Iaq&$Gkr^0N#7qizwUbGZk8eY6oV3~XbCAmIFQJs0B2)1Js zJm8Ky9R`0)gWe6r_dsv>Bvq^#I|9tCfw55J59p0bIa3A&6hPi2>n90`D37!t(3y-{ zyl&qCawXC*frFexL+=6|kRwxI%^iNiAPH7e+1Y8)UT1}(Y5NaxN4QHVWpI(qF2qDZ zQ-BomfL1al@Bq7MmQe@J{mGT@QwS8~i)(|&73qNif7^V1tz9xdi7+EJuz{tooi?<8 z-8+1=F5bU4DedNO&ma}OzrK&CHhe2e{$=VaG6ZMGV-FH2_JwmeGQ+r8REgsDyTwR{siBMre-!!CZdjGv4tGa3QotB) z?*l{CZXO+;o&hoI+Z~0&L9gA$){_Hf8M~z$%HTPj5a~L4wjeIhZXS#`^@BK*xphW< z)>nq2i0q=&UenbjMSxhAAbELpxey>L3|S-@m?vGx7sdDXN@Ucnz9qUZen{eBF_(g^ zDd@@r>;s(92ZAoKT-Amnd3 z%w~{Vvql+eTy+lexeuE;joZwgcw^FtASo9dlm>{$GH3${vHYqOcjuRINHUlu{Pd@CN;b!!W<%=Vz~GoI&taC)jq4I^+iGA7Y13m3 zZ6SSva!bq>NMp}D>_JG^NhDxz$fPV~u}@3dkdDh|mj)IfUf40kvpmr{Kw#Gsb6770 ziy&z@a)uCpko0YkNhR!M>gxK+i#AMIWqRuzF8CvXMSf{)ok-N`DD!b=o5M({z&|N$ zrwsKJ@P(`+FjCRG&BWTgqH>6_*oo27$|8ZjqwF|y7D!w@8TJa zDyyUc@3utQV6Uau!r$x;gvb-4sw^s>fkC&){C>a`Yp#s)!2SRIMUES(SN75r*Op z+GG3r|3D;n7_AR@qUmWF7(egfl!C}UzIEqmX4_da zwXe~9F$KO2p$G6{k=Rk~m@psGbM38f~$iRNoxz-_@9O3Ql zjYeU6`$J-<*xq(jzfDitq=ej{&d{d1ABK2x2TuIrQtN#eDS+UmK9+N^M6W|J+K_!d z+&b8)?(dzVOye)q1y_!!y4_9X_wH_5;!@Syj8ntW5XX8PJ#AGaRkPfNlSdH+%p5S& zQy-@(@%=n%pgaPmWztv^-&?b6AqL**t*2}~ox#ZFWo?YXBB&*SLl;BmMxqgEII@w` zd}kr$yLRLw9#Jk^Nj*zf-3{bZh_}n8<{OT>aiRx|PJkotpa2Ef7m6JWOx^-+UsH=^X-BHeZOHt|5x8U%8+!G`M*B}#Kq;+B zwgemUc=fv{swsKfugQGmjC1;SZTZYb$Pgfp|H$9R35r`+svDGe7PD6qN9pxD(>`Ke zr_)B~xp*3^332)+7*VM1p`~d(_C_Or%rZ6(wady1wH&*uH4xapk|OIJjK~A?h5JW2 zpSMW2wA;|%wJ#dwap}D%zihSYugrUgFxq_J*OCgqNfZtE`A$b?(XXTFIOyHzbouHO zZB@(8JG>FC)JfXXLefhi;(c%P94Xb1yy{+FMSjUgU)IX?FTdOr(U-ro_Nvzpyr}x+ zm%xgqGWq}*cB!fq$5&CQK7-%qoNbx2jX5*ee$GjZe@dZEV+|sm<)mbyO)@2&L@!F& zjaBT2GI;&DPpWa=g*V{@WL=C}_*lsg5pOQS5H*`5WOIZxn#YJTs5@6JSG9idve-q@ z3Q~b9yqnp2x<}zBeWbTgcX!%h^?7saC-q`{V6ww5vsbLOLve1yaTkj6T`VoFBHm&K zn?;c-KK+~CP_jy|8#g^gF#6i8;xdMSrT9!sKOH}R(Z*n}?SrH39U%L;CB3338%1x8 zXM6HkXOqh=RoW!IUIPwrV9$Fa0i)o2G*~A6yrLZ3B5do>q~KyY_VfR@a3g-e=beXy z)1>>*b+31CgGx(fj<|~GA;dni!0-0AtNrc=Q62dG-lO&NXn^iRmIw=$%7=_`8F?Y= z@X@--&9PXs3Ospy&aji@-;&5aRCnxlW%Odfwm*5Sa>ZIr>u1Iy%0YJ{Sc}y%hm8Ha zl>Y3cT2ma6=2@O29^hE*l=I5-H>u;a5k@a}f8~eVBtNdQ2@&bB43a|X}sH0cZ zdpMdzkG@+q3GxjiL%xqj-njFptv(?R!-=JUhH`KKh9iv{7kxB&drKB=%o9byWGWRG zt}rq;Dw_xR?)4ShrmGpV+6#bNiKd-P;ZYej%;|>Mc*a!8`>_@V3;2k!;|ls+%U&-O zjJ6eE6A8}SpyLZ@VC0oH6(2dE*dN#dh5*cKcGIL2biACxqYYoesgd~1?qx2wFrDJK zd^v1DsVk(!7q#&v2Q;r8Jc0r}$e8CmxXl?TYEdjL*uEv%KqxQy%cYb`AFa2!0;qF| zE98S;dUk4~ot0>a)mpjWpFD>1n%m^m%KM{HhjQgpfh+-nYIn9nVUBxtdU z+mzQT&0~?a&DNnn5yz34VXPs^AA^a zx^m1{m&MUgoHmch;`G!X<390CMQJ;V>N(U)x~#Ab^``xPwdVt&!D!MX;tbf*@pS8# zowycELeYhRvpqgn~rfGW*9iMiOqeaCUy-ED>#|)23W)%yc&yEpIT54mpS! zjT*&5^Y~cc9~zWm&g>ERttqMx*y%2wMOt^>e+nI(8 z>31TJylJ;37GE?nvOD_uq$CahN0mqK9C+i4PDiZQzOAiRgn!YA#9D0?<(ESrwuMdP zJBbh?OG~7Jz$j8@(LKv40T5Z+iNK$7@Bn^5fxrID+h+2%hJCRwD-yCT!wLg3>CCoo zA^Tz@_z}2K*h}R+>*He8o_Y0e79V4BS=SYcBUlug;S5s2>GLr!0rUU?{avrEuc7g% z!oW6EwoZZzJ{$sRe$J|X1M=eb)`Rn%wx?7^5V|41C|xavW9e|AUA)A z5I3)b$tUKL@nGw4Z+GYPto=Z7tsQu&P8ppXjd+RAZW*)PGR8+P1xG&_Cyj1f3t7F$ zErL9^XLn*a6=QS~U;jEMu``y-BsSk}v*!`8yV0vpjy$Cd#Dh7GolmOLrXjubXRh}POeaDALC%c|*eAxGZJ+*j@ceA=A$T$cDwPpa9~)M_&n#Cq%VmvMCR%h8dw8amJC-5`56&|{T> zh@Z@+ARAgpv^_TyEpAWz71G4$lS%&T_|P<*pQtI6Eu2Sj?oMDnNqS-r!GrOhGiZx5 zC8N?Q;plFMqJ#5l+ox?Kd`lAy6Iu0_4-xHoPYTG=Da#sTK3DOJG^#|h`Giir4%ue3VbYvdC z$Yb_t5f6LOq&7G=7dP(8C8iP;_tT%wA#%kof5_AJnLAA74h`l=bg?-@i%8fM`(tv2 zAzj};1Y1auJ~29f^g!x~N0|zVM^fkK=(Ez{9GZTVp(D*0_{k9XqlB{IQBu9|=)MYt zN2w}=M}NKg^HG}GvmBG7Mbw<{Oi(^W`eAkd!5GD(Im*pPj#Beyy0RFrC`auRBPP!B zNpEv*K8oCxVLY0lr+oC6=_enh=_Mb1)<>SfG#=S{$VUnNxC`)JbC~ zIsGqYDdX5b(Nn1!xe#M{H-htN(idkK9+th#pf&Em$4h*sI}0(HIC7sHv576Itd{2% zL7027n<+#n@%67^IkD~(rW2?0GuxTXb}Do-IFw*LH7$t|{5fHWgt&`0EOJJJ{e`tW z2)on1uib59ytvtPIlEw%O`A7@0YjfUrsRE$+ET!=Rhz@5BPHBFYacw{Kifk$($DvI z)bdHwMlI$gv;Jw;l0U zR46_ST)aea*0|v*n5JVhu9EL>GunC6=IjMbK^j$f#q_SBpPd1;~r$%zs6t(CcG&{sk;rio(mw0Z1=nE)Ux-X-B~aV0q1y}+tNXrd~jl3 zlG&_7wg6I2d4*CwBQ-%mQjuC`#V()M&b>ZWXM~wUm+(tCYmh&hi^3&6XZ8%<%duZp zKQdO}tnBw*hVZB3w=vT2ZPs3TsTm8-6u9RqGl0y}Lfp1Dd%$g>q98MS0A;#u4yTM^ zmle_?pQ|$3D>1%{S39;#HQS?F#|~zDi(<+%pjGGA3G8Cd4&Yg3oqA?xO@V!~b-2Ix z)GgsaOv_-ynK#5p7VME-U2tS={zyT$t05|9=Dbp?XZPV@L8o(DF0Zv9*JG`gG?pjB zp9DwYus9RliA;thR%O?%Gt2p3+S+2j6DG9tj5b<+31h4Z=1WIXn=`iyTRsG9-P7L= z?n`D(kFsg2n@2?|UDPARTJ7cP+WM=Kg&**t?e+WNReL&w{WHMhbFpyMuj*Hzj92{+ z81D(192J#EMFp|E5Hz5;lQzmVqmkFa2(^n=P%dGN0(unR)UHLS+)pkeDvzf_l!2js@Eq!;e)jT?V(ca!U-aq>7VCV3xeYSP- zZ0D>B#aBO6jB|E;uav)iQm*nKd|Q6cN%H;WcWbZM+xTr}Q=Z}gk-|6A5e+%kMA-4N zQdAAxD}n3 z0qW8yR&pSu%|13wL82-#l-)*pr&JNUQ3eTe%Nzo5Fdbg_GOQ$?w0_w-+1q-$zavO| zzbvZr|3NNYDv0<}ChQq;62_wiMgqxCo7O;EME=Md)6t$P4SN6sM%V95LUgh(L+(-A z$X7I<@`n>3DG>z)hQ?LI)n(AR#44l77zGx~;?jGI)p)p54!p?*B;~jFPF`-npH~}s zc$LRCD!|_ae#^5|jpF?IBRD5&*eo=faT7|+|D<6k*y-`jBgqg(*Xh}fjjciD* zB&e#7&}vYsUN6eGBlq^@7XSWI7ZRMUAN!s3~QIU zZb+v%b>^p|qRggTp<5x`^RgH`@x6e|Ny%+Y#-n#I?DVHyKWa-xAeYa@u5OYA8{!)F z59?e>rE>T%{L|>t!w4cXBcF1fg=3y__DwNr6y63P**_sbr{A!!X6bzxOfK5;_UvlFHuPg zAh}lO(SK2ZGC17$WXXLK14PnX8KqYR(3RKPHss{`l6!IzpnXp^3w0*mBQMH3q7K2xLLL5?M4kBezcJ?M@p&lBF#w$#)+FNKRY`S}i8J`QJ<3EE{7lHA@@?XX z&OsGf$U>C&hz?L1&jfx$XNZ#$okQ&gp9(@?pCwMnwl9DYTu34XzF2snd-?z>>_oX-SA$uUIlK|^r z8t-OpZ``>AOllAO!8x#P(a7&KtXSt2mu0~Trx0`)?!^nPUw%{l?p3*h^MA)kX?O&r zqvjCLk+M}Npd5SS8zrnFb%zl32Hyr-nVhkDHM{mcE-=Bw*%Tg}=3?VhFoAB%h3F2!qyN3A5EXjy6znf>+x>lmDbusY>?EYKHxWbsivs}tmF zH{@u4TYE16w{8$^NeKs#mSY=wQr$x$vs|)*m#hSG?x7M$$dP2vgUMCUom?U%>{i5N z?5U8s{Tnz{UXE*F5oO5u*naXD-YOCdN+KvjFc>*m@V$a#0|a6MwfAo-L=3UIy#Wf} z#BQL%EiH>3SRNF6m*O`m4Ub3!7el-XK6?7Eo#q)TDD8;z>4c+}6{`anq9>1wbZ=SF zA<%eaQ17jCi5K0dB7zagCKJ?lLERD?94Zm7D0Qnx>!q3_&U^Bhq;~JD64giRA6${$ z4ARJ>5f|9aE)WZXjxpCtxg_=?W?K=OEGF>`qrge+Y0~w91wHo9r$L`68;%T*HAfiE z?e9HBg+7$J)0TnvfCy)+59k%q_83mb0%?RSUQ=Zn#lp(zPdoejB~e(Jgrhdq(hbI? zy3AV4&HiU8#2vOzNnVN%jeLJ7s!=|c+fi?Q_dlmUwSU<;Io&%tWcq2Q1zzE-FAk5| z&-Ra=wojiwJw2n9eYY!i76;F{QRhrq7wG);ZnTZ>tX8h zM?EffQyTP1Rk17%POIBTr@%t^tX@hN5ds6x(RBug;6C>+a7nR-RyU*o)DF-#0VPe2 z^tRpOGB9lxv`pQ6q>-1+aXvB*%@-)`pS5AZZ||MNfYAIYGINP(ho z;G@Q5BrZJ;$=LS?5sw{Gsb@`$*V^v`fm~NM4#1EidB>szXY6~CynF-79!c%}=F$E> zlB2_|gPqeg94oX*q6UBN<9D zmkXhB&1R#}Z1STU8dypiBX8)N3s7tnb~&6zrt22%Yc`4U0n|>%CW&YA13plN&Nr%1 zeRo@7<=f^Q+YM;DW52^{RBVf(-Wp+!CH$RE8+im`CJJgp&RMCALOh?;V4ywdXb7ys z$RFd)3?HnBOU7~NQ4CP2{>jO(P%gu+no(Fx6DNwwv%O}!d9W=bsK~bl!jX#*ub_d> zNU61i1}hS?vWt1wyD<9F01hrUA`m9=2mFb$&xB4jfpaj%+8Y0wo4t$cF9ujQJL!L7~rst>BB0^=hFei zwUvf0E@NWbu4!rZ`dG@F!XnRl2o|`pf8k#@UIS$xLp^Cg@?t~SFj_0Ma;ubojex99 zrF9jvKtK3C%UzG6mD(v_BTV2O@ty<47j{Tj${7Y~cRnRd50%&;QHs>&=KCe!09emW zto`uSdM;Nkm&LEF7r&v!LU`6u>@y%bU0Zkk32fi4*dXwu3PFhVs-of{M@s3PI4T7a zHa_IK#(pQf7zY1=Z5d&lUHXy>!kcfWzyQvEJum1pdoN2RnnF;3|A?j?Q~{>50h^Tc zdcHKoB*l9;?;%T|plbkBDM9JdT{IpV6aA%AndD(2-l3%)Kh~>&5)=cNnt`V?X#Rya z?!uNx*Zma5TJkQ?ojPvP5RW|LPu({X5@kLH+JknAi6&)*Vt`@YB0iQXkNx54J0dZG>OYbbs z2#+T77ECN~r`i?o6|_@tt%-o0)|ZcLT5O-|{^JIrO6lc7t`6?HaWAk>f8Lh=i?`+5 z?!uop-Orou=S}zXru+BXbS;6j8G?NzE{LvC@roqq1$aq? zw-U`}Eyt3vclc8!IogNR(qxJ*uF#-54uoc&07((rJN1YFS;qE3iXg))s8n`4!!Zrr zp~Bp#stMx}DPRG_R*te`j)GwajUmK^j|$H~d9TL7WTLLb$V?h9mvd-Y0o{Oo02)BI z(lDaf5!@z`hMsLb`(^87#ejbKs>BxLheyYzP3`TS-L2>QXR2+uIF%uIR6h?f&j>9> zNJz}nDouX6J|Zpbr6jdYG0V&useBe<e;=*y!Yu6OT8EAP<3qgDYp!3 zb?cX%tuwK6a13ns2Bw@T*8;Fg{9(r%!M4E^9MM=(@m`1sk7zdV(Dz6Mc3ip{>Rfum z3m@TNHf?M)MwMc`2UAA=Vh}RU4*+G!JI-`S{015Tp)eoloY$H3ZxGZKvRU{6vAY`r zL^x%++pn5dwfiD{A<4X+?_o%n2a{mf#ueYl<>E#u&wxbe&0Bhcu|(aZNHKid=}2{n zxiu6;^@XM~)gJ7|^0TzcxdohLVcvT0a+t+Kscsfp909KuaTVjqB;Y5$7D0vRIRV3O z0V(rn?DQT>woRdXg%O_xSn7ezS=h$1bvDsT8kWlgq^g}}GCyOK1t2=SqgFimv;YpN z4Vw@yiuNDV5MZ|fA-pIGE{4jY4tBF49N?MNW(9WT+ht{~1V;+gYap)613WJ?BV#TC z!!ZL{Sueq+(F^IujGV4nmO6RevphL?S$R}aDsyo9s4;{?Xdj=3EHVw-7PP--u8k#B zaqe~AM9`#5NXPAoZjK{{r0j#jCO!=T=SLYTJdrN)#%j5^P9c!xTTq=j^r>99+ZRNbw@k3ee+ z8i=;=270hUPF>8mlD3emM)F#cSE?hX;d$0%h`b%)4I}a_gk4fm$XX&nPdG>Wu7Y$5 z2nFX@*!cqGV+Xe!#s2X2g?K)c!m}xi7z+=i9w-~$u+?@NtC4s2b!R)j9!VIf`@TEI z*4ui{kwJYCGgMzk%fN2XvkkYeM{bTE;({6BNWf;2QEf`jXL0@;9tFO~mE zucnAz6^iMfCFr8GRVn7O?d(Y%RcoEH1_$cJkV7Y+)yI3yT1>PWcv9hxKy^k_%PSfd z{YD_usF{$xEyxb-gR^i1+uTxiYoDs-#w1Fq16r*1plwB?<;uFXgW$poBi$jZ&(KiQ zY0`HdbxJX7vB+nECTi(;=Ri)x76LpveJpCQ*U3IPg%)U>Fs9#wC*Qt_SGv3R;$UZk zltNKs66KgaG6_$7h~|G(>ElG#p-~du=XW_L4Bst*ndk_y9ASr zbB8y0ptz6sb z)uf*LFrz@NgK=>Eje2;34?|d=lW;V>#+NYaJ(9nVpkZCcqTT-D*TE0^WIIbacT&h`%dIGsGSfh=5 zBcSDSKgM$c3=VK}6BIiW5|W^q)Ft~}pdvSYUjtjIR=Yt&_AB0W5>^9J6fRkE^_hsV zy}iHR-g$9+baGZqE>fE?;UJf0&I>Xa_a{Rikv? zCfl8;!PfehELl7FslELh`u4$To-+!##jq7ioPu3?!JFxPwEYRQ)hx{OMP80Zo)x^iJy+E&tGtrI5_z6(K>!KAY`VR z5JyAa8)Tsr;OA3$brE!^PdP)UCvMKO{ZoMkSbgF%`2q(~sZS@T+MM0say0VFPaY$- zEsL-J$A)ZSRw^>u)P5!s216jM!S%~WXk254bdQt8quMns$!ZTE)(N1pgBBP5&_~Y< zat>)rs96xAiSKpEs$lH*!w%+*?-RJIjHg4?bWM=Cs2fJze_xD7R4q)fuFV&rAUh0lcV z>Cg{ecRCo==Cdmba(vOl=)8SgJ~-A5wRFSjVt(j%EGJS)@YSD@#|K)4Z*l%f4@v1( z43$P?+aGgW3a8|7NFAqL4@o4S{nm$crM|Cm-VWSnsm(c2(6`%jUps{(BCi|L61I ztPGHy{d@>)PW60m11(AF(CH3rh~$8$n1zM^6}xdJwgbL<7tjpL*~hXt+ze+JThmm&95ev`TY=-*p!r6X0EG9Ba-{HXF!`iBTT3dW+XR=p@Nh0P( za$APg(&ZJ)rFpCc*`D`EP43M6eEmNeV*{*7q(pbhvM*z#8K2k&P@CSIPlsK)PjCJ> zhij#I^4RN|v@nV9u(QsNx16FCYGL(fcrL}}YaV-DtU|5rbRGb<5fsytz$53dGslqD$F1fW@UtV!(0io}TTGb<-mwpd$?1U3tXh!;2Z5;z`n-&^3QiZ! zr^tSy>eLLjCse2Oz*Zq0ipa z1My-X5arw2YF%OU+G=gBBG%SwYe?>nkDJ5;Jnc{YXa3N?(^&p7Z!G`dCp_B}V=Mq| zH?K)+?-$mSd5<@=;+sESlh$=^07~d>h2W%n61LwNA`>L#HU&gRFKxR|GMXtNl zXedI~VoG+O%12rKPaP$#8$I*TF!ZmYFnTgaD)X~-0$iB>{Z~rCW?tYdz?>u5K04j4 zuceXgyRhWru631o7XXTJ{}@v|gY%dBz1;2PULQ?|G991z6Ftq~-E0~&`zWYqV-~_g zbz$^)&XhWIZBfz4trrGKTyX^Ox3)gLBC!X*Jz5;;KE|58w=lTqNP~-axpKGLLfA7M z2G>`B;xtN~@KJ4@)8YA>w{)I9f`jVw!@U=O?chN>JF^z;+%{xiIOr-Svv8REFfuK> zJ6j?-v zOXj1_r%rBGsa$SZ`{9ED9e8i>`cSF^BEHeZir1M;$)gzw18Y#`7B@oo)WFt_NJmd< z(V{xoi@;hKk=m5~LD7jp{w12%vljnn-RsY~*PnH-KkHt9^19cCg#M{o*Sgw8_iB@S zaZPJe%o+#gCsRqcI(O!ATJz{FK?{Q5F`Wa&$g$)u%J#N- zTSMD4D2vfb$o+665`am{7(*k+xi4yfkxydvl^EEr^U4{*>3vRr8HTqZf~~9E>-M;R zKF!TO&3!(I*{Cz~Fc#1Fkq%^8sElR*lGE8;4`8tYn|%sP4sI+Z?KBq8qEBS;nv*$i zb2393n7XreE(c*(OuxPoH63uL@nm z(i4BcK3OP6%Wx8q!;YNxh1YcoQW$Ayf&;9KsqC2DPFKyvG&hSR-?dr_;s2P2Q5flk zxCNPynS{^#_viil^ZxyL|Ngvxf8M`8@8AEG`}d_c?vf}6#c&h$Zl@3bP6+iBI98~2 zieZ9EXYGF2vBd$)N-IHm+2fT3^khoT?o1gK?oCG|M=#2EWiPJSgb4vN$;Xb8U~Y~O zbw)vli4ejXI>zxh0{4ezANI`Sxy=CJ7&>zRXXX3wZogD5RKHCuJeza&<0i^>|BzCY!n|hJ%2CDxql3QK$qdAPc zUNUYR*Y{AM*Ec^%4N-;Y4cs4CwMX)g);D>>ac9M69X}zpT*517tdINdYAY*XqZ?a`vYq4;602Den zhsq)xso`6H7~my6?(!EDi%FJfkAjh}_x@Iqg4~OG9UoB}4{?l?_5J{kpx{FooAHl2N~`m65DceLdp`y*x`aY{vSCpu z8#N>ZLqMot(jMb?Nwx642JoRRy|6@mg5*Uka8yBuS0#}zI)TPVXpO)G5wX2#EsS^Vk%TQEX^yoVBI(}6S94rlG2+Kw_ zWybWf4X&#^J9AcoL}TVu#x0OKHo65e5+VF0uf_Fz8Fj+_6Y(=2OAZguB1a!ZV$RoM<44$zb3>E8~Oqn_1>R%-q*_A zTDi!TDdiy3&j@nK8qYfv^l};9x?iCsvKP?}mK+c|49Wu^l`cz4`**5~%qTO>#tB0c6BjqBUm!mMyK! z74N)+?l#bPdPsU?xGE~j8A>qLvDMJ$1}p2})c0~KvZkyF>V`h`gH8a)PfPI!#`lzb z8RM!V)gMxqXD|CQpdA!YcJ~q*w>p><*#SM2yAfn207x-JKlBRExZ&I>^he@#HS!9o zjvOs5!yI$=STtWa-~-d$5B@`pcO9zGFKWJd)+S>QXp*}gbE%fz#>!nAzAJNg+s<8k z;=(b+D0Fa$piTSIBiqb#AKg3?x62mm{Sf}4r>$V1yhZ#<5jz3RS%C_GlV6t3bPQvU z)8IwXbRfkNSA6oLtg`$;fIfV~-bDNokXj8i!VQ#xmup|7_=uCSM`c7jsTeG;B}u75 zI-t>=h1&m(i}ErY`E}ham~i+%TJ_?g*u;W*lxYH_Fe6pGE@tD8!jN&DN&V19>q~ShKLVP zl3wlNVK3}4o|0OkGDY0q7S*?8ipUm-LX=ygwE|6SiKl>Glb|29N-fnIQcaqX>E$~4 zXPTKy`fyTtN*paEYq}}+yF}W!QJ6HP$u5`F>rbLi1^_o6^z?|5b68Si|iA&Wb4_8Bk)vk4r_`#77V4=ii zj2%n*t%5w(0Sb4oe%z&tCO@2q!u0wU3MedYI3>+4c0YJCj{Awvq}5~JmN0gQaP zlwAj|C9^7FiLb6n`(z>ttFYkB>)L9KRzFN%hqzfy`M$@mYX%Iy)xLXFTdl3P#QgdJ z;K@(_s67(3S}hJ_9e}JY3grMc?=eajzOAjN08_1JMP5wOUC@MSp|LXV!H_2Sh?5eL zvk&$&Jz>S&vY5cmhg=?y9z7V%fl){k)ccMvf{Wrp&V^$QJUI{r*3(z9(!KTI zTJF)ct~c@iS6)1+AnO<)oLYpf!%N~@mfzodda`x$TYGO?tU>Wxm;Ytwc84_o*3>%g&D0yt!fGyAO_tKb$rBnf|Evo~z z{$F9_k1oYizXJsN+=Gqs`+twmAN}(jZxvuU{6Gf>W+WvYC3YW9pL8nFOpvZdh3V@8 z*EoLb%d!FRB+&%cD$)zcLdSS$Vsdp3L#8qhv^=GEM0-QYpiK*kAdn7O5u!5jq#`(A zl(J5+>~t#{kf*$_aRi~r#{r>0qO=ig@9%4u*SA5)#n@bER@IU_6ET{HGAdi92tVQW zHC+gA*2Y6h+mY976^r%XUp{SaKRY>n^-{d5qxcvLaYa?F?QS6`=!GOZ8om%A*@q{K@U zWxw32{*PDv53szD((d;A?-MC-$b{7(PlL0`isd3a`w()!ofH?POU(;r|wOl-Y8L($m^r*|AvLUH9%`h=74npFcA@! z528)uH3b8ma;Q*tPkD;G`Tu9{|Nq)HlE-oU$Ik=*6AJ6v$L}^3)cM|236P` z?Cd_rbN(5pLZ8M<5F-%TFAGRboKm!$&TqY?O^i6Zg61Kq%m{Nu3wrOx9^G38A_Zgu z2x{$2bim)aJ&8$tXLXi-Ho*pybg7*A!68c=2I)^Hq@9mwV^;34V&H~D>AHU?2YliE zSA93=FBkUHl4jK%$n-1!;F4=bbDJ>b#NE%jYEP97s6ZAfxy3|Rp?eea&bNo$qB1)u zT#gj0gEijqj(*(`TMuCP!1fOIPWKK@PPY!WciHLg@k{x`A}dQV8foXhwFQBHXZK|L zc<<;GMO1t%$jgu+U0DpUjj)%m_D}bY_IKIA;las|TgSUQr4gt_HmkThzQGGYMImBi z?9}_{aCgu5;!`&q*E_=!H6z9S2VMTQ{xb+;`jWp^W|QQscEcKy6k1fcSt~ekJrYE^ zIBaGY-VGm~I?_TN5~T`8Vo_Vy+V9!jBZ)q4;?jQM-m^BWZ`Kx&MK2VV>(yy%!!4}Q z>G#$;moRSs>?Tg+esl(JHYhep5}9LFSom>!ac)PB7xOYe2Ao+P8Jq(SbC%c~ z)_V@OAcNA;bj)Kv4cSHLT%zI&e@lHE9JQrK5WE(qF_?IRH-I$+m|&coG}piT zp8d;v28TZH(#IwxeK~jIYrHpqa`T<+5?1)+=KJT*xB1VQgaw6+Vw5oUGI)!vnNGMH z7;Q+LQ549_9(0e)qVw<#J{KU1nf7c6XCj}pmy>mXmUN*l5!6=CfT}yxvzq-5P|(4wOrz5nff z|9w3x(dNjc9K(O_v9F)1u=|VdW1qM3Rl5VF2)LWi=2_E@nGSm+S@~{|`M^ z<1=!nB77~(gE|LESdBoLmo8YHEyAvaKy)Xgumkhk++0{pBjuN(+{FTtJJR;jSD1}A zg3ID&I3>H=57xVt6n3l!?bM8}v3IhuG71XsBc?jTp$K%WD5uGDI6?8u#A|nETvja# zcj1b9c>(@qyi0FuPP_9j3b}5{xMVy-B^GLL&?-S!JPYeD_)Ca%lGPMobI#tpbMPt?8C}U0!q5)Ua*cHfN}=@ zw%tsCSA;kzI!3obW!WZp1+ZW( z&;@exB;v(|3{fE1xE}68a&vj$PMgX^;th8pJ1H_;%UQOSjs6xgr%V*q^Y!S$`<1vF zkQ0|)R14LY)53$Sqz7C}cVA76-D$AXOQp;@S)e7NZ-kbMt1?$Hz8ec8dHxM(**K}f z^waS4`@8$k`+Yp~;a0oLTIya^X8n*g%*ayYGa4nbL7O>HsCQ}^J{p6{^rUi+_BW15O4iD>k%>}A&5e}z-O zFp}4d?gaOg7KenP!0PaX_d~|%B}1FE`61ybYl8T*%ckL_OV)*Pz^0SS&>2z-35_%^ zG;JvVhTK0yfsLLaZ28zrTau%axbtv1ZPe zT9}j218N0A2K?W*|F+hC(*9OHzT*bFvu%V=whuq?N==&nr(3TJbet0MB}Tl6+`%;T zVtfPX0NqBbA~5ZhcX>rGBe~fx-o;SWI1t$!U?Ht;ow=G@u-baNsUKo8g`iT=1=fZ+Xo~`4B+~mp?dKE__y$MD)6o z5wd1zW~CA&^eQGH=F#hXcOx_Xr{Aruv(}IF_x$C?$?>lBWrDTF#HIl~;cf88-D2eA z##+p*P)&z16;>bQNaNZ?{d6-%Bv;N`dQvtF(8C4a z{An`qedq$Tiyj3Fn;e0Ub{-%xq_4ivB0u9K2b|9j`mP^`x5}AL!g0t9n!khRkKb|8 z`QueCg2`ry7i7?>dJE>1OMz{KZf(;O1$?+McJQ47wp`*s#}*=&u;^v*ZM#1v96x*L zX+z>4N&NH{O+93#9GJx@N0Tk~wd=eQ(Jd2yDkJZWD_%l!Em^t*N>eV1j);Oc znvER{RZmZioru+cuJa~dAsfebG_k5Cd*j}c>q_*hKpp~>iQs({SJ zV_9NvtV)o$NoZkS#fH*k7tpOK3jLfikRT8PiRqIOzLZam2p^_;>!?l$)!5=5eehDd z%MtrC^fgEN%Y9eTdN#SteO%#OzajJUcjT3EX{py>>#Pfl1hoe({hOgkxufptxM3_;#eS z+sG7K=V46ma`7eFHGgj9%YY5IvK6lu4N}OtA*DFViYFtuEVV-+F_q`mN4wXqK+xf5 z{0x2s9nxD9>Ivs5kTH}hiIj&1u5B2y77yYMY`sp#oj9JHmE%x35uKlChwckP>5HcIp zg+5w%TV*4cqN}hSET`+Tp|097s*HLzqq0&R%dMU2ir$7#S6Ad5+_kQPK}?I8@Wnd8Yj>fcSR(1^hA%5%6gLe~o^J9*CfbW+ z3oIMAVRkm4oUxn(xxY!Sbnx0=zj>o!6i24?GHB$i1HF1KuCQdg?h;0_Bj##7F8lE* zl50^6ZbZ(7S0yG*@Z+3>PmO*d3Ji>55aA)oiM^U}(=09?7jOxPdi>0gJgDI2xjkRiUBL zKtE<97oFeXlt`aW+$CB-F@s`gN5uUp$dPg+$5gm5rY;;;LT4--oYHcrQ`97Odbmw) zXfEK`S!d1=80;9%L>_D^tvDFKj3_+YuV2$RcDDI&;$pe{=9>;$ltU9Z2Op4DnQt_t z2c*Znu|gtzTH!={Hv}Pixymc2DLVHqdEIgn+cm3}saakhly(tmDUxvo+1x1cS`0NK zee`6g=@u_m%^>I{SE%7XYgIZyi9=`Tp?K_!R>>6Dqad87he_{VZEI2 z#HEYu{1Aat<&akmISiI_CbI4#Uz;g4VZk}tG*`|r=O=6Hk~`zqHuoV0%t1Ia=l(y? zj0$-H_eH{O zo$$%f#df&Ek7PL^n@DcFfV>ER=nzxlrf=HoH44i1$Qk z`|>oA&)j--JoSe5i`9vByb#9()FE-tGp?dwW!@g^Or<4lc?bFx2trjY|p1H9DCu(sciYVYf{D$9S z(suNMyutwps%Eh*=meI#YNXg18|is%(k#lASeZmp$Rt(hcQu&;T=%Nk0A=PNRVq6X z8ug{cn&QW4C@295CF)#YAd!o53kd)+KXEqB(J2L2;%gTvO<^IX91ZXR)l#2FFyYst z!qX+t+@X+WW6Xa*l~pjbztI*lk4!*Iu0B<`Eup@ z63L~@tE7xPcVV;QKB!1)mZ(T#6Z%M4ys#Y&rvo>6+9w?Z<#@koa>R*2OO#xi-vK9q4O}1DCHF1sYe>iwqbBXPGiJBwLJ`MP1SrB$6m@(9Ss#+C9xbQa z$P|{I<+WHxT5f;7Fh?>rD0Dt*U%|xv{qOy)Z8V$sAro+@vqFBLlj5+Et#oQN5Dsei zu7NEr*WTfxL3t>2<7w!#C!4hoHI5NuPynV2zdz{Xae^kdF8tlsRjavcR=sDDJM7A7 z>*$R5gbNm(RSclQ-r>UT{PskABSrx~(T+sAcVR1yPH(LvvnTlFgTVZusiHpVm3PmE zQ+%EKqa{qN5qUxC4t=t|Y-IaTKO?8LJghNtV26GGv~>=vnjeaU;!F6Lqzy@49keyS zqVf(V)lU7wu%H*OVe7b;jsSav|A%9g`-n>!0c#A};URl?G$UK(mH@tY>uhHlg&p{{ zfq#T!R?g0gS6IK6F#VYp6z2kHLr7H{O}@E_eQ}bQNo9&$9r0w0OGtaz18(*rI~301{gnMZt6{&t$}rnC4Awy)|EVUr%h|Y zx?L?iZd8vO)#FC>`E67Sciy77rlgF}&azVbDhIy@d7S~1&WP)bAFe_;GNII-$Kq8v zQK*FH{zU6eiZ#?0a_u_C*+@L4ivwJavu~k>ukc{fxF*hjo|qhS7lj#uW(^_Yz)Ys3 zjRJlaq!sJ50mz$*S#8u>q#d4hEpwm8u^LGIl3keLLGjXCCi*t!{%QW(c=@lLz2kxs zO-W36Z{%EDP+!Kdvw4$|(%D2@YZk3aqElyT3i24~9_7hrz46?Wh!%tWK?XAFv$PbH z+Og}JIY2%7nwr)F4!z2L?e&(w=1u7J*1o>1pEc9BQ{20C>I9u4z*7;=X)w^}z>VPBjL@T>)Z7@o?teu zFD92Qk1k90+Z#`2(5hTDbIAA=%O1Qu0xFVSY2~a{mY+NDaK(G zvFtXbDx0;@q!hT19_SxE&_8;hFZMtm4ZUBUewUa?=iYWG7XtG;PrqCIwc-eD+-@Xi z+;ZKq>u%T;ni=lctxgz3)`(x)AMmGf7?n*k9>~rnYnJiVpMQC?khZ`0XOr7e;$bW% zT?bxHl$}#^ZcU(WS8Ut1ZLio^@f+K=ZQFM8#kOtRww;~5>->Rp*B5;;XH{4A?D;%B zhCx+2dje%}`>|rNpiO};p^z|qmPyC&r6~|G-wbX$RLaw+j%_fs3V9vJ!p|5GG^VpV zd^vx3aABNIbFEzXWQE@1w_>9rCrhY@ruB7CchCvD!tGx1RBsU7eI7^F{`m4AwWhj_ z&wVeS#FZNl&2mVpw(W+CO!OP-X8T1!zmJuNEd*>#lkH z(Ic2l$NY*!tXW)U&E){~!{HTx@x+!1uH4}BI?>LUXiv8T*Id2duBkbRQx}=A9G~s&6QDUR9-&b&6^FW2fE4L%AU?r zjsn5q>yPB;>x(Vpt;(!BAC*c#hy!i05=~JxZ!1)p-OEdE$tBDH4#uB_!}YcH{l@YhbiZGV76)`)Xi?25GT{>xxBgf zSpQcsFxk%=SRdTfwAzD8* zD@gVr0#2z{DmY&nD=<;hn0%B76cM*0nF2jGm?Y^IeDav#MYw9t=Oh@_T)0JU zw@4<biR_pt_8AM)3tR^=oAPH(>PCxOg^kri`gui%8)MNI9VwR^NqzNp zKpg(UPv-%=q-0CMXWM8Ltmtr8PhZ;)6#b<}zp_#{J@Nz9&^bdXhp3#APVMr)^)UmD zQc6crvWz_}u;ztX=iKbeJRJRRcoA@xG%?;!>K9zr*W*k^pLzHqWbcnmTS^NMtBF%D zAwua*PQKiI%Ue?PIs17oky0Je%5K z?iR6PXgAp|ghWrp_&V@-oZ!t-tU{uVV2m_g$ z3>XpLRZod}t!;b+W&emq^wFABC$W@nVlfSwyV-S*trxa9D|6+OQjW zzi9_|A z&h>e*z8J&aupl|r^!y60|SzV%=8lslt^JzNN+!#;Hl$-+P&Uzb#rjw4$QE36ap|O@;A}e zAzeKR;%To#WJ2)}8wY5t1-R|fdN3UOe-h|x%R#^<1CmKNUJFF&xtw#hcAlu( z6&UgNaG~|xx*`GbuK1g@p(=0&YJ3QG%j9O`nPt0oP(!ul2ppFNY+u;v7;8q^JFDXy z>dR%y1m91Z4$iEP^z^V<+^ZhT$vr;l#w4s$f5dGJ->Y9}Dd7ixpc^>Wa?r9BaJZ=! zF8t>!(>p}g^x!YETukx@!vk&YmdIu*ObdacU)CZv)kCU?P@(?B=CftP`hPu(yv#?=9`fQeQ$oKx z_&J}f*8+s>_c{>7yN)7OXoaVu<#LM{6fmh6RM%zi?J{sFxdO| zXfFc~iybGMN(;5ltbjUb&`v&W(02g0I17&3osi-&IvsnmO$WMi+0vcqF$$1|C>&P# zhHl7gm{nl%yg60$JOJIcMfEBbE+FKMb{5RmM9%T3fBt4{2<^OMFy?K!)I7P5#u&Be zm&hr{AY`&6(XK0n2pB?f;*l0=B_mcZcT%WZng+qrm|9p}dKC}_Rr?@{ZDSi^$*WOB z<(kq!1KzzOk>|O9wAMgc{R^2G-gvbnGsix9Wp({=u>U>`IIZh7LB(ldo&9X-m{UKb z_V`%*7AN;4LvN{h7>~O@6elsmaplk`5ac8_;DTxdU%Ctvaw%E& zidp6<$4S#hINdnX_R>{EGX_(PbRwFlF_jUOTA1^1EBxT{1LqC+@msvozz~gul0bt# z3>hb>&C0tTLyGKR!l){?+A4^Kc1R14v)s<)zR4>M29v+GE3j*!D==}PI`9hM((d`G z^i3J@1YP}MYb~^!Do=VFZtx%d?@zd3APreqtx~Paqsp&^uEH;Xi=CU@{lW6xwVXNV zzQ+9J{`D*PQ%QtR(0H@*&CMN^1|qV1O{;_#!fk5<^))${C` zj9%QCvv2RM9Z`1Go4odjjZ-M18a#k&N4^* zh|#%B^2O3wJ|L6W7Z$J*sdl?&UU`-i#)__@B=*-Qb- zYeQBNn}KfxGpCnNOFe94Y}*GxXPsHJKMB)R?mmSs0oszu;`)fU zH-&}~YrC(_6V7&po13Al$(rfRX*g;yW~<)QewnN@7rIbHuZDIUGcz<&L3+O3DE6^z;&vI%Sj7?l*_?7~yInmlv-1oayfTbL z7%{Eu(PUl@l%(700F*N=wFSpBT{-{^dKB&M{QRey~LODw@*7`tAu+ zG5$@L&d(|2YX&z_t-{>tYwG?;?$kMjx`0`1A=A{!7e@5b)G3?I3PbBoz-wqtS8kkczp+WUJ*>JMVfiXrtg8PGX8@_3YxhB zw;x8Sq9nRZ{!1n6nHh;s=s0^%H~%*kW1)NSAAow(d!Om^h3b7k`Fk_}TOZMaNJxjs zxG!l8(~WmE$xqAp^?)x81odiHQ1zEpPeP`1wHI%47G&D5g(Aas}fG<{91C+e!T zo>XO8%9I2I?ruE4YsEd}&%Q6{M#B3x>edh!TBB$4EnQA!Yjn8*~O z2c^2)^7=Nh!1n3zN`&h08tGOIzGutX?0>l0_N;g%;e*z7`1b)dx4^^0%a3_!oZ=`b zdS2Dnxw@l?2!qnH#OtZZ2nI`viU@`(Zi<4qT1lCV;6m?AjeaMDn%wUoY%v?mI6&l? zm1muzs0mR&f~y@)vF>MLy+~a`P+M>=C4uI8(*)UIwc9#P1fJ-0OwBHR*5AKEtdh*V zan@k~j3{k%b;i!e;Bnw}Zj%SuAA5_1H{uCnY;JL#=8rnNtO0$Lt&)j^fGF#Z`G^*3 zfIAod&54iOK$Y9y%Ho?pQeX>o>?aaeY_VP!KhQfF!|P)gEVucE>lRG+NCpPTR2tc& zdzh(?5i$epClkh`-Gs(140?Ea^z$6cKWn{H6B9W6)gJDSbo+2qMd$ znv=M;j&EL>iLVLW+b+{wZ4fB}GsXh8D=-Z;UpZCjFRiM49;L&R?x+gSLY>js5I>x0 zfjnF|hp!TS!%Sz~m&_LqOruQTzfj_dwQc6|=2=81H*G>jGOpH@*shw^n9U&Xj}K!j z_EN;^=HD&lSKIwq#Mkq7yn8X8z^i(@m?At(!Aa)%IKG=PZP*686YZCW5Bx@38 z-76AhDzZ8=^hVnbk!x9ZS(!;P6x6E|9hXpj-nb!anNFFS?z%Zm+* z$IcbqSN+m^?85uOO7!;q$M*Wigvt|E*z`vXHEBhufrN`Ueh5mil~0$v3pZWP8t`&d zYQrp%CTfAVnr=Y2}f(?wK{Tkd0z1&z>SckL;i_Dr|}4LOZ3` zk43xa>9j(DA2v1A%|FP%K*v*YUsuqLH~&{sku3I#hN*SGPLDVt=AGVz*c8UvKxu)Z zN#td89n>#bN)TkIcN!KZ=PYKZSlut8tV8t$&w3GE*hw5jdIL^GZ9m!t6Ci{S%Uw`Z z7N~>URtVz+1y9W3PG~*BSe){PGOau^UNT3iNHMfQ8(2{ckJobL9TPkYwpi_T#?l0ZjA8s-C;P z#G^FZD>0k~%gX%>PgQ<&3iAWDDNl&F`INojIPSnj8fLDyHl@9L?~(e?f-EB&Iv8kw zq0lOehCZCv3_e!=HjI|OHRljh? zh@X4i$z%0H_sQ=yj#}4F_{aG_<*0}t#o2mNDUkB)L$C}&#MH^~IkwF2?;sJmuhmPM z3EH}Fz(q=ak&dy*v3I9}K)-YG$2^Dii(S{}Dmffvho8e&vsG z%`eaVB=nKpq64ooaDzN->0w7RJ~r?W*(`!8g0W9rMNcz^aW|qNaZaPh(LTZtrIZ0= zBg&iW9xd7{YfrsLh@Y~sHi4n=I8Si3FpCH-|I5YArfQ*dFFSudRPE|Q)1AeI^Ig8H zBD!`O1$dJ-W7$`sWyrv;_XTd70YeX>%?CCB{Xl(`&n4gr8u0*=zqd=8qj?0{gFPSe{KG zrDs_wncA5xWb9g+&B+=`lsI<_TsewD7F*Fc2=4%Fo4SQ5ViwSGoFt*WdM38v7r7DO zsBeF$LwamRI4Q@ZVy3cSsSq9Liv{i4iDPr12aCZa>BmNVeL1?*DR6arxW}55zwXV- z_nWT@y>{3I!Fa$-u`b*tHm!sk1@d?K38@hAZNOXnOi}%|ki~{UypC?VOm-5mQ9#w_ z?5q-MnJ9iFDQzG*{G;}rn5}!uuhf-gD{`b*lWJMt!qG;qQcJ6QzC3yiQ^{%C`x%et zql6L_uzF?_d05*urES>36U)2#9_~KmVpIp8o4b9fy$n?{x%q3B$kir}TzSjgx6dYS zt5|n3Kn6sgS)fxWLFFhot1hm3yjQw4g5&X{^@>)G$T-@PN5a6j({gb0$Z~uAWPBxX zK(J`ZyN|Ha<1PLGW7U?%G1O*shLiiI(Oc5{46VxoKN27K;6-Y;cTXJox-;NcxII|SEYPYRw2i<&qM+T~GoKgf;7Y;m-CI9(&;vQ!v-aFdv z+ha<(sPFljVaD=-VlAqhMM2l+?TjR^K&SJ;tbIhFJxDepF`moqsvOs`#(uFhqlk#K zkClIStbYlrLqDe(4%8Z`i;kIrWv?0)38kpRa!uEYP)b8}B4$~{LY@pm8roGQjz~mofWu0Pmr`^r z38YyHWA`vVVkb2rFd{{2xY8Uc6T;+yOR2j+(Gs1hofjN92q6Q8yYgO)RcR=fu0YNK z&HEIyS#2JfmN@9;;ZSes6`s@I2BT)uGoRqoqg2CdyK?+YLvScCkAFwSW{ga;X7N-kXBjeDpUQnu5PRz? z3UI;3a}x?S6A23b2~k?l&=`V)4QAY2d0ozcO|r_o4fv(sy&JCCpYbUp2DX8!=_}(z z4|b>LalY(Z+Cr){JzjCgY`n;)y0aA(6Z5+9v4*u_q2i)#dkny$M;S)x-5=#Lla31| z&q@Xup7xu_PwJHOXROpbl#Fe+w$vtsj;)$!A7Y}!oqT-_RA&zae)&4y|H-#a?!hPA zFof_1A$RT%5O6h50B8f4xAB!yixTMeQKD2~#NHeYk*vw)R_5d&WKYy4IluVJvF%Y2 z*DUCuz6GISJ6lsBhs2}-`$KF22GsR_heRP*3q2 z!3A5P7qg>5|4NwM*4`T)IJ1kFj4)0Z0P8=)Sfdzq-ZT-{w}amy1y`Cfwv>K$q6$#> zx+h|bV(7^chdmjTy|sp<{fIP2o`ZOg0f(9x{Sgrl#>*1-lVn`L+VhdV!KVYa zjyeQFEyh5=c5A=JukST`hwt@XffmXtc0IT9zu4PR5*3yd%aft+vc3v=px1Vdy1|qH zL2PU65A1xKbEW&|0yaZQI6%d~LBL5ftx{T3<`42z`u)(3$?McWk3|y)Ip!_d+H2d^ z$XmzV3OwNs7Kd{6{_!E1AB1@>okPbQfayF{R8Q~+ICBMXx=16pbP66`=3>vor(8JB zkI6vil_T3D7(FV5N|II6kD^^VnZDmqX4YNz+#2xsNK_rQeZ@!UlcWE zQ4T@iaUNrDzG_ep6r_pUx<#19N%8;XBhg>)0dwLcYAVx3rZuA~NPeF#a&zVuBNcb;=lK{IdzI1w54zr4x1ck~TFtWZJPqNY;5=^n|}ASn~g zosy<28QW1lReHh6T6g|>ZXN7*A3Q<5ZKz6IbxGq31L3Zl^7K}{=91gHxKIzFq4g=s z{1mE#48Nsn;GI=ZCn?nJvYK!%;5fgdj!LQvmO^)xUPir5>BQ*wK14E$#KZ%oDp9FC zIh8CI+ZSJ@4vN))ZzI>GtJ63Xe-+rm>yP*_>0)9yxx2LE@Nh$k~HIZ?>stSVp;9g2o84^#G zn+9m0fT#h5t=-&)+rJt%#%iTex9c8C)pdjaIy)V`0GcT-_B$l zOG~6ccKjcZ#ElpS{>D z6|Z`}tGfc!^n09r0B3YB$VJird0Of!SAEFV7ygsITpsj#@9-i0c2raFAwo-U5V!~#uRnJB$Mp~A|1#wlL=2Q+yg>?e zoF!MWFX6iIz@WadJI6wl>_W0Pvr!STGyV`0fCTDhDYDtQ*wfRx<~_)hdA{p3idAY2 zl*a{KQ8h4##~iG1pwYrGJ+o<029o)FvN^06laSfk;lT}+yX3bRpoC;mz+crOU0_!1 zUoY#v)L6zWZNWP*OyPO4Xgfv?4xw>mYilg%61)w=95YgDV7pDOwr@ubprf=LD*_?# zqRhlOE0auZVk%=j=@d(17=o7{RZ+}qHfU`#ZS$Yhb4NpuJi4tm>~8zYFmh@AkzB_X z(7Q+zKy$ES?TFqAhwJ1fr`+TjJI#(9ZwOYL^fQM|&Sx`te6AYF5-x0^xs5eM*Ap%n z+SeoV6TXB36yBg6O03aHiFgI;6AA61T}8=-Mg2JyPNi2Mw8Jns_u$5svTwo%ipOzZpU`^SYnTZOb!Jqeed`Usi#RJzA>O&! zucDD!aDvq*jyyvTIX^pF9wpk0koh{j7aqYH;%WfDqUMOh>*F3gp5D{kW31@Kv;Pt_ zo+8GUa`P8NA85Qjo+&lUneU% zw(bXf7mu%okU2j%mpoG}j$cM?F7pmf&Hb@KLA@yCQ z+$NI&^>|9LoqK<|7GDWltRbH;`1d9M2Kkc?IrPEs1VirlL-=IUwOviHR}w(Mm?*if z+%0#~t4Vru&G`2n-0feFM9v5sF~r5}s)_L@)W_c@_|+qIz$@2M`dVs6iy9a(IK zv=r*|RXgoUjN_cAC?&)N6q~DMY<9SHFp-xAS52&& zWkL1h{`%(*@0?_I^glZvSdjfs1oD#?BiW|rCmEMh(KiO9kzQ^LwJd$nGv+m<YtDH}3({gJ_C_r? z4KvN!mNd#HAopa;QOWxGM01hO=6`ifQcJ19c3X@BVlQM!|Dc66-a|SPgd3e}j=0jE zjT;#-P`#_X9m+|W%>Q;m*DcG512l`8|Zm@>!#n%Myay@bIugGu4 z@3v(G#+Ku0vLQu&2`P`xXa3hGtrJCL(O83ult5V!LYr;S!#1Hir}kKWN^jxP(!1Za zMRsx0P^>Ti8{OOC?WQ(SoNr{TzUsswbu^NYD~0X;;asfRn_4kdvSl9Z_(kjwqIOxu zlhxVnoN4dl0VcEgB?Q-j;ND4IPLIsTO#J+B22rKw4tb3wwQHsB$xNL!_%hw6wJRUL zLF9&!K86vrf9UdrG;+0~-S6W^Db}z~)-Z}8K|+Zd%RcT-moE7EdoFr-H`my9W-+u` zCN^M-{`MM4^*k?nKvx>W70)g!QKu$cy?vKg^X&*!um8CtRW#EJBh!^7pO(V!i@BDl zEkp)|8GJRgqeCb?d>kO?=Q=$Ur+o5FE|Q)d8r1NePYq(i{Oe)R#U4oQFcXFq%it1` zX1Go>N%3A|x)bM_F#F|w9^Ah|=9?5R{J1t*{(A%QuI%ZYEdm!wYcDolRh<>OX0MUs zC@9N)+>Zfu*zEpp%XO!kx#ncX0`G0=cjFR5!B9;1*mHaRwuqSP|L-*spX+uqJdmlI z6l-fgkTqP+wn}jxOd3Ap7n!0CZ zZOgY?dtAmMg;R~v)qVEQeR7O$_Xq?3sGvO~k`(U67=WgK{+hro#O1$)@S1__m3VoH z>v>i88l6^(dL;NC8K+gD$0t+T_JqTK-ZcWyLMGCONR`IeOOu%>avQ?74TBuP-UQ@A~(T3YjI+z#6U2q)qJiBVM`b4fA?Cpf}$e}amH zn_Ob*RXby}9Ra=-?p|Nxco4w=Tp!BK9f75fTJ24J0>F36@M*Sy^@*Zb^}JhYoKKk- z^JJhf6L9UwwBX&Wmu?ok0;H{9I{ag)_ zuSPzvHr^*iilmRe&_*?QG}1Di-={vN+rVW=n2y8kbJ$5DH3lBv1UmUlJKVrW=o)mT zm9e?<4$rmRZ&@k6V~5amqi6xV5A-!Dj>}06qWd=(NBMS2`y)Rqs&krv0mfh`P-+TA$zF5HQ|+(~pen`{h|syyoJIA#&r>2hFLoR1aEMi?L60WYr;Z(2f7 zKP*OL(t2|;C}+qi#>W46gzVkzDi{!V2wU`F0(OI{SsT0`tGEBoj9n=a*b`g7u|>D3 z9FTt56|@sw z^B9zVcuRC1kzYYIu-iU*8i&z-q1d9<@`iciKf78kC$5iR<**R$!R>@KqzHf_)F6wn-7v(csbu{O{G zi=1Lk1h8rJpWk@|Ajyfxb@X0XD^2;K4p!y%ua`epogVH%=os~6okaAF#%r}#foM4G zggRmFw*Q6IRhd>rLH=BZi{QKN?fnce@ekn;MzVeyYkBpvTstystX9Q()0RRCQy@^e zAPbo-3i-5}(k2W~`gq%TP7-h6%%A1*)RW<1x<|+1hIl2GmN^|1{_7L?>m(GL6U8P_{?gR*v`<>UL=__ckg2~*l)QPV@;CWRB zsv28C{nw#ai7y*^Dk9kKe;mRrp*k$fHCkfBdrBI{ipGL?8s?HXdzKTAusCfC%yd!f zN^CKzG$^vgFt@=i*et1iej%az@bqulvWkJhw*C|@i?;oh`5Giouq8)Vf4;t!@R}{B zjQKRBXY4!2Cg0q>aaHHciJhnCtG?F<(AJL6iSoIOWh0iY%dU#yBkIWay8U(3a{V6- z9OZbAh(3A!Io|8(=kh6RrXM%FM#BjQ*5{2?$}!UsK|?;AIw0s6$##t@0$UCYo*S9X zoU`~E)YR%!vS@UZ+@l6r?K~vQMrx zfd?Uw<5UcE4;<59MYJ=FlgLq7eme&pqii}5CkZi_uxy3!kk(0Nx@+~Wm~68@?gICE zr)CLRgpk-V9*voR(dyr63QuSipRWHL1D@QSY*oSG93!r|jm zF9PmY80q6dUBB-=)FHdeV&uGhGq6^$)8dYlq@gN(0@1`=PFN6|j`U4yikh0mj{A{{ zQlQ%6lsg3`g7uzP+0&78U`lD|^}-EZaPwmXZ&#U%bHgjeiAlpKczFEnx??~E75+0~ zg?|(K6&=Fpu?`=k39l~+g=}&PICktsemQbqC@AU`Q2(kT_2pfNMy!9R;EW!!i&?$^ zahP|1JN=@KA=FIW#Tx|mhKBpqUO%#?ke=i7=F{l8;H91b9kd+ah@K%?)`OBsWq)0U^>r9E{`DN zkXMEfev#qseKcd;$2g*#C2cC)ekxUp!)kU zoQ*q#ht4sr!-;C+cYl3&XgzX(HUbi6&Jyz{vX%i>@`s7Ig|k0vtkF&N4@hDMYAZPgUF7xm9erpESnN|{Qi z14np?XdcSP--UZ3vY!N;wH-`uzxy$IZv23OS400|nZVp5_KUw&E zCpmYgw_W z6!yuRWnOQs*n=y6fdR@zV=_pOpvK`_Dv5Gs#16Bpm%5<(0!5>QTijhk=9nVA*cm}e z3^CDwp!WFO@V=(^j{jU+KEy{lW?pm}t_D)YJwG}|KCR>UflzrB*?_O|YLVt2sY1ED zL5}!It0!Mxm7_{zmNdvymD{d*d0^1k^pI?w#+bM>YGfGhx&**h>I5YZz|G->V?+vt zPGt>Xt6BP6PuP6)(nD-=@w>4h6GU2z+1MfgGIG_O>OrKd0#~`8AA?>SY&q|#qv*9r zpGU$FvnFubZWaU;)0_7`uFkGYum;l zXwoXo8VJ~$9yvjBL0Rm?by(3vMu6ntZI@P{XCGC9J&+nZ{|m|<*i_@-3ESUam{pjK zAsRZrKd;+i6*bfJieiFPEB7EzRw6{4kZ(1pHU2=#8{fLs>U^Mz+c>?Y8X&@TqovLI zu?2xGu;p>LuzZ(*9iT#xlGs;^u!dZ^Wa^@sWnn8t(t?3IC^cl zL;DwccPZw@y|k1_O-@6`N~I*T!vB;!hin76BpQv{A62D4R_a`}T)o=V(OjQmeD)?d zuCqxo@frk;zUBx)QsF@CgovvK8BDK;XVf21{~wN40cIkoZ0ZuKL`S^_R4}n$@1$s< z($)QzKaQwZoyG>3C*e7lc_I3yrtPtsX43%D_CJax>@n(kJ8C?mggH@tlU(r<6=PTu z8~?0awMJC>_m#_;;iQf)RP;`cE1m&;fm@bzV14rRjQ`w0%Ik<*4$Glm^83A`*N#+1 z=dkH{;aEQn*}?Z#WITKxD5W;+jJP2d_XV)=$$4!)wY@7#INKKqlcY5Z_saCdr_tHj zbv)2^VQXWx!;k^lH+X-D`y<+{WQI3AXXHj@k0qnKm+QcyHV<+ZEnoB<5Y9r+{p)?D z72VFxm^?zj^-17In-bTp{Ob(LJn+lz(Bhc4w`eBh8xxPTsQ3y{`mo1*a%Vv?YWalG zAfraecSq+1@L}z6%NchymzdL-x&pFfB=~^nbRTO;s&)uu#16k{z|sAu+zUXv{w38Lao)gD>LrbLD<> zpItu{RW=G7J`ReesdF6gs4I%s5zA;G!`R{_Y~~w_iF!&RjS2rZeVs%JUsm5f%TZ+8 zr-Ji|5Z2di{K7Bv!UEgTy-RUlr_Ea!#T{0c=I-tOGru_jX0=TFg|3m@d@$-&)4?a5MhU{BJc|k@kytX#PVFYHlMvK&IUdNvroW)D%{Ig2eI_ zS3OV+!R0s)<5hbta5)qhJf1pvhBzv~kp*hdL5-d1P+9xFH<3!!+%RkW@-=1BY@)UVKc%Ak8D1|{9!wjQmc|NeK@YX4b^RGm66_70It+=e} z1PW7MwTuDzAlJ5ECp%vQ2j6{rGnA%boKL3%A#-;9i1rV#5i;m@G!#dbA)O%Zr_Mf? z^<$&qOpg*;m$CdV3;@Y_du)`+vFBe0*RWiQw8wv93_^;2gOsU+OzXs&YEe`GrIBK` z@!sTEI>7v33c|}@kiEq0xBPCCav(Lki~VX0_mkR+gN^HC4%~L9p4exD%63y!=E+v! z9{QTde&osa0a@fpGtfe<1dTC`*{fGxOwoR=B;?e;rXhqZU7T)BTQ>(Lb&ZWhJ}w=X z8^%(ok_<2Kc|G3GASSd22V+II2x&q4s2#U~h|WWPE8$GLudFT~U&X~mzS7S6->SMg z;84==!9bsK5!&)A;nfAC<%g`p60h1q^bl5x_*Xeq=aDzw9w`!OB7d{;f%5w1*@t|3 zg4ExRKj_07TUl}YIPWKyxYW55glMBLF^?++SILjZW|@+1xc+o;GMV9KQ>J%K-S z+cPivn{Vbc*GrD<2l!(Yl&MeW&W~upA9RM&L4Qs1wYa20b{uBjLYoz*S8qL|eRtES zcH7H>o@Yok+zO;}kj1?)n8{2?n9Imd>6&=zZ^`-awv8s#V|BE*vCq8``?qC9iYaXI zY?M?Qta<>+GiAtrL5$-8kV?L>_zl)C8RfOAe+_Zi&_H6RXAH|PK9&Ec>@4PzOdo!t~=yE)m;fDc-sxi=jJ9`fG0UoJ( zwAHy zEKIcf|GI0yvfj02%GBBfQ!J52DZ0-8B1cEXl~7LdS?*21azwRNMIbG;PO)$cVlZe@ z-h#(A4buneK^6ta3|-0VMo|!^a4`-@nY8K*;W1K=&)|Oplc}ziOGx52Tjn%sL^4u*qpf>9IxZq61j!E(<~ zIK}jXzy1dxD!0sEbJC$guKe#F6{tAHjr@gw#nqxuMRSL0b@5%th#{M!_P*p4dX_|? zkmAuuGZzXq*5tzp z{>&c!%Ry+!c2*!tLkr0FXl6)?9;{~$cZjV*VXU`ZZQja+a=7RvXvHD+9*G{?LA*WB z$FRpk%tG8Co<>l!r20yFd?!L1{A3N6@s1ZL7Y2&I1*JnG@E|N>PaEW={^a#xFIY7L z(7E)z{L(^1@@xp1Tn68zerMlfW$%Nn- z(`Kk>-?3)M|9ALPk>ZM*Vd_h9D_A>l7AtC#`p`mnl3Y#aTbgiXQT-^Pa_xZFK{mNl z+<}d0hIGa1PUA2mgz|U7`}HC8NTHqJ_IE{`6}koc8abmb@R{Z?U8+|D9|N(z^qD8= z0qt{okrhO`=rntoL4q9NwcIkuN^D>mv}7h?!&rLi53&Ron`)bp)pKiDkTTg#yqD}G zizJ7Z7y4QWQG{elYBx`tj>6&O|Ib5tF!QZd3s-r(trbNS_kaqsiBYA>JZ+;Rl`CH3 zOR9|UBnmDBo5q)F_zXV_L|+T#bp4INRUwi?F<^JUzt;u!FBzsz{X2z^fn;8B$d^za z?oOU>5;;S>#QK-1?tb2tVkO`6nydSfS2sjkHf-(CBIPG*jP3U=en&LKD=K52q$>sP zO>vgZue1)bBB+Tp4BoB|LmhS0o&OjFGF8S%UNL&rq7}!Hn1rj-EqNSOGmjz)<2Y5lzvhkR`NmV)Zz&NX?_rH|)OOfPO z_tgtcs^}T}n?Tkg?_Lk`VsRbhK@;KpX$Vh?@Pz`kf>)ux!~UWp)^6D4L$3CBBkwbj znjv0B6=cd++VfP<3|^3SdLdA4zZw@#R?wkJV-WUF#%u8+Q!P0Oj;OLa`%p14uANae z(-1PDZlYCSLDhoZzcz|irOkgBuJ)ob0n3uz1Yb=R+<69?B(t~ti7eZMw~Gz3sn#Q} zJ`tWGe!=aZLY;*jxY@I-I zg3d#w!(k*yjG~a^%u;QCVk44*oL2c=jJv;!F>+cg7RK1L;m{j;2K;z!-m&CW=8g-D zNyMjQ{v}TqXDB&1id6=xI>YaknAP$OX=0_O*aJ|eFP+*YPp1X_VkMgirdQHT2f`w9 zKt8?`T410azC}JXK}i*&3tG4oQYI+GL_1{AWbjgvg_&YnW3sju5w36E%#H035cC6E z>1YwI5C7xeWokc~(PJe;fx@x*+7!Mc-pA%GP>F_JJkXd>p1w55XBezH-nrFFn8S#| z=__7rd~i?}eD<~&TY4ixk+It~>0qtzf3p7&QsZ_pJ4|pjH?_;F@-}DvSCrC@<8A1! zKgKBusF+1+ zSPu1|b59KP+J4}JmdEWd^x#y^v{jZVOs}IViA?oi2@<43dTQI_X0In3Ts+osde7B>%^@w;epUrN5qw=!yE!2n&}JumxM4IHyPm1D`_wqIUMe&38pl-}*HFrv z)z$=owYeIOk}VdKZg26cqm$FE<5O#kWnN*64FuU1n>eV&)#VeTV=4J0l_z%+F-@@S zJqnJVySs>j`~yov;i7HER=(7JV*}h|xmg?vz>U4hUUI2%^sg8F?ZboTdoQ40Z=KM? zx7}T9-$dfFA?=eloZK1`(#dZ`XXKrCM2`40Ud!GTpeN4^H-3=RBMJQ#lG4uJalsh! zcnsOuj_=Vfwck(Z%)G>UIBpK6ARk2| ziY%Vr1qD)wR| zX81}LgfkQilpM;PU_fzS_yhT+vExsiOBZCA+|e8cgW|D-0;NY1%BpdM@A;#Mna(uk zqgcz1BIGAyh=(If7Q(9|`0#xF2724A*YP_@dm#A1K>-S%2f>^5*Xv{S&?|o3wCERr z^ktHst$lCB0hX=LttK<7oE0ZYFKe6y7BCx~u8>&qPId6ZCPSHL0S2(%z6!*0D-Z*@954zN3P;ssw%caU#BgYxXBZ`)5g zo!x^T@DWaM2Grr!$=-}gi!TWJXnI*i$2<6 zEhYhph@qk&h2heob`3^{4X5MrEt9aDST$noHrD4<2{i%exmLANgEocli3> zFLn>+yAv_kx{fY=H<78Yn<@{3zwh#apGN3*OGdxL6!J*K>x3qeXCXYpH{j1Eqi-a; zoa`QL9dDf;9@l7=qdp4cxWi#CpJFPk;V}GFatQLk#=mxXpn5?w?v2ZRA_2-~lL?1P zgK11Ohf(f)w3m!%6Q!{cJU%HjQMGjB3^g>&y4SS)ag&5d#Y)l;?HH`EZsEL`G1|Y` zI(M5(`!{3skr_O3Wn{Fkk<;*630kQx1(-CH5(LtjiA&J?_DD&5iskhW35o`lk7iAi zhk$39MU5?4?dOUsn!-yN&R8UI5bwLItdX=$3LNPTzMzLnMu7bZ_vDkb)S=Sz#10eC zkULVa(o-m$5GNq;j)SmhL*yl9ZHT;7g$1S{}VDMHo*^d!iD@Ab4&U0=kS9{TWjOm(B zIQ9sy1?4~2c(3_gDv17C43r-Wwg@g`n2}~>+Ki;LgeEL?Vzu!(t3GV&2t>e_hsW7% zM5O0$BRXJe8!=$z0qYPBWG5#Wkq3jLMx)lyeVf0b(1m0)D&9{-q0-xlD6e)C@jHJr zkp&9&5>e#dwvxl6-2)gVakmE}KzjkzP`HWY!WC^FkljxMKH$cI&3fE3D(xAWY0cd- ztR?Sp$FR|geXp>V{9JblTW1RPhrHtXJA)k}Z%>dMDZ3@e9I+$hYzaEMvhE17DX9%X zCg<%32AHuOn2;tHB{hNtLy7{4O!?f3K;h%SzYN`xcFd}ao^@RR5~j6%1xZG1agpEW z`50uJ=1oMYgM+@bUCYc;E`rn~sg;mAIQ~1BvhfuCzH{I4#9734$Y2+AN5O>i4QKGi zxg_yF2#4JHw{RBCMmGcVR7nH5AV-asK$ElB)@TskPU4^`FC$NO$s8qrw~hGor{djK z6e_*jit=i=6~FU$TUnq;l_|>5*kif7ZMM(_)aL+0>4(m>*fM1eh1+cbWZ{M@-kF); z54q)vnSI=LD{Z@}>CN4AE#>ZW%e7KV&ZcWG``K>0*6tK-ytx1cTW=0b-sUSARCe=~ zIfchDjd$7iUf|Pv2d`eI_gk0MO@tmk$;ll{K$5a z;5jo+5*n+rpCq=o4__W-PZB&i|0JP-rA`t$WWE+p$B+`Pk{kqY8Qx zAHkPN2pptEY%pTII$o`D+Azbomx0!R>mN1JyBah5_@9}LA6$%_OS83lZ1=O;!U7MO zC)dnBgbmFT8hMQpwZ)f8#Z{+b{%UzsKMp;2s6Qn!NQ(Bte1hVer&;=um_80M(b%U* z3ETL|2}xt5jidy3laUa>JsaMW^k|HQ6Qi4mxCKq%uePOMPxhp}{=^7R%UB;98eIip z%#S2dU&LfK2V-_&zRSsyY8(ncjDcB@kaCu>OS{L%hsT+@CTx;AQ^cy6ik&3>vUaAL z$Sn!WS37S#Xfe3Rj;7qi*N2(8<-#sK%@qeaK2hyaK;dFR81v8saTNHMQEfqxO16od zEa0HGP+q^sj~^Dj9v61z(dQ}1yXf)cG31VVyvGCH;{osSfcJR7yN3fFu9F{r&{m3E zC$&XLfR1q2FW6dK2Ka&Fa#&nq8hfvF0TlgMi&+CTWWdSvL3gr z$1Uq|%X-|h9=EJ&TNa+$QhKF^RozrGu{11d1a(NOJo)tW)|_CG#P>I$@tspaih2-l zfadiBXC^<_%Njgf_seFKS_P){2IguS@>ix8Q-45@r3o>J0OUl$ySQ-SsCy9xV=M*e zux#MFsu-S7ukleZW)Qb$!@!Nu?G#=R0tdVfVM7PT7hSty?Qnl5(Zos(EF~Ttsbuk$ zXYB9Dbn#6jbL|@^Pl*w}DKzz(f^6}g*VW#FBYH0z3gepqu-Bz!ARxs*ar!GV&?{s_ zyrF$QMLN^8Kf?QpIy3fOneG)7)OP-oHt;ph+I8zoa?xqdctQApG5 z@9Ki}hnhvAwu7g~zT~!*8a8eJqQNygICKZLi{QQ=#NNei|6-UN8<2Xjc;8m0Y)=cZ zWHxGmQ2^aFZAB-kPego=QbV(|yS=aOCJqiy_n!Z||9pp*mcpn;YX&96;dBr)qZj?i z`vcF722oJCzP(&E`Y6COFR8%ca{JUAk^afve{j*xLp9=+Qy+L%FoN+!pQU{#99$Jp zQ4!4iR8@fW<5JnlzfZQe_V@e8yC;YHka@86a<{*Ay!~Si)mhcZHQ^(apS)3I;xCBL zCl|m^he0L9fCie@3GkP8kTr)oz<`}!&q0~~ust1>0Fr7eS-&)u+ zUq9Aj3887DGjl20P~B}MV$Zi<93Q?q0xJ5+#=hx~aP+yzw#lS*8ge(x?u|2^jEe3J zWQpQC16iu{eSri}cLg#b|DHgVkf9YU+BjJzUlX_cdh6xU{%*#vr%KP$$(ewLVlD+M z9kT6Go6zO*1kW*Wrh@@Sf6hhYJ)XwyO>5|$PcJVKs&Lq;a9f!uX?^zWse-ILQ*c5?XYczYMUqqp+@(K}&ox;_a; zx8oq3TzLb=<4nnbFbvV*Ig#uD0v|((MR?##fnod{6Ogx{ExgknPLNl?;q%;yuIMOw z$=OFf6;sJV(!~;`=@knrBE=v1lu5Y-90K$6xx=%qlT7pyO3UL434p;7G?;u{y@J(` zsMU2UG}b7>j9lXBLoaj(aS+}X=u~oH3ZC^L41yRDg48o0Ew^iy{S!aH!e+LTVVL6; zRtm$XeTt>e!C6j_sCv@ah@8u3y6`F9Xz49)WP4*+1L(Ac!c$#eJ|-EyOG2l9=wMbq z>1UgVmyy^Co=v^cP%z{17?o^T2QcVhR3H#gb}=udBBhxrl~&x8 ze&w@Mo?XCCsX#tMJv}_!&&XOlF^{EcAO=s>p`?hF4C%-_AKeV($QBvGh!Qi5U_`0% z1~393F@6yV1%@xOM8WXNG6h%5hc91l9qeQVS*7P*G8=&AO|uDWjy6RU**e)eC^6Vh zsC^|V}X%_nB`;Vg`03|~DfH;B{o znWIQWN)IEIE;)`=wqPJBKYt{tkLjW0iFsqGff$3SLnS`1g=k8xI`@3o=88^NSZo$E z#UkaIDV9!{DgG*8rj(sOmXu$>OF^8^@={97<)sOT$xAgTGfbg~bAv)6vQ?qP!C1Dj zH+E4_WJ?|RwVWGbQxt6#gfXP(j-p(@AeNySQd0*Ip)~a*dk9UVL=#)ylpWrGy-mj= z2X^6*VS!cg%vTq}|F%?0>OAo15UW}-gVjobw zK(p~~6hP-tDs@T7!myyw8#TtKc+|v3i(}{IC^(1Z%C~A=6NTf{&h0)2qfsd8J}*X1 zEY*Fjyy(7`V(-3QplJ%2`b_2y00xutBj&sDbr8O>3_|W05TrMlIS8U$`BBgT#4zYd z_Hi&u*aw2Q*o||?LNXPBiw&LF0RejU5Dd@D48ZWbQul}Fsm>42i@Of_O$#sM{f7dP z>iBUG#1~OMi(%sc5HPMJ#^)cvR-7nu$FM65^BFB+oy}*dSOqqll$TsKNy%ZdS^?w< z-npU!o~1^DE5C6h$S@$9xC8IP8*p_}F7qRxmINx|e_XdNN|s}R28iT>Mq&;lG|M!z zWR7<*IL|6J2@h-9jKr%P%)fMD{*imCQcT1xiE_t7mTVE4){GF=s&*>fFB`x*3ns=U zn_(XxOS$ZRL3uH1lWY8d35*!Ys#C1i6)U=of+e>U4I|5hk4YEo@;5(5Bv-B_qmYgJhc8Zyc&_O@YgAV&f+V)99Y;>Q zo8ks924OY<1JPI zQiaPyb?Y5g6&c`^&F{2J6yy^QT~yW8($g#lhi0^v8M*YF*G!7q-+Q*RcbujuE(SeP z)E7ume8L})qMq#?SSae;^B*bd%cLki;SWerCw7vG9%<@}rKyt#Co15ByRUb*?VBIM zK9bfKy8()ce?aQmJJ{ZTwXtT$!}-tbj!lo@P_S?t$msF zC8qo#dD`Lj);@aWvWaAdUip#0zC;G5Pya*mu0z{_au_@wCcjk9b-4ZT!q|)5gWY4G z-9GTi-86A6!N%yaR%;p$;4l8@{nlhpKa~a*~3a@nrY)Bm3^t) zETMr1rnXlnyT=E6+xg_CTaZ4|+ZRf2Iu(2*g4=mkNN&UPM`HWJiEZcELo0UoPEL;x z`$CbNIjMS490o$Y`$%kGsw&r@frlly%{nw+D1x6}#if$bpf0B)Bh=;50h;I0R?ECDmz;t3e(K?#m{)2frJIx_&%7 z{MQTycNGM09+}%0N^4^NAC}0T?H%OMSz;XdNNQg?sU=kKu++A9uy^`shx>n!z{JEq zsNKhl+^Z@15bu$?zDSFY7Y}?dbqwd(y_dWFT>8>ID?HNJ7f53|1w0_3Z5a8ELLf?yGpo5WGOjN4*iEXwK)@vWXX4L1T5 z<8yjwjX!k4A$x=Vd`67>Z;$eP%ujtUiic1u|LMCi24qpc(c_6oQI6=NKH&M0@N~}- zZx4pM_=c*g&fb%Ei8$;>S7$Y=8+#cLN%Q)yBOsp?s!lU-z-`otg25X%Ru0{XpowUE z^_yNJ1>ECqNE0s&CH>cH9VL(M)(#FPlQYe!bWZ4~qmk=Gt`Rtj2ZuFhteuSwl{ki1 zbMA~N*ih`UZFH*{a-Vwh1$#R80$&8Uo)O|nD`|K}xrdNSi{6FLBNJ^M>>MBN?ezOK z8oLd0&&_N8N=7I$V-b}OI+P(ejTXG9&nwZr2p-0~-P9W#Pc>O+HI2uUn+H{^SfT?Ks#S6$0{(eaDw-Cg zY?r+YXE+R_Y&b-bF-I^&4KhQ}Bvq5nRTuF0o^S2!9G~=mG{yWR*)Hs-z%-FR4av8{ ztj@qJoK+miSU=EeO;-N6&E~uKA{zz4o9P6E*8dH{rRC1p^ZBRq#vQtEQADhK5RnH_ zT6!SIA|djTiI~7!a2zQCop&e^lmd_xQxa&UFCgYSmfVYGO=sewKR?)Ia5?5rR@syL zlfLr@B`bdylzm7E{4P>|y{jtlLZwU`2i)mTy_!NW0k^B;yQs#2P4T4*qDs z&Wrv-^`hpm^X zoY;HojxZh=-{m}t2~N1^zA%zuViX#=w_>;x7j|jXqXYY4uMYNJv#0GRNXa7}U(CZ$ zGO>FZgts^yv56-L$FPL1oQOGkf2eu-YFb&9hCLWaldMt{l49sHptfdP6{e7Av=*W( zuH1JodHlG5M?=GI@KKUL$;}!{GLfJH5h>hcV;lE)aIr3(1#!>730^1m%)P>0*OXi( zKwQpfa^p6qYvFw?(whN=kOgT1s(HY5nVQ9XX4T-`pVv52V=A7qsBF zgE@BGugA3Low#6URb|pUXxU|WF^>CWNpOFwQP(5HLoX0I1cvKv32!HH$%!R4jxK*$ z|L*%=aiw6Ha6o%ZIKchM=OefTh2)yU@5`$=-aWrgYYh6jv;^gUU~9`5#2QQd^5j>% zsBV7UTwcZ~>_n!?LSz_QNNx~D<{Hnex>ETdY8nbPs(*qds)?A?tTKi~BtgFHKR-Nv zxpn&a8WUxYyva#-KAQ#FGq}A$d<7@k;S5`aO!-0^1zx0&Ko4n~z^l1e`-D6tAtl`J z<-9gXIhXQ!iO=>jUh72BC48z_!R5PAa^6!VbnWQ$$K&0t9qm*}0R#-v5|qW2_vur# z6TiKP${wMqaQghr6LSyG0%rb`^VaE4&rj~>*o?goCayn;Z#f^B#@=WK)5w%BVj7s= z7Z4A~G_aaSi>7K8O>!P{4Vm-;_sAl3lCZN#qr~URBK1xbu*h_=d=_bzyaS7Tb-K52 z<&U(A3YeoL2so#Y{WzGA!X3ULVFF=^Z)6yND)>ijx|%!G^N{3(}kcbN2(SI-WQPRmR?FPRxjk(@i4I+!`02IQ>im+h=f03V^*d4zC* ztI{t=1-z_D0wOJE{w2h`lm8q^`e5eF^J3=si8TA*=>Xcu88C&jEgM#CsvoYMdDHvG zy&c4(a?{Jpn$s)Na;8^8%sajR+Wq(T>Hf^=<;Bcl6KVEg(*d+$Ghhm*S2nEL^gdiW z^QLzaj=Zr~l8KAL<^;>coEcUy^G@;6@&4Y+z1hrLluJF~5{Ws_xO5QxDVG6NIM1qe z)h7C38#`mNzkgb3y1##Fop4Alo^ph{{;} zfCp}NE+Gg-C7gT*jz4gD7^;#~VTDbRh`mf6z2sn=n|QeP6klv?Zyjv!@(@h3Dai_! znjd?aoXILcsLxyx&SL7z>1ah#{L}V3k9?yz91SM7rA@@JaK=8267!A2ILsX^!}hn2 z{ymfCL^*S?Wukp_4G?WOO{hY;QLU>+C=c7%!pU~x3X|=`mdSSF!pU~xJ5Ki2X}QVX zI<<`7)@jlBZJpZ3Z|k)5WN)3$HQ5i=*xbY9*d3#Sw&ZbAlujKeWoq7$QbEmqsC>Em z^6+T4#IaHoOdZ%{YR-|(0MZX_CS39HQZ=#S0rSCItea>{@_4m<+CM%$*zd#C{);XL zPriTJefMN_?L$g~PPazpf}ajz7RLUFu5IXQGSWm=1nBcpeOsx-kcK;3@-F(^)sppP zV04e+?>Cfy~nRCYx@;kKtB2h(+Jz|*Cigd?^JC_qYfV>fh|>%aBFz^5zKw?GB> zRv}uYJ6A%9U5uz1WFQ`dZz8A!z5^0KJl@dhTh_wou%TBfT&AS`;%O5?_l?`z-8v9Q zJ-+~<#zOQZzaYQL6L)wPFLUkk}h?3;{$^M&SAq}-lU*1 zjVGo9dLy$I1L<6Y{`B3}EXX}Jr5TX?rxSL!UeC>!t3N5Bvj$`vS(aAM@(w#&%kT~x zQ>zP$N!Yi>Q|M{3X(44N92+F4>w&}k>G&MJ0I>rNk`v1qaG-Gl7d2o{f`Yj2 zVUL5wcgwsnnn*i9_i`mgnvW0w=9}8i?)EZ&c5xoWSBU{7ts(U*S`|(-L246w6223c zk_T3L9tLlKN|*e=Zyg<;?7d#5&2F3CBSH^G9^do?dcLs&4*+_H)wf4)KtPBJW7?=Z zXp6(@tvW1UtZF;8CG#yVpyy5=!QvB1IchX6tIWL_xRaR1wobmZ0MYf82Ta6+rHpSt z#IuuYbkBNAwW47#GA-Ud$fHdfE0bEUmW-&Pkl|wwU@n)TGZu>*`+&2;vB=3if=;>P z>4>|$6OC;fVhsUwWmWiw1_r$KFEMDXN$N|)T4VW5<+VgRBj>`!e3ou_4IiCoB(vg0 zD{KkL1HEEI%L(nk%#ddpKftl#?@<66hwrU7oB}`RgMSf>M!_{Xo|7%xU|V~y*^)-% zB!8W|7s#j-Wi2BaLnk*-WE!A9PT3!vP;!rYKG>8`W6p7+Jhb~4X#SN@DzJb5Qgf@r_I7k+iA0h5wcgU?Miyk4LZ|Lic~&K^*a6r3F(z zcc>loSb?3j;wB3wNNaVyJuovT!3frE#4FZN!dWnocnM?-{QP9qiNGjxv7vFS9@>8B26pd?> z+uG?L@9rL)9&a6-0-69uiCWI-?A%pCc$&^u`C^rLph6&r2&Wg@DaZ?7teuPV#1IYy zgLrhiNsC{ildEl2B9hD%*S8`kl6C;UoE;G8>i}A3-@qqFP#5DXr{pD&-}SfaI3=rW z|JEmZNtTl!qE#jNBecHIH`u?n_Sp6}-y|?%y>DQDQfZ1^Eg_}6ICw?8NpPfPJhTEx z1D~Mx1EhP+KXmB2=h1LwIZ1++ypgSZ4%tA`%%pR+G$Gf^AwQ=nHpZv_wJZ_AT5)Ub%d%J5URjMHvrw62E8pBqFkMZiH)hYDhryW7{a|Tr z8AMccn|BGbQU3)d_gCN{Km&L%3#P!UcM@jAJ&0>5u!*QHq;9{ z2Haka?xb4hP#@+F$upSQ$GvAS*&iKPJ$J6;ti%@ zT{hM39l#g@G8l|r>#%ERhg#DyY*UKuKeflr2lg7O=}^!(f%YM4k)m(R4E(XxV-OF(rX z1d$l`V_KlN=eN#bchGTRFHi)5xyFOM?*g*}`5>AO1};ARUOH$$Yj2Rui4EbR-Pnsr z50#*iJZb>l^3m1*G`d>FaSk0?q>g%4#?YS%fBi|Eff&%Lh6-AGjr%cf>iPl85vssz zm~<5zfRH1HXhH|DfqK{QcmQ$+vH`3gnI3nyzKo(V)Pg{w3exMD57YUpco7LePTjRb zian{7QzN}Z>|063?HQbYwHl*$BWHk|2GubbP9TIayhTPEsV##>J2_jxKoePE%u*C9 zr6Tm?XzO@;*?98!0`+j_gU7VOLN+{mhOxAppOKMbxR^E&iXO4=Fm2z#6$-y_Bw<4W zi7v!LuOt<~l6bttJ!DmNOB{t)`BVJ>;Ay*|DNiq7+M$HIj|vC4-QNlA`4%=oqE zudw%AYJg9=T);0ubb%kq3b#x%zv`eKcI%1EYu~yZ@1_hEdD*`8eAkYr1d>)OOH_8H zjRwX^13>MR!AkN*#y4wA6YFd`0vjs$QEk$yrQrLzQ*5yC$;+F;0s<4C! zQ3+QpdU4D1vKzeRP`au8t%DbHzAeill8#n@0pSUcll9g#4shS$LM1F()FBefq86g4 zbnT*2G?FS+LnUWf<@YHDK{7v#^2V&U|A$=JMyQd+l>RSH>yKZ*>Gw%ln-ZCnSR~5! zNm@!$N29l6NX(UzwzvCxCw%B0R7%q7DUy!<#8^)xYO_VlO3HmHFn-;d*>#4`NFF^-+hZdn3RhOy2c}BfP0&c zhEy+XZG*djA^C}iGoq7J=)UzL4>92FfIO1WGN$@<34>P_QT^uOipC&vC+IjwDM(?t z39mCg=@|6`5w9EvRER0#V2D>BYPaNioo0j-IB>nUxDmFOv;A7%KylUFX`w18e#>@f zb6ic%s={3m*QJ@Qxpd=HpG0@L;+xKBAX1L-T&9#ds4_~hI0N)21ik)Q3Wb0O-34P? zK-zrkrY;DWJ4QFdj6Iv`W22gj+AMkAOg3k(Cr-Qq@m?xV#t9zp(noEQCcEPIaM*%r z!e@ybKwNvlxah;1zR8ens@JS{Ayyeu+#P8x`Z2ghvRzHDFPMK$?C9JQ)!YG!NRTSl zt~#uzWad>OJY0frg8|of%L@ddIg~mMKM6>D`OHug+>FFAHi@a6u5HL;Wo_&90q6{;Kd0t5S;_jUFVQpgwELI z*ZNZ8T}`ef_~`|YUFb-X>z<~(PZ}wZAY$K?TtuJLRIQ%0M{#VvC* zT-awm44&vZ5uh;7(0e|)LP?%eWNZ#l()E++0Pm%u0m%QM7a&sD@k4iv&dNe@V=)Pl z-wa$k5$wKovGQPgc}0p@aokq4M=egqTijJstI1D~&er5AT$NtUe56~vE%YL^qNZU+ zfv$xvbs`wOYi#2r3`oVFKId|hB1&xi%&+9>kSmN+I2V%S!FPARP*zZ#(0!odwqwf5oxh_EPc~9Z7u%kIVJm&I|_D?$k#WN$RdWxzY8tn0FdYG=!BHCn>=YBV$9>mK6yo@imY_ z>`o%K)E=pbj2!AE+Q|DUcCiVhym z$Nj?^Z!s0%_fE7`+U}{$ddpD)LcVa3lV&Q#yHq`0$^EH8jEc(WL^1$8bU;Gdky{GT z%Nn@BA?Lm1a?7ZBO&3^M&KwPA)|4@R)e-aif(s8e#*A`=`?t)~pJdJTvdq3O<=l+& zpLn=AW(_;6WsrP#Ig>iSM5%58@Pw5$4=W)a&cI-`!L@1T}p1-F^=mqY&?^;l^eK~2OcjQjm|f0HcXX9&)SqyqhwkMWk(E-uW;PO^Eg>I(uF59 zoJ8}qeI(r%!?9hRN~O&aMYZ4-o*^uO8oqTHPRHZhRP~#zhKm7&UdPQdD!-1__h1@5YJsOdxIW$*vfs1KtE^A?@9J z&riAy__N9A+tJqPkNuO~qpjnu)5BxVv7Jg&2=w8V^R96q=}7I&#(;8s@qgb*5khQL|6Q zO41d@y<~-T6OoZoAj*wwod<;x;un2n2G1P5f(G+3E$k6&w>2JwCYxD^yH=Ja@AMWx z_9Op2KvE*{Ry;?gGu;)JJR!>F7@`b+Bg!p^UE2{c&5X}dmY1#8fVTd#SsPpya5UtQ z%#!7u+c4UA{Jm_1(xiQoez4FQRon7pEbIObpk%88wF8B&rAN_;oia4v;AFK{@(eN z?{vZ}`qjbC?&;R{kGnhVJ3dv%MX#H)C)Lf6=<)$)U2n>s^|ww>kMHAV(?Dpy)J&-- zv8^aIsA+@0r@IPKIz1U~>-E!v?W5)%E+u>8 zaUa(JMyF=n0A$J*FvonbukZgNiU zgHsv^mHoJR6JvSlkb16EaD8W1P;c$@$p%bw1Nd_5;B;?0eWRGZ?vhticV6E{gJ!Jn zOxbelI|cTY&?c2#gMwE0)mYyd4(%(D&AR+EnvpM&Sj3!c1Eer~N8v)Y;plkpu)lZk zd^=?t;L1~O}z=w;_yB_D4C_h9$7wR`ivcWWKF5xXY8)I-LvxsSD+Pez%goGw~! zC7V!k36@>R6F8{Akr*}sFD~3mXE=J*Taoqbm%ol}^=CKAdp>|JvX@9H#?eKFEGBi@ zN}ua59nG*c{ov@UoI~5}O)2v<&a}k1>7cJNl=K&upvcWiXYkj*z2_hOwe`Q!*T4Nu ze5jNG|0{mpj0WPP|Mq+FEy;p!ki1MQ5QalMS8>i^yTmiw#DOtT9(_i)>;nA>;AI=5 zN4DzDbQA<{rjtC2De8>bm(Gf;)P9TBc(=X%p&!~d5cGn?bMZb2HeZfXArzN+*fhEu z!H+&beF2>uBLigI;-!g25XMONIWbX6z!f!1Hz&{$!?al$|^7 zDED#BF{UGrK6?BtMA zs>5-9Xjbb`-z7M!tsyx9TJwtX2mG8`3W_G%lbB9Al=*=+#Hs8qOOYpTnexm?WsLZ& zS+C~GY0kOlbMNM|4OaHf4brtmayJhj{5@X_PBPpfnlmct>mv(Tczn1V;L1{E=VS0h zm~fIrzSXTu7a#4F=1sGH-`cC_GLCOiccnaufH1TDV)yjuZVoaUNf!#eV&o28HUP7= zl&Qp09yBzj+sKDz3C-8;{bCQgKK250XmMb-{tN?a_d3EwzvQ}*Qqg072u(?v&Pohx9lnVj(yMmN53^sDyO;U-?8=nDETe4kjcBY zgjhrYAn%0K`3u><{q1*cSt{QU@3bm6+0>`N3o>Q%gXsc^1Tq+6Lp>wMy-%uwE)6|t z!uEq;g6<9IslU|DG$XF`BZ1Ww{^DGi5fp2Wjt^fPY`xrV?eCqO@_^%?N@F9ndpLBL z@JCJ3d>Wl(m!h%i8oC^;%h0Gu0ILot!9qfXvc=X#2=r*H6{OLQ+>t9BNn8jkOq#KF z%`~S)SiKhR;_WO|bE_raydx()L)G&NK$5Q6T#wxpWR_$$HaBYu5K`jq6LZZzSzG`1 z>384%&tLz>eyA%N_Iw;DZuPoBswTB78HG~6Gz{^0!pD02mYJz6T@B!!GlW9PI0}GEhpP-1Cz2z&ReIyP z6H@gj+rhbud$;EIppdw-D-B!GRjsUP5f2vG+LM)~_21T>EYta$+*Eu11l?h~=+u48 zeH7tg-A5i)Q#V^?uh*U=Iy=RcO>v=(&fPWoV%pp=ecF_tO5Tx1X0fQM*ta!p6DZWS zW>3`G2pT7A&Tz=6xbY7>!oW~s3;{A_Lkb;8H}t$Q(5)UZ+`1N!>N_q*n8K)>FWf$A z^ZRNuo1P;rY1v#tQiP)CW+w?ZMLdd~xGs(uI&Kl(FU4~cI1@VPA~gt|OIKKm&nGFJ z?#~Ko10^zVJ?=r^md4oqzVtjsk&{N7OnD8^jIqhA+kVk5uQ6@<5H!v2$D>F;l&G}o z_vlt*x9Y?rTaY0eJwuIka^z34;Z$Ej6%8|&RYO|}OMfCnRB}FS>T97P_|XZ6E@@E7 z7Ud33Jhf;de0{@_{bJ}jmwpfdaYU^_Fbcvl-hWCV%Ck@rFC4gKO`p3I>GyT`KEcl; z(FRQZovv0iPKv5yE)f> z4z_9xKq2XCNc!J>TrQ9|E}thW$QjbI{2&kf^J5A*J*mVQ3UE|m54mV&^N3vHd`Lzy zaH6>7jJ!*KUgnTssK^iyuup&=nF(lp{!ABsGIXUEy9V+ZF7TxF)fTl0S7{;Zpd}Ws zPE-%MV52zn260On0Yvkz+YF+L%a_CV6Znt3in9apnJ(tcK$c$9S;)_DX=gf7ZG~IG zD=l;jh7#-DLVgdp>@NUB)CfGr!5BmH9^|u_DxT#1pf83@BKXKhdCORQrf2!=P?kQ- zTR=a<(|ooU)sFLa_)6z_8;TMKdK(cwBm;e=*M`i{&LFWvL;oc^c4mN41>wJoDIa`tUhueKR zCnw26SCN(U2~8i+^f{V7qUk^V=)5F%cs@sFk~gZQxk)a9FN&Sy^|Bg2DZ)~Tq2wc) z%~A5n_W=(v^Xe=rYA8OkKH_uLK9trqe2$uhYI=mqT7y!%_QPrfTH}Em!-Nbj?ye88 z;;Odj`iKIAoWaE>(*@W^VC}%4-y*j5qte38#ZYCj=O8Ju$=V6>A+HCi z$=$?~K=@E@4c);Aqvg)eBg&wzc!kJ66N?Ffv9DqL$d`&`hVL`IW-Kw-r7s@K;Q9=& zB1?3u+T~wACgs#f=h4Uj9S5DUXGMtsK|H(U_Y3AWd5S{`7>oB z$+aUj3+J{zvf-+@hy{wi zK!Fc0Kei2$bwobXg>4(o(o5V5{24BGTR*BT`#cPl7=Rr~307by$cJPK!D!fu;@c6_ zg%6;-yPPm=xGFLQK+z`@{RG8FW(w93`AnIDZ8%Fa1uO7p$P{e-sKylXFjQg+b|fX3 zf}J2A^!X7~(u&;C#oRBBB!a4si~z2Wa3A|!k?Qd0`jkixT=~~S3gUBoFeDpa@r{rU zR_$3(0$JuIP(n@*xlE`2G;)Wn^C?yqx5#Dn`N*Aj(dMA5xP&>DK45|Iiu)4FM_$l* zL-Uy~@0>v`z1Z{MKf|S;)0JwBpa4lFwvdab1e3@m(T8Li7o)(5Tkh}EQqBWsp{U3j z2(nL*ADJEK-Tq8jfHrugm%R@287_6L`PG(p3b4|WHegFEV}rCF^yT36^3ugeiZW;& zOev?gxt|c`Vyya>kR$3VM16_qV?Qd)AEVFpbz$z%mVaiLkK%KDZfDZZD-v4Wz znCG@X1wO~!zJa0iO};^XAHl@P$1ErI;KB{Vr#=!UYyo}K1b16Ykx&CIR#lwBsPG{h`$Db zJ^Z;FFBlDU2Q8+a;u_BTlM;bnp7%DaeL6tk#xKXQQ$<6JTVA>!ebKCQf99iz`$cCZa? zMLEKX;I! zNrykvMXv^~^g2%~mWm6O z1NQ~+M_#q5{(q)R*Brvq>o*1V87^Y82h~<`7PiuIPJ@?N(`jORNM)fD-TH&8Fz|zE z)SCL&o%_XDnlJnpCjsXL?2meSTIJPsp2qyXiMu33s8K9>cjlrRMQ|9 zqhupi}8~o-4a|`4ehKhT00{D^lVy(}g>E4_4p!8m=fqaI0YaW@-+DlEi zN_(dcT4Jx%iON{8_Z$P`4;Zmg7|a>+LO_>{aMAyxPsKl0B#WeXpHsvNIZ87lQ>cPp zL<9=in{tsR^wOmwN+bZ8#b*hDqUh!UqtE=o{8D$>xv=F|oqxYK)3er`|H<#4E3Y^| z|AIMP>`Pf~{){VROWCq3&9`0!Ti2PNx%RDPC9St3hqa=3*uC_pYio7A39gR^$o@5L zvsh^zYZX&oTgZ{x>QvJr+s3A=mDXx;Y_0ezbe&-e7tTW8d5*q}CCp>o^hNIxJc=)kI z=~2hRYOwJ~{uom(U+K1y#cb<+ zu({gg&1L_>fuq0>`%rz`x`1;H;w{*nWD#Q%N*V}78`Lts?vf#53>ybrL(A=&WoyhG z8HkSl1$l=D&-Y&Fc=C#{zx+jT+;^;W*LxZUq`w<4;vwBa*nwKaGa}Zj~Y9b$f# zX!iG><&q5Mb@g(O}+fsLdDbV5lQ2)s~PNb)ns4nHusnmGzi zJaU~VZb1`Jg!3+2Z{0A0!#aD?UVowy9scWML!+x8jQf0o`_XhVfuH7J%r4BgBUw_7 zLji~}FbfirCKvm&dwhI&oS9-mC2285nu=SbDd8_`XR2k?p|Z7AM-OALu*i<4F`bNj zn1@@&RdHiCikwTA!Eu34OPk~e5Gf!nX6NoG@Ii`R5QLFx8K;06P_jHpaKZKpWGFZ6 zj{z1Ag~_Rcx2}B!UjP6WjVOqzeN4qwCcKnK=+M{!QZr;%D_BZwRwt4O+r;|`OS}H> zV9Lf*z~lL_l1C#N43d{%O+rT}W7m(_#2LI1BNBu|JWK{s=gLMmgSyt6@A&#!SeQ>- zpytzLVr8unpSeQu!3JVE)6yUTIq(rmfaW>T5;qm+6~IVGD`ImE{9EID3vUS^MaMI|$5`250|6Fe@3AAZmlgIo%=Me@7uvLCm8 z+QmL1Z)Iz8KJoCcFDR+-M#*n#Yaiaie+M zX#Q_(GwA7HD z&>_Enfe>BJjkFZ@(s|=vh(+3-4Co`800j?%!2nt~8o3=+hC^n4!w%(y;~>n>aL%JR zbSSWB)B!FM;;TkKh8@WbW#I^f0JN^&^nI(}@#$>SY^MB&U||4YH|zgri}m zUpt=G(1|nd4=yjvj`IbOPT>pRlE-;WHiI|8jZ>xN557c%Zw##gk?Z#11gOnT7zFV} zWRkRd|z!<>Gdp=ZA)6uORZ{|l>?Dp+bUgO-ZC+@!bNgsk*jobor~nm zQWxpzMJ1BW1uqiyH7}Af%U+~sSH8@!j=H)2MWQV&%LPyA8Frv$q&b4f zGMNG-X88gynOfyZqLn*{Y%7D%8|B7X80~i+r+}<1vv?Djiw1t%7L82KE*g=OUNkb< zwrKRc)S{7DIS}bZqtf+7BNJ1LMkHqzjY>BcjY!Tc8j+r+L6K}O8j+|k8j+M)G$K8_ zXk>k828ceC~Azw=fA zWSJ}ADhS?adm{fiyc&!=)UH?rM*$WM}ad;C69uEGfJg_?8~B1 zlSlCfWMmVtix*R$ALdl*K%7;yWtPb^*q_Q3RsroRO2Kn}WLCxFZ%@=_Z0`bZ`vvt! zszRtxkJDJ>#Vj2g(aWl1~Y*_x@8mR z7CI8gK)~3}mh>B9j-KBsIFZYE!U*eIT%zO^Qr!8Y4=c+;&#V;;wSrI->1JiQyc+uFt>c5egBKfO zSd=nPB3Db*k&~3YX(04-Vp`w)z&1BU>)ps1%<5quMt<-43H+roSqA7N^V!zPkNvIV z7e7HZeLp#Tb-ca1%*R}y>lz?5SVs0HU%~Qsx`FbSXe_WTdX1rzhCZ3t$g?Fh>YF$N zx7%dRO{R*T*=AXl?J+gsz;^(s3AMSL#r{4GV&u!Apn7EX&Tz=nqYWrH#mfQusc=No z^CDQ9p~5Mx*m{^4C>0N+-{!WpVOk<%6!1jYAi3-zee>@*R$+3Z|yqDdJp16T)r z?D8N48N;8BeGXPQT|l(n>`dySnq+!1{pa0F`VB-N^wGGp-Lj*@ zlfBn87{h?ZDH)SgC+eNw%CxnsH%raCnBoXnUTv9vAl4=?*!eBlB0A@I7tGUP-y6AN zrLzs~J7*xjb%|f#xcu_&!>=$p%Z-k_!s)H)S2pbZd-j)(#HuRD;6V&9ya?Xyt$z>@ z8vxK0mk_j8@uFksU0gs#^qX|_b(RP$i7_crt-LYXlqR9de)rl$VKMQo-xzg}9jd}! zH_S6j^Dq+da2w&RH7c<4s$z)mH$T)&L(Z@8cGw±&DCD{G$@q{V<3L8DAfGsct` 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

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

uiYX`K1#Ty?0BW@d%$E; z`Am1A1UH>bc47t}RPvbj79IY|erY-o33G{?9r1$z-aSQ*g*oqdWjqHrsUz96pGWQm z!V*3K{+{v1XQ=IkXOitEqa)V?#5BOv<`i5QSk(d}B+p4;qLsj(sN^~mP||yLaP;Y+6Qf@L zv0r%4_74yD9~=F}e&r?VpYpk#>~t}gMUToXQ0oCqXWYSpN8`NPYxczRBzDj z!-J#821Z7_!$ZSfzjwTUcy#dKi6i~P-tiN|$A?A+lAbr>`*L0r&Uuydz$&Fe3EeV* zm~wDtBz^&l89>i+8E-0e3Y|UEKHR`CS2ChoHnCLce<1< z(+L(?&4gafPH!-uPIh{GdZ9=ve-en_8!1C!Xy9;m0vbP@D-=qd-jg71WAUT?UeC_n z-kz@BT|K?tiIIL-M06z1rFhNYd;cp{Oy&K+PXHzTtbcUqY3~=QpfXXJ&U%lZOqHfn zNd3P_z3@WPhYLV1nfH^wDZ)1B>Vkhg{%>%skN)EL0L;vUpDzPl96#~ok->v1H-h&| zEH!X!6jzJ|3L#H;ocF`qrV}=}@N2d`q3eV2fwG6IrX`m^onK+^WT)V74>olnjW@I> z9!E&BCmflZ9`B|%k9W(GR1F%L27-8kG90QV%h__yf5JF-9`CkaadD7hP8D+b%JdVx zk9X@I*lxFKSbPPgv`qGt{t!Nhe1aY(RGDI>R4fGIbMOc`Bma3MRmrEPh*GIG(Klt8 zM#bj@?k)u^C92?>@?Wb9uU41dU75YIGJADp?#q>V`2SZ{=FhLpE{UIW->uAlyE1rqwI@J6l!a2INiRKBfL(TA zTgm_JwkNvs_=#dJmG)8adjh|WozPDn?}kdw27v6K0pD)G57H^%Y3Zp{DU}9(*j!^} zyRmY429`gz2^gO}5j1_)bjd07)8$@KiRlej-a7=ng_}R_9$d_OH~zBv_8%Va78J?F zF{QhMTn3qyK@UC5z7AsmmKOl~29B&C$}^tO!>3LGFCgD~K~ZRp-^WQ;@mD#zKxeL_~ z|5|l#!+$TJAKcXM)Z!i#X6Z z9NOjh3lPO5bx7Glbt_5^_VV4}1&1YaFWo}*(&g%%D@-eEpWR-WeQ9O(Q~dYb1yOa; zSR0@=XavZF8?=|*+YN88!6)2ZSO`;+O+!$-dgcO=0(|iU`pBQ)-)nDu4sEFJ%)Mds z_|yBBp~gi;KYP6Ddw*JcZz)Qlp)N(Z`2s$~vBQR$#Z7SSi`BQTte-Zm)r8f{1Lwjm zox)KhCEF1%kZ+-Mgc*_w@>Cix6@Y>}O`0PK8&+S@T51w#mSc~6`cv{UMdWnyVG13R zOo>=0P}rk5oNS;w;NUBv_2E^#x%!7s*8cu(WM;7Z96miWD@!cEB(BU|qLqYcJx{#l z)z!f2#R|tXMqDoZA_B);Q)2@^WVi7(iEr9JQ{4npo^BcLl=4n!p^0N?v*uDri) zAAUMn-XC4G`dx=Pg1*B-O1A$FGG~~qGqcTp9;W{8H-DxjCbn-&O!j!=DW}0jIqA=g z7gD8+Cq$FL|82$3!+9;1p@M#!FzcGCJq-AhTSByhd*!zk*bAoagm!GkpGZ}5yi;mP@(+neu+?o^~cgIOBkNm&7=MQweHE0ye&fOR#$W{gv6*VdhugnZv2WEpUsN z(fjo8bHu`~;{iSQ1w8?>{s*1#Ul8Yl=WpEo?t9`{p?x_2>dHK9u+NaO&7ZB`5bW*n z2t#b&SR$6qSPrW#l?{mt56sfa+zt8NMfj)^&8UjhR-(mCPys*12jU{r_Bd(_oO?Z+(g9}Od2#Ok=$BFNWf$DLzq-VHZgX}Fm|}r zl$>fWWs;ISIe^+MwgMcx{l9X489LgISO4Es;EZS&50c(tc;r8ynl9#it0B<^wXEY} zSyO?t<5(75p8spS-R_X4a98KO5CZ^ughN(vlsYuGgb(NcLX`UFmHGLVxn(A5LwL36 zIwXHUZ&xqBTD^6p-J_CM@!YuhwvZLt^}EG7E#AEY><_ld=dcMQ6NV>BossY{^C@k{ zS8y*w-^65k;X|lR?Ng*ln*cuxpBYE3UcnS~ zfHZs5?OU*3C22;uici6nJ1_Ntkz10R ziseD{juvv4*50~Nz4Q;{;YzO6(&0_BhL90K-tF<~)2s0s1xz9Fkodg%mye(om#{24 z16QP1Z-5B2_U=oO<8|Tw>{qMj|Fi+>N~ni6`wemUpIYjx{q?Tm+02(T zY|h6h{Q_5(QSpkZ4L;l%x=)V#s00nnx+QPhM4_;agpqCIsnRz5AdFjF`wK;6{OZmJ zPqO9O1RZ1@F;1`wgO1@l4 z0tac?fLk`;mJPW0M9Ty$O~CT#*-9I*^^Jy&z$2m->}8A(3+S0MN^udg z`+kjo%+DJNta(b z?Vl%}K9pV!br!?pjd(y%*%vl2?6k0Udt0}&M#-5^!rb@1_S_1JJ&kSl3b zOZOUuJ2~{3RRSeo8FE-klGP*D?dis_c#rvUJ$~x2ySLrx-fsGkQ8TF>bKI4}6*{p` zWc&j$4n!NTH`xQva)=f?!>4~Bh9?Dc906RQe1T<&m9>7&G=RsEmQB_3uS3bZ-+XfS zs|%#2b=RscTvm2(ds9dQ!uKD593soux@243Mt1f{4^Z`1pDIvQ7FF5BkcAiZ|5<(i zO!e#ss4^687%Vfz&lG%&y4M5^kX;EUbEy`IH8gR8AaEe4?-bq$pR%h*gA|6UR8vBf zn#Y@#Th08dWXSpp8nR&Iz;&S3w{NY?UL?!GMdR~s-V<+GU5{ziscUbGT9dSvU7M5A zoiPHScsS+~1Vv>}nU!p{d|Ql0-eFzxy#647iwJtHNbeWyN;cnUZ{&3ojY_9;Gvd6< zD6Wk9L4K8;EmRkzMAz7);qIz!I3NJGXFw`ck1Kx%7{42*x`#GLa z{YQ=nc8#G-O8DTGTD|@6<-2gUodmh0i)xA0*AI9%0`<@*;{b4CD z&bGP*d*NVbhc{!|DoB@gI|IY zEP=eoHOG#cT8d%ui6|H9B-dbe+MPhyVmL%>DO#Q<43&;HWJ@X9#4#fn$WkM_0WUCd z>tH(O)}RPn+c(j)s^q$*h3d=K(ZfL;crS%SLwWuYk77qb;(;XfTz45>w}dFni+EGV z(&M@-f)2cA@o-@Z<3-jBkE@qUp&KrJA(eyM-eiTP4^mePw=DnpVlJD`Vs?OMvMGHJ zey-~|-Ai>1&IXFgq-U1&ixGrw+#QXxQRp2I00>Q@WXKVEa_IVG7W+pf3ZYx0ah+2I zH33HsQFT>}_J#|iGd;SgdL+msy<>&4uyqjH5a&2BzGa^0IBCT~5M;+0_met`=%mo; z!YRL$OU+CKXwi59{xhCRpEP!2kfc4+R)^Jv_Xx7F`|rL72eDe1F2}N<3ir%4b&Xhk z`wzhB*w-e;YiAMfUVI0-vq1aF623v)Uqx^Au%BJEXQgMPiO1QA!^h3dKU_usju;yvun%6)FT_OE@n1Xq~VOYh+=bnaY4Ua7G< z*oC<_UdK{PErI=R~xC-73ZnEPb^0+ACX%0wCsLOF;mr0o!VhQKMaj z@!x>h*p$(n(z-p2hVbx2dI%?p{4~J-stkO{-cqh`%J>=acKFFj;85-9B5?h3693cQ zk&u|pQIjr{j}DG0!Ogo^$Y)5OS{WBOUEHc@Mzr1DA!2BxZX}hHGp>G9=06!*V@8^% zDQVmU&jT0aeZZ@NpXO%pv zX+<+9{Zih~b#fGsxWLBktgLopAR!LqK6!$G*g?J=On_5akZVfmshM?xGU z-ur0b?pL=+*>RJiUoKMY+2ZQ^=c?zwMt>Fzba{pTSX!BfEwd;UC8k%49jzlmBhSp* zm>}V8M0%G$t;~HY^#0PKW$eTI@BX3s#kJMN3-`}_i1vclZerU8U9GE!4`XC;!^hyJ z1rjqt1Al}xy0yc-cIZ{<@B|tH&I2szS2*Y7f#B^hTkY_wuU&LUE3PAIu%TIuWqq4C zaeR;=_CgS3C-d?qVUBzYrZNPcz4FXN|yFb#ru6yRf)Z7e{-;zk;QOh3^@o-QonLt&;#zTrn z!_Jo2wvbV3bD^+-hJ*o&u-$RE>xgk}1-Z6N7Y}ogYwMrp>_3$vYVW$(NqpmGpnCS7 z-8*-N>_2;U_U>)je;%m)$6oZX(Pw8*?_MMF_edFJDQ)vPI90+UB9-@^ETt;s#h;ds zlH>fSuNC#%vi!6xKkJP8Wub6mwjZmF_1k}_nROU|q@hJyfMTpb79(;RgX$QB!X_by zQ7B>7^5WkHAMv!ONQCB2F#!K+B5+YB+wTaxztCy~! z=h$~2SHHc4Xwj@NFuea!XCR#}WwD#9@BNh?qF%ue>%#+zn3iIUOK}D!hXyk=t08Ms ztj#GMj(m`d5@RoN2b8)jLXmsNI_yHuJ6nVf8kq-VlF*fa4+^3es|}l8PWm&-tD8MW z>&}wZ8s(u?__3lGwl=LpTT;bhsZcCYn2hjH);+LV!`{@ofHpLKhf%^c3@?m7ZBl&9 zuDJi<%Lv*F`{COA)mLvbVCMbV&#Gr%MMx^SNvy&lpTvk$bmVHhIaI*t%oHNYPT;^j z&}p?&4C6eKLoA%5^=FJ0TZRCjmnX1xAhkltrZ6N2_6IJz8clLHLTwAr-n`&-(H=^d z-Nw5qe1HdS8Y7opY*8>(M6f1(9*}8n24$C=pUUtP%nwJF9DDv7>j4Q{AaJ5`#ejVc z%BfP>o-acggP>~xiK#3e;<=3X?It^bd#_%V8tVY!0`wFJse(S6xUEy!QfQ4?ycP4~ z;wosbMrjf17jilLn3SUGawVES5PMLR({{5aM^Y{{H))%~cyN2ai*{FH9}TQji0v3o z#UD#A;x`%}b0qR>k^QV)L7zA8e)sgu@* zG@eB@hS0%s_xq*QTYr}B=NH@uS?t#u8o*5>xQ2ZCzxjj(L5JiAa^Bf*P@%gC$5ubE z3}m*I5+;2vlp5Pqz%nRLC7oclP#n;Z8fC|L{e~m3GD$3s?~Yb`<9Lh2)O5h7D@C|K z`>E+o;0X%^U&;87FEziN*514-H|bSPw`e%}Tto^WMkR*I-@kle?Va1SZEsdT{G$5$ zd5J;^0?db~qzBFrvw|U|dR>XOLBn>e@vf!?#I}S)9vki|3ImAeQCe#wrMulN#RUk* z+fZr->dAkOBannPf`!jD46Gt*NygN7#ovV)C`qhR(u|xT2xH(LQn!0dQF}~HGvlT$ z-xMz2l%Fd;$i>^}Bv{Wwq#fBvmVK)3zN%@Z(!+A-M%f%yOG6qpS=rrf*{oVNt1Yzu zh#<}fl>f75@2+V6&qrJFKdtzmmKCUF1!~3r{OiR3h;wHv1Axp=G#mjWfs9f$QznL@ z=P5XSD`R-nP#!=g&xv{kf`>6UCo)5FB{?!j`0cX?uBcxu`KPjlN?-tdiF3hr&8K%J z`lUz)S=*yO+96>9so6H-%n8MhsR+DkIon4Zj17Q<_%MvE$A@b;-_Qi!FX7-w`y2G- z9-Oe$^l(H7f5}b+oGjvTO2!rmiUI}rdl-#GEua~|NV@96yi`r1AwEI_>NX|i3~BSOYWhZ zjO>&;_Xad0vf6EG2!XBNP^1{7AWcdwHnpeELn1demCgSM^AY4gJ;dD?QA@JobH;Vi7yXOrHbNK^() zq*yA9lU^KHk_u;IbXhjkLrnoX%XKtF;V;D9NM?<)_FXP8gaS@!CX&5k0%!!^OT(T9I3xQaDWR5h`%c` zpmB-qEvr{PMg_VFJv4ijP?T;6RXbwZzKY>vVKlM0>9RSLNNDwEwg{Q$?cJ|13ZfRq zzeYfMgR;mfh$3YmyVJ@q)ly^rz-r7G{U1h7Jt+L2ox67LiQxb2+TGIsJ&1o2tN@Hl z@q~`v=={CQOzu?vzn>MSQhDEds+7W1nvVzNN&2hhZK|FUZlh|xR3=lW#G!#_ z1`iI@DRiv==)i+h2R5M%v?p4SPM~N9m_&qj>MHa?Z7QWked3yXgNZ9vKezSp6%AaW z6E0Vfs0+x3uG4n9dY=KZ<&_m(PP}P2G+?b7P@4ToVe4V$hMzu{U z8Px%6ck(WAf`4q@4nUxXy7fMLI>@oNT;%e^!F^vWc(GB zGKzi)#GUD+HR->ytzEja z`p(=Mo;rv>EWSm0jPIrTZAN|698KnW>UjeGXa@gc1fbwDO{3QHO? z;nD>HX(HY2{4)7FFO$3Amn(DM6NJ-S1c3z4zqa9besJQ@=se8Z9N;{gPA|uhxk>CU zvD$ch2m|CbzMhmoXEC}yo51rn3SY8O;2nDfwfurmGsRxoZAhZsr?MHp(9^&g)$=4j z$TBvaiHb;Yl6OrBWEkk3)VLpHZUAz0|V3x7}c5Z$w^5N6jNzG zq99(obcdWmuCHOs<_z%N&_nXXa+lQotKa32;xLzLlEv{cC# zOW9L!Wt+rMenM24PD$T;wX8}v%V-4X^auy7#2A21G;FYQbQYEE)JaUa&7Jm?H=%?v z{(NQrGs3jT@O}JXB&F&1=w{fk>J~L4XJ*&VeZ6}9Gt%MCQj|EkHySV((%nC*+qFW2 zW0q-9NRKc%0o=0VqTF@HdOFTej0_CJc{Fx#=-A;tBW1m4v|J$As?s#fHm4M=Orzoh zq&Q=lIEyXk<;>;Kq>3|7gdyO$73K@CbtikgQZ?R09;pFgnakxAw>1rwk~FMxDV07M z82KKYo$#?9eRnFQ6YN$3nOoFAV2hc9LreO#ifi^dLe{uabjLK9cv6xy;% zWkxoljILPQ5!oUF3BntM;#nG_D2;*RM6#=1np=B$QKQ_v{_V=_mjcTRcV={(yyI}Q zMO$0U9-LjG)T-AhnBp@U%w_c3MO2@!5K!e0pRE1;U5)Sp`}B+3uEZurP7GJK*lWLL zClC;(5fbz)pJX!~hO1AUz4<0X2-coL@^6miRTg%8J%N^0>o#w@rk3UI_aEH5{%trx zeZ#EU!D4M?ydx_t=DT%S$HFF8r2Uoo4`}#jRSX}SV5^sw@6CT_=caxr1F0Gj&l-%c zYBK{KMx|jjoESRkkxB#g)QXj0AOmMyXwz(?jfql3qeR{OfikMM-qz`Y*&vEgS0W2J z->i`Q=PtQn?6)fKNIi*ly%XxpwB6){nzqZ=EBIV+9<*wTchF~$!!U_G$a5&`Vf}I?pZ9ZU zBO{L-!V(jbAGA1>_w}o=ctzCAppQJ1$eL(g9ME_o(u6`+#iY@8n z>hL}8IezjwE5W>-9*F@<@q0FHrU^YZ z%vsA$c$K_jgz>&M4)-a9DG-~c=JiWJpN2URZpk$(B zl`~_Z=;s+?6Am?2++>6XuTV1NAawA>nvw1#nO0b`q+_=PSNl^bJP8ra8LsuJnv-%ks`V-+aC|QlauW12^Sa)Wp$v?T1V1N+9nNLeS-o*SrWa zKmi_zGWYUUC)IPSUeS`;p9>11yB@+Xn@YSibU+*4+CmmH^Pa4)#}V6ETg@a1q(U}7 z)0t@g>s^GA{R8&_H3dNK4fbMB{a%O_HW#IFFUf%m@7fJdqw(LZ{9i5n$CeXV%L%OI1op4v1SXx1 zw$262_(H=DU}+V^qOQ^Pz#mzUwUr)R4f|(p0`{XT6T%ouDowe$bcHeu!3C?B6N}M! zXP&eh!R#8@{3LAAQj-mJxqH(kHq68Cb`yo5RCHWWJBC{8p3%v)tzA~n-Y2xn1eZr2&g;LM-!Q6RUR ze`pGVI=(*+U`^DOv+u#`{L9r3zd${KG>Xe7wp~)?gs%s_8BN)faAY@%PL7%EOhTH8 z3_+;1zWdE(bQo1GNGjfaF$~c-_r}_}uayE{wsBo#lF>%NX1$7Vtp#b3pO?xkraWxm zEVZ2(j`xo~?QkVRDpOQL0vJLfn&G!5hmFiJ!cErvjOS2B!g{}YIB?UX=4d7M^Q1H_5lcsXwFK>G+bd^YMh!1E@|{*9FTJ~V=QDeuJkOPG zWkKZ9y!I|34K9ftu3c2VK{ufAHhL+(>&x8W{deEI|K7*iXAt$*m`yOOjc%BP1}9>D z^%^>gHG{RFY&%1%E^ifb-)bhynhn(qQU-KkpR~ODK_?zEr@U-2O}ls+1nV+mAUL?N zb1fPiN|YVe0HtMLASm`3shiP9R`xpyopLa z&FBHZH-+2pIs^Jq9{&dR`j^!OI6AL0L9Bju72Ub!-Vn5D+Zo)6bsw1Ju&ay{$ET89E?CRu_{$$b{ zuLLvWh37kg&5UPLa41dqnL;Vm>2ZW0WupwHq}gd0E`ud`o%baILPW%XTkP>8aP>Si zIBZE8)CNQHk}5);!2a_8`TN3#KW8=?izGVKxfUAuY2m0h7JO*C4q zS$HI{%|#AY1(p5&)#{y>wHINePpgX;?w|P(cll>uuKo3Mm&bApF$v@X>~hFEIVNu( z*-8-^=B#jGCIleqN_vC%)0fn-zX%7NaBsg7HdH*$$o4rmXS?MHuiB7%s-O|2iXaHA z1(f(X#6WsONZN~d`v||;u-EHWF}x>{;f*6aPQ%yxnhdW&2=8|D1MO@VCx+J!mzwrY zpzl-D^q)eZi2ofgmnH)I;|2atX*| z@SpyB&+a|@`QOkVZ+K{E^zcX|k1y#8w7ewywIfltd*Rq-&GM%aiONsavctL3~+KGkr%4gE7?f za(UC0fbvFDYdxrppDN@kaQPK$B^E}e2*ASW9E>dBdA6GA z^w1+pj&dJ2OxZWamsEK*tQkeh=KWC? z?j!Ka8_yNeCp8k2FdB>zc2nUGe?#?MUo2tr#F&d z8$+N(V)eXtZ`Hw<)M$( zrDsswVcPH}ONC0&=(cJnB=W@e-Ex$Ra*5b}Bc@idP{?`mk6QDrHVgEf2plVQ!R_%> z7A;^f@nSf_*hLM~iilpQZW&*TT^Nhwu789R0WpcgBWQ-HO+;Kq2$y5Y3&VHgumuPdI0YPH(Kf zbgBCKm$AcE<=EXY%vQLQ&hCgewcOGHbC0sNE( zI)0j0-tDgTlG=KZTo4BT|5>;VV&s+;d%3+Wf5D~Ea(8jDS%&6@r zZ{yrV4MUYf=<4dKCBAr0_CX^M3le)a>+actPW%v~f{$y6R%2`qTGz1aNgxTvuBodf zRv~wVHYs8_o?Re{WIRcs92KDx{+ek#xMEml7MmSGoD>$bUuD;NpNe#h1hGiB{zk0m zHaw4?VpI3x4i<>Hqp>(PV`L0lmk5kkw{-}rDRE6qiZ~Tki=0a3Dq5`{_}2B0?)}JR zR9zmOia&7heH^4`rbm=V!S(8E3urpT-O~(VUT=m982{s}S}YNnfGN$E1P6DJ$+9}H zWVfleE3s?#P=qD zK@vzs3gxnXzMM>DrnC9vNq?pUeK9MM^_!wd+B})I&h+=tssKp?`)Gi1qz0p-BWU=^ zLs1O<(7lMX5keWk7k*KzfxD37T3@eUbV3{-8ah(@YHW2Yas#FY8o5BC_Pw3@L>r^c zu`Q4itX)xOfiXZ%NHI60Wo*Ild^ykZWs?*@*+SV!Z~4$vzkm7Or?U=yet4R@x@s@F zGgwuwwChl;Aqj^0uKS*3T~`f@bY!E~_#6px%MsCTvDPHSQJ8ZEuv`N&!GoR+`E?pT zQ?XZv;l*b9jqpCwE(qp_PExe>%B7i3+-QYT#xHdWJuSEK0%~l53$xl5I2A_DSUPu0 zWnNo765W7G*}=C5a@&$O%1-0sc(q4wg%8mxbMLcHDN)1&urxR62Du?G0UdgZ*3f1? zEX=<`|1NE3LIIajwgbOQEX-dgebbsd?Ah5ye6(-E)Ce?({4H>B7@ zyZQYy?@D!;r*o}C$U1+dFKJ78LpoFZ0*hK+Jzu4 z>+tM?%z4#HHr$F)Z6#P}{nJ?duND2Z8PUJ>;(y`MqdnpH-#tC8{12`8-&Xu@EB^Oi zCI0te!;9IwMOZE2AiS*tjM0{y_^trm)#!+9Ve9d0GCu77!b}Uv2l`Mb{=i*euYUgr z?gc`&7ji#zFQyCmY`IYSfqQW}mHnaVGEEKyKX4~Z1;P)~0gNR5fxCbr;tN0Ywy5ME zif%A;=MUQnVL{w9;I%OFT3CzIy0LFP{?{g6{TsOd@7>)4cYgc+zY|}#?*Fa(f9w9= zy8pNEza02qn}grQr)?b&FFJxXj#mRfUiA>XqPhiYF&h}Y^1NrnKI=Q)fADAhPYsMc zGcY_dICQK}<7$~znt%ao4*!e!qBcrK;4O|&0n-xK1oBr5LIkjiQ(6Bser5I3xqF|^ zI*em(=ote($xlz^3%SB1v6xhvW7&a?pf^jgLQIbcmrTWo6@&4B)7Gd?BC>8SiFvOm zdMiVD7Z|bz>R@V2vYeHt;DR(cMPDx!a_n#&7+5l@lE!#Al}%}M>L6JYRBiSAnR_4o zQ94f8RgKSv1 zAH{t$E#1*&kcEjsV<+xZ&=RYcUb}neJv0%cG1-L0b~hqnWMUd=9!AEk_UrUg*=dR) zMOR?{Fysal5KFEy?NNe0%BP~KOreaSSE8a3!b)(gxq~1i$>5=Z(YYFDD8Pd$ z#ckOx0B(e@2((u`at~$eLgza(DrHHbk5`u#sxM!UVhxEULQJ49B{Iw{;i|9K>Kz7} z(&@Fh`uw{__72k{!GRuTHKpLs4XfSfs-GB8G#~d;i+uEDg@1J>- zaK7B9p$SzlyoJs! zAAEH8o4+@FU@(i9!m0Pf0dH5bw+Do^Y_Vt~@1d4D=wxA(atjy>9LH-&MnhBuszst- z4s$n!xeZFROaeO3ww@OPnmya{x#wIBO|hSBowlBUWaY!Q{#^!#6|N3 zj@(#aJd#-ATHuM6+mld0=3d3cS01wAzAQ^BSgwBlx$F@z z@G}f{Q-e;L;VXv~F-RB;0sM#JD0S=ZH*didHN<23ZJa?k;uSg~Nd@RyU6}R_Bt&r+ zoPw)YrwkEtU?U<<6vv&GDtUrd$)by6vJN^gi;(Y0Ke?sQ5l>TniRS!*A(Y7^q_4bu zfBrh{(-_eLWdkdAjX{56CAfO**&K1V9I(^}UfrU=yWFE$H8p%Nh;OXrM#biQaOcn$q7FeNnNM9(J zEHDas#|IAuozj)}ltj5aelQ9ii9sC{v?e}9lPkqXxUvG>OIo*qPBE|}<&A?dnvQk_ zqu=n{@M%*JiD#|vNHKLv4WDB4-QBU*I+s1^hmRTrDl?@ZW2V)eiY{F;OH)uzrB90Z zI(RPHLk`GZ)}d~sP8CG>9(1D|u#iSvl)N($W-pT18vS;=q5s`e<#I8Tq_mvsrPW1{ zC~-+*TQFn0=*tL(H(e~x=%|@+k0k@5eoL50?mO-kjM1S?+5{~+6N(Z{NyG&EEU>bg z`3e`0Vf4%h9@Oh~!o>ThvV}^3Dv+!sJB4Yj#9YAyMRT1ntGYjBWV?84CLx6dVv<~` zHa?V$@w6FB+3lCp;V??$?Nk9Vpu^zEjWAJ*H;|k9P2h9Jk;SP<&GSu56KhvLkynxP zbmDzYj^a`g5((VWtdzL*aZFLlc&V_FYvQFY*Z{eAqN*0j1Vi_=e^9cxoAx1k)rc=c zw!U@_hh@NxRA2sL_5E|JFU#`x*BV+C^(Mm2G*b@SlM2$s+78_Ca-i`*@ zgSU3;Tn7&N-bWv--IztWX!d)8Ke2|j_StPz!Z{iZr7*9)a=cOq(Mp;1APbP9yTYg z1Mau#%ky>zm>-2_!wj+~aVPPJ%p|V_@1RJTLJ}oYOuGvcxLC+D-|C3q+=rFW_JH%VIg8r@ywI22<1Y)Qh|kXMX4tu)^jiLX8Deq2jsh zxVx(e(H(k(qYXU@V5s3oGl9FsN>Gw7>|VjtdKy!&t1dGWHOFQFshg;c5|My z$wc%qMs#|$D-iA4q?9lc6fg+BmQWee8ZJcz5F{09dbS)#mg@5n;!LA490b4dgeudG z%Szjs;K#bLqyQqLSBQxP%h^c`qsQyf6_IpfD&nj7inzKl74cPk#h}I~gBstA&UQ4Q zkJ#`ZnRV7Wf^}lh8ccbK;##F#G4}>V#qn)Cq$}Ahrqb1AuoCe=vk=Kd;Gtq2@VCV< z;J0EE@V90Tl09GrWD4+K%?iY)m<7Neyz#LpZFl@bZE{goZ*JV)@IY^Bxvla0_Gadf zXVhzJ+eV6e;VSsU+L-3c8r#vrR1*r*o7Lqz)$gS$HdX|+!G&g*4Hz#0h3v)|YwhNB z?dGP{CsMJs4#kO6*%qTLsnMTdsU*=|iKx^-cEP%t!t>cQDG|{2CAvvKEpAOq(tCDl z=0CkBeS+qt>tv>oZ!fbs1Ou_rIfV`!Qi0p*7hwny=~+6_v!^tJ@L!Xp){tnxI#Y*C z^ue|>Bf(6`gi}rh!V^Fxeu0Z@LSBWj8@3i@T=d?NLIh0+@R&UZD#awB{L@{!cxtzo z%4AAt@sT=9C|xN^Zz}+HK#9LG*Y=9z6QFKo%Qzq}klu3V66SOSw5rp`r`LW{Zs?0M0;?(-}Vi?z`>O-5^G z0T?_EL_-sNjt=y%Lm)YLcOnXjfaTk3%U%|I!9i32x@BXtgo>#;=P;RQNYgX3J8II4 z$SU69#hyHN4iQ82aI2adI&nBXLd=;XW1)ZKP z>ugz(6gH|6E8!irn3DOBur+CliA%CX;Z@pR$(IXpULnKI*ROu{pYjg zpi?y$86L(`6?KZPkbrG(Y-wvzn}P^Cl3vM5l?Qv_HQ-L)YlWVfN@;ds?aix=w0ZyX zh3eu3p`kMEF;UBU9s7-ds#$&iO!dx!M4B@C^S8OXw_lOEICp2Nv+u9o`q-7U&jQP+ zMQek3Qe%@%J(bO2%A?ax@)L^Y>DR^!CAO88(el#3qApd>et^kP z7A_<96#TsQ#p+vE46H$9@H>$M&j7k-PFM6(j#B17T@vrOD_Pl4} zUw6g!?L{#zbelf*6yAyaQmIhts#E*L+Fg6GcGsS9HSUGK#9bRcaqJlN41e@LIVAeo zQ0+Qh%NG>C+N6QK*zl|gTB5N$ZkKCd#Tp?8ugmpM;#a?VqRs_KAA1cQgNCF{AXCU_ zn>gV{BZr$zxRz0DBo%Y8q2w$wT+soi&H9l{ZWyXS`D@3?=b&cjbtLxMgg_1>PsT-G zdriiVMVx;uzU@5DOc8DEZ*XjV0Vj);X!SuLpDeAu_f_@VOHln`9X)oRvI@uge>O#% zlxGYMo^DKCjB)Dt!@%f@ifdAuxL!SX{{B1HnjqtTuZV7lgg6!TF&3s>>70W87!S9x{#PA^CG#n1nGzcnjagYsjaMTi=0`-eOD)bl}!gOFW%!8De!|cJ1%)uAW(}@1=~GhPCr6+X;## zSy+ZOyUa}oAS$ANhx~hFf&}*RK`AZ-i@4}YIeOidZ_SZ*L@A$5!=S{0TULI*cF*}v z{m00xsXTGm$o+TUlYYVu#JD;OY=3XLt_wMDJ|_ZX>>blH69IMsg%=8;capL~FXNQ@ zmRYba-?2H*Gvpp<0s<0N+*fBno@Fb(w`29v(%L(>nOr+8{vP5w4#31v8qC46Oqh%F zonnim3nWppqjC1Gk{3I}^)PxO3)aQ9&fE-FlE$Nyldl9uV@AqIHv(da=;Wo!@C&I& zE^>F88Y5HlCA|q^_F}!1sh>L1lfU=Z)jxc4?{EL8UU(}Grm#8sF{x)nE=xE32{&Qu z)N&kJvLDy^4!AMx!W3y&;jyV>$YSUeqI|mj$huX7BGyG9<_ais5d$HGv)Y&?Mx4$6 z&)&N?M{#BOqVq5M6nUA6LApmO0e*BhV|O%d(>+An#@FEPndmd&NL8hz97bhp#v&FFJSA>^d!77a`pTUW6LZC48qnxYq;1u46TZhvIdnsg}N6oyN1I#P4`m zp_8iNgb|W7p#Vv}Nja^I1TD>Lm_=yxX5_LYwRr8EF%BlGl-jv<(91&o_n-t7GYzx# z5*y)0No}Y3D?F9e@3=cRPCH*U<^@6G&|-#@)0WiSY=}#wWX~MsIG^rBlh{+C9W6Tg zg2M{h_}n|OI}^x!4ik*Ow7Wss`QeUAlELvLyz(V4>r1y3Qh8WXO_1qh&iK^wNawiu z`^wn9bas77PtCkH;jZ&e+DTOK>IYmf+8?6mR`|ylgVP*CyK6(m!GDJdtHk&d=8Vwa5|WI^s~&4W`~EWW z$|3nz&uv>ruFzF_xy*h8l3Tj|gCU%MibgFe`$34$!r(hK@DaO#;R`c=Ye6CTK|Co`oWsodpkd)n3mw##&sjOQ_a>muxcD7cqM6l^QC%tMrU0J&~fyLi5s-5Hop}?&pW9>X?2;N}aHN_~n zoro~pzd&iVz^_4H1haF2$u8#m0xJpI+M8J`MkPK?;q%PUkz{pZ!q8&=a(ay`vj;dN zkD+?0fu)zS*#0!c?}>KMikgIPwJT>|fS}j0Pg66eQMLxSMN^&`KMb$QFeTUnB`w_) z%Q5a8J?~yG@}j}S6$ra|Z=g*rmX}nj>7k6i-R&o9u|t;$a?2{18F*{qa0`B;(&(K8OVW#b2Jag-KjP1BuH}?mGkXUa${;#ON z6AzE6*h%M;dF2Ea61Cgc7~BvI5VT1%ZV;w|8Y!i&`jtso@vN*vpLI{tXXY(FoJu#t z`dVk2>6FXGI4i4@*L>W6X00d5juJ~T2OA*(Xevs%t5qu{vA6vc=nsp)xngK;QkC|E zK2Z3v&`<=+iIY(X6bL0JDi1?Bqu^4dJpKbU7_zm!@E=)Irxc+SpH+!|wYV{nzeM!md&U94`USyLT1cJfvX<2Sjoz%Gx*|<4v0c- zGZd=wU9Rev{XkSdto-dN%~)EZXTcrXq3%A1fq`BgHWmi0tPfEg>W zhrU_UUO@$QWndLaL<_Y_J(~Eg2{1F{HlS27LgmthodBx^p$KrsIz(v9T@^oWHgV6S>|%!(ay8VcSR*mdSn<7-5kc8AZL5V`45J1q0$($|-lzy3Py5#-TZS8if|-Dxwiiz^J_ zI$wv@#tinu8LC)Gu)qV%i)V?>oxRZoeBFi52)kR|>_+h1BaV|xXntkpOY!$EF81!~Sk#EeB6)EMic&eN)8b|*0&$4(0j;QqX1PA3iG!B& zpVgrtf!xVv8IvLR7?={<^6ok>zGGa{7L_$|NxhO1I+|6`>Cvn;@S0=d9R^nNPD$cK zcRMMeKQz(5n5mO7uFyFYQ8)3Q)T?_=cJiLXi#n6?ZqK)Fe#VaSEP-dZTcMCu+=Cw> z5q)|7B<7-1&U2;mxX zDpV^ZG!yA)#`qZUS~-Oja^5vCAi3%AywnM0hhWzFRJ5s`)4zM(`Fmj-QGT_HLS^yL z3~4>TdQPG>QbshW!{=J}&gbT;QqACyKq&MDR9$p-mE^XgVI2d5q^l58iwrVLI1G*1 z!$}$tmK1$L zTg40d@KvoJC_B@3%D1rSPRKkL{S!-!3mxUhv#A%aGNKm3M;P9e>dSYl5TB7$r4l zWP}dM+9)V$U72ZJ(e|bj{=?+#`II)Luq7^7J%q>=EJh)sXEuTa0{ukPw_5izC(eD|Mv<(=Hp_b)-IYW0ydujW6+#;;0ZpSz1Eb|)ZT zrv^Zsa;GpLa}r@|SOM+EV}SB0Ve`VUD;jmc#KPDC&;~}#Ec*dAPZFwOV{q3Zkepy# zG!wMSRS40zqNLJe%`ugmX5_>|@AktfRa#fbtla-`<@?L7^?3C5(x+dM*Yv@?`@-lI z{G1eOM|U=>AJv%YJ(c83Esd?(N0L`cl&L{5O!cKD6{Td+_&JY)Ii@;A+0h_*B)}E` zwh?NW!*V+Mnvn6Qv$&AaaED%u^%jc}R3L_eeT+2AArL?f%8RXn22B^+I`iK2)YCzj z2e%HOKSpOvtz0?kQD8EU%}$1}#!tf+a{9%})ziS$Pv65VVll}35AJ+~z&~gEHQjq zw}{W^!M)JwuK29HHSAR3|9rSjO3S}2F}Ii{m~yVPYt8I;$PYDZrz4Pwo&7?-D0o(c zDTJehx>NY2Re36Grdm_?DPj8&bfeBGO6uUJWgZ_Y+#r876l?3~RRH7W(sKwacvIB` z(`}u&*ag5xTS}mb6-UF$h@fVY7DAN#Sr+>JM~-K?^6o!!4NJ9bxu4zf>VG^gHQjEy zXLECpDAl>kI76DRBA0^7WM=6OFO$S|{Da9vr8rs_7w5ksE{BHvAV=~C%y}Yk)te3N<*){vy?4ZsX%?ge{Z->u7&1rVOgLJlOXb8Bs7k00p?Jg1ITj zfGw6imcUiqG{$*$b@y!cU==p=|Nc=Dsysg6fI~uk1s9kRo(=Q^GCGi`a_E0H9)oT? zf7-rt&pU7KeD&pj`agQCZ&@1ANR=GcnO}3#7{?}v4#nrJL5Ip!p=~!SjhLjBnkeE7 zSdU@{2kY0K5_jv3Sgq3dF~0s!=1PrUM#a%;u#vbQxHd639+fs4mA8*0n!-NIgdBsE zgweLvF;Jah79PH6w-K8S7wld-{j|q+Vse_%*l!sy7nCZQf~_m4S%{a^aP+d++*(w} zb^u(T0QD=3*<7L|D?hdYI}~-r$b{hhvQ$JjR8;}j9I??wXJwGR_qX@ZgmJ4}+Z02A zcBxLxhNu9ILj3(3WC`!HfuG_@`ncJP53KJ9fX^X=GS=26@!fTL>OA=QmAUKS$2fgX z*=?;W$CoaCtBt>oKJYH2yxZ5-Or%q_C=uGxBjS(Hve@)lB+VfSOpk4VK>9kA7N(6o zB0c>s*Ubh(cPN#0cpjP#^*hPBtc)OtR;h|D_Jrop2=@orhXEbkoOWmp-!Fu9WPk8X_M6#(r27D-M-CC5+SvAqeMHPD;*&0Chw>rW^_-LYWE8Bki-2Mg2Hohi zD5nB7Js{NGPA*8%yr?@FO-`ebog)?8XU;BWj&|rS zA8xVj2lWoF;s)nEwKKN0E%k&&iHFjq`P3oyPe;VEwpbIy+bF;vYqB6qaZ)RXx{MpN zR_PH@l$&Wx8V8gj7_kpW4!0J5Xy-ZZez66_&rgCEwrpL~dKpO0xRspgqmz2~h2>_n zwk6M-gw#54#lAK9Vv4CQD*w!#82_b1OBHI6iUrI+ezJ1lu%~s3+d37yME=@tp!yr` zp8C=t{WcA|{K{w@Hd@H*-`0grD&#Q_RFuCc4AC!s(;O1&Ub7&0RQ7PYqq;EU{uR&; zD{`a+e)gMD{8@*$8~@+6n&9VA@cVi=r00?}M)2Qlr(o^0hRDEXnPNx(5Jfeu3d7Y1 z8`3P)nd8EOd#zdw%YbVdLy$Y!2Fgpctq0m;2JoMO>R8-pgd^J;^iN^&)y;p83Egu{ z7^Ki}o0_yH+bVGx2N(#;hK{*ko-@6i8y>(;H$JN>_(`^EFmJ?sDdtpE43{@>5~e?RO0 z?d$&yDo?dSB$oKPfYSr-@Ds8Z_#^Hg-l=uC**Cm%+i;dUow|o_ae&aeX#8z{A$R|8 zs_8bcUL`_+%$iFj`e>uXMmR`Sf!g(WbOzMo;7p zQhW3CKGM&-8}u#QO={0JAWY-|Aj(cJ4eS+`(m+(%*YUw(IST7}p4g~B!;Ex0%z#Vwc=a;J5SP=w#AF4VSG~QX z;nj!(tBfRyNRZ0gkh@!OidO);OT3lbo!93Du(lJ8NdfD?YzlVBM0QCGWmT7|Xe}eq zR{LJS=@nuzaQhhqKJSl3aYMDy0GJ^**IXbB2>C=U^^|_AKD7QCV z^u=Z!BkU4ri~4r5iU@ZlJWHH*p#1ivA`(y- z&Vs!BJ+kJ(1G3JU2KomoLV#Lqh-oo;A(bQ%nyDCmEP@n>I2rTx#Kk)GJfzXFvfinA zO;dC>%!c99UvS~2jK+&;0$-WCkG&$VW|FN;OLyL!H^T^ihrMp_tE&a|rY>E(v^0YW zxCc+kj@T)r0d)V${_I&!{?51HP3{&djW)C@+ix~DshtSu=M+1W6snn=p%FMqEtnG> zVlFCOmwFqh9%<$gGzKJH7YU_T=&4E6ELG7Ijw@lAFTq$yv^^H=YnH*V8q!I#aRqX> zhC_^-A>L20XXmb0cJJA#R~%Q1jj|aigse8g@S)R@mtZJrj05r^TrgZHUq_Hf7{k~v z`_<}99HnCgLK};Oy%@X^jWd7GzyEm88-&`)I})k=pdLNEC*&6{v82Q%*Ku7&458^R z1aFZK{bh+!CYX z6(FW+m|2t^3duotWo_g)*om~0yoWd`H0GJlF1A>p^wZ^Qw+TiGE2FVN>%mD5P%^;E z{L%+sKe&5$d46%}llh?6*&WPwY90S8g!F&>0GZbu0~i3$Q!H2K80Usr!Uv2NsXF0H z;<24vKK{ef>@@^Fz97L_vBq5TWVt>CswDSd>N?j%h_4Buc$ z*!S=LH2F>IC`1|+%sOpY>+n~Qw5i()Q3gG)J8 zr|5Q$Q{7QjRve_eiDy1WvarvWv(0Ax$;kS|4`m##)z#UZl_^~(zcqIY$>~1UR$c-M zrUuFe4E56Ng{9l)IPVbftkDztSh7O%uHh3Dh z6oTJQNM{M>9I^++Is#VmtxZlNlEbyn!O{HchFjPP$X|Cs1q4NK5k%d=FWV>WYix+r zb@Nmp_->Zfccaajr^cUcy(gCOk;46@8=8gU^Aw$bU}#Pr?Iex<&6bPSBqUf;p5sfG zLOmv?MQeS?I15egp?KP>RkUAA^=d6JK98yE(h<4gAw1cDMoI%T47QeXjs}%zTtyM# zw(>`#vD#<|-hMGj$b#d4!CekZCFMxc-`kXM8hUTiXDB=kZK~r^p)R8s*21Bf6(85R z(3RfPI&ygRARw@G>C|T5H53hz3F>yHabYVA4`NqRTZn9J2U;MwnI#+ZEBAkFo%q~1 z0y*f%#z8pPr?SBSLLox-{|9KwKn+09tM+>W%>60!(VzT3m|;5&+A_>;XV)41yoFJJP8>*Jg2HQcDh>^urrtx66d@KE*>74>M z7UqYRGBOph=36DPhh*vAXrn$TdV#?KAy1q0x-}RFpEarzo@=PT4^2?NTfOierMZi* zbtX=5KD4Dy_W|Et%xJ+XY#z1oE3+T9PJb^Zlb3R=U7ea`xHnkvdAX%0-T7qGk~LiG z?pdK6Eq{HLX2j3}Znto)B=niQDxa-t@YO$sbr7@LO!>xfiHV>bg?r6QiP=<2)3pk1 zO=|)ZbFdIXBln?Gybk$Q6=71qy=DQ4kqT@Y55JO97$1i=M=EFoRe0pEWjloj=&eTs zeX8RT)Df#j0-mrT0GrmUV$T5@s3=(mGI7Y7mn-2)OkRkB|FTwu(aJE9_6obeiuG#6 zaEJ*Gqkfenqb0Nbf^!mY3yFc@ml3eS1-Gn61>;oOsswtJmFrhq@1OYJcR$X0l_Yo@ z%y0<|tXydL%)!gDb$Vv+X7D--$?BB*0-4^^g&#J;o>c+p0H9<#2aNJ3H}zgw|xsJ-rJ1kcr=pAF{@rHo(_9 zY*r@0{WNtbi{eZ!qfllR#dZPH$unC`Wv#=95f6HfUAID<9H-_kSB?HkuDN8Akt2H=bNvrNx^%4*V}LGX{+D8x${-$ z_nu+i-n09S?XT}>J5Xwh-hp=Scq_=IPx8vsDMnDfYQdNhoP|=OWgJ@ta-}q>(*BaI z*FeM+bx@Y~#_-yVg3q-MdD0bGAWh9@%(y5>D&73gq7MjH=hR$D`?QEFb&~({f2EEq zrN3s5un~uV5z<<0dsEXD1Xi$xI>2^NU1vJ@q%suRO!BvNFR!YqaOrGE(;Vrn4}VP_ z#SQ6rIr?*4iXeOaQ`4%=f>mDW1k3D9XMb>+>)ic# zVJ*u4&M|1c6;>K)^ZYqlPl?%E-^y}GYk?kR z`;{$sH#M%fD)cd{xvhm(41VaPnU8cH8sN{IfBZ3`jO_4-QaTW#n6NwSb4m1u$^K^e zVMF3^qmvDkV^%CTxsNK8dX>Wwa#t2ZXv*3?4QYeyh)8R*@68~sGKat)6no-4NX^&F z*tx+7yPyQ75%h9o_F4xzR4SrLQ3eT-D`S$_;%5@V=$OrFrd#jL1HnvjZUjP5W?3rC zf4j|Y_H7*YXzj3PjIwLYy=@=}Q<0WW-@|mz1s}`JkO!wvEq(MkH(Sxof@Zo7nFnu{ zBk+?ZT)(C{1tiiXCZB*b3kl^51#I-bs$y%e!%*mXcIDbP%iluQ6{X(ewyQ6YA!D(o zwxOSHmYIsF0ubLwrCKK(c+_RS~km(B+k@=hiF0ZdA!U6vJd#0?kXrkg+hH5upH~r!7!e^;n%Dz*aZu!iO))xmst-Ajy z=31UN{8aOKStjU>R#GDzc|gS=eSs%;Unjro##pTzM*xZ#(&0%F=4Cv%eN6h=Gh+C1 ztZAoQdvv>8mYlG0o_;lOv3--f4&TcN%AsV@! z`PPZg(c*!Kj7`6(&W4YjKN`h>55*u~DPz7+idA52nm7Yu&n6Jklq`v}&ir?q0th}P z1zr*PnB#e|xBz-xDuR=l-oO~Lb=Z(>i%GFlUv%URtnk@p zFkHw7w@#tqHfPh3x{cE-fBPN>Ij&pqWw~ML<-jF7VFY8!Zs*G>;YG#gA^z{s_Ut+( zp{$`+H79vHq59nbkf+5`SoRVtmu)1VjaC?QB7?NjeQ_BoUzI~}6YC8OdOil4!Nxys zf9vHxZh!6V9UBpETS7PLx5k7<5hG@PEOfnsjxTTU^tef7fL}_TvtV?`SFUo$V~3_G z!NLcDo-)OaiDSLMk6*Ozp0@mY2PO%1y>;<3D@wdhy5VD{A50GS*{Jg;UFj&k6e``zSQX>-KV6jgDWmSdcZm!9i_c_&u-)qo*hUA>I8Q_ zb$laF{P^&Pb}5Vt>1cuLbOLtVK{)YPg7e_s$!_4EtAe+N<52DhnW0qjs9UiS%1nid z)U8zSez=5rK|0yfGf?qBb7y07TD{tgo@^ex1C?}XRE`Vgks?&di!KhKhKJyl3OzWMVxxmfuU=d@;kYI!5UoKD7ts%McyiJ$*K$83h^tmf_p(PvGm^~HHKZJhYT zeAh8WquSLvyPpmo!Vk}*xlPN!*a-j7X_L)PuGaBWOQ+u>o%*rg*9fodnyDZI>$k1E zeWf~93mY+AE)=@A&n%t3xO8B~1F4+Gw%INnOpr!egQ*HTs+XdZ@+#G0+2p{Ah$MX& zIY~jz)T6&NV}QL5Woew@pntCLOUR!YjYmd7NPz#pM>eZzpt(=)^h@uzj8dU{DjG@v z%uv|&{E`es<$=N=$eRjz9I#SAf!||kDB^GoWJ=&AyBG1a zOlZi+J6yT;jT$kKZZ5H&DeAHPH@tnvIz;MZs^$ACs)gm~mvld47JC0Sfg7^z0LaDO6qRN=yJB(DewK4p%x;(q zT?d&4?F*UfA}ZO3LRN4XLe$KH9A)%x1=A?A-z+?ys%$}s@TApYAB34V1*%h`6%Pb= zrE}Jn2NViD4-!X!0HXYf1Xkj!H;01m`(!-IzmK&s;S^1gRj-dugP6T7e z)Nk?r9@*zWFkNi74rAE^dB{TgK{`dy7fq*$`7nbMK=4boSVw3&gQYs`2DVU`1E1ng zj=AxrwaRVGwSc9`6o?$cdJkeN11xo}j33Wk_N1?14LEj}P@SjEV7I);*ajXuAO58o zRvJ`J){w2!!{K4EOge2%2>q&BLwA@d3DuwoJ#-`46_aXF6rU=AcJ7_KXPF#8mj+8* z5kn1Qu2pIUVp*xJ7%Y~B(J&}p_W>)Wa+O(8;hCa3q;w<%HySWEvlLO~43^eHkRv^% z1l#FV`m>8(8=iT{8OWo-Mthi%)_J?~5k>mu5!oSv&?Cv2vLHart|W^oT$y8}F|>ZX zxq9io>ivqm3&PpUvnN}(q4H1l{zl{IOQ#8z3kKDB9q7+lFjI8{Y<0h&`>zsy&%v+J zS$_=u^@rTl({^;GzLD2Vqt-#5?*iw)=H?9$C{X5JL*AN`v?i@5J3raU#Y=S(pG&n} zmua}-FmB$?XerZ?j-aNd6CH6xZc)xP?;7N^R1+w~5YXwpYrqHvO{$qhNhci+l`e$> zr@MVhQ_H&UR)cTIYXS!gRI)q9m^45rK2MpX%*<0RaW7{W&V&y|tUCq*?CUq1FA)eK zFK^J!t~J^i>5S4))rcrmK{>h+*4{eiQVC(AY z11ym+tb-1f5gFT$@8+i@&r$_voVyMzW%6?g?K&mVS*%(KnUJz(#e7edTT^52Q%W4< z+S`7cGrgq`2h-2RQ~TmlWGZW#V|A5ko=@=ZMIp$=aOQV+V-Js1Hosu&% zSp>8p%!tI%5&aQ!-m-!-o_wonB-yp@7p$T78@ zQ2e`8cL8vd_sRUO2KRw33E|NnK!vkVDX}DaB;KcVOIA2BF2hK0|-$8<`re+2`swRo>}^s0dtH*YW#lUUOLD33@d6I@1*(_u3%2n+P!tU5195BcMOkqaoRzJtX%_kznjpK}6^U zCsv5tl+%uTj_Fp?osVsYFvE}Gg|Npx_z#NWH^`q5N;8gwMVsu8}l%z(n#v3xxM`40@Wm<7UyY9YC`ueT@=FM)XKfP*an&_ ziscRvj{fT5Q_DXt*qAzVIKaH=26VFaJ3-hIhrI;row{Mye%kob4-L1>8KA5O=HD7~ zWjVG<21ZY!@qUENbG!d=8qt{33#WCjZv9d1n?Zj{r=>o)bqeu@=k4&zN!cD@S{dF! zuP$vqFuD5aXA-U3I7yfZX5FHvgz^>T)=4()>+{=oqYPqlJ4~qavB#U~!yH~CT7jpz zG%akKlPkwQ!}k}Lu7Ak^HP9C*SN#s+5PpRjo-+^WOx_K*mgB#AWEq^#?OXOm>M??o z>C8wN_LK*aD7&a!1C$N|aKsI)s~W09SpxRpQ&_~+VF&(RdPaw7pm%qh{5f?JR$N_y_qL9nTK?O6kF({kTyc(; zzg@KYeQLUty36C!O4M;_AXU5Nq#wt9kM)M+x4_BCUac>nr@>9OkIpkWr8K*mVX2o|2w0=&$hL-u>3G zYv?;MKR1)B-BWkvXRpTLNJYpfA${Q<&E8%*cYO`5pH!wk)*xD4b`c*Le6zzKJ!O@m zdciHa^HkrsFhzDpKld}-Wk^O0LDFk<8H<4ENwX=X*&Z+pjUl_!-*kuJ5$W+0ENoNW zvJ;4<@UhX()Z5a)#rw}uteCf2@tJ?*nSbQb+W%p*QN^OWN8M{8iigyBq)Cwc4n#dxGEB!y&=OUrHJy z__yCQhlIk^EQss=%+`Nq>p!#gyR-F4X?i$w-x_1>CO;0d2Af~n*4pULF#Hwo@!I|! z?0?q-;PC;Z`~da`4Oc*hJ0Mj<&W*O~jX^;&wZXmE!cYu4fIl?#+N6y#x^i@`b@Hq% zwO9Q^jkXp}hz$X?2B}gRKWZqH?yOS|gbWu#mK(vBkD|BDF=IVm1wo4&e?73*@EWvv z?6rK4)$=`;Qx%eR;l3|;CCIKlD2BoGgzhblajsWX5=$5R3i!qSDQ z)pH-f|3Cha@Q=*ju6}-G`RttdIZp3b3KTRwTTMr@9ne`UeVWHiE#-hRQjzR}c=74w zd)IVtMCoa^R-V~}oHIXuJZk`BOvz^IAHz;8-dnkO*%=RNGG?9ne&^U|`&#!7FJ0p; zWANHJmHTUzQmLOG#15v^r}oM@@JDJ?3;-Uq09P3UV=Ak^oZ)oK%g2l~p|FesNd2SV z{6%8?B6ZV@=k^-U>6{|7>2gt)An?t#@6=Avd@E79yQl*eslC^%kraF=^)RE*oRKrz z5$kvLNEYMUdJxZ^GV(n$kj%wwbBrZn)-cwKWY~npbr7sSJz&0!(*HTm6~D zl!nx_x|T|qn>0`&Tz9LTMXGV6%{!#N>g637gw>x(RWc{^nukd-vzfQ*E3Jl-3zVE@ zvi_`Y$tGuYTF9DNk2d-#0DQa;P#!#$HjT?VkzcC(Yg$5|%=^WU1#>co5stfDCIKkc zSC&3G(7G~1+_Zg9ZY#Uqb{}`t2zN1$!c0qx!W^i(RHVVWoBnWv9d=0l*vfjW_d|0N zxKDvwb!qz9{Udq96m0_*ZDfM^zqg{lG$YXJ_^ziiJPVnxx`Bzz*2~W6uUws6x;d2z z5}g%t$PPWU1-pD?=a-1{lYH{&JVAhntteiOEe^uW*R1QVY&3n{vArfi##MsN(4HY{ zq>&i>cTywQLS~c$VlbfqcMarXT*(}WY9ED3QZ4nHo_y!S6hj%}h`g#$|3dMDI3BT%{{i%bn$y;id2+dccTyeYp>87O z-?X;fq%ILMx-tsz?Z6+ve!6e>UU9o|@=w#v4jFV20}FV|u^)+Z(S2PNy^3kSne0I> zKgco(lf6kAto;$N{q8P}gY3Z7#cd>S+i=!~;eE_=SOmlbuo-nX+`i^ljy3N)eSu{=X|&E=mL5sU~T zAhXgUf#1Ki>+Lt6S^{_le6E4rAsWOW1uZbcFalVL%mI4YjgwIDwVFg;r_BJtBES9G zYczCUHVK*C>#%w*yJbn{7*dB0>m!(%gRzC8SYahZ_Y->aa5mL?<{;5ntues~m8pqf zd+jnK@Sx|qKbv{i!?>)U69W%LrIHw=RBd8aGyS+)r%z_DidVxfetSn{pnXUuu9mVl z`S*0b;K@@@OVx$2N%T^yl@3}FrK*Y*Mq+1QmnRfg_En2vL)PcR$O9vMu$hDLK0{K7 zP^}QOWGvn<3oD5USrnT&5>RqNLXxc?@#YW)Tf{nz)xm1lBpMy3l&iBD8KjJ>2q~bg z>Dy3AId#HxdP8qFkFUzOKhjiK@OY=dX?6vBgq|RJu)jTROjNt9`m)$+b}z?N^OFl6 zWDZaY+!tk|Zp)bAnQGV8^0nKkeFGyay`-r#9PNR&c2Kb@Y_g@}2gC|(Z{DTW;bW_x zUpKcO6yZBPZSKr&ta?qjqdt%v1It#!8Uo<+dZnRdI= zR-greyLdBc_~12$#?xQmRm#}XyxbLQpT(U^*8r=d1WEk<-Jd4EX&t?dC$ZR`QlYKs z(YfUhZ^CAO|NT#spLl7&YV0GY=Ou%mg=i0jXb-hD{}jmWo!HLRU=YCQNK~UOnvsIC z7CvXX%NO`yr_RWptc=KDC$KoNT8T^OIQ7x+T%EkNbmFt0ou#>5Pz1Hq#R&G(M;VM9 zZ^qC8>#P78A4x&Xr_Uq@p^p%*x27p0E=MW>gSxDhsI2h*jGttLOa#Vv!=^aN+CqRm zSpM4~K(qj4xzjdUlnGU3Kp@?6+#a^Ax<2%1{oDzabQ_r2E>kFw3GBu*34RM92uR$q zF6OL-;UPl_Yf0^_+36>gON7W~;P)o9yCVcm zel~0b5Nu%v7}|DYz}#|V(4a0oG>aT$s?=L?ff9xge?DO@@*30r5w+ZsK50E|l_ec5<0I+6snE8@T3 zcpZxbFk?oLm6Mu~#9PznQY}bkNeyT}vxNt@4q#o`tPKaBr5|JzZgp54H}uPhEK5Wn zfFn~mI`}a4{rwF8>vor+>%<-`8U!9YjU_;bR?nT3FwG|oj*=OteweJ39id6Wvc;#o zWRQhkX^ufQzP9OwnOUi_%@`tQx9M@ucvU_M<{?^2VYv|OqGS`>>g*5Vg0T8*_ap#4 zT0=tcYAC`SZopNmuvJZEmR0nRGO!nozp+|@i?Wd)Yja(k2#f)?MezToK0V*M`B|3H zg5uybK5$l|0{U}^mXH6?I`$QsQkIoP_JUph1`0)#r8dy}y@w&VKS{1;GBj3PnffZJuJx}}_-LL5YM@Z+0qQi+KF&=uJ z11DJ>Vq&X3Ph&EQu>`%2w~<>H(RYpTcR*9O2JFalNUB*f*667*NBw!0Pkgs@7_p2k zxioD^-3u%#!6k8^b?j3J`(|8RAMf@pNQzsR87ro>$DOk_BB`N&<5T1-*sbJ^&BIAj>ttfhN!JwlgOmTbGmld#{F-J+ z5f{I@H|^7(e6Os@Y=5|I+{0MrSj7I9X1p&fLzJdEyv-y4zBfP$ng-UkpR6v*u8y@uM?`Lv(+U^aTDq@<}ts(tqqnNq;F~!v>H@|Iy zhY`#hu9nMH14E{rMYP6Sh!f9q1-AymEMC62fN$Ztthd_V(F2oN*PWD!pVJLyiiGRL zL}{SH)}1HeDSmk4#z5W0^}6}(=4wXWx}5cscZOOpCwY9M*RJPHb29ESx5XA4fgW?UIV@jY-DO1NECu%CLt{r45A$1IlM&+6X z#o>F1Jfc>1F#f0wqK9voL}-2XDDab^ZilHuXPhKjKQPzaSgzKl1NW?9frF1=IE2`2 z)S3<5Tew*(VKy_Yu=9q?#P|Myaurl}`Vw`FDi+0GIYN`_6zAJ|p~9D&GQ9zd`U>q9 zi0q$N2|{bkiGryv(jYE}V@yv#8AM%{AvXJF9opn=`pYJmqp)8a@<-U@o|rGpln2@y zO#pIALnb`{L7{*Y@<{D14?%@e_=tW@l|$0jQPhbEDp6mvb89p3XYIX6x5l)tyatER zZi3d)+pQB9Q;m&%2faLV=BLRIDK}{8;5tyF z>Fw8Uv{z995b|YTg53bDi}}{+cQM)5L=eF!HpD2Ph^BSrW3=rTFdx+oYos?2$OiNA zzQTRvu+;M3rXJirVwYg5B`sj1ox8FO{^ZiRqpj=b(}R#_h>oyzfTHqhknTnfwg#=+ zSKaaDi|9<6UOjNcNppUf-aZB`={s@s} zz%%xeTRIFx28ks5LO?oMv_})#}xedN_thT^TV}Q=n$21)6eUulTco1HThj-Wi&JlY80e zeS^uWcTisFUKs2bo0?mZ)5q5nCCq$>U3BI)%%8xSHkD8Nj1>W?= zX(M~wnk!xroYFN)2b3Rmw?i&}@#(k=CZbWgPb?pi*{MEX_3X;EZ!{p@fypO%kc4Ra~4i{J^R{Pp*il_;t$Y0YuoZHi=kuuA3(J$NwhyIK9V$m4)OmN ze(~Hd-2N{w{$k6s`2XK~|JU7-utkG^4a?;T!L}0kS7DU?B_4a$J?2?b!L#l$R`-}^ zjbb^sK?|tInd0DlC3mL7TTQ{h5Ec^HMjbNoWB5rW8mE30=<=%xWjbw-u?s}#kFsk4 zdCZot-IhS5Gc=^CpEdy;&3f&}nIBCt3`EC;1Zr)J%}O2 zh3o9$uR|5XW{v{%C5@nN8-_+JP#V;B-u z%A_wTNCJ32rr7cjG-9aL(wKGWFhnLTBY7T?g`Ep{JXpQ>8AcL5aF-SQWt`~SrdzEH={_cSdzwP&2C@T^9}#~FeQzX6#H|a#;f?ogA{dMs z#lb|_HT_K=5#92!hnBs_t|Z%;YYz>=Vs=+ zt_RbPZ)j{pzqJd92X#|?Gu^*vdGS!|;$MM;a9gpk3{s}dcjo;R z);%FX%!kY_OXQ?AM>Ayt{aAsp;3A|eYH213Li`nWLHtmittn6T0Q@JyN5Bj42o7OB z6^sF$yR(Ng>YcYL0g(l6KH#~L7nav2G>Mgd+2BQ3V>9|ojp_n^+( zIS_}iHH!h-GC5D-H@`R5JlIFqe!FwXH}S=MQX?Ac(kgnlDP=!pw#pm3i)b~A?RKD$RMv88x;II2_T56lj^sYOeJ zLvdv=8MTS1+qne){EwTTf8k%~zX1+86ego>rs$*d*73hWONbvoKs8rNc4osG5e_nW z97ZzlBfzVO&@h7y*%YP*vCMfZF7c4Nt#f%6?3QsZU3cDhQu7yA;f*6%(^o9Jn*$O= z-p#ReTuYBHe($>|8-##H*BNWL;2GPpdGqFe!`#-9*f=rd>Xu(^#s>w%?b!g1!|^yl zOt&I5Fcj~B>mEId@J}$@ctq!3NuQ&b!M3jUY%Cbsws{-OcH0*E*OqNGDe><#$67EKub~n3^spTHH6cvt+zB7X=|3aO!1Zlv)6VgsNm5?&{DkPqLv(jttlejBm^&aA zDtBCLJ`!e-$&`J#dTk6E`H@AhBBGQ|GCJm4i}&a=%g29Mn!SdR=_!pRWFQcc#nU?V z(ek$+8ixoFME4OcXwK?NB(!OZRu=83IAKlS#S(zK*Z}kR(#3Cyk{;YX37G@lMwjam zbGCywTsCinaN3s6KZ`j(Eiva*{P%a;|F1%0f8$YyMziC;o1YWEb>hEUUU+fqv-t0N z{I6$E9h*^zn^6Vky{+eE`+vd^+EK4p>p)NNzn-25{t04PNLmRcn2d&XY$E~@Ht4V_ z^iRqS4GBlESps*;UT~Hsf`rRG*r5S|rs@-1WCz9t&?CqsanlMtJsXXG1_PB~xLOSc zhJ(RoQXfRZN9Tcf2-6nE!s5PiSiw9Wt(R`>=`o&%pBjU13-YW6^gHnncyDvz1#w%F z>Ne2*KohCfpeBZ1s1E%n01V@G4&D$p9H0f0J_AsdrMNDBU4@YP_DV7ysXZO&p=uhc zl_-g!i{dXs6R;x{m{7Sy$%JA{GLHkMp}a$;Pl$GrFeZ0a_Jw8eHgM_2#z(cs8~>b4 z2=-t94>-Yh@MGJ4_2RbF2ZMoNSjYm>`i86Zy%Z3|07#G05jUoHsHYxjmHLg|gmVO_?tp&tvP?v9&xxu;MV6#o}g46Wn0 z(Nn+NvUywZZv!A{UVi13Z3?#=Hf9(C;N}476Orgi^@u{-c#hB(Ic&s3VzP}1-1;)W z#d7f&^-7M>HlVE^EH{L5P$>u-O!uV6Nvh*ymO(9P;0$|=O%_{G9EBD%m^Xk41Heki z{FMi3e`mN}9mCTY1(M=qj%p?9!CxSe$SDY7+$+eepH3mEjz!cv5HA^`s>VsuL{kRO z5QF2gwT`v_#ZvGR4E+w=k8wfxVu*JHNBDJ5v8L`D@)3DRgQ8q3tI|s4T@fy~ z_SB{eSh`5Hd*q2|Fgu1Y9goW8fxQ(BV?e{2DBKrA?oE_nkI(A(Kv}Q_!JLuPt3BX> z>d;AeEGh&$u|5!DC|FW2F0pv2TBA~bj0*tIr%wO}6?Ti@HE|<}%EP*bS*(ZZmBsH% zO>B7_M3sGUy;`BxoI(jMmj=d#$x{$FbPNG&Vr%!T#N^`2@x`Ae zPcL8kO2rkyoh)HkfLOSB-ZXblrr0Bmp2Awch7RrfNKv0Fmo9$_@OWXyd{jxS0{g(oLlHR9$ud_ zm%nuF5_+*0U>aXS?P-ysDhI~lR@m`B^{2o#6jg|N2dWm;AZAb`isdS66xAe&p}%XGNXrrwf=#7hBx;cH83uoR zUD%2;160avd|D_8qvYxc!94-s04VIFFGx2*m97kkWHKyMJk~5zp*D7=AEkEAAp6>o z@q=4;u-}Z?u*qt_pesb7r11xcL{K>0rWDnVR8WLiACT3(^L+ACCnc@T%9zC*)q1Yn ze_ss3znwa>bo#vq_b%$csMz|{6ePG!QM09wvF7tDB&7wbXjA8}V&IJ0z#Tk|4;+Vj z%&8f?I%i}TQ4Ht<&eB&u9sJrTFvoYTdPM3gcTxsru&Khqk1!Z@9AiT1K0OQa-I;Ew zRXSI|yAgq&)EKQ-n0n;Pe%vu?`_nlctwg%m*#~>!i3Nkhk5-+0jv7>Zd{q!@Ax4MWs zfBWg+rzRAHC9b@0QKm0Ec9QVLDK+jD9%&5LPl_X8fx09ov`XF>`vt~eDRi{3qUF*^4m`_ z!TM_MgSnKY)a1W>JB89HticN8jihKjse<)IP>Yash?f7`J71-Q+24!56eJ&&I;7;L z!bB5Vafr4*Nma;Lfxk&tbx29PsUhvY=$L+jj&Ge5*K1yuzN}$la~N&UV1WT&U$pug z(#ljR{y0s5XhZ%kZZJVOs&W#g#_C%S+JOCe$j=Guprc?86dLBy{u;)wKt*wuh^^eEd@A@+;rWEq{DSGa&!R{;!5wsWO~^)EK1(QO7NhkIBNM-Gd6TY` zer3pcg)V7ww)Au%6Q?XBrxr-8-!6 z8dM6`%GHy2Hu@)!?sNJg0;^4X5}Y2~!xtuRWX-|;F2RLPbDdN|)|a>!A1~j#=0J^fp&i=36yku^)z)c=DOVF0iAm&P^8e^mQ|D>a zLNWKLS|8KZfB?_?G7o`eWJW>YaNKCHv;Z>{6fcr68~<^mQDQb0g$z7}su`FaN-$vp zRza*YX~;-;zj$n~m|<88G0qDKA80wqRL+{Jd9X^te=j#+GkfZk_r_TwX8ej68ay4Pxpsz9e?BB9fQ2|EZlv0HrUW zI_=g0yuULJJmRK*+$5DXtewJ#2nG4F1Pz*zd4^PtbH+g&`f2JWa=7=QA*Hm1ewsQI zC>tt0ac#EY6`Z4+E~eVLd)md}ao=SOKRP>Q@uuG8-nz6b#m!`u-mDS?5AJ-0Sb+1! zIb4ELJIgp<#7TaU%5BYUyBQjzeW%31AucMVXuyBO9V>^EQF;J;CdSm zYQGWoVooq@gK;B_-M|$b7^#PN6RmX@dNNElltkY%3xub(~!+bjIs`m+NL%mOUcU177LrC0bQ8$2o5 z-uqa&w6JpguhJR%H}K)ov{~i2qHg`tq0_DRzv*xRIJU4=T>>Mz@QOvW5MRJ~bWxDB zQ#MQ%99x(HQ4p3OcNUUPq#J6iS#HE2=43jMi64oOgK9M8Ar+%xFfeQzkP%`8VFoMI zG8}(|rNe4KNZex^gVI~jUKB?Ky1g@^qkXevBoquaAbx|qz8DHAmYXF8x|GYbea2A* zv%PH4Wi=e=1Y^~GoFm2S0IQ^5d|b#om;rurOxSW2*(5oV4Gpp&HL0Ex-1_IfcyNEp z=eSr{Ubsw+_F4-+EPeC=s=96;+#CRH^Vs}+!L46lzuj>MxXquI?x?Jwm?LvIxQJxG zs6UO?f?AzDJx~Ybi3GY$uM{(~8Tx`df0i-1=E&=*ft=+CGNXapgCe1RAJIx4E-(hDB&WfwwdJJgF&ZxgDU#*+`tuYd+)m&Bt?P#!0EDO3YK zw{-{t&Z!YhaU?xc{44}sFu@(1N5PBF!w=PXl+FYgTctxhEW704ss3sZJZcZC@S;yo(3DCY6J+*6Q{^Iii+8_+v z?RXHx<~hH94=Mfxs`h7)b)H0(pJkH$!lRfhg{+i#L1XKP9oVBt;rj@Le^WXi#9R+Z z6jv$h^y_ofb^XDQpDcZKU4wFf#PG~nsJdVW-TSn4{Ua%>S%Kvd)X0`&{RcLJz)=I+ z_u&4*()BMh{X&mdN&u;@yNKv;$2;sk8N>rExe@V(1$jUZ%4fABQAweqFcMZ&il_3!0i{i&!BKg zM0Iu6VQkW>bzF%XDq7581Mr+Aqs>MMfjVrh|5X)@$2WGDeQV~eU*Q|@;HX$t+`4_E``KZJW16y@(TrT%+=?jL#WE9iTqr!-0TDy1t z{>?wV)enEZwdeJnZ~Tuf&&z*o|F?lHn_(Cg$jsx8UpnQ%aDHB=H#7KhZ1TMKso30`Ogt;H)r*hYvPtr1#n6yr?S{5_nqN^)dTa8N zrR!g;o32a97sYtU(O(Vi)W`;X2*#!c1O}JmTBaDA$=TFkO3job=45TO*PN!9Ls~xL zclr4peE*3kZwaKpFx zckp-@oNYJc)zi+>c#L|_xrl~&o%W_AxmbfT9Oa#qVnxr_2=|;{R~MDUqAHG+)`iTs z4<*$y;2hM#hD55-u}C4!hZE^0!BFIc1kTckp_b`%P$WbAgsOTt}l}?z(gcC_xiibm^~WV!(sc zC)1I1Vm|=$~)6$MpZ21P* zZF(q;8q>~D`}KTV<*2Q%{3NC}{v?E_mvC(5B}G4ZSWy0hHuRXxvwqsN#+|Qfg>iD4 zRv>=3mV5m6&Q}MaJcsvOUQI(|B=qs5IYf~arL!8BR(IKuAm5d0WdIpEKtdz#4KbstL?tL=ae_muYQ>}gi)hFkE4dCR2|&rF1Iq}$&9t$WkU-+e4qE2$Z)Lz2_#&@z~6V?z#Lon`^U0{55?x+tXGR&aPn6akSIjnF^xLQ z($AwLG4wu;WoJ~IVcr=-l|F@L<@*RDa2a{R{U_!LfN2;0tTqCjy8p56nUMDPb*2^t zq4Y1pePLXN#XDmWh!zy1;U1J2I}utq6bIiF9NHyxZep}82mKr80!j0o4%(`Y$V#8F ze6V&ZJ>@bPQx9ai;e6}*N3Bn0?QVE8-bBL(_fBrhk=U8h;DXf(NgdVd*gFZpm%S5~ z{xf(v*s|FjI&+-$)bn=KMx!x=R)hu*w+<{_m_o0-g~|2Mu@BjpGIX>tD!xh@_38v6 zI?E79HVg5@3b0w=yz9U{eq!~)6{*Rb#N_NFb_YbCFaPm65anjC3#-_Jcw<7xmA!Si zf*P*zINZtiZXp*gta-5eV*4qZ2IC61VcccA22* zO69-Q>BUa)pOwX>U6I05>7IXs3llMw*R6uH#IUx=?`EyYY9;m$>*dOdxy|QP)KSogi>Khha4|*LAY$Gm0oU zT(nsmok#%WQoWy=Xhva9y7;kEZnA{+xMp=x^Ne%m!JUOAaV?He( z&#jL`1NAi4ik?(6Y%@Lr*Zqwju#1keLc~}E${s&4KG>+uyGdFBLiw2yo7sW z>JgS9!nm&9Wcgh2->ItXby@h&BPXf8(Hcuc{30xsV)!D;pOV54Nfj?;m0A(7A`qmz zxBsUGoB;d~yTUc&GdB7Kz|{!lT#uuXK(b!k;(t+PWQEghRchpYCQjxoZ?_V5QtdwP9^bbH{IVoPk+yWZ4 z1hza6`>XKmd=o{j=}Jf306DC?QTAb6()c#=JorVQ>Lp*CcZwX^ZTU<`k(!IM4a=wRflp%U2L(B$3rX8hFOZlzkZIX*6F%X0@vKSM$PK6n^?#eghzO@9 z6>!9^PR=m03T>0tGwfFH3V%vI>1Sa8&L0=q!fz&^m!*0Yi}7{}Wv84}U7d(O0D$Mi z!BCZPD2*^XK>P#LC!+K;Yt%$8OgxV7{$LXnQEYN8sNP`%lc$g4@1xB|kji>BF%*ob zUk31SsjB06su_r@7;q4e<9s1t>xJBz4B~#(W(6aW!$OE|uZT}2;V=b-!#cJC_I&rX5gU?L5hJFacv z*b1@+wZmPOcs8bYW=hXwYRXCJQB-DPh7oGA!sF>xysIxAV3?7F=;TPS2TAY2bVd>~ z!8Fspnh+6F?H8JX4b2P;DTCS`eye&EbK?d zYooDRVE|2-7b>zh>8(h@-?K7vM=8AKnY7tuhe;$lNyH27e}WIjF&6aTpSoa!y0_ zxHJ-3wvhUrkOG2wGSzn&8s}BgIUNCw$K9y3ap=CgvywRjwNwr?G<+uHeN%BPW_IbN-70zIfwg3d0LiFByM z02~u!Lsw$B{kIGva7c}aAOV>2Vt~IRs&$r&6vD2Htl*8%OLo2)Fj!>-{b>YGH0)zd zWq6R840F5kXb6t`X1%(9BG~@cn|NR7UvIqnW&qBjnCB`!>CDvgl?*q`h*%{6+wXic zF`*h$x;4hR(mxivR2J0g(v}B){!ryRPH$p-T z_7^4!|5a!Vj`au8NFmtrtF47CFaENyrLcK$>+|`wB}WZ`e1da7pmuHdkm7>3Bl-aY zKy&HcuQ0Vyq3(Q)u5B}baTh^ymDOSyD;?CW+zJTeTLXgv9sKIt|Gs-nBfLz0`@ioV zHz!W$cCrZJ3k46?(a)30YLV|69u`+CFnv_6u*k}8F(!gY-DE&fg1A#tXikBJY}Tlm zGt^_uI0lH=J3kzAS|dr9Zd$G{s6?JaE&P^CH|;G@n2q`Fv>ev#d1vgBqyr*Flins5 zCA}G+6=dOl0fL&T3HppA2%4HNE;=6E)pI9XGbgQ7e>-LF!EOGzk%EN{04Gn|2(#IM zYko24f<;|9XQC)B9lvRq$em2VAe($U5Y7VW3~l0=;w*7{?6M!B_Tbqa#{l*Z76N9v z%>@i}Up7=kE068IW9Usxop{=N3vTXX=>iXj*R_t_Se^V(U;YdrW^!h@VZy1u@|3uf z-IdPk)T$b=5Ur~HG&L)`ug#fL%(dl$)Yz}z_Ufey2AKOpY7v~GST zs|?#Zu1seLI?RALZr*Osj%9HDyit|?fx@PTjMJlYtz$=AR%Eb>oH|lEj;q^{sBft& zOgO>jY4Yc(KSD+VLeQJprHp0^Z!i2b`I%KUpK7T`t$3E-JF@)YO<6hTt*l>MK6H8I z>N%4T`m7ZE?scbj8|u@Q+H5Nn7<_sG(i{0Q)Ah!}9oxw%xyX5JvT?!Y4vN~dgY5b#*MI@=sI?lE|s%3;O!I+f9{&gNWz9l0xe z*|Fp?C-kEa?Yscf({NaM#&Gi5Xs#t;q{4Tx8KRzq?8D^@!#0VRAjNP6qb8vXrP*?D^SW7$)<>|Gg;*;$oH!T z8h^7^i=<1iV7XyEv#@=#jPL4cYO^n@g&k3R+qraWV#6Dw^=9U!HGFdJG;pSzszENF z3K-rg$Bx=JZru#tO>&g;YpHE|NBkn_Wv5hMn<-iAH|A4`#)Chy|9^+{|G!zSyJ6$) zBO~=_1bY7ly?@;C=Jq}wBZjbU(j1Et-842V{ih)FR6Y+|hxMq@tOInlpqODu=#`!v zj3X!2X1y4BoFI^EE}Iv_k(aAQ0y8qn5L(WPITZxmq={BK*b{VOHEWRc6N>2!mm}&| z4-IH03PJGOdNnK+!&K;;XDiN$Tcau5VSN_Zs=HjRme@aSRFTSjLWgspYX!EHca#>! z--4A^s*TiMl*N3(&4mw_Ckmay0&q~yAhmjRUtD5@E4-pmj-ur4`vR>+V%v*R4+n80rA0mK+(7k5o`Dc__Z!Tw+z8a6=O zfY%Pgi1$VWOBeLHJFbYG63^_dRL4Ce22*@}`zzXY-)~(KUKItPs!`%0Fm4R(InIIU&KIXm(yG_di+o^vi-d17s1W2SVFeP5dk4jU@^@5?Kzfx4h!yd ztlxr{e)aIFRc_okox^|KCh(!@PNu;sGFeFTu@}6v0RyW^IW4beo0f z%ZlXGmWm9wu;-egPt=;=G~Q~u9;eVlJd1z9i61%Dx_y;9piiBVduF}0EUvlUGNESI{(ih=w3f9v%Xk;o>MP^dACar9{G6}# z^K(hAM3k-C3kD?uW*VbseEfPF-<11ku;<@o%NDRbn>85swdaD-P%O8iy$cPnsAY+O z>k}}N1o7cAR3fk&4JZN{AVv+^6TLa9)S+Hl2*FQ*dxBy4btzsts3 zP?rFuis&a96c)bpnKbI*@Nisgdw@yX69f!_s1C5^V{tjG%WW1%iVt(<7i^Aey4M;| znUVy(;)+%V#7v5SyVn;`VPI^o8Ea0U%MLY-7NZX&6JujhqaGK7-q)T>`qKGLaY8$S zWhzNI9vKDv(K7T3;#NL*P~gqMqf17ilmi?yV}igiff;@enRMw=9ZUtJgfKbBD)@2` zDt$mM9_mTLy~u;~0&#uqHhgQ_{cd|v%&Xzyh50TD{DKKm`CiQXfSH0R{vn7qlThg( z-ukyeu@p^*@EuKwz45Sw$rDu32M*lvs9f%XYsX2oj6UQH)*Yw^yiCi=3D=JrU?~}@ zet%vI-3&QcMrw*0{A}0xZWr0(_R8g{0BT=y0RNxS+ z6OR+|3l2Cknx>I%;wR4B&?gACKKt?oACR5>e5Z!-0DPX3u_^Z#S7iub7@b8hFFtoT zrStTZf4|M#fc~q)!_cLdFB-~?W~E5k(_DRKI-ntK8h)IrtP|3{SdWJ&`T3Wdw-&bi zUqd7LoslUWj&+Z}D_5jfk<06elpC@JM=JZfs6EP> z?U!k{?a#GK+7qG>*E$0mE7*Upu&l(U^aZV>SHZTK#8PH9(9St&TL`amA6 zxeBK-N%}2@CHG_~k(1@ZZ6GaUCNg31I@|K%1|9xN<%R;)b=Z&(?2KQTbZMRrxXC`l zDNWiQnLC-z8W{5!Vl|%CIh0dpgtZRyH+>t(1c*8?-%gpb?fnOqernzqF`Ad&Ks7a< zn_d0%GsK#me{lD%O!?K>yO~-lrg6D@mc#8vzMdnP6gn^FB24(@nHxc`(r5cfp$!}m zG;?VyC%Fr)p??V+=*M@lF8;i^4qFB7r4;0q`#-LHe;L;zXKr>N2M^HF z1z=-vdF^dmcyQ-Sq$teecV;+sW_9uwp6QI~dQ!Ei=pULx3a2vHMa0GFz-P9$<1>$u zwXpc=hP&8Ig^60R6X3yF?8L_{vY*em^r^0uYrED{Q~&$!v6X9oMIn4aWh_F$L)LYl znqoB{4udYaK9BPrEatUn^{}NMf4F+_i}v*u?lVYtL5|Q|&NyFS)C<_{rm`h$`|^k` z>MBx;%RX2i;Vl1c8gqE1j)Jb{*0HZ-%DEmys6DMOA#f$1Y?tktspMx)SBF9tF`{t| ziT{EMquBu~Mb%f}?*w3A%+*r6fT`q^A@;H6nQP$2t~yUtYU;q)SLVK6`siIZ3}>)i zYhO%`fI7g^wMziA0R6%-w!umJq$J>ffsf3g>s#K^$C^e7$q}|!I4swrurwj88N#*A zEbg?Bvhq27QFd>UqL9TAhB(*?pa{uwEck>@m=3QnDkOkxR|9OSx}{)teF-+ZulxxzOcgSz_}sqd z-K5XqDmXhqxF!=xu~C-3>PkfGqAzYs0~Anw6~I#z{tU|#teny<#aJ(I={S)WAL&G1 zv?hW_^-iT!OU=Xkc$<0q**}986NRkYe}DDkFH!Hj4rUA#&>HoR==RH1Kiay_rgNHd za#Txtpy{Cj@x9CD4F{a`lZb&nZ3X+i4!zBpb=pWr_5x&!TUm|!83rs2KxZRHi0Bcy)ss%C zEO>=p-}83x)C)NPM_IS-4O;pjCJVGDoDhGDu|5PtUXWx`QlK%i%A%4+xs8b{V;X`5 zO=%z%VNW0NdrZ(slx3FL2m+hu1tXF8JHy5hdWew7oBJ&g7Zknq$TKfn?Mk6lu9>o^ zA&k&*smFL5+sae$ZP)9Y81>AF%sw`V%D!^!YigUKO1J&U_JCe`4l}%dKq8lA**(QpoTS2x((~vWn$N1bSnK^g%A??t|b`wX(K^u7jcX2E% zN<}F1N*XPg{V5r#eiVF(D?tK2KY_CiN8~1NSBv&3@>e2P6Ru&WY}kiiEjBqdgz6f%bzaKiHnGE{wktvWRs^A z9iiS~z=^ZL!7q&$kM*88R0P{xS4;gtpawnogIm{O58$X&TL03yqpj=bRad6$_4hZ_ zv~hkX`;?$ zNh^W`n6YwM)1`vY$T@<%Sr(VDfHY)Dj1^&}fSw1LKuGAm)c!nm^vwW@>)L?BN8d)b zWr^vi8#8CAnI5Wj=+r}{DICC8FgB4?4KWB44cTX*_AYETs+k#n6AT*)9^R zol}|25;WDs{Ogz#$(0cPoJflJ>fb3xD|EUjba{}~VKr_k+L!kz(L*omxf45d0seEJkz z71TM48Rv@+ZrvesoNi!X)W6MXXYq4EM({?b2xuyKl-lj16#p+iN%i){TvTgIWty`YoCfM5Z+lHgfL))Hv;a4vX zzWDrOQGH*0Xw~<{HLJe37i-gdyWFiOuL-}nu9|SWtMJG*VR4M423v=+ZObz~_?aI3 z-&+rUaSeK~xJ~($VE4v7j2gT$`_an%8>GZMxDEa4r4w!DnM(XjCH`-$5;j8TUt}S=99YUC$zFXu zZKW($%~uM!5@$>xa0G`@6-9!kAgDDo<3;Dct51W*kz1V=YU;|@_ zE*yKzX_q^7H(qIo#1&Ga5QS37d7?K?^)dTLPPR=i#e(%A(i)K96ozhD{=3tK5&AdC@gzViH z|9kD;^$(V%#IyzrOxH2gC9D*X1Y8YTy3DSso)6i zXH+YFV8{-;>L1u`VP8~FoJzcDOi7*h;tIC^pl>JiO@%x+zLd2n1(I#iL3$uG+a(?F z2G~Zl(M*_g7?tc!59fCTPdV}A=pJf<3HvD@GvsE;(^vBcJV#1Yn_N=YHtNcTh=2ak7G3($#@GwHWb z!%2Gyek|;E3(`w42j86XQ~5V4d&xN*8P=7XUOsc9^~J%~mE+{mZTsJ5r}Efaq-T_H>Wiu&#-NG ziWM&JS00_QvAZFRw6I;zIq!f&{p*PJv#=x(x8WsZlasQO&T8WL|ATE%-+hrlvJTN_{?$A31=Xj-&1=^m%|?^t1DNFlrvOil|p7e2xxvty1Lvm>nHc zXO;!O`SOI>jPIFemTe1Dgm-)M%@Y z9f=qd^?)vg5ht;&do(Au8WR|6(nM;KC(;Mt&$ZtDh8D;0btZVNi(<04a&&IxHg!Qt zWA4qF8`*2_RUhR?O`@sd6nEM*VN=6P_VGTfJF6x(V=UaiE-oyRnf=Z&>c#>gc3IUM zmJ+OVoc+)UK=lidfaZb|#SQL4jVgn}tM_E9N)(Ptb8INWW}f=1TvyE~Rbe1VH)A3} zFV3JGkHrlo?}61~TTl@6Vvva_-EY>%6M+}mLh6!kfMZjfx_c&Zd4P|ZzAl@Yg>9*I zwk_K32U6fK!kz?PeCCzen}UdyE@4fOav-nFfJ9BX?SfwZz_IUEFT96LX*onZPpov3bW>I1!A8m4@MR z?$KG#;OXF=E1P^es^i2`QG#V#MNy*&xUWlflTKH#ietx_)#6qT7djI=zvbl_85!3<)g9EHE&;>VSm}_M8hg_b^#i+NRR+eQv1;8G2#}!3 zb4RYPF2W{Fa!iR5U1Pj1s3EHOaO%v_w9&7B8jLlQ1|r=xpxZCBTuFkVcm&NlYb2!) z*TNAYg~YZN2=@)Toq_Hy<SsWDh3>ko$t`&^u#JkNZ)pG5EvV zGX@l!-%Of_uk!pKew!*5FBLw6Ki%QIF1 zm$u&=w&~ouMgM3*f8*O|TZ8_G7h5;p$GdtOWp+eaDuo>_Fag`N=>R}XxQ zpec)R_6E9Lr@ITcY;QC%UKPZ>3CasL5k(UAmGAD_6lx8&W$Q2V5gvcZ+hjzO8jTlp zyFVS*j5l{Itk7LynTM(3bde;4rLj=$wW2my)_A}{f|^h-@yc!`7olKR`=WY-0Ujp+ zyC?V~#2DxsHKBLJ`>An~HQ1&<{1zP4uj7Az|JzN4pjY!Qh)2@E;Ax?*OG9Bot78cBIyEG|avTwUlzgXP#k@FB03!Q#@xc%0)0H{ubI{ZE^Xn`3 zK6`NIBYbh8b?PH%g`-1zVgn#H@;dziyPOW>N|jmq&*iKZ@f68FcMAPi^Q}wb;(vuI z$5pdsjsjJuEtluapH>Gg=O9ly$f|t7$n!Dyh}bq>6Yx!fO%m)+;U_I0y1a7rTq?An zdod#^z=wG&;Pk2O_JdmoAVhuqrqem1?`g;nk!sabrcWWPm|#6#j)c{X0;kI$h_T!{8vSC(0W*7E?UX z&>l?NuM(8vWH0=Bg70%G<)NbzMU?6Sw&rzdb&|r6Iy3bp#U?qW#ucny|H14}2QN{S zP|~T%JBLq|u;c0R9G^xg}Mzb#6ZiIT)7$xNm<%@P#w|5r0 z0#=KL7)4H_j=jGrpQBnCKsq-_pBGCCdPL7IvbXza z#CHxpkpMP%rRpZx)T<3->LGSKFGu3zu2z16|{i$ZfdwQ^4=bq8EE2bv6K;FuVE0YEr7 zmM;aCmnpCcJ}Z0Kp3wTY_1#57dQMC4;%Rzi`MZx%QRaS+oSMm+1fHAtmwAcTL7Q-dqS8wTW-z=lm2QbB zdr?vvO-`4uYljfBM+Se);C!>)5Kcf~E6ABC-aZ3RFc&{toxI7m(K*@HR3r;6q7N0ag`ke{*LFg#9ngi1?~86&}k@%M@H!XcKaFDx1I) z^#_o4N*QICuxdRXiJ?6>21^ZvdShYB#vrUgBBEfRxjThDyxDGP)@R%+?(1&j<5=pV zFLp7kR9fIP&|M0wVOI7cJ+lgTTjP*BH>P#^3h)k(2?>V7EUPTsB*9^h z^K=RtGD`4DtMM`R=LNn0eNdLUe{NoTG+;6uj}vSk55{*r+6P&lUJn@N;z?e2=>zgNVyR?U3yE;MOTb{h#x`A_Xal!P8iU08u-S#Cte#7p$+a!|girREjy! z&Yze;z*Pg{?*!dvasW05TnyAkBP@>6{WV;Bm1-qo*IoiiU=zR?s6fyML5V9zVb)JB zEW44WFdU4tW??njBmL0Bv@fM?bxvv3hhVPzz$SDOiKo;{~gA>+Y>i|h}$e4F+Y zcA2?%W3-v5K9#5!6vHM^Wv(O%hod=BXRsF>2)azWgU{a(f5gTXRp)y03@v~AAtoBT zA6`Cm84Ks;+vN1gZCowP|Cm(PO#0)~HW5Ibfi_Ji?=Q_>llg65rYjX%r*5uZxXquFmZ6*s$tx@sq4Ts` zX343#R@~E-MadjQ-0KnI#F&#S?iyve3PsefL3fclxyKBaLaZ(tZk9nU%b8HA21+MZ zW+zmZ!)67LS%Z-XRze|IH4-e6gbB|}r7u&Vn@Uv1-Dt2*C=1O5^Y3v2xF)=@ejC4? zNa0}3l|l+VX^zc|5fYolM@KMh!0}Yi)KuJ6nu$iLsTrm253sME(7#Dlj`ky$rp-yj zUr}vEX;F$JOD(NONi7_QICm);hBZV&(2m6W2*I&Jhz4U~h;SrQb!3LvGwjxvVCi5I z{u)SkP^eLZ^2L`1)$g*(1-uc}Md!9t3hrY|WyRcTbXd>x=0TM%x1w%e_B7x65d_5Y z{7I~xcDX^m_06=7T|*9o_MlK{Wv;g`%iA2@zn*zBpHMFdgD-8`crBRmCTj|qcBfry z#3C0_roL~6p6x1-DJxEWU~=WV!>g0;a@_gY5s(@@Hz6Ou9!+hJ7M3T26m114myaNa zpT)nNNAvkIj&(-{p3f|QcxmbS9h5$^%U5pWV{>RZ9S635*(#JPrvGh;-4PzN@_2Z z6Bem(MHeY(YuwUQAN+V~`NxGWWbAAI_KM`W6gAgKCoJ3FuEhI)^~>PRJ^!ANi9D}zGULkmX1Eg(Hs)r`=^mu^m}YA^f3u|)&$_)}N8jk#8yqQ%2 z-D5_#Qyn{V90|Ie+8#;JcCJ31g5W5o{>s=;xEE{-gY>(}(vOky52B#IA$w$kZP~gy z3vMi-$Ye*Rj4#fSoz&)5s3bG?JgRD5Y+P?AP5J%b4uLGnXrDWr{L;MRag^5ac~)_z zrl}^{dCa%b=Y4Dblr*%7J*3WginMKw!wlVttK!RrU>-eTNFIa?F=Mo310DTAsOsmZSx1kjwe?WHnt_y+PRGtnnx5 zm3E=hnmQyT%@V;wV)}42?x+tz?{KL&P_KCcRrs(eI&mVq{%mHpkHwhb$2P+Q&X)rhN0#8 z&SBWG0?ZSRf&5|!&C^dx8#UsPv53s6(STZYC2|)BP>&M9gvM&(mwB03FJ@U&y6_8| zH~+!tFW)Z)DT6x-9Za-BWBvvF5Ju?wEQ0_7#Mst77>g_MSV$!W!Y&182lSDWY_P|T zWsF1>Xul^;4^kgubU30i+X(9%`>~iR{LKv7guzB~M3y#ke)2~6=0>C!DBB*Ao<%VW z!F;Qf=@E}b*pXgk8TZ(ck+eybxL1n@mlmAixm9B|b;fcE35d5;M=tTFeutY+iG>_? zS#4@@?;NanJ`k5Qpj#U7H4W&V23)6~t&nJyjX3rsX!$Eg=LEZ4{`e5bq`hnxMxJH$ z4PwTN_E2eul+>ABB!~rhAHWUAtay$cXdJOPX6K_)rpFXV4s51vUeH`{Oxe?csJo-1 zUV<()2PRpJX$T9tv!L7NI4`f}8}$0E8*!)i2C`IP#(EWL#&er>k`AeleO|4)b?non zPaJyNV-aC<`TC*_VH$m7RLD~rs^4mW zsYZua3q2b)0EKNZgHEcCpE2LSDM#~IOdGs<0%I0gO9`xAee8U?h5?wnh>Lm#-?~9WdoV|o+2qA|ewy_TC%?hZ? zP~(9efwO|$8a0@c0w9=#^BRmA#eR(Bfiq%ov^r*o-J|^>pnhc`9A)ge3-Zlrj3&#p z{0pt=+t?0MBZMs-KhWNNV7n7Drr}X8KgR&+{L0mnphY?k>?`L$4uHlt4ytJ;G``{ivjNw+;Y;t12e&b(o!&CC)f>|_ZgtM>Yihj1C@Hckt*%1tA zLsQ#lQ6*{C*@Z=S$Oks)Ml(875$2lG&PVNB3i{ zBBTLR_92u2RrXcOnDzjn8I{RLVKZr=nFx4nqoU2%yW4hHfY~~fRLjkVyo%<0xxQ4J zyZ>4phmP_6>9iTUN5yblPk5se%h!m0!yW@X+1`M9wJc?p9vbSObcbW4iNXJ@3h`pO z|5C|`3DAz#g(%ll{j*=@?o@c1J+_0h&5Pu^2=?rHWzU{nZ}Yhbb_Dq{2BWK06XHu& z(V4L(=-o_gGqn9kfgRWb-h>xHZ=+b=e*$I#fzXVMHqfXyg}cdz$aA+XATvQlD{P+A zTD-S%6G|JGFWv(8A|@$H4znQ3cfY|d#>Qntn1R*FYpr8Pbw(mF6A9?147t^Ff*pN? zwOEtw4I?vC&*wQk zcXf&I^54Gm?S;AiAIWZeaO*m7>h}(Db|<83v=wk<85!ka{PSZncYc2L@F}*ysZ7h~!ggc?ZG+5n&$>f_$Eue(o2`4( zZC;eLWLx%=({ReF$BbO5-(z9bA`lqocqm;%N59eWRD*@aw@&c|v3BVQ~G3wv>BUCdye?0~6>D$gNRafU8M zMH4(hO(TTF-fuWeJ&8ah>$Xn6s;K!G5V6(VkqvKxIzB#b;|9iQZ!f;PJ-?VY3N;zax^OHB<0Ob zFEN)v*53@HI;Cch zam_bCtyN^Pq+3y$U~LR)g`IB&J?&GK79QL>fTkzcyL+F>_RQ&8uC4&rg5dRPJ;Ib- zh>s`DTCG}dByv0I)mk_bQX!7?r__@&)MZxP8uB_jVaZVvmP+8=tw)jSjTuU1fve36 z85QI*0YL}*O6a*A4r468qCsSKO8||yvWB8`gO|-@IpFEeud`r=7{^g2%Ea}cSG){Q z_vuW(B^FynNHLJpCTm_3FpeMkwt~ zF-v1JGKD*=Ax)8907!3!xz~A@Z7X3?#OZUbd*}1?#>#I3fpRujX^IO7%JJadA{0bG z%`$q``_(ma?V$E%P;NLJxcNdwBJd8Lh`7N2^nc4OhK`JH?b@~Hce~$teb?J>>``0& z{|w3(+>08j9L=~vpd)Hw;%-A|s%p_1wv<>Th$7Svfd4 zRQz>RGeDDCS3ebbbrd}D-l$%Q$_$;%CaLlXxddUQZWeX~VWo9Hr4z7F%oK zhoz4`P|0g~NlV_YkK^RW)m2ZXVm+F5RXw>78k*IFIj`Q$$+Qnr3 zBq}z=EGL3NtH54%cB?h(wQ3S2dH9`YUY55~$o#qM0HlBpIb8>mi*GSGUP2ED@WT$< z=2XM9-y|7kzk^^NUtvt(2#9|0S6coR)p$EMkdwv-_r>)_ zGb|5Qq6UKSKqM;f)y^Dq$!QF5s;#q50<98L!5 z6K2MbXB_QBlId2|I22&c;;0_hi=#26K3d>%PKK8i>k3OHfb!>&lje{)IQlBZ#j{42 z0H&Vt5b#uHQsIL79Y}>#EDxIL(xbll5&m1)FlsC927JnACJXNghb`so!qFP$=k$=& zry9I~oNx?n)BB@FSi9(Y+>JXo|%ZJWuAkA6_~@Gh1dQ&t&DVxQRJb5MgGh zOkQdop2bLqU~TWVZeDSr)lx||cA@yEDzlSbM}vJ{ZYF}P&LD2;xm<(UQ&t%-ay)cF zf9lV}0{br`FU*WpX0%RLU+@iVN_@9TG8J82o%6l8*rm$M@g~Z(HNe6rGh-?FSl(me zdD{e+DMoAIe0z*KJbMrcK4vth0pBtBsiHbWLOi2sz9O?c4Jb;PO8T`~~kqDVKXp%%VIYQ@S-+B+VLbbW#gtrmMK&f^GSX zVai`nDZv$p3?bG@1TJ+Ih^Ao`q9s&t`S?^^3F{N-6j$PKw078Z!4ARk6AmLMEmec0 z+7&bNpR?B$tgtJl5Vb_8U?-PPe7E$?r0$rj;{U4PUEN$O6I7;#pSMzUrlud<`3iH# z7uz3ZK*6%5nUAbG4RjGbxOKywke0p}V>rgs84&a}xXQw5N?756}S6`Okaqye;lB0E*$ z32~UUm>g|Sl;k;Nj88NWaN8@sb)2o8=x$Hx9SLea(_ezpge7t=yW(MeEsx{i{@cq1 zgLa<@g`c%hFi!HBM0nDSWqds(f*}FCp$zHja9e;tmPG=0t|Yr9RWmU}^#2UQ)9m^L zSG}Koop_}w*)Q89HWClvEv&~8+uD#9nJh)8(Q0mE^NGm69Dbno!q2V}Pg{DE^D9Tc zK`wJo)=^BHwOQqLqn}yu!xj$?`lHG zy&r=xPAPqd4U+%`re_4$x*R%w`^Xi@YShg!jm|zFhPgwXqdei?3M7mEAY+PIv@-Zl z@{}gpDfNtg%8OCQCe{QLEhU8-s^7awLy-_N`otvKNt+|f(t#lLP;B+y;4e+=p(H4e zfecldtm*{Sj^VB?J79f-Zc8&KR}XxiC-k=R<&XR=jY@z?(bh-Vps@xQ3J&`fv!i5o z@~toYhF$3nWxFTmJ0!MciEY8smli+#Y4Qi17T%rlrgl_e9+El8h&@!!glgcJT*TaLaHd}cvDSqqZR zWGzugeNoqB8@OKREWPZ}MJ79u-`{h1QXcbvSF!QmH8iq=#IWj_k&#wSIsKZKN zBnuM>8F5cBrKmjI4~#%e)aSwlP5^yf#>0t1-y@TpPa>{qUQgGC^W?M=6zZXyt)sUy zY8caTO&8EQ=SZ!l?0B4kJ(^_^w(q3!D4q4m^>+A z2&c)7tQG^Y+>G_~J!MSfzpX+t{!AhHc`GE(qM%PuA<2{Wgy&>LNF^}7MBJ)-1EJXw z&-A&kTiDZUx~?Ji*?xl_GKBn?1FPO^_Yl$5EO)@ehgcmvglzDGyl59Yhud>}iHBX8 z$O<%gurD-fIW)eC5{5>$j$qf+HEh?noh6+l9W2q(LERpiz^U&5m+C-3Kg@ zlEbpFc#<^mOWHOJdcm-i>YpSOhc|fegw&I!cLI@!`&of1#rxt?Gu0l*NFV6WxjcWY ztY2Q*o{Z#yKHXSDSiRLcBFI(|;Z1N5u@mBULa15%GX<>t_K?`9W-5Vq4WN!8$eH!P zbu3oL#;B=4*f6aDql+G_K8)$Op#^|Th?Sb41@ZO}z|F?PYoNY3NxQ5))RW??n;Hr; zMrIQbd6t@}LWj;EW$1Yz?w2KKI|C+m%+vMqLmx-Yu@?%iS%sw+K|7tC&+8B9lzS}H z775Isb#pBQImeS|G-Nw4**b9YrvrzLn&5??`_MHljI*e3Oko?f*>q}hpD8=|s=<7I zMwbm`(Ps+Nc=`Ab%V%$ZH3OaTPB9|!(W_1;9jC`#>aAHii+q{j)4tvIx|J?TJ7y*= zs55*zmmK}ko=7HWL#oR8y!716O3joYWyxp5(%v;%p>iC+|ERm0(J_Is09%K@YMp@Q z8m)VW8SR=a*dr2F@<>)Y!H1RkJGkXiXI!%f_fBqmSS&&tUM_f<0K3Im_!G{&j|;mY zAP|tiwkC4J7j}W7_wb#=-jXowj3P(f!z3JJ2IKCsjac3NM#`ZBn);C0OiW1C3W`=W z5Wj;;}uQB)D%;V=?Pv1DXi=M zn4M`RCqyDOzl5f(88GYAp3q6EYu6TFfvrkl=Vw}{&l!5obXy4jfSmqv+GmybKPxU` zT%y@L8`3&_Q>c2G8?sip0U*j232`nk($Rq3Q9^6$rgaozA~K@tFlWLxmVs=J$vu#T z_RYf#0Sb9#$aIL)ci3N|RSfaaHu%T3Ev9;5_EZc_;x<~gAP}+fif%vyEy+eH>l$Yv zzujY70Z^`pSl+=F<85g_go&}Vf_DmX?%6ZPA@mG-ED)fmJe>Y+!TbO~nU}+f;bhxj zxjG)zw+%LHH49&{Cw=FQFY~z=TT=;mOuFBOs@G=Zp$Oaw9^)OM)| z#=r%KG(F2TH*~C7Zp1*YZH6?-%t&x&TGf3Xj4{g9YHiz~dwPwiTuu-?9%u*Y$b0hX z7ZF!qj47LIXwYLg2;(x6abD-LVc+zRuS0Wk@? zPNUfFf)DCO?9)i%&V)R+s{gJlomsj4+T3!;hfjY@wab>Rvt?$yxY^5R=VSwo_mKmW z_gh1<>vc#YA$MrJJu65rOw7xjJbNm$d);JyvNLn=&p<7AvE7x@@8-4hyd?yX3V(w7 z@wMSK`eWWI1h1{<_BwRWt(zT81JJ5T7IY?o z7@QmECe31z8-u0eFWvc@USfaiuknNLzyx0!ls{V^CzLQ70HR&2bbDpO&@hwc@Gv0R z+8xkI32}zdErxxKPtxMCLnE?<)|KN+7r%wS96!Zer^6}2U1}XU)w*?qA>CCgGqY-m zZP^7f8q$V~awq=W&(yX^zTtLLlheyz+-@yEtFxtJ@3l@`q78X)`y_>tS7z_FHRG;f zYeH}J(~M9iR*o-n$2GgrJpGolDkc}vO?ldBQ1}!vE$#%gE^I5>->8Rn2O{7z5OA?u z#QANQ?AryJLEDbwvbvBmRSvbwTzI-fN>~X;{6WP>--#<~P@1balFjfR2uBt}8LowN zp_uwT;jH{US`DX-V5?&8Y&#pdWDRPfJ(1^a0<4wXSbTmwTz)v2^ z7ySyigXh3YSMKGa`7S`3Qxjhzh$P)PMfxUtv<)rY&Pj8KeanFoPU22!siZrX6-T4u zUTYZaJXdT~w8o>y!*m)BkdLyfr4%P&XRa#)VULW(4Qi?>l$qgXqiIyU>uvD5*k9T8#-6u!y%zlb ztzB=w86c?pqG4eI`S*fPfg)^uLF?F8NU;b~?8JXn515S7+Kgi`FIjqEL`7a$y8b2J zhO_9Jocw8OhCK%M6;Yp}>`aV;EudEc8~6$J=gKE4uN!ru`3JX7J-Bz@M5Ll6wr(6* z`ZQy$Ldd`mKP9iI7!aOhIfEwaC&w`#b8Z{NaMWAUAd zN|YO?GAoh^ajo|AFmavcoUp`myPd_wM%W;av0&`|*zGS0OOS?9ifU1%l)xG>#Vrcq zQYv2ZT3l)FcZTCGRP|;B8=tcqv=NU*X?PLE6rz!=4u=L66l+4aYTzGP7GPR>^1(o> zd#ivx=;eRz+tTL>ITDc`6NBa5G1-I|ZX;goMTbVXW`mpr;U}jK zp;&}o>8-n}P9k_VeG1ZTR>5XTdiLW(U{xNOy4Z6R7!b#n<^|Q({8TrV}3s zL##w?eIYWSNSB=Y7aqJEj7V*UkP@v=W?A~F*f?6!a)TDvLiOtOtX@JN zIH%Zp@BN=9-v@csY2V~L&y#aa?~f9+?ht5+8(Tb`xy4q)p{3btGI!uhqeT#>1_(l2 zI{jXUYON}^k&hLpiAxshP4%U6^~YTn~<-r{(i zt;+oD=FA3coxVnkYEPlMK`t1s#@+8*$G&4ua_qa+3-1Ab;pE?13&#v^*|gE#xm~?u z>+tsve*8d2CFP2YS<$|kj94sGPlveoT`2lAd)Bimot>TVFn9Oi^RHi#wYiYM1-aM0 z;?-^);^vq#wYpxd)wDWgm}bLt1F98$PsKlh_CrdV&68(MSw(?hr9cIfGad^@{C8@~ z*L@xl9(~IecAK%1J`7zSKY;+5G8{X(_yiKI#jFajpX=|RP=(y=mdH9)p<=qsPw1Lu z@H|v7C>Eo^o&c{7%QnGaqNLFFq4w7uB!Wp3Fl+)~71eQSWFG|t8LJ!|kU50)iD^^8 zSqM#rF*T@c9-i0;g)$pK)g6xayOoR4NI@0SyuRzzw_n>~D#SiM^UQGs2sK|0056;CaX|G z{?AM#WRf&;_s*ksc@}LS%0>M_!WTg8SL?>oZ*r?o95F#K#ke-NxJoSYlmY~;^MgbaC zX91DPKUGWr>U&B|7%}<1QS=mu(!BtD?~$W|i6Z=oYX#UMlYBQUjtjw`5F~?ms*tY~ zNvIA78!JN1+8CrfI#H#F)dq-#;bGpeMfN96cI^sSi+KmzQ=bpZ;t#X31yPfLgu;}Y z(){RJ1i|um*U_@h6a-!#X#C`o1V=Ie$TQd-;;m!3z`^tF6WN!K|9}zuIdQk;t{9$s z%kRE)VG2U>$k8dQVUc)*`h~=TF&+MR*$jU|hsi^BfP1~gwB^(U&pq|g^2x7>-(a@0 zN>Y>TA$w>kjGsaq$iz~?D;vBaac6+Mx-fjUYs4B!+C`xAQqXHM9Q9BEf2;UTpVq99 z6J)$(@v1&7E`tg~?P|z)51%UhSx+%8iA_XoC>`eP^IKXr-pnE`E8vVoVHW3GpP*jk zA|2nemndGtxp#gq-x32q89r8fEo)C6pRAFR#sE?B#D_2}N{;*zOCk3D_qdg*WMmn` ziN`r|0f%GSJkoZP)|xXKEUOUg2*qUdQH?>%6wF^sYSju(253xXu{DJH71r%>eCJFa zu_&srAnnP(Gl4q!!8dolI#{tvQB+*b7BnbK^PHzlGL81v%CXS#02453q=cHWiwuZL zoNq9Xz7+5S2?a414$#+fRUNfd*U3Q;n%zSuqF~cxgK)FJ7xii_a z)*X;?ZR|p(jDt(Zf6}3brP&Khx6i5k9Qp=1GF#W*L#{9fkpYmrHw;bH&C<(%z0s=t z=w0yvaw^*HP+!ij6)xy@^``P8w_i(8yhB6I?0e7QmCvw-oUH0g^A5@}o zN`CJbe{CS)#XP-e-Ia<0^`@3fV&jOqVkBa zVMLm&;c$~^%jJd_DM4-6IG1jO5k*c(va}8#M3HeGOesk1{(*pimcP5Obo@T?!Jt>& zdEceRrn`dsdq#5DCTDHRXaS7f7jzVX=2ZS0iNHLxhgR@8OqM+;Ey^DVeAx1Sx|pj9 z1^5bl(bu>NOlEj}A$8*S!N>I7$2fE4S3M(xgIqV2g**HRWg=b)1fYl-P+r+jIWcP$ zi7?#DI6}7qQ4797OC)kF-)@pId5>cQ$ zm*c%qgA9s0Vnt#oV+>%PQmEjJ_?joiE^cUgiwSNw$E{ip<%F>G7AzjfWM2o|a00adS+e3TjtWGM`Lo3hsBs z!A9kBo>Ov!kfBNPWpR!W`Pm|8NwjMUIi0?Pj--%6#Jxl2Rkgo9rMgg90>}!aterBR zn1-6mZ}a#y*U+FKM>Q3cj4pVCdLi+a^wVq|t;3S2ZhyZfZwK189@T{2CS$9HJH*s| z;aY~Z8u;lSrK;(HH@tJsC348SY^SAl)T8olluF21yBZ|SV>5Z)5NUtK>v9G1gbshz zF~M$ant{dQ)LJdllGaXw`EAjox;L`H1&AXj6T+~u`h%!2QfT`f!I@uvers+OgvljE z9}Z2JT$$H^5s2?JrB{u>7to6CNAg7XjzuPniK_kaLUkU3h$Q~@F)=Ox zueHXcsZ@O=nETtHFun|58tj57mGvx_ZM33>3M&JW)u3B`z_P=i75EK zTJNsyeA^QxlyE-R*86vVn*0Xq{LiB;K1~n%?DBhPGB}7F)L9-=j!#Xtj*0D_<80Ve zZ9%TwtH)_~4+%35yrYawVPv$Y3f0kX|htg(W%(T`mJPAxC z22vM0db)cn-h%soY$p78Rnjx}))920w=H-WVWA2g;kDhb+j+v04ZxxPkCYD%)4dyEvKRZ0 zVpcbo6~fP)${Q%`DMRQ{acOSi7dE7QjIRO1hfk8MhHiX7DZErML2$Dz9ex*4E$3CX zr2)1@EeoiH!hI}?SwtL8KC$3`S;;WJ^wH6!&+l^9 z$|E@TbxN#4PuY(g2*KJMO0Rk=N~+Cz5h?-3pfa?(Br9;QB-LSxGmnA_T6e}vcea$t zSVDUpF>@r|t|$^Rak%k$1Xrda0x{TFK}}nRHGyrK@CIhehl)X}E@Q;k>;#SMS{9Pz z6ejr*b+cpK{*=)84xZ+|?2ux2iCK`w-?Gx1RzLl0`S=f5VQ5vdveF@orm%6%8H2p2 z&x{(1BS2<0gC|#!?u>EphMUuu4f$A;u4;9ph{B)ok0%7^VN<8Z@_?*Z`ca(N$x}jR zrt1C5g0t$tHREe&I*ej8=qk-IL1o2&FMyD}ZUN$^W(7YQl{UcyxFmkuFb%njNgt;YZ%s^}C&!MLLjx3m(LckFY35>=@DC+R6vE<}V*8tf?X=O`Q45 zaRlk8SLIhU|4Ub^qJ9uDfrPqyvB??9H({Duh}V+Fp=j2e4Ec^Z;fCktQi?y#5(~^i zVbQ;3bL%=qt7T~aIMq}HP?~y0_RjDa&@{r**&FyF&CAUz8F=5cM1bP_s3QI}`H?;E z3uZo(!lJRCv803bLj^2D#YXBnF1`EJ>gU&2?tO-;C!olfbwyanev-Dqdd*S*-qUzk zW<8O8JF)JcucALNY*qvP-0o@6RpF9-XcsA=MFWi+)joDf0KT9~eKmou>bZw;tJz!%nTo$f6B@Pc26Y5M!5?`^%cqXWJWJM zI~FxS!A!R%%ApqG!7o@DqEKgXO*ZMd4||)1@cLL4tpxX`@aObGpN!6xo`<1!p)R6- z6YdM+GHgZQcC7@=htX;hVV)pJLFmsKP}mWmNeY?GVZl`;jL(4fg*+_E-Ype^SHKVf z)AWsMWkCPJ1NIJY8=XA~Yz_Qf1LJWil0Z$oJVYjr-6ZgQBC#!1Wv8o2lhk=duyM6d zsw<}D0B_f=4;(l;%bE8fNPT1a!JUPrgWt5K&;9Sa$E=(=_{njnh6*7p-k1J4GVMF( zNvKbxd7he=zIBGpZ~6oeQY)?FP#`Q*v!$t~My0(yl-a&wjlzw&)?O1#2oz_I=PL{>L4Y+ec8PK!D+x4imDCW*k8v$bzbbx#MtD7T>Ky`%sW+#c7kL4&3cxM=StZuEe9dw`!9D2`N&%5n{S zVlR+jt6JMqoyV>Q8@g?1Oc`l>F-*oHV2NcMXy(z@Qr;H&|^y=$YuS#TQ zd`OwoS%3_wW*MozomTnIj6yxLLJU}zBkUim@}wJD(S{TaWLFX8CxmrHtdS>F;Cs35 zN?|9)kYWgFv`oPs3Yc7>`;Id7p^up~E65-!f<3t&j3nw3|B%T3NDgYx)8x~^O)~Bu z;aq7bt=8%Ds5M#GU$(l#7fkg&Pd(N}Z_RXjWFP4SFB^N?u8nbiLgB8ODH`F^tVd(w zbm6NMLI`@Pd}cV9s5U)zLnTUN=L7}RCPW(iDl9|q#)&}AzmH{CKAONTfNhzbqgl>L zo${V6?l{eMIYdE^o4h0F1;(YanjskF1PrD$&zd@fD$xb}`Mg?9;N|&Ha=p0j1VTsk zXy^keM4WXBYmnM$F?y>@KK-dtGLE{`iwo7@PO zLub6}-?vfWv-nz9ih?l6hRfjy7-pM;URJF83?tO2aguGrhEhm|)QvzId~EAMoo-^& zJzYZC452?rIM*diU7Zo}`vih(;cx@nMDw7{n&7{sNP|RSYbRnnRhmfKerBX8WApB? zY+c9(wYuu(++VpdfXtf%s)?YPA+~kxr>PsDif#^6A7fBQEOV{9CT?tfz9Pxq5& zp04b073PDAKPsOI!LWHduwuh|uW|rxQsgBQ>=~td=)o|pL=Yzr>l5;O2v?2SbBLCJ z9Z}F2Nd*@Se7T(!mCYw}H!w$&84vnblm5(h%7dk7-(W!;3wr$hE#gtSLW5t=Tgik~ zzSU;QF#a%EQsO1?H*%4pB>|}zgty>6A%ng2l?_!?iF<>zm!^RHj3y2GF7g_3&7?a^Zd{J+) zG&})an%H0sdP(`=|M}rUunUqr_l4!SMCd0??1!RHQ8I&EN#{Q0l}TJ&ZE>U@UV?CD z8>&Ec!2${)DznJSYyV3KSk*d$S_dxx^{_|%>FTzMk*D1|sG$_F`)GdyHdX#ev!AK! zv>T5;?j*mJJM1K1NJpLAl|1>NllG9lWBB~F7^k_7MPY?&$WqbT^ztK0W%e|6_uzZpahD=0zi0{p$uh^YNjMfPD5a=IKBCvcMm`5RFG6+&)@ z^|XyhY1(+q0V(yNHOHf}$@sB`qdFbGYVC8v=xwnmH`p^-%qdqfCfzCa(COCu-?S;` z!}FO#bf3Fmmq5nftSqfqSUPyP_4!Tsa$EXwcwFbyxyPI2M3XDqiYM%B`VX8Klz(v9b`Ph+my;zhom-LZ@7ks{L=iGyrSt7jC+{S;YZxheG)7X}5 z-d5bY^-24?o%t5_Micc%WF2pKw1m1T33zg@YfQ;T)t~UU6H3aF?JX+|gjn{h+RBX3 z2DAJ;ObeKv7%18w6`MM}FCO*{hti*{J*ZiY8U?u*MoF1lQawdI(B@DG-EbP$<+~gP z>2Ap2`7_MGQ&Wb_cFYj>u;~p-uzFt0%jIAu{BQE2!&qU1Vy(I7j5uiaTG8q$;t?jagoJ|^;jUr7Nl&#zHE8sGG|))&4qzi<{63Gi1$$5C~LQ+KbHKRXOSS! z;eY4sGa^dErXQ)89kVsQd|) zfXbTTqeg0=>CT>)DE_LtU%XCzUA~8}TOM51c2{bJ8@#MRUDd_ab0=FfC#7@e3p69= z7_VQWFfM2hu~>)#LlZl|)4<0vS=;*Noik|^m{cCGhLuDoQ_?Jdm%!i7*sd!=-zSiHQ0{qfZX^?-P_54SXAgT@+0}-a z|45XP2rdHJ&sL1%F#`uY0NLZAfJjA>j<)n$zCk9L7)!4)nFfreMno{>Bug|2!K*T5 zsA;$>As7{GR4;DqC+g*DUxko?B+fSw?hJrS_HzArpLxUJb}_|62{(RQ%mz`@onOa^ zp0JtpDt;(F26;sj0TjDpHI;rxVUt4*Fg4!Ic7K`|Vfpku-5H5AVizD;Oco6tE;47uhb6Aa|<|m78!84Gnu&I z0ORh1<#dou+T2g$&TXZnGQMkoHX{U&fsS9-B&-OSuWthMKTwBGhH%N@A3TgSXhNB{ zh9PQxOO681hxHrJbrzlXJ5H(;T5R30!}#ab;qtZS2t=zb4K<-rD1|%>buBSij(Z(~P2ey;2P}^UvZcRDp{9 zkB2ApN1S0hQVcs#;RrY4_!|*}rKk-=ssQG+^SaPW6UyBW02csLU1~hEO4iJg!L4( z*<&cc7$e{TfZ+noHe~rc@!GgjEH}|!1kkXsKGKBT^`sE|7IN|f<>$nqj2N{ECW`Tc z8s^dxNRpWNkYE|c?CDJ%<1jaagg{Yc-i3RGYW;Sl5tnI8)ffN@UTGNb_L!~T%2n}2 zIV;54WL$c)EjsJ{JS2O4!;&E|@Dt)wrE0OM)A;3u6Ppy3hr7Sjk_d9%Y7#XkP|h2- z+Rgk0q!8<2C+nUt;0a0ZAT^q~k0Io9t$XLaw_8tC&fU1b3PZpzx1_n z~mzH92i!$%m9fb1Dz!`A&EYvcH z9eZyc-N9G0`~fR-_m?i+$?EKy^=X*_FyFc)e)Sc+3ueJJuVN@p4R`ei{KUz$-+cMf zSLl@wyWm+16Ztj#+-D5?XI!6^qjM{_=h3n8(aQZBshW&7GU!p~O5lW^NUd*} z@@=s5&Ex26xJY~8LKHdcN{3h*Cx*?$^yYJPyLYjkiV)Ck8B=kbp5-8;}_b?=jD zqAm~oi6rD(1v!|VUuEA~#nFy+pY#Mv-b(2bny_9fBhL3Q#8NPfnf51xkB;kjfnw5- zJ9|d)5wRHw=ii&Pz+!$#XkzrZ9#qFG?g!Gt=_Egi`2)pA`M{7rkZINDO|I%qKevi{ z+jx?}1*8br#@T@pBrMqE{OY+cFv}Sm@*SA;s_%lY0tWAOtSdf^Z2WkeBNl=}MBi3o4(i z@u*<^W(D28<6#P{RGt-D25@U6co*QmQ*=f;ib2VBK^DZgN^DSPXpY`@bll$ zzqN)89G>mkBvn}lgA5E+o0Sr+sZ>Qc03MUv+gNr2X|vWqZV5{`lr-u>_Fym_N+&2r_=7pruag>ZTMjh+7%06-r^RS#yS7`aqV%^(*2J85B9ntO^C z@{eD%?w;YzATe^Gu9$B*L%}6$kK@)S8iSodgYe)br?oM zCqB)$xLB?3jn}Dgy<%d#Ls7PnIcOq=fT1uFI5HO znjn8NcL9cUOn4ugreG3e2_lAEbLYvlRG&vjQSY!$Def1f0I8N*Gj9w)SAc2Sg z@ii+79#X1U)nWZ$?A8-%;Nl^uzl_Tzu`bo6dI+=c_KFRFnPLm^-aeXktsaTx?n|cx z73&K>CJKj z`DO+wGIu_DaO+)D$!sm&6U-TSyCM_{Tp9mduzMrOB0ynbbABo5Xmbc@@TE~?t>FM9 z@ckJXSvW5taCAOw&}-rm8`Q}EQq;#|9Q;7aokOnIhLV;50Pq8yDmXc9cY(1!-e>Y8 z!M$3yuUgr+S}7-o#0SdgUzz!G^}>}jK!55<71LUj6e(sdDH3#6>4f4BLLX=gl~=55 z%EIt>PU-k5^mot5>_xvz#Y-BVTA2CO$!iR8%!&Mr7}_2I$52Mv)!u*)MOCfhaY%z< za*Ak2etzA%6;!IiZXSOJSaGthin=s&u}P%ol+dy^aPy;v%*D;FDc{XjI96hUKoU%` z`)<4%4aHAB`YJjQtS8Zxc!ZpVX-(H#c+G`gxjK|RnLNC=K?DjeFGLe|O?ev|S}sUe z;D?-D{z!80pc5df1rVokIx&IN?=i6KD6B+KhjB?wu@GP-5f)tv!P}4cS@0S00KOJ$ z3Aj0x@dK1Y4+UE{!~bL&9TaDBI#j)C01@FtVlV#6kkKnBU0SIVm4=#Nm>G}SpL_!% zDP_#AciWcPdF;>>3lbQya8f7{afx7CU<1bS9*HgJ$6KU!CwoHyWTr7H{xLEtwxS=l z!naxGeT0|9uHm!lReCpXPN8lV4-L<5$mEan*!HaCp*y3=+@;oyDMl;zciEchDsvFo z^Q;olR%cFV?W?~6GuwI$`Y<I;n8(~KuwgIV_v^CWobbL5j+UOd#g_*dYPS0|TlPU+@mAn?zmcERHkFjb^B`|qa} z*lP&bN$LgXqohvx8~H2Gp{#FBL0l4db6w=`@2btZY~>@}SwiLB7nd+m^mmv~9Dx}f zQ}Bp?M@n$O*-#3san*<^gDm z7ZgkE9Kw0tXypQ$1;x@XI}Nm+od z?$Am14zZk9?|AO4)O&I`_7GxbG1UOp!>FCc>1tV;o#M>0z~*oV=wmA9(|&V7vAzel zCw-HL|T3>w~g9R*e!iWJzJrh`BjeXw~$V_Quag0l!T%u;IE64x(6L@z4j$!rFFN|VSQ*3MAGOzYT{rE}LMtu0WIWak6ZknbwZo~N>?x9KHdE%ARvC0mU#wG5)h!0AjM zI4lDsZ~@DS@o^vD@(y~(%(@ABQN5fGHi>0z>I-BY7}9TVSRM~268>Ew=>B8+;C0zf z(7OqpQk&2}wW(H*1`ywE6M`O1UgJsZLA^lSG%T$m9B%m{XhHhDwam;Vr2|tqv^8V1 z@74hSdUD>RmJ~rQvZs)TxMlo`lg;ES7GWoiYR&g)FQc@(RB zjIQ=zo>&?IB+AdCnm=VNT27e`X}e~8Mq=eoS8K$6j#5v=jf9g0FZqPvqK$fJ@DyfN zR>qD#05rQneGTit&xV_I%G^+|bAmHoP-BFhGM!UT1UH@L0U=L(72M!D@zhjVF|Yx( zP_DYWDY05;>zElOeE{{E<7j@|iE3XO^mB?7PJm|nUZ#zoOrk~>rzRvqlQSY?y(9g~ zem8G^Hul=Tz4Fd0zkg%*JKO)X{jD9_9JOF3-SWijoMF27h~(HNpb}{1&(zY{ir@I# zsjPut;39Ut@w=VBe+L>Ex~uS3I`ZYBX*Xm-gUrBBd6WWAaq1dp`meio{o$QG|NbV- z)6asHoiBN+xc{4oox6UmtT$F5_v&&;FhBi9Cu0q1(p{Fa?&=^xxcm*`^rETWX9uGL}1;m|^} zXo(01DqBi~>{FH!NRgDI&h+^GrT+aVkre<9FyR^Gwi(II7_V9`4J3_;a%6ZWny3o7 zuQH`pqH*_y9?KC~TBC$~ZP)MLd2PoZcf7VO?WQ0%!q=E(H?Ozba(z@sf^xJE3Z~Zd z`8T$|?&uK8z+<rhn&xG>?`#8IMTum)tW6W>?iXHk7@s1 z)j**Dr)&SV%~eFL4ngIN-`YC{!SPh-9W>Rf*SV`}_8nBZE8{hS4WcrO49ylr6JkXu zb`JUMKne}>()h#=`gMe57ZuJ_e_^n;L_WW-5JFoA0`;9#y zQp{E(GG&mXb7roH5iT=~UB5n#>Ymt890swVG4lIx6Ml31o_|eUG(?Po&kQF8oB<>@ zG79;e)qx^&od{rV=}>}lmyRFceh)^+FBFL4Djo&(N?*cxhCH%%HXwXy*>~K zvLun{`_@9xJMP%bPH2dgBN_wB(*;#QUfwtou6q!}iLDq>G4n7aX!i$P4{I-hJ{dOF zcy7DjlDxT%JBW+DeC$)2s3~WI>Gj~{_t=S))p|Sv@vp8qzu!-g-@m=P5mriJy%bcN zjasvzOM*${#whJZuzi$ZUqekP`O*Ujc2>n&SvXO8sULGK*nwRPYXFE*VhkiT0NQ5a z=h#p|7V0MUsEw-r2~9LR?BF>5Pm-iqn!T`e`&{ej?beBlK>oBACFtR%faqV4kv2c$ zr%~|ALV2DVF5}%au8Yx`$sjKOuv2I3Nzdb|4j_N~8W(xY4v286%!B)%3g%${YB3km z#iNa}d*#973$^d5qHB%1Dk+a(Tp{Q_R3rDrVTP0=5!GY&?NBXr4V6}ZWDJY+mEW@` zRTw7oi$m$L~uavR}ZDxSDxsx>r!L@C*|lQb)vvYexTn&0A1+P@|$k_ zzGwvy`ju>D5G;Vs?__II+e`IZ-UviRBU=?x4#D9Ntpxoz+5>HY0K2U?2S9sUEkM z&R(o(=K@(sO}r5F?qQK6e$!(of0rWYFG2WT%*@Gh!ugWCfyT{-A=D=^yi(;6o(Win zxNb}!H{E`t$0-uhjtzV5JE3|bsVX8Et&S^=M>)C;Wi&}?qkfukoZW^mTlPy*rkiw_ zTLT%6Sf!i#9U`{zVlU1zWNhb!p2lWPOSEc!F89Tf;ekBqtiHJ7LWZ?JqiXIks&YZ0 zdU>JDF`eRw?&+#Z_7!@8ImqU$K|V0^!D&)X-<-wP3XaU2_kG22YFxld{i~+` zLcTTM`tj!KB@2>s`S=eMM|G@T2KcmMk`L~k+~%+%n2C~?mfvw(CpOe(Qr$UZj3!Dd z;Ah*PyjujZ*rB-8-G)WQkJ82|4AH9%1LHVXKR=8>bAHbg`Nj|w_=^Ykr-+8qL!+D4 z@$K?_EcWD`mj&LHIwETv_Q1~Pv8~fI+s(I(+yWA6GoHK8I&T$OD#Vx6#P z%0dH5BD1+>qXD4lkgHfNLwirz@sr)4wQeCN7GOkuEv9~yFf|gH8EC`wAh@|V3{YWb zP^Z!Y?ZhiZT|Zmm!99PX#A9kx!xj-W8%#)^LQD3CK!Xa|oFZVDV+}!p=z(D+t~JZP z+FaIOX((YOKu!%L%VK*)=-@;U|53^EfCaB3nY!JU!J&aGiW6F>-70aoOmJC7if_;x zLT_30FgT;}O{mqYwQvNd-p37aWp_-l0Gf>|q}HL46BNr)2#|KonlsjTx;t+&+H3&e z)p(`rTbAuobbQ#pb{Lpfqdj&`$sb+7T=y%5hN1m{3rioI!m>kE$k4X5$dq2)91pB<2(% zuPlN%p2~=xMwRDF&UOLk3Qh};gOIjYj?T4Cp2ZH`^HPbpi!ApGeCzzrU#dP`Owq6s zha0Jcf1E2As)`i?E9y76CmDV5zG~wgxFtERyelWCAKX4-^m?9AcUh0hC9$ct(rvlI z&t8H83ob?be%7RdUKZ}0UYTI&M?NWlJ#g_Xnw2)R)o%yGQe9J>?FwFgIo&WFv2L36 zS~by0A~MGuB8N!=pu%GDwJOPVDu;1Kf&RDLlek)+NX7NdzNhG4qnWu10`>O+HG-r+ zz+5I4s8zx7tcgPyOb?_df^eZQ>wS^GN$WrT-*U&?XpY*p|Ht$ZIj<{^k@gQN1wihi zIK$3NpyRn^ z+p(CAi}wNcN7y2~V}Xl5ma%0dSv@H~NXBfls~891zc`iO3*bNdaB=DMw{C|E&dJF) zESD@fd*E71Vz#P3Xg+$i-9j9JTE2J-^0V1spIy%a^v5F&&=4O0)&A+S#uYM3rZH}s zQOz3RwZvm%Q7H}^5oS6dv&RLd`xZJG$CbFzy;-3WthE+7y>#ms#0w$lJ|)3rZ90Z; zA)2*uyO%G1+tHLy6;N?=F@xx5e%@sG6sjZ!L8a<&k-VsaOp0W45Tq%#?Ez6sh||R1 z;2g^OctTnNy3^|3w?u@N;)I&k9*NTHxWUQa-tIOt65P&KP(lq+tCz?7TBjRUl9vY6kF^?JNMRCaND`H&MV63}QfS2C#pX28?S`F2 zTr}l)Z)D77tkT$KB|vW3YD{VkqSE7_0sXi`Z5&qLaa2f`vgH$!DaO^N_&qbL6{_)C z_dg+#>nUExPO_9T}r>zbyTWnTGO{%$Bs(;+)Hjzpp3q88K2?O!=Fq8;`HP_ zsgR$L=(^5hi|OU$jjw44eqBTB)W)U`-JJ7c4&qL$^Ae@RS;tIAH>hcvwK+o-^;NJe zxv4%dV~jt4&A%oj#=z4jx4KdMg(O;2L?FvyY#Q$KdG+w0w>J>;E}jepc!E5Tg#{BT zQNBGS{fU3M$GbZcqN*4}_nKi^^h@$@jLg9x3BOiV$1e@aA0fPl@vJ*>@zB0%xzZf_ z^_G_g^*_V_<_9TE2L^zF7SS~s8o4VLmL77$>l~txf^7BUi$>eY#-=^F8r((Mj9lI7Hy<>__3VwE^Sk@J(!2#+9>7q0;O3T#sGPA}Am7huFK7>ECjh#`_R@~mhpu>Q2!<$Nz) z6A0v5t(WKvknSi_Tv``lxQmOB5B9~yI#fl_8980R zY9HJ=hcyE-BY$!c+$Zedfl^N8Kyu{J%GHx7LQF}Mj;zk>!bK2Q$2jJstKa-{^5|He+Xa=k&2m^sxo55XV_B=1N%W6q+CLYf0;CBj1An5#1$w|k5!h?% zL_DM|bU{L|{anezn>X^fX@dehC}g=6F=4=_8~_mgjWOJV-O#*U4`o)ive7yyAC$1{ zjO0@XI4VV0)v`|kCTJv#6F@y}Qi#&3bp_hS5(+?#m`UCSj)9#B+nLx~$39*9%QOxTR6Qn#-%9BtJ~Pepods>Q&fG!w%{2Vi zD1<}234ds%+nxQn+}3qvCj7hwA+POOkh3c*f=+~Y?mA$*dK#E^-lfk5pwTtaJ5QMiU4FZ9ofMIIX2nkOH)CG0+MyPrk5l8DWD;ZsEUk*nwyi}>m zoiIn5AvD5_DAlVc6B?L;4^aiqL-mf@8`UcS@)t;akfw>|&p1XfMWJlzIue8Sv)Xhk zKfVu)6udpEsQjnN6X+{F@#m?omps^i8k$& zlN~>wStO{S`+k}t@qda?GQ2CAoR)d`oCT`TjUL?pbY=FgSu&{MMHM(89h6(i=wLl$ z!NIO~VA2drzQ!JZ2s|1J(QqWXYl-a}y$!$tb-gzQ5v zeY%8$0|PZ{;zfxl1J_erpS|Ho6pT}ci5h^Y_nXzXR!~v{iXo;T#bdHu@{-{ zJw2nL6XB+otTHcK7w*NR)lCKQ;wDU+geIqb+)If78l5*lL6pm@%13^~4x8V|Tdc3J zjq&BwkuuzaU8T~t!-0;0*N66a+So(wN zJ^)rK$+)!q+E6qa?u)B+mRgFW`963;C%{pl`7ulezTd3lqL5|f?mF!6u^b-qPe+H_@#KDSZ*fqK5>D_ z=NF2x#=+#I+?cT_tR$F3XALCo!VuKaBDf=nJvZAV*c`kJNPCc=zeW5NAM6jd1}{6f zZ^PC8;5qRCw7Q3fpBH}@I%uUoctQLPK`Hx#7sX$T^%x;3`h#CMgM{U%-XLlAOYz`v z*a*u7sX|Lu(odWQ_lS9e?bsCi`9jc(AC#CFVy{tl;tvzb+!+#l099BLoVNYtD|x?8 zjnu3>ZFQ;B%9?xY7wMdI*GXu(_ANDD@^^JRdjosqO}B2G=6t=$J3>&jj+|dT`#o0r z97P59AU7F3bh`EaH*NacrPEb1&vwn{={>{DR(KZoa@2Su(wgFGi~58E6R!g0=?TfQ z02mZq%bih5{rYO&ORYN?j8pG3DtQTdA>9hm7fGiIDVvag3vK`#>@RAJSL=K6&ew+_ zJzJ>r;wkhX&`W)ov>TSo@*dESH`zD90e-b1Y3b$&V-Zig6WR9~CD%6O-P9p8J;m-g)S5l!ZnJWbhz=#lyi%TvRl8;O3ls}a3EB6Eq z9I%v%r)Hm%iA4Od4m-U&VjE3uE+91H*9!nY3MFw8f7Z|fgoKMLs6X4^G*mECe^Gj= z)p*c2N8}m!Rck!KZQ^p=nBeB({hS_Jt&p2%TTlw4v8v$x5CSQ0=0CUapIhxbCj8lR z{JZD*&lj9Of6*l=@vOncvI_U!=x&hKuhGlWagzeA9%~eL33SPl>4F4>R7sWC;6Y7h zL2sQBatiu@{X!k~F5iB=DEEyz-U=E1F|w_bPe)d`>3rGVY*f)KfKw$fDB}LP+%LqG zLN$i8#FA#MRu%sq3+sE~4skbDg|niGTxUItK?baVI3)0cG6?x|vWbKIz*sn;iduzX z2#&%=wOZDqm5M_F*0>H2MEeDUs9=AXY8hrEdsIs|XG!c{JsxV}@V?Y(b8pi25vgd_ zGoS@tOa%gGS3f_pe0I)2|IBir5N?P2rA2az9y}xg5vP|ge!KMUS0=@i=R(&mk}-Jj zgP#t5g(6h-bg))72ffwdVS*apBK}_K>#`7P>WrVH%%)-*JSMwYw!`E$_aa@L?Za-~ zTj*ck^aYQeJw5EXm!fhwu}&$*;{o=!1nnw}g+UMlfC{uLOZvQZ|EbJk$-NwW6{>xQ zuJN9Vz0L$+9z9iH9+;%ImhGMdBDsg>IS-@)m-aNeEDr^}%QI*Cg4VsmRGiV7fSx1) zAopLN@-gkeVXTB80U2f;dcszt;sR;>8~}euS0;q<^n2*mfJR5#+1Eor`{e2g-OQE< z_Dn_>I@3%J!86^u@-aFvrrKmI(g;FCfjw~ZHsnZI1@1@K3(~pwe4rd5$aBCKvUL6$ z0Ce*tpDJ1tDqq~F)(g!_GAbDNy3pHB%1!;Rs9yB~RLF=iegu1Okx%pFc`jQ=YI zyA$;CBlTtlYux}HP~lBGqhSGDUm=aq6TGth&3AVH`|fwPzxw*lH=yTDI7AAyAa9O@ zxzze9#{|Ssn{$<1x=jsdTyK*@*O;ZKQC<;xHt1Dr3)*0xi6=qo&1XX-OdG}SfOIC0 zBS;}yd|;Nx(QPrNtbB!sje^q<(NR1kwVXg4RAqu=P`B*9^Nm0I(QQ4 znb525Q1b5b-=-9@EEPv*V!T-|f{&ne^fucWP^ z!$s^`aK<5zsGKW9o+x7I(15q=eZ1<6FHWloFMn}cFf^z_KY12Wvd^PR_Z8PmX+##X z;O0$4NOGoRHC1^E_y}gmtP^m+n7H2Y0BK}@BzVZAzj{a;^8J5F!wT3G^cYf z2zG>~-%h5AV50*;c%VaSI0q(dAy+C@`Uhx*LI9fdw`aU69|SE5BgGIn-c?aBaZs&A z&&VzgmLdzuk7f&5?8zW4cbJj7Z4qA{nhTGi1me$V3zY(rXql1dN3Uj#64Lg0)Ih6{i`z;RI}uIfbE z;ka&@Kw(3SP(!^8hCwngZFU&cb|w<&HI+~aQWSPLkg?g$d)P-V)clSN9c7`ZB5%qO zHa!<6>FbrNbB{vYL}j8!7&}Io8rA2ZZel>SxBaTtH-sZ#c19W)*w) zD5bbw%8-)hrB-P%Bl+7!m;OP|1$UCrG28il+)DwQW2Kw8x!lXA?+Jd`TD-S%^D?82 z!v@OseKtCP;UNI%6-wXcntu~8({2c}^4HH-PJNHI{JTrHF4{$j^I1;V)pI9XGbhtd z*wx9ytvlbjU-xW9zO$T`-#M>*!bD)^5*G6wHP{4c36Ub7DeAFzDCqUboQ1x0b0JBz z!p@*or50t!##DBrvATPivSp3fS0?IJ8tZC}uvUV%PgI-1ct}16Y@+Ljw~8yNLdRaK zcq2~wvwGEQSHqA4kA-G6rpiG(d)>7InoR?$FLilM`ucI2pvFOmaVzL!Sc?qmW4P$OmQmi+JhQN^mdxMWQFkEaPcUikdNpIeCl#PNb&8(nKL1JQhzfpxFH*SbD0@vUak@LPQV zSk>|HDN+9#vVptUSaO=i7o)8n_^=J??b0>Dloo(F< z0hLWEznNV+blT(mB)~11bfyQHp2WR!wOF73W`=cQYFS|;mf71hZ^#s4L)ww!90sE0 z&gUYBKsL~w@q8_fnrkt<_8e%BZqzIj>(!l2r}*1Gjeo(=RF8>UfN)@H9#^)2%zR+_PQq-h{itF>)u|FIW=e?~<5U6>R7rAVzlj8^a7w5>@r8W<^QI!#Q zI?k>KF9+M-eDj?hZ~XCP@t&|mJdGgJuk8N!-LLKX{X4sNy!FQ&Z@s+bS6d643tJ1% zZ*?b^Ig>}~+EM@9LjTnNa+MZ7G{oc-o7s&%QcNN^!yR|z)bpPhnU9Y^l^R3?u%16EYK$cL=FMs>PgF7dsO09t+0h9}n z%jePkc#O&~2|SE=2L5(B{W%Qcd3$A8)l%&=#5Xvj8_N*gWa%!p-ouEKNT^}p4zmq% zP{G1rUnDHbS{Q5RLn%V92b!7yE|37WX|3GUHG@O-xHJ-pKQ;%w83-9hDI|LesG{dsWb?15Qi<8*bhlRSKQ6;0%XhJM+b7%2Df?@gi zQK+k$I)k>u9ENRgY0DMXE2P8HyI(DTr#p?(4*qoTV=M#2GK;Az)c%@*7#&mAj&?xW zy!o-k<%P@3?;Tk=a9H&t#m`f@-$$4e;h=*`^we9&pw6&u6BnzM=Yu;7OE9riYQDLO z6mpJ)pIpSPrRMQ-ILKWz`+O<#PEA%8rvuj6Y$OH5>3lgDn*g^C{KI-e(1T#0*xBP{ z+B20*DhwA66%;wMVuT)J?>st77Z)Th!A=U& z4mR_b=nwBhBmRdTl3c)>QLmN*j*)hfO_?Nt4dTRq_eFJvzEPuMzip!yUC?AXCP=0J zpjZ<$)F{9oPz=$i$50K?1i)VD*OkQ(;u%?S0FM_ad!|;8t5AyeUy-6M_2qsRG)Vy) ze+#O=Ctr-ihMAKwEH57M`m#XblHuPXvp!4eg{&nB3eDum~4EUcPrt zIoROWfx>>#aL-1JzIE)o)eG-sj$M#RN3arSl49Du;+ejnb!e`2_!yW;ZIyF-cctL{ z0UuvT3sBoieVB_wpce&muU-x|_ixE~h}MjZTX0<8Lvkghs4@ZNjP0JG)xI1QgDu;h z3+m%}o*fE)xoxw4_EGToSE`_|?sqODgl(@JUA_4JPm^;*WqB_(E5MMUK92gOZ+LNo zFy&AFy2q|zOd4TvZ@_Asl=7r4|lH&jm{I<P6qGw|2AYtqy_x+@%^li%h&QEJVSOcw{hY6bJDi1s_MDhtcl^50~SiU=Y~*;MfGg zQ{s;*;Jc_-`-fs72sQ`yff_KDaN==&+u&HGF~~pmeY6;grPQmSR0{#}&RDh76tZM& zZ>3s7Jyuu;;w;~(hvQkViOc&A1Ik3*i1b_zJ7~SNy_{6-)T$&Nv)H)5`BPTgsp2T? zM~2}8Dy{GK_pEI?x=(v|Q~KqjpOR`lh(v0%BFrpt5uNb2e z^Scz?9r#PL+OQtrcVi5i4+v$owr#8Rqf*!i-Y8OTsAOJYLo_GE&4an z{#rGON&{k^#%!=;e4q#*EYCyhJLf7Qrgx73iLnx-TV&_s-73R+Ll4FmxEy~ z9(?rQ02j>sMbgN7~@&!f&VGQRiWn}#lzdn*6ASlX`ok*6O5D7_$NrE9jFJrlpB2Xl&g)JyR5*=k8CsAjd#ChA9 z*oo3DyOlT2(mkFTb>gI*XPoEv$NOze>O1_-cDJg+!cBHhQ;8+ity_0F_uO;OJ*zkU z#V>Mbr%oF+bEskS%`wKQ9J)=v&XHigh<=-GotvauxF&vN-Ch7yFp67xmne-fU5@Ti zTOx0fm2jRQM_D3TWZ--e3!vxA;&uEg{gd zvV2Ij^yMKx!S_xyImTLEg z0`{zG9yg7Ak7$Vl0)~mT&T3YXLUIKOMn}MP1_+?hV)^A)FhyOhxUx`QEUjE)rus5h z$jJArYvr#M7pjzzfYyur0c7{x?(`ZoS@gI1=0Jf5i!sVguZJ0Ai1rYPK_bEIBy6QY zyNS{Sw5~weJ&RWnoVUZ*{az!>iz>S!M7|PDeNYYeMMaGW3?_|@OWI(ZurNUnaaw$} zNeU>Dyp>K5kOx_N9Ciz{Zs>2kF6LKMv37hi5Mg@{+Mgo;yu73K6hPU5pZRmyJGJ!k z!l?w5*O#vp*9gwGk6j;KSefprsdq5iKH3^!@;h=e;z>e-bwxlLZ zZZi0eg4XhRM#X~eX6l3(NOye>96=kY)1{obXqSfzN9!iYL!KSC!T`fc_|V!n2Vwmt zqLh!JGuckfK&>re-gI`7m~%o&kK*C-1FJUJHxFDX|DRcWbwt?U3GGUjV=rRfm( z>!c)Rw;PIs+EC|Y0>hcowfs9_YtZtxgK%qGpQF^COdrjSgFED*ap8j34eta^#1a+g zST%4vY`}n%-<&&pRz5P+j{Uhi-5uQ-4p35saG*wxFxBbpSYRRu#K44eD6dyn*Q>R~ z(i+q%uf3w^j1Dv+fWqddby^(6iH)e!gga@L;(0@BL}Cp^7>4MIAyAq!ieZ95)!lzjWvVKzPHiz+c#}LBLgWD(}Fix0xXJjAP;~; zrjQeB#X_}MtE^vvdKCpZ@xp(lSdnB64QJ(g0jAnKfA*`-0F~ZACO{1W&tVMhbB=@d zMOiC)dVFQ|hLab zLSt3&EG8t_MX#{g3vc?s6y>}^&j)@d=UwUfuZPXhZ|A%Pl>X3?F^8B4P{a(exmwt3;kOZt=f3P*64%Rv_7<#`ph`3@U=xy+iX6KfFlmCTffgfF& zc;z;16>h9L=-s5U^_xAofrLK$F1{EBq`8iQ;m9g*Gt^0=qsCaNV$mo%9&5`*_k0ltMW%1pON+(Y`pRN?L1s`P zz$NEI&glw7Ibo!EwVXv#CmL(4`ayGtf?uK@(cHs_fzpAI%{mJx^%XM2#wp7=0OFei zKMH3sR#~$dZs7r&7#Hvj8^}DPQLo~*pgl!Nk+?Bai2?_}B9yOp29YOPFg&5~*u%4p zBH;3U5Z~sIf!@Sh4{}%%0XGmoV2W|KX_nC*QqH76f>wdIwE|knom4Sw06fgiA{#&) z#1y-Idz+HJ@=)Y(ka75J;OZz6#uur{yjNDoSuTB0Rtqzj8V1nB@GxrC`Pz;BTcI5} zNXKb);X?OHJTK~$R}|2hB^=sYSQ6h0my1`u{!aEH;s!TCJ2&T#8(Bpd_zJrtRx%)4e(hkt z;YWgBfsiW>nL$$;2hwz4#X)*?eQAmEhmsJWvLA8}jBZoiZG@aNm&!ZKI^akWB*F@^ zG6t#xRNf3DyGRhhztVWpf&c4vX)hmRr-?b8keU+^pXg%Y>ozAumOkgAE|7tVVP)Sh-Bac z14W@X`!m~oZ%K4P15O(tqP%luj1miyXC#PS{LHO_NWAjo)%SOrC1X1$Uxg!DvU??IvfoX3kxLI3`oz0nf z)p1X>FB3HvJ4P90lZT+)s2p9|{*dVkr=B{GKOf@xs4Y) zJfzWa(&P@7)NVcElGHe6N*>y)xl5;)CU$C8u9w%U!w6t*$a&bpq$5nIFhu8|Pg0a9 zq7^`vJZmUbBtl+SN)VESxo6+RBjq)Zkda926d;LO0RY`3XRyU`g>GdzWB-#P8%m@CCqrLxU8I#DQRy_=7dI_kMWfTtGXBba zW+v+I5E_X}EE;x|a1RRR3f(q@MoM>M10Z0>T0c2u`apF(cXf2hqw+6_CAUxNlMQ_ z2MN{-U;eTRg{EP;(d^W3deamE&6g*D{_N}*aKFyZ&T6=10seS>N`pU940UpB1Vgg) zRViT9ZA+^t;%**ne5mda{m5qPo!&VxE4SuvDUgI5ETxM^VIp`XbqfrPSu@ zdZ&R5s=uWdbs23L2QB{iBBljXsx4LWOwOI=MejUJQIFsKbJ;uZ2$|wDQ>?Z%Hxva& zitY95MEHf?Mnjc&g*JajKI(ljOF=slT(iqGPO(8z&P*7(puGi!r_kIb*xUr({PH}k zyjMYeYLN<}i#OV*6jRT(?MPKjbXI*5+%T<>E`Q!UXN{KJ8FkJMw#4!%UeP$y?Qiw` z?lud0wpk8_<95b*D(}4__ZJ-6jrJLRkzzbB@iYZe#AHKHecnJwcq0;UlnND>_p&Y! zlP@EhFU;HwcF4Lxyp7>>tu8DPvz|p{D`+=ld)d5GX3=0;$wl){(SE!f_Up}y7wLEU zBC)o`ERrKWvA!nKPF7MG7$547D%F(fs}SJj)oN)OaJ?qd`>W-(+CuX1>1ka%*;GY+ z5|=E9HjPwr0En1^hzOl#-9`PQblEMEM8g@_>4~+?0>Os_MyN2tyo?-EV^iOTta}Nq zm%5-fLO>nVo$}GFt~4xv(h?)7Ocv0n!VUWMF~lw%I)?NQgCcUDlL8UhX^-Z;y3^lA zTLOmZ;UKC_f-ozh(yq&U^`TLk$*7K_ps5r30X2?{P{X8#m*@tVN~|4ev96L=hJ9vEBAkzy#t21L!Yh{3 z%E{vP!j~0_%7aE3stW^|ZQ`=Y%x)%ZE85I5FV(*CZSsgJ_ff=3qf!D5Wzy%Eh5&Iu zj=y5f%W6lde8i*{id1rXJ)E4FJ{awLWXm9VN;>&0<3f&TLD=vI7 z=Pl&$Vv+L}bKdIp)tpz}K%4<^%)lF_BRPe>IbL^X^Q&u?rFh`GOFnGZWrYBO(t;FB zTSk=7YnC(N<~L3K1!&K%CEsV!SsIutX#28m^74XpW5Ka;E65q336?<{I|5_7Q!_7U ziHRNDh6@qK@N#cJh$MBmCc||=e< zDEL~2*VcNS)E-+(6u0d6Zc-Xu#?hQH@aWuT%M&^ol!PqKx;bX14Ijk>n_(~5z(C~f zpg$}0D4K0aKeN;(Utsm+NyrWwO{(Eoibym{AN1H(Qs!lYkTO}zGUI_A-Z5{kSC^L< z(OzC&GR!kEkg=Kf$!K;_bn_%eB_6x(vl-t8oM*Q&bubDqVeZQD42BmCg0c6h8t zffS%yt*6;lA!jckUtP9?l^a(N)1r3T4Gs{huBtd*Rz8uO(K@4fxx=3IDO)jqq03z(`efx}Cs6!2h)gl=s(^7zV34ruaB`Wb}I8RG zbX5#A%OV;j=AQOx3lhQJ#9Z5Shlf5C`-N)9HULE~>^Kaug^bdrG?sL~8T2&DX3;Y-A4smLB=;D!7R4|syKSVM0-Wgwc|de*a@vAH_7XIOX1aqY`Of>+w^f2F z7674)jjj$XN})r6?iHP8)8FXu0LcyzuWT*B+7KNsZ@G&>)J55Iu!0qB7=B`p&btwA;JY5uaz3C_j@Mdor`S;)u?``<)n+VYXk+gazKe%bE z{^7&f5KXYN=~o4HeI)h*N7rIGF>7*2Ac;GJub4pjT4JXs%Zc#r4mO%$T}c*k({Ex3 zqFcyd+6Y4?m+g*`DZ@njVyB?)%j~*?w~BF+B@2crl4N8NY&<9-`%K&y2T1C4w}QS3 zKi|c}$atvo#&2LeCOrS3VqZdfMf|fB0N2roj9qy*==FC1~|Fqen21XN_+ z+E<5+(R(=mQ_wp}0wl?ex>$x$W=JE@LBsA^U7Rv4<6_t*(_CU*H=+eE3|p6=(QIp!Agn=iqY_BxihaTr#=WN z5rXmEVP}w7z6QyIVbY=@3x}9v+rn^zEmY}j1h(8-Z7kT{qc=|)47?OcMP>a8y+piQ7xH^z^#=Q8~Jb=!ZM0wQ7n{Y zdc)M7>MZ%y;AJsPT&rHq#xG>F1e6gawn$4gyb+{^+FqW z${LccFkK^{_a6%0QdU<<*O@6Mvqw=D(8Yl$JY$B_Y&K_-y3@i)`;kR|l+uY=XH+|l z0)~Z@cno~IaEK%8WBzAndW$IIhN1{ z?Lo_hkVj5Ev6@^jZp_MdPuv9%v5rta?2udVs_<9=PMv;K#R8c9+J>BfksheRMCy#b z&-2{HR=r_&@3ibkmbLh%2(gkVB(_QgIdo;n3XeIAF-^cSyMgY+#FuoDVuC}$e%9CF zw)eGWqrnuneTyxzVCZ$UPgYWYmVQ?TC?}ITLkjAKv7b_tr8vtZqORjQw*&Dq zA`HNRkHN51>~U3|5k}@z`*f$Z(P7y*?76yM-wtd$2d2JDV%?nr+l5o!)bwrJkjX?3&tw5&_AwX^R1IxEb#;yD) z-INDL?}zJV%(HF=0j8#tQPVXcn2`}T)R6N^3a01Q?*OOSQa(r)KeiFnQRfp;&hPZ^ z;P#BSKEPPCKSVy+kHn=n(D0)L33cH19XWg83N&c?7rk?TJ3aTzmlKP?0ljhk!v+WS z#lsO3G3URUb8JDdFc*`=P^fXMdw|Bdzny#L@-r7MJpBxECkh$`Cw7ld_MI`Vw5wC8 zQ+pgLmKGYrniEe-EGMwvEfVDDUfKKs^_Zw}?Sw4AL2uU-o%q>=PW-D0mH1iM0trYd z{^snFM<2K{2%C*39D6{}toU+ut*}t76_%F9*<@Q6XYx)UF=9Jmi$dqKJ}h$Dc)#6= zJD~bj)||Yz%9m{=4Ai#;!T|h)h4cyC=62X|oU}#tgQw@Pg&o85^uw zdrF8vx>|A>Z_~X8N6Rdo$-8(21D7F<9=O4#lyM9GIxr?=HbzTFF;W@Bn2|1(7Ya+m zuVF^y$~%vk->hP}QMK1${w8cYp2ZWw+_C8rBMRN6;_Kl{+jqmc(V@^!u2Ezaie_(Y zsUrpeWL=>2#$ztA=`e}8*P(&8cC4@%I!gmdEP`;K7AOf+O00zZrAahtO_gNQ$~I4> z0}=N{pe#63RSWTa6J>2oRQ3UC9=(!qjcIQ}d}F9B7pvFHizBY@4vrBa zI~OJiP8^@jmni>GPUcloHgOCpJ^qjO9{Pgf~4tJx+8eW!~ekxR`1hq_^2<+Ky_TFL5kcT+|y50t`!#9Ib4m`A6sbd}<=HP01 zs5271c$JkkuQ54Arvp27V9XVXuH&TJQLzceIvbf`jB++Y$5Iu4WrY8fyPZU)$VQrc zf@PC93EKB*%30&A-CN|$8WXJ%oQp2cmmD*gTx^H}8S4o`x2+VN-Lt$0u8u`W~!{T ziJl4CZlXCm+hU7-o-$1$b>=|(*s^IQXNr&9i=~bV+6&0u(--SsiQFyh92!Y>sAXlr z787{dp1iv0c-$u?E|%c2jj%!PKRpST-r2ZC!VMO(nhKbOe!GJ=53;`}TR~)l*-Aws zn9-C;UHVX*JM^{UN|7vws^!J< zQb|s{LDKbD2&8pv%|VaHaj))5wp9pe(m6s^EL)sil&U88&r-@?SKKLK4eDq2DTZm1kI^x^qOUUs8EQHH5P1Y zx$rXF%1YHzVX5?AfL+6DT0%HyhtD?d<4t+zD{h*cJt$2R!j!1J%GiWU-SX?bjyEeT z4FQZKNSjRDk!gytzezalCj_5BMyO zf+Vq4Cy^D^Q(5EiNPV3qAuw%Nen>iB6)haiKhglOOqnF~d{brD@NS@p$et&F=mw6< zox8|C(=X}0V9W0{$Y4Tcau6%}i40~aO?AR(=IOKKF_wliKog!m>)2$Y>}9$(#}Zo#C;Jir07ly57qSS7bZ-HB%~xGViMgbw*tkQs*EA+Tb-K$<7?lEw=bzJ zOvD|MfK40YRfK@-Fjd!0f{~56g3VoP2UQU>F&ZUqdlF?x`913 zwSrT7hUHJJo452h4k4AbNe5ica~o4%E2Ct;%`bV<$|4*una0D}dkG+_t!CAXFe*H| zR-qe6108Esh<7(urD$6ObnJ*uMyZmDJ4mG*nY0PnC-PF^l`_WUfNG;Lr0MT;)C8?C zH5=lAAD=8m5V1ayrRKS?>#I;tbYoC%K8hIQwM?=fsO$k4YQRZ|fNoo&K=E$-cvf~) z3WmPhxk_bZA{47}k`|J-83r(R3`oURW2PxLUL8(HXHFojHUKigT}=%2jzpoxu&Ep{ zMWOf-4KIJE)wHyN_Ilg)?$%u5-XNkJv&SyBt0uar73flisf}3@qlxK>+5Hh%88_Cn zb&a+$$oPv zA>qnDOsj{yyl#on7N6~S7|BrETB&W;Ra&=Vw9*LsK>qukPLqu)$b16!IRc*}29OP? zIIhCBxgFjNyFnxLDMb}N&0YyN(2qk$AiyjUdGX|A7Y}wM*lB8Xfqt7|hhjwSC`iVc zK4@VHt{X2C+$+^rmWs52R5}XnV1&p;F&<yU0G{6lX+h zR7LSbCuUAHS*H-{lvarkq<7yREcC3@J6*3d-acY@WaHVe;62wT$STsaoQ`m7F6uP9&wI_4P3H`}TB zwk4#JRg=G%{i!7{Cmd^Z+GjAt4;^DYP1aGogDz7#$V;!&-Wuil>;lq2C?zcjRaz<6 z(4ll0oul0xQaTO~Uk@BqF|j-3W)b)5Ks!y6&?MYC#5FwZIVuCp)Q4LhnPQwvOyiX_ zT*BdqYX!lC&HQ!D4c&G!ETgiSHhJy*jYy?s+>fp>0l$>H8`Zg5URy3y(OIkF0l}~lYO$S7F8X~r{ z0`c2}?exMe^id`bRB3P2OUa>PIBaXuEnhRU-f6iB*+DZ|s}~=dx@}sK)9A___DxR5 z&IUFL-|(F><<>Mjf-?c`BEjt(pU)px~X;jT(6tLxQKso}(_q}`Y$ zErZGWXWR5!gazF?El(G|Tq1gNLQ;!krl>P5%21uJcf0IDZTCPGW(QGkHtN-9TRS?( zW<`09n*qiKC)R+XHMealbQnR@^WrsbNNzyHS5~dM>5xeqmzEHDAL)=;KCROp$1}GDfCH0cOwPs=CKG$K|CGsuHnDuk zZp!4+WI^5&q>$Ay*2yQrK?NKMne)!T)slpKbb!|K@ME;ai?1e_fC0EBvdw-IagN z%fA=+-+qgGXwyhr^p^w|&@((=@ z>YLouHzTU-vmORO5Gi4&USJE6o>IFSQv@!o!@2(A$OHEFc0k6m7&{R7zG$#vlTDog zhJq0=^%DVw5n1|}U8~s~!w{O$488IeUnXnYQNta5`e+7#gj!^Q*Vs4(~WV2qI<6 zQhl{HND$QO5Jrvl;)~57)e!HHv{Q9*F!G5e3U`#*dOhe72hZ@6sdi%7iW5PPOtXv+ zoN27#`CB;rzG3YNyPQ;A6d9GH7b*nCh|g$b5FtrUMZj9-X|ezHUxtntODUm9UZ z&Szr!pg-I=%=ioGuE-^MtpurC(7l*wWCMwu;nTslxA#%o2?a1!F&U5YClN^LxhnLGV%=JD9~CZp0wpNEfUxcdZ#xZ5b{SL41zCe%^b|SRp)5 zZ`iCszfZAiNX(zbdv;6mnYh~|Od8UXB`Bh4=Sncs#H-*q69?L^JSwvfZB8+#{CQ=vs-hJ+ zprlL`**BE=INf<8C-EHW+uHp`GUAG`lA>VMDMo3=S+5j)j>By9)qut2sAcFX(UK5e z#6jTfvU@LxrK}}FMaZtmwnWfi87&i91izhD*;iKZRlPg{A+3Jb$(dBUmo)}i z=fdUIP7VI4@w+U`F&sFtl7Zvnqox=o#w0Rqqs~|l&t%fpCZ1{F)N(IofZ8VG1ZO&B zzLrh%9XRFOQ5jU@`>E4W%Aq4wD&=+bw;bZ}nsbGol*TjMG=cH3IeQRUE8vucBl2lX zfEvpVBw8=hAt>df6Ql>Jcdv6h3M6(W?G+jSm9_Fq6^4Qt{kT|^X&{K5OKz1(_JJ8P z;egr+W-;?#K_fQnj8tM1nz2NLri3=mDw+t!%()18K~QU1m}PJ1j6=2PE0R~&Ls0AZ zR31~M!1347Nj(6|v?&kmg$a@br+_q`D0m1=ZRA|96l=?iBxNa7YRd&cG8I{i3^7!C z1#^g)L>4;24F?0XGwMl(fKUSU6Q`?<%a}Tf@oWp(2eii|qfs=j%%jvPo1UcBiW}hT z=<(X2Si&w}3;Wjx8={C(@w-hxYl;yMs86JXLa@@(D#52>5#&J2WQKs~Gti3&rqSLc zTsod`f3clD)azT3`?LUGwm}A-MJ95$iVCRE0d3l&854+9v(Hgr1?Vy!b*zYnZLFNm zq0;JB|O_#I1y(&qlV52s~5^}VO}UNqcKL> z_$BDA74F}PMw6P5R-{B`q3l&O*(zbtIXMI6brO24QYGn}ta23I_IGf*5Ji!|NMkLp zQ>K?R6t*tVLL-#A)M?r+F=oKHpMu^1mmRu|HjpXoxsOR zol{2`lNjn+m4i$|4^=|-H&S*ro1xAQBBiXyI2&r_2b+;K)}##7s>S(o2&dB`ERu8k z5W>c`oW@d$9JF`PD3av7gsNtp0KL)%$H+NkA)4f5Bq2XgOVqL1E)EQ6lG0NQb1{Fg ztMAK%YzSy<+!laT%jKnNX|-az08d*{eX|UeZRDSrPtm}!Ohv5?Y@*coWGmYbyCTYK zXm2)~p;x9=+7lM3ULp&%GDf+nnG$0QEH2A#$|oK4S$plM>^>B4o%k1un#?&*njK%M ze5q84nY<0yjU0JdrTd^XdELJ2c4BO7$1KfQ=57?PZH^wjY(tC#k#V_REnFKKnZPlu zjw}vCFCwXb!?t!zC%74+E#^4eXizjgm!-9~lP0JGLFF4XXu|gkNf}Px%g2U~ytcA_ zCen@t{25f-B4Z~~wjj$GnIvtgnr;4G{!y$Ynr85Y9qpjSnh07upZ`k!8N45Ehg;h! zah}*vhmt(TiOISo?K3bya{{oatkQ5j zJ+50N-&}xgjzOhVA zfsz}DrrQkrDUQr@2}kC0NiXIL6VQN^iO1S)Yn_63+=#EDe z4aj7h5>teW9`eIEkInz`e$*Wy$Il-f5MuKqAmkHJU`AlHZWlwh&Zr1y)M1RdK{F9# zZ&E-J5A|yq84PErw7Qe~(H8_1Npf}^-eNH}OLD{#KSh}%#U)>boIp>{Xgdh{3EN`4 zpeSDr%CMy!q&xOaAx>imRFu_D{AZQ6!^9a{D;8fY6<>neP>J*#c;#vCz^bxXt)U(1 z^clk$c?mCMa!RG4Mmuwxuo*^uyCx9Q&zo>Tv7c$yH0gXj!g<4`tj84dDqnlVkEHFj zIt>TgW6fKBw<-kuDPvy^OMOa`J|uOB$uJ%61l_fesOy}uE3%`!nR67=)>Fy{jwpt? zl2jIN6F7ks7^IZ2J5R!w6mNs>R?jzylwk7k#=2o@e@2QQU<*t*v>@?$N^eDxf+S%M z31Y=3VMwrnquB1Uk<+x^Ob*KB>i#!6qth62xBoqEd&mgJ5_Z`$aU8ct;FE8qHkIL$ zMvC|!ODIl0efHF?Ano=TB&hZf9N#a7bIS>OqcRH&bhx=glY3s@q3chs>XqxobZ6%w zH~^e+oi_#15z4?D1brR#T?wFx`rG)>k9UCW&GZLt@uBE+Zkhno77G+NL>q=b3cMCk zx9`P=UA>gq4qZBN{poX}KZmTNK#PD+UcL4bIMNngdbmwQS`AK!-|K9koQDat;Ky`q zF|$T+L`ecD_5i1`L%M`Eoqu+%}tIPtt_g=>?huDohZ=U0LQq7h`JDxMF5V-5o2q1-GjlA1yJQX20V>aftjK z+ewu`lT5tWf1zL7ZRyG;NCJp_%F-LVo z!A1f*_C)IZ{AebOE?F7x+g7Ae3K}R3k4_?Zgs5UiC2>(@p}bUHqv_VJuNSr5wT_om z?=(9-#hp3F%%b-6X0>+X?*?KKPv2-GX~RD=Gw0WDVmN4uAj=Ut>h(@f_(m1cf||&C z*9U>?ze7$}@c%6gInyR_5>y2CGic^;$HDg_L)u`2X>1YiUu~JAFX+(TSvz=B56vl` zIg5kZ2~fL|^XAUc<5n*~f&ScA=&8Qr!^64r^soU9<-DiQo<%Lypx14Rll#-$P)|7& zOcbv0=?lpWpXbhY||i3CdV z#lQ|yX-F+08E!+kWbDA%)|3d~2L(Q7b=ag>AxV61lg7cHdo!)P;Bv zXA6iM0EW}BzKCGQP@kA~PbsHmWtwmy@1x3@L@+BT<~D}DFP=6 zIjNW+6QP4bj}sdmqCK{1j4S(&HM+6NB841l;3x(zoZ0*-TX`$Vxlw8Al-0dKJ36dw z!USM702^kSK-CssSt%@+7Thq%L%^GWXDm&y4OkTySzJ_@Ns|n~ByZbB>s8I7tHr_O zfXKj%vrIY)2qmVjmA@~csEz87@}jn~zFaG=RM$!X4Rsq(K{i=~r}%xN62riy?4-j} zjpg+tPhK6Vu|WZc>!e(w*uc#lVyEcp!>+=2x@_CTVK|#jzZ(Ur6R)v@*2^r{Ld8Z8 z17o>tKQ|zO3y^&$F$UTEz?J$|&=dppKA$MW-DuV%F)iZqRN}*FPU%dPirpU702|zw z-vrv(AV+5ur7|1jw}4UVqsu`@OGX{7BFc@Ww>kIR^CicY+slSd;F}+opXH&c$fZ-{?sTQ1xyqC%9<7rY^Z}Eo>#JNrv$paP~%3{4rA)a=oZX8 zH$vTjWN3PRdvaYL^^=(3b^Ebs}GFk&83 zgm7096jCC6G5scToHRX-*NK=9(snHHmmLsR0K6ICSzm~UOG7g?i9yV%3q2qja9MBq zqR(d$f(4k!;Y0gcHeOIcs~%s{lsLy9p717!e>%BpQf35P}qRIaRB3dYeyiRU*6$O5<4+D9IclZtgw7= zhJzk1<9W3aRwZK8k-`1S`pP13$)!aN_mu9`Ela*xUB9was$4Iw;b#X~g|z$|a1Y*S zhS4_Pawc5_A~I$fhAqN`_SMeR^>B_1)(+f~uvQ%og|uWR)}0B6ps(%HxnPNhc7Ok>J~{XI;?$;@|$jOENL$h|dnB})Nk(~}(4qM!Y&O;OhXkLx zetm&*>Q*N(-D-B~5(>i!aibH=lQXdbW7g3Y5ccaGJ?#Mj%LjLYEUBs6o%Rg5x?83> z9Oa=$nFleoz>t6ppG3d)~rW3$mn*yetmU_ z$LB@|XcD|O*_Fgi6U$yKtyR|xsKs6)#da@Xd5miTVo{BRPla+OA1Z|UIf$eH_mq z_&JJe_@<BE^m6 z^8olDNU*BHTUc7$gxO)Y8K7kc8pX($`ny?^%PfBF_-21b#gs-BK426UozH&-{y}6_ zFOiMkai$xA>RnWL&~l`&=TOazy{^Pm*B;)hniNMBQ83`LfqoEW;nbs zHa22KpsAx+ffzJ-1)yzb|F6~-)+;JBQ9L7fj@YTh3UDl$`XK6eS|-pGA7%#u^nz;X zs>B02IGlMhp4u1WxZfEwv?GCB5;8XAuI>Ns z3J^pt2bysC9QP(V^d1^xjyfuwgkgH}-`wt6{PZ1U~=5(u?sCQ=hTMe zyTnA26jEN%4ils`j_M<-kAdLG5=Bqp*my}Bh;c~AFk~!GS>kwe6hltTKG^c6qmsT# z9?$ffT9@o_VRyFBl#gAo+d&=E_%H#qQx=Chv9OYPhvIk#J@gQIN+q#as$fp`;g0h0 zw0W4(J!nTtn&(aT{f#J#_BMS|NhqT=%TK0YOg~r35)>$kjnlZ>k`pn{g*`<~@EsC4 zXn8n)Y+Jz52DTX!oh6M> z#x>L*T7+FV{~3y$Dj_JWM7xF_IvEgQIRJ}xylvQPsGSgxe#%&Z|!lLSCtTrBW zyPY0TmaoC-S0SgzoVSQ=i|9a^0RhUS!Jp;x6lLgP19 zSpiSB0f>z$4Et>1xhY;X%%~W_nF{^{mp*l~v8?o&8BF&_$|}=7iWA2HZ&Ur!%qD^@ z8d;7pImfrp^%6@}=571-=UNYsiZymSLz#&$k-gbWCmv>q>5k$-D!S*52n2y)vm_$CWv6@&1USG+a9h z9&XvB&%BlLG`4t5t<>^~MJ<4`0q6KMM!F5}1kFf`c8NS8yiDL4-c=Es?oI@j@!_;!>o3}S)# z(aZk=slA^%Q*{3JEg0MrHjkHBvLG~QwU;9+^^V1 zhDJcia$`84wpxlN#UOxnTV|w;__`NtZt7dxae129YgduQvpr38v@;2EUZ`IGTH$5u z&d>`;QWD#h%-Svc{q3*$cZmKQ@f}%f!JEJH@1XoHD^#13Ji(Vx#gkj$>%bu(OM#ZJfE>D0b zvzI>i>B}-mTdX5Zhzd;DWpvmSjW>2 z4m;h(;;jH7>SN|>Y}uA!rljMR!RG%ilJHNicXUpfxCtUS&0+8woB*;5eRFYQ?+8729;Fm$}@fTy<*Q#s&B)aPvX@en48Ao&ECrV4RtT4Mesoph^{s}XdY zot>7pYf3|EX`$X|J6lwK%RW6Kj8}_e1&5oUb9K8^t?1Zl6NjlV%W5LYabT!;K0?`L zjX}>oC-w2hC~cy3qzvh@2Zz^eVYz~nP``!cKN=`nojJxC>OIE$pD-ai31Bf9FYj2m zzoGn=Wu|0LXF?>aMo|3C4o&Kor=Y}P-qQ|*xPiuj4+M#qLJP@~orA_pnFP=pkd`J* zUkWS5!rH?1;>tB8AH(z*Z4# zbw&h(0ce}^oKM$TtpB|CWv_w@a9g3N^HK*#jFb^`S!@7#X_@okGetuX)9@`+*Os2o zdCwJ=s?X0p$7lQVv~*}ah!)i*99wL3G>H137tuQ3M##}v)SR>~RKDZ$FA|wW&N>ry z065WmkR-`~OLYRRN6+WIRg%L!S8P*$K$FfG<+YfE7-~KjM0LL#(Azq)7fl@r5{F`^ zZ_`mDwQ(snh8EpwD@*Sb;Yz{6tSUld15pA7g#&)BvK?;rpZ~HAndc>@45Z}wwr$H>lTRklyfgI^9|h@) zY=}}Ls!`L0t^F5T#_9E%OMgsR0Rh5$6bVW7Iq5P~1+F|kt*yxqSy(CJ- zueNdUj5>zf7{9B%W#v?0jn4H|TpT0L&_E>0NO+e*;t;_sryN*LWlo^Ow8z$<&L+?s zJFJ%yAk+Hc!JL+=LKqz-Hg+}--CLNa6U4EhSzBLQvSdM>4RuR1WKCw0cM@ep+hI47 zc(_J;CWG{*38M0pwNOq5g{K$R5E@+H3Y82A!Nr?S4lfdpOO!ZwVoi3whqhk!yP@B9 zImbIxMm(eB(op>7=MI76$eE%mPb`_RKstAa9|O*IClW=cO&~SOiBBOJNTi+1=_Ez% zm;cD9Fd-Tcz6?i%!%(Z(O2)4YY2*x{7GDkm54v^ORDRHANH@&(ZTNj3M`05olk`L% z3o&woWIxYAc$gS)uZx9h!FVvZu^Ylj9HfMM(wS0XTSpwvF3JFLeEB;Q#Z;dFux5aI z7rEUW37nJ1zH;r4dBFJXG;1|w-l~F?av*I=>`B3^Hk2TZHkBAja5u|^)z#9iy zw7~uCUT3gnf?gP--AK%+SP15D*%&5Kr%XbtEIp{BC1%RJOv@gI%qA&-U~pTkikfFb z2Zq$sa@H zrCRMGLA1o?Fc~c%Jy1Z($$g}YqQO06QI-oY6xm67(uIjHiP~A(BojeLt2cCp=ug0u z{?M~b89&cb_hFHYh4S)hVWB#fVwgZLB=#oFB^*RbA+C;tNO%ksRhsnSbbG}Z`7Wb? zl}LJv;KYM0;u!U4iA5O3oi>k3QJoGh7XqmiZMA^LYt>g)N7@W_{Vp;EJKZ3W4MCz^ z_9%VZQ01|I-kUx*chXW{P%4f&s_~&4H%I zba>dt0GDusW(qe+3MatTi2SG+Kq_lerp(^CV(^JxrW zjEI=ypZE{YPf`>?flyoADb^F2HoI~?4wI?^KDCf!0cK*33m_rQ9oaAaruG^`XO)~% zQIKVw6HyrlNE}7H27jZHC>bkjCxNWK<=}BDmSDDhJL~tHn%ods4eOfg%U6nP*`wkb z64{hudv20!O0hj>rBa$?&q?*+d(I?30S@i(TTW6SO@RM0vN8C7L<^BfYZP0E&n8)j z!|$80@NU`=Guwlt)PVL5l~iLCP!nl2Z0B6KGt{obalS^j*lBLL=Acdb7l~Il(p0%! zaQM4OQ~=PrH!b#<(YbD8lcJzDHi;+CGU{U;9SMdE=NS3fh&|@!WZg-!wuX*^jhnRV z%&8JkZ;FeZ+($6SBhz#aVW(W^4~y*1>u9cb$whKD zJnmuzn}rv6&gkxabKs+qBQ-o>Ae|$Do^$8* z#z5~%p}KH=xx82$3qFkegx}rRz^DXh%fjZIEh}tOoSF;BXg)g5GrH=jt<&*t20>Q^ zhDMHb(+he%Olr}o!zr3`^v%&tWu!m>;}KW!G9?|Dn>|?*i;GM=;);Ep$8B@GH?263 z)599caa&p>-?Gv|u`(_Qsc2DkrcXId#pjjJz{rGK#w?etd&yAeK@?Rza!hB z8XkIwQv08c;C!um^+}1%v8zdi=4MzbJb)?jgaEg~*M;SIsRIo4SD)2lFQiuFAJXr1 z*hgfCHzw~KXo{|6lze>_P^8}(7Yiff%pzTm1#c#n%VR5_AE|t=zqudm#=*yN+nT&9 zmV&lZ1frvHVTd@C*X=)qFf19KEK8&O`N zsTKEeEU&M9NXB#f6Y=^;(Oqtzb}uel2W<~%hfpX0!Oz;YAc0zY`yovD%O1Y1EAxDmpyw>)GM1qF_ zn`5K-vnV8Wq!+BDi z2B!JZ+y!+1v=PKfa%fBPZUsQoF>g0^$iqs_aWv}!9qb3U5vWOx?n*lA0&UwM*Z7~7 z^vF1vsbkr(J+gPJUJ}Y8T=yfrQUkI}Vxp;YSd-V47-WhlK4(Qyfd-$J4B1`sA{1}O z4(5-@D!0mwU@PQ=Sju@TF(IN%ipC8`()`m$0dLc_1@HXR*5<=nLs%f%ODVh}W)v4= z3A(O_eU)xl?@p9UTTu@26Ky<6!NSnGkK#Hq-8SSMaJOkK-gLym)5vL$1vgmto7~GA%YC`V6T4%T_9v zV9}q9=h<=}o ztLS8=!wwAMh-=N>MO?8LRuHNzTra9L$-{Jt*nU)pE$Zh)JZD!$D{GE27dBYr%h2pa ztn7vl(JmK}fVn@xfS28@H;0?5Od~aJJHB76E{>lgRQlXb5GRlpn7*X@s;#b-udNl9 zmr9i?X5ARGbsOZE$qMeRo{tfsF={diQ>V?wOq1eLP>^0Hie}X1mu0*9GLto7`d_yE zdySCSjo(J&!OI!2J^*-B1;GG%fno|U2ok$x$67opz0NS8#~^BJbv^^qzgS+lQZB#n zq{zSOZqg%Qu~XkbaU-F;GMb9*H(hyk@#>@$UX3G3;pNT5R9=lRN$Gj|{?Sl+6hWvI zSK}ysgNL-wBzy#qlq`HUGz`U;KAsTLDuPEZwLLXlPPcrvm<11EW6_vZ=l-|2OQ-nDJ;t3i+Aoei2#OqhYP$mR0lqDd+)&q)O!R!?7lZb+? z$yrK_r?|mx5Aed=6T?+;z0;0&PS7}V;6nXDpYGO5ZPH=K|GZZgg9K7NY(pK1StTGd zQ&=f0UuubcIc7dB)XbAMN@6}xT~1|=Q(*}O>0Fe9+L1AK<5p7EC}FarG8pL836zV$ zh`bZ=cX3Y;qUWh5AwGNHb%93?@2DJ#LL}HUmy}K{Tu}o;$BGvVYdEm0rI+JNia^Kk z-IkL#O=0j6G0c7l9>>*!5ANo;Hx-(}0X{#z@vx zyyTQ2Cau+$3kz#yPSjVilfMm{#GNih_Q1fUKHLqp>x460iIN3f7+OMdLd;^I#D|=( zR5=T)C@F9NB0WUO?lN^iJw}#iXrse{v3-@v0Ueufqh5T+iYd;i2W#b(rB@IJ#3CL= z>VQ4jEnz!bF;Jm-cGwCXEfU`3zYNE-C8n^%@ z8g;*i8=;F_Sr6}qWF+!bew#KZ{M+qjSxv#Qw+4O7vt}lSa2EXYuA5g*1={6aVtdma zv7wN-)<=bN>CiDERf{%Eh;7!XV88IU#Er>!l#1u!`X6C0)O-*`_W}%^Wjamaaw*IJsTChv0kf` zIj1h4qMg!dp%XH&(5EiXo#GI$eiRMp_^OgM-Yp!PFJQ4+qU+5@!2WFtIv8u=i}c8& z1H>8hBKDi&lb2$LG5juG#;7u!axIp@!@M~vM6nQIm}okFZgD`8hus1B}J#WAF z6Ma*MDcI-$)$Yx(6%vA;dr)SBn`+mIIw;(fu>U;SC&VG7EzxJDs?fn@%pxE8b&Jxc z7q0Eg15YOzkvPV9?d1enBFu9WUn+YRno2AKo+c_}-r_`~A&IZaXrkj`lORR6Pv?QS z=~DO_J(AX1N6=x=TVGp>bO18jZF(tev-ePE2pCVfjt4qN)P`c429eVG>6O#Q ztwmWq26799M?w}q z!gNga25ru2MPp(MP|Ll8^h(0OKu^>W4iPi*sMSi*@=|m!-^!qF=V2G8T$9R(8;ZG; zvE3PIvh@_zk>`Y@vpM{*Pr^l6;gq$tV>Iq}b;)+oS=~&04k_$JVQEQ)ol3QeB4LD# zh|CW4*^NwsUPxt>sA69wWfBYvSRA@8yKM&XR>uh5ok0(k9P4me*VfAGt7B(JX~9ya zr|$kFjZK|kF6lXMaw5CUidn$elPnV-{17ilU2Ro|gnldJ}TaUQIL?_3_yThI~a3-Y}u_O3-HAmrak!4 znQUsvpJ`@&>^`$Jk=a4io81W8v-q)yY2$ZlnvzrTvk}^&1t-RBJT8Il!cw6E%x|fH zb{>^|r~{dJG(ul&XQsuy)u^^Og1;dbuoy^Z$;o4YVSMBjc{ul#qb*Ay@SH1CuGdIT z9qI?KtD6Z`vD|{`tika2(%JRGi)buRB~gQl*lgmY4@RS{etkaC=>!EBSb)rA*d@INgZq9P;*=$xEMH+*;PK?#- ziwGXLe+I3V@3{JXGN7(3puSy8>3m|SyQJ+_!m%2WJfMWy8ez(PKJI}f=OcwQ;#5)1CLHmyrx`sM{M%u}sg7JSp&I*8 zvAjQ0X>$6Q>43vqwJj@T76>6%CL3@Z>XFm)`U>WRUMnt9cKAx{P(t9V@LFoiC^=xd z&ohJ7Ay3TvnMCbcNljptOP;Js7jXtC_%(#it?>0U1l*E$9N-tT^-_s8{+cDnq5U_L&^o=YLP-a z5jc=-LL8O|u4h%aibRs}4ZlgdXCvs}4q%82tLt#(@Ef$0G8)!g0gO`fE+&(PK7B5c zcX5)mi+bUbmSyg0=@m7ZLbcS(5_bVW(Epf&K)|cE-ZGY6!9>0_J`AzoXeJvbu}e(v zaZH#2l9Lg?;v~SNMAgxt$DJXr#N7w5wV0_d-Jdbl#effECgncmWHo%@KhL$u@+N;!=t+lN49mz~j;w{vn3b=aadE&mSz8=-3HcDMalwqE~i| z#iqkX1Z2Xc#k+O}L7JQ&SJPR_Fp4YO5)3qOcB|JX3K(Ls(0rt^gCI%ctdpMEYmEG%_J9QZW@bwsZ1zL*5P9}g z?b|@m$-{97I8S$mL4m9C(hyjQ zV6*$UyE`yb2}(FRn1V?j`j|H!rU>VRmLY>TA zP=KY($K5X6crmmC$wD^mD*z87f-iD%ktT!d7Tlca$|lXoy4to>7#{iTM9lfz*|SH? z$)v8a;ba7XtHtHjC5mjIFTz9US<1yev7zm&eME69w(V=Yy3MHg4Uw{t2<<4y(Q$3* zl)0vCX=UU>`6YNhN+NxL%JQUN7c6CVYMvzSD+)~TQkgW{YH+ci07u;Qt8GSm1e zD!R?%J5L-C4nI$%+G6d>D+h+Q5kMRfw1tuWj|Xi7#v$BeVQJ}L9C@8hkoB~8Y*11n z=&fdF16}-;`Gk^i%YhYlXL0>JMVK_s-4mlbbGpOcfc(HKD4vG%ChAk52vSQbosgs` zHOX~w4vIW+N;}SYiK`={)~P78;21yRsVd>|F;OOKZAM-IP+_=s@I|DE82{my5z`eO zU?GFv6I)8XM#Gnq-j|?q?Ru%WhP3UK$yOBSfYwM9;1(9QSKri;x|p-l8bHoR_ssPfSK+U8f0kpuk8G+U10bVpVMk{ z>>BMUqwTv>7@2M5^%uo0L5}mj7Kh_7S$b)?aIILoT3%Z&R7Z*BDE_!HRWfCf6B>R4 zW54u`wT(!u>f4ja*Pqr4e;^}m}JDAEG0oLg?h$h*$h{}uC1fsV> z&Qt;wOGWRiU-qVXg(bbS4p_&*+SndcAc;qBc4)ejZhI@|{aqLS+CmF{Ow@R5Yeb0C z_MydP&PwReroe6R=15dAZNSKK#^O~`S)I4p?3|8HgBuICMm7VKI+=kh(dOBb64fQ% z>zz(ZMR4f)6bmWU165Dlk0nvJ)6$i&yEY80c&FQh%Nlwh1`$(ej^EQG;XiJ+tI*nJ z2cscx_c~~%S@AdhUdY0tG8!ctY(wijMuP)knWY0r#j?CtZelfw4^NC8bZ4U&ej~vV zkL&a(tyF=2E>uhK9=jX1v&VUK#ALyaQj$NRn>Z!Si#Zvv9e`F6C%<&fk6A-}xZRPo zGBG{{s6xS|1)5hm0w0!`p2_be^Y*w_o#g0GOay!?$&7`C$R2XuW?m`tUal-0<-A)_ z{h;%PPZRUbIKxX{Ha?tc%Y~O~E9J!@7P)c)DQSoiHj!jY#S77nS0Xwy5-;s`5&P0Q z`b8WT#gwl^(P-bsOd|WhnAVl=I<=s5f?=dp?L^KfSxpz#93!JqZU*d|vY}!wQg5Sk z$ChwuHFbQ%yl#{>C2Tf&fwna6bvk`+)0z%xxzYY|$DWVqlM*mjq8t8J2dvk?RJ(iL67J?%)H+V>%tpgr)CI?#ntNdNkv~N!mkU5R^!D%L3H%O zSrfJ}G2BTo6c|Um5*#c@GwtPb|skrT~HWNdnk=?%tMfk!G(vWOv)yo z={frR!1r`rdfE#bwjm@fC?Z@#!Kq2&V6|M@{KTM@`cyoVY;28eWtmB`F^9(2J?|Vz zO}Ef`xQV;K7(aDd-GR^$y6d%BfQxrELRXIMfaVqvV;#zv9VzgBur3|#(HDn-rkCri zfWO_5GS!Skm754nkJf-94Fin-du2Lq77Nw@5cFjwit!1KgtUu0dNYmo7y>os%Eg+% z1kaVE*Cxl4zIP%IfVNINYh7`sLwxj1RhxGSxKt=jbezh@vJqjo*w&^GJbRB#L)qYy zX%^-ka+qX_ruzI`{ww*pvsr}~bbf?UE)lsV1?`S=DO?z*OJa0liX!~nPwby&uobk~ z&Ya^gH7(;Dl}bVqs-{ zbsSv8jgPfNC_=&XB7K^eMpeyvCIY|NAUfu$+jB|?=>F>D&ws!_%{%p(^ZB#+xmmcw z%=+DMRt2`n`>iAD1DVuk&Y%CQv(L<(edgR8{CoD<3un(#IsQ2}clNL5o_^;1xo4hz z_Sv%+{_5=9xo75{{VVT36d+|T`rrQ`e>jKWVyRMvZH(sqbYIQDJxlb7h1C)UNUUT~ zBy`bKnNlR|^m7?xQZ_T0{Oa}c$}1N=teMHcQ9Oh8olR9x2d<G1& zZ%=mO=WhRp?I*JTpMLt;xjD1{&z+`gCZy}7S`_594avvXhZuJ(e!t8_N|w@HAF zmnypK=Dbq7p3f-8#2yfG!1z@pUs0mfp$#GPM}fTtZDmN*MU7OX(w5d?WXM6zQXDY6 z#BQJ`U)ax4NPoQU_Oyd}tJ5GwEb;$26iqcdcrlKcGlxrESPvveLKO5UHi4Rhgn$;d zUHZ}D!tIVuH{Z7dVQdbX%8crzQuTUyz3LTKUh!TktiiRY`bth&_EA=dKF_T$tJU;x zU$Wx=V>lF1Ms=HHI1NlQTmwnrxm;XZxDG8Au9TKa)mL!RS4-8EVx{6;Ew6b6RQ?p! zs-=bXrNWxGy1uqrt`uQ%^Oa(iV$aQIUL?WuWp6&})f-`NKI6A)wJ@q}wFfmqn#v(WwYDTcQ_z*PpCvEjf?RvRVjeXMZ z4Mu(OVsQ<%8QC-5m%e1bTv%UQEUk@b3-0iVF>QwU@3(1^IJ=sp`>Y|rYjW|vOjRjx z#_7}FVuvevH}h>=dT!S9{wC{Px}=|;%6dV4yW^c2)%Zoe8K4I*B^SkK3ZH&Tx1;`? z5?3!7)tTg2&KP_8Q{MAmI(Nx#Be(-NIVa-_BEQbRw*3gdzufNdbL6)J8trD&--<4u zK8--Xx>UGUxull;^mGg-vJT9XEm)sh%OC*N?c0!i>c)*%Z+JJRUIQSSIc!9iZ``ma z73=C7-5x-5(>wFm(T(;Q@08WJ3(mV9Ubap}v!_pQMEKvU_?L%&L6@_$Tc^IE7t(-= zkp+6a8Fp)J*sBI;KnS|Ee$Nk^084M02mLLDZ_TZgp+V^>dmwZ9r%s=qorRw1vu{hE zu!W%}!shg8ce`Bi>Q)_jwCmx3>kX)|u!slYW!R|S`Y)C1 z>eTsi{@bUg@kOmtgp;&TEw5!y;XbQ3GU69ri?(Zvg=#?ttIFU?RQG0D9`MU{P05>( zQrWImSy(HrR?{k#Rw`9Al)GLmEEd*#^?D=G>~(}WTns1$_m6XR?>wK*dbfZLdW^&;xK`QtTcFt6K zr8_lBUsB_!t3eHk@I)VA(#T0_chM@}Z;Yx1NQ+hnBdhd9vOT&|G}!WcqpOHSdvvA$ z+QG0HL4PFd`b`>5+B>*mEf7TPQCtmshAg)wgxqkzTBt*-Y!EY%{1FCAVE8!vnB)9nOrZ@+J~?Du0mLqYO& zvR`;X-I_=0fHRCE7->b#BVm}|#*?TftBK*3T<#uvT3=m6B|vHAY8fp#%#qx_+wR<5 z0S1Nd59;KFb6H`>3^h12BO52{JwMwBZq2p_a1lKB{FiLzn}*Z(x3+>tjTHenWyYrp zqPPqke^!BiW#qu8rBY>;VK5fC!!`jyMK(JKJ(tUCwS~gMb+VYDx`|S#$#3x2dbNzZhMwg& zm+EaeZ=U!K^8c!w@3)1QUZ8@PUYO5ZDXmD){A)h5P*|-km98MP=GAW~U7+U$`~?JO z8MD_@fjmGt-(awienH9VDm|{Q(r@!#enaUi*J#_nM8)c1K7;4B3`>4OnSgMC-4Z3v zELBN;Ltj+neFdLZRg?4!N|u(Y{P$WH6>rvh*(CCMG%%!7Rre9D}d1ZOM zTH>bVHE&{Sr0sWfK zTvau$at-y!Pof2T`4uLC^Y-(+_8j3knWy=T;b7+Fr!G?r-@N^7-Wn!vK2~JvXclkY zEwO4;;W@1>=f!+xX%Sy8E#fb|mhuzIN>^lV{EJEea0{kXp6E^a%GWAVj6bPN74Vb7 zBKfJy@Mx}BFX$QHu9mrUwG2-yHLe5y!V{7fm{V1O-zmWN*OYWhenMH*9%a>x6DZp& z6-3gt!rCh}{avyc>b|@H_;|fsenItX7tnk6rTwO~QmUFa@QRqZzZKYUSB*xkwL)M>Nl3Il&%(mlTehvDS-F5RfwORm!I>Q6(V3O%lHfMwaQQU zYd!<}7f%Q*lAly2G@gG!3Gn@u%91{k>}PnZ#!}`n&_B2zgmsp! z!`wXa8wEG@8%u4m2EVgQpvDW=tbJ{s>^C)Yz$6NtdWt&6ismya_YJ(FUr@r~lxoa} znJ4RwnWs}?YUue|&-0nJ!V3Jra{dJ+K!;1qMLj(Gc|KDyEMrCSjFsX7u+*#87~B$5 zLyf_H#9zfl^S%Jm|1CG-QHksY9C`~lBQGS#s46TN{m zV-ck@)tY(ll+9->9MibvZ$$dGi!bbFe#@5;^-e33;J1BKR`2aHQ_F3`lt7Jot=_Nk z-9Y_TrHm!&w<@*xPp3c>T;k4#Z_OjWLz_z!U7|Ufytj(D&Nl~Wtt)ToVP0-{Jyi-n zxopt3O6dX0we&}%AoM<7IG@?@qivKw30SO0ct=jzR7}6-SA9Qr>TS2?g>6thDEN|6V^r{+3@4WovGPJz5%HZJfJ1Y z0gd%IPqsEPIQcoBapc?c<_X_yc62fQoVTRHT&$kvGg|&V&%da|NWACG6TCr*n(9(N zNI5jwciyRj`3#!K@(cb2B{$)pT9=CW=X|CE6LTiz6wGJ3eoJ2PFDPkjsuKDIC3?Bk zN~O!LxklO>_##q`M$~3+(6;AhJ*T#j{NK;)>5;AjkLa`E1gQ{ z(Wi{wZAz)#rbrBW#tcrwI~n!kV!B)~ zA+Q!pDr<=w&J1P83{J3X&ejyoGc ztrxJOGw70pHGAgLxG^8L2c8n)L?$y5#21GtL$r3IhH{VfimTzsOdS~9YCwq|FAm+o z2k*<#!srg-nw-P+kk;bGOa|S+nmb~X%IdOpx3wQcc`DRBOthz6In_eD@BCm#j zXDFBsO5UN#Iz23?Cm`wFz~g@~6h4$?&=?GckIQ;xy|iS+>bRTJXCt2w@io6Mid>%M z{jd{xy~q^d@;6w=qPMg%AUPAwzWQ4J)xSM``o@i?UYorEf4(%kb%snyrU1ODZCJ=K zQ9C%*%V+G-sSSmrXD!C%Z;-)C$Po%opT=*9@>8d$Pve_Q96cjd&&ZaeD8MP zakSNxdfp6$%WHUF@Mh5D(VKbp>{;j*m{hO6-Rd;F!Iyit?|9$(ws+%_?psgJot{4B z1Z2uM5a#WD!P1V!2UqU`oV#nu2CM<&GWAa3D#+pg1m>p4rPpnO5s7u(l(q>26iOSM zRDsX2o9>WKQmQ+>$!KvmXUNil$d~YwRB+K#?jThu>^lYQzV4iW4#LA{-)S{l!Oq^x(k){30d`Rkh)j%HZXwDgb z*BjQbWjHdTdAk-cNPfua)O$1W35X2`S-LBSSagkU_c{9sC92Y&M-till>QKiLnAh#*mssQsN|&IqTOqek{{lA5$DFEaR|`v(;yk-n;onqUeq79uWalEK z`x5FwKQ3l6F~VY(V8_;jL&WqzVuZ>n;j!3HP7C(fj4_M(z#6MlV0{4SVm);mo91hH za6aZ|yLMz%j@-JDQ&pcdNld=zC2%`!u~RC!_~8xPBF^pNVglXVXZO8A-jwS}CPT1N zFw(F=mTUSI>3oX+t*fMiFHBsa z!#TYAbpFCub5G}=d79$!Ut3w1xO|d1_YTGUz**|R{pdhf#<(oELrQDR>2Np(wl|H3 zXk{mQ5o6ZCNTPl=9@#se$*+`)FQcmYV&+KvKjA4KZMB+5=leN<|L27Z7tY1~zvt%8 zo%nw~i9gSM0kikPx?jYQCWAYeM36T=Ja6>;-cBZiUYy3Kvvg${o_gK9ckb-jXLI=X zS2CHxpugS0i`k;z4uht*6ue&d+a2$@20iDS^6dA?p)BEq5LfEh9rN&=ovb&H15HrAi^Mv*T}K8>8%bnns7cZh4r8vQMj=#mPFeo zX6Z2J(o0?t;%3drmiNx(=TuM9UJgAer(udPa+Me?>tV714B4(@zvPoM->;MCFc(qn z0y@$GG&9ZtG|m0fQ#pwdu9;N0Dma)-wT%FfsfmebF`<+s@1%&3y`Ub1w=mZ(d*x2P zX5@uS&boaIikBo)c+R_x`DK->th1V#xX*FUyD$e;{Ps;iey`Gp%Fw{oa1$E8+U#_C zIqwRbW>|f>;GG4sbarO$>9cd*dZm!b%*+4|KlcSVU8=9F7AZGNyASKRx_)J;w4gQ3 z-m6%vxKc$(M?pYoCE0$$J7pB#v+$~h?}!4QdOq_Swyqk5-yUqHP90f>=gFcRwpKrQ zKE;^rxmkLHAI$16=zD0b1uG)otG4@LzZpCaG~l^ew}`6&Q*x`*Y!6z`Kl|LQdC+aN z!pItx=e;QVBWY?xU(Cin;Q|_!3=y@mjqsM~0Sol_=pm!ubqBp}Ckj;OOvLJnh()GP ztDkPKG zb^1HWd4riHxHD_S0pK<1WP2k4}5Qwz!p5t7#PwZgM@tEgQ!nIm0d8`tI?5ylEs8&fl3 zXxEe@yf#p^b}1!q=6jF${v!Vq_LJ+KKwZ0)S=ETnZ0^Gpncz~gD0`2ZY=Rp*YD6yR zh3|@l<%325Nq_|Gc$khs66ba?V?cvL*5cS&82(<`lgSGz45zi%F+x9QTXm@yN3GRk z9twynoYhIe&TS;e$()$$y4i-lZmTeIlKWiN3aUwalyVfaSJScvc_)yZ3nR`;B^ABZ z(qfcTSzT{QYo*l%MqSGH#F;B~x<=I%OQ)Wlk8*c}jALgtWe_MvPGCg=ajJIug{@ zPGf4B$aIAY?E=L!=(9|Avox0jsG9Ngk$xa+Lu8pxJvyG~Yb;bd{C3-h zThOoDFvDfG-fqLXS+7Uaw(9}M`$Ul6@o87+K-X%n>JR{E4Z+BZYHh{p5#_HyA)cSg zyo&RlhhxjbFJ3!M4We?K;gOlj@Q!jxx8Mircj2MikLdR|;CHm$qTil8 z3&PV!0G26JG1{g=xUq4Qn2ni!V2AVrZ7TW4j`Tl>dQ%zv8ZdK;=0xoxF7lIUyrEx1 z56(-sx)=Wh9{}lfAQ0yzt&|JHjKXzEer%IBHrjxr0WMy2QV`;V{bB2onM$lj9fc%7 zE;cfmDRkxc2!Cd=+ALO?<@KRgZ3 z)Lw>xa)N_Vo$cvIVtfOwsiV+*mf!$5X}sU)+`;5FKrWD>m&2PP+^3(Xm<4_3Z{W=3 zP|rv-8lCnTl}4olE7#+#$*i4w$O=!(=Ovz0m^cbJWay?%NfN07eQqlCb)I?CkgpV^ z#KZWJ+%VNgNUk!9;NdXbvr+}B?mKr^P8h@?mib0H=;rZ|VT#$kb>8zEjb0F0G1G(o zpsS>20&CqMPXh?8@XK({rqi|5{c|yi7Nd7gBiIQ2c6{$3$+D1?D=9REmyD$rTB932 zjMW?U5mktNIg(B&7W|yPq%f0hOIkN!El_3RFyI=kr(RO22pkj^UX=2V$cspyyn4Y= z`J?X~c}_0x6Y0gpL;;$x%DFU@z;*8XJ)BNv3hABf3~7k6iTY7rw`Z7mm7~>a5zT_4 zTxKdUlc?Xp>t@~n(!SFP5K3*f3CGKuA2!hl_I4^<Q4qwmP)m}x>{WH?mjo;{&A{$@jrJnI^0;=A9+oy zF#PqHuRZU@;jd?gj_t0@3#Gv;*YIei=yNk;zP>wpXm>{s?Zvdly?9SNw6*n>6&e{n zVD{;%dK&-rn4z^h8mW(HVs|Hon&1-6WPI(Rc_e=@JV_WYQW+7PpG#LbYP zRH{}@kTYdh-q6y`*tJ}7y>LQEnrJ8QntRT%@hqkR#}jCSL;?B|7ouQEN!F)gl5oSg zqdpW{wRrc0jC{%xkY7j$$Pr|2Z%Gn2IZ%<{BgLBa7BK}!X9pjQuzSeqQNT!{5iBDL zjuWz1xlJj-1`3Js0ygCexah4V+fu0@QBd8d><2b~MIKi^&|57RAzqm^VtzAirHGf7 zp4qeen#ge0TFXEegi&7j8hiwLu_nZ;Qx;4gT(qOLVlOBr@%D!y8MS0tLs%?aP1nMzqEBhECNR&-S|E*3*`3a%b+%{Hd9LDh}^ zge9hucTq841F~;XVnnUb(enh>(gHUbkq+lZiB-(0Wb=|EDM_-hV#+R$=cs~OZcjrQ zK}M;y)SKauOD0?X__R^zmV_jYu6!_K!z`<-YMwGRO1?-xl0^hilgRRRCx!Z<-%h&t z7-fiNG#7`HF2PixQr@dGo3e{v^H5+gi{9g^E_0zNHDA?LUmH*7Vj!)K-#ZSC#_19? z^&MDV<5kCXGy^@^<_p54o79W? znxHu`_=JQ`q!y+z!Y#oXB#;9Gl(4UtsoB{=`R^8tYZMy}6tmORXW2~Od-{l%3=PU& z4}b|>Z*TI?aZG5X1DsKaDVljn*oIFtA4yc*2ypWdPX`ptx7D90ki|{^cbyF{LZRKD zNy50QrEDH?)XRv6-$!H*bqD?QEd*GK7TQ2G25^_dB_rV(@wUUe9keIy7|6wdSfsIp zry9$S$N9Szd+KqAa9tt8DDT#svJ`6ao{{RvF;IOm^f(M=T$8MyNfVDT7{U)~hX}jp z1IE*KGuL~CK$4G9wi)a6)wM<`PK}v@Ttbm$zAaV_ipFEI6WbsFb@;X!hSI+)8xi{m zPUBRQ8$VJu>x}dxP_r3%Gn?vx1LW@G)@<;?IVhTubxh#rmT({%gJ3cKX|rQB#aU+T zg(my6G(e5+Buys*tQIQ2ct-;hp|jDmwVmPoDcL34R{=KQ^o*Ka&yx6nUeND_0p}PD zdrIJ)x)#K=lGFLLT9&yiI-Rq>q`f+)L-OiJzuu#zvCAD`n>xKoZuoq3MM7dN+S>1- zxdm~QI9o|^YLQZ$sDe4t*%o(-dkhKeAfgjUGxFBrGRY%tBrCV}gGtiOFn(B#LUNNw zs3i287WW@9u{RfPLJZ3h6Hj?mQDGkKtwGbrSz?Bwh;%{LtVe7{H40edQ?Li`Zuq@Z zX=^;?jM)XYg@R;i>z#p?&Ja4Df%eXjG-1Lq54>?h@CcCXRi$BhZB!-Eb-XsZAyylV zuT)%o?NFo@H^wj|PT4e>Dej*~qhV>1D$CBruXs}_{wLaj3wICJ`1L^4jd%l(ZD&u= zFW@}Qfh~Dv@>*WwOS(-^jW~tTRz5YSn4%Au9z0^Q?2rVD4c|n<5ewC{=54o?kxwg$y_A z5Q(i0^K;3DW74434i6k!=4LjU9iXd&c0c6ZrUygHU9Lms&Q5uXrk1OQdhGa2ADp(w zPvI)aX`HbcnLfHB28~mstvcG1N7zM4;LaE9vHF#SCaWLXrqiy8evU!m3JNV;ajRQu zewH95?27VQJ`W#druZv>NH^$_U9-qLQM@gtm<<+!r0dRw`^!whRc;U|xiVd?xM_8x zo19YchbgpzcRh{PY^Jh;Y1_RgkcO2 zhuv`*EV4oCU6@HfkN*rmA{$}UZTd#5g(Oe$4SMAHeRP>8Gup_zFn4ZvuVPMQ!A9f@ zMiNJ-|)m+%_;ap*F zUFiY2hP@*V)zypq2EUjeYyhzwxy1#rqOTAkoB4F7rnNDLd~G7x~Wet z;WKq;y4l&XM#<#?yr5?Iiy|<&9(oG?N67!nH@>5G0Uz!EJ$K>h3v+S*?+Z}v#Q*yV z{K=d+fS)*kpE!U&IR|h&MmufEy_e<&&J}7ZJD)g%AF%`ZINx#GaeTbrILTQ@yN=Jr zEaUd!^{rYT=lC7<9`W6Y+MstZWDaR-d__lZFVuf?6kD9zP!(7fae1m@3ztlwt_oD+W}m0@rjvn z8|#K%a25j*la2D)9jy!*vt5+(C&hPuLO0_w(=c~@>WY9P(Bp){CL5?46IpBqPV?uj zgxt?DRiqsxKTYLXxAt>%8-<}e4LJVe^rwPiJruVy?d}re(+=|9w6a$tNeQ`rMEwRH ztzm?M0v~nRS-Wx9I~|_mLwIi1o#;WQuj#{40bvQzq0?^eNZ1M+Ev6&3=Jgc4@iaxr z=0BV1E4p{|)0Y`0bqG&*hMHs_{S=jg_cNcPK5mYFj?(mJKSzC39{n7ZN!n*U$ITpU zNWWd*Il4)%lf5uCnuGZ@2d(zZhL5shR=IsP6TPY?IwO836L2p_1(5|jxPke{H+V;+ z^P9A+2plrPLM4^fLESIF1 z8%@CK9XGsXB(C11g~kHP2bi2ANZf858V%@;T2c&S#O%HWpbyCuA#4So6|tI>5k6AZ z3p;hG7<>N=S{rQLAfxh{!L6XF%ncFQ(I2$!G`JBs!CeTrY|JXnp(?hwMe^UziglUv zmT*)+rob5qOAv*30L|f-1Q9wp&5@-qf9P%kj$%?ZUU{ge^H$51(#y~QUdbK25EuRCam9HK!vYcJz~*Kj@D^6N6^Dl^fgsK_=2 zhrJak<1BUbjzx|HY78+L%Xv+G4Gi>k$d^g1-w>A9BVFZIGc zbnSI|;a1qD*cW7;!f}@*wi!^)m=qsjU@Iwk#!DpB?gbROsm1OrY}q4;002s>JFqj` z*knRYDZVF6!bi8VfDI&+uK7v#+)!=sKJ>U)ywSOn@AS5m7BxpLeIC@WnYj8jL+V%3 zS7u!GYbK_C%^X7gnn|i(Gy71#X7;Im&FowKnnCqz=JTt5{haB4Z+2#nNj3WHg$qOU zzpO6R`rivsK6my4#{a%>qW^vJ>#sr{9H9}w82$g#&ps2^|37{H{Dl+!|K~IQ`vUL- zZ48^`E%h5{12A{q(*7q8!<1w2MDu^5`Tvit`LALMX^yr=F6S@6jQw^7x!gf}Yr_w` zS2}RBj`$(J(;>r`$ZuhZY=O@%eEiXB|0P1sX#M|%gX{lI`=c!Yh?FVmT|B%6n{va9 z)m;stFB0{a7recDAM8DR_wieA?Y;NOVM4|e({8C|u^VW6_h0{BUp`W_v}WKqmPBY< zxO%c10EU2o4>6dYA=7CQlJNRuBJ!En<0rrO-W%TD|M}hHzlVp9cJI9@FF*amC*IzV z9_;<_gU5gWK+5*syYHRb{nHz}f4aB#;FH~7KJa$Gdw=%_4|ad_L0Y`yAr|)pu_3b| z=p_d;%8Sy0W->&70=97NRb|78cIYCE!l}((r!{od zY(CSkEyKf(Ob*sou zOa>t<@HyV8`;Oe!X@!oE#p2b%`ck#Vxg_W9)-Z>0r)PaVXm@+zEqK4>i2R||)OGx? zvw6lwyq3%k8S}6Oofz`4))P;Omg&L0y+7Z7{O2sTT6aLx(4)-leh*y1~)G^@a!7OHf?crfR+K1Nh$FyZ12=OKJcHh6h`)fGt9(@d824L_0%SWEO?M49Lh^Iex@<$k3kj~*s3eP}?aO~*c_X(WF zjBpr`x*RO2`=43VrSg@+679tpahZT-q(pF}6UZh+Rx|0g6b>FGxS%&C9PqF`JeFjP zq8BOiJ4#w1DSp%9YTB-Q2z+Cz2`TaeHiVpi(aEd8NCy|*XW%P zC5ReA^v+<2UZV5pqJ`+9NAJChsH68X$}kvXj&s&IYyHZrv)1(w+^_EIyRW@JyV$aL zbJIQ&*Hb@B3Y$((Kl9w*{G)T=s%YX()#$+ZF#!s*3Up4cH~VQA4DSKMpUp0zZa_JZ z1FW2=+V){VwWn8CE*QGG9l8O86xbKi2X;WZSq-;|Cl?)*?S?+y$gxIlK-QD8I&~`I zZQjvfd_sMDt!54g?u1RK)_USL7K!_I{@S8KO~66n@0XPOeBF*t^cl&%`OI`eZ(|1^ z$YK|%riN;}Vk4LVsXwYC&C_goH2rZbQ|i0(i?w6~m5*ZSp|QsbWRHLh2MI`PK?3q{ z#p_b=0vYhU(#ZZ;$bN-Arn!8>2fTUuO7G5)_N&^`^aa}5Igvf|zU-q=QufZo-{yA& zn%lWF*}tkH>ki?5kJ(yn$Lho9L)ZNoo)3}u!X{>X)rM_MOmCd2d%E)r7iPjkqR}j~ zm=cApWO6418{TP9+GGr!y0gf4{OGWi(bprm;nANz`(|dnQOV$;uZ60bB{akFR!nzl z^eGcX`6q)D+=4-R>Bv@3{>JBKPrAY+&=&{OwjOuuKFcxMr?r%Bn_P=}_~SM^pH&S6 zb4J=Ux`nefQOlx&kcTfhZpK~^L~w2iea;ak%~I%U@VFqfQl`*J`C$REGMt?_{aYnu z+2?&`Ag>Mwzqp*8<01~g}7&7RTz-QQOUDc=Sgo9 zBQ}Nxf3o~)7uji-P4#_U%ZBU#6y;-7dTheSz;e&=u={-ACG@xl)CqrvbanxPFYg`X z#HTCBW7km~_3;Dy#B^ok7JT#1>LG|o1uDSn{_`-1iwL>ISzXB}u;_k#pAt`Vmy6J| zo-e$9`%bENZxkLU95&@Vl)JL(CM0xqybwpL851+`hWY!L9I6y^T-n)d@st3WmNwBb z7R@1g0KOm_Y~x5E&1cAM(@H8EXE-)6PC#)vIEg^ksvLPh&ncTK1%e#9K{kL4G#f@- z1XHLkHSd1ar8N@%`9*wldaF~{cjak7x@~IOkTKCFIH%v>rG+N+y5#qQ7g`oun)0#p zCqWJAAhJh`0M3mA=PHIYObt#lgP0>AARx4+gXje_*O;V+Cn?BIw^l0iypr1?*In1# z2$OF55g1I8fZq4Vs7XABw+3X3 zx&=V-;|)2vb;PY|;qxESGe)w)pP^d_$mKgDA)7j4D){5F70hKJLsNWFM#XHdoKPtQfca6j& ztRRR&@gwwPRb0G?*Z-k@IhI4I04rWHEr|~+z!MbHP@zR)XR?QhS0dM$36*_2?Cc*n!pg@SjSOxED}DDa z8jQBWS*xdi#|e!*5Akf4_?u zOeVnE0F%nBNKLQW#1*g%zv*}*IF5!1x!tOaHHwz{79orw$key49OITY_ut(83;U!{ z_7T!nT7q5U{EWQBGS?$6^o1aBkGgE%u;+QQfeffNPTIoIfEnu!Y1O~o{cGrKPe~sKjrET;N@l11y^ygS)n2WJQsgP@F zXW4R$QN2nvqm8;h2o9zK{QIWGhqpH4l)YhLmzZk`#Tk@mv60_JO%m$zw;j&l5+m*1 z4apOXDB#<|Snq;uMjebaCB%rNNOOd|I?h!jeVgQf!=9-q+sC>GW%%{A&1Y0ZNfu@d z(&5=!0+nJ4$Cn%L%j0udFgrJ@mZ7H-E8AVaGIvO-J$g!&%b*e2$K`GE^CqrQiy&A& z_^;dl?kQ69Nvu4=FgBVT_EWCE!rInaCW@}418w7``vwe#!<;YDJ1Ii(nE`iQkcvuw z+U{GdEA^h2-H7IA17tY1ej{3l`ODdroPdEJ5?z{QPjqs=H+@(5vxaw!XK<(dX-a1> ze@Kq;=y=FM+!<4Q@+j9$G+9^y$+vlGYt7%hs+#@$8+;lKp^ytH9FyqkO`tz*Dr~~P z{))hmx4mO__u71SCBfn6tqAG{k4($=Ls6^Vq^r_kHTIL>lhj}$u@R#SHQe)^RlvlbZaB-1~7)yal<26*wgM#~y4gz6&a@>Azi%)=nCk)Zr>%O3* zdvK|tWmW^6DeM4l_4`c|X4mskADEr!4y?=s4MnsmbzOFerAR*6UJq<+b~nRc2rCOE zK+8!lXm8&YTkqUe-wvC|wVe5Lb(*_FVWYdluRD<4o2S7Yxha|8=VPU(ax!?&|8tNm zcc47o$NL1NH=NAuxvVTiEP)GCS|>-T)U$-X(xn>~s-^dQ8CCH`7I9YU1n8NeE{o;}bTP!M?r@W$WHxyx)UnWMCTlCew+J|Ql4>9i8YUy~zQTy5box$Ltp z!&XN4*?Jp?3~7IoVlq(%J_H@Ue8kiK6_MP}Q@r@%TN#O=yaSG=p6K__sXB2&!@8jc zs=w}<{{={nui|Xpxbh1;=c$%5N$6z;2v?-2FpEcB;io-aGrRpB$J#A1d=X0zIozTh zu!J)DHHbZ;O(kssy{k$`Es(M*s-*CU>TXr zt|Tyv&yrrolLJffdmLPU-JW*XWnZ_!Ypv}1r=|cF5Ai(WuczGHWf@<8;bohsG{>k} zGgBlMq+m_!{eIkYYX2IUKU~A%Kb2g1(lYy=sonE8gK9J8`_LjR_ty8kb+r_fGqk8C zC=D|e2N=ys#P2nR%R2N@0DslJh54neoW8TOT6Yn^RN9=}*9&&j8Y^7~pOmj?{BKDt zdVTqaStMO;T69THj+XMspo@I zEc-6<CF#oR zmoIE=0C1 zOc=rXph+?e<7wy?I)e9IUC-g?f8>l_56?lRD;lr;TD~?>TR#sYguUr#R-=N|1=8|{ z4UeDS;5YQS3$4)pcfRleESf}b;gg+b{evwp)^_l6747uqP_dwwn^p8fLj~}PLur9@LLy35n<}1xI@OIZWBw3ZsG4PPXfER4f_2v;->k0 z3}aL%jBj9`ya3R);kf6$g%VEc(qYSMbwW61#-R8o)_TEkJp5BVYk(fJY~3EQ^Me?= zcP$pZy-;Ybp$t`tmRe|bH68MDq$`?e6wjSWP-rq(U^|T$-0t5OO$3U0jz)g_9g3Z~ zP)h@*#6(3tF^mljW~JmIv!^s>+6z;pz5ERT&xmo*s6Jv5Y@O4LNHA z)VaawIf6Hae(Zp9dVQylrTX%XEojW#N^>^u<#pm;_U#EoaJsdI9$$`>x%Ne+p6fa{ zccOpJZj&9^(e<7(Wd>?k*(_Zc+A9fY`Ivt0dNXKLX~GC1(X9mDE$mSz&muS4i@Y1&_UqSo{?>3` zn2Q2w=7azNLn3+Y5%16`aOIm}x^9d#GIoCr(U0zZAgKA8^1C2}$Hx~#=q?;^gXaDx z3X&p(=mAytM;$F)Vmu%Bq!{i0mvje4;_y{fxikydeXMJn2M=$MMKQ{(4kK^a!2~B8 zo@w$U5MAW?+=UtoaAnZe>d+CncQ9i>+bp1Hrb48S2!LB<61y8zZ z|8D=3D2vE3Q6;|aR{*`A9r5dGR+dmPm?WT=(puRt!mVu$%j@La{^ARQFOdnRQHA_d z63f^2m%MH^8xEz6)BWoIrzCw;tl{+@WMzAkOe5c1At~tH$LB=RWC2-*@s7!_1UZQM zcoNEfiknzo+DyKslDID>0@HRjAIb@r_w#U%8i0@#APYXuz8?}4{3rmBb?U}eWwQOw z%x52~VC9xnT}1$@hr`7rSP7-dOqC*&fW9Ung7<;MZV+!_^HP=mf9P(1<``eMwG4UJ zG$ng=*{;V8lDgq9sC4fofvyto*0Obu%8{Ern~1+=R3NNv#AN}M2nTu%Q9gY0iY}~n z_Ar?S7`jc!0)4}&&Y1|@)1KK8>CJV)XtggnrwAaNS3J!Pw<5OtY}=}O5wd~75NT!3N#X;=p%bMUu zjF{ku)dY`MDdr!P%Od{}(Yor8M(%JMIWzJuhfZ+xR^#x86G^&kWcG=$^ZtdqK@dlb zScmB2xC2f0c_Enh(772K*C08oR)g)G3y7>;tGvc%R_E(_X`>M|dF^qI9R}6WeucPK zZ>J$a5eKGO)Zdw8^)c`)A{+HDHjvZ1h5F=08<3#iutV<-+J9^g?-p&F79NR7-tO_s z8YkX~=(i4RgE@VoqckTiR`<%;1{BF9m6+V|&!!o3Jtnn7^8h zM3b0rt*KH6cKTHW3fCP9^&@{Ez;G`RdbycgE%1@Q%Lf< z@L=@yY_v12nLwFDX&$!TwCSQxg?PYd_ZZ#Pu*A{H*Tz$jYU`G2`t~CbqEDqq3!?$k z3K~-->nvbMDqs2{bBQ?L^>GXfuwgB=qPbKB^s3u$OtG!lY+df$s?_LBa~ADHdJu`0I()5aED~~ zr+9!u|GJhEWoPW)y8(zw4Hq#iE<_gi+s+Q%ztX>+HRoB8W5mwW&q~Yw z&6mC~MfjmK#qP#Aw<@~A`KwO0b)gNTOd4=uUxoOG2x*b+?C1g^jZTS>0XEw_cKN5n zz26dXaj4>Y_*1hn&E%>QXNy?)Sg#b63-nsVNYi=4ObR7lOA5S}eVGPiGwCSZcht+Q zd!oa_5H@Qh@Zw2`{jR4_7ru$f@FA2&UM=&HKp3q6xGIRGb6t=E*~|j}&*TapW$Yf9 z@CKgCvWXsBB8X)OtO5xF|rb&!xQoDp?CTq??E_MzgJ?L zh-WP?xHS1sU(T0ZHz56~t!IIN@cCBdt+Vs_%=l8XJKibtl((E*=I_|%q6%O-28Z(` zRFaPLW-CAIm~n+yO*7oLl@g40L4kR){9cL6IJW9Pax2oQ;m{zOFIcD>NgB?g_E{XT z{<)&4bnN(XBQdD~)ea<$NQDICiU|31TnK*usf0sd;ebRAfwI3So*Ch(V7HaJC^Z<*79p?DV4e6YaZ;6O;krD_Mr0SGa+G+` z#3|Lcf-;*Z`cZQWc^TS0y-Gqcu!=Y<>GG4)r%2eP^nk$SRBRPh0?lX-Gboa#pmsdb z9;2A*wAu8&HayE=O}zMl9PLj1E?DPGdNy39x-6{}>S31i#+1$ssy1KZ_xgWGVB^l4 zl=j>QgJxZ^wbS=~q!`EVwp>{kv#R;gZn$)=k8X5$f~g9LBpS9veb-KQYXQohHARr< z!z${}#4=DT`}j^j00@E_mkc@YLNeOm_T!!NiZ>cg3ghzrIL4#6BV~KuJNGu@jH5st zNvSav`NP0#EIZHBKs$=t7EcX*1#XjM0z?q3+l;8=X}eH><$WGsnwD8??(qcU*dPbb zco+Odz4FTnM}PE|aK+>AP}fV7^9)?p-Us6eWx z=n@911v(3?=-<yzNqwI3)OY` zdIdxL)zNO3rEFXSmHx6PAC(VPQc9)P&>-X8`M7x{>9>?$B=1SuM^-oX1mTe2sNajh z!?wMrD6<(jsvg!)9Cm%@%Gp6Ry3io@z-}b@qnvQ}gLm zwW*sP%C6B%#<~To_Wp?2^%vZmz0{fPJ9K)oy99j1?6TLO*4DnqYF|qU*M9t0X^{KQgY4|dY*EvFL;Er^Ai=q0Z({TTLXS_2pD#jGR1zOT%axvYuRhDz<~>? zB;QSVgqAt0g>{fLZF07GsO&w?;-lL=azka@UDhjkH^CwTWF1;MjH9d~}UL^#1vs1uvKtAj#@N!U0ff;RG z5a92ehx(Ls<0gGR7qU)9+Y?LJ)0NVs{}cIkSW(AZ zV>h-G_6)UxZPzLL|LU(TZ6DDtEtJj+^t9>Ot}EHR6vMVg&bF_*&0m|9wr)3si~X@k z4eK?EfhBC`8nE*YUG2&2b3}K_(U4}{yGXP$_iICsD2Vnbeyh5Nmi+U;IAlyfd5%={ z$n7r$`n2s^xqe&}#gN4roc(G(`MNDdl(ydejco9eI)*|D=lxfl61&v4-ZHehBC5<$ zg9a=t7vJXh*P^~<^r#rlM0LSw%4}3~ge8p`IRC=3?9@jHR0z-7IG?w{7jHLj?w+sm zyEc(CO(sgd=$*{6E5Y8IgKog5{G`jLu=BgdBmnZ#mT687DSJMY0-W7uOWS+}`t7D(Ix9ukW7*YF@OD5gG=6{LWn1C-z{EpyU;z%fSw8fCk&A~nN7Od{+GLpP9fHp!+HMc>~<9Dze z_Rh$1cENp1JeoTw3`_O0&x9&qgs{|DOzabS0mR?BG>hRW)8xnhM1Lm?K`W`DSJIM= zV*v)D(+Q!a_OI((G{S#-L~#)4MZ-YFo@l|f?pImzXP-`@6kVtkL(Hut)M>p^#SgMb zN2Dc~LqFBOUZ?(b9O6qF4AlA?yt5ft3@gw>(%edIuxBFS>+1`Ld@R=>Irv%ZGfW8y zEJn)AAq$Q`NP{EL)ue>Zew{1GX6kK-g7}`FHTK_?!z!_@Q`_aleiixAs(I9;d8~N; z6Y=IA={{TSo2kmp|As#teXrs-UD}*;S*JC&{<+bPW9aqGsaI&@NxHIe<2B}L{oFCM zB+u9lE!*(|MS>2xeRQ<$y3iNi_`Q^_jHG1%hopa4yQl7qL)%p+Ur3T}OblCLv7Coz z7H}IC%&Fm0n@f{*_-BJZ=PQunfn(hXu8ogoU2a;K`APlw1E+;qup{r+&KJY~%+}UG zcaEk`{4KV{(>=9u79_~2lTSaT_fsmu1$Sx@0Ci_hqgcApwrG}?|3LDO@jgA8Glo)e$u|f0(QCML=lEo zC53_<%W^V=glaVt`alVZvQbSeBtYcA2I%F@3xpg*;2)$v@mz>1>WK3QdcKp;-}~hU zqnF)+=x^QKcl7Lr8qs1wkt3a13mRg-X+TyQt6*{_UchIRXn4KwN zBS?E&iC}tjw{uWWImX&To@NtPsVr{Q+3ULy58V-?q@fSd|AB();Y&144FFa$5!&dYA^wJE410<$ zS`~+K+xz4wimy3;Q}1?omSl@7zUF9bc|o5C3}+3FE7Pxt+i-~Gp)!L{e+P0hKI<;i zvb?j+o}pdU>p#ag@=_I3v1OuIPI6UIl%ZGr$v0&+QJ0&fI@j{uYOUwBZ{Tr*xB)pu z;q!xE$L52?cJSGgk;L(qQ|L&+io<{@)4GBj5-9M6W|+u&onem<%s}%i8m2N8y=o-o zRh`kV(7>XyOW3B$vC&&Er9Pb|P11DTU=Zpd|2s>2=+ZH5$e<)YX~9Tfs9q&k?LDi_ zY6!G%w>2a>51h2Q5)2`0GLCmKGS_d+6W}`z&&oL+6{|N7AyVx5!XBGZ0;(bt^*108 zKcyL${X9Woq)9%5EfrBS^`C$}g`fesu)>Prz{l^a5wie$4EgI>DtB@$w}I%Fw(t1G z#oZE%Wj1+nKB_`oHaOUl9t4}IEh=s#1|Ml-^7ep0FFqb3PO*&b zRlnAWFu+UVE7F&LQjdtj1Gm*ZGZ}qlxWNO}x%=}+K*+&Q$Az)#U^Z~MW?EJp;v~uL zt)JGR9iW%{9iQ=aS#}xoUFl{dUs%5Hb5K@FCig}E>@9CkN8LTL zmr7Hv@Sixs!+loWZV3CBRqq{qO*e+hwj*J`iY`f}qvw$>@c8HM%%SMTUBtcjXxp#Z zO6;1Q`63EM!jKUNIEm(f(&}lq4xnsU!}xFGc}=V~(;*CJFKud2uv5 z(R^AQgSor29p%NdcLZ0rMmjp2kI9V;}~n&v@7EDbgC$z}GH*sL!z z=Y&=q^RR98`)|^vw=0Nqz|A-feMVLfg1ORTx=NlM6i^SJh+d#U5d)PpdfB?1bMjfv7T)|=0qip?No)_aC-7zL+;>g4jCNNM`tW%N~vW49WNnWe7{XmDQ5(+~!O zO~g5N(k24uvEo098fTPRi%8xiK)Xz4eg#X!lh&!0npM&O?wlr0Xzeau!}VK>wn}VPI%Af)_)+c+*e1|vm>UYz|OOEGb--v$#Eyta(X;(OLBhOL_n}&qUN3V z^ySS2xsHGiX)36@VW8a@PhAvgS>42%}F=^+Ed!BP1;BN@hzR9!8JWDoZ z(YoI1CsiU%C`jwCzZN^%y;j&>v1>6X9+IH|?O>ZI50!`o5PhVYbfU^ouihR+KfKok zl&Cy+z;Jv8UCrOnivs>5Lc!6Ci__%t&HiHgP^D{S%1_kaQOKbixLWd}_?LH6=TD~p z)NI#uEaPCnn&TwzKu)@P_iWb^K~5yuVg_X!#ZMWOl`#0*wE+;dP6DRpB8k@ulV{kO zuKp@Joa)Ne|M}Tb_zxAE7F-BRGIpAUwSyRqLBo5(ZcyE!<$!SC)1gU6wAwRILBjQmgQTiO&g}2K)RH1A1(SA0wW9$dC~lVZ^g@wWzb48xa(OmL zLMK z;0D=R{BdU(^uxPJPJyS6Ch7NI$VY>@{0$xBG;h_RgXgy_d<`E`Y%XFSk)62LbY>w) zo(chsq|?mdq4Jb(5&mFWY+7;k8)vSQKrT z(KcD+X>9-P-i-bcNS_KhxC5G$xtVO7VcP*o-#}lM|ASUTlDJryi3wLE;TP(v&^{|Hma)*Zu?A%%oD-7X&M%kLFHk) zqXUHU4F4~Q9=Y2Pb+>ga6E;il(;7w@S9b=1e=(1|Xv5uZ!_9c{y~|0+Tn#$e_@UxF z%(j|J|8P}xjG-bL;8)>2^G$iBdPNAwNLd=(^rj8Y|B?ds#3R&>!Kd>zxPw^hte8yUj7rFYg+cyzLSJDl*Q65 z*@29|yWiw5i;EoHJd0lLLXcMra_d4*Tke12GT+NRHS=SPzLEBSr9>{G|8izTpT4#P zE9?)t$zmK_hkap{MYJaQ0YZ8czwNNbd}Mh3wn%-zEPDQU2uQYGbOWJx4=wUHub5bKl z+A&KoWwSPWUP2=V1s7c&++`aW27ODB z2^I1?sbOgN!>mx+e3wdU#^3AM`}%cBU=KBP>~Ei9RDNw>>y!Pme2r7YViqwMTWC~l z^mkNZrAii$sqK#nlFRzA)Rf(kcmSbPVkCJbk_hnfS{>*j0$b^dcsMN9D!=R?g&oMp zw@mPi+^Lsa>cHPrbh%W7crFQ5q51Qxw;4wysuqs==OE@Qyosn%h-GjwP22;HiE-Jo zivy2+LLywoFkSGvMbeNV>&5WP_Bm|8?i=&lCg!>pX5!W7#!_PbH{KoY+PG9WH;QsG zn*kd~9!O}*;O_zy)l{1fYuMH{Y&+#!WXVVVpQeSmtZ>PEQI=wc8$9cLtu1+z-tbz0 zDl+YZ=Eba74V|R_l1=;w+<{z+VeKXu~zOpy4(efy^wh9)RTSE#{tcvK+lqt0r_bxlbqH&RA5R z#m(1^0{e{I9ll5vQnpgj(6Fy~axHMWbP7E4`>r)z5q9z}XfqNX(+SBEY@pW69VE^@ zB}^LgU(*!oTiB4UDSUEB8}g5Iacd!2&-wmHV5it$5sa1p`4N$SrWPM35xc=|Ghk_u z!0iS>ALrQpXsu&L_oIQbN&89-{6B42tt>vNR8e%%${;5u-WTe3F1D`b2?sMps}m&V z_?5O{s9ST%C4aV0Ttun8YHmZtnL6Of4$_qbYsKk29#gqI2FMnn^5BcT1jNbj`!oi{c@AhZj40QTdz z<_pvaifO37Gz|2%EIWE!2;YeA8Ey*#1oV2>-6 zixwzon6w;~IdmX?u~^nCKYe1`^NHxs@*6I@*X6&dv8J&0Ls{KZmNC6v9wAc~M<0Bq zWoSdYGKpUFLrqrK1CiF-D%j{B1a@KXMfUXPjoHCKU>S9r6quvf-&QA?xHwp&fM9nDm3tk!U=rM$u-Ibb=B}}3dy)V zJJOyYqad7ZLhkA8|Gq4u)hzsHQae@0k@5F;q$}s4!~>WNOuK$LHyu2kl#VToG90*e zXK4mfN@81oJ&P!tD2U_&! zR%Y~ur~i8w9wJVfu&F##%hK|BN*XmajvesKY zbkL~Lc*meD-K>Ot#Qjrh4})Z~IVtq2dr;SFXZ+xkO!*zRzGO_*fjaISnL!Cs=}zwU z{71;mQC{!xJ;=iUV7=Y{dB)+bG|&d=MT)!~Y&(1zxonS_!+G%$N#eu>4R-L<;DIER z(UKBNW_*h|tdiJx%s4ujo|FxpizX^jLy2B+4=n$!Uao69_z^C)Md6pHA~D@WcbYd7 zU!-#KO7)#gi7h=rB;uZ4E$+N_R&}{_+zO`4ggzuC_IAOVS2%Is^K9~bwsqH9ueHt; zZ$G1|?5i(^sD$6QyPEocjthTLV&33@tdv}|-pAs56zbGl!@z(SvoC9-R$fgeKopR z79`Vz$HJ`9@V!dyB}Ti~6cEd`wt3-$Wwv&u;^^OlJbICI_WE*ZomVF3#yxf31?H_w z%bmgjLv)gol*t0mfEn4~i|jV!h!ACgL_6{YeU@iVqFWooZaj!2e+GCT&>rs3d-Gp4 zr_T4cnBq)y3h;Q7i=s(stA*GV5aV=;O<~2a>~^Y*V-(8gBx|>#9;AL9ouK8~c-2Ja zlcP{Wvi?m2{?&=Ii_@y}POiFvkj;4Hr-X;<0s#$nsLo!OUeNw^d}Nu&Ysz7%X=n7? z+<;~}C?sm*aYI2akT(|HkCUWVR)r($ZjV-zjnZWB4((!Z^m~4?y1G&|`yPwHf4mTm zk_`4Zmp&nTgYQ?yvEQ?J8d!Xu!f{k$DHjFM<-Z9F9#xLHS6=h1!5*ROxT#qAHt{*9 z^<=cxqk$O_Regge8-_xM?Xw2DX;;GelpLKmwwM-2y^qQ=MN|4iwBWy|v{|8>IHv!o`$z+ckw`)ePjhqAS> z4PF4J+6-bu4(J6Nfz|wwc}dIZ^)o}jpxpm%ZBrVhpPvDM9=zc74&?C&pk1IRpNNb* z0J1ychUn_JkX)7|{ANyRhXK$>GsS6{CZ#5t`V?|QN%FMpE8u9;PSVDxcPKKTgymGS zuLAKJtVmE->#drs;h;rTA=(|c5loiW;~soZz z7j#d9M@w6WzB->r3iR{^W+`Xrio-c*Df<%k>v)kiOnGDi>!Yy_VcKYp9op4sX@ftv z*>{>uhE@V9%OpszxjXLk)dAo@TZk%=3>70oRenL9nL=gx)cW=fK<1*qQFjYvL_WqC>WPCtUgv#J)VVEgoizh@#b9&^>W1LG^}QNE3Vk8z&-d;L7hZF*`+xOUlmd z*%JhTLrieiteWh~Nmmq-uh^AGjI>Fc`%d%JHK~!K-$ZpvzdonT?toxT2=|+RORo{RO#(X zc5oTDpTU0g$esKR2-rA?&ND#nNrbm`>2J!wf-V5{4GWbv-An1he=6wZcF*gt3F{FErpMNK!r@M@_kx5)rj& zp0-@Awh_B*l%W57Lle>QOv;(a)?9_hx&=Ck!ARQiD8DCE(8>#?+!R+9<#5WFqw(Wr zDQuDYZf{uEb>Px8!I#1nw&T)LTOBXO|CM_^q8pS^5BuU~ z;Qf&mO;_~TzU62Hd0b*iT&W+N%XbQl$XAD!G)>^|*p1_FR1t-om z9FV46W$*1PqT^i-!V>wM?5DK#AWb{7gC1<>H{&2acJ z@*Q?|VTgD2QR|Ppz(z7mp^!$2#+4Yt$j@1Uja>sBt&GLzgpyMXx${`Am~R~Sq)&)p zKHQKY!q?8MA+@s~>SR6h+*t09=!@vY^Es(k)**NHf}gyT4~6 z3m1V7P~AsuyP$pTf#r8WkjrbqP+b-hhWT*S*ODl~hl*RWVUG&}3NZhd$R}74Z)yX8 zAo4lQg;Lq zSBHtPalk@mzv#f7e83ZW=DpdlZ|MSFYx3BQWGm}KM^IIccO4T~ff!Rh83L$(Ux`5=N{%R%eCf9PovV z_u?A7yw$38XW%8G;(q!p2jf*qYY~UIgKKTO`_5lnz>sdD+zYr{k@FU!H3h?J=_AAI z!Vu{2g_|t7br?8Fr?`Wv?giQarIMGIeTo@MYAYd+A=r4>9*HA-I>T0{-WPy$)|(;m zeLt;n*YHWVyTGy;d8a)E&1Eip=%FPu-}-BfxplMtI5|agdZ<~Bkf*+Ow|S(vT>;XZ zubT__x4$DXd_(v4jC-}sYi;x4%>9*uIAd2hXO&61T8WAO-Tm{(*`7101IO{lgr(%M zCpXTVbdhz>$mL?g-3N4r^ZP9{_{8T9sz>)!YaQ$N$A~-dMN)_#N=Ct{k-pCdW)cRC zCa($xdIPS&Xp&8FIu4KGIKxA3>S_VP31DUlGnTdD#ME~b5z$X?t%93gvFC3v3##t; zadaOH{_DsZ*B(PTE+wrCJn+oWReHBw*Kbr`yr(;9nq;_T)xnP@zpYD8B^J{u`tF{d z>jVF(=ex1{wbm`k=p*&tqa|@f~Q(hC7l9GTSKcvx7_ zcn!(}KGsc7=Sv~aVv!?c4>!s)AKl&JwJzX6MYq@p9lTG0UJvaK*It9PIjbSug%8DI zbs6c+^&521Lm|B{LCUjUb{AEaGICxQXY0mMfkySbvLWi<-UH>;%air_-pry6*T?B) zpkWXm&M7zJjchS7y85ZEt4fcQvtSpdel$Nrp9}x?q`CJc$@9yuVgYu@pzs?iBSY4{ zx9{2RT(|elri#{1onNrx3g%MXM+9CMqnrzPxR-wq+iyQN=RCWdKcTuLcp@){+d;iB zPC|z4$)K{At_R9b9McY;%y|v#fd6$pR2Zwyge7cN{_U@5`Afg}%8?JadF|Sp9qqKj zZ~_#n13KvF?v7{X9vX^R(Hdt9L=dfcj;1;6k3RBLEk2nB}gTXve5 zSEY}0|9^{gmYW8%L=~T4Yr^Vz7TRsSZ_v!2c&vs^nlBX5%XL9`t`cSnmf)$N-2Ql6 znj0}w$UG|oYPf`VvPK74tQdY<9F6mMEV|N(SIC*N$GMUC=oJSv(ijsOYseFjzTkvB zyv^^hYgG{3m7umHe(-s2K3Ba*?E6L+GWXEUei6%cf8iOKBm&K zqswA9tCwxfR6wa*Yh`>`{7zE`zI4^(r{6(c3C+0> zn6t`*GS5$DaiSp3Ubhe&bJ=5j^_B?vjnBcMRVP^SZ7J$&W;|%1(Am;zy)nUTD6#if z1igFY|3#C|Wi8MDzey(}>n8O?zAhYEY`k@C;OAhE^7M#Db19^o@%zfOkh2dg)YXSl zt-BT86To##*1F>PTPMJ-algra;>tdEOmZq^N^~K|Wp!%0bCrXy<sUle(H~B2dW3?dLvfkMlos3vNp@Zk}?( zmaiWumNcsVHffY)Xf)S18UDW-b%LRv2la}fI?Mm%@YNJe^5mLw*6~tiI$d)bc4e7b zaQ~Tce=mi3J@u&ZRAqt_a!8S4WLu#`gRy%G&LsRA1U|8C+qRR5Il&v-wkCdK+t$Q3C$??dwzISQ{r9Wgs=e5% zQ(e_hUvyXX&FRz6IX^Ebtf&tCW7`sYe9t-nCJWpkey|CFqHSHPmX0QUHGNV@azt!=(AS;=O=EWVh4GlA~uq^de zv`q9EaCA)-MMXvsT|MVKc(#d>j6(gL6Ji!Ut8t^m;?!JCdn_MvhFH*!7whgE&D8a9 z?R-mU;dI%UxDFu?ylMoTjcn6@a$N-bGB?lF2wX5Z6%vAyfGxb2wcDpW`jWQYc(!hD z#VHWzzzdC=8Kk?{Jc4WB4CSvV)gLYG>AyAHx&!-u2hFo!*uUqWrjm}X>=_n6cKarc;OOU!p;zkpLiBMe6F!IeIlZ@K|BpwC$L`Ppy<$;d#D%u1fg? zR+>{wb;&=$F_miHOA)Ayom<0!ORRkzIaWcpjLMu28dYg&{8g*mixF>#*7LjKN2kW( z%KF6bRU;K{QiZP2kt{1wU1-J7Qds{?*`&Tgdv?y}BM)$;m8qN0P$in>E&^5xod;?x zm$$C3$kl8|1FWcI_7qtWh)tXHT0gm?`?*-K5!b>IUw_=LkC-nVFvyQ~{sptEtTCbn z+cB7YgMY?u2j6;@hrZ23PGMK8Q$#^%| zc9xKA@FgPUV*C<1_Q?=G3bmQO55qTY)b~H4;i`+%3+&6=5|cR5LJN0r+$ptYtQGAv zz=qf<+?M4L{s%kE$O?mUkF~f?0@|n^?sm!XgY5kg$E}fomm5&6p*Bk z=w_RKL(!S5xQ?Cg{cL-x3(~D`Bf4z^#}Ym*J5_JQ)4UqJCRuH#Tmd#wUExrn6LMeB zb?m*Fk!1H&U0S>%SoHITvOXRgCii#-h+I?Z+iN$l9I{e%=!9) zqD3Efyrl@lV8uZPTM6ox&SVBw``En8joccTrJ-aeY_&$VuRySK6sI1eJNS6At6#5X(<_VEJZ|hM^*; zZ?ds3hqj||SBzm)m2xNlds 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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 literal 0 HcmV?d00001 diff --git a/lxc-CVE-2019-5736-runC-rexec-callers-as-memfd.patch b/lxc-CVE-2019-5736-runC-rexec-callers-as-memfd.patch deleted file mode 100644 index 833386e..0000000 --- a/lxc-CVE-2019-5736-runC-rexec-callers-as-memfd.patch +++ /dev/null @@ -1,401 +0,0 @@ -From 113a0557d7651385d30e181a23c8e68e696ad67f Mon Sep 17 00:00:00 2001 -From: Christian Brauner -Date: Sat, 26 Jan 2019 01:19:29 +0100 -Subject: [PATCH] CVE-2019-5736 (runC): rexec callers as memfd -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Adam Iwaniuk and Borys Popławski discovered that an attacker can compromise the -runC host binary from inside a privileged runC container. As a result, this -could be exploited to gain root access on the host. runC is used as the default -runtime for containers with Docker, containerd, Podman, and CRI-O. - -The attack can be made when attaching to a running container or when starting a -container running a specially crafted image. For example, when runC attaches -to a container the attacker can trick it into executing itself. This could be -done by replacing the target binary inside the container with a custom binary -pointing back at the runC binary itself. As an example, if the target binary -was /bin/bash, this could be replaced with an executable script specifying the -interpreter path #!/proc/self/exe (/proc/self/exec is a symbolic link created -by the kernel for every process which points to the binary that was executed -for that process). As such when /bin/bash is executed inside the container, -instead the target of /proc/self/exe will be executed - which will point to the -runc binary on the host. The attacker can then proceed to write to the target -of /proc/self/exe to try and overwrite the runC binary on the host. However in -general, this will not succeed as the kernel will not permit it to be -overwritten whilst runC is executing. To overcome this, the attacker can -instead open a file descriptor to /proc/self/exe using the O_PATH flag and then -proceed to reopen the binary as O_WRONLY through /proc/self/fd/ and try to -write to it in a busy loop from a separate process. Ultimately it will succeed -when the runC binary exits. After this the runC binary is compromised and can -be used to attack other containers or the host itself. - -This attack is only possible with privileged containers since it requires root -privilege on the host to overwrite the runC binary. Unprivileged containers -with a non-identity ID mapping do not have the permission to write to the host -binary and therefore are unaffected by this attack. - -LXC is also impacted in a similar manner by this vulnerability, however as the -LXC project considers privileged containers to be unsafe no CVE has been -assigned for this issue for LXC. Quoting from the -https://linuxcontainers.org/lxc/security/ project's Security information page: - -"As privileged containers are considered unsafe, we typically will not consider -new container escape exploits to be security issues worthy of a CVE and quick -fix. We will however try to mitigate those issues so that accidental damage to -the host is prevented." - -To prevent this attack, LXC has been patched to create a temporary copy of the -calling binary itself when it starts or attaches to containers. To do this LXC -creates an anonymous, in-memory file using the memfd_create() system call and -copies itself into the temporary in-memory file, which is then sealed to -prevent further modifications. LXC then executes this sealed, in-memory file -instead of the original on-disk binary. Any compromising write operations from -a privileged container to the host LXC binary will then write to the temporary -in-memory binary and not to the host binary on-disk, preserving the integrity -of the host LXC binary. Also as the temporary, in-memory LXC binary is sealed, -writes to this will also fail. - -Note: memfd_create() was added to the Linux kernel in the 3.17 release. - -Signed-off-by: Christian Brauner -Co-Developed-by: Aleksa Sarai -Acked-by: Serge Hallyn ---- - configure.ac | 12 +++ - src/lxc/Makefile.am | 4 + - src/lxc/file_utils.c | 41 +++++++++- - src/lxc/file_utils.h | 1 + - src/lxc/rexec.c | 181 +++++++++++++++++++++++++++++++++++++++++++++ - src/lxc/syscall_wrappers.h | 14 ++++ - 6 files changed, 252 insertions(+), 1 deletion(-) - create mode 100644 src/lxc/rexec.c - -diff --git a/configure.ac b/configure.ac -index 950c8dd..631e607 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -706,6 +706,17 @@ AC_ARG_ENABLE([thread-safety], - [], [enable_thread_safety=yes]) - AM_CONDITIONAL([ENFORCE_THREAD_SAFETY], [test "x$enable_thread_safety" = "xyes"]) - -+AC_ARG_ENABLE([memfd-rexec], -+ [AC_HELP_STRING([--enable-memfd-rexec], [enforce liblxc as a memfd to protect against certain symlink attacks [default=yes]])], -+ [], [enable_memfd_rexec=yes]) -+AM_CONDITIONAL([ENFORCE_MEMFD_REXEC], [test "x$enable_memfd_rexec" = "xyes"]) -+if test "x$enable_memfd_rexec" = "xyes"; then -+ AC_DEFINE([ENFORCE_MEMFD_REXEC], 1, [Rexec liblxc as memfd]) -+ AC_MSG_RESULT([yes]) -+else -+ AC_MSG_RESULT([no]) -+fi -+ - # Files requiring some variable expansion - AC_CONFIG_FILES([ - Makefile -@@ -934,6 +945,7 @@ Security features: - - Linux capabilities: $enable_capabilities - - seccomp: $enable_seccomp - - SELinux: $enable_selinux -+ - memfd rexec: $enable_memfd_rexec - - PAM: - - PAM module: $enable_pam -diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am -index 08e2fab..8bbfdaf 100644 ---- a/src/lxc/Makefile.am -+++ b/src/lxc/Makefile.am -@@ -173,6 +173,10 @@ if !HAVE_STRLCAT - liblxc_la_SOURCES += ../include/strlcat.c ../include/strlcat.h - endif - -+if ENFORCE_MEMFD_REXEC -+liblxc_la_SOURCES += rexec.c -+endif -+ - AM_CFLAGS = -DLXCROOTFSMOUNT=\"$(LXCROOTFSMOUNT)\" \ - -DLXCPATH=\"$(LXCPATH)\" \ - -DLXC_GLOBAL_CONF=\"$(LXC_GLOBAL_CONF)\" \ -diff --git a/src/lxc/file_utils.c b/src/lxc/file_utils.c -index f89aa63..930fd73 100644 ---- a/src/lxc/file_utils.c -+++ b/src/lxc/file_utils.c -@@ -31,7 +31,7 @@ - #include "config.h" - #include "file_utils.h" - #include "macro.h" --#include "string.h" -+#include "string_utils.h" - - int lxc_write_to_file(const char *filename, const void *buf, size_t count, - bool add_newline, mode_t mode) -@@ -327,3 +327,42 @@ again: - - return ret; - } -+ -+char *file_to_buf(char *path, size_t *length) -+{ -+ int fd; -+ char buf[PATH_MAX]; -+ char *copy = NULL; -+ -+ if (!length) -+ return NULL; -+ -+ fd = open(path, O_RDONLY | O_CLOEXEC); -+ if (fd < 0) -+ return NULL; -+ -+ *length = 0; -+ for (;;) { -+ int n; -+ char *old = copy; -+ -+ n = lxc_read_nointr(fd, buf, sizeof(buf)); -+ if (n < 0) -+ goto on_error; -+ if (!n) -+ break; -+ -+ copy = must_realloc(old, (*length + n) * sizeof(*old)); -+ memcpy(copy + *length, buf, n); -+ *length += n; -+ } -+ -+ close(fd); -+ return copy; -+ -+on_error: -+ close(fd); -+ free(copy); -+ -+ return NULL; -+} -diff --git a/src/lxc/file_utils.h b/src/lxc/file_utils.h -index 6361557..518a61a 100644 ---- a/src/lxc/file_utils.h -+++ b/src/lxc/file_utils.h -@@ -55,5 +55,6 @@ extern bool is_fs_type(const struct statfs *fs, fs_type_magic magic_val); - extern FILE *fopen_cloexec(const char *path, const char *mode); - extern ssize_t lxc_sendfile_nointr(int out_fd, int in_fd, off_t *offset, - size_t count); -+extern char *file_to_buf(char *path, size_t *length); - - #endif /* __LXC_FILE_UTILS_H */ -diff --git a/src/lxc/rexec.c b/src/lxc/rexec.c -new file mode 100644 -index 0000000..396bd61 ---- /dev/null -+++ b/src/lxc/rexec.c -@@ -0,0 +1,181 @@ -+/* liblxcapi -+ * -+ * Copyright © 2019 Christian Brauner . -+ * Copyright © 2019 Canonical Ltd. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2, as -+ * published by the Free Software Foundation. -+ * -+ * This program 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 General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License along -+ * with this program; 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 "config.h" -+#include "file_utils.h" -+#include "raw_syscalls.h" -+#include "string_utils.h" -+#include "syscall_wrappers.h" -+ -+#define LXC_MEMFD_REXEC_SEALS \ -+ (F_SEAL_SEAL | F_SEAL_SHRINK | F_SEAL_GROW | F_SEAL_WRITE) -+ -+static int push_vargs(char *data, int data_length, char ***output) -+{ -+ int num = 0; -+ char *cur = data; -+ -+ if (!data || *output) -+ return -1; -+ -+ *output = must_realloc(NULL, sizeof(**output)); -+ -+ while (cur < data + data_length) { -+ num++; -+ *output = must_realloc(*output, (num + 1) * sizeof(**output)); -+ -+ (*output)[num - 1] = cur; -+ cur += strlen(cur) + 1; -+ } -+ (*output)[num] = NULL; -+ return num; -+} -+ -+static int parse_exec_params(char ***argv, char ***envp) -+{ -+ int ret; -+ char *cmdline = NULL, *env = NULL; -+ size_t cmdline_size, env_size; -+ -+ cmdline = file_to_buf("/proc/self/cmdline", &cmdline_size); -+ if (!cmdline) -+ goto on_error; -+ -+ env = file_to_buf("/proc/self/environ", &env_size); -+ if (!env) -+ goto on_error; -+ -+ ret = push_vargs(cmdline, cmdline_size, argv); -+ if (ret <= 0) -+ goto on_error; -+ -+ ret = push_vargs(env, env_size, envp); -+ if (ret <= 0) -+ goto on_error; -+ -+ return 0; -+ -+on_error: -+ free(env); -+ free(cmdline); -+ -+ return -1; -+} -+ -+static int is_memfd(void) -+{ -+ int fd, saved_errno, seals; -+ -+ fd = open("/proc/self/exe", O_RDONLY | O_CLOEXEC); -+ if (fd < 0) -+ return -ENOTRECOVERABLE; -+ -+ seals = fcntl(fd, F_GET_SEALS); -+ saved_errno = errno; -+ close(fd); -+ errno = saved_errno; -+ if (seals < 0) -+ return -EINVAL; -+ -+ return seals == LXC_MEMFD_REXEC_SEALS; -+} -+ -+static void lxc_rexec_as_memfd(char **argv, char **envp, const char *memfd_name) -+{ -+ int saved_errno; -+ ssize_t bytes_sent; -+ int fd = -1, memfd = -1; -+ -+ memfd = memfd_create(memfd_name, MFD_ALLOW_SEALING | MFD_CLOEXEC); -+ if (memfd < 0) -+ return; -+ -+ fd = open("/proc/self/exe", O_RDONLY | O_CLOEXEC); -+ if (fd < 0) -+ goto on_error; -+ -+ /* sendfile() handles up to 2GB. */ -+ bytes_sent = lxc_sendfile_nointr(memfd, fd, NULL, LXC_SENDFILE_MAX); -+ saved_errno = errno; -+ close(fd); -+ errno = saved_errno; -+ if (bytes_sent < 0) -+ goto on_error; -+ -+ if (fcntl(memfd, F_ADD_SEALS, LXC_MEMFD_REXEC_SEALS)) -+ goto on_error; -+ -+ fexecve(memfd, argv, envp); -+ -+on_error: -+ saved_errno = errno; -+ close(memfd); -+ errno = saved_errno; -+} -+ -+static int lxc_rexec(const char *memfd_name) -+{ -+ int ret; -+ char **argv = NULL, **envp = NULL; -+ -+ ret = is_memfd(); -+ if (ret < 0 && ret == -ENOTRECOVERABLE) { -+ fprintf(stderr, -+ "%s - Failed to determine whether this is a memfd\n", -+ strerror(errno)); -+ return -1; -+ } else if (ret > 0) { -+ return 0; -+ } -+ -+ ret = parse_exec_params(&argv, &envp); -+ if (ret < 0) { -+ fprintf(stderr, -+ "%s - Failed to parse command line parameters\n", -+ strerror(errno)); -+ return -1; -+ } -+ -+ lxc_rexec_as_memfd(argv, envp, memfd_name); -+ fprintf(stderr, "%s - Failed to rexec as memfd\n", strerror(errno)); -+ return -1; -+} -+ -+/** -+ * This function will copy any binary that calls liblxc into a memory file and -+ * will use the memfd to rexecute the binary. This is done to prevent attacks -+ * through the /proc/self/exe symlink to corrupt the host binary when host and -+ * container are in the same user namespace or have set up an identity id -+ * mapping: CVE-2019-5736. -+ */ -+__attribute__((constructor)) static void liblxc_rexec(void) -+{ -+ if (lxc_rexec("liblxc")) { -+ fprintf(stderr, "Failed to re-execute liblxc via memory file descriptor\n"); -+ _exit(EXIT_FAILURE); -+ } -+} -diff --git a/src/lxc/syscall_wrappers.h b/src/lxc/syscall_wrappers.h -index 42d94db..dca4d15 100644 ---- a/src/lxc/syscall_wrappers.h -+++ b/src/lxc/syscall_wrappers.h -@@ -58,6 +58,20 @@ static inline long __keyctl(int cmd, unsigned long arg2, unsigned long arg3, - #define keyctl __keyctl - #endif - -+#ifndef F_LINUX_SPECIFIC_BASE -+#define F_LINUX_SPECIFIC_BASE 1024 -+#endif -+#ifndef F_ADD_SEALS -+#define F_ADD_SEALS (F_LINUX_SPECIFIC_BASE + 9) -+#define F_GET_SEALS (F_LINUX_SPECIFIC_BASE + 10) -+#endif -+#ifndef F_SEAL_SEAL -+#define F_SEAL_SEAL 0x0001 -+#define F_SEAL_SHRINK 0x0002 -+#define F_SEAL_GROW 0x0004 -+#define F_SEAL_WRITE 0x0008 -+#endif -+ - #ifndef HAVE_MEMFD_CREATE - static inline int memfd_create(const char *name, unsigned int flags) { - #ifndef __NR_memfd_create --- -1.8.3.1 - diff --git a/lxc.spec b/lxc.spec index 20ab8b0..5cd4d99 100644 --- a/lxc.spec +++ b/lxc.spec @@ -1,161 +1,77 @@ -%global _release 2020040801 +%global _release 2020042302 %global debug_package %{nil} Name: lxc -Version: 3.0.3 +Version: 4.0.1 Release: %{_release} Summary: Linux Containers userspace tools License: LGPLv2+ URL: http://linuxcontainers.org -Source0: lxc-3.0.3.tar.gz -Patch6000: lxc-CVE-2019-5736-runC-rexec-callers-as-memfd.patch -Patch9003: 0001-confile-add-lxc.isulad.init.args-config-interface.patch -Patch9004: 0002-namespace-add-support-share-namespace-by-path.patch -Patch9005: 0003-confile-add-lxc.isulad.populate.device-interface.patch -Patch9006: 0004-support-isulad-fifo-log.patch -Patch9007: 0005-auto-mount-cgroup-sys-and-proc.patch -Patch9008: 0006-conf.c-fix-bug-when-set-no-ro-mount-mount-propagatio.patch -Patch9009: 0007-use-isulad-log-format.patch -Patch9010: 0008-isulad-modify-exit-code-and-stop-signal.patch -Patch9011: 0009-lxc_start-add-default-terminal-fifos.patch -Patch9012: 0010-Save-pid-ppid-info-into-file-for-isulad.patch -Patch9013: 0011-Add-exit-FIFO-to-monitor-state-of-lxc-monitor.patch -Patch9014: 0012-Init-fifos-in-lxc_attach_terminal.patch -Patch9015: 0013-isulad-set-env-home-in-container.patch -Patch9016: 0014-support-rotate-for-container-log-file.patch -Patch9017: 0015-fix-high-gcc-compile-bug.patch -Patch9018: 0016-add-masked-paths-and-ro-paths.patch -Patch9019: 0017-isulad-check-cgroup-cpu.shares-after-setted.patch -Patch9020: 0018-lxc-attach-add-support-terminal-fifos.patch -Patch9021: 0019-remount-cgroup-readonly-and-make-soft-link-of-subcgr.patch -Patch9022: 0020-fix-log-error-when-symlink-subcgroup.patch -Patch9023: 0021-lxc-attch-add-error-message.patch -Patch9024: 0022-support-rootfs-mount-propagation.patch -Patch9025: 0023-attach.c-change-uid-and-gid-from-lxc-container-confi.patch -Patch9026: 0024-isulad-support-symlink-in-mount-entry-and-not-permit.patch -Patch9027: 0025-support-oci-hooks.patch -Patch9028: 0026-remove-filelock-and-do-not-destroy-directory-when-de.patch -Patch9029: 0027-fix-bug-of-memory-leak.patch -Patch9030: 0028-support-rootfs-for-container.patch -Patch9031: 0029-add-start-timeout-to-limit-start-time.patch -Patch9032: 0030-support-block-device-as-rootfs.patch -Patch9033: 0031-clean-add-clean-resources-api.patch -Patch9034: 0032-Drop-all-caps-when-cap.keep-ISULAD_KEEP_NONE.patch -Patch9035: 0033-support-mount-squashfs-in-mount-entry.patch -Patch9036: 0034-some-small-bugfix.patch -Patch9037: 0035-lxc-fixup-builds-with-newer-glibc.patch -Patch9038: 0036-drop_caps-add-drop-caps-of-current-process.patch -Patch9039: 0037-restore-default-signal-handlers-and-set-umask-0027.patch -Patch9040: 0038-make-the-given-terminal-as-controlling-terminal.patch -Patch9041: 0039-print-error-message-when-container-start-failed.patch -Patch9042: 0040-add-timeout-200ms-for-cmds-send-to-lxc-monitor.patch -Patch9043: 0041-return-1-when-_lxc_start-fails.patch -Patch9044: 0042-lxc-seccomp-adopt-to-lxc3.0.patch -Patch9045: 0043-check-null-pointer-of-handler-to-fix-coredump-of-att.patch -Patch9046: 0044-support-space-in-volume-mount-and-env.patch -Patch9047: 0045-add_terminal_fifos-Add-terminal-fifos-dynamically.patch -Patch9048: 0046-Do-not-test-cgroup-writeable.patch -Patch9049: 0047-Fix-memory-leak-in-lxc_global_config_value.patch -Patch9050: 0048-clear-ONLCR-flag-from-master-of-terminal.patch -Patch9051: 0049-Add-100ms-timeout-for-console-epoll.patch -Patch9052: 0050-seccomp-add-rules-for-specified-architecture-only.patch -Patch9053: 0051-if-ocihook-is-empty.patch -Patch9054: 0052-Fix-seccomp-fail-when-all-specified-in-config.patch -Patch9055: 0053-destroy-empty-cgroup-path-return-ture.patch -Patch9056: 0054-fix-invalid-log-message.patch -Patch9057: 0055-Fix-compile-error.patch -Patch9058: 0056-caps-use-_LINUX_CAPABILITY_VERSION_3-to-set-cap.patch -Patch9059: 0057-confile-add-support-umask.patch -Patch9060: 0058-do-not-check-ppid-when-set-death-signal.patch -Patch9061: 0059-delete-unused-variable-ppid.patch -Patch9062: 0060-using-json-file-to-write-console-log-of-container.patch -Patch9063: 0061-Fix-hook-use-the-path-args-envs-execvp-dirctory.patch -Patch9064: 0062-setup-sysctls-before-set-read-only-path-and-masked-p.patch -Patch9065: 0063-lxc-ignore-systemcall-load-failure-error.patch -Patch9066: 0064-lxc-Reduce-seccomp-processing-log-level.patch -Patch9067: 0065-Storage-return-true-if-storage_init-init-fail.patch -Patch9068: 0066-lxc-Pids-limit-does-not-report-an-error-after-execut.patch -Patch9069: 0067-lxc-report-error-when-remove-directory-failed.patch -Patch9070: 0068-support-record-stdout-stderr-log-of-container-consol.patch -Patch9071: 0069-lxc-killall-processes-if-container-shared-pid-namesp.patch -Patch9072: 0070-lxc-signal-all-process-for-shared-container-when-con.patch -Patch9073: 0071-lxc-get-cgroup-path-according-to-cgroup-mountpoint.patch -Patch9074: 0072-lxc-adapt-to-docker-18.09.patch -Patch9075: 0073-lxc-support-set-additional-groups.patch -Patch9076: 0074-lxc-only-add-valid-fd-to-mainloop.patch -Patch9077: 0075-lxc-add-timeout-for-attach.patch -Patch9078: 0076-lxc-delete-unused-variable.patch -Patch9079: 0077-lxc-set-negative-files.limit-to-max-and-fix-bug-of-s.patch -Patch9080: 0078-Run-pre-start-hook-before-chroot.patch -Patch9081: 0079-inherid-env-from-parent-in-oci-hooks.patch -Patch9082: 0080-lxc-fix-compile-error.patch -Patch9083: 0081-lxc-Change-the-range-of-attach-timeout.patch -Patch9084: 0082-lxc-fix-memory-leak-cause-by-setenv.patch -Patch9085: 0083-lxc-free-lxc-handler.patch -Patch9086: 0084-lxc-memory-leak-of-lxc_grow_array.patch -Patch9087: 0085-lxc-update-json-file-from-isulad.patch -Patch9088: 0086-confile-add-support-systemd.patch -Patch9089: 0087-lxc-adapt-to-spec-of-oci-hook.patch -Patch9090: 0088-fix-lxc-build-error.patch -Patch9091: 0089-lxc-add-get-container-processes-pids-func.patch -Patch9092: 0090-lxc-remove-unused-variable.patch -Patch9093: 0091-lxc-support-namespaced-kernel-params-can-be-changed-.patch -Patch9094: 0092-lxc-add-output-error-when-create-unified-cgroup.patch -Patch9095: 0093-optimize-isulad_kit-operator.patch -Patch9096: 0094-exec-load-uid-gid-and-groups.patch -Patch9097: 0095-lxc-don-t-use-the-unified-hierarchy-for-the-systemd-.patch -Patch9098: 0096-close-inherited-fd-in-hook-process.patch -Patch9099: 0097-lxc-report-error-when-fork-exec-error-for-hooks.patch -Patch9100: 0098-lxc-make-dev-bind-mount-from-host-tmpfs-for-system-c.patch -Patch9101: 0099-terminal-do-not-close-the-master-fd-of-pty.patch -Patch9102: 0100-start-add-check-save-pid-info-file.patch -Patch9103: 0101-lxc-fix-code-error.patch -Patch9104: 0102-lxc-fix-compile-warnings.patch -Patch9105: 0103-lxc-fix-code-error-in-conf.c.patch -Patch9106: 0104-lxc-fix-code-error.patch -Patch9107: 0105-lxc-fix-code-error-warnings.patch -Patch9108: 0106-set-timeout-to-1s-for-cmds-send-to-lxc-monitor.patch -Patch9109: 0107-add-log-for-failure-of-rename-file.patch -Patch9110: 0108-check-calloc-input-valid.patch -Patch9111: 0109-add-secure-compile-flags-to-lxc.patch -Patch9112: 0110-add-doc-for-lxc.patch -Patch9113: 0111-lxc-use-safe_strdup-instead-of-strdup.patch -Patch9114: 0112-fix-secure-errors.patch -Patch9115: 0113-Malloc-parameter-check-and-judgment.patch -Patch9116: 0114-lxc-fix-code-errors.patch -Patch9117: 0115-fix-compile-error-on-ubuntu.patch -Patch9118: 0116-lxc-set-base-cgroup-path-to.patch -Patch9119: 0117-pupulate-device-with-dir-mode-750-and-set-uid-gid.patch -Patch9120: 0118-fix-sscanf-return-value-check.patch -Patch9121: 0119-remove-unuse-binary.patch -Patch9122: 0120-remove-unuse-unmount-namespace.patch -Patch9123: 0121-optimize-log-when-root-path-is-invalid.patch -Patch9124: 0122-lxc-fix-code-reivew-errors.patch -Patch9125: 0123-in-accordance-with-hook-spec-in-oci.patch -Patch9126: 0124-lxc-close-maincmd-fd-before-destroy-cgroup.patch -Patch9127: 0125-lxc-fix-strcat-bug-in-cleanpath.patch -Patch9128: 0126-add-user-option-for-lxc-attach.patch -Patch9129: 0127-log-only-write-size-begin-if-buffer-is-full.patch -Patch9130: 0128-link-proc-mounts-to-etc-mtab.patch -Patch9131: 0129-cgfsng-add-retry-for-enter-cgroup.patch -Patch9132: 0130-fix-snprintf-create-abstract-socket-name-bug.patch -Patch9133: 0131-fix-commands-and-terminal-memory-leak-bug.patch -Patch9134: 0132-lxc-fix-bug-in-cgroup-parent.patch -Patch9135: 0133-lxc-fix-bug-in-cgfsng.patch -Patch9136: 0134-lxc-do-cpuset-same-as-runc.patch -Patch9137: 0135-lxc-fix-code-warnings-for-cgfsng.c.patch -Patch9138: 0136-lxc-fix-retry-bug-in-cgroup.patch -Patch9139: 0137-lxc-fix-bug-in-read-proc.patch -Patch9140: 0138-resize-implement-resize-function-in-exec-start.patch -Patch9141: 0139-lxc-fix-get-cgroup-path-by-config-instead-of-cmd.patch -Patch9142: 0140-lxc-remove-umask-when-populate-devices.patch +Source0: lxc-4.0.1.tar.gz +Patch9000: 0001-iSulad-add-HAVE_ISULAD-macro.patch +Patch9001: 0002-confile-add-lxc.isulad.init.args-config-interface.patch +Patch9002: 0003-confile-add-lxc.isulad.populate.device-interface.patch +Patch9003: 0004-confile-add-support-umask.patch +Patch9004: 0005-cgroup-refact-cgroup-implemt.patch +Patch9005: 0006-modify-container-exit-code-and-stop-signal.patch +Patch9006: 0007-check-and-save-pid-info-file.patch +Patch9007: 0008-support-block-device-as-rootfs.patch +Patch9008: 0009-support-mount-squashfs-in-mount-entry.patch +Patch9009: 0010-IO-refact-terminal-progress.patch +Patch9010: 0011-add-exit-fifo-to-monitor-state-of-lxc-monitor.patch +Patch9011: 0012-Adapt-to-isulad-log.patch +Patch9012: 0013-set-env-in-container.patch +Patch9013: 0014-exec-refact-attach-progress.patch +Patch9014: 0015-add-masked-paths-and-readonly-paths.patch +Patch9015: 0016-start-separate-i-and-t.patch +Patch9016: 0017-attach-add_terminal_fifos-Add-terminal-fifos-dynamic.patch +Patch9017: 0018-pty-setup-pty-after-setup-rootfs-mount-options.patch +Patch9018: 0019-resize-implement-resize-function-in-exec-start.patch +Patch9019: 0020-confile-decode-escape-charactors-in-config.patch +Patch9020: 0021-cgroup-add-retry-for-destory-cgroups.patch +Patch9021: 0022-support-terminal-log.patch +Patch9022: 0023-Supporting-rootfs-mount-propagation.patch +Patch9023: 0024-start-do-not-check-ppid-when-set-death-signal.patch +Patch9024: 0025-support-oci-hooks.patch +Patch9025: 0026-Supporting-UID-GID-configuration.patch +Patch9026: 0027-Capabilites-security-feature-enhanced.patch +Patch9027: 0028-Supporting-workdir-configuration.patch +Patch9028: 0029-Supporting-additional-groups-configuration.patch +Patch9029: 0030-set-negative-files.limit-value-to-max.patch +Patch9030: 0031-head-file-remove-macro-HAVE_ISULAD-in-installed-head.patch +Patch9031: 0032-link-proc-mounts-to-etc-mtab.patch +Patch9032: 0033-build-add-secure-build-flags.patch +Patch9033: 0034-support-timeout.patch +Patch9034: 0035-Seccomp-security-feature-enhanced.patch +Patch9035: 0036-Security-coding-modification.patch +Patch9036: 0037-cgfsng-fix-build-error-device_cgroup_rule_parse.patch +Patch9037: 0038-Ignore-errors-when-loading-rules-fail.patch +Patch9038: 0039-net-adapt-to-isulad.patch +Patch9039: 0040-cgfsng-make-container-full-path-in-cgfsng_get_cgroup.patch +Patch9040: 0041-build-fix-some-bug-in-free-memory.patch +Patch9041: 0042-cgfsng-make-container-full-path-in-destory-cgroup.patch +Patch9042: 0043-support-error-report.patch +Patch9043: 0044-remove-filelock-in-destroy-dir.patch +Patch9044: 0045-restore-default-signal-handler.patch +Patch9045: 0046-add-support-systemd.patch +Patch9046: 0047-support-namespaced-kernel-params-can-be-changed-in-s.patch +Patch9047: 0048-don-t-use-the-unified-hierarchy-for-the-systemd-cgro.patch +Patch9048: 0049-make-dev-bind-mount-from-host-tmpfs-for-system-conta.patch +Patch9049: 0050-clean-add-init-fd-in-lxc_init_clean_handler.patch +Patch9050: 0051-init-pids-add-init-fd-in-lxc_init_pids_handler.patch +Patch9051: 0052-setupdev-add-judge-whether-have-mount-dev-entry.patch +Patch9052: 0053-attach-seprate-i-and-t-flags.patch +Patch9053: 0054-start-do-not-check-pid-die-when-lxc_poll-exit.patch +Patch9054: 0055-terminal-not-close-pipe-when-lxc_poll-exit.patch +Patch9055: 0056-attach-add-sigfd-to-monitor-the-exit-of-pid.patch +Patch9056: 0057-attach-add-read-data-from-attach-sigfd.patch BuildRequires: systemd-units git libtool graphviz docbook2X doxygen chrpath BuildRequires: pkgconfig(libseccomp) BuildRequires: libcap libcap-devel libselinux-devel yajl yajl-devel BuildRequires: pkgconfig(bash-completion) -Requires: lxc-libs = 3.0.3-%{release} +Requires: lxc-libs = 4.0.1-%{release} %package libs Summary: Runtime library files for %{name} @@ -173,7 +89,7 @@ overhead of full virtualization. The %{name}-libs package contains libraries for running %{name} applications. -%{!?_pkgdocdir: %global _pkgdocdir %{_docdir}/lxc-3.0.3} +%{!?_pkgdocdir: %global _pkgdocdir %{_docdir}/lxc-4.0.1} %description Containers are insulated areas inside a system, which have their own namespace @@ -187,7 +103,7 @@ boot an entire "containerized" system, and to manage and debug your containers. %package devel Summary: Development files for lxc -Requires: lxc = 3.0.3-%{release} +Requires: lxc = 4.0.1-%{release} Requires: pkgconfig %description devel @@ -203,7 +119,7 @@ BuildArch: noarch This package contains documentation for lxc for creating containers. %prep -%autosetup -n lxc-3.0.3 -Sgit -p1 +%autosetup -n lxc-4.0.1 -Sgit -p1 %build %configure --enable-doc --enable-api-docs \ @@ -324,13 +240,8 @@ make check %{_mandir}/*/man7/%{name}* %changelog -* Thu Apr 08 2020 openEuler Buildteam - 3.0.3-2020040801 -- fix source0 -* Tue Mar 10 2020 openEuler Buildteam - 3.0.3-2020031002 -- add /etc/sysconfig/ -* Tue Mar 10 2020 openEuler Buildteam - 3.0.3-2020031001 -- Correct release field -* Thu Feb 14 2020 openEuler Buildteam - 3.0.3-20200214 -- make lxc-libs package -* Thu Dec 19 2019 openEuler Buildteam - 3.0.3-20191218 -- Package init +* Mon Apr 20 2020 openEuler Buildteam - 4.0.1-2020042001 +- Type:enhancement +- ID:NA +- SUG:NA +- DESC: update lxc to 4.0.1 diff --git a/series.conf b/series.conf index f3901a6..21e500b 100644 --- a/series.conf +++ b/series.conf @@ -1,140 +1,58 @@ -lxc-CVE-2019-5736-runC-rexec-callers-as-memfd.patch -0001-confile-add-lxc.isulad.init.args-config-interface.patch -0002-namespace-add-support-share-namespace-by-path.patch +0001-iSulad-add-HAVE_ISULAD-macro.patch +0002-confile-add-lxc.isulad.init.args-config-interface.patch 0003-confile-add-lxc.isulad.populate.device-interface.patch -0004-support-isulad-fifo-log.patch -0005-auto-mount-cgroup-sys-and-proc.patch -0006-conf.c-fix-bug-when-set-no-ro-mount-mount-propagatio.patch -0007-use-isulad-log-format.patch -0008-isulad-modify-exit-code-and-stop-signal.patch -0009-lxc_start-add-default-terminal-fifos.patch -0010-Save-pid-ppid-info-into-file-for-isulad.patch -0011-Add-exit-FIFO-to-monitor-state-of-lxc-monitor.patch -0012-Init-fifos-in-lxc_attach_terminal.patch -0013-isulad-set-env-home-in-container.patch -0014-support-rotate-for-container-log-file.patch -0015-fix-high-gcc-compile-bug.patch -0016-add-masked-paths-and-ro-paths.patch -0017-isulad-check-cgroup-cpu.shares-after-setted.patch -0018-lxc-attach-add-support-terminal-fifos.patch -0019-remount-cgroup-readonly-and-make-soft-link-of-subcgr.patch -0020-fix-log-error-when-symlink-subcgroup.patch -0021-lxc-attch-add-error-message.patch -0022-support-rootfs-mount-propagation.patch -0023-attach.c-change-uid-and-gid-from-lxc-container-confi.patch -0024-isulad-support-symlink-in-mount-entry-and-not-permit.patch +0004-confile-add-support-umask.patch +0005-cgroup-refact-cgroup-implemt.patch +0006-modify-container-exit-code-and-stop-signal.patch +0007-check-and-save-pid-info-file.patch +0008-support-block-device-as-rootfs.patch +0009-support-mount-squashfs-in-mount-entry.patch +0010-IO-refact-terminal-progress.patch +0011-add-exit-fifo-to-monitor-state-of-lxc-monitor.patch +0012-Adapt-to-isulad-log.patch +0013-set-env-in-container.patch +0014-exec-refact-attach-progress.patch +0015-add-masked-paths-and-readonly-paths.patch +0016-start-separate-i-and-t.patch +0017-attach-add_terminal_fifos-Add-terminal-fifos-dynamic.patch +0018-pty-setup-pty-after-setup-rootfs-mount-options.patch +0019-resize-implement-resize-function-in-exec-start.patch +0020-confile-decode-escape-charactors-in-config.patch +0021-cgroup-add-retry-for-destory-cgroups.patch +0022-support-terminal-log.patch +0023-Supporting-rootfs-mount-propagation.patch +0024-start-do-not-check-ppid-when-set-death-signal.patch 0025-support-oci-hooks.patch -0026-remove-filelock-and-do-not-destroy-directory-when-de.patch -0027-fix-bug-of-memory-leak.patch -0028-support-rootfs-for-container.patch -0029-add-start-timeout-to-limit-start-time.patch -0030-support-block-device-as-rootfs.patch -0031-clean-add-clean-resources-api.patch -0032-Drop-all-caps-when-cap.keep-ISULAD_KEEP_NONE.patch -0033-support-mount-squashfs-in-mount-entry.patch -0034-some-small-bugfix.patch -0035-lxc-fixup-builds-with-newer-glibc.patch -0036-drop_caps-add-drop-caps-of-current-process.patch -0037-restore-default-signal-handlers-and-set-umask-0027.patch -0038-make-the-given-terminal-as-controlling-terminal.patch -0039-print-error-message-when-container-start-failed.patch -0040-add-timeout-200ms-for-cmds-send-to-lxc-monitor.patch -0041-return-1-when-_lxc_start-fails.patch -0042-lxc-seccomp-adopt-to-lxc3.0.patch -0043-check-null-pointer-of-handler-to-fix-coredump-of-att.patch -0044-support-space-in-volume-mount-and-env.patch -0045-add_terminal_fifos-Add-terminal-fifos-dynamically.patch -0046-Do-not-test-cgroup-writeable.patch -0047-Fix-memory-leak-in-lxc_global_config_value.patch -0048-clear-ONLCR-flag-from-master-of-terminal.patch -0049-Add-100ms-timeout-for-console-epoll.patch -0050-seccomp-add-rules-for-specified-architecture-only.patch -0051-if-ocihook-is-empty.patch -0052-Fix-seccomp-fail-when-all-specified-in-config.patch -0053-destroy-empty-cgroup-path-return-ture.patch -0054-fix-invalid-log-message.patch -0055-Fix-compile-error.patch -0056-caps-use-_LINUX_CAPABILITY_VERSION_3-to-set-cap.patch -0057-confile-add-support-umask.patch -0058-do-not-check-ppid-when-set-death-signal.patch -0059-delete-unused-variable-ppid.patch -0060-using-json-file-to-write-console-log-of-container.patch -0061-Fix-hook-use-the-path-args-envs-execvp-dirctory.patch -0062-setup-sysctls-before-set-read-only-path-and-masked-p.patch -0063-lxc-ignore-systemcall-load-failure-error.patch -0064-lxc-Reduce-seccomp-processing-log-level.patch -0065-Storage-return-true-if-storage_init-init-fail.patch -0066-lxc-Pids-limit-does-not-report-an-error-after-execut.patch -0067-lxc-report-error-when-remove-directory-failed.patch -0068-support-record-stdout-stderr-log-of-container-consol.patch -0069-lxc-killall-processes-if-container-shared-pid-namesp.patch -0070-lxc-signal-all-process-for-shared-container-when-con.patch -0071-lxc-get-cgroup-path-according-to-cgroup-mountpoint.patch -0072-lxc-adapt-to-docker-18.09.patch -0073-lxc-support-set-additional-groups.patch -0074-lxc-only-add-valid-fd-to-mainloop.patch -0075-lxc-add-timeout-for-attach.patch -0076-lxc-delete-unused-variable.patch -0077-lxc-set-negative-files.limit-to-max-and-fix-bug-of-s.patch -0078-Run-pre-start-hook-before-chroot.patch -0079-inherid-env-from-parent-in-oci-hooks.patch -0080-lxc-fix-compile-error.patch -0081-lxc-Change-the-range-of-attach-timeout.patch -0082-lxc-fix-memory-leak-cause-by-setenv.patch -0083-lxc-free-lxc-handler.patch -0084-lxc-memory-leak-of-lxc_grow_array.patch -0085-lxc-update-json-file-from-isulad.patch -0086-confile-add-support-systemd.patch -0087-lxc-adapt-to-spec-of-oci-hook.patch -0088-fix-lxc-build-error.patch -0089-lxc-add-get-container-processes-pids-func.patch -0090-lxc-remove-unused-variable.patch -0091-lxc-support-namespaced-kernel-params-can-be-changed-.patch -0092-lxc-add-output-error-when-create-unified-cgroup.patch -0093-optimize-isulad_kit-operator.patch -0094-exec-load-uid-gid-and-groups.patch -0095-lxc-don-t-use-the-unified-hierarchy-for-the-systemd-.patch -0096-close-inherited-fd-in-hook-process.patch -0097-lxc-report-error-when-fork-exec-error-for-hooks.patch -0098-lxc-make-dev-bind-mount-from-host-tmpfs-for-system-c.patch -0099-terminal-do-not-close-the-master-fd-of-pty.patch -0100-start-add-check-save-pid-info-file.patch -0101-lxc-fix-code-error.patch -0102-lxc-fix-compile-warnings.patch -0103-lxc-fix-code-error-in-conf.c.patch -0104-lxc-fix-code-error.patch -0105-lxc-fix-code-error-warnings.patch -0106-set-timeout-to-1s-for-cmds-send-to-lxc-monitor.patch -0107-add-log-for-failure-of-rename-file.patch -0108-check-calloc-input-valid.patch -0109-add-secure-compile-flags-to-lxc.patch -0110-add-doc-for-lxc.patch -0111-lxc-use-safe_strdup-instead-of-strdup.patch -0112-fix-secure-errors.patch -0113-Malloc-parameter-check-and-judgment.patch -0114-lxc-fix-code-errors.patch -0115-fix-compile-error-on-ubuntu.patch -0116-lxc-set-base-cgroup-path-to.patch -0117-pupulate-device-with-dir-mode-750-and-set-uid-gid.patch -0118-fix-sscanf-return-value-check.patch -0119-remove-unuse-binary.patch -0120-remove-unuse-unmount-namespace.patch -0121-optimize-log-when-root-path-is-invalid.patch -0122-lxc-fix-code-reivew-errors.patch -0123-in-accordance-with-hook-spec-in-oci.patch -0124-lxc-close-maincmd-fd-before-destroy-cgroup.patch -0125-lxc-fix-strcat-bug-in-cleanpath.patch -0126-add-user-option-for-lxc-attach.patch -0127-log-only-write-size-begin-if-buffer-is-full.patch -0128-link-proc-mounts-to-etc-mtab.patch -0129-cgfsng-add-retry-for-enter-cgroup.patch -0130-fix-snprintf-create-abstract-socket-name-bug.patch -0131-fix-commands-and-terminal-memory-leak-bug.patch -0132-lxc-fix-bug-in-cgroup-parent.patch -0133-lxc-fix-bug-in-cgfsng.patch -0134-lxc-do-cpuset-same-as-runc.patch -0135-lxc-fix-code-warnings-for-cgfsng.c.patch -0136-lxc-fix-retry-bug-in-cgroup.patch -0137-lxc-fix-bug-in-read-proc.patch -0138-resize-implement-resize-function-in-exec-start.patch -0139-lxc-fix-get-cgroup-path-by-config-instead-of-cmd.patch +0026-Supporting-UID-GID-configuration.patch +0027-Capabilites-security-feature-enhanced.patch +0028-Supporting-workdir-configuration.patch +0029-Supporting-additional-groups-configuration.patch +0030-set-negative-files.limit-value-to-max.patch +0031-head-file-remove-macro-HAVE_ISULAD-in-installed-head.patch +0032-link-proc-mounts-to-etc-mtab.patch +0033-build-add-secure-build-flags.patch +0034-support-timeout.patch +0035-Seccomp-security-feature-enhanced.patch +0036-Security-coding-modification.patch +0037-cgfsng-fix-build-error-device_cgroup_rule_parse.patch +0038-Ignore-errors-when-loading-rules-fail.patch +0039-net-adapt-to-isulad.patch +0040-cgfsng-make-container-full-path-in-cgfsng_get_cgroup.patch +0041-build-fix-some-bug-in-free-memory.patch +0042-cgfsng-make-container-full-path-in-destory-cgroup.patch +0043-support-error-report.patch +0044-remove-filelock-in-destroy-dir.patch +0045-restore-default-signal-handler.patch +0046-add-support-systemd.patch +0047-support-namespaced-kernel-params-can-be-changed-in-s.patch +0048-don-t-use-the-unified-hierarchy-for-the-systemd-cgro.patch +0049-make-dev-bind-mount-from-host-tmpfs-for-system-conta.patch +0050-clean-add-init-fd-in-lxc_init_clean_handler.patch +0051-init-pids-add-init-fd-in-lxc_init_pids_handler.patch +0052-setupdev-add-judge-whether-have-mount-dev-entry.patch +0053-attach-seprate-i-and-t-flags.patch +0054-start-do-not-check-pid-die-when-lxc_poll-exit.patch +0055-terminal-not-close-pipe-when-lxc_poll-exit.patch +0056-attach-add-sigfd-to-monitor-the-exit-of-pid.patch +0057-attach-add-read-data-from-attach-sigfd.patch +0058-support-syslog-for-console.patch -- Gitee

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